Skip to content

Release 0.29.1 - #530

Merged
ocots merged 8 commits into
mainfrom
release/0.29.1
Jul 30, 2026
Merged

Release 0.29.1#530
ocots merged 8 commits into
mainfrom
release/0.29.1

Conversation

@ocots

@ocots ocots commented Jul 30, 2026

Copy link
Copy Markdown
Member

Release 0.29.1

Patch release with no breaking changes.

Changes since 0.29.0

  • Enforce Handbook tenet 2: using, never import #528using, never import (Handbook tenet 2): replaced every import statement with the qualified using form (using Pkg: Pkg instead of import Pkg) across all source files, extensions, and tests (174 files). No public API, type, or signature changes.
  • Docstring fix: corrected function names in docstring examples for option_is_user, option_is_default, option_is_computed.
  • Documentation: fixed import convention wording in AGENTS.md and added missing Handbook tenets; guide pages switched to using form for submodule examples.

Files updated

  • Project.toml — version bumped to 0.29.1
  • CHANGELOG.md — added [0.29.1] entry
  • BREAKING.md — added non-breaking note for 0.29.1

@ocots ocots added run ci Trigger CI run documentation Trigger documentation labels Jul 30, 2026
@ocots ocots closed this Jul 30, 2026
@ocots ocots reopened this Jul 30, 2026
@ocots

ocots commented Jul 30, 2026

Copy link
Copy Markdown
Member Author

Fix for Julia 1.10 JET failure

The JET UndefVarError: NotProvidedType not defined on Julia 1.10 was caused by the using ..Core: Core import introduced in #528. On Julia 1.10, JET's static analysis resolves the name Core to the standard library Core module (which has no NotProvidedType) rather than CTBase.Core, when evaluating type annotations like Core.NotProvidedType in function signatures.

The previous import CTBase.Core was unambiguous because it explicitly bound the full module path. The using ..Core: Core form — while correct per Handbook tenet 2 — creates a binding that clashes with the stdlib Core on Julia 1.10's JET.

Fix (commit 9cf7171)

Import NotProvided and NotProvidedType directly from Core and use them without the Core. prefix in code:

# Before (clashes with stdlib Core on JET 1.10)
using ..Core: Core
# ... Core.NotProvidedType in type annotations

# After
using ..Core: Core, NotProvided, NotProvidedType
# ... NotProvidedType directly (no module prefix)

Changed files:

  • src/Options/Options.jl — added NotProvided, NotProvidedType to using line
  • src/Data/Data.jl — same
  • src/Options/option_definition.jlCore.NotProvidedTypeNotProvidedType (5 code sites)
  • src/Options/extraction.jlCore.NotProvidedTypeNotProvidedType (2 code sites)
  • src/Data/control_law.jlCore.NotProvidedType/Core.NotProvidedNotProvidedType/NotProvided (2 code sites)

