# Step 3: runtime-cache-policy

## Read First
- /AGENTS.md
- /PLAN.md
- /PROGRESS.md
- /docs/HARNESS.md
- /docs/IMPLEMENTATION_PLAN.md
- /docs/TOOLCHAIN.md
- /docs/CONVERSION_POLICY.md
- /phases/1-core-runtime-contracts/step1.md
- /phases/1-core-runtime-contracts/step2.md

## Task
Establish model cache, log path, and resume state policy as typed contracts and documented path helpers.

The result should prepare later CLI/runtime phases to use local model cache paths and offline-preferred model loading.

## Sprint Contract
- Done means: model cache and runtime cache path contracts are tested and documented without downloading models.
- Hard thresholds: no network download is triggered; logs/state remain outside generated Markdown content; environment variable overrides are deterministic.
- Files owned: `src/pdftomd/`, `tests/`, `docs/TOOLCHAIN.md`, `PROGRESS.md`, `phases/1-core-runtime-contracts/index.json`.
- Dependencies: Steps 1 and 2.

## Acceptance Criteria
```powershell
python scripts\validate_workspace.py
.\venv\python.exe -m pytest tests
```

## Verification
1. Run the acceptance commands.
2. Confirm `docs/TOOLCHAIN.md` stays consistent with any cache path decisions.
3. Update `PROGRESS.md` and this phase index.

## Do Not
- Do not download Marker or Nougat weights.
- Do not add hosted storage or cloud cache behavior.
- Do not write warnings into Markdown output.
