# TOL003-LAB1

1. Run `python setup_fixture.py`.
2. Run `python inspect_context.py` and record runtime/config identity.
3. Before each Turborepo run, write the predicted graph/cache result in `task_graph_cache_contract.csv`.
4. Where `turbo` is already installed, run `python run_turbo_probe.py vanilla build` twice, then `python run_turbo_probe.py chocolate build` while `APP_FLAVOR` is still undeclared. Run `python artifact_oracle.py chocolate`. The runner deliberately uses `--env-mode=loose` so the undeclared value reaches the task but remains outside the declared hash boundary; it also uses local-only cache (`local:rw,remote:`).
5. Reset; use `python mutate_fixture.py declare-env`; repeat the flavor mutation and oracle check.
6. Reset; use `python mutate_fixture.py remove-dependency-edge`; run `verify` from clean state and classify only the supported boundary.

The runner never downloads Turborepo. `TURBO_UNAVAILABLE` is missing runtime evidence, not a simulated cache result.

Execution-boundary note: loose environment mode is a controlled teaching condition for this omitted-input counterexample, not a production recommendation. Record resolved Turbo/Node/Python identity and the local-only cache scope from `inspect_context.py`.
