feat(agents): make work product durable, and stop the save waiting on a prompt #1170
No reviewers
Labels
No labels
burndown-2026-06
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/agentic-os!1170
Loading…
Reference in a new issue
No description provided.
Delete branch "aos/claude/vt99-durable-work-product"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes the loss vector that agentic-os#1150 and PR #1157 only half closed.
What went wrong
#1157 fixed agents refusing to commit. This fixes the opposite failure, which showed up four minutes and forty-five seconds after that PR merged.
A session ran 01:57 to 09:02 Pacific on 2026-08-20. It pushed every commit it made. It answered "everything pushed remote?" with a truthful and complete audit of git state. It was right about every file.
It had also spent two hours producing a roster design whose only copies were a private artifact and a chat transcript sitting in a purge-exposed native shadow. The measurement record behind that design, the search-space numbers, the palette ceilings, the collision that sank two attempts, and the three rejected defences of a cut seat, existed in the transcript and nowhere else. None of it was in git. None of it was on the tracker.
Every checkpoint rule in
AGENTS.mdwas satisfied, because every one of them is phrased in terms of repository state. A cleangit statuswas blind to the most valuable thing in the session by construction. Recovery worked, but only because the shadow had not been purged, the artifact was still live, and a scratchpad file had not been cleaned. Three accidents, not a system.Full reconstruction in agent-compose#317.
What changes
1. The checkpoint rule covers both, not one instead of the other. It now fires on local repository changes or undurable work product. The existing repository-state language is untouched.
2. Work product is named, because an unnamed category gets skipped: a design, a measurement and the numbers behind it, the reasoning under a decision, a specification the human typed, and a rejected alternative worth not re-litigating.
3. A rendering is not a store. A transcript, a session scratchpad, and a published artifact are views of something that already lives in git or an issue, never the only copy of it. This sits in the same family as the no-auto-memory rule.
4. The save never waits for the human to ask. The obligation fires when the turn ends. "Is everything pushed" is a courtesy and never the safety mechanism, and no phrasing from a human who is exhausted, mid-exit, or silent is required to trigger it. An agent that preserves work only when correctly prompted has moved the risk onto the person least able to carry it.
Plus a sibling to "A pushed branch owes its pull request":
5. A deferral owes its issue, filed in the same turn. The session above deferred its single largest deliverable and announced it in chat, while filing two other issues in the same ten minutes. Chat is the one surface that does not survive the session, so the repo was left holding a 194-line file whose header reads "Depends on the reflow landing" with no in-repo definition of the reflow. The rule binds hardest right after the human has said to proceed, because scaling work down is their call rather than the agent's.
Caps
Raised 321 to 331 lines and 30500 to 32500 chars, with the reasoning in
pyproject.tomlin the established form. Neither entry can move to a role source: both must land before the agent's first action, and every role source fires conditionally. Neither can displace the rules above them, which govern repository state, since the gap these close is work that never becomes a file at all.Verification
pre-commit run --files AGENTS.md pyproject.tomlgreen, includingAGENTS.md git-workflow block auto-generated, so the managed block from #1157 is untouched.Note for the #1158 sweep
This lands in the hand-authored prose, not the generated block, so it does not change what the applier stamps. It does change what every repo's
AGENTS.mdsays once the sweep runs, since the base composes into every session.🤖 Generated with Claude Code