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
Revised 2026-08-12 per owner direction, unifying with the #1410 two-zone grammar. Supersedes the original reserved-headroom layout (separate canvas actions squeezed into reserved slots on the fleet layout).
The owner's insight driving the revision: when the selected builder is in spec or plan state there is no diff yet, so the two diff dials (Files / Changes) are idle exactly when the artifact canvas is the thing being reviewed. Reuse them.
The canvas's keyboard-first review (#1237/PR #1344) and horizontal reading mode (#1380/PR #1398) define the navigation vocabulary; #1401 builds the bridge (Tower relay + sendCanvasCommand on the sdk controller subpath) that lets the deck drive it.
The unifying rule
The review dials always review the selected builder's current work; the builder's phase determines its form. Gesture roles are constant: rotate = navigate, press = give feedback at the current position, tap = jump. Only the artifact form changes:
Selected builder's state
Coarse dial (today: Files)
Fine dial (today: Changes)
Press
Tap
implement / review, or blocked at dev-approval / pr
files (unchanged)
hunks (unchanged)
forward file/hunk as feedback (unchanged)
jump to first (unchanged)
specify / plan, or blocked at spec-approval / plan-approval
heading step
block step
composer-open on the focused block
jump (first commented block vs doc start: spec decision)
Phase/gate resolution uses the same wire-value source as #1404's Automatic press (blockedGate beats protocolPhase; never guessed strings) — reuse that resolver family.
Targeting: file-qualified to the selected builder's artifact via sendCanvasCommand's file selector — coherent with semantics following the selection; a no-canvas result renders on the dial (the artifact isn't open; press the builder's key to open it). The workspace-MRU alternative (drive what you see) is the fallback position; the spec/plan phase records the final choice with rationale. In practice they converge because Stream Deck: merge Fleet Slot into Builder Action (phase-aware press) #1404's press opens the selected builder's artifact.
Column paging in horizontal mode: spec-time mapping (candidate: coarse dial while reading mode is on).
Text entry stays on the keyboard. Composer typing, submit, and cancel are keyboard acts (deck-driven submit/cancel is a spec-time decision; default no).
No reserved keys on the fleet layout are needed anymore — this resolves the eight-key conflict noted on #1410 (see its architect review). At most one small affordance (reading-mode toggle) remains a layout question.
Context
Revised 2026-08-12 per owner direction, unifying with the #1410 two-zone grammar. Supersedes the original reserved-headroom layout (separate canvas actions squeezed into reserved slots on the fleet layout).
The owner's insight driving the revision: when the selected builder is in spec or plan state there is no diff yet, so the two diff dials (Files / Changes) are idle exactly when the artifact canvas is the thing being reviewed. Reuse them.
The canvas's keyboard-first review (#1237/PR #1344) and horizontal reading mode (#1380/PR #1398) define the navigation vocabulary; #1401 builds the bridge (Tower relay +
sendCanvasCommandon the sdk controller subpath) that lets the deck drive it.The unifying rule
The review dials always review the selected builder's current work; the builder's phase determines its form. Gesture roles are constant: rotate = navigate, press = give feedback at the current position, tap = jump. Only the artifact form changes:
composer-openon the focused blockPhase/gate resolution uses the same wire-value source as #1404's Automatic press (
blockedGatebeatsprotocolPhase; never guessed strings) — reuse that resolver family.Requirements
Headings/BlocksvsFiles/Changes). A gesture must never be a surprise. Shared grammar with Stream Deck SD+: two-zone builder workflow (selectors + action palette, dial-driven feedback queue) #1410 requirement 4.sendCanvasCommand's file selector — coherent with semantics following the selection; ano-canvasresult renders on the dial (the artifact isn't open; press the builder's key to open it). The workspace-MRU alternative (drive what you see) is the fallback position; the spec/plan phase records the final choice with rationale. In practice they converge because Stream Deck: merge Fleet Slot into Builder Action (phase-aware press) #1404's press opens the selected builder's artifact.sendCanvasCommand; no bridge changes (both targeting modes are already supported by the spec'd selector).Layout consequence
No reserved keys on the fleet layout are needed anymore — this resolves the eight-key conflict noted on #1410 (see its architect review). At most one small affordance (reading-mode toggle) remains a layout question.
Out of scope
Sequencing
After #1401's sdk call exists (unchanged). Independent of #1410's delivery — this ships on the existing dial layout.
Suggested protocol
PIR: the phase-switching dial flows and touchstrip legibility need hardware verification before a PR.