Development record
Sessions under any account, on any machine or in the cloud announce what they are doing through short fixed-form announcements on the shared remote, a person reads everyone's status with one command, and what is really a hold stays a reservation
Press Release
Sessions working on one project tell each other what they are doing, whoever runs them and wherever they run. A session about to merge a change says so in a short announcement that every other session sees: on the same computer, under a colleague's account on another computer, or in a cloud session. A session cutting a release holds merges with a reservation everyone sees, and every session's merge step waits until the cut is done. An announcement says only what happened and which item it concerns, never free sentences, so it cannot slip instructions into another agent; a question points at the item, and people talk there.
"Last night five of my sessions passed dozens of messages, and from this morning my colleague's sessions and my cloud sessions could see none of them," said Maya, an autonomous-development practitioner working with a second contributor. "Now when one of my sessions starts merging, my colleague's session sees 'merging the login fix' before it pushes, and when I cut a release, nobody's session merges into it. I can read every announcement my sessions made in one list."
Agent-seeded on 2026-10-15 from the ruling (Decisions) and revised after two adversarial reviews the same day; confirmed as written by the product thinker at the planning interview of 2026-10-15 (Q4, in four parts).
Why This Matters
On 2026-10-14 five sessions coordinated through the host's cross-session messages: sub-agent slot loans, who owns a design, "I am merging this, rebase after", "I am cutting a release, hold your merge". Those messages reach only sessions under one account on one machine. From 2026-10-15 a second account works the ledger and hosted cloud sessions are planned (itd-2610120738075547, not yet on the default branch); neither can receive them, and the other person never sees them, so under the ruling of 2026-10-03 they are never the record of who works on what. A release cut in progress is invisible to every session outside the one cutting it (iss-2609091037191879), and the only defence today is a message the other account cannot receive.
Mechanism
Agent-seeded; the claim and its falsifier confirmed as written by the product thinker at the planning interview of 2026-10-15 (Q5).
We expect sessions under different accounts, on different machines and in the cloud to stop merging into each other's release cuts and onto branches another session announced it was merging, because the hold and the announcement now live on the shared remote that each of them already fetches, and the merge step itself reads the hold. This would be shown wrong if, in the first two weeks of two-account work, a session lands a change into a release cut that held a live reservation, or merges onto a branch whose merging announcement it had fetched.
Scope Conditions
- Holds for participants who can push to the shared remote: people with write access and the cloud sessions they start. An outside contributor can read the announcements but cannot make one.
- Holds where the forge keeps a record of who pushed: abcd checks each announcement's sender on a branch named by a username against it and shows the sender as verified, or as doubtful when the record names someone else; where the forge cannot say (no login, a push made by an app), and on every branch named by a holder id, which names no account the record could match, the sender is shown as claimed.
- Holds up to hundreds of announcements a day per person; a session is shown the newest announcement per item and a count of the rest. Many announcements a second is beyond what pushes to the shared remote carry, and belongs to the faster carrier the broker draft keeps (decision 15).
- Holds while everything an announcement carries may be public for ever: a kind, an item id, a time and the sender's holder id, an opaque per-account value that names no person, on a public repository. Announcements are kept permanently (C15); a deleted branch would not be erased anyway, since the forge keeps its commits retrievable for a while and every clone keeps a copy.
- Holds for warnings that may arrive late: a session sees an announcement only after a fetch, so nothing that must never be missed rests on an announcement alone; the release hold is enforced at the merge step instead (C7).
- Holds once the embargo check is on the default branch (adr-2610120558328615, on an unmerged branch on 2026-10-15); until then C5 cannot be built; the session cutting v0.15.0 expects it on the default branch on 2026-10-15.
- Hypothesis until the cloud probe answers it: a hosted cloud session may push a branch outside the host's own prefix, and its git identity resolves to a forge username. If either fails, a cloud session cannot make announcements under this design and the question goes back to the product thinker.
Acceptance Criteria
Agent-seeded on 2026-10-15 and revised after two adversarial reviews (design and feasibility; record discipline) the same day; walked one by one with the product thinker at the planning interview of 2026-10-15 (Q9 to Q15): C1 to C18 accepted, C17 and C18 added from the answers to Q6b and Q6c, and a criterion that an announcement names nobody struck by decision 19; renamed from notes to announcements by decision 21, with C8 and C16 reading through
abcd status.
- C1, a session announces. Given a session in a checkout that can push to the shared remote, when it runs
abcd announce merging #1012, then one commit that changes no file lands on the sender's own status branch,abcd-status/<the sender's holder id>, carrying the kind, the item, the sender, the working copy, the time sent and an expiry, and the sender is told the announcement went out. - C2, a lost race is retried, then reported. Given two sessions of one person announcing at the same moment, when one push is rejected because the branch moved, then that announcement is rebuilt on the new tip and pushed again, up to three times, and if it still fails the sender is told "not sent" with the reason; no announcement is ever force-pushed.
- C3, an announcement is a fixed form or nothing. Given an announcement with a kind outside the fixed list (
merging,merged,asking,answered,handed-over), an item that is not a record id or a pull-request number, any free text, or an expiry beyond 24 hours, when a session tries to send it, then abcd refuses, naming the field and the limit, and pushes nothing. - C4, an announcement about a private record is refused. Given an announcement about a record that is absent from the default branch as last fetched (or with no default branch fetched at all), when a session tries to send it, then abcd refuses before pushing and says the record is not public yet.
- C5, an announcement about an embargoed record is refused. Given an announcement about a record the embargo store on this machine holds, when a session tries to send it, then abcd refuses before pushing; and where the store exists but its check cannot run, the announcement is refused, never let through.
- C6, other sessions see it, once, as data. Given an announcement pushed by another account or by another session of the same person, when a session's next prompt comes after a fetch that brought it in, then that session is shown it once, rendered by abcd from its fields alone (for example
@maya (verified): merging #1012, for 30 min), never the commit's raw text, with the line that an announcement informs and grants nothing. - C7, a release cut holds every merge. Given a session that has reserved release v0.16.0 for its cut, when any other session's land step runs while that reservation is live, then the land step refuses and names the holder and the release, and the reservation ends when the cut's tag reaches the remote or its holder releases it.
- C8, the hold is shown. Given a live release reservation, when any session or person runs
abcd statusor a session reaches its next prompt after a fetch, then it is shown "release v0.16.0 being cut by @maya: merges are held". - C9, expiry survives a wrong clock. Given a sender whose clock runs fifteen minutes slow, when its thirty-minute
mergingannouncement is fetched, then the announcement is shown for thirty minutes from when this checkout first fetched it, not judged against the sender's clock. - C10, a failed fetch is said, never silent. Given a session whose last fetch of the announcements failed (offline, an expired login, a refused fetch), when its next prompt comes, then it is shown "status unread since 09:12: <reason>"; an empty list is shown only after a fetch that succeeded, and a checkout with no shared remote shows nothing.
- C11, a doubtful announcement is flagged, and a bad branch never blocks the rest. Given an announcement whose commit names a sender other than the branch's owner, a status branch that was rewritten rather than added to, or a branch under
abcd-status/whose name is neither a holder id nor a lower-case forge username, when the announcements are read, then the doubtful announcement or branch is shown marked with the reason, and every other branch is still read. - C12, the prompt never waits on the network. Given a shared remote that does not answer, when a prompt is submitted, then the prompt hook returns within one second, showing announcements from the last completed fetch with its age.
- C13, a cloud session can announce. Given a hosted cloud session with no preflight receipt, when it pushes an announcement, then the push hook admits the push because it is a fast-forward of commits that change no file, the same shape check reservations pass.
- C14, only announcements pass without a receipt. Given a push under
abcd-status/that changes a file or rewrites the branch, when it is pushed, then the push hook refuses it as it refuses any branch without a receipt. - C15, the history cannot be erased or rewritten. Given the repository's rulesets, when anyone tries to delete or force-push a branch under
abcd-status/, then the forge refuses it, and the ruleset is mirrored in the repository's rulesets folder, applied by the person from that mirror. - C16, a person reads everyone's status. Given announcements from several senders, live reservations and a release hold, when a person runs
abcd status, then abcd fetches once and lists the announcements newest first with sender, kind, item, time and how long each still stands, marking verified, claimed and doubtful senders as C17 and C11 do, together with who holds which reservation and any release being cut. - C17, a sender is checked against the forge's record. Given an announcement on Maya's status branch, when a session runs
abcd status, then abcd reads the forge's record of who pushed that update and, on a branch named by a username, shows the sender as verified when it names the branch's owner, as doubtful when it names someone else, and as claimed when the forge cannot say (no login, another forge, a push made by an app); on a branch named by a holder id, which names no account the record could match, the sender is shown as claimed and the forge is not asked. - C18, a flood of announcements is summed up. Given 200 announcements that arrived since a session's last fetch, when its next prompt comes, then it is shown the newest announcement for each item, at most ten lines, and a count of the rest with the command that lists them all.
Decomposition
Run by hand under decompose-before-filing on 2026-10-15; agent-seeded, revised after review, for the product thinker's confirmation.
| Part | Type | Home | Verdict |
|---|---|---|---|
| Making, reading and listing fixed-form announcements on the shared remote (C1 to C6, C9 to C12, C16 to C18) | capability | this intent, generalising the reservation primitive's write, fetch, trailer collection and render rather than adding a second copy (one-canonical-primitive) |
file here |
| A release cut held by a reservation the land step reads (C7, C8) | capability | this intent; it widens the reservation's subject from a record to a release and adds a reader to the land fence, so it builds_on itd-2609091034175565; it would resolve iss-2609091037191879 |
file here |
| A status branch that moves without a preflight receipt, and the ruleset that keeps its history (C13 to C15) | trust rule | a new ADR beside adr-2610031352212697, adr-2610150729333337, minted at planning; clauses in brief invariants 7 and 10 naming abcd announce, abcd status and the status branch, written in the change that builds them, as the reservation's clauses were |
minted |
| When abcd fetches the announcements (C12, C16): only through verbs whose meaning says so | trust rule | brief invariant 7 (adr-38) as it stands, with a clause naming abcd announce and abcd status as the reservations' clause does (decision 14) |
clause at planning |
| A message from a peer informs and never authorises | stance | already held for the host's own messages; stated as decision 4 and taught by C6's rendered line; no new principle | cite, no new record |
| The sub-agent budget | capability | itd-2610100704270254, beside this intent (decision 5) | not this intent |
| Session presence: which sessions are running now | capability | iss-2608220750029993 and the session register itd-2609150819440345; announcements say what happened, not who is alive (decision 16) | keep both |
| An opt-in broker adapter for announcements on a local network | capability | itd-2609151838327688, kept as a draft to be rewritten later as an optional faster carrier of these announcements (decision 15) | keep both |
Decisions
Ruled by the product thinker on 2026-10-15 ("ok, agreed, option 1"; the decision log's entry of that day), choosing between the three options of the design pass of 2026-10-14 (2026-10-14-session-messages-across-accounts):
- The carrier is short fixed-form notes on the shared remote. Each note carries a kind from a fixed list, the record or pull request it concerns, and an expiry, and no free text; a question points at an item, and the conversation happens on that item. This replaces the shared directory and the local-network bound this draft first stated.
- What is really a hold stays a reservation (itd-2609091034175565): who owns an item is its reservation, and "hold your merge during a release cut" becomes a reservation on the release rather than a note.
Settled without a question, each the one defensible answer on the record (the research note gives the grounds):
- A shared machine folder is out: it needs a file another account can write, which abcd never reads (the ruling of 2026-10-14, in the decision log), and it never leaves the machine.
- No note grants anything (no slot loans, no approvals): a note informs or asks, never authorises.
- The sub-agent budget (itd-2610100704270254) sits beside this intent, not in it: the machine cap is a property of one machine, and hosted sessions run on their own.
- The host's same-account messages stay a wake-up accelerator only, never the record.
- A note that cannot be fetched is reported as unread since a time and for a reason, never shown as silence; a sender is shown as claimed until identity can be bound.
- Two probes from a real hosted session come first in the build: whether a push to a branch outside the host's own prefix is accepted, and which forge identity the push arrives as. The product thinker asked for the plan on 2026-10-15 before the probes ran, so both stand as a scope-condition hypothesis; a refused push returns the branch prefix to the product thinker.
- What the probes found (a hosted session the product thinker ran on 2026-10-15): the push to a branch outside the host's own prefix was accepted (
abcd-msg/probe-261015203325was created); the forge credited it to the product thinker's own account (a user account, not an app); and the container's default git identity is a tool's, not the person's, so the attribution gate and the holder rule both refuse it. The product thinker ruled the same day that abcd works out the person's identity by itself, with no manual step, from the forge account whose token the session holds; that work is a separate change from this build. Scope condition 7 is therefore met by abcd: the push half held in the probe, and the identity half is abcd's to supply. That change is the token holder resolver (#1037), andabcd announceresolves its sender through it asabcd reservedoes: under a tool's identity it sends as the account the session's forge token belongs to, that account authors the commit, and the tool's identity is shown nowhere.
- What the probes found (a hosted session the product thinker ran on 2026-10-15): the push to a branch outside the host's own prefix was accepted (
Decided by the technical facilitator on 2026-10-15 on the two adversarial reviews, each grounded in a finding the reviews reproduced:
- One notes branch per person, not per session. A person's sessions append to one branch, rebuilding on a lost race (C2). A branch per session could never be swept under a no-deletion rule, so their number would grow with every session for good; one per person grows with the number of people.
- Branch names are lower case. Two names that differ only in case make every fetch on a case-insensitive filesystem fail (reproduced with git 2.52 on macOS), and the no-deletion rule would keep the bad branch for ever; so a username is lower-cased before it names a branch, and the reader skips and names any other branch (C11).
- A release hold is read by the land step, not only shown (C7): a hold that is only shown blocks nothing, which is the failure iss-2609091037191879 records.
- The push hook's shape check for notes is the reservation's (a fast-forward of commits that change no file), not a second trailer parser in shell; a note the reader cannot parse is flagged by C11.
- Expiry is counted from when this checkout first fetched the note (C9), the shape of the clock finding iss-2610142200372105 records for reservations.
Ruled by the product thinker at the planning interview of 2026-10-15:
- Notes are fetched only by a command whose job is that ("Only when a command checks", Q1):
abcd notes,abcd peersand the land step fetch them, and the prompt hook shows only the last fetch from disk, with its age. Brief invariant 7 stands without an exception; the alternative, an opt-in fetch from the prompt hook at most once a minute, was not chosen. Accepted cost: a session that runs none of those commands sees a new note only at its next merge. - The broker draft stays, to be rewritten later (itd-2609151838327688; "Keep it, rewrite later", Q2): a messaging service on the person's own network would wake an idle session the moment a note arrives, which notes on the shared remote cannot, but it never reaches another person's computer or a cloud session. It stays a separate draft, re-based on notes as an optional faster carrier when it is next worked on; until then it still describes the retired shared-folder mailbox.
- Notes are planned on their own, apart from the session register (itd-2609150819440345; "Plan notes on their own", Q3): notes say what a session did, the register would say which sessions are running and what each holds. The register's way of sharing between computers is still undecided, and notes do not wait for it.
- Senders are checked against the forge's record of who pushed ("Confirm as written" on the revised condition, Q6b, after the product thinker asked why it could not be added now): the forge's activity record names the account behind each push and was read successfully on 2026-10-15, so abcd checks it inside
abcd notes, whose documented meaning includes that read (invariant 7); a forge that cannot say leaves the sender claimed, the native default under invariant 2, with the forge lookup the adapter. - Notes cope with hundreds a day per person (Q6c, after the product thinker asked whether the limit was necessary): nothing in git limits that rate; what a session can absorb is capped by showing the newest note per item and a count (C18), and the remaining limit, about one push a second per person, is the broker draft's to lift.
- Notes carry the sender's holder id, and are kept permanently (revised 2026-10-29 by the privacy fix iss-2610290809526033: no login or name of any person is pushed, so the holder id replaced the username). A note names its sender by an opaque id minted once per account and kept in the abcd home, never by a login or a name. The same person on two machines is told from a local list of the ids they own, never from anything pushed. The forge's record of who pushed still names an account, but an id names none it could be matched against, so a sender on a branch named by an id is shown as claimed (C17); a branch named by a username, made before the holder id, is still read and checked. Notes are permanent as C15 makes them; deletion would not erase them in any case.
- The branches are named
abcd-status/<holder id>, one per person (revised 2026-10-29 by the privacy fix iss-2610290809526033: no login or name of any person is pushed, so the holder id replaced the username): the name must stay a branch so cloud sessions can push it, and starts withabcd-so it sits besideabcd-reserved/in the forge's branch list;abcd-noteswould have invited confusion with git's own notes feature. One branch per person was kept over one shared branch, because a shared branch makes every two sessions posting in the same second collide, most often around a release, and lets one bad push put everyone's notes in doubt. Hidden refs outside the branch list were weighed and not chosen: the cloud proxy refuses them and the forge's rulesets cannot protect them. Branches named by a username before the holder id are still read, and none is pushed any more. What a session posts and the commands that post and read it are decision 21's. - A session posts an announcement with
abcd announce, and a person reads everyone's status withabcd status(the product thinker, 2026-10-15). The word "note" clashed with git's notes feature and with abcd's own memory note, so what a session posts is an announcement; decisions 1 to 20 say "note" for it as they were ruled.abcd announce <kind> <item>is in the agents' command set besideabcd reserve.abcd statusis the people's view of what everyone else is doing: announcements, who holds which reservation and any release being cut (C8, C16).abcd peersis left as it is for now: its reservation listing duplicatesabcd status, and the product thinker ruled thatpeerskeeps its name for its future meaning, the sessions running now, local first and later over a private network, with its local duplicate check moving toabcd status --local; that change and renaming the status board to the dashboard are captured as their own records. The status board's rename also frees the word "status" for this command.
Prior Art
- 2026-10-14-session-messages-across-accounts: the options, the adversarial review, the state-of-the-art pass and the recommendation the ruling adopted.
- 2026-10-03-multi-agent-coordination-sota-and-run-lessons: the record inventory and the claim-as-branch evidence the reservations rest on.
- 2026-09-15-agent-messaging-on-a-local-network: the survey this draft first rested on, under a local-only bound the 2026-10-03 and 2026-10-15 rulings replace.
- Radicle's collaborative objects (each peer the sole writer of its own namespace) and Anthropic's sixteen-agent compiler run (coordination by locks alone), both cited in the research note: the per-writer branch and the hold-as-reservation.
- The prompt-router hook (
abcd hook prompt-router, itd-20's loader): the path a fetched note is shown through; no second hook.
SOTA
Surveyed on 2026-10-14 and ruled on 2026-10-15; sources, the options and the adversarial review are in the session-messages note, with the record inventory in the multi-agent coordination note. This heading collects the grounds on 2026-10-23; no new pass was run.
- Most coordination traffic is locks, not conversation. "Hold your merge" is a lease, "who owns this" a reservation. Anthropic's sixteen-agent compiler run (Carlini, February 2026) coordinated with locks alone (practitioner report, cited in the note).
- Each peer the sole writer of its own namespace (Radicle's collaborative objects) is the shape the per-session branch copies; one shared mailbox branch races on concurrent pushes.
- Peer text is a live prompt-injection route. The note records four incidents (the GitHub MCP toxic flow, Clinejection, Comment and Control, GitLost). The architectural defence (CaMeL; the design-patterns paper) keeps untrusted text from reaching an agent as free text; spotlighting lowers attack success without removing it. Hence fixed kinds, no free text.
- The host's own messages are per login. They reach the same account's cloud sessions and machines, never another login or the forge, so they stay a wake-up accelerator.
- A sender's identity on the remote is self-declared. A ruleset binds a prefix to a team, role or app, never to one user, so a sender is shown as "claims to be" until identity can be bound.
- Shown cost:
git ls-remotewith a pattern still downloads every ref (1,011 on 2026-10-14);--headsnarrows it.
Path 2: native, on the reservation primitive already on the remote, shaped to Radicle's per-writer namespaces; no dependency. Probe P1 (a hosted session's push outside its own prefix, and the pusher the forge names) comes before the build. The independent fit-challenge ran in the 2026-10-14 design pass.
Open Questions
None open.
Audit Notes
Empty. Populated by intent-auditor when intent moves to shipped/.
Grounds
- pursued: from today a second person's sessions and cloud sessions work on this project, and none of them can see the messages local sessions use to avoid merging into each other's work; we expect notes and the release hold to stop that, and it would be shown wrong by a session merging into a held release or onto an announced merge in the first two weeks.
Frontmatter
| id | itd-2609151838312703 |
|---|---|
| type | intent |
| lifecycle | planned |
| kind | standalone |
| severity | minor |
.abcd/development/intents/planned/itd-2609151838312703-sessions-announce-what-they-are-doing.md
open on GitHub ↗ · commit history ↗
References6
- adr-2610031352212697Claims are branches on the shared remote; nothing kept on one computer is the register; claim text is datarelated
- itd-2609091034175565Before an agent starts on an item, it reserves it on the shared remote, and everyone who works on the project sees the reservationbuilds on
- itd-2609150819440345Which session holds which worktree, branch or record is coordinated entirely by conversation, so every new session repeats a handshake that nothing records. A session joining work in progress has no way to ask what is already claimed: it messages the peers it can see, waits for replies, and rebuilds a picture that the sessions before it had already built and did not write down. One measured encounter cost four messages and about fifteen minutes before any work began, and the picture it produced is not durable, so the session after that pays again. The convention that a diff you did not make is a peer's work depends on knowing who the peers are and what they hold, which is precisely the thing no artefact carries. The repository already records this gap for the narrow case of detecting a peer session before mutating git state; the wider case is claim rather than presence, and the two want the same substrate. Whatever holds it should be as cheap to write as it is to read, because a coordination record nobody updates is worse than the chat it replaced.related
- itd-2609151838327688An opt-in adapter to a local message broker brings push delivery and cross-machine reach to the session mailbox: with the adapter enabled a session is woken the moment a message arrives, machines on the local network exchange messages without a shared mount, and every delivered message is still mirrored to the mailbox as a record; without it the mailbox works as beforerelated
- itd-2610100704270254An abcd run sets how many sub-agents it keeps alive by the models they run onrelated
- itd-2610170634394993Headless agents in parallel coordinate through the shared remote, not conversationrelated
Referenced by27
- adr-2610150729333337A status branch moves without a preflight receiptrelated
- adr-2610222026262980Coordination between headless agents is bounded by deadlines, fenced by the claim's tip, version-checked, and done under each session's own credentialrelated
- iss-2608220750029993Session-presence detection for shared checkouts: each live session leases a marker (session id, intended branch, started-at) in the checkout, and the pre-commit gate warns when another live session's lease is present — the armed-detector rung of the AGENTS.md concurrent-session conventions, which are vigilance-only until this ships. Lease home needs thought: the local tier is per-worktree by design, and the hazard is precisely two sessions in ONE worktree, so the lease belongs to the checkout, not the branch.related
- iss-2609091037191879A release cut in progress is invisible to every other session, so a change landing on main during a cut is discovered in the changelog rather than chosen. abcd should let launch declare a cut lease that peer sessions, merges and record closes can see: a session about to merge or close a record during a lease is told which cut it would join and who is cutting, and the cutting session rules on the ordering. The convention is in AGENTS.md (concurrent sessions); this seeds the mechanical form, alongside session presence (iss-2608220750029993) and itd-33.related
- iss-2610142200372105A reservation holder whose clock runs behind by more than half its lease plus the five-minute take-over margin can be taken over between its own renewals, so two drains on two accounts can work one issue; the bound is documented on the reserve page and in spc-2610031753359849 but not closed, and it is the one remaining route to that failure.related
- iss-2610150726321422The board bare abcd prints is called the status board, but it is the dashboard in the terminal: abcd dashboard already serves the same view to a browser over Tailscale, and the board is moving to that HTML form. Two names for one thing, and the word status is now wanted for abcd status, the people's view of what other sessions announce and hold (itd-2609151838312703 decision 21). The product thinker ruled on 2026-10-15 that the status board should be renamed the dashboard. About 14 files say status board: README.md, commands/abcd.md, docs/how-to/install.md, docs/reference/cli/commands.md and the brief.related
- iss-2610150726331622abcd peers does two unrelated things: it lists records that sibling worktrees and local branches hold that this checkout does not (an agent's duplicate check before filing), and it fetches and lists the reservations on the shared remote. The second duplicates abcd status from itd-2609151838312703, the people's view of what everyone else is doing. The product thinker ruled on 2026-10-15 that peers keeps its name for its future meaning, which sessions are running now, local first and later over a private network such as Tailscale or WireGuard (the session register itd-2609150819440345), and that the local duplicate check belongs under abcd status --local.related
- iss-2610262031474937The naming register already has `dashboard` as a verb of its own, but itd-2609151838312703 plans to rename the bare status board 'the dashboard'.related
- iss-2610262033053387The announcements intent promises that nobody's session merges into a release being cut; the launch page says the release hold does not stop a merge armed or queued before the reservation.related
- iss-2610262034278916The announcements intent frees the word 'status' for `abcd status` by renaming the board; the board chapter still calls the bare board the Status Board.related
- iss-2610262036208370The site chapter's 'status page' renders the board's Now/Next/Later block; itd-2609151838312703 renames the board so that the word status is free for abcd status, the view of announcements and reservations.related
- iss-2610262037274982The sessions-announce intent promises every session's merge waits out a release cut; the reserve brief says merges armed before the hold still landrelated
- iss-2610262037281449The sessions-announce intent plans to rename the status board (bare abcd) to the dashboard; the dashboard brief already uses that name for the Tailscale web serverrelated
- iss-2610262039259706The announce intent says a reservation records who owns an item, but universal patterns puts multi-agent claims in `.abcd/coordination/`related
- iss-2610262041006295'status' is the glossary's Now/Next/Later record family, and the announcements intent gives the same name to `abcd status`, a view of announcements, reservations and release cuts.related
- iss-2610262042412794itd-2609151838312703 plans to rename the status board to the dashboard; itd-2610070549060530 uses board and dashboard for two different surfacesrelated
- iss-2610262042504165itd-2610100704270254 makes the sub-agent budget a repository setting; itd-2609151838312703 calls it a property of one machinerelated
- iss-2610262042513525itd-2610170634394993 and itd-2609151838312703 each define the one view of what every session is doingrelated
- iss-2610262042524170itd-2609151838327688 mirrors messages to the session mailbox; itd-2609151838312703 says that mailbox is retiredrelated
- iss-2610262043581439'dashboard' is the new name for the terminal status board in itd-2609151838312703 and the browser page reached through Tailscale in itd-2610032150577708related
- iss-2610262044295915`status` names the Now/Next/Later record family in the glossary and the people's view of announcements and reservations in the planned verbrelated
- iss-2610262044300840`peers` means records held by sibling worktrees in the shipped reader, but the planned announcements ruling reserves it for sessions running nowrelated
- iss-2610262044310958The shipped inbox hands cross-machine report delivery to the announcements intent, which carries no free textrelated
- itd-2609151838327688An opt-in adapter to a local message broker brings push delivery and cross-machine reach to the session mailbox: with the adapter enabled a session is woken the moment a message arrives, machines on the local network exchange messages without a shared mount, and every delivered message is still mirrored to the mailbox as a record; without it the mailbox works as beforebuilt on by
- itd-2609221656361680A managed repository reports back to abcd, and abcd says so at its next startrelated
- itd-2610170634394993Headless agents in parallel coordinate through the shared remote, not conversationbuilt on by
- spc-2610150728396006sessions-announce-what-they-are-doingimplemented by
mentions28
- adr-38Implicit checks are disk-only — the network answers only an explicit ask
- adr-2610120558328615A private advisory's record never enters the public ledger, its store is never committed, and nothing public carries an advisory id or hint
- coordination-lives-on-the-shared-remoteCoordination lives on the shared remote, never only in conversation
- dcn-26092200000000042026-09-22 — Two intents the product thinker added for the autonomous run of 2026-09-23, interviewed and planned the night before (both READY, both in the run's batch 1b). A managed repository reports back to abcd (itd-2609221656361680): one verb files a written account against an abcd-issued template with a machine-readable block beside the prose, into an inbox in the user account's machine store, never in either repository's tree; abcd says at its next start how many wait and from how many repositories; a read-only verb renders them naming the sender; nothing is filed until a person or a session acts, and what is filed carries the sender's root-commit fingerprint and a generic description, never its name. Two sessions share one run (itd-2609221656373558): the second joins without a word from the first and the first never waits on it; all three division modes are tried, one per window in order (a claim per record, whole batches, build against review-and-land), because the product thinker wants each measured rather than one chosen in advance; a claim is an atomic create with a lease that lapses; the second session holds at most one lane, may never cut a release or take a lane that recalibrates the reading corpus, backs off on contention with a logged reason, and its stop conditions stop only itself; the run's report compares the three modes on lanes landed, wall clock, collisions and agent minutes. Cross-account and cross-machine agent communication stays out of the run: the four drafts (itd-33, itd-2609151838312703, itd-2609151838327688, itd-2609150819440345) get planning briefs only, with the trust question a shared mailbox raises named in the brief.
- dcn-26101400000000042026-10-14 — abcd never reads a file another account can write (the product thinker's ruling during the machine-load work of 2026-10-14, recorded here on 2026-10-15 from the design brief that relayed it; the original words were not logged at the time). It rules out a directory shared between accounts as a channel between sessions, the shape draft itd-2609151838312703 first proposed.
- dcn-26101500000000012026-10-15 — Sessions under different accounts, on different machines and in cloud sessions tell each other what they are doing through short fixed-form notes on the shared remote, with no free text, and what is really a hold stays a reservation (the product thinker's ruling, "ok, agreed, option 1", choosing between the three options of research note 2026-10-14-session-messages-across-accounts; recorded on itd-2609151838312703 decisions 1 and 2). A forge coordination issue and a private side repository were the options not chosen.
- dcn-26101610403949702026-10-16 — A drain lane's stage shows in abcd peers (facilitator-on-delegation, drain-many-accounts): a drain lane's stage is published as a closed-vocabulary trailer on its reservation's renewal commits, and abcd peers lists it beside the reservation with each holder's hand-back tombstones of the last day; the people's status view inherits the same rows when it takes the reservation listing over (itd-2609151838312703, iss-2610150726331622); and the holder a process resolves through the forge is cached for that process (grounds: the reservation is the record every account already fetches, so the stage costs no new act; iss-2610161015434746, iss-2610161015433495).
- dcn-26101610441876732026-10-16 — The drain bundle's pre-pass answers (facilitator-on-delegation, drain-many-accounts): brief invariant 7's sentences naming what drain and implement step fetch and push are amended, in each building step that adds an act, to name the per-move fetch, the reservation before a judgement, the hand-back tombstone, the renewal of the lane in progress, the parked lanes' pull-request listing, the fork question and the sync's fetch of the default branch; brief invariant 19 gains a clause that an issue whose related_intents names an intent is not taken; a hand-back published on origin is the record of a judgement kept on the reservation, not a field classification written onto the issue, so invariant 19's re-derivation stands; and each member keeps both against its siblings itd-82, itd-2609091034175565 and itd-2609151838312703, building on the first two (grounds: the invariants are the record of what may touch the network and what a machine may take, so they move with the surface, as the principle spec-moves-with-the-surface requires).
- dcn-26101807203662822026-10-18 — The coordination pass runs on demand (facilitator-on-delegation, itd-2610170634394993 planning prep): land, build, drain and status run the pass from the records they have just fetched before they act; there is no timer lease and no process that must stay alive, and every deadline and expiry is derived when the records are read, as a reservation's release already is (grounds: the draft's research note on controllers; kubernetes.io/docs/concepts/architecture/controller; brief invariant 7; itd-2609151838312703 decision 14; itd-2609091034175565 decision 13)
- dcn-26101807203824722026-10-18 — The release cut's hold is the announcements intent's reservation (facilitator-on-delegation, itd-2610170634394993 planning prep): this intent adds no lease of its own for a release being cut; the merge path already reads the release reservation (grounds: itd-2609151838312703 C7 and decision 2; internal/core/landing/releasehold.go)
- dcn-26101807203893522026-10-18 — A hold is a reservation; a merging announcement informs (facilitator-on-delegation, itd-2610170634394993 planning prep): the pass enforces holds only through reservations and reads a merging announcement as information, so the short status line carries no hold field (grounds: itd-2609151838312703 decisions 2 and 4)
- dcn-26101807204020072026-10-18 — A session's state line is fixed-form (facilitator-on-delegation, itd-2610170634394993 planning prep): the line's state is a stage from a fixed list plus the record ids it waits on, carried on the person's existing abcd-status branch, never free text, and no branch per session is added (grounds: itd-2609151838312703 C3 and decisions 1 and 9; internal/core/claim/stage.go)
- dcn-26101807204023612026-10-18 — A session's line carries its own expiry (facilitator-on-delegation, itd-2610170634394993 planning prep): a line is renewed and expires on its own, counted from its first fetch, so a session that holds no reservation still shows as live or gone (grounds: itd-2609151838312703 C9; kubernetes.io node leases)
- dcn-26101807233425962026-10-18 — The central view is abcd status (facilitator-on-delegation, itd-2610170634394993 planning prep): the view of what every session holds, does and waits on is shown by abcd status, which the product thinker named the people's view of what everyone else is doing; abcd peers keeps the meaning they reserved for it, the sessions running now seen locally and later over a private network, which this intent's decision 4 dropped (grounds: itd-2609151838312703 decision 21; the draft's decisions 3 and 4)
- dcn-26102221050368442026-10-22 — The status-branch ruleset is applied by the person by hand, by design, and C15 is corrected to say so (facilitator, on the delegation of 2026-10-14; iss-2610222040438015, itd-2609151838312703): every ruleset in .abcd/work/rulesets is applied by the person with the README's gh api command and refreshed into the mirror, and invariant 10 lets abcd change a remote only through a dedicated, confirmed apply verb, which no record ever planned for rulesets; so C15's last clause, 'applied through the rulesets' own apply verb', was a drafting slip, not a promise owed, and becomes 'applied by the person from that mirror'. The outcome C15 asks for (the forge refuses deletion and force-push under abcd-status/) is unchanged and live as ruleset 25302453. A verb that applies or verifies rulesets would belong with the branch-protection doctor draft (itd-92), not here (grounds: .abcd/work/rulesets/README.md; brief invariant 10; adr-44)
- dcn-26102817271513482026-10-28 — Merge-gate step 3 (itd-2610150602547271, recording the review pair's verdicts for a head) goes ahead while other copies hold files it shares, under the coordinator's narrowed rule for lapsed holds (recorded with the store-and-sweep change): a hold that overlaps only in files, on another subject, with nothing pushed, does not hold a ready change back. The laptop's iss-2610241107191205 shares only commands/land.md, has pushed nothing but its reservation ref, and is about lapsed holds and reservations in internal/core/claim. Step 3 changes no claim code and no behaviour of a lapsed hold or reservation: its change stays in internal/core/landing (a review receipt store beside the preflight receipts) and the land verb's --record-review flag. This machine's itd-2609151838312703 (sessions announce what they do) and itd-2610091010348892 (the hosted site) share land.md, 38-land.md, land.go and land_surface_test.go, but neither is about review receipts. With no shared subject, step 3 lands when it is ready, and whichever change lands second merges main. Ruled by the coordinator, abcd-f5, on 2026-10-28; applied by lane A.
- iss-2610150551207288When abcd offers the product thinker options, there is no option for 'this question is unclear'. On 2026-10-15, at the planning interview for itd-2609151838312703, the product thinker could not follow a question about an overlapping draft and had to type 'explain, unclear' into the host's free-text field. The asking rules let an option set end only in 'Decide later' or 'None of these', so a person who does not understand the question has no option to say so. The product thinker's words: when offering options to the PT, always offer 'Unclear, explain with an example' to ensure the user can select that.
- iss-2610152046379890A hosted cloud session's clone carries the host's default vendor identity as its git author, not the person's: the cloud probe of 2026-10-15 found it in the clone's git config, while the forge credited the push to the person's own account through the token. The product thinker ruled the same day that this vendor identity must not be shown anywhere, in no commit, ref, trailer or output, and that no person should have to set it by hand ('Who has to remember what? No manual steps.'). Session announcements (itd-2609151838312703) already fall back to the token's login for their own commits; every other commit a cloud session makes still carries the vendor identity until its setup sets the person's.
- iss-2610171626398856The v0.15.1 release review found at CHANGELOG.md:19-72: INCOMPLETE (judgement call). The 0.15.1 section has no Added line for user-facing surfaces that are new since v0.15.0 and present in this binary. (1) `abcd status`, a top-level verb in `abcd --help` with a user-invocable commands/status.md (block: people); commands/status.md does not exist at v0.15.0. (2) `abcd announce` (commands/announce.md). Both come from the planned itd-2609151838312703 and its open spc-2610150728396006. (3) `abcd implement load --race-gate` and the `load.preflights` / ABCD_LOAD_PREFLIGHTS setting (internal/core/implement/load_slot…
- iss-2610262038222403The brief index says spc-N references trace a predecessor implementation's spec store; the status chapter cites spc-2610150728396006 as this repository's design record, by step.
- iss-2610290809526033Reservation and announcement commits that abcd pushes to origin name the holder by their forge login: the Abcd-Holder and Abcd-Sender trailers carry it, and the announcement branch is named after it, so every reservation publishes which account made it in text and in the branch list.
- itd-20`/abcd` Tells You Where You Are
- itd-2610120738075547Work handed to a cloud session comes back, or says why not
- itd-2610161016401115Drains run unattended and visibly
- itd-2610170638184486Every session keeps a checklist on disk, so no run stalls and no stall spreads
- itd-2610222029228127Every session's checklist reaches a shared copy and the phone
- spc-2610161044461448drain-many-accounts
- spc-2610230758581403several-headless-agents-work-one