# 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.
