node-menu¶
Right-clicking a spec node opens a custom action menu — the mouse parallel of the board's node verbs — instead of the browser's default menu.
Right-clicking a spec node on the board suppresses the browser's default context menu and opens a
custom node menu at the cursor. The board's design language already pairs mouse gestures with
keyboard verbs (click ↔ arrows, double-click ↔ i); this menu completes the pairing for the verbs a
mouse-only user otherwise cannot reach at all — the chords most of all. Right-click also focuses
the node first (expanding in place, no pan — same contract as click), so the menu always acts on the
node under the cursor and the board visibly agrees about which node that is.
The menu exposes exactly the existing node verbs, no new behaviour behind them:
- node info — the
ipopup (work-pane). - new session — a fresh New Session pre-seeded with the node mention (the
[verb). - new child node — the
nnchord's pre-filled instruction. - delete node (danger-tinted) — the
ddchord's pre-filled instruction.
The two chord items inherit the chords' safety contract (keyboard-nav): they only pre-seed a New Session prompt the human completes and confirms — creating or deleting a node stays prompt-driven agent work, never a direct server op, so a mis-aimed right-click can't destroy anything.
Overlay sessions. When the node carries session overlay(s) — a live worktree whose pending ops
currently touch it (overlay.source === session.source) — the menu appends, below a divider from the
four verbs, one item per overlaying session: a status-coloured glyph plus the session's headline —
the SAME live line the board rows show (session-activity's one-name-every-surface / sessionHeadline),
never the stable label, so a session reads identically here and on the board it overlays.
Picking one opens that session in the console (session-console). This is the one place a crossing
into an existing session lives — the graph deliberately has no bare keystroke for it and the
node-info popup's Enter is inert (keyboard-nav), so the mouse menu is where "jump into the session
editing this node" belongs. A node with no overlay shows only the four verbs — no divider, no empty
section.
Dismissal follows the dashboard's shared menu conventions (session-rename's row menu): any click
outside closes it, Esc peels it through the esc-layers stack (never closing the board surface
behind it), picking an item closes it before the action fires, and a right-click anywhere while it is
open dismisses it — on another node that re-aims the menu there; anywhere else the browser's default
menu takes over. It reuses the session menu's .sess-menu visual vocabulary rather than introducing a
second menu style. Only spec nodes claim right-click; the rest of the board keeps the default menu.