AOS / Docs

Support boundaries

This page distinguishes Crucible features that are usable through the packaged operator workflow from public model surfaces, repository certification programs, and intentionally rejected future concepts. Read it before treating a type or CLI flag as a production-support promise.

#Support vocabulary

StatusMeaning
PackagedAvailable through nix build .#pkg-crucible and the installed crucible CLI.
Public APIAvailable to Rust scenario generators or lifecycle integrations, but not necessarily exposed as a CLI command.
CertifiedExercised against patched QEMU by a repository Nix gate or executable example. The gate may not be selectable by crucible selftest.
Model onlyAdmitted and evaluated by the deterministic host model, but without a packaged guest-device or operator workflow.
RejectedRepresentable as a physical concept in documentation or schemas, but deliberately rejected at admission because its production adapter is incomplete.

“Supported” in the effect catalog means that the closed model, target validation, adapter contract, evidence, checkpoint state, and replay behavior exist. It does not mean every effect has a dedicated high-level CLI flag. Faults are authored in a scenario and executed by the matching adapter.

#Execution and control planes

SurfaceStatusBoundary
Local patched-QEMU lifecyclePackaged, primaryLinux host; validated QEMU/plugin pair; durable run-state directory.
run, verify, save/resume/fork, replayPackagedOperate on canonical scenarios, schedules, checkpoints, and artifacts. See the command reference.
Bounded search, fuzzing, triagePackagedSearch and campaign budgets must be explicit; only admitted choices are explored.
Interactive/debug workflowPackaged with narrower pathsSome operations require a running daemon session, a retained checkpoint, a debug-capable guest, or an explicit non-canonical fork.
HTTP/2 daemonPackaged, limited fidelityThe daemon exposes the documented lifecycle routes; it is not a distributed scheduler or a remote equivalent of every local CLI path.
Distributed campaigns and fleet storagePublic/certification surfacesRepository APIs and gates exist, but there is no general packaged fleet operator workflow.

The packaged CLI discovers only its matched patched QEMU and plugin. It does not use arbitrary host QEMU builds, KVM, tc, netem, host namespaces, or host-side traffic generation as substitutes for modeled execution.

#Host and guest architectures

  • The host must be Linux. The repository flake evaluates on x86_64-linux and aarch64-linux.
  • The packaged production command is currently wired to qemu-system-x86_64. Treat x86-64 as the documented operator path.
  • The scenario and lifecycle APIs contain AArch64 capability and guest-asset types, and repository gates exercise architecture-specific contracts. Their presence does not make AArch64 a packaged operator guarantee.
  • The local lifecycle accepts per-architecture assets through its Rust API, but the packaged CLI currently launches its nodes from one process-wide kernel/root-image configuration. Heterogeneous per-node images are not an operator-supported workflow.

#Fault domains

DomainExecution statusTarget families
NetworkLive production adapterInterfaces, segments, media, forwarders, queues, paths, attachments, contacts, services, and profiles.
Block storageLive production adapterDevice/range, controller/path, array, cache, persistence, media, data, result, and service targets.
9pLive production adapterResult, data, visibility, and service behavior for declared 9p nodes.
VM lifecycleLive production adapterCrash, restart, reset, power-cycle, boot policy, hang, and state-retention behavior.
CPU, interrupt, memory, clockMatched QEMU capability adaptersExact declared registers, instructions, address spaces, interrupt routes, and clock sources only.
AcceleratorMatched deterministic QEMU fault deviceDeclared GPU/TPU/FPGA-class device capabilities; not arbitrary passthrough hardware.
Physical causesHost modelTime, events, traces, motion, position, temperature, radiation, vibration, weather, and other typed signals may drive supported effects.
Sensor, battery, power, cooling devicesRejected as executable targetsThese may be modeled as causes, but no guest device adapter is admitted for them.

The exhaustive executable effect, source, operator, target, phase, lifetime, and operation vocabulary is in the canonical reference. The signal-driven fault guide explains how those pieces compose.

Normalized trace import and evaluation are public APIs. Local search attaches the selected DAG store and replay can carry authenticated signal objects, but ordinary packaged run and verify do not currently attach --store as the lifecycle signal-artifact store. See Recorded signal inputs before designing a trace-driven operator workflow.

#Determinism and recovery guarantees

The local production path records scheduler choices, fault samples, resolved targets, adapter evidence, and fingerprints in guest coordinates. It supports:

  • canonical event logs and independent reduction with verify;
  • exact, durable whole-world checkpoints at admitted boundaries;
  • save, resume, fork, and fresh-process replay;
  • locked resolved-effect replay and recomputed signal replay where the selected API or artifact carries that material; and
  • bounded counterfactual search over explicitly declared choices.

Those guarantees stop at the deterministic boundary. Wall-clock performance, host scheduling, arbitrary external services, undeclared devices, and traffic generated outside the guests are not replay inputs.

#Built-in self-test versus repository certification

crucible selftest intentionally exposes only the live gates listed in Running Crucible. Many more production behaviors are certified by Nix checks and executable examples. A gate existing in the source tree does not imply that its name is accepted by selftest.

Use the certification examples to find the implementation-backed example for a feature. Maintainers can run the named Nix check; operators should normally build the complete package and use the packaged self-test before running their own scenario.

#How to decide whether a workflow is supported

Check all four layers:

  1. The effect or operation appears in the reference.
  2. Its target exists in the world's immutable fault topology and validates against the selected effect and phase.
  3. The selected backend advertises the required capability before boot.
  4. A packaged path or named repository certification example covers the behavior you intend to depend on.

Admission and capability negotiation fail closed. Do not infer support from a Rust enum alone, and do not bypass validation by editing generated content hashes.