4.6 KiB
4.6 KiB
title, type, permalink, tags
| title | type | permalink | tags | ||||
|---|---|---|---|---|---|---|---|
| gate-waybar-pomodoro-visibility-fix | gate | dotfiles/gates/gate-waybar-pomodoro-visibility-fix |
|
Gate: Waybar Pomodoro Visibility Fix
Status: PASS
Date: 2026-03-12
Plan ref: waybar-pomodoro-not-showing
Scope: .config/waybar/config, .config/waybar/scripts/pomodoro-preset.sh
Verdict Summary
The implementation correctly addresses the root cause (PATH mismatch between Hyprland/Waybar environment and interactive shell). All four invocation points for waybar-module-pomodoro are now explicit, and no residual bare-binary references remain. Both standard and adversarial checks pass.
Standard Pass
Acceptance Criteria Verification
| Criterion | Result |
|---|---|
custom/pomodoro exec uses explicit path |
✅ Line 136: $HOME/.local/bin/waybar-module-pomodoro --no-work-icons |
| on-click uses explicit path | ✅ Line 137: $HOME/.local/bin/waybar-module-pomodoro toggle |
| on-click-middle uses explicit path | ✅ Line 139: $HOME/.local/bin/waybar-module-pomodoro reset |
| on-click-right still delegates to preset script | ✅ Line 138 unchanged |
| Preset script no longer uses PATH-dependent guard | ✅ [[ ! -x "$POMODORO_BIN" ]] replaces command -v |
Preset script routes all set-* calls through $POMODORO_BIN |
✅ Lines 30–32 |
| Change is pomodoro-scoped only | ✅ No other modules touched |
Binary syntax check (bash -n) passes |
✅ (Lead evidence, exit 0) |
Binary exists and responds to --help |
✅ (Lead evidence, exit 0 with usage) |
Pre-mortem Risk Tracking
| Risk | Status |
|---|---|
| Middle-click reset still using bare name | Resolved — line 139 uses explicit path |
| Only one entry point updated | Resolved — all four updated |
Preset helper using command -v |
Resolved — replaced with [[ ! -x ... ]] |
| Binary path unstable across sessions | Not triggered — binary confirmed at path |
Adversarial Pass
Hypotheses
| # | Hypothesis | Design | Expected failure | Observed |
|---|---|---|---|---|
| H1 | Empty/corrupt STATE_FILE causes crash | State file exists but empty | current reads as "", falls to else-branch |
Safe: defaults to B-preset (short cycle), no crash |
| H2 | Binary missing/non-executable | Guard [[ ! -x ]] fires |
Exit 1 with stderr | Guard correctly triggers, script exits cleanly |
| H3 | $HOME unset in Waybar env |
$HOME/.local/bin/... fails to expand |
Module fails silently | Same risk applies to all other modules using $HOME (line 94: custom/uptime); no regression introduced |
| H4 | set -e aborts mid-preset (daemon down) |
First set-work fails → remaining calls skipped |
Partial preset applied | Pre-existing behavior; not a regression from this change |
| H5 | STATE_FILE lost on reboot (/tmp) |
Preset reverts to A-cycle | Unexpected preset on first right-click post-reboot | Intentional design, not a regression |
| H6 | No bare pomodoro left anywhere in config |
Grep scan | Old reference found | Zero old references found — clean |
Mutation Checks
| Mutation | Would current tests detect? |
|---|---|
| One of exec/on-click/on-click-middle reverted to bare name | Yes — structural grep confirms all three use explicit path |
POMODORO_BIN guard inverted (-x instead of ! -x) |
Yes — guard would skip missing-binary error |
read -r current without fallback |
Caught — ` |
set-work but not set-short/set-long through $POMODORO_BIN |
Yes — all three lines verified |
MUTATION_ESCAPES: 0/4
Unverified Aspects (Residual Risk)
- Live Waybar rendering — Cannot verify the module actually appears on the bar without a running Waybar session. The Lead noted this is impractical in the task context.
- Binary behavior correctness —
--helpconfirms the binary exists and accepts the right subcommands, but actual timer JSON output format was not sampled. Thereturn-type: jsonconfig assumes the binary outputs conforming JSON. $HOMEbehavior under Waybar systemd unit — Low risk (all other$HOME-using modules work), but not runtime-confirmed.
These residual risks are infrastructure-gated (no running Wayland/Waybar session available in this context), not implementation defects.
Lesson Checks
- [confirmed] PATH mismatch is the failure mode for Waybar custom modules — explicit paths are the correct fix pattern.
- [confirmed]
[[ ! -x path ]]guard is the right check for script-invoked binary dependencies. - [not observed] Any silent failures from the old
command -vapproach (fix is in place, no regression).
Relations
- resolves waybar-pomodoro-not-showing