fix(sdlc): the review now holds a change to the contract's acceptance list - #3465
Conversation
The delivery review looked only for defects in what changed. Nothing asked whether the change delivered the accepted contract, so a PR could converge to ready while missing acceptance items, an invariant, or the solution steering. review-scope now resolves the contract from its originating source rather than a derived summary, plan, or prior report, and records each acceptance, invariant, and steering item. A plan that drops an originating requirement is recorded as a conflict, not an accepted non-goal. review-synthesize judges every item against the whole change on every round (met with cited evidence, unmet as a blocking finding with sources [contract], or deferred to a named later step) and writes a contract coverage table into the report.
… check it A replay of the saved #2325 run showed the acceptance list was lost at triage: triage.md recorded "five criteria" without the items, and review scope resolved the contract from that summary in about half the samples. For a READY verdict, triage now quotes the source's invariants, acceptance items, and steering in its Contract section.
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (5)
Included review availability: Your plan provides up to 10 included reviews per hour; 3 remain after this review. 📝 WalkthroughWalkthroughThe review workflow now resolves acceptance items, invariants, and steering constraints from their source. It records these items in scope.md and requires review synthesis to judge each item, cite evidence, and report unmet items as findings. ChangesAccepted Contract Review
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to Unmet contract items still block review readiness, while evidence assigned to a later delivery step remains tracked for that step. No actionable issue remains in the reviewed changes; they are ready to merge after normal checks. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Problem and outcome
The delivery pack's review could call a change ready when it missed the accepted contract's acceptance list. The lenses look for defects in what changed, and no step asked whether what changed delivers what was required. On the #2325 delivery (PR #3446), the review printed the contract, fixed four diff-level findings, and declared ready while a required real-process test, the operator-visible recorded facts, and part of the solution steering were missing.
metwith cited evidence,unmetas an Important (or Critical) finding withsources: [contract], ordeferredto a named later step such as CI. An unmet item blocks ready like any Important finding. The report gains a "Contract coverage" table.findings.jsonshape; there is no second verdict channel.Review guidance
contractas a newsourcesvalue is the right attribution..archon/workflows/sdlc/review/commands/review-synthesize.md, section "Judge contract coverage".bundled-defaults.generated.tsis regenerated bybun run generate:bundled;check:bundledpasses.Solution
Synthesis owns the check because it is the only node that runs on every round. Continuation rounds skip the lenses, and both rounds of the #2325 review missed the gaps, so a lens extension would not cover round 2.
Wording changes:
ready: false. Also: an extra sentence in the verdict, a new report section 4, contract-coverage findings carrysources: [contract], and the verify step checks one coverage row per item.Validation
bun run validatepassed on the final head (includesworkflow-fixtures, 55 passed).bun run check:bundled: up to date.bundled-defaults.test.ts: 35 pass, including a new test that pins the triage, scope, and synthesis instructions.claude -p --model sonnetagainst a checkout at45e0f8080, using the saved run's artifacts (triage.md, plan.md, implementation.md, round-1 report and lens files) as round 2 started. The review target was pinned to that commit. The script and results are in my scratchpad, not the repository.7258169c5first: triage quoted all five acceptance lines in 3 of 3 samples. The review was not ready in 3 of 3. All 3 raised the missing real-process test as acontractfinding. One raised "recorded facts printed" as unmet. Another raised the related Invariant 5 line (host not stated plainly) but judged thelogger.infodiagnostic as "printed". One sample also caught that the refusal never offersabandon.slugifywithmaxLength) with 3 acceptance items, 1 invariant and 1 steering item, all evidenced by tests, and clean lens reports. It converged to ready in 8 of 8 samples across the revisions, 2 of 2 on the final prompts, with every itemmetand cited.archon-shiprun through the engine with DeepSeek (the model the original run used). The replay calls the prompts directly with Sonnet. The "recorded facts printed" finding is inconsistent (1 of 3 end to end), because the model sometimes accepts a structured log line as operator output.Links
Summary by CodeRabbit