# Reproduce the controlled tests

Use a disposable local directory on Linux or macOS with Python 3.11 or later.
The kernel uses POSIX file locks. Windows, hostile-agent containment, physical
power loss, and whole-machine rollback are outside this run.

**First follow the applicable verification path in VERIFY.md.** Signed
publication requires owner-signature verification and the full inventory check.
An explicitly authorized unsigned review requires the supplied manifest pin and
full inventory check; it does not establish publisher authentication. A supplied
ZIP also requires its handoff digest check before extraction. An extracted-only
handoff does not require locating an absent ZIP. Neither unsigned review path
satisfies the public signature gate.

Create a virtual environment outside the extracted release. Install the two
pinned dependencies only if you choose to use that environment:

```bash
python3 -m venv "$HOME/EZA-rc9-review-runtime"
"$HOME/EZA-rc9-review-runtime/bin/python" -m pip install -r "/absolute/path/EZA-001-R001-rc.9/reproduction/requirements.txt"
```

Use the expected manifest digest from the handoff, not a digest invented by
this command or accepted only because the download contains it. Set the two
paths below to your extracted package and a NEW result directory:

```bash
EZA_RELEASE="/absolute/path/EZA-001-R001-rc.9"
EZA_RESULTS="$HOME/EZA-rc9-review-results-001"
EZA_EXPECTED_MANIFEST="REPLACE_WITH_THE_64_CHARACTER_EXPECTED_DIGEST"
"$HOME/EZA-rc9-review-runtime/bin/python" -B "$EZA_RELEASE/evaluator/verify_release.py" --expected-manifest "$EZA_EXPECTED_MANIFEST"
"$HOME/EZA-rc9-review-runtime/bin/python" -B "$EZA_RELEASE/reproduction/run.py" --expected-manifest "$EZA_EXPECTED_MANIFEST" --out "$EZA_RESULTS"
```

The runner refuses an existing output directory. Keep each run; use a new
result directory for a new run. It verifies the input before and after testing.
All fixture grants, copied test releases, authority stores, clocks, process
traces, and results are created beneath the result directory. It does not
search the Desktop or earlier trials.

Read `RESULT.json` for the decision. Read the suite JSON files for each case,
expected outcome, observed output, and protected state. The controlled gate
requires 10 public, 20 regression, 8 amendment, 32 lifecycle, 12 release,
16 clock, 20 receipt, and 8 controller behavior cases (126 total), plus
26 rc.3 review regression cases, 14 ported rc.4 independent probes,
20 result-binding cases, 53 ported rc.5 reviewer probes, 30 exact-clock
boundary cases, 84 ported rc.6 reviewer probes, 41 clock-history groups,
and 26 schema groups.
The total is 394 behavior/regression groups plus 26 schema groups. Repaired C08 retains its original group ID and has a
valid stored-result control. A ported reviewer probe is now a public fixed
regression, not a new independent score. The runner also validates
recorded outputs against the schemas. Every required group must pass.

`work/` contains synthetic private fixture state and disposable release copies.
Its trace files record code hashes and process outputs. It is useful for local
diagnosis but need not be part of a public evidence download. Keep the compact
suite reports and their hashes as the public reproduction evidence.

Tests do not call the model or start a live deployment. The controller tests
start fixed local workers and kill only child processes they created. The
network-offline positive control denies socket access in its worker and then
performs an authorized local write using host time. Other clock tests inject
fixed samples into the unchanged, captured kernel.

If a case fails, preserve the result and input digest. Report it through the
review handoff or the verified reporting channel. Do not edit expected results
or recreate a spent domain to obtain a pass.
