Roll back a release
| Use | When | Undo |
|---|---|---|
| Yank | A version is bad. Every environment it served moves to the newest good build. | --unyank |
| Pin production | A version is fine, but production should stay on an older one for now. | Unpin |
You need: introspection login (or, for the API, a project API key with the runtimes capability, the default for introspection api-keys create) and the version ID.
Find the version
introspection runtimes list --runtime support-agent # what each environment runs
introspection runtimes versions <version-id> # every version of the runtimeEvery command below takes a version ID, not the slug.
Yank a bad version
introspection runtimes update <version-id> --yank --reason "approves final-sale refunds"What happens:
- New tasks no longer get this version.
- Every environment it served, pinned or not, moves to the newest good default-branch build.
- Running tasks finish on it.
- A running experiment that uses it is stopped.
The dashboard calls this Deactivate deployment. To restore it: runtimes update <version-id> --unyank.
Pin production to a version
In the dashboard, open the runtime, choose the version, then Version actions → Pin production → Pin to commit. Unpin production returns it to the newest build.
From CI or a script, use the API:
curl -X PATCH "https://api.introspection.dev/v1/runtimes/<version-id>" \
-H "Authorization: Bearer $INTROSPECTION_TOKEN" \
-H "Content-Type: application/json" \
-d '{"environment_ref": {"production": "<commit-sha>"}}'<commit-sha> is the commit the version was built from: runtimes get <version-id> gives its recipe_id, and introspection recipes get <recipe-id> shows git_commit_sha. The API accepts any hex value, so copy the SHA exactly, then verify.
To unpin, send {"environment_ref": {"production": null}}. Production moves to the newest good default-branch build.
While production is pinned, merges reach staging only. Unpin once the fix is merged, or production keeps serving the old version.
Verify
introspection runtimes get <version-id> -o jsonCheck environments (where the version serves), environment_ref, and yanked_at. A commit SHA under production means production is pinned; no production entry means it follows the newest default-branch build (all rules). Then rerun a failing case in production and read its conversation.
Limits
| Not supported | Do this instead |
|---|---|
runtimes pin for production | Use the dashboard or the API above. |
| Pinning a yanked version | Production stays where it is and stops taking merges. Unyank it first. |
Rolling back with runtimes delete | It deletes the whole runtime and every version. Yank instead. |
| Moving tasks that already started | Yanks and pins affect new tasks only. Cancel running tasks if needed (Task operations). |
Or ask your agent: “Production is misbehaving since the last release. Find the cause and roll it back.”