@@ -94,13 +94,16 @@ and `@mention` tokens anywhere paint `UI.action`. Bare skill or agent words
9494(` implement ` , ` emil ` , ` brand review ` ) stay unstyled, as does a ` /review `
9595that appears mid-prose.
9696
97- While a turn is live the lockup slot swaps the wordmark for a semantic
98- activity word — never the raw tool, MCP server, or plugin identifier that is
99- actually executing. ` resolveTurnLabel ` (` src/tui/session-chrome.ts ` )
100- maps execution onto the closed set ` ACTIVITY_STATES ` exported from that
101- module (` thinking ` , ` planning ` , ` researching ` , ` building ` , ` working ` ,
102- ` waiting ` , ` stalled ` , ` stopping ` ); that export is the source
103- of truth for what the slot can say, not this list. It is led by a single density cell
97+ While a turn is live — or the session is still occupied by a live fleet
98+ or a pending dry-fleet continuation — the lockup slot swaps the wordmark
99+ for a semantic activity word — never the raw tool, MCP server, or plugin
100+ identifier that is actually executing. Live occupation cycles
101+ ` LIVE_ACTIVITY_WORDS ` (` working ` , ` warping ` , ` buzzing ` , ` grinding ` ,
102+ ` thinking ` , ` doing ` , ` cooking ` , ` creating ` , ` imagining ` , ` inventing ` )
103+ on ` LIVE_WORD_MS ` ; gated turns still read ` waiting ` or ` stopping ` .
104+ ` ACTIVITY_STATES ` exported from the session chrome module is the source
105+ of truth for what the slot can say, not this list. It is led by a single
106+ density cell
104107(` rampPulse ` , ` src/tui/ramp.ts ` ). The cell, not the word,
105108is what says whether the session is healthy, and it carries four states:
106109
@@ -120,16 +123,16 @@ printed identically, so the only way to tell them apart was to wait.
120123waiting on something outside itself — and are told apart by motion: ` blocked `
121124holds perfectly still, which is the signal that the session is waiting on _ you_ .
122125
123- While fleet agents are running, the slot reports the _ fleet _ , not the parent.
124- ` resolveTurnLabel ` and ` resolveRampPhase ` take a ` FleetProgress ` roll-up and
125- rank it above the parent's own stall clock: with live lanes the parent is
126- idle by design, so its silence says nothing about whether the session is
127- progressing, and reporting it was how a session with every lane wedged still
128- read as ` working ` . A fleet with no stalled lane reads ` working ` ; one
129- stalled lane makes the whole indicator read ` stalled ` , which is the state that
130- should pull an operator's eye to the panel. A blocked gate and a stopping turn
131- still outrank the fleet. With zero running fleet agents the roll-up is empty and
132- every path through both functions behaves exactly as it does for a plain
126+ While fleet agents are running, the slot stays live even when the parent
127+ turn has settled (idle-with-fleet). ` resolveTurnLabel ` and
128+ ` resolveRampPhase ` take a ` FleetProgress ` roll-up plus session occupancy:
129+ with live lanes the parent is idle by design, so its silence says nothing
130+ about whether the session is progressing, and blanking the lockup made a
131+ busy fleet look hung. Occupied sessions keep cycling a live-activity
132+ word; recovery stays silent rather than painting ` stalled ` . A blocked
133+ gate and a stopping turn still outrank the fleet. With zero running fleet
134+ agents and no pending continuation the roll-up is empty and every path
135+ through both functions behaves exactly as it does for a plain
133136single-agent turn.
134137
135138The stall phase is driven by the watchdog's own silence clock
@@ -255,8 +258,10 @@ Parent prose owns success narratives. Transcript fleet notices exist only for
255258attention live spawn_agent rows cannot keep: a lane ** failed** or ** cancelled**
256259while other work is still running, and ** one** dry-fleet line when the last
257260lane finishes
258- (` N done · nothing running ` ; failed and cancelled counts appear only
259- when non-zero, e.g. ` N done, M failed, K cancelled · nothing running ` ).
261+ (` N done ` ; failed and cancelled counts appear only
262+ when non-zero, e.g. ` N done, M failed, K cancelled ` ).
263+ The line does not claim the run is idle — the parent often continues.
264+ The prompt-box lockup is what names that occupation, not this tally.
260265Per-lane ` done — summary ` walls and live ` dispatched ` re-announcements
261266are never printed. That dry-fleet line stays operator-facing. If tasks
262267are still todo/doing, the runtime re-enters the parent with collected
0 commit comments