aboutsummaryrefslogtreecommitdiffstats
path: root/docs/superpowers/plans/2026-09-15-status-registry.md
AgeCommit message (Collapse)AuthorFilesLines
13 hoursdocs(status): document the module and record its trapsDanilo M.1-5/+35
A FileView fires its own fileChanged on setText, so a handler that writes in response to a change loops unless it compares first. IdleInhibitor has no window of its own and does nothing without one, so the singleton is handed the keepalive window by shell.qml. Both were read from the documentation while designing and confirmed while implementing.
14 hoursfix(desktop): keep statusctl quiet when the mode file is absentDanilo M.1-6/+6
read_mode() failed on a missing mode file with a shell redirection error, 'statusctl: line 56: .../status.dnd: No such file or directory', printed to stderr on every get/toggle before the file existed and polluting waybar's exec stderr. The '2>/dev/null' sat on the 'tr' command, but the error is the parent shell's input redirection failure, which that redirect cannot suppress. Guard on '[[ -e "$file" ]]' before reading; a missing file still reads as 0, which was always the contract. Mirror the fix into the plan so plan and script agree.
14 hoursdocs: correct the check count and mirror the statusctl hardeningDanilo M.1-4/+13
Two corrections to the plan, both found by running it rather than reading it. The test script the plan specifies makes nine assertions; the prose around it claimed eight, in both the task step and the final check. An implementer running it would see a passing suite that disagrees with its own expected output, which reads as a failure of either the test or the plan. My arithmetic. The plan's statusctl also swallowed a failed rename and read the mode file through cat piped into tr, so a write that did not land still reported success and an unreadable file fell back to off by accident of pipeline semantics rather than by intent. Review of the implemented script caught both. The plan now carries the same fixes, so a future run of it does not reintroduce them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A7ThHHh5iTYbVfp3rNAkw2
15 hoursdocs: set atomicWrites explicitly in the plan's ModeFileDanilo M.1-1/+11
Review of the first task caught that the commit message credited atomicWrites while the code never set it. The property is already the documented default in 0.3.1, so the behaviour was right, but statusctl watches close_write,moved_to specifically because an atomic write arrives as a rename, and leaning on a default for something the CLI depends on is weaker than declaring it. Both ModeFile blocks in the plan now set it, so task four does not reintroduce the gap when it adds the second mode. Worth recording: the review asserted atomicWrites defaults to false in 0.3.1 and concluded the shipped writes were not atomic. The v0.3.1 and v0.3.0 documentation both read "If true (default)", so that conclusion was wrong, though the underlying observation about the unset property was right. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A7ThHHh5iTYbVfp3rNAkw2
15 hoursdocs: add the status registry implementation planDanilo M.1-0/+1216
Eight tasks against the registry spec: the singleton with the dnd mode, the statusctl CLI and its check, naming the keepalive window, presentation mode and its three effects, the module and tile, the page and registration, installing the CLI and swapping the waybar module, then the README and traps. The plan carries the facts probed while designing so the implementer does not re-probe them: the runtime directory is tmpfs, elogind runs here with the pam caveat that stops it guaranteeing logout cleanup, the compositor advertises zwp_idle_inhibit_manager_v1, inotifywait is present, and Inconsolata Nerd Font lives under ~/.fonts rather than either share directory. That last one cost a failed cmap search that read as a missing glyph when it was a bad search path. Two claims stay marked unverified because they come from documentation and have not been observed running: that a FileView fires its own fileChanged on setText, and that IdleInhibitor does nothing without a non-null window. The plan handles both and tells the implementer to confirm them and record what actually happens. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A7ThHHh5iTYbVfp3rNAkw2