Most shortcuts work anywhere in Command Deck or the Cockpit. On Mac, Ctrl is interchangeable with ⌘ for the quick switcher; everything else uses Ctrl.
Global
| Ctrl+K | Open quick switcher — search projects, tasks, tickets, anywhere |
| Ctrl+Shift+T | Toggle the Today bar (slim panel at top) |
| Ctrl+Shift+S | Toggle the Scratch pad |
| Ctrl+Shift+A | Toggle the Ani panel |
| Ctrl+Shift+P | Open PIN modal — unlocks private projects |
| Esc | Close the open modal, panel, or inline editor |
Cockpit (publish flow)
| Ctrl+Shift+U | Quick transmission overlay (work + after-dark modes only) |
Inline edits
| Enter | Submit / save / send. In multiline fields (Huyang chat, descriptions), Shift+Enter inserts a newline. |
| Esc | Cancel inline edit and revert |
Starring (★) for Today
Any task, checklist item, checklist block, or ticket can be starred for Today. Stars are the "I plan to work on this today" signal — they're not commitments, just focus. The Today bar at the top of every page shows your count.
The 4am ET cutoff
Today's list rolls over at 4am Eastern, not midnight. The rationale is that work nights bleed past midnight, and 4am is the realistic floor for "yesterday is over."
At 4am ET, completed items roll off Today into history; items still open carry forward. Specifically:
- Tasks: cleared when
status = 'completed'ANDcompleted_dateis before today's 4am ET. - Checklist items: cleared when
checked = 1ANDchecked_atis before today's 4am ET. Items checked AFTER 4am stay until the next 4am. - Blocks: cleared when every active item is checked AND every check is before the cutoff. Empty starred blocks persist (no surprise removal).
- Tickets: cleared when
status = 'closed'ANDclosed_dateis before the cutoff.
When does the rollover actually run?
The autoclear pass runs on any authenticated page load, throttled to once per 60 seconds per worker. So as long as you visit any Command Deck page after 4am, it fires. (Pre-2026-05-12: it only fired on /today/ hits, which sometimes left yesterday's items stuck. That's fixed.)
Due dates
Tasks and checklist items have an optional ISO due date. Click the dashed + due chip to set one (a native date picker opens). Right-click to clear. Badges color amber as the date approaches and red+uppercase once overdue. Today views sort due-dated rows first chronologically; undated rows keep their natural order beneath.
On checklist items, the due-date chip and the ★ are hidden until row hover when neither is set — keeps the row clean. Once a date is set or the item is starred, the relevant chip pins visible.
Checklist blocks can recur on a daily / weekly / monthly cadence. The block's pill shows the current cadence; the gear icon edits it; RESET fires the next cycle immediately.
Daily — fires every day
At 4am ET on each day in the recurrence set (e.g. Mon–Fri), the autoclear archives the active items as-is (checked or not) and spawns fresh unchecked ones for the new cycle. Skipping is fine. The skipped item shows as ☐ in that day's history row — accurate record that it wasn't done — and the next cycle proceeds normally.
Weekly / Monthly — only fire when all items are checked
The cycle won't advance on Monday (weekly) or the 1st (monthly) unless every active item is checked. This is deliberate — partial cycles look ugly in history. The trade-off: if you skip an item, the next cycle won't spawn. Options:
- Go back and check it (most honest)
- Hit RESET on the block header — archives the current cycle as-is and spawns a fresh one (use when you've decided the cycle is done despite the skip)
History
Each block has a show history toggle under its items. Groups archived items by due_date, descending, last 90 days. Read-only — past cycles can't be re-toggled.
Concurrency safety
The cycle-fire uses an atomic "claim" on last_reset_at — only one worker per cycle boundary can spawn, even if multiple page loads fire the autoclear simultaneously. Pre-2026-05-12 there was a race window that could double-spawn a daily cycle; that's fixed.
Status flow
open → pending → in_progress → closed. Reopening is allowed and clears the resolution + closed_date. Status pills on the detail page are direct buttons; closing requires a resolution (server-enforced).
Auto-advance on timer
Starting a timer scoped to a ticket auto-advances open or pending to in_progress. Closed tickets are skipped. Pre-existing in_progress stays.
The four dates
- Created — automatic; when the ticket was entered. Display-only on the detail page.
- Requested — when the ask actually landed. Optional; useful when you're catching up on a backlog and "Created" doesn't reflect reality.
- Due — when it's expected back. Drives the Today sort and the colored "due …" badge on the index + project page.
- Closed — automatic when you close; only shows on the detail page if the ticket is currently closed.
Today integration
Tickets star for Today the same as tasks. Closed tickets drop off Today at 4am ET (same cutoff rule as tasks). Closed-today stays in the Today list until the next 4am rollover so you can review what landed.
Customer group default project
Customer groups can carry a default project. Picking a group on a new ticket auto-fills the project (one fewer tap on the common case). Override the auto-fill anytime.
"I checked it yesterday but history shows it unchecked"
If yesterday was before the 2026-05-12 fix, there was a duplicate-spawn race that left orphan unchecked items in history (see KT-command-deck.md). The fix is in; recent history is accurate. Pre-fix orphans can be deleted manually via SQL (see the original fix commit).
"My weekly block didn't roll over Monday"
Weekly + monthly only advance when all items are checked. Either circle back and check the skipped one, or hit the block's RESET button to force the next cycle.
"I starred an empty checklist block and it stayed"
Intentional. Empty starred blocks persist through the 4am rollover — the rationale is "the block IS the task, adding items to it is the work." If you want it gone, unstar manually.
"I see a ticket on /today/ even though I closed it"
Closed tickets stay on Today until the next 4am rollover — gives you a window to review what closed today. Same pattern as completed tasks.
"My Today list didn't reset overnight"
The 4am rollover runs on any authenticated page load (throttled to once per 60s per worker). If you haven't loaded a page since 4am, it'll fire the moment you do. There's no separate cron — your visit IS the trigger.
"Two PA workers — does the rollover run twice?"
It tries to. The first worker's UPDATE blocks SET last_reset_at = ? WHERE ... AND last_reset_at < ? wins; the second sees rowcount = 0 and bails. Net result: one spawn per cycle, even under load.
"Editing a recurring block's items — does that affect history?"
No. History is built from archived rows, which keep their original text snapshot. Editing live items only affects future cycles.
"Why doesn't the Today count refresh after I star something?"
It should — the star action returns a new count and updates the bar. If it stays stale, refresh the page. Star clicks on the project page and the /today/ master view both refresh the count optimistically.
"Private projects — what's the PIN?"
Set via the PRIVATE_PROJECTS_PIN env var. Ctrl+Shift+P opens the modal; the PIN unlocks for the session.
"Where do I file bugs or feature ideas?"
For now: scratch pad or Below Deck — it's a single-user system. If this ever productizes, that'll change.
templates/command_deck_help.html