# Step 2: marker-block-normalization ## Read First - /AGENTS.md - /PLAN.md - /PROGRESS.md - /docs/HARNESS.md - /docs/IMPLEMENTATION_PLAN.md - /docs/ARCHITECTURE.md - /docs/CONVERSION_POLICY.md - /phases/0-harness-foundation/step1.md - /phases/2-marker-adapter/step0.md ## Task Map Marker structured output into the internal block model for headings, paragraphs, lists, tables, figures, captions, and equation candidates. Prefer structured Marker APIs or JSON-like structures over scraping final Markdown. ## Sprint Contract - Done means: fake Marker structures and at least one real or recorded sample shape map into internal block types. - Hard thresholds: semantic block roles are preserved; bounding boxes and page numbers survive where available; formula blocks are only marked as candidates for Phase 3. - Files owned: `src/pdftomd/marker_adapter.py`, model additions if required, tests, `PROGRESS.md`, phase index. - Dependencies: Phase 0 models and Step 0 adapter. ## Acceptance Criteria ```powershell python scripts\validate_workspace.py .\venv\python.exe -m pytest tests ``` ## Verification 1. Run the acceptance commands. 2. Confirm no final Markdown scraping is required for normal block mapping. 3. Update `PROGRESS.md` and this phase index. ## Do Not - Do not perform Nougat conversion. - Do not render Markdown. - Do not discard page or bounding-box metadata without a documented reason.