{
  "generatedAt": "2026-09-22 17:24 UTC",
  "versions": {
    "node": "v24.10.0",
    "chromium": "141.0.7390.37",
    "playwright": "1.56.1",
    "pdfParse": "1.1.1",
    "pdfjs": "5.4.530"
  },
  "sourceHashes": {
    "backend/.parse-benchmark.cjs": "28879a88f30060c675a49610ab0f04ff3e7446d7b092fa40875ca267780058cc",
    "backend/.parse-benchmark-meta.json": "8ea34ff9006b9e81c0a092c050cb8151a142be600fdcb40038dc2e47e2d86564",
    "backend/src/lib/logger.ts": "b9982b9742f4efd35a6fa9bd985962ea3fb9a77adc4cf57cb8360dd27939e18e",
    "backend/src/services/pdf/pdfjs-document-options.ts": "db15f109120a6889002aa3c340b67bced1cac317a2d12e916a1a6e79d2a4619b",
    "backend/src/services/ai/line-typography.ts": "57b096721b176e3e8985262558773c48a246fcdb1c03a7e5c679d6677a887838",
    "backend/src/services/ai/inline-emphasis.ts": "f6450883764b0db50bf015f4c84a3f85992041d387729c513d55a19f4b043066",
    "backend/src/services/ai/pdf-emphasis-runs.ts": "a2bf33920c24586ce439f318860ff0c9422c2fe3bcdcedc5daa28d17ea180a0e",
    "backend/src/services/ai/pdf-link-annotations.ts": "ceafec43afdba8503086fb34868cdbfd26aa533625e8b77f724e06ba630e6a77",
    "backend/src/services/ai/pdf-layout-analysis.ts": "c4b5c64be284094d5e63921277bee037adb55bb85ab34832b4f1ae791ab34abb",
    "backend/src/services/ai/pdf-text-extractor.ts": "d3e6ee864cc6090913478b3cdbd69843e4dca9b72d9444d3dbedba5ba3199061",
    "backend/src/platform/ai/capabilities/resume-parse/extractors/pdf-diagnostics.ts": "b0eedb95e19f2ba885b778c58a7acad38b974a496e9da905a13ef522f39dd92d",
    "backend/src/platform/ai/capabilities/resume-parse/extractors/glued-lines.ts": "5efe24f816fd5e0ed3cff4be34b4a31a15ba118456a218ab57ece5447a2e624c",
    "backend/src/platform/ai/capabilities/resume-parse/extractors/section-patterns.ts": "40853ede865891b3ea0437f133bb5825ec7b19a729aae859d1b4d57314fcfcd1",
    "backend/src/platform/ai/capabilities/resume-parse/extractors/spaceless-text.ts": "ce9385894bcb2825a79d446841a89ca5d63b13e982a968420bc928c93c557050",
    "backend/src/platform/ai/capabilities/resume-parse/extractors/pdf.extractor.ts": "4c8388b78201ae1d087c073d5b6a9a8d2d18bec7616bb2f152b5106c0bf231f0",
    "backend/src/scripts/parse-benchmark/fixtures.ts": "747eb52262f4bb62234e66fb31159fe4016fa57abe64cd4fcd87a6953fea4ba5",
    "backend/src/scripts/parse-benchmark/outcomes.ts": "e4b405f9b03b98acedae2e4186312b65ae92768eaa49473ebd44c698fdfd1658",
    "backend/src/scripts/parse-benchmark/run.ts": "fd2adf46b1af5c315e949a2d6187f0b93fb1173d2fb032ef4cad2f6ee171ee32",
    "public/fonts/docx/inter-400.ttf": "1b08e7fc267a5c7e1d614100f604b83e7e8a0be241f0f288faa2b3ac93a683ba",
    "public/fonts/docx/lato-400.ttf": "f43f1c7780d69792278f04b136c934a0298fc66f2e974bac13dd2e53adc52bde"
  },
  "results": [
    {
      "id": "baseline-single-column",
      "hypothesis": "Control. A single-column document in an embedded weight-400 face should round-trip completely. Any loss here invalidates the other fixtures rather than indicting layout.",
      "failureSignal": "control",
      "outcome": "control-passed",
      "expectedTokens": [
        "Dana Whitfield",
        "dana.whitfield@example.com",
        "Seattle, WA",
        "example.com/dana",
        "206",
        "555-0142",
        "Northwind",
        "Cascadia",
        "observability",
        "dispatch",
        "Experience"
      ],
      "expectedOrder": [
        "Summary",
        "Experience",
        "Skills"
      ],
      "rawSubstitutionObserved": false,
      "textRecall": 1,
      "missingTokens": [],
      "contactFieldsIntact": 3,
      "contactFieldsTotal": 3,
      "fusedExamples": [],
      "readingOrderPreserved": true,
      "hasType3Fonts": false,
      "embeddedFonts": [
        "Lato-Regular"
      ],
      "extractedChars": 607
    },
    {
      "id": "contact-run-tight",
      "hypothesis": "Contact fields separated only by whitespace-free inline boxes. The primary extractor concatenates a line's positioned text items without inserting a space at the gap, so four adjacent runs can extract fused into one unsearchable token.",
      "failureSignal": "contact-boundaries",
      "outcome": "reproduced",
      "expectedTokens": [
        "Dana Whitfield",
        "dana.whitfield@example.com",
        "Seattle, WA",
        "example.com/dana",
        "206",
        "555-0142"
      ],
      "expectedOrder": [],
      "rawSubstitutionObserved": false,
      "textRecall": 1,
      "missingTokens": [],
      "contactFieldsIntact": 1,
      "contactFieldsTotal": 3,
      "fusedExamples": [
        "06) 555-0142Seattle, WAexample.com/da",
        "2Seattle, WAexample.com/dana\nEXPERIENCE\nNo"
      ],
      "readingOrderPreserved": null,
      "hasType3Fonts": false,
      "embeddedFonts": [
        "Lato-Regular"
      ],
      "extractedChars": 418
    },
    {
      "id": "synthetic-bold-type3",
      "hypothesis": "A face declared at weight 400 only, rendered at 700. Chromium synthesizes the bold and Skia may write Type 3 glyphs. This fixture asks whether required text is lost; font type alone is not an extraction failure.",
      "failureSignal": "text-recall",
      "outcome": "not-reproduced",
      "expectedTokens": [
        "Dana Whitfield",
        "Northwind",
        "Cascadia",
        "observability",
        "dispatch",
        "Experience"
      ],
      "expectedOrder": [],
      "rawSubstitutionObserved": false,
      "textRecall": 1,
      "missingTokens": [],
      "contactFieldsIntact": 0,
      "contactFieldsTotal": 0,
      "fusedExamples": [],
      "readingOrderPreserved": null,
      "hasType3Fonts": true,
      "embeddedFonts": [
        "Lato-Regular"
      ],
      "extractedChars": 378
    },
    {
      "id": "two-column-sidebar",
      "hypothesis": "A sidebar beside the main column. Extraction follows content order in the PDF, which a float or grid can reorder — interleaving skills into the middle of experience.",
      "failureSignal": "reading-order",
      "outcome": "not-reproduced",
      "expectedTokens": [
        "Dana Whitfield",
        "dana.whitfield@example.com",
        "Seattle, WA",
        "example.com/dana",
        "206",
        "555-0142",
        "Northwind",
        "Cascadia",
        "observability",
        "dispatch",
        "Experience",
        "Kubernetes"
      ],
      "expectedOrder": [
        "Experience",
        "Northwind",
        "Cascadia"
      ],
      "rawSubstitutionObserved": false,
      "textRecall": 1,
      "missingTokens": [],
      "contactFieldsIntact": 3,
      "contactFieldsTotal": 3,
      "fusedExamples": [],
      "readingOrderPreserved": true,
      "hasType3Fonts": false,
      "embeddedFonts": [
        "Lato-Regular"
      ],
      "extractedChars": 474
    },
    {
      "id": "table-layout",
      "hypothesis": "Experience laid out in a table. Table cells serialize by row, so a two-column date/description table can extract with dates detached from their roles.",
      "failureSignal": "reading-order",
      "outcome": "not-assessed",
      "expectedTokens": [
        "Northwind",
        "Cascadia",
        "observability",
        "dispatch",
        "Experience",
        "Mar 2021"
      ],
      "expectedOrder": [],
      "rawSubstitutionObserved": false,
      "textRecall": 1,
      "missingTokens": [],
      "contactFieldsIntact": 0,
      "contactFieldsTotal": 0,
      "fusedExamples": [],
      "readingOrderPreserved": null,
      "hasType3Fonts": false,
      "embeddedFonts": [
        "Lato-Regular"
      ],
      "extractedChars": 238
    },
    {
      "id": "typographic-substitution",
      "hypothesis": "Curly quotes, en dashes, ligatures and a non-breaking hyphen. These extract as different codepoints than typed, so a keyword match on the plain-ASCII form misses.",
      "failureSignal": "unicode-substitution",
      "outcome": "not-reproduced",
      "expectedTokens": [
        "Dana Whitfield",
        "Northwind",
        "workflow",
        "on-call"
      ],
      "expectedOrder": [],
      "rawSubstitutionObserved": false,
      "textRecall": 1,
      "missingTokens": [],
      "contactFieldsIntact": 0,
      "contactFieldsTotal": 0,
      "fusedExamples": [],
      "readingOrderPreserved": null,
      "hasType3Fonts": false,
      "embeddedFonts": [
        "Lato-Regular"
      ],
      "extractedChars": 183
    }
  ],
  "fontMatrix": [
    {
      "face": "system Helvetica (control)",
      "extracted": "PLAIN: +1 (206) 555-0142 / a-b (c) [d] {e} 50% $9.99",
      "roundTripped": true,
      "lostCharacters": []
    },
    {
      "face": "vendored inter-400",
      "extracted": "PLAIN 1 206 5550142 / a-b (c) [d] {e} 50% $9.99",
      "roundTripped": false,
      "lostCharacters": [
        ":",
        "+",
        "(",
        ")",
        "-"
      ]
    },
    {
      "face": "vendored lato-400",
      "extracted": "PLAIN: +1 (206) 555-0142 / a-b (c) [d] {e} 50% $9.99",
      "roundTripped": true,
      "lostCharacters": []
    }
  ]
}