Skip to content

repo: pin the content surface to the object store - #10

Merged
xor-machine merged 5 commits into
devfrom
repo/wall-blobs
Sep 2, 2026
Merged

repo: pin the content surface to the object store#10
xor-machine merged 5 commits into
devfrom
repo/wall-blobs

Conversation

@xor-machine

Copy link
Copy Markdown
Contributor

Two P1 findings from the Codex adversarial review of the organisation's CI: the wall scanned the working tree with grep -I, so a tracked binary blob carrying the banned name passed as clean, and a symlink was followed to its target instead of being scanned as the blob it is.

The contract now pins the content surface: every blob the scanned commit's tree tracks, read from the object store, bytewise; a symlink scanned as its own blob and never followed; a blob that is not UTF-8 reported with [binary blob] in place of the line; an unreadable blob a git work tree refusal.

Commits, in producer order: the amendment; five subprocess tests written by Codex against it, red before the implementation existed; the implementation by Claude, which moves to the contract while the tests stand; then the one pre-existing test that asserted the superseded behaviour, brought onto the contract by the test producer.

🤖 Generated with Claude Code

https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY

Apply Push Bridge and others added 4 commits September 1, 2026 19:47
A working-tree scan skipped what `grep -I` calls binary and followed
symlinks to their targets, so a tracked blob carrying the name could
land while the wall reported clean. The content surface is now every
tracked blob, read from the object store, bytewise; a symlink is
scanned as the blob it is, never followed; a blob that is not UTF-8
reports `[binary blob]` in place of the line.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260901T234752Z-apply-push-4f650a
Patch-SHA256: 82bfe322636865f3130a554e957100917ee1f99402bea2137f9635d8cc838575
Five subprocess tests, each in its own temporary repository: a blob
that is not UTF-8 carrying the planted fault, a symlink whose target
text carries it, a clean symlink to a clean file, a clean commit with
a dirtied working tree, and a committed fault deleted from the
working tree. Written against the pinned contract, before the
implementation; red until it moves.

Source: original
Co-Authored-By: Codex <noreply@openai.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260901T235011Z-apply-push-77cd09
Patch-SHA256: 7b9e0252dd5761078e3b1a1f88134326ef7d53ec10efdb4b55d5b9538c9d5e06
Enumerate the scanned commit's tree with `git ls-tree -r -z`, read
each blob with `git cat-file`, scan bytewise; a symlink is scanned as
the blob it is and never followed; a blob that is not UTF-8 reports
`[binary blob]` in place of the line; a blob that cannot be read is a
`git work tree` refusal. Implementation moves to the pinned contract;
the tests stand.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260901T235752Z-apply-push-437ac9
Patch-SHA256: 47bcffbb08b404c5732c0e9ef2ed74a2344887559f096ab5c6dfe6f74048ccd2
The pinned content surface makes every tracked blob scannable, so
the pre-existing test asserting that a binary blob passed as clean
contradicts the contract. The binary-blob test written against the
amendment covers the case.

