You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
P2: Structured worker result in the lead's wake notice, rendered as a card #1427
From the T3 Code Orchestrator V2 comparison (report: reports/T3 Code orchestrator for Solenta.md on branch coder/i-want-you-to-research-t3-codes-orchestr-fae77a). This is item 3 of 4. When a fork is merged back in V2, it hands back a summary of "decisions, files changed, commands/tests run, conclusions, and unresolved issues". In Solenta, the lead gets only the first line of the worker's last reply plus its branch (queueOrchNotice, electron/runner.js:1302).
Build
Step 1 (S). Extend queueOrchNotice to add a bounded block, about 2,000 characters, built from data Solenta already stores. No LLM summary is needed.
git diff --stat --summary <leadSnapshotSha>..<branch>. --summary prints create mode 120000 lines, which is exactly the case where a worker merge replaced core/dist with a symlink on main.
The verify gate's verdict for the worker's last turn.
The worker's invalidated hypotheses from the hypothesis ledger.
Open items from the worker's review itinerary (electron/reviewItinerary.js).
Step 2 (S). Show worker-result notices as a card in the lead's transcript, with a button that opens the Integration view (git:integrateWorker, electron/ipc.js). Clicking it counts as a real human approval. The card must be visible as soon as it arrives. V2's merge-back gives no sign it worked until the next message is sent (t3code #15063).
Tests
The notice for a worker branch that adds a symlink includes the create mode 120000 line.
The block is truncated at the cap.
The card renders, and its button calls integrateWorker.
A code-level pass produced a design for this issue. Full detail: reports/T3 Code orchestrator deep dive.md on branch coder/i-want-you-to-research-t3-codes-orchestr-fae77a. Revised size: M, about 350–450 lines including tests (2–3 days), up from S+S.
Corrections to the issue body
T3 has nothing to port here. In T3's code a child's result is just its last assistant message, and the parent is woken with a fixed pointer sentence. The "decisions, files, tests, open issues" delta exists only in T3's design docs. This is original design work.
The diff can miss the last turn. The checkpoint on the non-verify path is fire-and-forget (runner.js:1526-1532), so the branch can lag behind the worker's final edits. Workers must await it first. This is race R3 in the new race issue.
The itinerary has no open items. It has risks (reviewItinerary.js:43-53), so use those.
Appending text breaks the transcript fold.src/workerActivity.ts:51-62 exact-matches the canned notice text. Carry the data on the message row instead.
buildWorkerResult(worker) never throws and uses async git (gitTryAsync). The base comes from snapshotSha in crewIntegration.js:379-385. It returns null diffstat for worktree:false workers and remote projects.
flushOrchNotices passes workerResults through startRun into the appendMessage extras (runner.js:8461-8474). "Not delivered" events carry them too.
Renderer: a WorkerResultCard shows
status and verify chips;
the diffstat, collapsed after 8 lines;
a warning row for flags;
"Ruled out" and "Risks" lists;
a Review & integrate button wired to the existing onOpenCrewIntegration (ThreadView.tsx:804).
It renders in UserMessageBlockbefore the worker-activity fold (ThreadView.tsx:1403-1466), so it's visible the moment it arrives. That's the lesson from T3's #15063.
Tests
A worker that commits a symlink: the record and the wake row both carry create mode 120000.
On the non-verify path, the diff includes the last turn's files.
Caps and truncation hold.
A failed worker reports uncommitted > 0.
The renderer shows [data-worker-result], and rows without it still fold.
Implemented in f0c1b70 on branch coder/p2-structured-worker-result-in-the-lead--7e14e2. Not landed yet.
Step 1: workerResultBlock in electron/runner-orch-notices.js adds a [worker result <id>] … [/worker result] block to the done/failed notice. The block holds the diff stat and summary of leadSnapshotSha..branch, the verify verdict (only while a verifyCommand is set), invalidated hypotheses, and review-itinerary risks. The body is capped at 2000 chars, and mode 120000 lines are moved to the top so the cap can't cut them.
Step 2: src/workerResult.ts parses the block. WorkerResultCard renders it in the lead's transcript, and its "Integrate into lead" button calls git:integrateWorker directly, which is a human action through IPC. Notice lines outside the block stay visible next to the card.
Tests: electron/test/worker-result-block.test.js covers the symlink line, the cap and itinerary risks. test/threadView.test.tsx covers rendering the card, clicking the button, and parsing the runner's real block output. Electron suite: 4672 pass. The 2 failures (automation-create-mcp trigger fields, store prLinks) also fail on clean HEAD.
Activity
currentbits commentedon Oct 4, 2026
A code-level pass produced a design for this issue. Full detail:
reports/T3 Code orchestrator deep dive.mdon branchcoder/i-want-you-to-research-t3-codes-orchestr-fae77a. Revised size: M, about 350–450 lines including tests (2–3 days), up from S+S.Corrections to the issue body
runner.js:1526-1532), so the branch can lag behind the worker's final edits. Workers must await it first. This is race R3 in the new race issue.risks(reviewItinerary.js:43-53), so use those.src/workerActivity.ts:51-62exact-matches the canned notice text. Carry the data on the message row instead.Design
buildWorkerResult(worker)never throws and uses async git (gitTryAsync). The base comes fromsnapshotShaincrewIntegration.js:379-385. It returns null diffstat forworktree:falseworkers and remote projects.queueOrchNoticebuilds the result, then enqueues the P1: Durable crew notices and honest restart recovery with consent-gated resume #1426 record withresultplus a text block of at most ~2,000 chars, then flushes.flushOrchNoticespassesworkerResultsthroughstartRuninto theappendMessageextras (runner.js:8461-8474). "Not delivered" events carry them too.Renderer: a
WorkerResultCardshowsflags;onOpenCrewIntegration(ThreadView.tsx:804).It renders in
UserMessageBlockbefore the worker-activity fold (ThreadView.tsx:1403-1466), so it's visible the moment it arrives. That's the lesson from T3's #15063.Tests
create mode 120000.uncommitted > 0.[data-worker-result], and rows without it still fold.Depends on #1426's record shape and the R3 fix.
currentbits commentedon Oct 12, 2026
Implemented in f0c1b70 on branch coder/p2-structured-worker-result-in-the-lead--7e14e2. Not landed yet.
workerResultBlockinelectron/runner-orch-notices.jsadds a[worker result <id>]…[/worker result]block to the done/failed notice. The block holds the diff stat and summary ofleadSnapshotSha..branch, the verify verdict (only while a verifyCommand is set), invalidated hypotheses, and review-itinerary risks. The body is capped at 2000 chars, andmode 120000lines are moved to the top so the cap can't cut them.src/workerResult.tsparses the block.WorkerResultCardrenders it in the lead's transcript, and its "Integrate into lead" button callsgit:integrateWorkerdirectly, which is a human action through IPC. Notice lines outside the block stay visible next to the card.electron/test/worker-result-block.test.jscovers the symlink line, the cap and itinerary risks.test/threadView.test.tsxcovers rendering the card, clicking the button, and parsing the runner's real block output. Electron suite: 4672 pass. The 2 failures (automation-create-mcp trigger fields, storeprLinks) also fail on clean HEAD.Structured worker result in the lead's wake notice, rendered as a card (
Structured worker result in the lead's wake notice, rendered as a card (
Structured worker result in the lead's wake notice, rendered as a card (