Glossary¶
Terms used across these pages, in the order the pipeline meets them.
Atlas-lang — the bounded interpreter that executes a config. Real Python syntax, minus every construct that would let a config's result depend on something other than its own text and its declared inputs: no clock, randomness, environment, network or filesystem. See what config may not do.
Fuel — the step budget an evaluation runs on. A runaway computation stops
with a FuelExhaustedError rather than hanging.
Input — a per-run value the config may branch on, supplied by -var,
--var-file or [inputs]. The determinism guarantee is over (config,
inputs), not config alone. Not for secrets.
Resource — one managed thing, declared with a logical name. Its fields carry their own mutability.
Logical name — the name you give a resource in config. Node id — what it
becomes once scoped: {stack}:{type}:{name}, e.g. prod:aws.S3Bucket:assets.
Most commands accept a short form or a glob in place of a full id.
Stack — a namespace scoping region, tags and name prefix over the resources declared in its body.
Component — several resources behind one parameterized object. Written in
Python, used by config, never defined by it. The children become ordinary flat
resources named {component}-{child}.
Ref — the lazy handle returned by reading a computed field. Reading it is what creates the dependency edge; it resolves to a real value at apply.
Mutability — each field is mutable() (in-place UPDATE), immutable()
(REPLACE) or computed() (never diffs; produced by the provider).
IR — the intermediate representation: the content-hashed, provider-stamped graph a config lowers to. Everything downstream works on the IR, not on the source.
Canonical form — RFC 8785 JSON. Fixes key order, number formatting and string escaping, so the same IR always serializes to the same bytes — which is what makes the content hash meaningful.
input_hash — a node's Merkle hash: its own canonical inputs folded
together with its dependencies' hashes. Unchanged hash, no provider call. See
The Merkle hash.
Symbolic ref — the hash is computed over the reference to an upstream value, not over the resolved value (which does not exist yet at plan time).
Diff — the comparison of desired input_hashes against the ones recorded in
state. Note it compares against recorded inputs, not against the live world;
that is refresh's job.
Changeset — the result: one action per node — NOOP, CREATE, UPDATE,
REPLACE or DELETE.
Conditional replace — a REPLACE caused by an immutable field holding a
Ref. It becomes a no-op if the value resolves unchanged at apply.
Plan — the ordered, guarded, policy-checked changeset.
Policy — a check over one node's pending change, evaluated at plan time.
MANDATORY blocks, ADVISORY warns. See Policies.
Lease / lock — the time-bounded claim a run takes on state before writing. Renewed while the run lives; lapses if it dies.
Fenced write — a state write conditional on the recorded lease holder still being you. The store decides, not the writer, which is what stops two concurrent runs from silently merging state.
Compensation — the undo recorded for a completed node, run in reverse completion order when an apply fails. See When apply fails.
Poisoned row — a state row whose input_hash has been cleared so the next
plan cannot Merkle-skip it. Set before a compensation runs, so a rollback that
dies mid-way cannot leave a silent divergence.
Plan drift — the changeset about to execute differs from the one that was approved, because state moved between the two. Raised, not reconciled.
Drift — the live world differing from what state records. Found by
refresh, and only in the fields a provider's read reports.
Artifact (.atlas) — a compiled, content-hashed config with provider
versions pinned. deploy applies one without re-executing the config, so the
identical bytes can be promoted between environments.
Output — a value exported with output(), namespaced by its stack and
persisted into state after apply. Read back with atlantide output, or from
another stack via StackReference.
Secret — a name, not a value. atlantide.secret("x") returns a SecretRef;
the plaintext is resolved in-memory at apply and never reaches the IR, the
artifact or state.