Docstring references to CTBase.Core.NotProvided are left unchanged (they're documentation, not code). The Core binding is retained for Core.get_format_codes and other display helpers (function calls, not type annotations — not affected by the JET issue).

@ocots ocots removed the run ci Trigger CI label Jul 30, 2026
@ocots

ocots commented Jul 30, 2026

Copy link
Copy Markdown
Member Author

Fix for Documenter @ref warning on Series

The warning Cannot resolve @ref for "[Series](@ref)" in docs/src/api/internals.md was caused by unqualified @ref links in docs/src/guide/plotting.md. The page sets CurrentModule = CTBase, so Documenter looked for CTBase.Series instead of CTBase.Plotting.Series.

Fix (commit df1e5d4)

Qualified all 21 unqualified @ref symbols in docs/src/guide/plotting.md to their full CTBase.Plotting.* path:

<!-- Before -->
[`Series`](@ref)

<!-- After -->
[`Series`](@ref CTBase.Plotting.Series)

All IR types (Series, HLine, VLine, Axes, Leaf, HBox, VBox, Figure, leaves), building blocks (Panel, lower), combinators (Stacked, Paired, Grid), and backend symbols (AbstractPlottingBackend, PlotsBackend, render, render!) are now fully qualified.

@ocots ocots closed this Jul 30, 2026
@ocots ocots added the run ci Trigger CI label Jul 30, 2026
@ocots ocots reopened this Jul 30, 2026
@ocots

ocots commented Jul 30, 2026

Copy link
Copy Markdown
Member Author

Qualify all @ref cross-references per Handbook convention

Per the Handbook docstring rules, all @ref links must use the full module path including the root package: [CTBase.Plotting.Series](@ref) — not [Series](@ref).

Fix (commit 81e2f41)

Qualified all unqualified @ref cross-references across 20 files (129 insertions, 123 deletions):

Source docstrings:

  • src/Plotting/Plotting.jl — module docstring reformatted with sub-lists; all @ref qualified to CTBase.Plotting.*
  • src/Plotting/ir.jl — 32 @ref qualified (Series, HLine, VLine, Axes, Leaf, HBox, VBox, Figure, Decoration, leaves, render!, default_size)
  • src/Plotting/combinators.jl — 4 @ref (VBox, HBox)
  • src/Plotting/heuristics.jl — 4 @ref (Leaf, VBox, HBox, default_size)
  • src/Plotting/lowering.jl — 3 @ref (Panel, Leaf)
  • src/Plotting/panel.jl — 7 @ref (lower, Panel)
  • src/Plotting/contract.jl — 5 @ref (AbstractPlottingBackend, PlotsBackend, render, render!)
  • src/Interpolation/ — 10 @ref (Interpolant, AbstractInterpolation, ctinterpolate, ctinterpolate_constant)
  • src/Options/not_stored.jl — 3 @ref (NotStoredType, extract_option)
  • src/Core/function_utils.jl — 2 @ref (to_out_of_place, _promote_arg_eltype)
  • src/Traits/helpers.jl — 1 @ref (_caller_function_name)

Extensions:

  • ext/CTBasePlots.jl — 3 @ref (Series, Plotting._TITLE_FONT_SIZE, Plotting._LABEL_FONT_SIZE)
  • ext/TestRunner/test_selection.jl — 2 @ref (TestRunner._collect_test_files_recursive, TestRunner._ensure_jl)
  • ext/CTBaseDifferentiationInterface.jl — 2 @ref (_derivator)

Documentation guides:

  • docs/src/guide/plotting.md — 21 @ref (already done in previous commit, refined here)
  • docs/src/guide/interpolation.md — 6 @ref (Interpolant, ctinterpolate, ctinterpolate_constant)
  • docs/src/guide/unicode.md — 6 @ref (ctindice, ctindices, ctupperscript, ctupperscripts)
  • docs/src/guide/performance.md — 2 @ref (Data.VectorField, Data.Hamiltonian, Interpolation.Interpolant)
  • docs/src/guide/color-system.md — 10 @ref (Core.Palette, Core.Style, Core.set_palette!, etc.)

Section-level references (e.g. [Options System](@ref), [Implementing a Strategy](@ref)) are left as-is — these are Documenter page/section anchors, not symbol references.

@ocots

ocots commented Jul 30, 2026

Copy link
Copy Markdown
Member Author

Fix: NotProvidedType resolution and stdlib Core ambiguity (commit 9ee4575)

Problem

After moving NotProvided and NotProvidedType from Options to Core, the using ..Core: Core, NotProvided, NotProvidedType import caused two issues:

  1. Julia 1.10 JET failureusing ..Core: Core is ambiguous with the stdlib Core module. JET on 1.10 resolves Core to the stdlib, not CTBase.Core, causing UndefVarError: NotProvidedType not defined.
  2. Namespace pollution — importing NotProvided and NotProvidedType directly into Options made them visible as Options.NotProvided, breaking tests that assert !isdefined(Options, :NotProvided).

Solution

  • Removed all using ..Core imports from Options.jl and Data.jl.
  • Added using CTBase: CTBase to both modules to bring the parent module into scope.
  • All code references now use the fully qualified path: CTBase.Core.NotProvidedType and CTBase.Core.NotProvided.
  • CTBase.Core.get_format_codes(io) is used in Base.show for OptionDefinition.

Verification

  • Julia 1.10: 361/361 tests pass (including JET test_code_quality.jl).
  • Julia 1.12: 118,478/118,478 tests pass (full suite).
  • !isdefined(Options, :NotProvided) and !isdefined(Options, :NotProvidedType) tests pass.

@ocots
ocots merged commit f8085c4 into main Jul 30, 2026
12 checks passed
@ocots
ocots deleted the release/0.29.1 branch July 30, 2026 19:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

run ci Trigger CI run documentation Trigger documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant