@@ -94,13 +94,17 @@ 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. ` resolveTurnLabel `
101+ (` src/tui/session-chrome.ts ` ) maps execution onto the closed set
102+ ` ACTIVITY_STATES ` exported from that module. Live occupation cycles
103+ ` LIVE_ACTIVITY_WORDS ` (` working ` , ` warping ` , ` buzzing ` , ` grinding ` ,
104+ ` thinking ` , ` doing ` , ` cooking ` , ` creating ` , ` imagining ` , ` inventing ` )
105+ on ` LIVE_WORD_MS ` ; gated turns still read ` waiting ` or ` stopping ` .
106+ That export is the source of truth for what the slot can say, not this
107+ list. It is led by a single density cell
104108(` rampPulse ` , ` src/tui/ramp.ts ` ). The cell, not the word,
105109is what says whether the session is healthy, and it carries four states:
106110
@@ -120,16 +124,16 @@ printed identically, so the only way to tell them apart was to wait.
120124waiting on something outside itself — and are told apart by motion: ` blocked `
121125holds perfectly still, which is the signal that the session is waiting on _ you_ .
122126
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
127+ While fleet agents are running, the slot stays live even when the parent
128+ turn has settled (idle-with-fleet). ` resolveTurnLabel ` and
129+ ` resolveRampPhase ` take a ` FleetProgress ` roll-up plus session occupancy:
130+ with live lanes the parent is idle by design, so its silence says nothing
131+ about whether the session is progressing, and blanking the lockup made a
132+ busy fleet look hung. Occupied sessions keep cycling a live-activity
133+ word; recovery stays silent rather than painting ` stalled ` . A blocked
134+ gate and a stopping turn still outrank the fleet. With zero running fleet
135+ agents and no pending continuation the roll-up is empty and every path
136+ through both functions behaves exactly as it does for a plain
133137single-agent turn.
134138
135139The stall phase is driven by the watchdog's own silence clock
@@ -257,10 +261,8 @@ while other work is still running, and **one** dry-fleet line when the last
257261lane finishes
258262(` N done ` ; failed and cancelled counts appear only
259263when non-zero, e.g. ` N done, M failed, K cancelled ` ).
260- When the parent is still in a turn or still has todo/doing work, that
261- line appends ` orchestrator continuing ` . The suffix is omitted when the
262- orchestrator is idle, and is not added while specialist lanes are still
263- running. An empty fleet with no outcomes does not claim the job closed.
264+ The line does not claim the run is idle — the parent often continues.
265+ The prompt-box lockup is what names that occupation, not this tally.
264266Per-lane ` done — summary ` walls and live ` dispatched ` re-announcements
265267are never printed. That dry-fleet line stays operator-facing. If tasks
266268are still todo/doing, the runtime re-enters the parent with collected
0 commit comments