You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit f4b8336
Browse filesBrowse the repository at this point in the historyBrowse files
D: make the runner's commit from audited task changes (#66, part 2) (#90)
* D: make the runner's commit from audited task changes (#66, part 2)
commitTaskChanges runs the change inspection again in one container with
both task volumes read-only, builds the commit from the same reads (base
plus exactly the manifest's changes, each file stored as hashed) into a
scratch object store in /tmp, and returns it as a bounded git bundle.
Node keeps the bundle only when the manifest digest matches the approved
one, refuses agent commits, metadata and link target changes, gitlink
content and changes a tree cannot hold, and checks the commit ID against
the one its inputs describe. Replaces the planned exportTaskCommit.
Also: stdin input for process groups and storage scripts, recovery of
leftover commit containers, neutralised issue references in F's runner
commit message, and a fix for a SIGTERM race in the fake-Docker tests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Accept a .gitattributes over 100 MB again: Git ignores it from the index too
The refusal added in review broke part 1's pinned behaviour. Every
.gitattributes leaves the scratch index, and Git 2.39.1+ ignores one this
large read from the index as well, so hashing does not depend on order.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: AGENTS.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -124,6 +124,8 @@ Every reproduced race requires a failing-before and passing-after regression. As
124
124
- Never infer that agent-written content is unchanged from timestamps, sizes or an index's stat cache: not every write moves them (tmpfs, for one). Compare the content itself.
125
125
- Hand agent-chosen names to tools as literal data: disable or sidestep pathspec magic (a leading `:`), quote them in the tool's own input format (a leading `"` in `--stdin-paths`), pass them as bytes, and keep empty fields when splitting NUL-separated output. Check a name's safety only where it is reported, never refusing unchanged input for a name the report never carries.
126
126
- Check a trust root before anything reads it. When a tool reads config or rules from storage an agent could have reached (Git and the metadata volume), compare that storage with its trusted baseline first, and run nothing if it changed.
127
+
- When one run reports a result and then acts on the same data, serialize the report before the action reads it: a read that changes data (Perl autovivification, a lazy default) must not change what the caller checks.
128
+
- When the runner predicts what an external tool will produce (a commit ID from its inputs), refuse up front any input the tool would normalize (Git writes a `-0000` offset as `+0000` and re-encodes Unicode noncharacters), so the prediction cannot fail later on valid-looking input.
0 commit comments