Post-deploy canary watch loop for MCP server and desktop service health after git push or release. Polls build status, service health, and contract drift, then reports pass/fail. Use after shipping changes to dotfiles-mcp, after system updates, after rice-reload, after any push that touches MCP modules or systemd services, or when the user says "canary", "health check after push", "watch the deploy", or "is it still healthy".
Post-deploy health watch loop. Run after pushing changes to verify nothing broke. Polls progressively — fast checks first, slower checks if fast ones pass.
git push that touches MCP modules (mcp/dotfiles-mcp/)git push that touches systemd services (systemd/)git push that touches Hyprland config (hyprland/)git push that touches shell configs (zsh/, kitty/)rice-reload or dotfiles_cascade_reloadtopgrade, pacman -Syu)Run checks in this order. Stop and report on first failure.
cd mcp/dotfiles-mcp && GOWORK=off go build ./...
If build fails, the push broke compilation. Report immediately.
dotfiles_server_health — contract shape, version, tool counts.well-known/mcp.json expected countsystemd_failed — any user services in failed statesystemd_status for critical services: ironbar, dotfiles-keybind-ticker, dotfiles-cliphist, dotfiles-kanshi, swww-daemonhypr_get_config_errors — Hyprland config parse errors after reloaddotfiles_rice_check — compositor, shader, wallpaper, service status, palette complianceshader_status — current shader is active and validdotfiles_check_symlinks — no broken symlinksops_ci_status — GitHub Actions check status for latest pushAfter all checks pass:
Canary: ALL CLEAR (5/5 tiers passed)
Build: OK (410 tools compiled)
MCP: OK (410 tools, 24 resources, 13 prompts)
Services: OK (7/7 active)
Rice: OK (palette compliant, shader active)
CI: OK (3/3 checks passed) or SKIPPED (no recent push)
On failure:
Canary: FAILURE at Tier N
[tier name]: FAILED — [specific error]
Recommendation: [what to do]
If invoked with "watch" or as part of a loop:
The canary skill complements /dev-loop ship phase. After the loop commits and pushes, it can invoke canary to verify the deploy landed cleanly before moving to the next task. This prevents shipping a broken change and then building more broken changes on top.