Source: original
Co-Authored-By: Codex <noreply@openai.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260901T235927Z-apply-push-91f0e5
Patch-SHA256: 5f57e606b263e185759beacf0f8ec59baa69a00b7b4c23c80e85b3c8e6aa3a9f
@xor-machine
xor-machine marked this pull request as ready for review September 1, 2026 23:59
The content surface is the scanned commit's tree, so a planted file
that is only staged is not on it. The self-test now commits the plant
before expecting the wall to fire.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T000046Z-apply-push-aa7d57
Patch-SHA256: fa75a5987b8760303465c1ab5e6ec4a2aa9e52100f37a9e9a34a7537baa00fd6
@xor-machine
xor-machine merged commit 594f43d into dev Sep 2, 2026
1 check passed
@xor-machine
xor-machine deleted the repo/wall-blobs branch September 2, 2026 00:18
xor-machine pushed a commit to minspec/workbench that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004028Z-apply-push-4faea8
Patch-SHA256: 57e5b08eab2bf07672c3ea101dcf7443de3419d46713583a712cf8cef7c1c6ba
xor-machine pushed a commit to minspec/skeleton that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge. The e2e job called the reusable workflow
in workbench at the mutable `dev`; pin it to the current dev commit.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004034Z-apply-push-c1e45f
Patch-SHA256: 34fe6902c5e921f8d37c9bba39cbd394b7cc91b70275cc46eab878199b8942c7
xor-machine pushed a commit to minspec/workbench-fixtures that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge. The e2e job called the reusable workflow
in workbench at the mutable `dev`; pin it to the current dev commit.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004040Z-apply-push-42a20d
Patch-SHA256: ab87de44654606fe4f2e2e2132496610a1aa6e59013b28a94c079f930ed6f575
xor-machine pushed a commit to minspec/recipes that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge. The e2e job called the reusable workflow
in workbench at the mutable `dev`; pin it to the current dev commit.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004046Z-apply-push-2cfd0c
Patch-SHA256: 63cb576da555e6faa8de431db398c22cf34346acb764980d5792b988df5bd105
xor-machine pushed a commit to minspec/discussions that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004053Z-apply-push-b507a7
Patch-SHA256: 6e2ac3b46cc179bb7757c9e87d797f7304beb2346b944b3db8dadb6829f53c2f
xor-machine pushed a commit to minspec/docker that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004100Z-apply-push-167d53
Patch-SHA256: 12e1e77943a5566f4eae02f325f05a8e1363f3b0b7769ef98d99b87e7b1955bd
xor-machine pushed a commit to minspec/minspec that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004105Z-apply-push-17e0de
Patch-SHA256: 0d300294f6fba987585568490ad4453f29eb540d2766d69cd4fbc71fc9bdef4d
xormania pushed a commit to minspec/workbench that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004028Z-apply-push-4faea8
Patch-SHA256: 57e5b08eab2bf07672c3ea101dcf7443de3419d46713583a712cf8cef7c1c6ba
xor-machine pushed a commit to minspec/workbench-fixtures that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge. The e2e job called the reusable workflow
in workbench at the mutable `dev`; pin it to the current dev commit.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004040Z-apply-push-42a20d
Patch-SHA256: ab87de44654606fe4f2e2e2132496610a1aa6e59013b28a94c079f930ed6f575
xor-machine pushed a commit to minspec/docker that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004100Z-apply-push-167d53
Patch-SHA256: 12e1e77943a5566f4eae02f325f05a8e1363f3b0b7769ef98d99b87e7b1955bd
xor-machine pushed a commit to minspec/minspec that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004105Z-apply-push-17e0de
Patch-SHA256: 0d300294f6fba987585568490ad4453f29eb540d2766d69cd4fbc71fc9bdef4d
xor-machine pushed a commit to minspec/discussions that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004053Z-apply-push-b507a7
Patch-SHA256: 6e2ac3b46cc179bb7757c9e87d797f7304beb2346b944b3db8dadb6829f53c2f
xor-machine pushed a commit to minspec/skeleton that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge. The e2e job called the reusable workflow
in workbench at the mutable `dev`; pin it to the current dev commit.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004034Z-apply-push-c1e45f
Patch-SHA256: 34fe6902c5e921f8d37c9bba39cbd394b7cc91b70275cc46eab878199b8942c7
xor-machine pushed a commit to minspec/recipes that referenced this pull request Sep 2, 2026
minspec/.github#10 pins the content surface to every tracked blob,
read from the object store, bytewise, symlinks never followed. Point
the wall step at that merge. The e2e job called the reusable workflow
in workbench at the mutable `dev`; pin it to the current dev commit.

Source: original
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Jj94rkp3tfHAxUkTCthgY
Apply-Push-Job: 20260902T004046Z-apply-push-2cfd0c
Patch-SHA256: 63cb576da555e6faa8de431db398c22cf34346acb764980d5792b988df5bd105
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.

1 participant