# Step 0: ui-api-contract ## Read First - /AGENTS.md - /PLAN.md - /PROGRESS.md - /docs/HARNESS.md - /docs/IMPLEMENTATION_PLAN.md - /docs/UI_GUIDE.md - /docs/ARCHITECTURE.md - /phases/8-release-docs-packaging/index.json ## Task Define the stable core API contract that PyQt will call. This step should verify that the UI does not need to import Marker, Nougat, PyMuPDF, or renderer internals directly. ## Sprint Contract - Done means: UI-facing API functions/classes are documented and tested without building UI screens. - Hard thresholds: UI remains a thin client; conversion logic is not duplicated; progress/resume events are available through the API. - Files owned: `src/pdftomd/`, `tests/`, `docs/UI_GUIDE.md`, `PROGRESS.md`, `phases/9-pyqt-thin-client/index.json`. - Dependencies: Local MVP release-ready CLI/library. ## Acceptance Criteria ```powershell python scripts\validate_workspace.py .\venv\python.exe -m pytest tests ``` ## Verification 1. Run the acceptance commands. 2. Confirm UI boundary in `docs/UI_GUIDE.md` remains accurate. 3. Update `PROGRESS.md` and this phase index. ## Do Not - Do not create UI widgets yet. - Do not import parser internals in UI-facing code. - Do not change CLI behavior unless tests require it.