- {/* Parent Process Container */}
+ {/* Parent agent loop */}
- Parent Process
+ Parent agent loop
@@ -146,7 +146,7 @@ export default function SubagentIsolation({ title }: { title?: string }) {
transition={{ delay: 0.5 }}
className="mt-3 rounded border border-blue-200 bg-white/60 px-2 py-1 text-center text-xs text-blue-600 dark:border-blue-700 dark:bg-blue-950/30 dark:text-blue-300"
>
- 3 original + 1 summary = clean context
+ parent receives one task result
)}
@@ -161,12 +161,12 @@ export default function SubagentIsolation({ title }: { title?: string }) {
className="rounded bg-zinc-200 px-2 py-1 text-center font-mono text-[10px] text-zinc-500 dark:bg-zinc-700 dark:text-zinc-400"
style={{ writingMode: "vertical-rl", textOrientation: "mixed" }}
>
- ISOLATION
+ MESSAGE BOUNDARY
- {/* Child Process Container */}
+ {/* Nested subagent loop */}
- Child Process
+ Subagent loop
@@ -209,7 +209,7 @@ export default function SubagentIsolation({ title }: { title?: string }) {
className="flex h-24 items-center justify-center rounded-lg border border-dashed border-zinc-200 dark:border-zinc-700"
>
- not yet spawned
+ not yet started
)}
@@ -237,7 +237,7 @@ export default function SubagentIsolation({ title }: { title?: string }) {
animate={{ opacity: 1, scale: 1 }}
className="mt-3 rounded border border-amber-300 bg-amber-50 px-2 py-1 text-center text-xs text-amber-700 dark:border-amber-600 dark:bg-amber-900/20 dark:text-amber-300"
>
- Compressing full context into summary...
+ Preparing final response...
)}
@@ -247,7 +247,7 @@ export default function SubagentIsolation({ title }: { title?: string }) {
animate={{ opacity: 1 }}
className="mt-3 rounded border border-red-200 bg-red-50 px-2 py-1 text-center text-xs text-red-500 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400"
>
- context discarded
+ local messages released
)}
diff --git a/web/src/components/visualizations/s15-team-runtime.tsx b/web/src/components/visualizations/s15-team-runtime.tsx
index 950535c5..a4e93ad7 100644
--- a/web/src/components/visualizations/s15-team-runtime.tsx
+++ b/web/src/components/visualizations/s15-team-runtime.tsx
@@ -19,32 +19,32 @@ const STEPS = [
{
title: "Confirm a Small Team",
desc: "The Lead proposes focused roles and waits for the user before starting persistent teammates.",
- event: "user confirmed: backend + tests",
+ event: "lead proposes: backend + tests",
},
{
- title: "Deliver a Typed Assignment",
- desc: "The runtime writes the assignment to a mailbox and correlates plan approval with a request id.",
- event: "plan_response(req_7, approved=true)",
+ title: "Claim Atomically",
+ desc: "A ready task moves to one owner while the task-store file lock protects the persisted transition.",
+ event: "task_store_lock: task_...0042 -> backend",
},
{
- title: "Idle Teammates Scan the Board",
- desc: "A teammate with no direct message looks only for pending, unowned work whose dependencies are complete.",
- event: "scan_ready_tasks(backend) -> task_auth",
- },
- {
- title: "Claim Under One Lock",
- desc: "Ownership and status change atomically, so another teammate cannot take the same task.",
- event: "task_lock: task_auth -> backend",
+ title: "Require and Review a Plan",
+ desc: "The gate is active before the teammate starts; the Lead reviews the typed request for this task and work version.",
+ event: "review_plan(req_000007, approve=true)",
},
{
title: "Route Tools to the Task Directory",
desc: "The claimed task carries its worktree binding; bash, read, and write derive their cwd from that record.",
event: "cwd -> .worktrees/auth-refactor",
},
+ {
+ title: "Execute the Approved Work",
+ desc: "Mutating tools run only after the current assignment's plan is approved.",
+ event: "bash / write: allowed",
+ },
{
title: "Return the Result, Keep the Teammate",
- desc: "The runtime delivers the result to the Lead and moves the teammate back to IDLE for newly ready work.",
- event: "result(auth complete) -> idle_notification",
+ desc: "Completion keeps the task cwd through the turn; IDLE releases the assignment and keeps the teammate available.",
+ event: "complete -> result -> IDLE",
},
] as const;
@@ -98,7 +98,7 @@ function RuntimePanel({ step }: { step: number }) {
Protocol
- {step < 1 ? "-" : "request_id=req_7"}
+ {step < 2 ? "-" : "request_id=req_000007"}
@@ -107,10 +107,10 @@ function RuntimePanel({ step }: { step: number }) {
- task_auth
+ task_1712345678_0042
Refactor authentication
@@ -151,18 +151,18 @@ function TaskPanel({ step }: { step: number }) {
- {step < 3 ? : }
+ {step < 1 ? : }
- {step < 2
+ {step < 1
? "Waiting for the teammate loop."
- : step === 2
- ? "Ready filter: pending + unowned + dependencies complete."
- : "The claim check and update share one lock."}
+ : step === 1
+ ? "The claim check and update share one lock."
+ : "The claimed task remains owned through the work turn."}
@@ -170,7 +170,8 @@ function TaskPanel({ step }: { step: number }) {
}
function WorkspacePanel({ step }: { step: number }) {
- const bound = step >= 4;
+ const routed = step >= 3 && step < 5;
+ const retained = step >= 5;
return (
@@ -179,14 +180,17 @@ function WorkspacePanel({ step }: { step: number }) {
Task directory
-
+