What problem does it solve? The homelab's GitOps pipeline deploys on a 10-minute systemd timer, so a merged change waits for the next tick and a healthy run logs nothing, making it impossible to tell "ticked, nothing to do" from "did not tick at all" from the journal alone. ## Core Features & Use Cases - Manual tick trigger: Runs gitops_tick.sh on daniel-box to start gitops-deploy.service immediately via a polkit-authorized wrapper, executing the real fetch, CI-gate, fast-forward merge, deploy, health-gate, and rollback path. - Result interpretation: Prints last_run, hold_sha, and behind_since from /var/lib/gitops-deploy so a fresh last_run distinguishes an uneventful tick from a tick that never ran. - Concurrency and exit-code handling: Detects when a tick is joined to an already-running one, and surfaces exit code 75 (still running) or 3 (skipped for lock contention). - Use Case: After merging an urgent fix, run the tick by hand instead of waiting ten minutes, then confirm from last_run that the deploy actually executed. ## Quick Start Ask the agent to run ./scripts/deploy_tools/gitops_tick.sh on daniel-box and report the tick's journal output and last_run timestamp.