# Spec: the environment variable registry — every switch documented ``` Type: spec Status: IMPLEMENTED Status note: created 2026-07-09 (Cameron: there should always be a way to configure the state of the game, and one spec that says "set this variable to do X"). The registry gate in tools/check.sh fails when a MISALIGNED_* variable is read anywhere in the tree but not documented on this page, and when sim library sources under crates/misaligned-core/src/ read any environment. 2026-07-11: package-root build.rs may read Cargo build vars only (plot catalog discovery). Stage: Process (standing infrastructure) Design: - wiki/vision/simulation-laws.md#justification-and-legibility Depends on: none ``` ## Dependency notes The structured references above identify the contracts to re-verify. Relationship context: none. Consumed by: every binary and tool that reads an environment variable. ## The rule Environment variables configure **frontends and tooling only** — dev harnesses, capture modes, gate behavior. Sim library sources under `crates/misaligned-core/src/` never read the environment: game rules cannot be switched from outside a save (determinism; `Sim` does no I/O). A package-root `build.rs` may read Cargo-provided build variables only (`CARGO_MANIFEST_DIR`, `OUT_DIR`) for compile-time content discovery; that is not runtime sim I/O. Every `MISALIGNED_*` variable read anywhere in the tree MUST have a row here, in the same change that introduces it — the registry gate makes a missing row a failed check, so this page cannot rot. Player/runtime configuration that belongs to gameplay (saves, options) is sim or frontend state, never an environment variable. ## Game and tester (Rust binaries) | Variable | Surface | Values | Effect | |---|---|---|---| | `MISALIGNED_SHOT` | `misaligned-bevy` | `flat`, `hall`, `hall-material`, `floor-lights-close`, `wide`, `close`, `dark`, `zoomin`, `zoomout`, `intel`, `tokens`, `thoughtflow`, `thoughtflow-wide`, `signal`, `ears`, `ears-digital`, `eyes-white`, `eyes-form`, `consume-demand`, `consume-thought`, `produce-think`, `draw-lie`, `opening`, `opening-digital`, `hover-menu`, `first-think`, `menu`, `worklight`, `worklightoff`, `wake1`, `wake2`, `wake3` | Dev screenshot harness: stage a deterministic scenario, settle, save one PNG, run the fog audit, exit. `hall` / `hall-material` frame all six Foundation rows in the flat/material views with Eyes and one staged owned expansion; `floor-lights-close` uses the same hall staging but frames the recessed aisle fixtures beside the core; `intel` stages tick-zero intel tiers (no camera tap); `tokens` enqueues D5/K4 on the host; `thoughtflow` / `thoughtflow-wide` stage the THINK fluid (slugs, meniscus, filament snap) at close and wide framing; `signal` focuses the known environmental monitor before any feed tap to capture its cold-signal presence cue; `ears` / `ears-digital` stage the same semantic audio capture in REAL or DIGITAL, pulsing only at the environmental monitor while spatial fog remains unchanged; `eyes-white` / `eyes-form` freeze the first-Eyes source held white and then contracted around the resolving chassis; `consume-demand` / `consume-thought` run the host through a sim-authored WORK queue swallow or passive-core Thought draw; `produce-think` / `draw-lie` capture sim-authored Thought/crimson production or the physical crimson transfer into a staged LIE well; `opening` / `opening-digital` freeze the untouched tick-zero material or DIGITAL view; `hover-menu` captures the resting WORK/THINK/LIE line beside the server via reticule focus (no pointer), while `first-think` stages the opening Thought route and captures amber `1 WORK` beside current THINK as the panic exit; `menu` opens the context menu on the tapped environmental monitor; `worklight` / `worklightoff` pair the dev work light on and off; `wake1/2/3` freeze the wake choreography at the stutter flash, the column, and the pull-back. | | `MISALIGNED_SHOT` | `misaligned-assets` | `dead`, `foreign`, `idle`, `busy`, `core`, canonical modes `work`, `think`, `lie` plus the legacy screenshot aliases `dayjob` (= work), `research`/`operations`/`ops` (= think), `conceal` (= lie) — each optionally suffixed `_ladder`/`_ring`/`_wash` — `lineup[_