aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
32 hourschore: ignore the Superpowers workspaceDanilo M.1-0/+3
.superpowers/ holds the SDD ledger, briefs and review packages, which are local scratch. It was in .git/info/exclude, which does not travel with the repo; a committed .gitignore does.
32 hoursfix: close the review nits in the write path, query path and testsDanilo M.4-4/+31
Remove the temp file on every writeJSON failure path, not just the write and close ones. A failed rename left the temp behind with no cleanup. Surface the list path's unmarshal error instead of printing null with exit 0, and make a non-positive history limit print an empty array rather than falling through to the whole ring. Assert the evicted item actually lands in the history ring, so the "files to history" half of eviction is covered rather than just its signal. Add the missing README License section beside the GPLv2 text and headers.
32 hoursdocs: add the install and handover runbookDanilo M.1-0/+19
32 hoursfeat: add notify-snooze.shDanilo M.2-0/+82
Snooze is a file the balloon renderer reads, not daemon state: the notification still arrives, lists and files, only its balloon is withheld. The last used value is kept under XDG state so a reboot does not forget it.
32 hoursfeat: add the control interface and notifyctlDanilo M.3-2/+225
The private interface carries what the spec cannot: close-all, invoke action and clear history. notifyctl reads the published files for list and history, because the files are the interface, and uses D-Bus only for the mutations.
33 hoursfix: delete the timer entry on natural expiryDanilo M.2-2/+38
33 hoursfeat: add the D-Bus service and the daemonDanilo M.4-0/+342
Notify assigns an id and publishes; a replaces_id or stack tag reuses the id. CloseNotification closes with reason 3. The daemon claims org.freedesktop.Notifications and exits non-zero if it cannot, which is what happens while dunst still holds it.
33 hoursfeat: publish the queue and history atomicallyDanilo M.2-0/+124
Both files are written whole through a temporary file and a rename, so a renderer never reads a half-written value. An empty queue is [] rather than null, because the renderer parses it as an array.
33 hoursfeat: add the notification storeDanilo M.2-0/+352
The store holds the live queue and the history ring as pure state. Expiry tells the client and keeps the entry inert; dismissal and eviction file it in history. Replacing reuses the id and emits nothing.
33 hoursfix: add the GPLv2 header to the policy testDanilo M.1-0/+11
33 hoursfeat: add the module and the notification policyDanilo M.6-0/+554
The policy functions are pure so they are tested without a bus: urgency from the hints, the timeout rule with its urgency defaults, the two stack tag spellings, and the action pair parse.