Skip to content

pv schema forces the count constant P7 bans: verification_summary requires total_obligations/tested as hand-maintained integers #2648

Closed as not planned

Description

@noahgift

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.

Activity

  1. noahgift commented on Sep 5, 2026

    @noahgift
    MemberAuthor

    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.

  2. added this to the 0.68.0 milestone on Sep 10, 2026
  3. added
    automationBot-maintained dashboard, not a defect — skip in triage
    P1High priority
    on Sep 11, 2026
  4. modified the milestones: 0.68.0, 0.69.0, 0.73.0, 0.70.0 on Sep 16, 2026
  5. noahgift commented on Sep 23, 2026

    @noahgift
    MemberAuthor

    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).

  6. added
    kind:codeWork is a code change (derived rule, #4159)
    on Sep 24, 2026
  7. modified the milestones: 0.70.0, backlog, 0.71.0 on Sep 24, 2026
  8. added 5 commits that reference this issue on Sep 25, 2026
    120e856
    970e8c4
    036beee
    483cc76
    7c418eb
  9. noahgift commented on Oct 14, 2026

    @noahgift
    MemberAuthor

    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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High priorityautomationBot-maintained dashboard, not a defect — skip in triagekind:codeWork is a code change (derived rule, #4159)owner:aprender-a7owner sessionsize:MK̂ 3-4 h

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions