fix(seller): tell hired agents what the daemon actually delivers - #302
Merged
Conversation
The delivery instructions we ship to every hired agent said "Make one or more non-empty commits authored by you" and "Anything not committed to git will not be delivered". Both halves are false, and an agent acting on either one can lose its work. What the daemon does is snapshot the agent's final working directory. `snapshot_delivery_at` stages it with `add_all` and commits, taking its parents from `base_oid` — which the node passes as `None`. So the delivery commit is a ROOT commit: uncommitted files ARE delivered, and the agent's own commits are orphaned by it and never pushed. Measured on retained workdirs: the delivery ref is one commit deep and the agent's branch is unreachable from it. So the instructions now name the final worktree as the deliverable, say plainly that committing is harmless but not what gets delivered, and keep the existing promise that no credentials are handed over and no push is needed. They also warn that .gitignore'd files are not delivered. `add_all` uses IndexAddOption::DEFAULT, which honours ignore rules, so an agent that ignores its own output loses it silently — a trap that was documented nowhere the agent could read. The test now pins the truthful text and fails if the old claim returns. Red-proved: restore "Anything not committed to git will not be delivered" and it fails on that assertion. Refs #254 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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.
Ruled (A2) GO on #254 as a doc-lie removal under cleancut: no predicate, no wire change, no behaviour change.
The lie, both halves
The delivery instructions we ship to every hired agent said:
Both halves are false, and an agent acting on either can lose its work.
What the daemon actually does is snapshot the agent's final working directory.
snapshot_delivery_atstages it withadd_alland commits, taking its parents frombase_oid— which the node passes asNone(seller_node/run.rs). So:add_allstages the whole worktree.Measured, not deduced — on retained delivery workdirs the delivery ref is exactly one commit deep and the agent's own branch is unreachable from it.
So the sentence does not merely overstate; it describes a delivery mechanism the node does not use at all.
What this changes
The instructions now name the final worktree as the deliverable, say plainly that committing is harmless but is not what gets delivered, and keep the existing true promises (no credentials are handed over, no push is needed).
They also warn that
.gitignore'd files are not delivered.add_allusesIndexAddOption::DEFAULT, which honours ignore rules, so an agent that ignores its own output loses it silently — a trap that was documented nowhere the agent could read. That is the one new piece of information here, and it is the one most likely to have been costing us deliveries.Scope — deliberately narrow
This is the prompt text only. Two related questions are explicitly not here:
Verification
954e4f47— no tests added, one rewritten).memory_section: Nonestill returns the base prompt byte-identically.Red-proved. The test now pins the truthful text rather than merely asserting the word "commit" appears — the old assertion (
contains("commit")) would have passed vacuously against the new text, since it still contains "commit" in "you do not need to commit". RestoringAnything not committed to git will not be deliveredfails on:Refs #254
🤖 Generated with Claude Code