# Step 0: markdown-block-renderer

## Read First
- /AGENTS.md
- /PLAN.md
- /PROGRESS.md
- /docs/HARNESS.md
- /docs/IMPLEMENTATION_PLAN.md
- /docs/ARCHITECTURE.md
- /docs/CONVERSION_POLICY.md
- /phases/4-semantic-enrichment/index.json

## Task
Implement block-level Markdown rendering for headings, paragraphs, lists, blockquotes, formulas, captions, and simple references.

Renderer tests should use internal block fixtures, not live PDF parsing.

## Sprint Contract
- Done means: core block types render to deterministic Markdown strings with focused tests.
- Hard thresholds: math delimiter validation is applied; renderer does not inject warnings/errors into Markdown; output is stable across runs.
- Files owned: `src/pdftomd/renderer.py`, tests, `PROGRESS.md`, `phases/5-markdown-rendering-assets/index.json`.
- Dependencies: Phase 4 enriched blocks and Phase 3 formula outputs.

## Acceptance Criteria
```powershell
python scripts\validate_workspace.py
.\venv\python.exe -m pytest tests
```

## Verification
1. Run the acceptance commands.
2. Confirm renderer tests are focused, not full snapshots.
3. Update `PROGRESS.md` and this phase index.

## Do Not
- Do not invoke Marker or Nougat.
- Do not implement table/asset file writing in this step.
- Do not add sidecar document outputs.
