Repository navigation
HARNESS rows: out of the built counts; verify row shown as module sign-off status - #526
Merged
Merged
Conversation
…n-off status A HARNESS step is a module's sign-off, not a build (MendixMau decision 2026-10-21). progress-report.py and build-plan-status.sh --html now leave every HARNESS row out of "x of y built" (phase cards, plan rollup, Stage 5 card, lede). A verify-module.sh <Module> row is shown once, as its module's status on the phase card, from the same evidence #501 reads (harness_verify split into verify_evidence + module_status; nothing new measured, no extra script run, no mxcli/mxbuild call). Other HARNESS rows stay listed, marked "(not counted)". build-plan.md, build-plan.json and the text output keep every row, so agents still see the step. Fixture test-progress-harness-verify.sh rewritten to module-status form (H1-H8) plus N1-N4, both layouts: 20 fail on master, 22/22 pass on head. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
… counts - F1: a clean, LOOK n/n module whose State is blocked or pending a person is "held" (st-person), never Verified and not counted as signed off, as #501 never promoted it. - F2: the Phase state badge is rolled up from build rows only (disp_rollup); a HARNESS-only phase reads "sign-off only". build-plan.json is unchanged (byte-identical apart from generatedAt). - F3: a phase with no build rows says "Sign-off phase: no build rows", no bar. - F4: Stage 5 owed text, Build progress line and KPI add ", k of n modules signed off". - F5: stale with no build since -> "a script was marked done- after it". - F6: the lede counts sign-off modules, not rows. - Drop the now-unused harness_verify(); "(not counted)" in the fallback table. Fixture: H9, H10, N5, N6 added, N1/N2/N4 updated; both layouts. master 2/30, previous head af9876c 18/30, this head 30/30. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
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.
Direct lane
What changed and why (one paragraph):
Maintainer decision (MendixMau, 2026-10-21): a HARNESS row is a module's sign-off, not a build, so it should stop showing as an ordinary build row. Context: #446 (the verify-module/LOOK instruments) and #501 (the report reads a
verify-module.sh <Module>HARNESS row from evidence viaharness_verify()). This PR (1) leaves every HARNESS row out of the "x of y built" counts: phase cards, plan rollup and Stage 5 card inprogress-report.py, and the lede ofbuild-plan-status.sh --html("N build rows", plus a "Not counted: N HARNESS rows (… module sign-offs, … harness pass)" note); (2) shows each module's verify row once, as a sign-off line on the phase card where the row sits (the last verify row per module), with the same evidence rule as #501:harness_verify's rule is nowverify_evidence(the measurement, unchanged) andmodule_status(the label); the oldharness_verifyhad no caller left and is removed. Forms:Verified ✓ <date> (LOOK n/n),Verify owed - LOOK + CONFIRM,Verify stale (N builds since),Verify not run,built? no verify summary, plusVerify not clean <date> (<why>)for a summary with a FAULT/FINDING/SKIPPED row (kept after review),Verify clean <date>, LOOK n/n - held: State says <State>(st-person, not counted as signed off) when State is blocked or pending a person, as #501 never promoted that case, andVerify stale (a script was marked done- after it)when the staleness is a newerdone-file with no build row. A State cell that disagrees is flagged under the status; a module with no verify row gets no status; the plan card gets a one-line rollup ("Module sign-offs: k of n modules verified"), and the Stage 5 owed text, Build progress line and KPI add ", k of n modules signed off"; the lede's "Not counted" note counts sign-off modules, not rows; (3) drops the verify rows from the rendered row lists (phase-detail tables and the fallback table). Other HARNESS rows (coherence pass, harness runs) stay listed, marked "(not counted)" in both renderers. The Phase state badge is rolled up from the build rows only (display side; a HARNESS-only phase says "sign-off only", and its card "Sign-off phase: no build rows" with no bar);build-plan.jsonis byte-identical to master's apart fromgeneratedAt(checked on the fixture project).build-plan.md,build-plan.jsonand the text output keep every row: the text output ofbuild-plan-status.shlists no plan rows at all (views A and B only), and its consumers (exec.sh,gate-check.sh,status.sh) use only--refresh, so nothing agent-facing changes. (4) The report has no obligations panel; the plan note now says the gate's own record of the look is thelookobligation ingate-check.sh <project> 5(index.html), so the two are not presented as competing sources.Left open: the em dash in "Verify owed — LOOK + CONFIRM" renders as " - " because the page already replaces every em dash on output.
Impact
project-bin/progress-report.py,project-bin/build-plan-status.sh(both installed viainstall-manifest.sh; build-plan-status importsVERIFY_STEPfrom the generator, with a local copy as fallback for an older generator). No new artifact reads: the same.claude/loop/verify/<Module>/summary.tsv(verify-module.sh),design/ui-reviews/ui-review-*.html(module-review LOOK) anddocs/BUILD-LOG.md(exec.sh) that #501 reads. Builds on #501 (on master).bin/render-routing.sh --checkbase and head identical: "Baseline: 73828 words (budget 80000)", stage 6: 45003 words / 16 files, stage 7: 25464 words / 11 files on both.build-plan-status.sh --htmlmaster 388 ms → first head (af9876c) 362 ms → this head 318 ms; all within run-to-run noise (296–465 ms overall).progress-report.pyalone, first round: 101 → 110 ms (noise).Field evidence: the decision and the review case come from the maintainer (MendixMau, 2026-10-21). The verify summaries and the BUILD-LOG row in the fixture are the captured outputs under
tests/wave2/fixtures/verify-446/(written byverify-module.shandexec.sh, from #446/#501); the plan and LOOK reports are agent-authored files, written in the fixture. No client project was used.test-progress-harness-verify.sh(rewritten, H1-H10 + N1-N6, both layouts): master 2/30 (N4, the json guard, passes on both by design), first head af9876c 18/30 (H9, H10, N1, N2, N5, N6 fail), this head 30/30. Unchanged and passing on head:test-progress-report.sh101/101,test-build-plan-status-args.sh6/6,test-build-plan-json.sh70/70,test-progress-report-pages.sh54/54,test-progress-report-polish.sh53/53,test-progress-report-field-fixes.sh105/105,test-progress-report-gitignore.sh15/15. No count expectation in those changed: none of their plans renders a HARNESS row into an HTML count.CHANGELOG.mdline under Unreleased, credited "MendixMau (decision 2026-10-21)", with a "Behaviour change to check in your project:" markerrender-routing --check, leak guard, check-pr-discipline: all cleanRefs #446, #501.
Generated by Claude Code