Skip to content

Dashboard snooze controls: e/E hotkeys, dim presentation, snoozed·Xh-left label - #360

Merged
tildesrc merged 1 commit into
mainfrom
panopticon/snooze-dashboard-controls
Aug 5, 2026
Merged

Dashboard snooze controls: e/E hotkeys, dim presentation, snoozed·Xh-left label#360
tildesrc merged 1 commit into
mainfrom
panopticon/snooze-dashboard-controls

Conversation

@tildesrc

@tildesrc tildesrc commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Ports the dashboard half of the snooze feature (chunk 2/3), building on the backend fact added in #359 (Task.snoozed_until + TaskServiceClient.set_snooze).

What it adds

  • e toggles a fixed 12-hour operator snooze on the highlighted task; pressing e again while a snooze is active clears it. The 12h window is a hard constant — no config surface.
  • E records the reserved indefinite deadline (9999-12-31T23:59:59+00:00) — mute until explicitly un-snoozed.
  • While a snooze is active the row is dimmed (state/turn/status/runner/repo/slug), and the turn cell reads snoozed · Nh left (Nm/<1m near the deadline) or bare snoozed for the indefinite value.
  • At/after a finite deadline the row resumes its ordinary presentation and turn derivation without mutating the stored snoozed_until — expiry is display-only.
  • All snooze reads/writes go through an injectable display-clock seam (now= on the dashboard App). Because a clock-only tick emits no change-feed event, a one-shot Textual timer repaints exactly when a finite snooze's label is next due to change.

Design note

No attention/piercing behavior — a snooze always mutes until it expires. The turn-column precedence is simply snoozed (dim) > normal. Snoozed-task sort ordering is deliberately out of scope (chunk 3).

…left label

Port the dashboard half of the snooze feature. `e` toggles a fixed 12h
operator snooze on the highlighted task; `E` records the reserved indefinite
deadline. An active snooze mutes the whole row (dim) and replaces the turn
cell with `snoozed · Nh left` (or bare `snoozed` for the indefinite value);
at/after a finite deadline the row resumes its ordinary presentation without
mutating the stored fact (expiry is display-only). All snooze reads/writes go
through an injectable display-clock seam, and a one-shot Textual timer repaints
when a finite snooze's label is due to change — the change feed emits no event
for a clock-only tick.

No attention/piercing behavior: a snooze always mutes until it expires.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@tildesrc
tildesrc merged commit 06a937d into main Aug 5, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant