From bf5d259dfdf3c47e2dc2ca88a464b483e1150a14 Mon Sep 17 00:00:00 2001 From: Adam Moussa Date: Wed, 24 Jun 2026 13:45:22 -0400 Subject: [PATCH] fix(agent-team): board gate vs inert semantics + verify against live data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit isGate() now keys off topology node kind 'gate' (clarify) or the 'gate' stage, not stage.gated — which actually means INERT (disabled P3 nodes build/verify/ dispatch). Inert columns get a dimmed + 'inert' treatment instead of a false 'human gate' lock. Verified against the live R720 dashboard (10 stages) via a dev-proxy smoke test; typecheck + 36 tests + build all green. --- agent-team/web/src/components/Board.tsx | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/agent-team/web/src/components/Board.tsx b/agent-team/web/src/components/Board.tsx index caf4c87..df50b24 100644 --- a/agent-team/web/src/components/Board.tsx +++ b/agent-team/web/src/components/Board.tsx @@ -74,9 +74,13 @@ function deriveStages(tasks: TaskView[], topology: Topology | null): Stage[] { }); } -/** Check if a stage is a human gate (stage.gated OR topology node kind === 'gate'). */ +/** + * A human-decision gate — distinct from `stage.gated`, which means the stage is + * INERT (a disabled/not-yet-wired P3 node like build/verify/dispatch). A gate is + * the "gate" stage or a topology node of kind "gate" (e.g. clarify). + */ function isGate(stage: Stage, topology: Topology | null): boolean { - if (stage.gated) return true; + if (stage.key === "gate") return true; const topoNode = topology?.nodes.find((n) => n.id === stage.key); return topoNode?.kind === "gate"; } @@ -219,17 +223,27 @@ interface ColumnProps { function KanbanColumn({ stage, topology, selectedId, onSelect }: ColumnProps) { const gate = isGate(stage, topology); + // `gated` here means INERT (disabled P3 node), not a human gate — dim it. + const inert = stage.gated; return (
{/* Column header */}
- {stage.label} + + {stage.label} + {inert && ( + + inert + + )} +
{stage.count}