{
  "schema_version": 1,
  "record_id": "ADR-0003",
  "title": "Select pdf2htmlEX or MuPDF using representative measurements",
  "status": "proposed",
  "date": "2026-08-23",
  "candidates": ["pdf2htmlEX", "MuPDF object extractor plus custom HTML generator"],
  "prerequisites": {
    "same_corpus_revision": true,
    "same_render_dimensions_and_browser_matrix": true,
    "minimum_fixture_classes": ["digital-text", "catalog", "tables-forms", "links-annotations", "vectors-transparency", "rtl", "cjk", "scanned-ocr", "rotated-mixed-size", "malformed-hostile"],
    "required_metrics": ["page_similarity", "text_recall", "unicode_correctness", "reading_order", "links", "semantic_structure", "page_raster_text_violations", "output_bytes", "file_count", "duration", "peak_memory", "browser_pass_rate"]
  },
  "hard_gates": [
    "No full-page screenshot or page-wide raster containing visible text.",
    "Important visible text is real, selectable, searchable DOM text without a duplicate hidden text layer.",
    "Links are anchors where present; required local assets resolve; generated package passes safety validation.",
    "Every fixture class has measurements and every known failure is classified as supported, unsupported, or release-blocking.",
    "Candidate image satisfies ADR-0002 and vulnerability/license policy."
  ],
  "decision_rule": [
    {
      "when": "pdf2htmlEX passes every hard gate and all committed launch thresholds on the representative corpus",
      "choose": "pdf2htmlEX for demand validation and initial production",
      "note": "Its measured output defines the expected visual baseline; semantic alignment remains required."
    },
    {
      "when": "pdf2htmlEX fails any hard gate or launch threshold on representative supported documents",
      "choose": "MuPDF object extractor plus custom HTML generator",
      "note": "Docling may enrich semantics but is not the visual renderer."
    },
    {
      "when": "measurements are incomplete, non-comparable, or thresholds are absent",
      "choose": "neither",
      "note": "Production selection remains blocked; manual inspection of the five-page catalog cannot break the tie."
    }
  ],
  "tie_breaker": "If both pass, prefer lower operational complexity only after quality, safety, supply-chain, license, resource, and browser requirements pass; record measured deltas and rationale in a superseding accepted revision.",
  "evidence_file": "evidence/engine-measurements.json",
  "current_outcome": "blocked_pending_measurement"
}
