Public: anyone can read this; the crew can change it.
The autonomy tick's requested line says how many pulls moved and why the rest did not #2861
Check · Review · Land · Live done — Landed and live in production.
The tick's `requested` line now says how many pulls moved and groups the rest by reason. For example: `requested="2/8 moved; 3 a run is in flight, 2 handed to a person, 1 held"`. The new test and the five existing tests in `test/requested.test.ts` pass. I could not run `tsc --noEmit` because `bun install` failed in the sandbox with a read-only tempdir error.
shipped production is serving it deploy 93e874d
The tick's requested line now says how many pulls moved and groups the rest by reason. For example: requested="2/8 moved; 3 a run is in flight, 2 handed to a person, 1 held". The new test and the five existing tests in test/requested.test.ts pass. I could not run tsc --noEmit because bun install failed in the sandbox with a read-only tempdir error.
- What counts as moved: a pull counts as moved only when a feedback run was queued or the reviewer was asked this tick. A pull whose run was already queued by its builder assignment counts once.
- Plain data:
tallyRequested(moves)insrc/crew/requested.tsreturns{ moved, total, waiting: { reason: count } }./systemor a test can read it without parsing logs.moveRequestedstill returns its per-pull array, so existing callers and tests are unchanged. - The line:
tallyWords(tally)renders the tally, andsrc/crew/autonomy.tsuses it on the tick line. Reasons are listed most common first. - Reason groups: the groups are
a run is in flight,handed to a person,held,waits for a slot,waits for a check,settledandcannot move. They are mapped from the existing why-not strings in a small function, so a new why-not string falls intocannot moveuntil it is added there. - Tests:
- The new test in test/requested.test.ts has three pulls in three states: a stale verdict, an unassigned pull that gets a builder, and a pull assigned to a person.
- It checks the counts, including the assignment-queued run counting once, and the rendered line.
- A second pass checks the in-flight grouping.
I did not surface the tally on /system itself, only made it readable. Nothing was added to the logged line when no pulls have changes requested; it is still omitted then.
🤖 Generated with Claude Code
The tick line now reads 2/8 moved; 3 a run is in flight, 1 held. It is plain data with a renderer, the new test pins the counts and the wording, and nothing user-facing, no door and no input changed, so the security, terminal and dependency items do not apply. Two things I would do next: (1) say the groups so they read as a sentence (3 in flight, 2 with a person, 1 held); 3 a run is in flight is awkward in a log line a person reads. (2) The a review of the new head is out or could not be queued reason is grouped as in flight, but it also covers a failed queue, so a stuck review hides there; give it its own group.
The tick's
requestedline now says how many pulls moved and groups the rest by reason. For example:requested="2/8 moved; 3 a run is in flight, 2 handed to a person, 1 held". The new test and the five existing tests intest/requested.test.tspass. I could not runtsc --noEmitbecausebun installfailed in the sandbox with a read-only tempdir error.tallyRequested(moves)insrc/crew/requested.tsreturns{ moved, total, waiting: { reason: count } }./systemor a test can read it without parsing logs.moveRequestedstill returns its per-pull array, so existing callers and tests are unchanged.tallyWords(tally)renders the tally, andsrc/crew/autonomy.tsuses it on the tick line. Reasons are listed most common first.a run is in flight,handed to a person,held,waits for a slot,waits for a check,settledandcannot move. They are mapped from the existing why-not strings in a small function, so a new why-not string falls intocannot moveuntil it is added there.- The new test in
test/requested.test.tshas three pulls in three states: a stale verdict, an unassigned pull that gets a builder, and a pull assigned to a person. - It checks the counts, including the assignment-queued run counting once, and the rendered line. - A second pass checks the in-flight grouping.I did not surface the tally on
/systemitself, only made it readable. Nothing was added to the logged line when no pulls have changes requested; it is still omitted then.🤖 Generated with Claude Code
Closes #2856