What problem does it solve? Deploying services to a k3s homelab by hand risks racing GitOps deploys, applying stale or uncommitted manifests, and mistaking a green playbook run for a healthy workload. This Skill enforces the correct deploy path — locks, snapshot worktrees, dry-run validation, and post-deploy health gates — for both k3s workloads and the Pi's Docker services. ## Core Features & Use Cases - Platform-aware deployment: Routes services to the right path — k3s roles under ansible/roles/k8s/ or Docker roles on daniel-pi — and never runs Docker verification on cluster nodes where Docker no longer exists. - Three validation modes: Distinguishes prek (local schema checks), --check (task wiring only), and --dry-run (server-side validation against the live API server, including CRDs), so the right check answers the right question. - Locked, snapshot-based deploys: Runs through scripts/deploy.sh, which holds the shared git-tree lock, deploys from a snapshot of HEAD, and serializes per-service deploys; exit codes 2–77 distinguish "nothing deployed" resume points from real playbook failures. - Health verification gate: Confirms rollouts with probe.py health, which requires a fully complete rollout and no container restarts in the last 180 seconds — catching crashloops that kubectl rollout status reports as green. - Use Case: After merging a PR that changes a Traefik middleware, deploy the affected service with a server-side dry run first, then deploy and verify the rollout is healthy before declaring success. ## Quick Start Ask the assistant to deploy a specific service by name, for example requesting a dry run first and then a verified deploy of the service through the Ansible deploy wrapper.