What's wrong
In the afx Tower UI's builder list, each builder has a gate-action button next to it. The button currently uses a checkmark icon, which implies the action is always "approve."
But the button is actually contextual — depending on the builder's current state, clicking it can offer different options:
- "Approve" (the obvious one)
- "View plan" (when the builder is at plan-approval)
- "Run Dev" (when the builder is at dev-approval — matches the canonical action label in VSCode's
GATE_ACTIONS for cross-surface consistency)
- Possibly others depending on the protocol's gate set
A checkmark is wrong for those non-approve actions. "View plan" especially — it's a read action, not an approve action — and using ✓ to label a read shortcut is misleading.
Why it matters
- Cognitive load: the architect glances at a builder, sees a checkmark, mentally primes for "approve" — then has to pause and read the dropdown to remember it's actually "view plan" or whatever else. The icon's promise doesn't match the action.
- Misclick risk: in a session with multiple builders at different gate states, an architect might tap the checkmark thinking they're approving and instead open a view (or worse — if the menu defaults to approve, accidentally approve when they meant to view).
- Visual scanability: when scanning many builders, having different icons per actual action surface lets the architect's eye triage at a glance ("that one's ready to approve, that one wants my review, that one's awaiting builder work").
Proposed fix
Make the icon state-dependent, matching the actual gate action surfaced:
| Builder state |
Icon |
Meaning |
| At spec-approval / plan-approval gate, no review action yet |
📄 (or 👁) |
"View" — read the spec/plan first |
| At dev-approval gate |
🛠 (or similar) |
"Run Dev" — start the dev server for the worktree (matches VSCode's canonical action label) |
| At pr-gate, PR ready |
✓ |
"Approve" — the existing icon is correct here |
| Awaiting builder action (not at gate) |
(no button / dim) |
Nothing for architect to do |
Or alternatively, a single neutral icon (like ▶ or ⚙) for "gate action available" and rely on the dropdown text to describe what the action is — but the per-state icon approach is more scannable.
Out of scope
- Reshaping the dropdown content itself (this issue is about the affordance icon)
- Backend gate-state inference (the UI presumably already knows which gate the builder is at — this is purely a label/icon choice)
Acceptance
What's wrong
In the afx Tower UI's builder list, each builder has a gate-action button next to it. The button currently uses a checkmark icon, which implies the action is always "approve."
But the button is actually contextual — depending on the builder's current state, clicking it can offer different options:
GATE_ACTIONSfor cross-surface consistency)A checkmark is wrong for those non-approve actions. "View plan" especially — it's a read action, not an approve action — and using ✓ to label a read shortcut is misleading.
Why it matters
Proposed fix
Make the icon state-dependent, matching the actual gate action surfaced:
Or alternatively, a single neutral icon (like ▶ or ⚙) for "gate action available" and rely on the dropdown text to describe what the action is — but the per-state icon approach is more scannable.
Out of scope
Acceptance
GATE_ACTIONSmap (packages/vscode/src/notifications/gate-toast.ts:104) where defined:View Planfor plan-approval,Run Devfor dev-approval,Approvefor pr-gate