Development record
Nothing in `abcd implement` counts the agents alive, so a run's ceiling rests on the orchestrator's arithmetic: `implement join --ceiling N` records the ceiling and the report repeats it, and the v0.10.0 changelog says as much (recorded and reported, not enforced). Autonomous run A went over its ceiling three ways. At the start two lane agents each forked themselves into three parallel workers that no count saw, until the lane brief forbade forks. At 10:28Z on 2026-09-23 the orchestrator had six agents alive against a ruled five. During the v0.10.0 cut, at 05:06Z on 2026-09-24, it launched two cross-check agents into one free slot, five alive against four, and stopped one within a minute. Each was found by the orchestrator recounting, never by a tool. Wanted, for the implement verb (itd-2609201916151817): agent_start and agent_end kept by the verb itself, a live count derived from them, and a refusal to start an agent over the ceiling. A fork cannot be seen from outside the host, so the lane brief's no-fork rule stays the discipline for that half.
Nothing in abcd implement counts the agents alive, so a run's ceiling rests on the orchestrator's arithmetic: implement join --ceiling N records the ceiling and the report repeats it, and the v0.10.0 changelog says as much (recorded and reported, not enforced). Autonomous run A went over its ceiling three ways. At the start two lane agents each forked themselves into three parallel workers that no count saw, until the lane brief forbade forks. At 10:28Z on 2026-09-23 the orchestrator had six agents alive against a ruled five. During the v0.10.0 cut, at 05:06Z on 2026-09-24, it launched two cross-check agents into one free slot, five alive against four, and stopped one within a minute. Each was found by the orchestrator recounting, never by a tool. Wanted, for the implement verb (itd-2609201916151817): agent_start and agent_end kept by the verb itself, a live count derived from them, and a refusal to start an agent over the ceiling. A fork cannot be seen from outside the host, so the lane brief's no-fork rule stays the discipline for that half.
Grounds
- pursued: an orchestrator that logs its agents is refused the fifth start under a ceiling of four; an overrun found only by the orchestrator recounting logged agents would show it wrong.
Frontmatter
| id | iss-2609240646542516 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-2609240646542516-nothing-counts-live-agents-so-the.md
open on GitHub ↗ · commit history ↗
mentions2
- iss-2609240648533996What `abcd implement` (itd-2609201916151817) would have to carry to launch autonomous run A without its hand-written prompt, from having run it over 2026-09-23/24. The pilot's list (iss-2609211105021406) stands; this adds what a two-day run across three orchestrator sessions and a second session needed. (1) The run manifest as data: the batches and lanes in order with their record ids, the decisions the run may not reopen, the stop list, and the release step with the agenda line that authorises the publish approval. (2) The routing table as a verb output the orchestrator reads, not a scratch file its first lane derived by hand: 490 open captures split into 249 to build, 203 for the product thinker, 38 to judge on their merits, with 11 duplicates marked. (3) The pace and ceiling rulings as dated values that supersede one another, which the verb enforces and the log cites: the run lived under four ceilings (two implementers and one reviewer, then five, six and four agents) and three paces (two hours on and five off, three on and two off, then no pauses), each re-read by hand from a notes file by every orchestrator. (4) The roles and the model per role: implementers and fix rounds on one model, reviewers and auditors on another and one at a time, a fresh implementer per fix round, a reviewer that never implemented, and the model id each agent writes into its trailer. (5) The review receipts: which reviews a lane owes before it lands (ruthless, security at a trust boundary, a second lens on an ADR, the fidelity audit after merge) and the verdict each returned, so that "owed" is a query rather than a list in the handover. (6) The rotation chain and the handover block: the named successor sessions, the trigger at about 60% of context, and the block's fields (rulings in force, queue state, each lane's next move, hazards, owed items) written by the verb from run state; a fresh orchestrator started from a handover of about 650 words in 4% of its context. (7) A live-agent count that enforces the ceiling: agent_start and agent_end kept by the verb, a refusal to start an agent over the ceiling, and a ceiling_overrun event when one is found (iss-2609240646542516, iss-2609240646549900). (8) Lane retirement as a step: the ancestor check against the remote default branch, the worktree removal, and a branch delete that does not wait on the local default branch (`git branch -d` refuses a branch the merge queue merged until the local default branch is fast-forwarded). (9) Measurement the verb writes itself, with required fields per event, since the hand-written log lost its agent, gate and review lines at the first rotation (iss-2609240646555891). Evidence: the run's prompt, run file and lane brief were about 50 KB of prose; the first orchestrator's start-up reading cost about 15% of its context before any lane opened, and each rotation re-read the rulings from the top of the notes file.
- itd-2609201916151817One verb takes a READY intent to delivered, and refuses while a decision is open