# Step 0: marker-invocation-adapter ## Read First - /AGENTS.md - /PLAN.md - /PROGRESS.md - /docs/HARNESS.md - /docs/IMPLEMENTATION_PLAN.md - /docs/ARCHITECTURE.md - /docs/TOOLCHAIN.md - /phases/1-core-runtime-contracts/index.json ## Task Implement the first Marker adapter boundary that invokes Marker through a small internal interface. Keep this adapter isolated so tests can use fakes without loading large models. Real Marker invocation should be smoke-testable but not required for every unit test. ## Sprint Contract - Done means: Marker invocation is behind a narrow interface and can return structured parse results or clear failures. - Hard thresholds: Marker remains the primary document parser; Nougat is not used here; unit tests avoid mandatory model downloads; parser errors are structured. - Files owned: `src/pdftomd/marker_adapter.py`, related tests, `PROGRESS.md`, `phases/2-marker-adapter/index.json`. - Dependencies: Phase 1 runtime contracts. ## Acceptance Criteria ```powershell python scripts\validate_workspace.py .\venv\python.exe -m pytest tests ``` ## Verification 1. Run the acceptance commands. 2. Confirm the adapter can be tested without external services. 3. Update `PROGRESS.md` and this phase index. ## Do Not - Do not parse formulas with Nougat. - Do not implement Markdown rendering. - Do not make every test load Marker models.