Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ Sections dated before 2026-09-19 predate the cycle and stay as they are. Named m

## Unreleased

- fix(progress-report): **the full plan tables (one table per phase plus views A and B) now sit in one closed `<details>` card below the phase cards, so a large plan no longer pushes the rest of the report off screen; the phase cards above stay the summary, and nothing is written when the project has no plan fragment.** Test: P6 in `test-progress-report-polish.sh` — MendixMau
- fix(build-plan-status): **every State the build-plan skill lists (built, partial, not built, blocked) and every spelling the phase card already counts (complete, verified, in progress, not needed and the like) is now read the same way by the plan header and the phase badge, so card, header and badge give one count; blocked counts as not built and is named in the header, genuinely unreadable values are still reported as unreadable; the later-stage placeholder FAIL is relabelled PENDING only while that stage is pending in PROJECT.md, with tests that a real FAIL stays FAIL and that FAIL stays when the current stage is unknown** — MendixMau
- fix(release-review): **the v1.0 release review: the multilingual skill loses its em and en dashes (wording only, content unchanged; its routing row keeps the trigger separator the agent stubs cut on), `doctor.sh` warns when a hook copy in `~/.claude/hooks` calls a toolkit script that no longer exists (it names the script and says to re-run `bin/install-claude-hooks.sh --full`; a warning, never a failure), and the `.gitignore` line for `.claude/progress-report-sessions.txt` now also reaches a project checked out as a git worktree (`.git` is a file there) in `doctor.sh` and `sync-project.sh`; `check-ignore --no-index` stops the line being appended again when the file is already tracked, and a `git rm --cached` hint is printed.** Tests: new `test-doctor-stale-hooks.sh`; worktree and tracked-file cases added to `test-progress-report-gitignore.sh`. CHANGELOG tidy (a stray blank line, one credit). — MendixMau
- fix(progress-report): **round 6 of the review: the session cache is machine-local and tied to its project, the first cached run is not slower than a cold one, and the build ledger decides the Stage 4 to 5 switch.** (1) `.claude/progress-report-sessions.txt` holds absolute session-log paths, so `init-project.sh`, `doctor.sh` and `sync-project.sh` now put `/.claude/progress-report-sessions.txt` in the project's `.gitignore`, the way they do for the doctor receipt and `toolkit.env`. (2) The cache header records the project's real path and the attribution rules (25% of tool calls, 20 calls); a copied or moved project, or a changed threshold, reads it as cold, so a copy never lists the original's sessions. (3) Files skipped by the 300-file cap are recorded as `no`, so a cached run never reads more files than a cold one. (4) With rows in `metrics-ledger.tsv` (else BUILD-LOG) the switch comes from the ledger; an earlier exec.sh call or build skill in a session log is ignored, the timed sign-off rule stays, and the footer says how the switch is chosen. Tests: F15 to F17 in `test-progress-report-field-fixes.sh`, new `test-progress-report-gitignore.sh` — MendixMau
Expand Down
7 changes: 4 additions & 3 deletions project-bin/progress-report.py
Original file line number Diff line number Diff line change
Expand Up @@ -1609,9 +1609,10 @@ def chip(f, cls=""):
w("<div class=tw><table class=steps><tr><th>#</th><th>Kind</th><th>Row</th><th>State</th></tr>" + "".join("<tr class='r-%s'><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>" % (x["cls"], esc(x["n"]), esc(x["kind"]), esc(x["step"]), esc(x["state"][:90])) for x in p["steps"]) + "</table></div></details>")
w("</div>")
else: w("<div class=card>No plan to summarise yet: %s</div>" % esc(args.plan_msg or "architecture/build-plan.md was not read."))
w("<div id=plan-tables class=frag>")
w(args.fragment or "")
w("</div>")
if args.fragment: # the full plan tables repeat the phase cards above row by row, so they start folded
w("<details id=plan-tables class='card frag'><summary><b>Full plan tables and views A and B</b><div class=sub>Every row of build-plan.md with its claims and drift, the script folders (A) and module proof (B). The phase cards above already show each row.</div></summary>")
w(args.fragment)
w("</details>")
# footer
w("<footer><h2>How these numbers are derived</h2><ul>")
if L:
Expand Down
8 changes: 8 additions & 0 deletions tests/wave2/test-progress-report-polish.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
# P5 every State the build-plan skill lists (built / partial / not built / blocked) and the spellings the card
# counts (complete, verified, in progress, ...) are read the same way by the card, the plan header and the
# phase badge; a genuinely unreadable value is still reported as unreadable.
# P6 the full plan tables (the fragment) start folded under the phase cards, which already list every row; the
# "Jump to the plan tables" link still lands on them (openTarget opens a targeted <details>).
# P3 no session log: one calm line (not the orange box), the regenerate hint inside "How this was measured";
# with --no-log the page never claims it looked in folders or logs.
#
Expand Down Expand Up @@ -63,6 +65,12 @@ hasnt "$R" "cannot read" "no State cell is called unreadable"
has "$R" "1 of 2 rows built" "Phase 2 shows 1 of 2 built"
hasnt "$R" 'st-unknown">unknown' "no phase is labelled unknown"

echo "P6 full plan tables start folded"
has "$R" "<details id=plan-tables class='card frag'><summary>" "plan tables sit in a <details> with a summary"
hasnt "$R" "<details id=plan-tables[^>]* open" "plan tables are closed by default"
has "$R" "href='#plan-tables'" "the jump link still points at them"
hasnt "$R" "<div id=plan-tables" "the old open <div> wrapper is gone"

echo "P2 placeholder failure on a later stage is pending"
P2="$WORK/p2"; mkproj "$P2" "**Stage P - Kickoff**, in progress - gates passed: none"
cat > "$P2/index.html" <<'HTML'
Expand Down
Loading