feat: break timer — pause the session clock so breaks don't poison drift

Add <break-timer> tray: pick a duration, Start break pauses the session
clock (reusing clock.pause/resume), End break resumes it — so meal/comfort
break time is excluded from elapsed and drift stays honest. The shell owns
pause/resume + persistence (break store key); the rail shows a on-break
badge and gains a coffee chip. fmtCountdown (M:SS) added to format.js.

tests/components/break-timer.test.js + gm-shell-break.test.js (incl. the
30-play/20-break/10-play drift-honesty case) + fmtCountdown. 159 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
slaguru666
2026-07-20 23:00:17 +01:00
co-authored by Claude Opus 4.8
parent 49e9dcda46
commit 73a7ea72ad
10 changed files with 253 additions and 9 deletions
@@ -74,6 +74,11 @@ jsdom. No new dependencies. Fully offline.
≤ skill/20, special ≤ skill/5, success ≤ skill (bands transcribed from the Day One console). Day
One's `meta.system` switched from `coc-d100` to `brp-d100`. `tests/dice/brp-d100.test.js` covers it.
- **Break timer built.** `<break-timer>` pauses the session clock for a break (reusing the clock's
existing `pause`/`resume`), so break time never poisons drift. Shell owns the pause/resume +
persistence (`break` store key); the rail shows a ☕ on-break badge; `fmtCountdown` (M:SS) added to
`format.js`. Tests: `break-timer.test.js`, `gm-shell-break.test.js` (incl. the drift-honesty case).
## Still deferred (backlog)
- Break-timer / parking-lot / wake-lock tray tools; online art "Generate".
- Parking-lot note + wake-lock tray tools; online art "Generate".