# Named native scenario format Scenario files use these top-level fields: ```yaml name: purpose: preconditions: build_lane: package: binary: fixture: steps: assertions: evidence: cleanup: invalidates: ``` `package` and `binary` are optional and default to `editor`. Focused tools such as the UI gallery can therefore use the same exact-window evidence and cleanup workflow without launching a project. Keep steps deterministic and phrased as user actions. Assertions describe visible behavior, state transitions, persistence, and failure recovery. Evidence names the target window/crop and expected files. Cleanup must identify every spawned process and fixture mutation. The runner exposes the scenario instead of pretending manual interactions are automated: ```bash bash scripts/codex/native_qa.sh plan bash scripts/codex/native_qa.sh launch bash scripts/codex/native_qa.sh attach bash scripts/codex/native_qa.sh capture bash scripts/codex/native_qa.sh record pass|fail [note] bash scripts/codex/native_qa.sh status bash scripts/codex/native_qa.sh close bash scripts/codex/native_qa.sh restore --dry-run bash scripts/codex/native_qa.sh restore --apply ``` `launch` snapshots a workspace-contained regular-file fixture before the editor starts; `attach` does the same while reusing an existing editor and never closes that user-owned process. `restore --apply` prints and flushes the baseline/current hash plan, refuses to run while the recorded process is alive, validates the snapshot hash, and restores atomically. A scenario is accepted only when all named assertions are recorded as passing and the required evidence exists; visual interaction remains user-controlled unless explicitly delegated. Recurring scenario families include Content Browser item/empty-space menus, multi-selection, destination-first import, move/reference repair, duplicate/undo/derived cleanup, material-slot assignment/inheritance, DefaultGrid Forward/Solari, and package launch.