Skip to contents

Attestation record of the build-pin-reseal tools lane (DEBT-BUILD-PIN-DRIFT, adjudicated by controller ruling 2026-11-04, remedy (b): every recipe digest pin is anchored to the git blob digest of its source file at a named commit – the shape the SS3 law already assumes for images). Per the controller hold ruling of the same date (“zero writes to the worktree pending the re-seal ruling, no exceptions”) this record is banked out-of-tree; on GREEN landing it transcribes verbatim to vignettes/articles/devlog-2026-11-04-m7-build-pin-drift-attestation.qmd with the companion pointer line in bench/m7/README.md’s devlog list:

  • vignettes/articles/devlog-2026-11-04-m7-build-pin-drift-attestation.qmd – arm-recipe digest-pin drift attestation and blob-seal law

Every hex below was emitted by command (pin-table.json / git plumbing); no digest was typed into any tool call. The reading test (bench/m7/tests/test_recipe_blob_pins.py, group (AM), registered in tests/run_all.py) re-measures every claim here against git and disk on every suite run – this file is the narrative, the gate is the authority.

1. The drift, measured

bench/m7/adapters/m7_entry.py – the frozen arm launcher – has exactly three commits in its lineage; the recipe pin never followed the last two:

commit date + subject launcher bytes (sha256 of the git blob)
2949e8a7ca626229d800396a2b2b96a6fe8773d2 2026-10-08 feat(m7): competitor benchmark harness — design+TDD RED+GREEN (U-M7-02) (#8) 7ce0c147ccb7f3c3cb5fddf8062335544823eabfb6ab5423eb23a94b480c14be
1673a7f6aa3451e4a8fac1918bf927e3d8130fc6 2026-10-19 feat(p2): redesigned kernel call sites – batch bridge, worker farm, governance, parse fast path, sidecar accounting v2 (#31) 8a9e7ef00d19bb4f39ab55b901478a450a7cfef1faee8619a140164df3b16192
54c58d70dfb5057f5089d21c5afffb46d4716118 2026-11-03 feat(m7): promote the signeR competitor row on the live-inspect witness 5abcb21e86bc91d896bcdecba35bc3549c1855a5001b8731b05ab8df165ba010

The pin was sealed honestly at the file’s origin (the constant equals the blob at the origin commit – asserted, computed, in the control unit test_control_the_origin_sealed_launcher_pin_is_rejected_today, which derives the pin text’s own first rider from the RECIPE’s history and the origin bytes from the launcher’s own git log). The stale constant sat unwatched for sixteen days; the sanctioned stage-1 bake (layer 18/33) caught it. The suite could sit green across the window because, before this lane, the recipe’s digest pins had no reading test anywhere: each literal existed in exactly one file – the recipe enforcing it.

2. What the lane shipped (committed)

Group (AM) test_recipe_blob_pins, registered in tests/run_all.py (docstring group register + MODULES): every pin site is read against four byte authorities – its own seal-commit blob, the blob at HEAD, the on-disk FLAT_INPUTS bytes that ride the build context, and the file’s last-touch lineage head – plus the completeness law (no FLAT_INPUTS COPY rides unpinned), the backing law (no 64-hex literal without a sealed site), a tamper roster whose defects derive from measured values, the dead-pin control above, and the launcher’s attested three-move lineage pinned by value (a fourth silent move reddens the suite). TDD face: single RED commit; module run 10/11 with exactly the one intended red whose payload prints the byte-true capture (pin 7ce0c147... vs disk bytes 5abcb21e... – full values in the banked files); full suite 394/395 with that one intended red. Evidence: red-module-20261104T035731Z.txt, red-module-final-20261104T040239Z.txt, suite-redcommit-20261104T035813Z.txt, baseline-suite-main.txt (384/384).

3. The PROPOSED blob-seal re-anchor – HELD for the controller’s ruling

Per the ruling, the m7_entry re-anchor is a main-face content decision owned by the controller, not a consequence of any batch-face work. The computed face (pin-table.json / pin-table.txt) – four ALIVE pins resolve byte-identically (before == after: the re-anchor changes only the seal ceremony, never a still-true value); the drifted launcher pin carries the measured value below:

source container dest current constant proposed constant seal commit state
install_sigminer_arm.R <scratch-dest>/install_sigminer_arm.R 1e34500e30d2dc1d9be837c53664cb3bfa1170928a03a5d5e2d57941369d7569 1e34500e30d2dc1d9be837c53664cb3bfa1170928a03a5d5e2d57941369d7569 34fdc2ce031be0f6d24f1f826dae67a88c5285b5 (docs(m7): P6 release-evidence campaign – parity ladder adjudicated from committed bytes; P-1 MEASURED-FALSE 22.166..67.102x filed via refusal ledger (#30)) ALIVE-unchanged
install_sigminer_arm.R /work/install_sigminer_arm.R 1e34500e30d2dc1d9be837c53664cb3bfa1170928a03a5d5e2d57941369d7569 1e34500e30d2dc1d9be837c53664cb3bfa1170928a03a5d5e2d57941369d7569 34fdc2ce031be0f6d24f1f826dae67a88c5285b5 (docs(m7): P6 release-evidence campaign – parity ladder adjudicated from committed bytes; P-1 MEASURED-FALSE 22.166..67.102x filed via refusal ledger (#30)) ALIVE-unchanged
m7_entry.py /work/m7_entry.py 7ce0c147ccb7f3c3cb5fddf8062335544823eabfb6ab5423eb23a94b480c14be 5abcb21e86bc91d896bcdecba35bc3549c1855a5001b8731b05ab8df165ba010 54c58d70dfb5057f5089d21c5afffb46d4716118 (feat(m7): promote the signeR competitor row on the live-inspect witness) DRIFTED-reseal-proposed
run_sigminer_arm.R /work/run_sigminer_arm.R 018b8f3f286cef9ae43f73ca983f903a36ef029ad42ca9568eeb22ce19af4208 018b8f3f286cef9ae43f73ca983f903a36ef029ad42ca9568eeb22ce19af4208 821319238c3dc0e5448b3f422635617c85f47298 (feat(m7): P-4 re-adjudication – dead-metric scoring cure, witnessed extraction-spectra export, byte-pin re-seal r6, evidence reification (#53)) ALIVE-unchanged
self_witness_arm.sh <scratch-dest>/self_witness_arm.sh 926ae38b08206b779755f660b09314908e1b315549a13f55c23d09ed6ac85663 926ae38b08206b779755f660b09314908e1b315549a13f55c23d09ed6ac85663 34fdc2ce031be0f6d24f1f826dae67a88c5285b5 (docs(m7): P6 release-evidence campaign – parity ladder adjudicated from committed bytes; P-1 MEASURED-FALSE 22.166..67.102x filed via refusal ledger (#30)) ALIVE-unchanged

Release path (prepared, NOT executed): green-reseal.patch alongside this record – git apply --check clean against the pristine recipe (applies-clean=True; tree-proven-pristine=True) – or the idempotent generator reseal_pins.py at the controller’s word. The sealed rust images’ roster digests stand on their own inspect attestations, not on this re-anchored recipe: the bytes those images were baked against predate the launcher’s two moves, and this record attests no identity between them and the re-sealed build face.

4. Batch-face lane note (controller ruling 2026-11-04, law verbatim)

The two fork pins (run_sigminer_arm_batch.R 3cb83336…, self_witness_batch_arm.sh 95bde922…) live on the r1-batch-arm face, not on main. They must NOT enter this lane’s main-based law: the reading test’s required-pinned-input set must derive from the branch-face p6_build_arms.FLAT_INPUTS, not from hard-coded batch-face names. When the batch face later lands on main (via its own PR), the reading test automatically requires those two pins to be blob-backed against their files – your module must already handle them, verified by that merge’s CI. All your batch-face identification work must target git show r1-batch-arm:<path> blobs, never that branch’s worktree files, which your lane never reads.

All three conditions hold: the module carries zero batch-face file names; its completeness law is derived data-side from the branch-face p6_build_arms.FLAT_INPUTS; every batch-face byte was read via git show r1-batch-arm:<path> plumbing only – zero reads, writes, builds or tests against that worktree. The three batch-face constants, identified from blobs:

batch-face constant owner (identified by blob-digest match at the r1-batch-arm head)
7ce0c147ccb7f3c3cb5fddf8062335544823eabfb6ab5423eb23a94b480c14be m7_entry.py
3cb83336eb4acb2fa16283b509d62ad49f633d3bcd34fa8ef9b8f495193d00f4 run_sigminer_arm_batch.R
95bde92228e54bf668ce48a472c5057ee34a7abbb137b3a68b3fb34d68ce076d self_witness_batch_arm.sh
  • 7ce0c147ccb7f3c3cb5fddf8062335544823eabfb6ab5423eb23a94b480c14be is the blob digest of bench/m7/adapters/m7_entry.py at 3ecd7e7c8fbe41fdd04b98ec61bf33ab555808fd (identified via git show r1-batch-arm: plumbing only; the batch face still speaks the stale launcher bytes; blob-backing via the reading test is due before the batch-face merge))
  • 3cb83336eb4acb2fa16283b509d62ad49f633d3bcd34fa8ef9b8f495193d00f4 is the blob digest of bench/m7/adapters/run_sigminer_arm_batch.R at 3ecd7e7c8fbe41fdd04b98ec61bf33ab555808fd (identified via git show r1-batch-arm: plumbing only)
  • 95bde92228e54bf668ce48a472c5057ee34a7abbb137b3a68b3fb34d68ce076d is the blob digest of bench/m7/adapters/self_witness_batch_arm.sh at 3ecd7e7c8fbe41fdd04b98ec61bf33ab555808fd (identified via git show r1-batch-arm: plumbing only)

The batch-face recipe still speaks the pre-drift launcher constant – at the batch-face merge, the (AM) gate redds until that site is blob-backed with the same ceremony; the merge’s change set is the prepared generator, executed by the merge lane, never by this lane. The merge PR (separate owner, post-merge, post-bake) carries that re-anchor; this lane prepared it and executed none of it.

5. Custody and integrity

  • Zero pushes, zero PRs; branch tools/build-pin-reseal (unpushed, one commit on main@54c58d7); r1-batch-arm head unmoved from its dispatch value 3ecd7e7; main unmoved at 54c58d7; zero sigminer refs touched.
  • Isolated worktree (main-based); the shared worktree was never written by this lane.
  • Recipe immutability proof while under hold: git hash-object of Dockerfile.sigminer.tree byte-equal to git rev-parse HEAD:<path> (b57788c7...) before and after every report-only run; git diff --quiet HEAD clean at every checkpoint.
  • CJK gate (house tool, decoded scanner): cjk_gate.sh --selftest fired on the planted Han byte (SELFTEST-FIRE) and the lane’s authored files scanned zero.
  • Zero typed digests: constants reach this record only via the computed pin-table.json; the reading test computes all of its own.