Add persistent deterministic zara-timers service #497

Open
nsaspy wants to merge 0 commits from rage/16-timers into main
Owner

Implements #16.

Adds stable-ID countdown timers, absolute timezone-aware alarms, recurring reminders, pause/resume/cancel/countdown queries, and consumable fired/cancelled events.

Countdowns use monotonic elapsed time while live; persisted state stores remaining duration plus a wall-clock checkpoint so restart recovery does not persist process-specific monotonic values. Wall-clock schedules require aware timestamps, recurring reminders preserve IANA timezone + cadence, and the missed-event policy is explicit (fire_once default, optional skip).

State is deterministic schema-v1 JSON under XDG state / the user state directory, atomically replaced and never written into the Nix store. Corrupt state fails closed. Tests use a fake clock and temporary state only—no sleeping, network, GUI, or services.

Published through plugins.json so the registry/pinned-Zara compatibility gate, per-plugin tests, install layout, Nix package build, and aggregate checks exercise it.

Implements #16. Adds stable-ID countdown timers, absolute timezone-aware alarms, recurring reminders, pause/resume/cancel/countdown queries, and consumable fired/cancelled events. Countdowns use monotonic elapsed time while live; persisted state stores remaining duration plus a wall-clock checkpoint so restart recovery does not persist process-specific monotonic values. Wall-clock schedules require aware timestamps, recurring reminders preserve IANA timezone + cadence, and the missed-event policy is explicit (`fire_once` default, optional `skip`). State is deterministic schema-v1 JSON under XDG state / the user state directory, atomically replaced and never written into the Nix store. Corrupt state fails closed. Tests use a fake clock and temporary state only—no sleeping, network, GUI, or services. Published through `plugins.json` so the registry/pinned-Zara compatibility gate, per-plugin tests, install layout, Nix package build, and aggregate checks exercise it.
Some checks failed
CI / test (pull_request) Failing after 18s
This branch is already included in the target branch. There is nothing to merge.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin rage/16-timers:rage/16-timers
git switch rage/16-timers

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff rage/16-timers
git switch rage/16-timers
git rebase main
git switch main
git merge --ff-only rage/16-timers
git switch rage/16-timers
git rebase main
git switch main
git merge --no-ff rage/16-timers
git switch main
git merge --squash rage/16-timers
git switch main
git merge --ff-only rage/16-timers
git switch main
git merge rage/16-timers
git push origin main
Sign in to join this conversation.
No description provided.