Run the append gate on receipt 0.6.0: commit-addressed verification - #248
Conversation
Co-Authored-By: GPT-6 <gpt-6@openai.com>
Co-Authored-By: GPT-6 <gpt-6@openai.com>
Co-Authored-By: GPT-6 <gpt-6@openai.com>
Co-Authored-By: GPT-6 <gpt-6@openai.com>
Co-Authored-By: GPT-6 <gpt-6@openai.com>
PROGRESS.md is the lane's working log, not part of the shim. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Maintainer read of 727cd47 (the lane's five commits plus one that keeps its log out of the tree), against the plan's section 3.10 and receipt 0.6.0 as installed. What we ran. The requested suite at this head with the released wheel ( Each item of 3.10 against the diff.
The PR body recommends "require branches to be up to date before merging" on Independent round. GPT-6 Astra on 727cd47, verdict block verbatim in the next comment. |
|
Independent round 1 on 727cd47 (GPT-6 Astra, 2026-09-05), verdict block verbatim. The medium (the base commit and tree missing from the verdict line on |
The verdict line named the candidate pair only; with --base-ref the verdict is a function of the base tree as well, and the package returns its identity. The second line now carries "base commit <oid> tree <oid>" after the candidate pair whenever a base was supplied, and every test that pins the line (the three workflow paths, the accepting release, the line-ending case, the adversarial subject check and the byte-equivalence proof) asserts the base pair from the fixture's own object ids. The proof helpers' docstrings no longer describe a checkout the shim makes; the package judges the commit's objects. Measured: ruff clean; isolation, adversarial and transparency suites 80 passed, 5 xfailed at this head. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Three comments in the proof helpers still said the shim checks the named commit out; the package reads its objects and materializes them privately. Wording only; the transparency module passes unchanged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Independent round 2 on 5a9d02f (GPT-6 Astra, 2026-09-05), verdict block verbatim: approve, one low (three proof comments still said "checks out"), folded on top as 93187f4. Merging with a merge commit on agreement and green CI; the byte-identical workflow copy on |
Receipt 0.6.0 binds the append verdict to a named commit and its tree. This migrates the isolated-checkout shim from #241, preserving its four Chronicle spec-binding wrappers and required full-OID parser while delegating object verification to the released package.
Pin and release preconditions
pyproject.tomlpinsreceipt==0.6.0;uv.lockrecords the published wheel and sdist hashes. Wheel SHA-256:84dd540bc77f14547bcf5b4654ff22184a404aa280d8b13cda8e179593575734.The annotated
v0.6.0tag peels toa2228e40fc0bb2d8e525cae61b91ea495eec4112, the reviewed head named in receipt #59. Saved PyPI metadata and the completed publish-verification log confirm publication; the local wheel matches the published hash. All 14 installed receipt files match that wheel byte for byte. The exactv0.5.2..v0.6.0append-gate diff confirms the commit parameter and seven-field verdict contract.Contract and responsibility
--commitremains required, without a default, and reuses_object_id_argumentto require a full OID. The four spec-binding wrappers remain.verify_append_gatenow requirescommitand delegates toverify_append_gate_verdict, returning itsAppendGateVerdict. Success prints the unchanged summary, thencandidate commit <candidate_commit> tree <candidate_tree>using the package's fields.The package selects and rehashes commit/tree/blob objects, establishes ancestry against the selected base, and privately materializes protected bytes for its leaf verifier. The candidate's working tree and index do not supply the verdict's bytes. The shim's seven checkout, scan, hash and worktree-removal functions are deleted.
The shim retains the frozen process environment, private scratch/configuration lifetime, full-OID argument parser and Chronicle-owned spec and trust anchors. The outer freeze remains necessary because the public append entry refuses redirecting variables before the reader sanitizes its environment, and because the shim's own configuration commands precede that reader. The package drops every inherited
GIT_*, creates its own safe.directory-only global configuration, and audits includes, hooks, filesystem monitors, program-valued connection settings, partial clones and fsck weakening settings itself. The shim keeps only its existing additional local/worktree policy againstfilter.*,core.sparseCheckoutandcore.sparseCheckoutCone, plus the audit of its own global/system scopes. Receipt does not refuse those additional settings because object reads use neither filters nor the sparse index. The module docstring states these boundaries and the same-user trust boundary.The pin also removes receipt APIs eagerly imported by the companion release-chain shim. Four unused git-helper aliases and
materialize_base_treeare removed. Its remaining history/base-chain wrappers use entered snapshots;--base-refnow compares HEAD objects and verifies that same candidate's private materialization. Ordinary directory verification, legacy help bytes and the authenticated oracle fixtures are preserved. Two CLI tests cover valid committed history under a dirty workspace and a committed rewrite hidden by a repaired workspace.Workflows and default-branch copy
The
pull_request_targetpath passes--root "$candidate" --commit "$MERGE_SHA" --base-ref "$BASE_SHA". The candidate path captures and validatesgit -C "$GITHUB_WORKSPACE" rev-parse HEADbefore passing--commit "$workspace_sha"; this preserves #241's protection against an unnoticed failed command substitution. Push passes--commit "$GITHUB_SHA", and the candidate checkout retainsfetch-depth: 0.Both base-owned help-probe compatibility branches are retained. Every shell block enables pipefail. A byte-identical copy is committed on
shim/receipt-0.6-workflowformain, following #242; its head is2f9f5de5c534d15fc64d70a6f742deb7ccf784ba. Main already carries all three commit arguments from #242, so this copy updates the documentation and shell-block form.Recommend enabling require branches to be up to date before merging on
codex/thesis-ledger-facts. A stale GitHub test merge remains a consumer branch-protection concern; no branch protection was changed.Tests and byte-equivalence proof
The pre-bump proof at receipt 0.5.2 passed all 18 cases. At the released 0.6.0 wheel:
The isolation suite previously held 37 cases. Ten tests whose subject was a private checkout, its index/byte comparison, or its worktree registration are removed because the shim no longer creates that subject. Committed unsafe entries, attributes, configuration refusals, parser behavior, frozen environments and scratch cleanup remain covered. Seven new cases enforce the required commit and exercise acceptance/refusal for the PR-target, candidate and push paths against the installed wheel. They assert exact verdict OIDs with disagreeing HEAD/index/workspace, and refusal when repaired local state conceals bad committed data. Subprocess environment recording includes the package's long-lived cat-file child and asserts no worktree command runs.
The released-pin proof and workflow companions passed together: 91 passed in 31.31s. Summary/refusal bytes agree with the authenticated original scripts, and the new verdict line is asserted separately. The original fixture hashes are unchanged. Ruff checks and workflow shell syntax checks pass. Both direct append invocations on the committed implementation head pass, with and without a base.
Shell DNS prevents both branch pushes in this sandbox. These results are local; the PR's Append gate and Trusted base append gate checks remain pending and must pass before this draft is ready.
🤖 Generated with Claude Code