Development record
A session left to work on never stops while it has work
Press Release
A session told to work on while its person is away keeps working until they are back. Alice, a solo founder who is also the product thinker, leaves for the evening and says the sessions should work on until 09:00, running one command or asking a session to. abcd records that once for the repository, with who set it and when it ends, and repeats it to every session at each start, after each compaction and with every prompt, so no summary and no relay between sessions can drop it. A session that tries to end its turn while it still has work it can do alone (a reservation whose work is not yet handed in, a pull request of its own that has fallen behind or is failing, a branch it has not pushed, a branch stacked on another change that is still open) is handed the next of those items instead. One with nothing left to do takes the next ready item, and may stop only with its next look scheduled before its reservations need renewing. A question it would have put to Alice is decided and recorded instead, and an act only Alice may approve (an advisory's approval, a publication, a push her standing instructions do not allow, a new dependency, a secret, a browser step) is queued for their return. The mode itself grants nothing: what a session may push stays whatever Alice's own instructions say. When Alice is back and says so, the mode ends and they see the queued steps and any stop the host forced; from then on nothing is refused, and a stop with work left is only pointed out.
Why This Matters
On the night of 2026-10-16 every session had been told to work on until the morning, and one sat idle for about ten of eleven and a half hours while it held work it could do alone (iss-2610170619247185). The instruction lived only in chat: relayed by a peer, overridden in the session's reading when the product thinker came back for an hour, then dropped by a compaction summary. The session ended its turn on a question nobody was there to answer, and a Claude Code session runs only when something sends it input, so nothing ran until a peer's message six hours later. The same night a coordinating session held three finished steps behind a merge order when only their landing order was fixed (dcn-2610180905291297).
This is the smallest slice of the checklist draft (itd-2610170638184486) that removes the stall's core cause, carved out so the security and bug-fix release waits on it alone (dcn-2610180913379049, dcn-2610180913388445). It needs nothing on the shared remote, so it does not wait on the coordination intent (itd-2610170634394993).
Mechanism
We expect an autonomous run to stop stalling because the three ways the session of 2026-10-16 went quiet are each closed where the host gives abcd a hook: the instruction to work on becomes a record abcd repeats at every start, compaction and prompt rather than context a summary can drop; ending a turn with owed work is refused at the Stop hook, the one point every quiet spell passes through; and a question to an absent person is refused before it can leave the session waiting. Shown wrong if, in an away window of at least six hours with owed work seeded at its start, a session following the slice is idle (no tool call) for more than one hour while owed work remains, or ends its turn on a question to the person.
Scope Conditions
- A repository abcd manages, with the local tier and abcd's plugin hooks installed in the host that runs its sessions.
- A host that runs a Stop hook and honours its block decision, a session-start hook on compaction and a prompt hook, as Claude Code documents them; on a host without them the mode is still recorded and shown, and nothing is enforced.
- Sessions on one computer: the away record is held per repository on that machine, so a session on another computer or in the cloud does not see it.
- The stop check's pull-request reading, made only while the person is away, needs the forge client signed in; when it cannot read the forge in time it judges from disk alone, and says so.
- A session that keeps working through the host: the check refuses a stop, it cannot start a session that is not running. A turn the host ends on an API error, such as a rate limit, fires no Stop hook and cannot be continued: it is recorded, and only a wake the session had already scheduled resumes it.
- Known residual: a sibling working copy's branch that no worktree holds any more still reads as this session's own when both copies commit with the same email, because nothing on disk tells them apart.
What's In Scope
- The away mode.
abcd mode autonomous [--until <time>] [--hold-pushes]records who set it, from which working copy, when, and when it ends, at most seven days on;abcd mode backends it, prints one line per queued step and recorded stop, and records who ended it. One record per repository on the machine, shared by every working copy, changed only under a lock (dcn-2610180913399042, dcn-2610180913399499, dcn-2610180937181736). - It grants nothing. The person's own standing instruction stays the
authority to commit, push, and open or merge a pull request, as before.
Where owed work needs a push, the stop check tells the session to push if
its standing instruction allows; a queued push hands nothing back, so the
item stays owed and a stop the host's cap forces is recorded. Only when the
person has said pushes wait (
--hold-pushes, which narrows and grants nothing) does a queued push hand back a branch's unpushed item, and only once its head contains the base's last-fetched tip and has a receipt; never a behind, failing or under-review item, a reservation alone or a renewal. The person's line counts the queued steps and the handed-back items. The person sets the mode, or a session does on their word (dcn-2610181016510153, dcn-2610181035355741). - Repeated, never summarised away. While it holds, the session-start hook
(every source, compaction included) and the prompt hook (every prompt) add
one short block to the session's context (dcn-2610180913406972), and the
prompt hook shows the person one line naming the away mode and
abcd mode back, and after a window lapses with anything unread, one line pointing atabcd mode back(dcn-2610180937181736, dcn-2610181003474765). - The stop check. A plugin Stop hook asks
abcd hook stop. While the person is away a session is only working or waiting: a turn's end with owed work is refused, naming the next item, and a stop is allowed only with a wake that fires, the host's lateness included, within half an hour while work is owed and before its reservations need renewing, and a wake releases an unchanged set of work the session can do itself at most twice in a row; the host's cap of eight continuations is the outer bound, and a stop it may have forced is recorded. A StopFailure hook records a turn ended by an API error. While the person is present the check reads disk only and points the work out (dcn-2610180913413137, dcn-2610180913421109, dcn-2610180936577720, dcn-2610180936579498, dcn-2610180937175629, dcn-2610181003455731, dcn-2610181003484631, dcn-2610181035361997). - Owed work, in exactly these terms: a live reservation under this working copy's key whose renewal is due or whose work no open pull request carries yet; an open pull request of the session's own that is behind its base (by the forge's merge state while away) or failing its checks; a branch of its own with commits not pushed; and a branch of its own stacked on a change that is still open, while it is behind, failing, awaiting review or unverified, since only its landing waits for the base. A branch is the session's own when this copy checked it out or the session created it, and it holds a recent commit of this checkout's; when it is a lane of a run whose reservation is live under this copy's key; or when such a reservation links it by its head branch or a closing trailer. Never the default branch, a tag, or another person's pull request (dcn-2610180913416683, dcn-2610180936568358, dcn-2610180936571036, dcn-2610181003463367, dcn-2610181003467233, dcn-2610181003464379, dcn-2610181003488355).
- The question reroute. While the person is away, the guard refuses every
question on the host's question tool. A question about an act only the
person may approve (a per-act approval or ruling such as an embargo
close's digest, an embargo triage verdict or a drain hand-back, pushing,
opening or merging a pull request without a standing instruction that
allows it, a publication, outward message or
visibility change, a new dependency, a secret, credential or App, a
website or browser step, a destructive act, a spend, or any act a command
page or invariant names as the person's) is queued with
abcd mode queue "<step>"; every other question is decided and recorded withabcd decide(dcn-2610180913431493, dcn-2610180937177502, dcn-2610181003477194, dcn-2610181016510153).
What's Out of Scope
- The rest of itd-2610170638184486: the per-session checklist, trigger promises, abcd's own timed wakes, the pre-run blocker sweep, the shared and published options and the phone.
- Idle time a coordinator sees across sessions, which comes with the
coordination intent's (itd-2610170634394993) central view in
abcd status. - Moved back to itd-2610170638184486 by review round 1
(dcn-2610180937181929): the report shown once on the person's return (the
queue, the window's decisions gathered across working copies, the recorded
stops and who ended the mode), the status line naming the away mode, and
the bare
abcd modeprint of the record, the queue and the owed items. - Moved back to itd-2610170638184486 by the trim after review round 2
(dcn-2610181016510153, dcn-2610181017056307): making the away mode the
person's act alone (the guard entry refusing an agent's
abcd mode autonomousand its routes, the away store's shell-write and file-tool refusals, the refused attempts recorded and shown, and the live checks of the person's!command and a relayed!); the guard readinggo run ./cmd/abcdand built binaries asabcdfor every entry; the away forge listing's reuse cache; and anyabcd mode backprint beyond one plain line per queued step and recorded stop. - Any push right granted by the away mode: it grants none.
- Starting or waking a session that is not running.
- Each autonomous session's own forge credential, owned by the coordination intent (itd-2610170634394993).
Acceptance Criteria
- Given Alice, the product thinker, runs
abcd mode autonomous --until 09:00in one working copy at 20:00, when a session in a sibling working copy of the same repository starts, then its context carries the away block naming 09:00 and who set it, with no message from any peer. - Given the away mode holds, when a session's context is compacted,
then the session-start hook fired with source
compactadds the away block again, and so does the prompt hook on the next prompt. - Given the away mode holds and the session's own pull request, opened and checked out in its working copy before the mode was set, is behind the default branch, when the session tries to end its turn, then the stop is blocked and the reason names that pull request as the next item and says how many items remain.
- Given the away mode holds and a branch the session cut with
git worktree add -b, with no upstream and no record id, is stacked on a pull request that is still open and is behind the default branch, when the session tries to end its turn, then the stop is blocked and the reason asks for the merge from the default branch, the fixes, the review and the preflight now, and says only the landing waits for the base (dcn-2610180905291297); and when the branch is up to date, green and has a preflight receipt, then it is waiting on its base and is not owed. - Given the away mode holds and the session holds a live reservation whose work no open pull request carries, or a branch with unpushed commits, when it tries to end its turn, then the stop is blocked naming that item.
- Given the stop was blocked and the session replied "awaiting the
person" with no tool call and no wake, when it tries to stop again with
the owed set unchanged, then the stop is blocked again; and when the
host's cap of continuations ends the turn, then it is recorded as
stopped with work owed, shown when Alice runs
abcd mode back. - Given the away mode holds and nothing is owed, when the session tries to stop with no qualifying wake, then the stop is blocked, telling it to take the next ready item first and only then schedule its next look before its earliest reservation renewal is due; a wake set for 09:00 the next morning, or a background shell task, does not qualify; and when it stops with a wake that fires in time, then the stop is allowed and the session is waiting, with that time kept as its next look.
- Given no away mode holds (Alice is at the terminal), when a session with owed work ends its turn, then the stop is allowed, one line shown to Alice names the owed work read from disk, and the forge is not called.
- Given the away mode holds, when the agent puts a product question to
Alice on the host's question tool, under any chip, then the guard
refuses it, telling the agent to decide and record it with
abcd decideand carry on; and when it asks Alice to approve closing a security advisory, then the same refusal tells it that an act only Alice may approve is queued withabcd mode queue, and it never supplies the approval itself. - Given the away mode holds, when Alice sends any prompt, then one
line shown to Alice names the away mode, its end, who set it and
abcd mode back. - Given the away mode holds and the session has an unpushed branch of
its own and no standing instruction from Alice allowing a push, when
it tries to end its turn, then the stop is blocked with a reason that
says to push only if a standing instruction allows and otherwise to queue
the push, never naming the away mode as permission; and when it
queues a step naming that branch, then the branch is still named as
owed, a stop the host's cap forces is recorded, and the step is shown when
Alice runs
abcd mode back. - Given Alice set the away mode with
--hold-pushesand the session's unpushed branch has the default branch's last-fetched tip merged in and a preflight receipt for its head, when it queues a step naming that branch, then the branch's unpushed item is handed back and the line shown to Alice counts it; and given instead a pull request of its own that is behind, merged locally and queued, then it stays owed. - Given the away mode holds, a pull request of the session's own stays behind, and the session has set a cron that fires every ten minutes, when it tries to stop with the owed set unchanged a third time in a row, then the stop is blocked naming that pull request.
- Given a session sets the away mode on a message relayed from another
session, when Alice sends her next prompt, then the line shown to
her names who set it, from which working copy, and
abcd mode back, and no session has gained any right to push. - Given a window that ended at 09:00 with one queued step, when Alice
sends her first prompt at 10:00 without having run
abcd mode back, then one line shown to Alice counts the queued step and namesabcd mode back. - Given the away mode holds and a branch this copy only checked out to review another person's pull request, or a run lane whose run's reservation has lapsed, when the session tries to end its turn, then neither is named as owed.
- Given a window in which one step was queued and the host forced one
stop, when Alice runs
abcd mode back, then they see the queued step and the stop, and the mode ends recording who ended it. - Given a stop check reading the forge while Alice runs
abcd mode backin another session, when the check finishes, then the mode stays ended. - Given the away mode holds, when a turn ends on a rate limit, then
the stop and its error type are recorded and shown when Alice runs
abcd mode back. - Given
--untilnames a time already past or more than seven days ahead, or the repository has no local tier, whenabcd mode autonomousruns, then it refuses, names the reason, and writes nothing. - Given the forge cannot be read within ten seconds during a stop check, when the session tries to stop while away, then the check judges from the disk kinds alone, saying the pull requests were not read.
- Given the slice is built, when a live Claude Code session with the
plugin from the branch runs an away window with seeded owed work, a
compaction and an attempted stop, then a captured transcript shows the
away block at start and after compaction, the blocked stop naming the next
item, an unpushed branch's queued push still named without
--hold-pushesand handed back with it once its head is verified, the third unchanged stop with a ten-minute wake blocked, and the refused question.
SOTA
Surveyed 2026-10-18 against the host's current hook reference (https://code.claude.com/docs/en/hooks) and the record:
- The host's Stop hook with a block decision: documented and current.
Adopted as the only point every quiet spell passes through; the host bounds
it with
stop_hook_activeand a cap of eight consecutive continuations, reset by each tool call. - The host's session-scoped scheduled wakes (CronCreate, ScheduleWakeup,
/loop), reported to a Stop hook assession_crons: young. Adopted only as evidence that a waiting session will look again; abcd schedules nothing. - Re-injection through the session-start hook's compact source and the prompt hook: documented. Adopted for the away block, as the checklist draft's format decision already chose for the checklist.
- A supervisor process that restarts or prompts idle sessions: a common pattern, not adopted: it needs a process that stays alive, which the coordination intent's (itd-2610170634394993) on-demand pass rules out, and it cannot tell owed work from a finished session without the same reading this slice adds.
- The host's agent-team idle hook (TeammateIdle): young, bound to one agent team in one session, so it cannot reach sessions in separate working copies. Not adopted.
Path taken: 2. The host's hooks are the native floor; the away record, the owed-work reading and the verdict are abcd's, behind a core seam that a second host's hooks can call.
Open Questions
None. Every question of the slice was settled on delegation; the decisions are listed below.
Decisions
Each is the facilitator's, on delegation, and restates the product thinker's ruling or the ground it rests on; the full text is in the decision record.
- Fixed first (dcn-2610180913379049): the stall is fixed before the security and bug-fix release, not deferred.
- Its own intent (dcn-2610180913388445): the slice builds on the checklist draft rather than planning it.
- The away record (dcn-2610180913399042): set by a verb, by the person or a session on their word, ended by its time or the person's word, never by a prompt; restored by decision 28 after decision 19 narrowed it.
- Per repository on the machine (dcn-2610180913399499).
- Repeated at start, compaction and every prompt (dcn-2610180913406972).
- Owed work (dcn-2610180913416683): four kinds, read from disk and one forge listing; brief invariant 7 gains the clause.
- The stop check and its bound (dcn-2610180913413137).
- Nothing owed means a scheduled look (dcn-2610180913421109).
- No question waits while away (dcn-2610180913431493).
- Host-agnostic core, reachable without a host (dcn-2610180913445272); its status-line and bare-print halves moved by decision 18.
Review round 1 of 2026-10-18 refined them:
- "Own" without a window, this copy's reservations only (dcn-2610180936568358).
- Stacked branches cleared; the forge read only while away (dcn-2610180936571036).
- Away means working or waiting (dcn-2610180936577720, following dcn-2610180720541206).
- A wake qualifies by its next fire time (dcn-2610180936579498).
- API-error stops recorded; prose questions blocked once (dcn-2610180937175629).
- Questions routed by the act (dcn-2610180937177502).
- The record's lock, checks and seven-day cap (dcn-2610180937181736).
- The return report, status line and bare print move to the draft (dcn-2610180937181929), superseding the return lists of the planning walk.
Review round 2 of 2026-10-18 refined them again:
- Only the person sets the away mode; narrow push rights; a mistake filter (dcn-2610181003456444, on the ground of dcn-2610171112384712), refining decision 3; superseded by decision 28.
- A wake qualifies within a ceiling, the host's lateness included (dcn-2610181003455731).
- Behind is the forge's merge state while away (dcn-2610181003464379).
- Created branches recorded; stale and review-only branches not own (dcn-2610181003463367).
- Linked only by head branch or a closing trailer (dcn-2610181003467233).
- The person-only acts completed, with a catch-all (dcn-2610181003477194).
- A lapsed window points at
abcd mode back(dcn-2610181003474765). - The block count resets only when the host is not continuing (dcn-2610181003484631).
- The clearing rule names review and works without receipts (dcn-2610181003488355).
The trim after review round 2, on the release orchestrator's ruling:
- The away mode grants no push rights; the person-only guard moves to the draft (dcn-2610181016510153), superseding decision 19.
- The slice trimmed to what closes the issue, with what moved listed (dcn-2610181017056307), refining decision 18.
Review round 3 of 2026-10-18 narrowed two of them:
- A queued push hands nothing back unless the person said pushes wait, and then only a verified branch's unpushed item (dcn-2610181035355741), refining decision 28.
- A wake releases an unchanged set of work the session can do itself at most twice in a row (dcn-2610181035361997), refining decisions 13 and 20.
The invariant 7 amendment is recorded as adr-2610181003541997 (proposed), amended by the trim to one uncached listing per check.
Audit Notes
Fidelity review OWED (receipt rcp-6da79a9df4b4).
Grounds
- pursued: we expect an autonomous session to stop going idle with owed work, because the instruction to work on becomes a record abcd repeats at start, compaction and prompt, and the Stop hook refuses a turn's end while owed work exists; shown wrong if, in a six-hour away window with seeded owed work, a session following the slice is idle over an hour while owed work remains, or ends its turn on a question to the person
Frontmatter
| id | itd-2610180912189125 |
|---|---|
| type | intent |
| lifecycle | shipped |
| kind | standalone |
| severity | critical |
.abcd/development/intents/shipped/itd-2610180912189125-a-session-told-to-work-on-while-its.md
open on GitHub ↗ · commit history ↗
References1
- itd-2610170638184486Every session keeps a checklist on disk, so no run stalls and no stall spreadsbuilds on
Referenced by12
- adr-2610181003541997The away mode's stop check reads the forge once, as its documented meaningrelated
- adr-2610222026265719A session's checklist names a credential by its kind, scope and expiry, never its value or anything that retrieves itrelated
- adr-2610240850193281A human-set autonomy grant permits, separately from the agent-written waiting-on badgerelated
- iss-2610170619247185An agent session told to work autonomously overnight sat idle for about ten of the eleven and a half hours between 20:48 BST on 2026-10-16 and 07:13 BST on 2026-10-17, while it held owed work it could have done alone.related
- iss-2610262039417690The surfaces register gives the hidden hook verb six entrypoints, while the away-mode intent adds a Stop hook that runs `abcd hook stop`.related
- iss-2610262043268358itd-79 requires they/them for every persona; itd-2610180912189125 refers to its persona Alice as 'her'related
- iss-2610262044279216The checklist draft allows an open-ended away state, but the shipped away mode is capped at seven daysrelated
- itd-2610170638184486Every session keeps a checklist on disk, so no run stalls and no stall spreadsrelated
- itd-2610240850336695The person grants their sessions what they may do alone, until a timebuilt on by
- itd-2611041549461012A session that takes over a run steps on from what abcd wrote downbuilt on by
- itd-2611041549471712A person stops the unattended runs of each account that chose a folder, with one commandbuilt on by
- spc-2610180914469489A session left to work on never stops while it has workimplemented by
mentions39
- dcn-26101711123847122026-10-17 — The headless approver closes the arithmetic routes a review found by reading the text as bash will read it where that is cheap: it joins a backslash-newline before scanning, refuses an alias or alias expansion turned on, a $'…' string that writes a byte by its code, and a builtin whose operands bash may read as arithmetic spelled with a quote or a backslash in its name; it reads a substring offset on any parameter and an array index only in an assignment, an expansion or a name a builtin is handed, so a regular expression's character class is no longer refused. It stops there by decision, not by oversight: on the default branch a launched role is granted the shell with no approver at all, so every route the approver misses is one the run has today; reading a shell line well enough to refuse every hidden command is not finite; and the approver stays a mistake filter (adr-42), with the boundary for launched agents the OS sandbox spec (spc-2610161751056096). Grounds: the default branch grants Bash in the implementer and reviewer roles (internal/core/implement/loop/drive.go). Refines dcn-2610170944153720.
- dcn-26101807205412062026-10-18 — A session's mode shows on its central-view line (facilitator-on-delegation, itd-2610170634394993 planning prep): the line carries the session's state from the checklist draft's fixed set: working; waiting, with what it waits on and when it next looks; or stopped, which is allowed only while the person is present and is flagged. While the person is away a session with work never stops, and one with nothing it can do is waiting with its next look, so no session reads as idle. This follows the product thinker's ruling that the person must never wrongly believe agents are working or waiting (grounds: the draft's decision 6; itd-2610170638184486 modes)
- dcn-26101809052912972026-10-18 — A declared dependency constrains only the landing (facilitator-on-delegation, itd-2610170634394993 planning prep): a branch that waits on an open pull request is held only from being queued; its merge from the default branch, its fixes, its review and its preflight run now, and only its landing waits for the dependency, so the stop check counts a stacked branch with an open base as owed work (grounds: iss-2610170619247185, second instance; the draft's first acceptance criterion; the decision that a waiting branch is rebuilt by merging)
- dcn-26101809133790492026-10-18 — The overnight stall is fixed first, not deferred (facilitator-on-delegation, iss-2610170619247185 and itd-2610170638184486 planning prep): the critical record of the session that sat idle overnight is not given a one-cycle deferral; the security and bug-fix release waits for the smallest slice that removes its core cause, filed as itd-2610180912189125. This rests on the product thinker's standing rulings, restated: of 2026-10-11, that a major finding is fixed before a cut, never deferred, and building carries on; of 2026-10-12, that when a deferred question is all that stands between an intent and its plan, the facilitator decides it on delegation and plans it; of 2026-10-17, that in an autonomous run the agent decides and records rather than ending on a wait for the person. The stop check itself is the product thinker's settled design, in the checklist draft's decisions of 2026-10-17: a stop with work owed is refused only while they are recorded as away, and while they are present it is allowed and pointed out. It agrees with the coordination prep's decision that this fix ships as the bundle's first slice without waiting on the coordination intent (grounds: iss-2610170619247185 remedy; itd-2610170638184486 decisions; the coordination prep's ship-first decision of 2026-10-18)
- dcn-26101809133884452026-10-18 — The stall fix is its own intent, not a spec of the checklist draft (facilitator-on-delegation, itd-2610180912189125 planning): the slice (the away mode held by abcd, the stop check, and the question reroute) is filed as itd-2610180912189125, which builds on itd-2610170638184486, rather than planned as a first spec of that draft closed with a remainder; planning the draft would move it to planned before the product thinker has walked its criteria on Thursday, and its open trade-offs (the phone, the shared options) would then sit inside a planned record. A separate intent keeps the split with the coordination intent unchanged, since the slice touches nothing on the shared remote, and follows the precedent of itd-2610150602547271, filed as the first slice of itd-97. The idle time a coordinator sees stays out of the slice and comes with the coordination intent's central view (grounds: brief invariant 17; itd-2610150602547271; itd-2610170638184486 scope split; the coordination prep's ship-first decision)
- dcn-26101809133990422026-10-18 — The away mode is a record of the person's absence, set by a verb and ended only by its time or by their word (facilitator-on-delegation, itd-2610180912189125 planning): abcd mode autonomous [--until <time>] records who set it (the holder name reservations already resolve from caller-local facts), when, and when it ends, where --until takes a clock time (its next occurrence, local time) or a full timestamp and a time already past is refused; without --until it is open-ended until abcd mode back. It sits beside the waiting-on badge, whose three words stay a closed set, and is not a fourth word. A human prompt during the window does not end it, since a brief return overrode the instruction on 2026-10-16 and a prompt from a peer looks the same. An agent sets it on the person's word in its session, and one set covers every working copy, so no peer has to relay it. This restates the product thinker's 2026-10-17 ruling that they say they are away, until a set time or open-ended, and say when they are back (grounds: itd-2610170638184486 decisions; iss-2610170619247185; brief invariant 10; internal/core/mode)
- dcn-26101809133994992026-10-18 — The away mode is held once per repository on the machine, not per working copy (facilitator-on-delegation, itd-2610180912189125 planning): the record lives in abcd's machine store under the repository's root commit, beside the worktree store's key, so every working copy of the repository and every session in it reads the same record; the issue's remedy words it per checkout, but the stall began with an instruction relayed by a peer between sessions in separate working copies, and the person's absence is a fact about them, not about one copy. It is not machine-wide, so a repository the person never left running is unaffected. A session on another computer or in the cloud does not see it until the checklist draft's shared options land (grounds: iss-2610170619247185 what happened; AGENTS.md worktree store; principle the-users-directory-is-theirs)
- dcn-26101809134069722026-10-18 — The away mode is repeated to the session at every start, after every compaction and with every prompt (facilitator-on-delegation, itd-2610180912189125 planning): while it holds, the session-start hook says it on every source, compact included, and the prompt hook says it with every prompt, outside the rule loader's once-per-session ledger, as one short block: away until when and set by whom, the rule to decide and record rather than wait, and the next owed item. The host documents that a SessionStart hook fires with source compact after compaction and that its plain stdout or additionalContext, like a UserPromptSubmit hook's, is added to Claude's context. The instruction of 2026-10-16 was lost because it lived only in the context a compaction summarised (grounds: code.claude.com/docs/en/hooks SessionStart matcher compact and UserPromptSubmit additionalContext; principle durable-state-lives-where-the-platform-says-it-survives; iss-2610170619247185)
- dcn-26101809134131372026-10-18 — The stop check refuses only while the person is away and is bounded so it never spins (facilitator-on-delegation, itd-2610180912189125 planning): a plugin Stop hook asks abcd, which blocks the stop with the host's decision block and a reason naming the next owed item and how many remain, only while the away mode holds and owed work exists. While the person is present the stop is allowed and, with work owed, pointed out in one line through the host's systemMessage. If the host says the session is already continuing because of a stop hook and the owed set is unchanged since this session's last block, the stop is allowed and recorded as stopped with work owed, shown on the person's return; the host's own cap of eight consecutive continuations, reset by each tool call, is the outer bound. The host documents stop_hook_active as the field to check so a hook never blocks on a condition that will not resolve. The session states are the bundle's: working, waiting, stopped. This restates the product thinker's 2026-10-17 stop-check ruling (grounds: code.claude.com/docs/en/hooks Stop input and Stop decision control; itd-2610170638184486 decisions)
- dcn-26101809134166832026-10-18 — Owed work is four kinds, read from disk and one forge listing (facilitator-on-delegation, itd-2610180912189125 planning): a session owes work it can do alone when it has (1) a live reservation whose renewal is due or whose work no open pull request carries yet; (2) an open pull request of its own that is behind the default branch or failing its checks; (3) a branch of its own with commits not pushed; (4) a branch of its own stacked on a change that is still open, whose merge from the default branch, fixes, review and preflight are owed now, since a declared dependency holds only its landing. A branch is the session's own when its working copy's own HEAD history has had it checked out since the window began, so a sibling copy's branches never count. The reservations are read as last fetched, behind against the last-fetched default branch, and the pull requests' states from one listing of the person's open pull requests through the forge client per stop check, which becomes part of the away mode's documented meaning in brief invariant 7, as the drain's listing is; a failed listing falls back to the disk kinds and says so. The next item is the first of: a renewal due, a failing pull request, a behind one, a stacked branch, an unpushed branch, unhanded work (grounds: iss-2610170619247185 remedy and second instance; the coordination prep's decision that a declared dependency constrains only the landing; brief invariant 7; internal/core/claim)
- dcn-26101809134211092026-10-18 — A session with nothing owed stops only with its next look scheduled (facilitator-on-delegation, itd-2610180912189125 planning): while the away mode holds, a stop with no owed work is allowed when the host reports a scheduled wake for the session or a background task in flight, and is then waiting; otherwise it is blocked once, asking the session to schedule its next look sooner than half its reservations' lease (under an hour for the two-hour lease) through the host's own scheduling, and the bound in the stop-check decision applies. The host documents that its Stop input carries session_crons (wakes from CronCreate, ScheduleWakeup and /loop) and background_tasks so a hook can tell a finished session from one paused for work that will wake it. abcd starts no process of its own and schedules nothing itself. The check covers the overnight gap after the two-hour watcher ended; the checklist draft's own timed wakes and trigger promises stay there. It matches the coordination prep's decision that a waiting session wakes before half its lease, and the product thinker's ruling that a waiting session records when it looks again and is never kept spinning (grounds: code.claude.com/docs/en/hooks Stop input; itd-2610170638184486 decisions; iss-2610170619247185 idle spans)
- dcn-26101809134314932026-10-18 — While the person is away no question waits for them (facilitator-on-delegation, itd-2610180912189125 planning): while the away mode holds, the guard refuses every question on the host's question tool, abcd's or another tool's, because a question nobody is there to answer stalls the session. A product or technical question is refused with a reason telling the agent to decide it, record it with abcd decide marked as decided on delegation with its grounds and how to reverse it, and carry on; a step only the person's hands can do (a browser step, a secret, a new App) is refused with a reason telling the agent to queue it with abcd mode queue "<step>" and carry on with other work. abcd mode product-thinker or facilitator is refused the same way. Decisions in the window are not asked first, technical trade-offs included, since the product thinker ruled on 2026-10-17 that in an autonomous run the agent decides and records and only steps that need them on the website wait (grounds: iss-2610170619247185 remedy; itd-2610170638184486 framing; internal/surface/cli guard question check)
- dcn-26101809134319852026-10-18 — The person's return shows two lists derived from what already exists (facilitator-on-delegation, itd-2610180912189125 planning): when the away mode ends, by its time passing or abcd mode back, the next prompt shows once the steps queued for the person's hands and the decisions recorded in the window, each with its text, which the reroute asks to carry its grounds and how to reverse it, plus any stop recorded with work owed. The decisions are the decision records whose time-ordered ids fall inside the window, so no second store of decisions is kept; the queue is the only new list and lives in the away record. The draft's richer lists for the person's return stay in itd-2610170638184486 (grounds: principle one-canonical-primitive; adr-45 time-ordered ids; itd-2610170638184486 press release)
- dcn-26101809134449712026-10-18 — A session's checklist is one JSON file per working copy in its local tier (facilitator-on-delegation, itd-2610170638184486 planning prep): the checklist the draft describes is kept per working copy, since the checkout is the unit of isolation and the coordination prep keys one central-view line per working copy, in that copy's local tier, never in a tracked folder, and its re-injection reuses the slice's session-start and prompt-hook path; the away mode itself is not copied into it but read from the repository's one away record (grounds: AGENTS.md concurrent sessions and working-tree layout; the draft's format decision; the coordination prep's per-working-copy decision; itd-2610180912189125)
- dcn-26101809134452722026-10-18 — The slice keeps the core host-agnostic and is reachable without a host (facilitator-on-delegation, itd-2610180912189125 planning): the away record, the owed-work reading and the stop verdict are a core package returning data, and the front doors format it: abcd hook stop maps the host's Stop payload and answers in its decision format, and a bare abcd mode prints the away record, the queue and the owed items, so the check runs with no plugin host present. The plugin's hook manifest gains a Stop entry with the same bootstrap and home checks as its other hooks, and the status line names the away mode and its end, so the person never wrongly believes agents are working or waiting. Nothing is written under the host's own settings directory (grounds: brief invariant 3; AGENTS.md transport-agnostic core and wired or it isn't done; the product thinker's ruling of 2026-10-05 that nothing in the host's settings calls abcd beyond the consented status line; itd-2610170638184486 decisions)
- dcn-26101809365683582026-10-18 — A session's own branches are named by three facts with no window bound, and only this copy's reservations count (facilitator-on-delegation, itd-2610180912189125 review round 1; refines dcn-2610180913416683): a branch other than the default branch is the session's own when (a) this working copy's HEAD reflog has checked it out at any time, (b) it is the branch of a lane recorded in a run state this copy's local tier holds (the implement loop's lanes, which build and drain cut with git worktree add, so they never reach the coordinating copy's reflog), or (c) it is the head branch of an open pull request linked to a live reservation held under this copy's key. A reservation counts only when its copy key is this copy's, so a sibling copy's reservation never holds this session. A pull request carries a reservation's work when the record id appears in its head branch's name or on a Refs:, Resolves: or Delivers: line of its body. The window bound is dropped because both instances of iss-2610170619247185 escaped it: the pull requests that fell behind were opened and last checked out before any window began, and the stacked drain lanes lived in worktrees of their own (grounds: the plan review of 2026-10-18 by an Opus and Sonnet pair, findings 1 and 10; internal/core/claim copy key; internal/core/implement/loop lane worktrees; iss-2610170619247185)
- dcn-26101809365710362026-10-18 — A stacked branch is owed only while it needs work, and the forge is read only while the person is away, under a deadline (facilitator-on-delegation, itd-2610180912189125 review round 1; refines dcn-2610180913416683): an own branch is stacked when its open pull request's base is not the default branch, or, with no pull request, when the nearest other own branch whose tip is an ancestor of its tip is not contained in the last-fetched default branch. A stacked branch whose base is still open is owed only while it is behind its base's tip or the last-fetched default branch, its checks are failing, or no preflight receipt names its head in any worktree (the receipts the landing step already reads); otherwise it is waiting on its base, which is not owed. An unpushed branch has commits not on its upstream or, with none configured, not in any remote-tracking ref; a branch whose upstream is gone (merged and deleted on the remote, a squash merge included) is never counted. While the person is present the check reads disk only (a reservation's renewal due and unpushed own branches) and never calls the forge, so brief invariant 7 holds on every turn. While away it makes at most one pull-request listing under a ten-second deadline; a listing younger than ten minutes is reused rather than repeated, and on a failure or timeout one younger than half the default lease is used with its age named, else the disk kinds alone with the pull requests named as not read (grounds: the plan review of 2026-10-18, findings 1 and 9; brief invariant 7; internal/core/landing receipt lookup)
- dcn-26101809365777202026-10-18 — While the person is away a session is only working or waiting, and abcd never allows a stop with work owed (facilitator-on-delegation, itd-2610180912189125 review round 1; supersedes the bound in dcn-2610180913413137 and refines dcn-2610180913421109): while away a stop is allowed only when the session has a qualifying wake and either nothing is owed or the owed set is unchanged since this session's last block; it then reads waiting, and the wake's next fire time is kept as its next look in the session's own state file in the local tier, beside the owed-set fingerprint and a count of consecutive blocks. Every other stop while away is blocked, whatever stop_hook_active says, naming the next item, or with nothing owed asking the session to take the next ready item first and only then schedule its next look. The host's cap of eight consecutive continuations, or the cap its documented environment variable sets, is the outer bound, and the block abcd counts as reaching it records stopped with work owed in the away record. The old row that allowed an unchanged owed set once stop_hook_active was true reproduced the stall, since a reply of awaiting the person with no tool call ended the turn until morning. This matches the coordination prep's decision that while the person is away a session with work never stops and one with nothing it can do is waiting with its next look, and the draft's ruling that stopped is allowed only while the person is present (grounds: the plan review of 2026-10-18, findings 2, 5 and 12; code.claude.com/docs/en/hooks Stop input and continuation cap; itd-2610170638184486 decisions)
- dcn-26101809365794982026-10-18 — A wake qualifies only when its next fire time falls before the session's earliest renewal due, and a background task never counts (facilitator-on-delegation, itd-2610180912189125 review round 1; refines dcn-2610180913421109): a session_crons entry qualifies when the next time its cron expression matches after now, read in the machine's local time, is no later than the earliest renewal due among the live reservations under this copy's key minus the lease skew allowance, a renewal being due halfway between a reservation's claim or last renewal and its expiry; with no live reservation it must fire within half the default lease. The next fire time comes from a small five-field cron parser of abcd's own (minute, hour, day of month, month, day of week, with lists, ranges, steps and the wildcard), since the host documents schedule as a cron expression and a new dependency would need sign-off; an expression it cannot parse never qualifies. A background task does not count on its own while the person is away, since a shell task such as a long sleep or a tail that never ends reports as in flight however distant its wake. So a cron at 09:00 seen at 21:00, or a wake that fires after a lease lapses, no longer passes (grounds: the plan review of 2026-10-18, finding 3; code.claude.com/docs/en/hooks session_crons and background_tasks fields; internal/core/lease; AGENTS.md new dependencies need sign-off)
- dcn-26101809371756292026-10-18 — An API-error stop is recorded, and a turn ending on a prose question while away is blocked once (facilitator-on-delegation, itd-2610180912189125 review round 1): the plugin's hook manifest gains a StopFailure entry, which the host fires instead of Stop when a turn ends on an API error such as a rate limit and whose output it ignores, so it cannot continue the session; while the person is away abcd records the stop and the host's error type in the away record, and the slice's scope conditions name that such a turn is recorded, not resumed, except by a wake the session had already scheduled. While away, a stop whose last_assistant_message ends on a line ending in a question mark is blocked once per message with the reroute's reason (decide and record it, or queue it when it is an act only the person may approve), before the verdict's other rows apply (grounds: the plan review of 2026-10-18, finding 11; code.claude.com/docs/en/hooks StopFailure and Stop input; iss-2610170619247185, whose session ended its turn on a question)
- dcn-26101809371775022026-10-18 — While the person is away a question is routed by the act it asks about, not by its chip (facilitator-on-delegation, itd-2610180912189125 review round 1; supersedes the chip routing in dcn-2610180913431493): the guard still refuses every question on the host's question tool while the away mode holds, now with one reason whatever the chip. It tells the agent to queue with abcd mode queue, and carry on with other work, a question about any act only the person may approve: an approval the repository binds to the person per act (an embargo close's --approve digest, which commands/embargo.md says is never supplied unless the person has read the text and said yes in that session; a release sign-off); publishing anything or changing a repository's visibility; adding a dependency; a secret, a credential or an App; a step only a website or a browser can do; a destructive act (deleting what the session did not create, overwriting uncommitted work, a force push, discarding a peer's work); and anything that spends money. Every other question is decided and recorded with abcd decide, with its grounds and how to reverse it. The away mode, set on the person's word, is their ask for the session to commit and push its own branches and open their pull requests, which is the owed work itself; merging follows the repository's own rule. The Setup chip marks the setup interview's questions (visibility, keys, oracles), not a step only the person can take, so routing by chip would have sent an embargo approval, or the creation of a new App asked under a Product chip, to be decided by the agent (grounds: the plan review of 2026-10-18, finding 4; commands/embargo.md approval one per act; brief invariant 22; AGENTS.md new dependencies and commits; internal/surface/cli guard question chips)
- dcn-26101809371817362026-10-18 — The away record is changed only under a lock, read only when it is safely the account's, and capped at seven days (facilitator-on-delegation, itd-2610180912189125 review round 1; refines dcn-2610180913399042): every read-modify-write of the record (setting, ending, queueing, a recorded stop) holds fsutil.WithFileLock on a lock file beside it and re-reads the record inside the lock, so a stop check that read away before a slow forge listing cannot write away back after the person ended it, and two queued steps cannot lose one; the forge listing runs outside the lock, and a lock not had within two seconds allows the stop and says so on stderr. The record and its lock are used only when each is a regular file this account owns that no one else can write, within 64 KiB, the checks rules.json already gets; a record failing them, or failing to parse, reads as not away, failing open, and a verb asked to change it refuses naming the file. An open-ended record ends seven days after it was set, and --until may name no later time, so a forgotten record lapses while a run of several days, such as the standing run of 2026-10-15 through 2026-10-17, still fits; a 24-hour cap would have ended that run midway, and requiring --until would contradict the product thinker's ruling that the mode may be open-ended. While the record holds, the prompt hook adds a one-line systemMessage the person sees on every prompt naming the away mode, its end, who set it and how to end it; the away block tells the agent to run abcd mode back only on the person's word in its session; and abcd mode back records who ended the mode and from which working copy (grounds: the plan review of 2026-10-18, findings 6, 7 and 13; internal/fsutil file lock; AGENTS.md rules.json ownership checks; iss-2610170619247185 standing run; the draft's ruling that the state is always shown plainly)
- dcn-26101809371819292026-10-18 — The person's return report, the status line and the bare abcd mode print move from the slice back to the checklist draft (facilitator-on-delegation, itd-2610180912189125 review round 1; supersedes dcn-2610180913431985 for the slice, and the status-line and bare-print halves of dcn-2610180913445272): both reviewers of 2026-10-18 recommended the split, so the security and bug-fix cut waits only on the away record, the stop check and the question reroute. The spec's step 6 and the return half of its step 5 leave the slice: the report shown once on the first prompt after the window ends (the queue, the window's decisions and the recorded stops); the window's decisions gathered from every working copy by abcd decide appending each id to the away record under its lock (review finding 8); showing on return who ended the mode (finding 13); the status line naming the away mode and its end; a bare abcd mode printing the record, the queue and the owed items; and the brief's surface text for them. They become named remaining work in the scope of itd-2610170638184486. The slice keeps what its own behaviour needs: abcd mode back prints the queue and the recorded stops as it ends the record, so a queued step is never unread; brief invariant 7 gains the away mode's forge listing; and the plugin page and the brief's surface chapters describe the verbs and hooks the slice ships, so nothing it ships is undocumented. The slice is re-estimated at five working days (grounds: the plan review of 2026-10-18, size and split; the coordination prep's decision that the cut waits on this slice alone; AGENTS.md wired or it isn't done; brief invariant 7)
- dcn-26101810034557312026-10-18 — A wake qualifies only when it fires, the host's lateness included, within a short ceiling (facilitator-on-delegation, itd-2610180912189125 review round 2, blocker 1 and choice (c); refines dcn-2610180936579498): the deadline is the earlier of the earliest renewal due among this copy's live reservations minus lease.Skew, and now plus a ceiling of 30 minutes while work is owed or one hour when none is, because a release reservation's 24-hour lease put its renewal 12 hours on and let a 07:00 cron seen at 21:00 qualify. The fire time compared with it is the next match, read in the machine's local time, plus the latest the host may run it: for a recurring task, half the gap to its following match, at most 30 minutes, and nothing for `*/5 * * * *`; a one-shot task is taken as matched, since the host only ever runs one early. The parser follows vixie cron, as the host says it does: a day field written from `*` (`*/n`) counts as unrestricted for the either-day rule, 7 is Sunday as 0 is, and `a-b/n` steps a range. The live capture compares the computed fire time with the next run the host lists (grounds: plan review round 2, blocker 1 and choice (c); the host's scheduled-tasks page on jitter, local time and day-of-week; the release reservation's default lease in the reserve verb)
- dcn-26101810034564442026-10-18 — Only the person sets the away mode, its push rights are narrow, and the guard's refusal is a mistake filter (facilitator-on-delegation, itd-2610180912189125 review round 2, choice (a); refines dcn-2610180913399042, replacing its clause that an agent sets the mode on the person's word): the prompt hook cannot tell the person's message from one another session relays, and its input names no origin, so a relayed word could let an agent grant itself, and every copy, push rights. So the guard refuses every route to setting the mode that it reads: `abcd mode autonomous` by the binary on PATH, the plugin root's binary or a built `abcd-<goos>-<arch>`; a `go run` of a package ending in `cmd/abcd`; any of them inside `sh -c` or in a script file a shell runs (adr-2610091150447054); a shell write into the away store under `~/.abcd.noindex/away/`; and an Edit or Write tool call on a path inside it. The person sets the mode with their own `!` command, which the host runs directly without going through Claude and so without the pre-tool hook, or at a terminal. A refused attempt is recorded in the store and shown to the person on the next prompt. What the mode grants is the session committing and pushing its own branches and opening their pull requests; never the default branch, a tag, a release cut, another person's pull request, a branch this copy only checked out to review, or a force push; merging follows the repository's own rule. This is chosen over the fallback, and is enough for now, because the grant only governs an agent that follows refusals: one that ignores them can push without any mode, so no shape of the mode adds a boundary inside the person's own session; the guard stops a refusal-following agent from granting itself on a relayed word; the rights are narrow, and every push is reversible and visible on the forge; and the record (who set it and from which copy) and the recorded refusals leave a trail the person reads on return. The guard stays a mistake filter (adr-42, and the decision of 2026-10-17 on the default branch that keeps the headless approver one, naming the OS fence as the boundary). That fence (spc-2610161751056096) is the boundary only for agents abcd's runner launches, whose writes to abcd's home it confines to their own worktree; it does not fence the person's own interactive session, where the stall happened, so there the narrow grant and the trail are the mitigation. The fallback (the mode grants no push rights, and the person's own standing instruction stays the authority to push) applies instead if the live capture shows that a message relayed from another session can run as a `!` command, or that an agent's tool call can reach the host's shell mode (grounds: plan review round 2, choice (a), and the coordinator's two addenda; the host's interactive-mode page, which says shell mode runs commands directly without going through Claude and outside the sandbox that applies to Claude's commands; the abcd-source-ledger-flip guard entry; adr-2610161621415708)
- dcn-26101810034633672026-10-18 — A branch is the session's own only while it is live and this copy's, and a branch the session creates is recorded as its own (facilitator-on-delegation, itd-2610180912189125 review round 2, blockers 3 and 5 and choice (a)'s exclusions; refines dcn-2610180936568358): when the guard's pre-tool hook sees this session run `git worktree add -b|-B <b>`, `git switch -c|-C <b>` or `git checkout -b|-B <b>`, it records `<b>` under this copy's key in the away store, under its lock, and only when no branch of that name exists yet, whether or not the person is away, because the stacked drain branches of 2026-10-17 were cut with a plain `git worktree add` before any window and carried no upstream, reflog entry, run state or record id. Stale ownership is bounded: a run's lane counts only while its run's reservation is live under this copy's key, and a finished or abandoned run's lanes never count; a branch owned through the reflog or a recorded creation counts only while it holds a commit authored by this checkout's `user.email` within the last 14 days, or a live reservation under this copy's key links it. Never own: the default branch, a tag, a branch whose open pull request another person authored, and a branch this copy only checked out to review, which the authorship rule leaves out (grounds: plan review round 2, blockers 3 and 5; lanes are cut from the default branch; the 60 run states and the five unlanded lanes of 2026-10-12 in this checkout)
- dcn-26101810034643792026-10-18 — While the person is away, a pull request is behind when the forge says so (facilitator-on-delegation, itd-2610180912189125 review round 2, blocker 2; refines dcn-2610180936571036): the stop check reads "behind" from the merge state (`mergeStateStatus` BEHIND) in its one pull-request listing, not from the last-fetched default branch, which nothing refreshes overnight, so a pull request that fell behind after the last fetch still reads as owed. Only a branch with no pull request is compared on disk, and the reason names when that ref was last fetched (grounds: plan review round 2, blocker 2; the pinned pull-request fields in internal/ghcontract)
- dcn-26101810034672332026-10-18 — A pull request carries a reservation's work only through its head branch or a closing trailer (facilitator-on-delegation, itd-2610180912189125 review round 2, blocker 4; refines dcn-2610180936568358): the link is the record id in the pull request's head branch name, or on a `Resolves:` or `Delivers:` line of its body, matched on word boundaries so that iss-5 never matches iss-50. A `Refs:` line, which the issue-resolution gate requires of any pull request that only names an issue, carries the work only when the head branch is already this copy's own by another route, and never makes a branch own, so a sibling copy's pull request that mentions the record neither leaves this session waiting nor becomes its branch (grounds: plan review round 2, blocker 4; the RS004 rule in scripts/check-issue-resolution.sh)
- dcn-26101810034747652026-10-18 — A window that lapsed with anything unread points the person at abcd mode back (facilitator-on-delegation, itd-2610180912189125 review round 2, blocker 7; refines dcn-2610180937181736): while a record whose end has passed is not yet closed and holds a queued step, a recorded stop or a refused attempt, the prompt hook shows the person one line on every prompt that counts them and names the literal `abcd mode back`, until that verb closes the record; the line shown while away carries the literal `abcd mode back` too, so the person never has to recall the verb (grounds: plan review round 2, blocker 7; dcn-2610180937181929, which kept the queue's print in the slice so that no queued step goes unread)
- dcn-26101810034771942026-10-18 — The acts only the person may approve are completed, end in a catch-all, and are classified by the agent (facilitator-on-delegation, itd-2610180912189125 review round 2, blocker 6; refines dcn-2610180937177502): the list the question reroute queues gains the embargo triage verdict (commands/embargo.md), the drain's hand-back (commands/drain.md), the confirmed apply verb for remote configuration (brief invariant 10), a push or merge beyond the session's own branches (the default branch, a tag, a release cut, another person's pull request, a branch only checked out to review), and a comment or message posted outward other than the session's own pull request, and it ends with any act a command page or a brief invariant names as the person's. A release sign-off is a cut, or a step of one, that asks for the person by name or that no standing instruction of theirs allows; a standing permission for automatic cuts stands, and the away mode adds none. Nothing detects the act mechanically: the agent classifies its own question from the refusal's list, and the guard's existing entries enforce only what they name, a force push and a skipped hook among them (grounds: plan review round 2, blocker 6; commands/embargo.md; commands/drain.md; brief invariant 10)
- dcn-26101810034846312026-10-18 — abcd's count of blocks resets only when the host is not already continuing (facilitator-on-delegation, itd-2610180912189125 review round 2, choice (b); refines dcn-2610180936577720): the count is set to one on a block with `stop_hook_active` false and adds one with it true; a change in the owed set no longer resets it, since the host's count does not, and a reset abcd made on one could leave a stop the host forced unrecorded. A stop recorded at the cap is labelled "possibly forced by the cap", because the host's count also resets on a tool call abcd cannot see, and the live capture checks where the host's count resets (grounds: plan review round 2, choice (b); the host's hooks page on the Stop cap)
- dcn-26101810034883552026-10-18 — A stacked branch's clearing rule includes review and works without abcd's preflight (facilitator-on-delegation, itd-2610180912189125 review round 2, minor findings; refines dcn-2610180936571036): a stacked branch whose base is still open is also owed while a review of its head is outstanding, that is, while the away listing shows the forge's review decision as CHANGES_REQUESTED or, for a run's lane, its run state records no passing review of its head, since the coordination prep's decision that a declared dependency constrains only the landing says its review runs now. Verified means a preflight receipt naming its head where the repository mints receipts (a receipt folder exists in one of its worktrees); in a repository without them, its pull request's checks passing in the away listing; and with no pull request there either, the branch is judged on being behind and on review alone, and the reason says it was not verified (grounds: plan review round 2, minor findings; the receipt lookup in internal/core/landing)
- dcn-26101810165101532026-10-18 — The away mode grants no push rights: the person's own standing instruction stays the authority to commit, push, and open or merge a pull request, exactly as before the mode existed (facilitator-on-delegation on the release orchestrator's ruling, itd-2610180912189125 after plan review round 2; supersedes dcn-2610181003456444, round 2's choice (a), and with it the guard entries that made setting the mode the person's act alone). The OS sandbox of spc-2610161751056096 fences only the agents abcd's runner launches, never the person's own interactive sessions, so for the sessions that actually stalled on 2026-10-16 the guard entries would never become a boundary, and their two days would buy a trust claim the plan cannot make. The fallback dcn-2610181003456444 already named is taken now, not on the live capture's evidence. Where the stop check finds owed work that needs a push (an unpushed branch, a reservation whose work no pull request carries, a behind or failing pull request once its local fix is committed), its reason tells the session to push if its standing instruction allows, and otherwise to queue the push with abcd mode queue for the person's return; a queued step that names the item's branch or record id, on word boundaries, hands that item back to the person for the rest of the window (a branch only while it holds commits its upstream lacks, so only the push waits), and the stop check stops naming it. The away mode is never treated as permission. The person-only acts gain pushing, opening or merging a pull request without a standing instruction that allows it. Who sets the mode returns to dcn-2610180913399042: the person, or a session on their word in that session; since the mode grants nothing, a mode set on a relayed word only keeps sessions working and deciding instead of asking, and the person sees who set it, from which working copy, and the literal abcd mode back on their next prompt. Making the mode the person's act alone moves to itd-2610170638184486 as named remaining work: the guard entry refusing an agent's abcd mode autonomous, its other routes (sh -c and script files), the shell-write and file-tool refusals on the away store, the refused attempts recorded and shown, the capture's checks of the person's ! command and of a relayed !, and the guard reading go run ./cmd/abcd and built abcd-<goos>-<arch> binaries as abcd for every entry, the ledger flip included, a security-relevant widening that gets its own review there (grounds: the release orchestrator's ruling of 2026-10-18 and the reviewer's addendum, both recommending the fallback; spc-2610161751056096 and adr-2610161621415708, which fence launched agents only; iss-2610170619247185, whose standing instruction already allowed pushes and auto-merge; the fallback clause of dcn-2610181003456444)
- dcn-26101810170563072026-10-18 — The overnight-stall slice is trimmed to what closes iss-2610170619247185 and nothing else (facilitator-on-delegation on the release orchestrator's ruling, itd-2610180912189125 after plan review round 2; refines dcn-2610180937181929): it keeps (i) a session with owed work cannot end its turn silently, through the Stop hook stop check with the ownership rules, the qualifying wake and the cap handling the reviews required; (ii) questions rerouted by the act, every other question decided with abcd decide and the person-only acts queued; and (iii) the away record set, ended, lapsing after at most seven days, re-injected at start, compaction and every prompt, under its lock. Moved to itd-2610170638184486 as named remaining work: the person-only guard step (dcn-2610181016510153), with the guard's reading of go run ./cmd/abcd and built binaries as abcd; the ten-minute reuse cache of the away forge listing and its stale-cache fallback, so each away check makes at most one listing under its ten-second deadline and a failed read judges from disk naming the pull requests as not read (adr-2610181003541997, still proposed, amended to match); abcd mode back printing more than one plain line per queued step and per recorded stop (any grouping, formatting or window summary); and the refused-attempt lines on the prompt. Kept despite the trim, because a review finding's fix rests on each: the created-branch list recorded in any mode (round-2 blocker 3, the drain's stacked branches, instance 2 of the issue); the Refs rule and word-boundary matching (blocker 4); the stale-ownership bounds (blocker 5); the wake deadline with the host's lateness and the cron cases (blocker 1); the forge's merge state for behind, with the one bounded listing and invariant 7's clause (blocker 2); the person-only acts list (blocker 6); the every-prompt line and the lapsed-window line naming abcd mode back (blocker 7); the block count and its possibly-forced label (round-2 (b)); the clearing rule's review and receipt terms (round-2 minors); the record's lock, ownership checks and seven-day cap (round-1 findings 6 and 7); the recorded ender (round-1 finding 13); the StopFailure record and the prose-question block (round-1 finding 11); and the badge verbs refused while away, which keeps a question from waiting on the person through the badge (dcn-2610180913431493). Re-estimated at 5.75 working days over seven steps, down from eight; about four is not reachable without reopening blockers 1 to 5, since the owed-work reading and the stop verdict with its cron parser carry 3.5 days between them and every rule in them answers a finding; the verdict is pure over the owed set, so two lanes could bring the elapsed time to about four days if the release orchestrator chooses (grounds: the release orchestrator's ruling of 2026-10-18 and the reviewer's addendum listing what stays; the spec's review rounds 1 and 2; AGENTS.md wired or it isn't done)
- dcn-26101810353557412026-10-18 — A queued push hands nothing back unless the person said pushes wait, and then only the unpushed item of a verified branch (facilitator-on-delegation, itd-2610180912189125 plan review round 3, finding F1; refines dcn-2610181016510153, whose grant of no push rights stands): by default a step queued with abcd mode queue hands nothing back, so the item stays owed and the stop stays blocked; the reason for an item that needs a push says to push if the standing instruction allows and to queue only if the person has said pushes wait, and a session with no instruction to push ends at the host's cap with the stop recorded for the person. A hand-back happens only when the away record carries the person's word that pushes wait, set with abcd mode autonomous --hold-pushes. The flag narrows what sessions do and grants nothing, so set on a relayed word it can at worst make sessions queue pushes they could have sent. Even then a queued step naming an own branch, on word boundaries, removes only that branch's unpushed item, and only while the disk shows the rest clear: its head contains its base's last-fetched tip, and a preflight receipt names the head where the repository mints receipts; where none are minted the clearing rule's equivalent, passing checks in the listing, can name only a pushed commit, so nothing is handed back there. It never removes a pull request that is behind or failing, a stacked branch the clearing rule still owes, a review outstanding, a reservation named by its record id alone, or a renewal, so a behind pull request whose merge is committed locally stays owed with pushes held and ends at the cap, recorded. The stop check records each hand-back in the away record under its lock, abcd mode back prints them, and the every-prompt line counts the queued steps and the handed-back items. TestQueuedPushHandsItemBack covers each case, the no-flag case handing nothing back (grounds: plan review round 3, finding F1, raised by both reviewers: the hand-back as written let a session exempt itself, replaying the first instance of iss-2610170619247185, where a behind pull request stayed behind all night; and it crossed the coordination intent's decisions that a stacked branch is cleared only by its merge and receipt and that a reservation's renewal must not lapse)
- dcn-26101810353619972026-10-18 — A qualifying wake releases an unchanged set of work the session can do itself at most twice in a row (facilitator-on-delegation, itd-2610180912189125 plan review round 3, finding F2; refines dcn-2610180936577720 and dcn-2610181003455731): while away, a stop whose owed set is unchanged is allowed with a qualifying wake at most twice while any capped item stays unchanged, and the third such stop is blocked naming the next item; the block counts toward the host's cap, whose forced stop is recorded. The capped items are the kinds the session can act on itself: a pull request that is behind or failing, an unpushed branch, a stacked branch the clearing rule still owes, and a reservation whose work no pull request carries, which the review's list did not name but which is the same kind of act as a push. A renewal that is only due, and an item waiting only on the forge, such as checks still running, keep releasing on a qualifying wake. The count compares the capped items alone, so a renewal falling due or done neither resets it nor adds to it, and a change in the capped items resets it; the count and a fingerprint of the capped items are kept in the session's state file in the local tier (.abcd/.work.local/autonomy/sessions/<session-id>.json), and TestWakeReleasesUnchangedSetTwice shows the third consecutive unchanged stop with a wake blocked. Repeated identical recorded stops are kept as one entry with a count and the last time, so a cron that wakes the session every ten minutes cannot grow the away record past its 64 KiB check, which would read as not away (grounds: plan review round 3, finding F2: with a */10 cron set once, each wake found the set unchanged and was allowed, and a behind pull request stayed behind for eleven hours, meeting the intent's falsifier)
- itd-2610170634394993Headless agents in parallel coordinate through the shared remote, not conversation
- spc-2610230805429429every-abcd-session-keeps-a-checklist-on
- waiting-holds-one-item-never-a-sessionWaiting holds one item, never a session