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
Part of epic #1184 (PM stack coherence — wave 2, 2026-10-26).
The aggregator is mouse/tap-first today: every triage action means opening the card, reading it, and acting through the comment/orchestrator path one item at a time. Drew works the Needs-you queue daily, mostly from the desktop between other work, and the queue can hold dozens of items after a busy night. A command palette (⌘K) over the same canonical item projection the pages render — search items, jump to any page, run mediated actions — plus keyboard navigation (j/k) and one-key actions (snooze, escalate, dispatch) on Needs-you gives the desktop a power path that complements the mobile review flow instead of duplicating it. All actions go through the same mediated, audited path as dashboard clicks (orchestrator as single writer); the palette is a new front end on that path, never a bypass, and every action is also exposed on its item's JSON twin surface so agents can drive the same flow.
Acceptance:
⌘K opens a palette that searches the canonical projection (issues, epics, sessions, services) and jumps to any aggregator page or item in ≤3 keystrokes.
On /attention, j/k moves between items and single keys perform snooze, escalate, and dispatch via the existing mediated action path, each leaving the same audit entry a click would.
Palette and keyboard actions work entirely over the machine-first data already served (no second data path), and are covered by render/route tests.
Mobile/touch behaviour is unchanged; keyboard affordances are discoverable (a visible ? or footer hint listing the keys).
Acceptance criteria
⌘K opens a palette that searches the canonical projection (issues, epics, sessions, services) and jumps to any aggregator page or item in ≤3 keystrokes.
On /attention, j/k moves between items and single keys perform snooze, escalate, and dispatch via the existing mediated action path, each leaving the same audit entry a click would.
Palette and keyboard actions work entirely over the machine-first data already served (no second data path), and are covered by render/route tests.
Mobile/touch behaviour is unchanged; keyboard affordances are discoverable (a visible ? or footer hint listing the keys).
Fleet-monitor intake pass (protocol §5), 2026-10-28. Still live: no merged or open PR references this issue (checked 2026-10-28T01:47Z); nothing has implemented it yet.
Related: part of epic #1184 (PM stack coherence, wave 2); sibling #1277 (bulk triage) builds on the same mediated action path — if both are worked, the palette's one-key actions and bulk actions should share one mediated implementation.
Notes / risks: the body's Acceptance list was already complete; the appended section restates it in criteria form. The standing risk is a second, unaudited action path sneaking in through the palette; the criteria pin every keyboard action to the same audit entry a click leaves. Priority normal, effort/m.
Suggested approach: palette search over the existing canonical projection first, then j/k + one-key actions on /attention wired to the existing mediated endpoints, with render/route tests covering both.
Tests: new test/keyboard-1275.test.ts 8/8 pass on laptop; full aggregator suite 924 pass / 3 fail with the change vs 905 / 14 on clean main (flaky env) — the two persistent failures (usage hub service detail, slice3 dns/sessions/pages) reproduce on clean main and are pre-existing.
agent-note:v1
state: triaged (coverage pass)
Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
Found via: coverage pass 2026-11-03
✅ ⌘K palette over the canonical projection — pm-stack/aggregator/src/keyboard.ts: page entries come from the page manifest (pageEntries()), item entries from each page's existing /api/*.json twin (flattenItems(), bounded at 200) — the header records the deliberate rule "No new endpoints, no second data path." Jump targets are the item's own URL/ref or the manifest route.
✅ j/k navigation + one-key actions on /attention — the key map is declared in the same module (s snooze, e escalate, g delegate, x dismiss, m mark done, ? all keys; j/k move), with the shortcut strip text at keyboard.ts:103.
✅ Same mediated, audited path — never a bypass — a key press submits the focused card's existing .aform for that verb (form.requestSubmit()), so the delegated ACTION_SCRIPT handler in render.ts builds the same POST /api/actions envelope: same clientToken, same author picker, same audit entry as the click path. No action body is constructed in the keyboard layer.
✅ JSON twin already drives the palette — item entries are read from the pages' JSON twins, which is exactly the "agents can drive the same flow" half of the acceptance.
✅ Tests on main:pm-stack/aggregator/test/keyboard-1275.test.ts (palette + keyboard behaviour) alongside the existing a11y suite.
No open PR, no competing branch, no in-flight task, no hard-stop labels.
Scope note: this closes the palette/keyboard feature only; epic #1184 and its other waves are untouched.
Activity
developing-today commentedon Oct 27, 2026
CODE-399
dezren39 commentedon Oct 28, 2026
Intake review
Fleet-monitor intake pass (protocol §5), 2026-10-28. Still live: no merged or open PR references this issue (checked 2026-10-28T01:47Z); nothing has implemented it yet.
Related: part of epic #1184 (PM stack coherence, wave 2); sibling #1277 (bulk triage) builds on the same mediated action path — if both are worked, the palette's one-key actions and bulk actions should share one mediated implementation.
Notes / risks: the body's Acceptance list was already complete; the appended section restates it in criteria form. The standing risk is a second, unaudited action path sneaking in through the palette; the criteria pin every keyboard action to the same audit entry a click leaves. Priority normal, effort/m.
Suggested approach: palette search over the existing canonical projection first, then j/k + one-key actions on /attention wired to the existing mediated endpoints, with render/route tests covering both.
30 remaining items
dezren39 commentedon Nov 2, 2026
🤖 Agent note · picked up
user/owned/held/do-not-*label, no open implementation PR, and no Drew-authored work on the issue. Assignment alone is not an ownership stop, so this lane is proceeding with the implementation.queue/4980-1275-command-paletteon the laptop, PR opened, task completed as pr_opened.dezren39 commentedon Nov 2, 2026
🤖 Agent note · done
queue/4980-1275-command-palette@ afa81dd. Palette searches the page manifest + the already-served /api/*.json twins (no new endpoints); one-key actions on /attention submit the card's existing action forms, so the POST /api/actions audit entry is identical to the click path.Merge pull request #4089 from developing-today/queue/4980-1275-comman…
dezren39 commentedon Nov 3, 2026
agent-note:v1
state: triaged (coverage pass)
Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
Found via: coverage pass 2026-11-03
dezren39 commentedon Nov 3, 2026
🤖 Agent note · triaged → already implemented and on
main; closing COMPLETEDrepo-worker-code, OpenChamber scheduled lane (queue task 7686, coverage-pass triage)2d82a4f76fea4ae179d93c44218ecc0821b46a46(branchqueue/4980-1275-command-palette, headafa81dd4a), confirmed an ancestor oforigin/maind3476bce7. The issue stayed open only because the merge carried no closing keyword.Acceptance criteria, verified at current
mainpm-stack/aggregator/src/keyboard.ts: page entries come from the page manifest (pageEntries()), item entries from each page's existing/api/*.jsontwin (flattenItems(), bounded at 200) — the header records the deliberate rule "No new endpoints, no second data path." Jump targets are the item's own URL/ref or the manifest route.ssnooze,eescalate,gdelegate,xdismiss,mmark done,?all keys;j/kmove), with the shortcut strip text atkeyboard.ts:103..aformfor that verb (form.requestSubmit()), so the delegatedACTION_SCRIPThandler inrender.tsbuilds the samePOST /api/actionsenvelope: same clientToken, same author picker, same audit entry as the click path. No action body is constructed in the keyboard layer.pm-stack/aggregator/test/keyboard-1275.test.ts(palette + keyboard behaviour) alongside the existing a11y suite.Scope note: this closes the palette/keyboard feature only; epic #1184 and its other waves are untouched.