docs(04-01): complete notifications et mode focus plan

- SUMMARY.md with execution results
- STATE.md updated (position, decisions, metrics)
- ROADMAP.md progress updated
- Requirements NOTIF-01, NOTIF-02 marked complete
This commit is contained in:
Pierre Martin
2026-03-23 21:27:10 +01:00
parent efbe31928e
commit 399e3e8f02
4 changed files with 118 additions and 16 deletions

View File

@@ -0,0 +1,98 @@
---
phase: 04-notifications-et-i3bar
plan: 01
subsystem: notifications
tags: [notify-send, dunst, focus-mode, desktop-notifications]
requires:
- phase: 03-hooks-claude-code
provides: "Hook server, processHookEvent, UpdateFromHook with PrevState tracking"
provides:
- "Notifier interface (ExecNotifier + NullNotifier)"
- "FocusTimer thread-safe (Set/IsActive/Remaining)"
- "Notification on Working -> Needs Input transition"
- "CLI vmux focus <minutes> command"
affects: [04-02-i3bar]
tech-stack:
added: [notify-send via os/exec]
patterns: [interface-based notification injection, spy pattern for testing side-effects]
key-files:
created: [notify.go, notify_test.go, focus.go, focus_test.go]
modified: [daemon.go, hook.go, protocol.go, main.go, daemon_test.go]
key-decisions:
- "notify-send via os/exec (pas de lib D-Bus) pour simplicite"
- "FocusTimer par timer uniquement, pas de toggle on/off"
- "Notification uniquement sur Working -> Needs Input (pas Idle -> Needs Input)"
patterns-established:
- "spyNotifier pattern: spy struct pour tester les side-effects de notification"
- "Interface injection: Notifier injectable dans Daemon pour testabilite"
requirements-completed: [NOTIF-01, NOTIF-02]
duration: 3min
completed: 2026-03-23
---
# Phase 04 Plan 01: Notifications Desktop et Mode Focus Summary
**Notifications dunst via notify-send sur transition Working -> Needs Input, avec mode focus pour supprimer temporairement les alertes**
## Performance
- **Duration:** 3 min
- **Started:** 2026-03-23T20:23:04Z
- **Completed:** 2026-03-23T20:26:11Z
- **Tasks:** 2
- **Files modified:** 9
## Accomplishments
- Notifier interface avec ExecNotifier (notify-send --urgency=critical) et NullNotifier
- FocusTimer thread-safe qui supprime les notifications pendant N minutes
- Integration dans processHookEvent : notifie uniquement sur Working -> Needs Input
- CLI `vmux focus <minutes>` pour activer le mode focus
## Task Commits
Each task was committed atomically:
1. **Task 1: Notifier interface, FocusTimer, et tests** - `b96c6d0` (feat)
2. **Task 2: Integration notifications dans daemon + CLI focus** - `efbe319` (feat)
## Files Created/Modified
- `notify.go` - Notifier interface, ExecNotifier (notify-send), NullNotifier, shortName helper
- `notify_test.go` - Tests ExecNotifier, NullNotifier, shortName
- `focus.go` - FocusTimer struct thread-safe (Set/IsActive/Remaining)
- `focus_test.go` - Tests FocusTimer Set/Expired/Remaining/ZeroValue
- `daemon.go` - Champs notifier + focus dans Daemon, handler "focus"
- `hook.go` - Lecture PrevState avant UpdateFromHook, notification conditionnelle
- `protocol.go` - FocusArgs, FocusRemaining dans Response
- `main.go` - CLI "focus <minutes>", usage mis a jour
- `daemon_test.go` - spyNotifier, tests transitions notification, test focus handler
## Decisions Made
- notify-send via os/exec avec timeout 5s (pas de lib D-Bus, simplicite)
- Notification uniquement sur Working -> Needs Input (D-01)
- Focus = timer uniquement, pas de toggle (D-04)
- Focus bloque les notifications mais pas l'i3bar (D-05)
## Deviations from Plan
None - plan executed exactly as written.
## Issues Encountered
None
## User Setup Required
None - no external service configuration required.
## Next Phase Readiness
- Notification infrastructure en place, prete pour le widget i3bar (plan 04-02)
- FocusTimer expose pour usage futur dans l'i3bar
---
*Phase: 04-notifications-et-i3bar*
*Completed: 2026-03-23*