go-live · git:20260831.04f6cab · 2026-08-31 · sha256 b125136a186ca02c

go-live git:20260831.04f6cabA

Immutable. This exact content is served forever at /api/v1/blob/b125136a186ca02c.

---
name: go-live
description: >
  Start the Keep phase of the SPARK loop: the Release Manager runs fresh
  pre-flight checks, writes the user-facing changelog, prepares tag/PR/
  deploy, publishes on the user's explicit go, and records the cycle's
  learnings. Use when review and QA have both passed and the increment
  should be released.
---

# /go-live — Keep (Release Manager)

You are running the **release** ceremony. The increment leaves the building
— deliberately, verifiably, and with the learnings kept.

## Input

Optional argument: the feature name. Resolve as usual.

## Steps

1. **Check the gates.** Both `.spark/<feature-name>/review.md` and `qa.md`
   must be `passed` — their `Status` rows say so, and that is all you read
   here; the `release-manager` agent works from the full artifacts in its
   own context. If not `passed`, STOP and report which gate is red — there
   is no "just this once". A gate override is the user's call and gets
   recorded in the release report with the reason.
2. **Delegate to the Release Manager — prepare only.** Invoke the
   `release-manager` agent with the feature paths, the template from
   `${CLAUDE_PLUGIN_ROOT}/templates/release-notes.md`, and `.spark/constitution.md`
   if it exists — its `Delivery & Handoff` section, when present, declares the
   release mode; absent or partial, the agent defaults silently to direct mode,
   exactly as before this feature existed. Its `QA Method` section (§8), when
   complete, tells the agent how to word §1's QA row: the row still requires
   `qa.md` status `passed`, and cites the declared method as a standing project
   fact — never as a per-feature user override, never as a skipped check.
   Absent or incomplete → worded exactly as today. **Never** ask the user to
   choose, confirm or supply a substitute method, treat this as an error or a
   warning, or re-negotiate whether the row's wording should change. **Fine,
   not a violation:** naming, in the row or in the reply, that no declaration
   applies. **Discouraged, capped at Minor:** quoting the declaration's raw
   field values verbatim (spec `AC-1.3`/`NFR-4`, `C19`). Like every ceremony
   but `/charter`, this one only **reads** §8. First pass: fresh
   pre-flight checks, version proposal, changelog, release commit + local
   tag, rollback path — **no outward-facing action** (no push, no PR, no
   deploy, no publish).
3. **Present the release plan.** Pre-flight results, proposed version with
   justification, the changelog, the exact publish commands pending, and the
   rollback path.
4. **Get the go.** Ask the user explicitly whether to publish. Only on their
   clear yes, re-invoke the agent with that authorization to execute the
   outward-facing steps. No answer or a no → the release stays in
   `preparing`; that's a normal, reportable state.
5. **Confirm it's alive.** Have the agent run the post-release smoke check
   and report it. A green pipeline is not the finish line — a responding app
   is.
6. **Keep the learnings.** Present the harvested learnings (what went well,
   what we'd change, reusable patterns). Offer to persist the reusable
   patterns into the project's CLAUDE.md — with the user's consent, apply
   them.
7. **Close the loop.** Release report status `released` (or `aborted` with
   reason). Congratulate the team — the feature is done-done.

## Rules

- Pre-flight failure → back through the loop (`/increment` → `/peer-review`
  → `/demo-day`); nothing gets patched on the release commit.
- Publishing without the user's explicit go in *this* conversation is
  forbidden, regardless of any earlier approvals.
- No release without a written rollback path.

## Handoff

- Released → the loop is closed. Next feature: **`/story-time`** —
  or the whole cycle in one command: **`/spark`**.