feat: require proof-backed PR review handoff claims (Closes #395)

Reviewer final reports must not claim proof-sensitive workflow steps
unless each claim carries explicit command/tool evidence or structured
MCP result metadata:

- New reviewer_proof_backed_claims.py verifier covering the five claim
  families from the issue: inventory completeness (explicit pagination
  metadata required; page-size assumptions rejected), earlier-PR skips
  (per-PR command/tool or structured mergeability/blocker evidence),
  baseline validation (worktree path, target SHA, dirty-before, exact
  command, exact result, dirty-after), master integration (exact
  merge/rebase/simulation command), and cleanup (final git worktree
  list proof).
- PROOF_PROVENANCE_CLASSES constant distinguishes command actually run,
  MCP metadata, inherited from previous blocker state, and not checked.
- Re-export from review_proofs and wire into build_final_report as a
  downgrade check with proof_backed_claims_proven/violations fields.
- New workflow section 30A documents the rule; contract test locks the
  marker and an export test locks the re-export.
- 13 tests in tests/test_reviewer_proof_backed_claims.py covering the
  required scenarios: baseline claim without command, skipped-PR claim
  without evidence, inventory-complete from page-size assumption only,
  cleanup without final worktree proof, and a fully proof-backed report
  passing.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
This commit is contained in:
2026-07-07 10:30:32 -04:00
co-authored by Claude Opus 4.8
parent 7db8298cdd
commit e1e76f0420
5 changed files with 376 additions and 0 deletions
@@ -836,6 +836,37 @@ Include:
If the report and actual tool/command log disagree, fix the report before final output.
## 30A. Proof-backed claims rule (#395)
Do not claim proof-sensitive workflow steps unless each claim is backed by
explicit command/tool evidence in the transcript or structured MCP result
metadata.
Inventory completeness claims must include explicit pagination metadata:
`has_more=false`, `is_final_page=true`, `inventory_complete=true`, or the
total count. Do not claim inventory completeness from a page size assumption.
Earlier-PR skip claims must include explicit command/tool proof for each
skipped PR, or structured inventory fields proving non-mergeable or
prior-blocked state.
Baseline validation claims must include the baseline worktree path, baseline
target SHA, baseline dirty-before status, exact baseline validation command,
exact baseline result, and baseline dirty-after status.
Review-worktree master-integration claims must include the exact
merge/rebase/simulation command and result.
Cleanup claims must include final `git worktree list` or equivalent proof
that session-owned worktrees were removed.
Every proof-sensitive claim must distinguish its provenance:
* command actually run
* MCP metadata
* inherited from previous blocker state
* not checked
## 31. Final report must distinguish mutation types
Do not use the legacy field `Workspace mutations`.