diff --git a/src/main/codex/codex-subagent-activity.ts b/src/main/codex/codex-subagent-activity.ts index f7c8e9a167e..12967df3d56 100644 --- a/src/main/codex/codex-subagent-activity.ts +++ b/src/main/codex/codex-subagent-activity.ts @@ -6,8 +6,8 @@ // * `agentPath` is a tree path (`/root`, `/root/list_directory`); the trailing // segment is a semantic task name and the only label available. There is no // `thread/started` for a child, so nickname/role/depth do not exist. -// * `agentsStates` on `collabAgentToolCall` is `{}` on the MultiAgentV2 path; -// the V1 path does populate it. Nothing here reads it on either path. +// * `agentsStates` on `collabAgentToolCall` arrived empty (`{}`) throughout the +// probe, so nothing here reads it — state comes from `kind` alone. // * `thread/tokenUsage/updated` reports a per-thread RUNNING TOTAL, so the // latest frame replaces the previous one — it is never accumulated. diff --git a/src/main/codex/codex-subagent-roster.ts b/src/main/codex/codex-subagent-roster.ts index e0426812238..fa098abcdc9 100644 --- a/src/main/codex/codex-subagent-roster.ts +++ b/src/main/codex/codex-subagent-roster.ts @@ -1,7 +1,7 @@ // The Codex subagent roster: one journal row per spawn group, revised in place. // -// There is no snapshot to read. `agentsStates` is empty on the MultiAgentV2 path -// that emits these items, and children get no `thread/started`, so the roster is +// There is no snapshot to read. `agentsStates` arrived empty in the live probe +// and children get no `thread/started`, so the roster is // accumulated purely from `subAgentActivity` items — each of which arrives TWICE // (`item/started` and `item/completed`). Every transition here is therefore // idempotent, and a terminal state latches: duplicate and out-of-order delivery diff --git a/src/main/native-chat/agent-session-wire/provider-frame-disposition.test.ts b/src/main/native-chat/agent-session-wire/provider-frame-disposition.test.ts index a7757f2ff54..0a5ff8145fb 100644 --- a/src/main/native-chat/agent-session-wire/provider-frame-disposition.test.ts +++ b/src/main/native-chat/agent-session-wire/provider-frame-disposition.test.ts @@ -127,9 +127,9 @@ describe('codex subagent item disposition', () => { ).toBe('status-chrome') }) - it("leaves collab tool calls substantive — they are a V1 turn's only subagent signal", () => { - // Only the MultiAgentV2 path emits `subAgentActivity`, so the roster row - // never exists on V1. Suppressing this too would render a V1 fan-out blank. + it('leaves collab tool calls substantive — they may be the only subagent signal', () => { + // A session that reports no `subAgentActivity` gets no roster row, so + // suppressing this too would render its fan-out blank. expect( classifyProviderFrame('codex', 'item:collabAgentToolCall', { type: 'collabAgentToolCall', diff --git a/src/main/native-chat/agent-session-wire/provider-frame-disposition.ts b/src/main/native-chat/agent-session-wire/provider-frame-disposition.ts index b7f78d13a8c..16f40514be4 100644 --- a/src/main/native-chat/agent-session-wire/provider-frame-disposition.ts +++ b/src/main/native-chat/agent-session-wire/provider-frame-disposition.ts @@ -204,10 +204,10 @@ const CODEX_ITEM_CLASSIFICATIONS: Record = // `restoreThread` replays them straight through `items.handle`, which is where // the classification earns its keep. // - // `collabAgentToolCall` is deliberately NOT suppressed with it. Only the - // MultiAgentV2 path emits `subAgentActivity`; a V1 turn emits collab tool - // calls and nothing else, so suppressing them would leave a V1 fan-out - // showing nothing at all. + // `collabAgentToolCall` is deliberately NOT suppressed with it. Nothing + // guarantees a session reports subagent work as `subAgentActivity` at all; one + // that only ever emits the collab tool call gets no roster row, and suppressing + // that too would leave its fan-out showing nothing. subAgentActivity: 'status-chrome' }