# Import fixture corpus (issue #63, ADR 0009) Representative `.docx`/`.odt` documents and the Markdown our import pipeline is expected to produce from them. `import.fixtures.test.ts` runs the real two-pass pandoc conversion over each and asserts the result, so a change in behaviour (ours or pandoc's) surfaces as a snapshot diff to review — not a silent regression. This suite is part of the CI **fidelity gate** (issue #69); see [`../README.md`](../README.md) for the fidelity contract and the fixture-first bug process (how a fidelity bug becomes a new corpus fixture). ## Files For each document `` and format `` (`docx`, `odt`): - `.` — the source document. - `..expected.md` — the Markdown the pipeline produces, with every embedded image's `data:` URI normalised to the literal `data:embedded-image` (the base64 payload is volatile and not what the snapshot is pinning). `article` covers headings, paragraphs, **bold**/_italic_, a link, a bullet list with nesting, an ordered list, an embedded image, and a table. `formatting` covers strikethrough, inline code, a blockquote, and three levels of nesting. ## Fidelity notes (structure, not layout — ADR 0009) - **ODT images lose their alt text** and **ODT tables lose their header row**: pandoc's HTML→ODT _writer_ does not encode either, so the source documents genuinely lack them. The DOCX variants keep both. This is a pinned pandoc limitation, not an import bug — extend the corpus rather than chasing it. ## Limits (ADR 0009) An uploaded document may be at most **25 MiB** (`MAX_CONVERSION_INPUT_BYTES`), and each of the two conversion passes may run for at most **60 s** (`CONVERSION_TIMEOUT_MS`). A ~50-page document converts well inside that ceiling (`import.fixtures.test.ts` asserts it); a document that exceeds the timeout fails the job with `converter_timeout`. ## Regenerating The documents and snapshots are generated with the **pinned** `pandoc/core:3.6` (the production sidecar) so the snapshots match CI; a different pandoc version wraps lists and pads tables differently. `scripts/gen-import-fixtures.mjs` regenerates everything against a reachable pandoc sidecar (`PANDOC_URL`).