{
  "version": 1,
  "provenance": "Invented teaching corpus authored with both extractors on 2026-10-31. Split labels demonstrate a procedure; this is not a blind independent evaluation. Expected records were explicitly authored, not derived from extractor output.",
  "cases": [
    {
      "id": "dev-single",
      "split": "development",
      "reason": "One direct product record",
      "html": "<!doctype html><html><body><main><section class=\"catalog\"><article class=\"product\" data-sku=\"D1\"><h2 class=\"title\">Desk lamp</h2></article></section></main></body></html>",
      "expected": [
        {
          "sku": "D1",
          "title": "Desk lamp"
        }
      ]
    },
    {
      "id": "dev-multiple",
      "split": "development",
      "reason": "Two distinct direct product records",
      "html": "<!doctype html><html><body><main><section class=\"catalog\"><article class=\"product\" data-sku=\"D2\"><h2 class=\"title\">Table</h2></article><article class=\"product\" data-sku=\"D3\"><h2 class=\"title\">Chair</h2></article></section></main></body></html>",
      "expected": [
        {
          "sku": "D2",
          "title": "Table"
        },
        {
          "sku": "D3",
          "title": "Chair"
        }
      ]
    },
    {
      "id": "nested-recommendation",
      "split": "heldout",
      "reason": "Recommendation inside a parent is not a catalog record",
      "html": "<!doctype html><html><body><main><section class=\"catalog\"><article class=\"product\" data-sku=\"H1\"><h2 class=\"title\">Lamp</h2><aside><article class=\"product\" data-sku=\"REC1\"><h2 class=\"title\">Cable</h2></article></aside></article></section></main></body></html>",
      "expected": [
        {
          "sku": "H1",
          "title": "Lamp"
        }
      ]
    },
    {
      "id": "entities-and-space",
      "split": "heldout",
      "reason": "Decode entities and collapse display whitespace",
      "html": "<!doctype html><html><body><main><section class=\"catalog\"><article class=\"product\" data-sku=\"H2\"><h2 class=\"title\">Tea &amp;\n   coffee</h2></article></section></main></body></html>",
      "expected": [
        {
          "sku": "H2",
          "title": "Tea & coffee"
        }
      ]
    },
    {
      "id": "empty-catalog",
      "split": "heldout",
      "reason": "Labeled genuine empty catalog, not a request failure",
      "html": "<!doctype html><html><body><main><section class=\"catalog\"><p class=\"empty\">No products available</p></section></main></body></html>",
      "expected": []
    },
    {
      "id": "outside-promotion",
      "split": "heldout",
      "reason": "Outside promotion must not join catalog records",
      "html": "<!doctype html><html><body><main><section class=\"catalog\"><article class=\"product\" data-sku=\"H3\"><h2 class=\"title\">Book</h2></article></section></main><aside><article class=\"product\" data-sku=\"AD1\"><h2 class=\"title\">Promotion</h2></article></aside></body></html>",
      "expected": [
        {
          "sku": "H3",
          "title": "Book"
        }
      ]
    },
    {
      "id": "title-wrapper",
      "split": "heldout",
      "reason": "A field wrapper breaks a direct-child assumption",
      "html": "<!doctype html><html><body><main><section class=\"catalog\"><article class=\"product\" data-sku=\"H4\"><header><h2 class=\"title\">Notebook</h2></header></article></section></main></body></html>",
      "expected": [
        {
          "sku": "H4",
          "title": "Notebook"
        }
      ]
    },
    {
      "id": "late-renamed-record",
      "split": "heldout",
      "reason": "Sixth record uses a different root class; first five still look correct",
      "html": "<!doctype html><html><body><main><section class=\"catalog\"><article class=\"product\" data-sku=\"L1\"><h2 class=\"title\">Item 1</h2></article><article class=\"product\" data-sku=\"L2\"><h2 class=\"title\">Item 2</h2></article><article class=\"product\" data-sku=\"L3\"><h2 class=\"title\">Item 3</h2></article><article class=\"product\" data-sku=\"L4\"><h2 class=\"title\">Item 4</h2></article><article class=\"product\" data-sku=\"L5\"><h2 class=\"title\">Item 5</h2></article><article class=\"item\" data-sku=\"L6\"><h2 class=\"title\">Item 6</h2></article></section></main></body></html>",
      "expected": [
        {
          "sku": "L1",
          "title": "Item 1"
        },
        {
          "sku": "L2",
          "title": "Item 2"
        },
        {
          "sku": "L3",
          "title": "Item 3"
        },
        {
          "sku": "L4",
          "title": "Item 4"
        },
        {
          "sku": "L5",
          "title": "Item 5"
        },
        {
          "sku": "L6",
          "title": "Item 6"
        }
      ]
    }
  ]
}
