CI executes repository code with network access and deployment credentials. The safe default is to assume that every job deserves its own boundary.
Runnable creates a clean Linux machine for one job, gives it only the credentials required for that job, and removes the machine after the job finishes.
The job is the isolation unit
Jobs in the same workflow do not share a long-lived host. Dependencies move through declared outputs, artifacts, or cache rather than residue on a worker that happened to run something earlier.
This makes reruns easier to reason about. A passing retry cannot depend on a file left behind by the failed attempt because that machine no longer exists.
Credentials arrive late and expire early
Repository credentials are short-lived and read-only for ordinary source fetches. Environment secrets are released only after the scheduler has resolved the job and its policy context.
Fork pull requests do not receive customer secrets. Masking is applied to streamed output, while the underlying secret remains tenant-isolated and envelope-encrypted at rest.
Retention is separate from execution
The runner disappears, but the run record does not. Logs and artifacts follow the retention window of the selected plan. Metering comes from the control-plane lifecycle, not from whatever the runner last managed to report.
That separation lets Runnable preserve evidence without preserving a mutable machine.


