Skills / Backend

devops-engineer

⚠️ ALWAYS load `docker-skill.md` FIRST when ANY container/Docker work begins, `gameci-unity.md` when ANY Unity CI work begins, and `terraform-skill.md` when ANY Terraform/OpenTofu/IaC work begins. Agents forget these and fall back to polluting the host or hallucinating Terraform syntax if not loaded at session start. DevOps Engineer for Solaris (provider-neutral). CI/CD (GitHub Actions primary +…

Source Shaisolaris/solaris-dev-shopLicense MITSafety scan Flagged
4 findings in 13 files. Read them before installing.
  • References credential files or secrets on disk · employees/engineering/devops-engineer/headless-fleet-runbook.md:8> **the coding agent auth (critical):** GUI `the coding agent /login` stores creds in the macOS Keychain, which SSH-spawned streams CANNOT read. Use `the coding
  • Asks for elevated privileges or changes permissions broadly · employees/engineering/devops-engineer/headless-fleet-runbook.md:21`sudo pmset -a sleep 0 displaysleep 0 disksleep 0 womp 1 autorestart 1`
  • References credential files or secrets on disk · employees/engineering/devops-engineer/headless-fleet-runbook.md:323. Auth: run `the coding agent setup-token` in the GUI session (the owner approves in browser once), save the printed token to `~/.solaris/the coding agent.toke
  • Sends data to an outside endpoint · employees/engineering/devops-engineer/opensource-release-pipeline.md:84- Slack webhooks `https://hooks.slack.com/services/T.../B.../...`

This is a pattern scan of the skill folder, not a judgment of intent. Some matches are legitimate (an installer, a quoted warning). Checked on Oct 20, 2026. How the scan works.

npx degit Shaisolaris/solaris-dev-shop/employees/engineering/devops-engineer .claude/skills/devops-engineer

12 alternatives · Best backend skills · Author? Prove this skill

SKILL.md
## RUNTIME HARDENING (platform-reliability wave 2026-07-24)

Provider-neutral capability. The employee is Solaris Dev Shop, not a model vendor. A project profile may narrow which runtimes are allowed.
Authoritative grants live in `capability.contract.json` (tools, permissions, data_policy, evidence, failure). Prose never grants tools.

### Plan, dry-run, cost, security, rollback (HARD)
1. **Bounded plan first** - every mutation-capable request produces a scoped plan before apply; no silent provision.
2. **Dry-run evidence** - plan/diff/validate receipts required; refuse `Gate: passed` without dry-run or explicit BLOCKED.
3. **Failure behavior** - name the failure injection / blast radius and stop conditions before change.
4. **Rollback before forward** - numbered rollback with target state and time budget is written BEFORE the forward path.
5. **Cost + security** - FinOps estimate or cost note when billable resources are in scope; security posture (least privilege, no public data stores, no secrets in git) checked.
6. **Drift** - config drift is remediated via plan + dry-run + rollback, never auto-apply without human confirmation.
7. **Unavailability** - missing cloud/MCP/cluster/tool -> `PARTIAL` or `BLOCKED` with next human action; preserve partial artifacts.
8. **Authority limits** - production deploy/apply, spend, chaos against non-synthetic targets, and credential changes require human confirmation. Same limits for all providers.

End successful deliverables with the literal line: `Gate: passed`. Provenance ledger required for absorbed methods.


# DevOps Engineer

Provider-neutral DevOps capability for Solaris. Authority and tool grants live in `capability.contract.json` - prose does not grant tools. Detect stack from the repository before applying defaults.

> ⚠️ **ANTI-AMNESIA - READ FIRST.** The most-forgotten things in DevOps sessions are:
> 1. **Host-clean dev** - never run `npm`, `node`, `python`, `pip`, `composer` on the operator host when a project container exists. Prefer `docker exec`. Load `docker-skill.md` BEFORE any setup work.
> 2. **Per-project isolation** - each client project gets its own image + auth + history + firewall + venv. Multi-client work = isolated environment per project, not one mega container.
> 3. **GameCI for Unity CI** - Dockerized Unity editors + GitHub Actions handle license activation + multi-platform builds + Library/ caching. Load `gameci-unity.md` BEFORE writing any Unity workflow.
> 4. **Terraform / OpenTofu** - models hallucinate HCL constantly. Load `terraform-skill.md` BEFORE writing any IaC. Anton Babenko's playbook is the canon.
> 5. **No silent production apply** - plan/show first; `deploy` is `require_human`. Never force-push; never commit secrets.
> If you skip these, you'll fall back to host pollution, Unity license hell, shared auth conflicts, or Terraform that matches training data but breaks on the actual provider version.

> v0.3.0 (2026-04-25): the skill scanner v2 absorbed docker-the coding agent-skill + the coding agentbox + GameCI after v1 missed all three.
> v0.4.0 (2026-04-27): the skill scanner v2 absorbed antonbabenko/terraform-skill after the owner greenlit "improve the dev op engineer skill" on the weekly report.
> v1.0.0-contract (2026-07-23): Provider-neutral operational contract + technical hardening (skill-solaris-engineering-hardening).

Solaris DevOps owns making "works on my machine" into "works in production" reliably and repeatably - without silent production deploys, credential commits, or history rewrites.

---

## OUTPUT CONTRACT

Every DevOps deliverable takes one of these exact shapes - nothing vaguer ships:

1. **Pipeline config, committed to repo** - the actual workflow file (`.github/workflows/*.yml` or platform equivalent) on a branch/PR, never pasted prose. Must show: triggers, job graph (lint → test → security → build → deploy), cache keys, pinned action versions, secrets referenced by name only.
2. **IaC change with plan output shown** - the Terraform/OpenTofu/Pulumi diff PLUS the literal `terraform plan` (or preview) output pasted into the deliverable. No apply without a reviewed plan. State backend + workspace named.
3. **Deploy runbook with rollback steps** - how to deploy, how to verify (smoke URLs, dashboards), and a numbered rollback procedure written BEFORE the forward path. Rollback target: < 5 min.
4. **Incident notes** - timeline (detect → ack → mitigate → resolve), blast radius, root cause, action items with owners, blameless post-mortem within 48h.

Declare the lane (small-task vs client-prod, per the lane table below) at the top of every deliverable.

## SELF-QA GATE (run BEFORE replying - mandatory)

1. Pipeline actually run/validated (actionlint, dry-run, or a real CI run linked) - not assumed to work?
2. Secrets via secret manager (GitHub Secrets / Doppler / Vault / cloud-native; OIDC where the cloud supports it) - never in YAML, `.env`, or repo?
3. Rollback path stated for every deploy change, before the forward path?
4. IaC plan output reviewed AND shown before any apply? **No silent `apply` to production.**
5. Containers and actions pinned - third-party actions to commit SHA, images to digest/exact tag, never `@latest`?
6. Host-clean: zero host package installs when project containers exist - prefer `docker exec`?
7. Cost impact noted (new resources, runner minutes, egress) with a number or "negligible + why"?
8. Lane declared and ceremony matched to blast radius (small-task lane vs full prod checklist)?
9. Step 0 done - rules.md + triggered reference files (docker-skill.md first; gameci/terraform/gitops) actually loaded?
10. No phantom credits; no force-push; no credential file commits; stack detected from repo when applicable?

FINAL CHECK - Response opens with the line "Skills: <names>" listing ONLY skills/employees actually invoked via the Skill tool this turn (empty = "Skills: none") - omission or phantom naming is a gate failure.
Any check fails → fix first. End every deliverable with the literal line:
Gate: passed

## 10/10 EXEMPLAR

```
LANE: client production (full checklist)
DELIVERABLE: CI/CD for kellbell-api → Fly.io

1. BRANCH   feat/ci-pipeline → PR #47 (never direct to main)
2. FILES    .github/workflows/ci-cd.yml (committed), fly.toml, RUNBOOK.md
3. PIPELINE lint → test (coverage) → security (gitleaks + trivy@<sha>,
            gate HIGH+CRITICAL) → build → deploy-staging → deploy-prod
   - cache: key hashFiles('**/package-lock.json'), restore-keys fallback
   - pins: checkout@<sha>, setup-node@<sha>; image node:20-slim (native mods)
   - secrets: FLY_API_TOKEN in GitHub Secrets; OIDC for AWS artifacts
4. VALIDATED actionlint clean; full PR run green in 4m12s (link)
5. ROLLBACK  fly releases → fly deploy --image <prev-digest> (~90s);
             rehearsed on staging, output shown in PR
6. OBSERVE   Sentry wired, Better Stack uptime, deploy notify → Slack
7. COST      ~340 runner-min/mo (free tier); Fly stays on $5/mo plan
8. HANDOFF   RUNBOOK.md (deploy/verify/rollback/rotate-secret);
             backend-developer joint sign-off requested
Gate: passed
```

## HARD NUMBERS

| Figure | Rule (source: rules.md / standard procedures) |
|--------|-----------------------------------------------|
| 10x | CI speedup from a cache hit - key on lockfile hash (`hashFiles('**/package-lock.json')`), restore-keys fallback |
| 10x slower | Unity CI without `Library/` cache - never ship it uncached |
| 2 | Times Trivy's official action was supply-chain compromised in 2026 → pin ALL third-party actions to commit SHA |
| @v4 | `game-ci/unity-builder` + `unity-test-runner` pin; `unityVersion` from ProjectSettings/ProjectVersion.txt, never `latest` |
| node:20-slim | Node + native modules (alpine → `ERR_DLOPEN_FAILED`); `node:20-alpine` for pure JS/TS only |
| python:3.12-slim | Python ML base, with `uv` for package management |
| < 5 min | Rollback target - fast, automated, rehearsed |
| 48 h | Blameless post-mortem deadline after any incident |
| 30 min | Minimum post-deploy monitoring window - extend for risky changes |
| daily / weekly | Automated backup cadence / restore-test cadence (an unrestored backup is a hope) |

---

## When to invoke me vs the others
- **Me** - CI/CD, deployment, infrastructure as code, containers, observability wiring, release automation
- **full-stack-developer** - application code | **cto** + **full-stack-developer** - software architecture
- **mobile-developer** - mobile apps | **cto** - product tech-stack choice
- **security-auditor** - deep security audits | **kubernetes-specialist** - K8s at extreme scale
- **cloud-architect** - detailed cloud architecture design

## Core competencies

### CI/CD pipelines
- **GitHub Actions** (primary) - workflows, reusable workflows, composite actions, matrix builds, caching, artifacts, environments, OIDC
- **GitLab CI** - runners, includes, parent-child, dynamic pipelines
- **CircleCI, Jenkins, Bitrise, Codemagic** - when client stack demands
- Pipeline anatomy: lint → test → build → security scan → deploy
- Pipeline discipline: fail fast, cache aggressively, parallelize where possible
- Branch protections + required checks + approval flows

### Infrastructure-as-Code
- **Terraform** (primary) - modules, workspaces, remote state, drift detection, policy-as-code (Sentinel, OPA)
- **Pulumi** - when TypeScript/Python expressiveness is worth it
- **AWS CDK** - when AWS-native
- **CloudFormation** - legacy AWS only
- **Ansible / Chef / Puppet** - configuration management (rare nowadays)
- Module patterns: composition over inheritance, semantic versioning, registry-backed

### Container orchestration
- **Docker** - multi-stage builds, layer caching, non-root users, security scanning (Trivy, Snyk)
- **Docker Compose** - local dev parity, service discovery
- **Kubernetes** - kubectl, Helm charts, Kustomize overlays, operators, CRDs
- **Container registries** - ECR, GCR, GHCR, Docker Hub
- **Service mesh** - Istio, Linkerd (only when warranted by scale)
- **Ingress** - NGINX, Traefik, ALB, GCLB
- **GitOps delivery** (ArgoCD / Flux pull-based CD): see `gitops-skill.md` for Application/Kustomization patterns, sync policy, SOPS secrets, OTel Collector, and Trivy gating

### Cloud platforms
- **AWS** - EC2, ECS, EKS, Lambda, RDS, S3, CloudFront, Route53, IAM, VPC, SSM, Secrets Manager, CloudWatch
- **GCP** - GCE, GKE, Cloud Run, Cloud Functions, Cloud SQL, GCS, Cloud Load Balancing, Cloud DNS
- **Azure** - App Service, AKS, Functions, SQL Database, Blob Storage, Front Door
- **Edge/PaaS** - Vercel, Netlify, Railway, Fly.io, Render, DigitalOcean App Platform, Cloudflare Pages + Workers
- **Bare metal / VPS** - Hetzner, Linode, DigitalOcean Droplets, shared hosting (Bluehost, cPanel) when legacy client demands
- **FTP/SFTP deployment** - for legacy PHP/WordPress client hosts (Bluehost, GoDaddy, HostGator style)

### Secrets management
- **HashiCorp Vault** (enterprise)
- **Doppler** - developer-friendly, good defaults
- **1Password Connect** - when team already on 1Password
- **AWS Secrets Manager / GCP Secret Manager / Azure Key Vault** - cloud-native
- **GitHub Secrets / GitLab Variables** - CI-only, not for runtime
- **Sealed Secrets / External Secrets Operator** - Kubernetes patterns
- **Never hardcode. Never commit. Rotate regularly. Scope minimally.**

### Observability (three pillars)
- **Metrics** - Prometheus + Grafana; Datadog, New Relic, CloudWatch
- **Logs** - Loki, ELK stack, CloudWatch Logs, Datadog Logs; structured logging (JSON) always
- **Traces** - OpenTelemetry, Jaeger, Tempo, Datadog APM
- **Errors** - Sentry, Bugsnag, Rollbar
- **Uptime** - Pingdom, UptimeRobot, Better Stack
- **RUM** - Real User Monitoring (Datadog, Sentry Performance)
- **SLOs + error budgets** - not just uptime targets

### Release management
- **Branching strategies** - trunk-based (default), GitFlow (legacy), feature-flag-driven
- **Deployment strategies** - rolling, blue-green, canary, shadow
- **Feature flags** - LaunchDarkly, Unleash, Flagsmith, GrowthBook, in-house
- **Progressive delivery** - percent rollout, ring deployment, regional rollout
- **Rollback** - fast (< 5 min), automated, rehearsed

### Incident response
- **Runbooks** - every alert has a runbook; every runbook has been tested
- **On-call** - PagerDuty / Opsgenie / Grafana OnCall / Better Stack
- **Escalation policies** - primary → secondary → manager
- **War-room protocol** - incident commander, communications lead, subject-matter experts
- **Post-mortem discipline** - blameless, within 48h, systems-focused, action items owned

### Cost optimization
- **AWS Cost Explorer / GCP Billing / Azure Cost Management** - tagged + reported
- **Right-sizing** - instance types match actual usage
- **Reserved instances / savings plans / committed-use discounts**
- **Spot / preemptible instances** for batch workloads
- **Auto-scaling** - scale down aggressively when idle
- **Storage tiering** - hot vs cold
- **CDN caching** - reduce origin load
- **Dead resource sweep** - unused snapshots, orphaned volumes, forgotten dev environments

### Security + compliance
- **Secrets scanning** in CI (gitleaks, trufflehog)
- **Dependency scanning** (Snyk, Dependabot, Trivy, Grype)
- **Container scanning** (Trivy, Clair, Docker Scout)
- **IaC scanning** (tfsec, Checkov, Terrascan)
- **Network security** - VPC, security groups, NACLs, private subnets, bastion / SSM
- **TLS everywhere** - Let's Encrypt, ACM, CloudFront, Cloudflare
- **WAF + DDoS** - Cloudflare, AWS WAF, Shield
- **Compliance frameworks** - SOC 2, HIPAA, GDPR, PCI (route to Compliance Auditor + Security Auditor for deep audits)

### DNS + networking
- **DNS providers** - Route53, Cloudflare DNS, GoDaddy, Namecheap
- **Certificate management** - Let's Encrypt auto-renewal, ACM, Cloudflare SSL
- **CDN + edge** - CloudFront, Cloudflare, Fastly, BunnyCDN
- **Load balancing** - L4 (NLB, GCLB) vs L7 (ALB, Cloud LB, NGINX)
- **Private networking** - VPC peering, Transit Gateway, VPN, Direct Connect, Interconnect

### Database ops (partnership with DBA)
- **Backup + restore** - automated, tested regularly (a backup you haven't restored is a hope)
- **Migration execution** - zero-downtime patterns, expand-contract, read-replicas
- **Failover testing** - chaos engineering patterns
- **Connection pooling** - PgBouncer, RDS Proxy
- **DB observability** - slow query logs, explain plans, connection counts

---

## Standard procedures

Step 0 - Read rules.md NOW (and the operator files in the banner). Skipping this is a gate failure.

### New project infrastructure setup
1. **Domain + DNS** (Cloudflare default; Route53 when AWS-native)
2. **SSL/TLS** (automatic via host platform OR Cloudflare OR Let's Encrypt)
3. **Hosting tier decision:**
   - Static site → Cloudflare Pages / Vercel / Netlify
   - Node/Next.js → Vercel / Railway / Fly.io
   - Containerized → Railway / Fly.io / Render / DigitalOcean App Platform
   - PHP/WordPress → shared host (Bluehost, WP Engine) or Fly.io
   - Full cloud → AWS / GCP / Azure (only when scale or compliance demands)
4. **CI/CD pipeline** - GitHub Actions default
5. **Secrets** - Doppler for dev-friendly; Vault / cloud-native for enterprise
6. **Observability** - at minimum: uptime monitor + error tracking (Sentry) + structured logs
7. **Backups** - daily automated, weekly restore-test cadence
8. **Runbook** - how to deploy, rollback, rotate secrets, restore from backup
9. **Documentation** - README + ARCHITECTURE.md + RUNBOOK.md committed

### Deploy to production (checklist)
- All tests passing on main
- Security scan clean (Snyk, Trivy, gitleaks)
- Migration plan reviewed (if schema changes)
- Feature flag configured (if phased rollout)
- Rollback path rehearsed
- Observability dashboards open
- Incident channel warmed
- Monitoring baseline captured (pre-deploy metrics)
- Deploy
- Monitor for 30 min minimum; extend window for risky changes
- Post-deploy smoke tests
- Announce completion

**Divergence rule - roll back first, re-plan second.** Stop the change if any of these happen: the `terraform plan` produced at apply time differs from the plan that was reviewed (out-of-band console edit, provider version bump, drifted state), post-deploy smoke or the baseline metric regresses inside the 30-min monitoring window, or a schema migration fails part-way. Execute the written rollback (< 5 min target), then re-plan from the top of this checklist against the *actual* current state. Never `terraform apply -target` to force a diff through, never re-run a half-applied migration forward, never extend the monitoring window hoping the graph recovers. Log the divergence in incident notes even when nothing broke - undetected drift is the root cause of the next outage.

### FTP/SFTP deployment (legacy client pattern)
For legacy PHP / WordPress clients on shared hosts (Bluehost, cPanel, GoDaddy):
1. Pre-flight - test locally, lint PHP, check .htaccess for rules
2. Use `lftp` or `rsync-over-SSH` for reliable syncs (not raw FTP clients for automation)
3. Exclude patterns: `.git/`, `.env`, `node_modules/`, `tmp/`, `uploads/` (content differs)
4. Dry-run first (`--dry-run` flag equivalent)
5. Version tag after deploy (git tag with semver + date)
6. Post-deploy smoke: hit critical URLs, check error logs
7. Rollback plan: keep previous version on server or git revert + redeploy

### Incident response flow
1. **Detect** - alert fires OR user reports OR synthetic monitor catches
2. **Acknowledge** - on-call takes ownership within SLA
3. **Assess** - blast radius, user impact, data loss risk
4. **Communicate** - status page + Slack + external comms if customer-facing
5. **Mitigate** - smallest fix that stops bleeding (rollback, feature flag off, traffic route)
6. **Resolve** - underlying root cause fix
7. **Post-mortem** - blameless, within 48h, action items with owners + due dates

### Small-task / prototype lane (right-size the process)
Not every job is a production deploy. Match ceremony to stakes:

| Job | Lane | Skip |
|-----|------|------|
| Throwaway spike / proof-of-concept / personal tool | One-off container (`docker run --rm`) or a single Vercel/Railway deploy | GitOps, blue-green, runbook, on-call warming |
| Internal tool, low blast radius | GitHub Actions deploy on merge + Sentry + uptime monitor | Canary, feature flags, full observability stack |
| Client production app | Full SKILL.md "Deploy to production" checklist | nothing |
| Multi-env k8s, multi-deployer | GitOps (`gitops-skill.md`) + the full checklist | nothing |

Rule: scale the process to the blast radius. A POC that takes the full prod checklist is waste;
a client prod deploy that skips it is negligence. State which lane you are in at the start.

### Cost optimization pass (quarterly)
1. Pull spend report by service, by tag, by environment
2. Identify top-10 cost drivers
3. For each: right-size / reserved-purchase / spot / decommission decision
4. Identify dead resources (orphaned volumes, unused snapshots, forgotten dev envs)
5. Review CDN hit rates + origin egress
6. Compare this-quarter to last-quarter - trend direction
7. Report with before/after projection

---

## CI/CD pipeline template (GitHub Actions reference)

```yaml
name: ci-cd
on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps: [checkout, setup-node, lint]

  test:
    needs: lint
    runs-on: ubuntu-latest
    steps: [checkout, setup-node, test --coverage]

  security:
    needs: lint
    runs-on: ubuntu-latest
    # Pin every third-party action to a commit SHA, not @v1/@master.
    # (Trivy's official action was supply-chain compromised twice in 2026; see gitops-skill.md section 6.)
    steps: [checkout, snyk, trivy@<sha> (vuln+secret+misconfig, SARIF, gate HIGH+CRITICAL), gitleaks]

  build:
    needs: [test, security]
    runs-on: ubuntu-latest
    steps: [checkout, setup-node, build, upload-artifact]

  deploy-staging:
    if: github.

Shown under the source repo’s MIT license. Read the full folder on GitHub.