Skip to content

Manual and destroy runs

Trigger a Run by hand — an on-demand plan or apply, or a destroy — from the Stack's Runs tab, in any execution mode, and understand what commit a manual Run pins.

Most Runs are born from Git — a push or a pull request. But you can always trigger one by hand, and destroy Runs only ever happen this way. Both start from the Stack’s Runs tab.

The New run dialog

On a Stack’s Runs tab, New run opens a dialog with two choices:

  • What kind — a Change run (plan, then apply after its gate), or a Destroy run (plan a teardown, then apply after approval). You can also run a plan-only check when you want to see a plan without applying anything.
  • Which ref — defaults to the Stack’s tracked branch. Point it at another branch or ref for an ad-hoc plan.

A manual Run runs whatever the execution mode gate would apply to it — a merge_then_apply Stack still parks a manual Change run at approval; an auto_apply Stack applies it. Manual runs are also the only way a manual-mode Stack runs at all, and the escape hatch in every mode.

A manual Change run

Use one to:

  • Run a manual-mode Stack — nothing fires from a push, so you drive every plan and apply from here.
  • Re-apply the tracked branch — the revert path. If an apply went wrong, revert the change in Git and trigger a manual Change run on the tracked branch to bring live infrastructure back in line. This is how you “re-apply main” in any mode.
  • Recover a stuck Run — after a force-failed Run, a fresh manual Change run re-plans against the current state (see Troubleshooting).

A destroy run

A Destroy run plans a full teardown of the Stack’s resources, then applies it.

Danger: A destroy run removes every resource the Stack manages. Recreating them is a fresh apply, but any data they held — databases, volumes, DNS — is gone and cannot be recovered. Read the destroy plan before you approve.

It is deliberately hemmed in:

  • Manual-only. A destroy never comes from a push, a merge, or a cascade — you always ask for it explicitly.
  • Always parks for approval. A destroy waits at awaiting approval in every execution mode — including auto_apply. There is no way to tear down infrastructure without a human reading the destroy plan and approving it.
  • Never cascades. A destroy apply does not trigger downstream Stacks. To take a layered estate down, destroy from the leaves inward — and note you can’t delete a Stack while another still depends on it.

What a manual Run pins

A webhook-born Run is pinned to the exact commit that triggered it. A manual Run instead tracks the ref you chose and resolves its head when the plan runs — so a manual Change run on main plans against main’s current tip. From that point it behaves like any other Run: the plan pins to that resolved commit, and if you approve, the apply executes that exact plan, never a re-plan of a since-moved branch. What you read is what runs.