aboutsummaryrefslogtreecommitdiff
path: root/docs/specs/2026-07-02-timer-panel-spec.org
diff options
context:
space:
mode:
Diffstat (limited to 'docs/specs/2026-07-02-timer-panel-spec.org')
-rw-r--r--docs/specs/2026-07-02-timer-panel-spec.org56
1 files changed, 30 insertions, 26 deletions
diff --git a/docs/specs/2026-07-02-timer-panel-spec.org b/docs/specs/2026-07-02-timer-panel-spec.org
index c0dbd2c..6368d31 100644
--- a/docs/specs/2026-07-02-timer-panel-spec.org
+++ b/docs/specs/2026-07-02-timer-panel-spec.org
@@ -14,6 +14,7 @@
:PROPERTIES:
:ID: 1770af2e-b093-4024-a512-ae4324a2869f
:END:
+- [2026-07-04 Sat] DRAFT — all four decisions resolved by Craig (standalone; retire fuzzel once the panel lands; timer chips gain 10m/30m/2h; wtimer watch mode over polling). Decision-complete; ready for a spec-review to flip it READY before build.
- [2026-07-02 Thu] DRAFT — initial spec from Craig's roam capture "give the
timer a gtk UI/UX like the network panel. spec this out."
@@ -63,8 +64,9 @@ surface.
with thin widget bindings; one gated AT-SPI smoke via the
run-panel-smoke.sh pattern.
- Backing: shell out to the existing wtimer CLI (=add=, =toggle=, =cancel=,
- =cycle=, =render=). =render= already emits a JSON payload; the panel polls
- it (or subscribes to the same RTMIN+14 refresh signal) for live state.
+ =cycle=, =render=). =render= already emits a JSON payload. Live state comes
+ from a new wtimer watch/subscribe mode (decision D), which the panel
+ subscribes to for push updates instead of polling =render= on a timer.
wtimer's 89-case suite keeps owning the logic; panel tests fake the CLI
like every dotfiles suite fakes binaries.
- Dupre WIP palette CSS shared with the net panel (same factoring the
@@ -76,44 +78,46 @@ surface.
- Item list: one row per item — type glyph, label, live countdown / clock
time / phase+cycle for pomodoro, pause and cancel buttons, click-to-promote.
- Create strip: four type buttons (the wtimer glyphs), preset chips per type
- (e.g. 5m / 15m / 25m / 60m for timers), a freeform entry validated with
- wtimer's own parsers, an optional label field.
+ (timer 5m / 10m / 15m / 25m / 30m / 60m / 2h; alarm +30m / top-of-hour /
+ 07:00; pomodoro default cycle; stopwatch none — decision C), a freeform
+ entry validated with wtimer's own parsers, an optional label field.
- Empty state: the create strip alone, centered.
** What happens to the fuzzel flow
-The keybind/fuzzel path stays as the keyboard-fast lane (it's now styled and
-tested); the panel replaces the click-driven path on the bar module. Whether
-the fuzzel chain eventually retires is a decision below.
+Decision B (below) resolved this: the fuzzel chain retires once the panel
+lands. The panel becomes the single creation surface, replacing both the
+click-driven bar path and the keybind/fuzzel path. Until the panel ships the
+fuzzel flow stays (it's styled and tested); phase 4 removes it after the
+panel proves out.
* Decisions (Craig)
-** TODO Panel scope: standalone timer panel, or a page in the desktop-settings panel?
-The desktop-settings spec (sibling DRAFT) could host timers as a page.
-Standalone matches the net panel's one-domain-one-panel shape and keeps the
-timer dropdown small; folding in means one panel binary fewer. Recommend
-standalone, sharing the palette/css asset.
+** DONE Panel scope: standalone timer panel, or a page in the desktop-settings panel?
+CLOSED: [2026-07-04 Sat]
+Resolved (Craig, 2026-07-04): standalone, sharing the palette/css asset. Matches the net panel's one-domain-one-panel shape and keeps the timer dropdown small.
-** TODO Fuzzel flow: keep as keyboard fast lane, or retire once the panel lands?
-Keeping both costs two creation paths to maintain (though the fuzzel chain is
-small and freshly tested). Recommend keep until the panel proves itself, then
-revisit.
+** DONE Fuzzel flow: keep as keyboard fast lane, or retire once the panel lands?
+CLOSED: [2026-07-04 Sat]
+Resolved (Craig, 2026-07-04): retire the fuzzel flow once the panel lands. The panel becomes the single creation surface; the keybind chain goes away rather than staying as a parallel path. (Implementation phase 4's "decide the fuzzel flow's future" is now decided — retire, don't keep.)
-** TODO Presets: which chips per type?
-Strawman: timer 5m/15m/25m/60m; alarm +30m/top-of-hour/07:00; pomodoro
-default cycle only; stopwatch needs none. Adjust to taste.
+** DONE Presets: which chips per type?
+CLOSED: [2026-07-04 Sat]
+Resolved (Craig, 2026-07-04): timer chips are 5m / 10m / 15m / 25m / 30m / 60m / 2h (the strawman plus 10m, 30m, 2h). Alarm +30m / top-of-hour / 07:00, pomodoro default cycle only, stopwatch none — as the strawman.
-** TODO Live updates: poll render (1s, like the bar) or a wtimer "watch" mode?
-Polling reuses what exists and matches the bar's cadence; a watch/subscribe
-mode is cleaner but grows wtimer. Recommend polling first.
+** DONE Live updates: poll render (1s, like the bar) or a wtimer "watch" mode?
+CLOSED: [2026-07-04 Sat]
+Resolved (Craig, 2026-07-04): a wtimer watch/subscribe mode, not 1s polling. This grows wtimer with a new watch capability that the panel (and potentially the bar) subscribes to for live state, rather than reusing the poll cadence — cleaner at the cost of a wtimer addition. Fold the watch mode into the phase 1 CLI-backing seam.
* Implementation phases
1. PanelModel presenter + CLI-backing seam (TDD, GTK-free, 100% like the net
- PanelModel).
+ PanelModel), plus the wtimer watch/subscribe mode (decision D) the presenter
+ subscribes to for live state.
2. Blueprint UI: item list + create strip, wired to the presenter; palette
css factored to the shared asset.
3. Bar integration: timer module left-click opens the panel (replacing the
- fuzzel menu binding there), RTMIN+14 refresh keeps bar and panel in step.
-4. AT-SPI smoke + manual-testing checklist; decide the fuzzel flow's future
- after a week of real use.
+ fuzzel menu binding there); the panel and bar both track state via the
+ wtimer watch subscription.
+4. AT-SPI smoke + manual-testing checklist; retire the fuzzel flow (decision B)
+ after the panel proves out over a week of real use.