release-application · git:20260923.356b783 · 2026-09-23 · sha256 6b4b452e09ce2e70

release-application git:20260923.356b783A

Immutable. This exact content never changes and is served at /api/v1/blob/6b4b452e09ce2e70.

---
name: release-application
description: >-
  Release the Donut application from an authorized immutable stable tag, or
  inspect application deployment status. Use for application releases, not
  independent cli-* releases or PR delivery.
---

# Release Application

Use the [application release runbook](../../../docs/gcp/conditional-backend-deploy.md)
as the canonical procedure and evidence contract. Read it before acting; keep
command details and recovery mechanics there rather than reconstructing them in
this skill.

## Route the request

- An application release publishes the SPA, bundled CLI, routing, and any
  required backend rollout through the Application Release workflow. A `cli-*`
  release and PR delivery are independent.
- A status-only request is read-only. Inspect existing tags, workflow runs,
  publication jobs, and smoke evidence without creating a tag or rerunning a
  workflow.
- Preserve authorization already provided by the user. Do not ask again when
  the exact release identity and authorization are already clear. Before an
  immutable tag push, resolve any genuinely missing intended version, commit
  identity, or authority to publish.

## Release and verify

For a requested release, establish the intended unused, increasing stable
version and the exact release commit on `main`. Confirm successful applicable CI
and the required artifacts: exact-commit CI takes precedence; without it, the
runbook permits the nearest first-parent ancestor with CI evidence only while
tree differences match the tagged revision's workflow ignore policy. Pending or
failed evidence must not be bypassed for an older green run. A documentation-only
tag can reuse that build without starting CI. Push the immutable tag only when
authorized. CI completion does not start Application Release; if a tag was pushed
prematurely, an explicit release workflow rerun is needed after CI succeeds.
Follow the runbook for the commands and admission rules.

After the release request is admitted, inspect the selected tag, release SHA,
build SHA (`ciSha`), CI run
and attempt, the actual publication job, and the production smoke-check
evidence. Do not infer deployment from a tag, CI success, admission, or an
overall workflow result alone. `waiting`, `blocked`, failed, or skipped
publication is not deployed.

On failure, stop and report the concrete stage and evidence. Recovery is either
a retry of the same immutable identity or a tested forward correction under the
next patch version, as the runbook directs. Never move or delete the existing
tag, automatically retry, or automatically bump a version. Do not create a
GitHub Release; it is outside this workflow.

## Report

State whether the application is deployed; otherwise report the precise state,
including `waiting`, `blocked`, failed, or publication skipped. Include the tag,
release SHA, build SHA, selected CI run/attempt, Application Release run and publication-job result, and
production smoke result. Explicitly disclose evidence that could not be
verified and name the next decision or authorized recovery action rather than
masking uncertainty.

For expired artifacts, the runbook's explicit recovery reruns the selected CI
run at its build SHA, then the release workflow. Never automatically retry or
rebuild current main as a substitute. Backend health identifies the build SHA;
release identity and frontend publication prefixes retain the tagged SHA.