Skip to content

docs: close the cahier — §12 walk, F4, retire docs/reports/ (E6-C) - #942

Merged
ocots merged 1 commit into
mainfrom
docs/close-cahier
Sep 2, 2026
Merged

docs: close the cahier — §12 walk, F4, retire docs/reports/ (E6-C)#942
ocots merged 1 commit into
mainfrom
docs/close-cahier

Conversation

@ocots

@ocots ocots commented Sep 2, 2026

Copy link
Copy Markdown
Member

Final phase of the documentation-rewrite campaign. Walks the cahier's §12 global acceptance criteria, reconciles the stale symbol count (F4), documents the last shim-coverage gap, and retires the now-spent specification set (decisions.md §6).

§12 global acceptance criteria — the walk

# Criterion Evidence Verdict
1 docs/Project.toml resolves against root Project.toml make.jl LOAD_PATH-stacks the root env; the full E6-C build resolves and executes ✅ met
2 make.jl runs with draft = false, log clean of resolution errors Mechanism changed in phase E5: make.jl ships draft = true globally; all 43 content pages opt back in with Draft = false in their @meta; only solve/gpu.md stays drafted (issue #885), api/ecosystem.md has no executable code. Build log: exactly the 6 pre-existing upstream @extref (Plots.plot(::CTModels.Solutions.Solution) ×4, CTBase.Strategies.parameter ×2) in the tolerated warnonly classes; 0 internal @ref breakage; 0 failed to run. ✅ met on substance — the criterion's literal wording (draft = false) predates the E5 per-page opt-in and should be reworded to "every content page executes except the deliberately-drafted gpu.md"
3 No user-facing page contains Lie(, , HamiltonianLift, OptimalControl.VectorField, bare autonomous=, Flow(ocp, u, g, — except the Migration page grep: off migration.md, the only occurrences are the rename tables on geometry/ad.md and geometry/overview.md, labelled stale-form demos on geometry/lie-macro.md and flows/from-hamiltonians.md, and comments on functional-api.md explaining CTModels' real time_dependence!(…; autonomous=…) signature. No live-code violation. ✅ met on substance — the rename tables on the two geometry hub pages are deliberate (attic audit §1); the criterion should say "except migration/rename tables and labelled stale-form demos", not "except the Migration page"
4 Every capability in §6 has a page walked bullet-by-bullet: Modelling (5), Direct resolution (6), Results (3), Flows (10), Geometry (6) — each resolves to a live page. ∂ₜ shares geometry/ad.md (as the §7 sitemap and api-coverage.md §9 both intend). ✅ met
5 docs/api-coverage.md has no uncovered re-exported symbol enforced by the build: docs/api_reference.jl errors the build if any of the 203 names(OptimalControl) is absent from API_THEMES, or if a theme lists a non-exported, non-qualified name. Passes in this build. ✅ met (command: the docs build)
6 docs/attic/ is gone test ! -d docs/attic ✅ met (#940)
7 Every §8.2 deprecated spelling throws a PreconditionError naming its replacement, or is documented in the Migration page as unshimmable with the reason runtime-checked: 9 shims throw PreconditionError (Lie, , HamiltonianLift, Flow(f::Function), the 5-positional Hamiltonian-flow call, the 4-positional state-flow call, time(ocp), time(sol), success(sol)); Flow(ocp, u, g, μ) throws upstream in CTFlows naming the keyword form (CTFlows#401 closed); autonomous=/variable=/inplace= and augment=true are unshimmable and documented (migration.md "What could not be shimmed"); the OptimalControl.VectorField prefix is not breaking. CTSolvers.Modelers.ADNLP() / CTDirect.Collocation()now added to that table by this PR. ✅ met (after this PR's migration.md row)

Changes

  • F4docs/reports/99-api-coverage.mddocs/api-coverage.md. names(OptimalControl) is 203, not the stale 193: top-line and the §4/§7/§8 subtotals corrected (47→58, 22→25, 24→26), the "flagging for whoever next" note resolved (the 3-symbol gap is the §13 deprecated shims Lie//HamiltonianLift, now real exported bindings). Header reframed — the theme half of coverage is enforced by docs/api_reference.jl's build-time assertion; this file is the guide-side record.
  • docs/src/migration.md — the Flow(ocp, u, g, μ) row's "suggestion text is currently wrong" note is stale (CTFlows#401 fixed; verified it now names Flow(ocp, u; constraint=g, multiplier=μ)). New "What could not be shimmed" row for CTSolvers.Modelers.ADNLP() / CTDirect.Collocation(): UndefVarError on the module name — CTSolvers/CTDirect/CTParser are deliberately not re-exported; the constructors themselves are, so write OptimalControl.ADNLP() / OptimalControl.Collocation().
  • Retire docs/reports/ — the spec set was tracked only to be a stable contract for the campaign's ~13 PRs; that job is done. Keep only the coverage matrix; delete 0010 and the Work board. Not built, not consumed programmatically. Four comment paths in docs/api_reference.jl updated.

Verification

Docs build (julia --project=. docs/make.jl): exit 0, VitePress site builds, the api_reference.jl completeness assertion passes (all 203 symbols), only the 6 pre-existing upstream @extref "cannot resolve", 0 internal @ref breakage.

Follow-up (not in this PR)

Investigating criterion 7 surfaced that the ecosystem deprecates removed v2.0 spellings four different ways — hard PreconditionError (OptimalControl deprecated.jl, CTFlows guards), soft Base.depwarn still working (CTBase is_parameter_type), silent alias (CTParser euler_beuler_implicit, trapezoidaltrapeze), and nothing at all (CTSolvers, CTDirect, CTModels, CTLie). A coherent deprecation policy across the repos is a separate work item.

🤖 Generated with Claude Code

Final phase of the documentation-rewrite campaign. Walks the cahier's §12
global acceptance criteria (recorded in the PR body), reconciles the stale
symbol count (F4), documents the last shim-coverage gap, and retires the
now-spent specification set.

- **F4** — `docs/reports/99-api-coverage.md` → `docs/api-coverage.md`.
  `names(OptimalControl)` is 203, not the stale 193: top-line and the
  §4/§7/§8 subtotals corrected (47→58, 22→25, 24→26), the "flagging for
  whoever next" note resolved (the 3-symbol gap is the §13 deprecated
  shims, now real exported bindings). Header reframed: the *theme* half of
  coverage is enforced by the build-time assertion in `docs/api_reference.jl`;
  this file is the guide-side record.

- **migration.md** — the `Flow(ocp, u, g, μ)` row's "suggestion is wrong"
  note is stale (CTFlows#401 fixed, verified: it now names the keyword
  form). New "What could not be shimmed" row for
  `CTSolvers.Modelers.ADNLP()` / `CTDirect.Collocation()`: `UndefVarError`
  on the module name — `CTSolvers`/`CTDirect`/`CTParser` are not
  re-exported by design; the constructors themselves are, so write
  `OptimalControl.ADNLP()` / `OptimalControl.Collocation()`.

- **Retire `docs/reports/`** — the spec set was tracked only to be a stable
  contract for the campaign's ~13 PRs; that job is done. Keep only the
  coverage matrix (moved to `docs/api-coverage.md`); delete `00`–`10` and
  the Work board. Not built, not consumed programmatically; four comment
  paths in `docs/api_reference.jl` updated.

Docs build clean: exit 0, the `api_reference.jl` completeness assertion
passes (all 203), only the 6 pre-existing upstream `@extref`, 0 internal
`@ref` breakage.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@ocots ocots added the run documentation Trigger Documentation label Sep 2, 2026
@ocots
ocots merged commit 04f5c75 into main Sep 2, 2026
9 checks passed
@ocots
ocots deleted the docs/close-cahier branch September 2, 2026 09:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

run documentation Trigger Documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant