{
  "$comment": "RFC-0031. Covers the step between build (ends at merge, G2.1) and operate (starts at instrument). The gate ids sit between G2 and G3 to match where the loop sits in the lifecycle.",
  "name": "release",
  "version": "0.2.0",
  "description": "Take merged code to live users through a planned, reversible rollout — plan the phases and the rollback, judge readiness on evidence, draft the release notes, then a human makes the go/no-go call. Use when the user has merged a change and asks how to roll it out, whether they are ready to launch, or for a go/no-go decision.",
  "entrypoint": "LOOP.md",
  "kind": "loop",
  "cap": 3,
  "stages": [
    {
      "id": "plan",
      "type": "generate",
      "intent": "Decide the rollout phases, the rollback for each, and the one point of no return, before anything reaches users.",
      "skills": ["migration-plan"]
    },
    {
      "id": "ready",
      "type": "verify",
      "intent": "Judge on evidence whether the change can go live: rollback, detection, response, measured targets, data, comms, exposure.",
      "skills": ["launch-readiness"],
      "gate": {
        "id": "G2.5",
        "kind": "review",
        "verdicts": ["PROCEED", "PROCEED WITH CONDITIONS", "REVISE", "BLOCKED"],
        "revise_to": "plan"
      }
    },
    {
      "id": "announce",
      "type": "generate",
      "intent": "Write what users and the team are told. Only after readiness, so nobody announces a launch that then fails the check.",
      "skills": ["release-notes"]
    },
    {
      "id": "go",
      "type": "gate",
      "intent": "A human decides whether it should ship now. Readiness says it can; this decides timing, freeze windows, and who is on call.",
      "skills": ["council-review"],
      "gate": {
        "id": "G2.6",
        "kind": "human",
        "verdicts": ["PROCEED", "PROCEED WITH CONDITIONS", "REVISE", "RECONSIDER", "BLOCKED"],
        "revise_to": "plan"
      }
    }
  ]
}
