Repository navigation
Pin the installer to the 0.3.0 runtime - #7
Merged
Merged
Conversation
`install-ladder.sh` and `check-install.sh` pinned 760977f: the build from before execution binding, the bound CI chain and the committed adoption line, still reporting `evidence-v3.1`. A scripted install delivered none of the hardening on main, and could not read a consumer's `evidence = ...` policy line at all. Both now pin c86bf47, the merge that released 0.3.0 / `evidence-v3.2`. It is the earliest commit the pin could name: the installer refuses a pin that is not already an ancestor of origin/main, so the release and the pin move could not share a PR. - PIN in both scripts, and the `PIN` constant in the installer tests. - CHECKER_SHA recomputed, because the checker changed; the suite already holds it equal to the checker's digest. - INV_SHA revalidated and unchanged: the INSTALL.md invariant block hashes to 282f2117... at both 760977f and c86bf47. - "The pin predates scripts/" is no longer true. Detaching to c86bf47 replaces the pair inside the checkout with that revision's own, older pair, reviewed with an older pin. The installer's comments, its missing- checker refusal, its closing message and INSTALL.md now say so, and say to run the bootstrap copies. Run from inside the checkout, the older checker reports DOES NOT CONFORM rather than passing. - CHANGELOG's 0.3.0 entry records the pin move instead of its absence. Regression: `test_the_pin_installs_the_hardened_release` reads verify.py at the pin and requires `evidence-v3.2`, `0.3.0` and the adoption-line reader, and requires both scripts to pin the same runtime. It fails against the old pin. Values are hardcoded rather than compared with the working tree, since a future contract bump must land one PR before the pin can follow it. Checked end to end: the scripted install into a clean HOME, against the real GitHub origin, detaches at c86bf47, verifies the invariant, and the bootstrap checker reports INSTALL CONFORMS; the installed verify.py reports evidence-v3.2 / 0.3.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016m6di8xFVdwwq949mJx9U1
Deep-Sixed
marked this pull request as ready for review
September 23, 2026 10:10
This was referenced Sep 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Work package: release integrity, step 2 of 2. Branched from
mainatc86bf47, the merge of #6. This completes the P1 finding from the repository review: the scripted install now delivers the verifier thatmaindescribes.The defect
install-ladder.shandcheck-install.shpinned760977f. That build predates execution binding (#3), the bound CI chain (#4) and the committed adoption line (#5), and still reportsevidence-v3.1. A scripted install delivered none of that hardening, and the installed verifier could not read a consumer'sevidence = "…/3"policy line.The change
PIN(both scripts, and the installer tests)760977fc86bf47, the #6 merge that released 0.3.0 /evidence-v3.2CHECKER_SHA09f65bcc…d7b92251…. The checker changed, and the suite already holds this equal to its digest.INV_SHA282f2117…INSTALL.mdinvariant block hashes identically at both pinsc86bf47is the earliest commit the pin could name. The installer refuses a pin that isn't already an ancestor oforigin/main, which is why this couldn't share a PR with #6."The pin predates
scripts/" is no longer true. Detaching toc86bf47doesn't remove the scripts from the checkout any more. It replaces them with that revision's own pair, which is older and was reviewed with the older pin. The installer's comments, its missing-checker refusal, its closing message andINSTALL.mdnow say this, and say to run the bootstrap copies. I checked that the older checker fails safe rather than passing: run from inside the checkout it reportsINSTALL DOES NOT CONFORM, expecting760977f.The
CHANGELOG.md0.3.0 entry now records the pin move instead of saying it hasn't happened.VERSIONstays 0.3.0 because nothing about evidence semantics changes.Regression
test_the_pin_installs_the_hardened_releasereadsverify.pyat the pin. It requiresevidence-v3.2,0.3.0and the adoption-line reader, and requires both scripts to name the same runtime. In an isolated copy ofmainwith the old pin, it fails on its first assertion. Its values are hardcoded rather than compared with the working tree, because a future contract bump has to land one PR before the pin can follow it.End to end
A scripted install into a clean
HOME, against the real GitHub origin, using this branch's pair:A stale-bytecode finding during verification
The first full gate run after committing showed 10 installer failures, all asserting the old pin. The committed file was correct. My negative-control step had rewritten the test file within the same second, at the same size (both SHAs are 40 characters), so pytest's
.pycpassed its mtime-and-size staleness check while still holding the old pin. I confirmed this by reading the.pycheader, cleared the untracked caches, re-ran from rung 2, and redid the negative control in an isolated copy with bytecode writing off. Earlier CI results for #2–#6 all ran on fresh checkouts, so none of them depended on a cache like this.After merge
Per the approved plan,
v0.3.0is tagged on this PR's merge commit. That is the first state holding both the 0.3.0 verifier and an installer that delivers it. The installer inside that tag pins the runtime toc86bf47. That isn't a contradiction: the bootstrap tooling and the pinned runtime are deliberately separate, andverify.pyis identical at the two commits. Consumer qualification against Cerberus follows as #8.Verification
Climb against
eeade51f5a19 + sha256:87ffca430e23, over a baseline onmainatc86bf47:lint,tests-py311andtests-py314came from CI run35846925022,
testsran locally, and the six judgment rungs are attested.drift: false; Ruff clean.35846925022
and pull_request
35846951533.
🤖 Generated with Claude Code
https://claude.ai/code/session_016m6di8xFVdwwq949mJx9U1
Generated by Claude Code
Generated by Claude Code