Ignitify.dev
Storage and residency
Concepts

Storage & residency

Two of the seven axes, in depth: how much scratch disk a run gets, and whether its VM survives between runs.

Scratch storage — storage_mib

An ephemeral drive, sized in MiB, sealed at VM boot and wiped at teardown — it never survives past the VM that made it. The default depends on the run's preset: 64 MiB on std.micro, 128 MiB on std.small, 256 MiB on std.medium and mem.large, 512 MiB on std.large and mem.xlarge and 1024 MiB on std.xlarge and cpu.large.

You declare
The run gets
nothing
the preset's default
less than the preset's default
the preset's default. The reply carries a storage-clamped notice, and the CLI prints it.
more, up to your plan's max_storage_mib
what you declared
more than your plan's max_storage_mib
refused (400), at deploy and at run — never silently capped

The disk is reserved in full when the VM boots, and the same size is what your plan is charged for scratch. A webhook-triggered run does not reconfigure the task: it always gets the preset's default. See Presets & limits for each plan's limit.

The storage-clamped notice

When a declared size is raised to the preset default, the reply to task:run (and to a scheduled run, task:run --at) lists what changed in notices. The CLI prints one line:

Reply notice
Note: storage_mib 1 is below the std.xlarge default (1024 MiB). The run uses 1024 MiB.

With --json the same notice is {"code":"storage-clamped","preset":"std.xlarge","requested":1,"effective":1024}. A scheduled run is checked twice: at --at time (you get the notice) and again when it fires, against your plan as it is then. A webhook run declares no size, so it never gets a notice.

VM residency — residency

Value
Lifecycle
Torn down by
auto
normal — default
idle TTL, age cap, or capacity pressure — whichever hits first
pinned
permanent standby — boots once, reused forever
nothing automatic; only an explicit vm:delete --force, or a delete cascade from the deployment it belongs to

Pinning must be requested explicitly — it is never a side effect. It also requires cardinality: many or continuous: a one-shot VM tears down after its single unit, so there is nothing to pin (rejected at deploy). Not every tier may pin at all — see Presets & limits.

What pinning actually survives

Event
Effect on a pinned VM
idle time
exempt from the reaper's idle sweep. Past the idle-warning window (24h by default) it shows ⚠ in vm:list --pinned — a warning only, never a kill.
a bare vm:delete (no --force)
refused, naming the residency and age. The VM survives.
a fleet-host restart
does not survive. The pin is lost, honestly reported (vm:list --pinned shows a "lost" row) — the next run cold-boots a new VM with fresh state and the pin re-establishes on it.