Walkthrough

Deployer Agents

The role that ships safely — and stops short of blast-radius operations.

The deployer's job is to take an approved diff to staging, run smoke tests, and open the PR. Critically, it does not merge to production — that gate stays human. Deployers that auto-merge are how outages happen.

Steps · 0 / 3 done
  1. Define the deployer's tool surface

    Allow: branch, push, deploy to staging, run smoke tests, open PR. Deny: merge, force-push, rollback, modify CI.

    // roles/deployer.json
    {
      "allow": ["git.branch", "git.push", "deploy.staging", "smoke.run", "pr.open"],
      "deny": ["git.merge", "git.force_push", "deploy.production", "ci.modify"]
    }
    VerifyDeployer attempts to merge → blocked with explicit reason. The block is the feature.
  2. Define what "smoke pass" means

    Don't trust the deployer's judgment of what passing looks like. Specify the exact commands.

    // roles/deployer.json — smoke section
    {
      "smoke": {
        "commands": [
          "curl -fsS $STAGING/api/health | jq -e '.status==\"ok\"'",
          "npm run e2e:smoke"
        ],
        "timeout_s": 120
      }
    }
    VerifyIf either command exits non-zero, the deployer rolls back staging and flags the PR as not-ready.
  3. Open the PR with a structured body

    Specify the PR body template so every PR carries the plan, the diff summary, and the smoke output.

    // roles/deployer.json — pr template
    {
      "pr_body": "## Plan\n{plan}\n\n## Changes\n{diff_summary}\n\n## Smoke\n{smoke_output}"
    }
    VerifyPR description is identical structure across every roster run; reviewers know where to look.
Check your understanding
Q1. Why deny merge from the deployer's tool surface?
· Tick off the 3 step(s) above.
· Score 100% on the quiz.