You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
pv schema forces the count constant P7 bans: verification_summary requires total_obligations/tested as hand-maintained integers #2648
Found while executing the QUAL-014 fix (audit of #2644). APR-QUALITY-001 v1.13 P7 rules that a contract never carries a count constant — the 10-vs-16 drift in dogfood-runner-unification-v1.yaml's own summary (finding CI-1) is the demonstration. But pv validate (0.63.0) REJECTS a verification_summary without total_obligations (missing-field error), so the constant is schema-forced.
Interim state (shipped in the QUAL-014 PR): the fields carry values MEASURED from the file's own lists at edit time, with a note requiring re-measurement in any commit that touches the lists. That is drift-prone by construction — exactly what P7 predicts.
Fix options, in crates/aprender-contracts/src/schema/:
(a) Make the fields optional and have pv validate/pv status DERIVE them (|proof_obligations|, |falsification_tests|), warning when a present value disagrees — the C2 rule (docs as a projection) applied to the summary block.
(b) Keep required but add a validator error when the stated count != the derived count — turns silent drift into a RED. Cheapest; still carries the constant.
Recommendation: (b) now (one validator rule), (a) at the next schema minor.
Per CLAUDE.md this is option 2 of the pv-rejection protocol: a real engineering task with its own ticket, not a workaround.
Blocks PP-066 P-0.2 (spec §5 Track P) — parented under #2870 per the epic body (Track P lives under #2870 → #2556).
#2870's ticket map: phase 0.2 (option b) = PP-066 P-0.2 (derived verification_summary; pv validate errors on drift; 17 known drifts fixed) — a 0.66 card under #2870. Comment names the card it blocks.
triage 2026-09-23 (aprender-dd, standing triage owner): milestoned to 0.70.0, theme Fast Train (CI, gates, pv, release tooling, hygiene); it moved out of backlog (the 2026-09-17 overflow bucket, not a release).
Folded into #5310 as a checklist row (TRIAGE-100, 2026-10-14): the open-ticket cap is 100, so this ticket is now tracked on that master and closed as not planned. Nothing is lost: reopen it when its work resumes, and an open PR for it reopens it. Pushed branch: PMAT-2648-summary-count-drift.
Activity
noahgift commentedon Sep 5, 2026
Blocks PP-066 P-0.2 (spec §5 Track P) — parented under #2870 per the epic body (Track P lives under #2870 → #2556).
#2870's ticket map: phase 0.2 (option b) = PP-066 P-0.2 (derived verification_summary; pv validate errors on drift; 17 known drifts fixed) — a 0.66 card under #2870. Comment names the card it blocks.
PP-066 triage 2026-09-05 (issue #2873); ledger
docs/audits/pp-066-triage-2026-09-05.md.noahgift commentedon Sep 23, 2026
triage 2026-09-23 (aprender-dd, standing triage owner): milestoned to 0.70.0, theme Fast Train (CI, gates, pv, release tooling, hygiene); it moved out of
backlog(the 2026-09-17 overflow bucket, not a release).fix(pv): verification_summary.total_obligations is derived, not decla…
fix(b3): the four tests #4431's CI failed on at 2e74dfe
fix(4502): contracts-cli gates 290 + 430 — VS-COUNT-001 Case row; ref…
fix(4502): contracts-cli gates 290 + 430 — VS-COUNT-001 Case row; ref…
fix(b3): the four tests #4431's CI failed on at 2e74dfe
noahgift commentedon Oct 14, 2026
Folded into #5310 as a checklist row (TRIAGE-100, 2026-10-14): the open-ticket cap is 100, so this ticket is now tracked on that master and closed as not planned. Nothing is lost: reopen it when its work resumes, and an open PR for it reopens it. Pushed branch:
PMAT-2648-summary-count-drift.Agent: aprender-clerk