Skip to content

Annotated config template, plus a status.md progress-count fix - #41

Merged
AdamClemens merged 3 commits into
mainfrom
config-template
Aug 28, 2026
Merged

Annotated config template, plus a status.md progress-count fix#41
AdamClemens merged 3 commits into
mainfrom
config-template

Conversation

@AdamClemens

Copy link
Copy Markdown
Owner

Summary

  • Fix docs/planning/status.md undercounting Stage 4 progress by 4 tasks (29/41 -> 33/41): roadmap.md's status-line parser expects **Status: Done, DATE.**, but TASK-028/029/030 had drifted to **Status:** Done, DATE. and TASK-027 was missing a marker entirely, so all four silently parsed as "Not started" despite being implemented and merged.
  • Add docs/implementation/config-template.yaml: every PyFlowConfig field with a comment stating what's valid and what isn't, generated by a new tools/generators/generate_config_template.py from the live schema (pyflow generate-config already produces a loadable scaffold, but PyYAML can't emit comments). Wired into make config-template/make check-config-template (now part of make ci), with a completeness test that fails make test the moment a config field has no matching comment.
  • Fix status.md's Artifact column for TASK-027/028/029/030, which was showing an unrelated docs/practices.md reference instead of the real implementing file, once the first fix made those four tasks parse as Done in the first place.

Test plan

  • make ci green locally (614 tests, all generators/validators pass)
  • CI green on GitHub Actions (both platforms)

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com

AdamClemens and others added 3 commits August 28, 2026 17:13
docs/planning/roadmap.md's status-line parser expects the literal
marker `**Status: Done, DATE.**`, but TASK-028/029/030 had drifted to
`**Status:** Done, DATE.` (bold only around "Status:"), and TASK-027
was missing a status marker entirely. The generator's regex silently
treated all four as not-done, so docs/planning/status.md reported
29/41 tasks (71%) and Stage 4 as 5/9, even though all four tasks are
implemented, tested, and merged. Normalized the four markers to the
established format; status.md now correctly reports 33/41 (80%) and
Stage 4 as 9/9.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
pyflow generate-config (TASK-039) already produces a loadable default
config, but PyYAML's safe_dump cannot emit comments, so it carries no
explanation of why a value is accepted or rejected. Requested directly
by a user reading schema.py section by section to answer "what can I
configure and what values does it accept."

Add tools/generators/generate_config_template.py, which walks the live
PyFlowConfig dataclass tree and renders
docs/implementation/config-template.yaml: every field, with a comment
above it stating what counts as a valid value and what does not, using
the schema's own defaults so the file stays a real, loadable config
rather than a set of placeholder tokens.

Wire it into the same generated-and-gated pattern every other
repository document already follows: `make config-template` to
regenerate, `make check-config-template` (now part of `make ci`) to
fail on staleness, and a completeness check
(test_every_live_config_field_has_a_comment) that fails a plain
`make test` the moment a field exists with no matching comment,
independent of whether anyone remembered to regenerate the committed
file. The "keep it current" obligation this was explicitly asked for
is written into src/pyflow/configuration/CLAUDE.md, alongside the two
mechanisms that enforce it.

Update every document this touches per the Blast Radius rule: root
CLAUDE.md and the Makefile's `make ci` target list, tools/generators/
CLAUDE.md and docs/implementation/CLAUDE.md (the new generator and its
output), the repository manifest and inventory, and the roadmap's own
test-count paragraph (606 -> 614, from this change's own test suite).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
TASK-023 through TASK-026's Status markers are immediately followed by
their own artifact path, so generate_status_report.py's "first backtick
after Status" heuristic finds the real implementing file. TASK-027/028/
029/030's Status lines had no such inline path, so the same heuristic
fell through to the nearest unrelated backtick reference inside the
Intent/Design prose (docs/practices.md, in every case) -- invisible
until the prior commit fixed those four tasks' Status markers enough to
even be parsed as Done.

Add the same inline artifact reference the earlier tasks already use:
pressure_coupling.py (PISO)/gradient.py/divergence.py for TASK-027,
boundary_condition.py (Dirichlet/NeumannBoundaryCondition) for TASK-028/
029, and mesh.py's wrapped_neighbour_cell for TASK-030, which bypasses
BoundaryCondition entirely.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@AdamClemens
AdamClemens merged commit f87ceaf into main Aug 28, 2026
2 checks passed
@AdamClemens
AdamClemens deleted the config-template branch August 28, 2026 16:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant