Repository navigation
new(progress-report): replace build-plan.html with a progress report - #434
Merged
Merged
Conversation
Generated architecture/progress-report.html covers phases, built and proven views, stages P to 6, progress bar, and optional time, token and tip data from session logs (numbers only, no message text). Setting 'Progress report: off | ask | auto'. An existing build-plan.html is still accepted and never deleted. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… builtin-free repeat tips, exact --open URL Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… window from log or inferred, inherent never hangs, red at 3+ runs Context window is 1M only when the log records it, else 200k; a context above 200k with auto compactions caps at the compaction point and is labelled inferred. Inherent scripts never make hang tips or health. Red for a key script needs 3+ runs. Tips under a minute and non-script tokens dropped. CHANGELOG matches the code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Wrap code and values, stack stage label/value rows, let the gates label drop below the header, scroll the stage nav inside its own container. Add a static narrow-width CSS test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…wider log discovery, ledger fallback, Build progress) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ecision and config-folder scoping Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… cold or warm cache Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4 tasks done
…e it to project path and rules, cap cold skips, ledger decides the switch Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MendixMau
added a commit
that referenced
this pull request
Oct 16, 2026
Remove conflict markers in CHANGELOG, correct the exec timing source, the merged claim and the #434 claims, add the decompose, rehost and mxpatch bullets, and apply the cheap wording fixes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MendixMau
added a commit
that referenced
this pull request
Oct 16, 2026
Drop the stale #434 clause, align the paste-in test rule with the agreed moments, add the interview-gate hook re-install step, and use the real skill name learned-multilingual-app. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MendixMau
added a commit
that referenced
this pull request
Oct 16, 2026
#454) Opus review 454-r1: APPROVE # PR #454 review, round 1 PR: fix(progress-report): polish counts, stage 0 pending, calm no-log line Base: release/v1.0, head 98649f9 (branch fix/progress-report-polish). Up to date with base, merges clean. Verdict: APPROVE ## Must-fix None. ## What I checked 1. **"done" rows count as built (build-plan-status.sh).** Both `classify()` copies (the plan-table rollup at line 303 and the HTML tally at line 559) now use `startswith(("built", "done"))`, with "not built" still checked first. progress-report.py `classify_state` already treats `done` as built, so the two "done" readings now match. `**done** 2026-...` and `Done` both count in both parsers (probe run). `not done` does not match `done` in either. 2. **Future-stage placeholder FAIL shows PENDING (progress-report.py ~1475).** It only relabels when all of these hold: status is `FAIL`, the detail contains "placeholder", `info["current"]` is a known stage, and the stage index is strictly greater than the current one. The current stage and earlier stages keep FAIL. With an unknown current stage (no or unparseable PROJECT.md) nothing is relabelled, which is the safe default. Only two gate-check.sh FAIL messages contain "placeholder" (lines 827 and 835, both the `Confirmed by:` sign-off check), so a substantive failure on a later stage stays FAIL unless its detail happens to say "placeholder". The stage badge for a later stage is already "pending" (`stage_state` comes from PROJECT.md), so the sub line now agrees with the badge. 3. **Calm no-log line.** The orange `note-card` box is replaced by `<p class=nolog>`. The looked-in counts and the regenerate hint move into the `How this was measured` details. That block always exists when there is no log, so the line's pointer to it never dangles. `--no-log` drops the "Looked in" text and the regenerate hint. The ledger card still renders under the second `if not L:`. 4. **Test-moments wording.** Every change = "Gate check plus only the tests that touch the change" (impacted only). Build complete = "Everything, once". Before every later deploy = "Everything". Module done now names the per-flow unit tests chosen at CAC-5, listed in the module brief. That matches the rule (impacted-only per change, full run at build complete and before each deploy, unit-test choice at CAC-5) and the `Unit flows:` brief list from #417 and its follow-up. 5. **Prose and hygiene.** No em or en dashes in added prose. The only one is the CHANGELOG attribution separator ` — field review of the #434 report`, which follows the existing entry convention. No private or client names: the fixtures use Orders, Billing and Kickoff. No conflict markers. The CHANGELOG entry sits under Unreleased, is accurate and is credited, and check-pr-discipline is clean. ## Tests run (detached worktree at 98649f9, removed afterwards) | Test | Result | |---|---| | tests/wave2/test-progress-report-polish.sh (new) | 20 / 0 | | tests/wave2/test-progress-report.sh | 101 / 0 | | tests/wave2/test-progress-report-field-fixes.sh | 101 / 0 | | tests/wave2/test-progress-report-gitignore.sh | 6 / 0 | | tests/wave2/test-build-plan-json.sh | 70 / 0 | | tests/wave2/test-build-plan-status-args.sh | 6 / 0 | | bin/check-portability.sh, bin/check-pr-discipline.sh | clean | The new test against the base scripts (project-bin from release/v1.0): 12 of 20 fail. So the test pins the new behaviour. The 8 that pass on base are the pre-existing parts: report written, Stage 5 card count, Phase 2 count, and the `--no-log` "never claims it looked" checks. Discovery is already off under `--no-log`, which makes the new `and not args.no_log` guard defensive only. ## Nice-to-haves 1. **"One plan count" holds for `done`, not for the rest of the vocabulary.** progress-report.py also reads `complete`, `verified`, `proven` and `passed` as built, and `partial`, `in progress`, `started` and `wip` as partial. build-plan-status.sh reads all of these as unknown. That includes `partial` and `blocked`, which brd-to-build-plan.md line 333 lists as legal State values. Probe: one plan with rows `complete (...)`, `**done** ...` and `Done` gives "3 of 3 rows built" on the card. The plan header shows "2 built, 1 with a State cell this page cannot read" and the phase is labelled "unknown". This disagreement predates the PR, but the PR body promises the card, header and badge agree. Follow-up: share one vocabulary, or at least add `partial`/`blocked` to the sh classifier as non-built. Alternatively, reword the CHANGELOG to say "done rows" only. 2. **Narrow the PENDING relabel to `states[s] == "pending"`.** Today the relabel also applies to a later stage that PROJECT.md lists as passed, when the gate page is not stale. This happens when the current stage moves back during a change round. A real conflict, "passed but the sign-off is still a placeholder", would then read PENDING. Adding the state check costs one condition. 3. **Test gaps for item 2.** Add one test where a non-placeholder FAIL on a later stage stays FAIL, and one where an unknown current stage (no stage line) keeps FAIL. 4. **Module done wording is a little narrow.** Unit tests can also be switched on per module (`Unit modules:` in PROJECT.md, `Unit tests: yes` in the brief) or per project (`Unit tests default: yes`). "listed in the module brief" covers the per-flow default only. A shorter alternative: "plus the unit tests the CAC-5 test strategy selects for the module". 5. **Reading order.** The calm line renders after the collapsed details block, so the pointer "details in How this was measured" points upward. Consider writing the line first. 6. **Pre-existing, outside this PR's scope.** `build-plan-status.sh` called by a relative path (`bash project-bin/build-plan-status.sh <proj> --html`) says "progress-report.py is not next to this script". GEN is `$(dirname "${BASH_SOURCE[0]}")/...`, which probably breaks after the script changes directory (cause not confirmed). An absolute path works.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Replaces
architecture/build-plan.htmlwith a generated progress report (architecture/progress-report.html, self-contained, stdlib Python behindbuild-plan-status.sh). It keeps everything the old page showed (phases, built and proven views) and adds stages P to 6 with artifact links, a progress bar, a sticky stage nav, and, when a Claude Code session log is available, time per stage, sub-agent use, context size, an estimated token and cost figure, a run health strip, a speed panel and a right-hand column of actionable tips.Progress report: off | ask | autoin PROJECT.md (default ask). Regenerated on every exec.sh slice; the 30 s self-reload applies only while a build is active.build-plan.htmlis still accepted by gate-check and status.sh and never deleted.--jsonandbuild-plan.jsonare unchanged.Impact
render-routing.sh --check: base 75204 words, head 75204 words (budget 80000). Skill words total about 308277 vs 308384 on master.Tests
tests/wave2/test-progress-report.sh(new): 39 checks on a synthetic project and synthetic JSONL log.tests/wave2/test-build-plan-json.sh: 66 pass.tests/wave2/test-surface-column.sh: 13 pass.bin/check-portability.shon changed files andrender-routing.sh --check: clean.Not verified
Visual layout (sticky side column, phone order, severity dots) was not viewed in a browser. Full test suite and CI not run locally.
Round 5 measured (head 0a908a3)
~/.claude/projects: about 1 s cold, under 1 s warm (discovery cached in.claude/progress-report-sessions.txt; F13 asserts a cached run does not reopen session files).history.scrollRestoration='manual', no reload within 20 s of interaction, and a Live / Pause control (F14).🤖 Generated with Claude Code