# Selective Verification Policy

Verification is proportional to the changed dependency surface and is reused while its inputs,
toolchain, features, environment, and command remain unchanged.

| Tier | Use | Typical scope |
|------|-----|---------------|
| Fast loop | Ordinary implementation edits | Formatting as needed, affected package check, focused tests |
| Slice gate | A bounded behavior slice is stable | Affected package tests and lint plus relevant domain validators |
| Candidate gate | An exact release candidate is nominated | Full workspace/all-feature gates, deterministic content checks, packaging, and named native scenarios |

Codex Cargo commands run through `scripts/codex/verify.py` or `scripts/codex/cargo_lane.py`; complete
output belongs in `.codex/logs/`. Do not run a candidate gate during ordinary iteration, duplicate a
workspace check immediately before a compiling workspace test without a distinct target reason, or
rerun a valid gate after unrelated documentation changes.

User steering invalidates only gates whose inputs or acceptance claim changed. Record that boundary
in session state. Automated tests are not native editor acceptance, and screenshots alone do not
prove an interaction.

When native acceptance is explicitly delegated, `scripts/codex/native_qa.sh plan <scenario>` prints
the named steps and assertions before anything launches. The runner snapshots a declared fixture,
records each manual assertion and target-window capture, closes only its recorded PID, and exposes a
hash-checked `restore --dry-run` / `restore --apply` pair. Planning a scenario never launches the
editor, and Codex does not take over user-owned visual QA merely because a scenario exists.
