Skip to content

proofs: write the receipt under the new PROOF-POLICY 8.5 and add APP-1 to APP-4 - #90

Draft
hyperpolymath wants to merge 3 commits into
mainfrom
claude/mathesis-stage-3-reanchoring-s2qr20
Draft

hyperpolymath wants to merge 3 commits into
mainfrom
claude/mathesis-stage-3-reanchoring-s2qr20

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Summary

This rewrites the Mathesis receipt under the new PROOF-POLICY §8.5.1 to §8.5.3, which standards PRs 1534 and 1545 merged at e5a39d7 (owner rulings 2026-11-13). The receipt adds APP-1 to APP-4 and earns THY-1 again. The canon reader at e5a39d7 derives PWG-1 for all five. The new shared git checker passes on this receipt.

This is the first of two changes. The claim pins can name this receipt only after it is on main, so the next change moves them.

Changes

  • verification/receipts/theory_praxis.deed: written again from CI run 43498592499 on main 034f215 (Agda 2.7.0.1, Rocq 8.18.0, Lean 4.29.0, pinned Guix 8edb9da).
    • THY-1 is earned again. Its previous current receipts become superseded, each with a reason.
    • APP-1 to APP-4 are added. The Agda root is Applied/Missing.agda for APP-1 and APP-4, and Applied/IntLaws.agda for APP-2 and APP-3. The Rocq leg is Cohort.v and the Lean leg is Cohort.lean.
    • Every current receipt has :inputs-sha256, (axioms) (empty: the run reported none) and (inputs-manifest …). There is one manifest per prover, because §8.5.1 allows one digest for each commit and prover: it is the union of the files that the graded roots read.
    • The trusted base gains Char and String. Applied/IntLaws reaches them through Agda.Builtin.Int. I checked the lib/prim sources of Agda 2.7.0.1.
  • The home gate: the new just receipt-check, part of just check, runs the shared checker scripts/check-proof-receipt.sh against origin/main. CI fetches the history of main, and the pinned Guix shell gains jq, which the checker needs.
  • The consumer check: the registry pins the reader at e5a39d7, and it pins the checker and the digest script by their digests. It catalogues a PWG-1 only when the git checks pass against a clone of the home repository, including its pull-request heads. Otherwise it catalogues PWG-2ii and records why. ADR 0004 is amended.
  • Docs: PROOF-STATUS, PROOF-NEEDS and the ROADMAP.

Known, temporary

  • The registry view shows THY-1 as ungraded until the next change. The new reader refuses the old receipt that THY-1's claim pin names. The theory ledger records this.
  • The Rocq and Lean legs of APP-1 to APP-4 are RECONCILED by the clause-by-clause comparison in PROOF-STATUS, which I did by reading. The owner has not reviewed it yet.

RSR Quality Checklist

Required

  • Tests pass (registry tests 23 of 23, including new tests for the §8.5.3 rule; view checks; home gate)
  • No banned language patterns; no secrets; no private names; no U+2014

As Applicable

  • docs/status/ROADMAP.adoc updated
  • Proof obligations updated (APP-1 to APP-4: the receipt derives PWG-1)

Testing

In this session, on main 034f215 plus this change, with standards at e5a39d7:

  • The reader (deed_lint.js --proof-receipt-json) derives PWG-1 for THY-1 and APP-1 to APP-4.
  • just receipt-check reports "every check holds".
  • Negative control: when I changed one manifest digest, the checker failed with exit 1.
  • just check-views passes. The registry reports "derived from 3 pinned source(s); views match; the theory ledger is current and append-only (2 entries)".
  • validate-claude-md, validate-state and validate-rsr pass. The canon deed lint passes on the deed and the receipt. Every changed AsciiDoc file renders without a warning.
  • CI runs the proof lanes, just check (now with receipt-check) and the golden controls in the pinned Guix.

Screenshots

Not applicable.


Generated by Claude Code

…1 to APP-4

Standards PRs 1534 and 1545 (merged at e5a39d7, owner rulings 2026-11-13)
make every current receipt record its inputs manifest, its inputs digest
and its axioms, add echo records for squash and rebase merges, and give
the home gate and consumers a shared git checker (PROOF-POLICY 8.5.3).

- verification/receipts/theory_praxis.deed: written again from CI run
  43498592499 on main 034f215. THY-1 is earned again, and APP-1 to APP-4
  are added, each with Agda, Rocq and Lean legs. One manifest per prover:
  the union of the files that the graded roots read. The trusted base gains
  Char and String, which Applied/IntLaws reaches through Agda.Builtin.Int.
  The reader at e5a39d7 derives PWG-1 for all five.
- just receipt-check (in just check): the home gate runs the shared checker
  on this receipt against origin/main. CI fetches the history of main, and
  the pinned Guix shell gains jq, which the checker needs.
- The registry pins the reader at e5a39d7 and the checker scripts by digest.
  It catalogues a PWG-1 only when the git checks hold against a clone of the
  home repository; otherwise PWG-2ii, with the reason (ADR 0004 amended).
- THY-1 shows as ungraded until its claim pin moves to this receipt in the
  next change; the theory ledger records it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0136P7Zo9dheFQzYYWV49hAk
// instead of fetching them (the tests use it; CI fetches).
import {readFile, writeFile, mkdir} from 'node:fs/promises';
import {readFile, writeFile, mkdir, mkdtemp} from 'node:fs/promises';
import {spawnSync} from 'node:child_process';

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Traced, not yet dismissed: this is a security finding, so it stays open for the owner's decision.

The import serves the PROOF-POLICY §8.5.3 duty, which needs git. Every call is spawnSync(program, argv) with no shell option, so no shell parses the arguments.

  • Since bdcc599, each program (git, bash) runs by its absolute path, found only in absolute directories of PATH (findTool).
  • The arguments are constants, temporary paths that this process makes, the checker path (pinned by sha256 in CHECKER), and https://github.com/<repo>.
  • <repo> comes from a claim pin that validate() limits to ^[-\w.]+\/[-\w.]+$ and to repositories that the census lists as public.

The same pattern in scripts/site/site.mjs carries hypatia:ignore js_exec_sync (commit 493dd9c). I will add the same annotation here only if the owner rules for it.


Generated by Claude Code

The Proven test suite pinned its own checkout of the reader at be39f90,
which refuses the new :inputs-sha256 field (run 43513006338). Pin it at
e5a39d7, the commit the registry pins, and add the two checker scripts
that the registry's git checks need to its sparse checkout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0136P7Zo9dheFQzYYWV49hAk
…loop

Answers the SonarCloud findings on the git checks: S4036 (a program found
through PATH), S3776 (deriveAll too complex) and S9382 (await in a loop).
Each program now runs by its absolute path, found in an absolute directory
of PATH, as scripts/site/site.mjs does for asciidoctor. deriveAll reads each
distinct receipt once, derives, then runs each needed git check once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0136P7Zo9dheFQzYYWV49hAk
@sonarqubecloud

Copy link
Copy Markdown

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants