# Step 2: output-bundle-contract ## Read First - /AGENTS.md - /PLAN.md - /PROGRESS.md - /docs/HARNESS.md - /docs/IMPLEMENTATION_PLAN.md - /docs/ARCHITECTURE.md - /docs/CONVERSION_POLICY.md - /phases/1-core-runtime-contracts/step0.md - /phases/1-core-runtime-contracts/step1.md ## Task Define deterministic output bundle path rules for chunk Markdown files, image assets, anchors, and runtime artifacts. This is a contract step. It may include lightweight path helpers and tests, but it should not render Markdown or write parsed document content. ## Sprint Contract - Done means: output directory, chunk file names, image asset names, and runtime log/state locations are modeled and tested. - Hard thresholds: document output sidecars remain out of scope; runtime logs/state are separated from Markdown bundle output; asset naming is deterministic. - Files owned: `src/pdftomd/`, `tests/`, `PROGRESS.md`, `phases/1-core-runtime-contracts/index.json`. - Dependencies: Steps 0 and 1. ## Acceptance Criteria ```powershell python scripts\validate_workspace.py .\venv\python.exe -m pytest tests ``` ## Verification 1. Run the acceptance commands. 2. Confirm generated path contracts match `docs/ARCHITECTURE.md`. 3. Update `PROGRESS.md` and this phase index. ## Do Not - Do not implement the renderer. - Do not write files under `output/` in tests unless using a temp directory. - Do not create sidecar metadata output.