{
  "fixtures": [
    {
      "id": "pdf-hard-wrap-01",
      "label": "Hard line wrapping mid-sentence",
      "category": "hard-line-wrapping",
      "kind": "pipeline",
      "input": "This paragraph was wrapped\nat arbitrary column widths so\ncopied text breaks mid sentence.",
      "pipeline": [
        {
          "op": "identity"
        }
      ],
      "expectStatus": "pass",
      "notes": "Identity baseline: wrapping remains until a human joins lines."
    },
    {
      "id": "pdf-soft-hyphen-02",
      "label": "Soft hyphen at line break",
      "category": "soft-hyphens",
      "kind": "observation",
      "status": "manual-review",
      "summary": "Input contains U+00AD soft hyphens between “exam” and “ple”. Automatic de-hyphenation can destroy real compounds.",
      "notes": "Studio has no dedicated soft-hyphen joiner; treat as manual review.",
      "input": "This is an exam­ple of a soft­hyphen artifact."
    },
    {
      "id": "pdf-header-repeat-03",
      "label": "Repeated running header",
      "category": "headers-footers",
      "kind": "pipeline",
      "input": "Quarterly Report\nBody line one.\nQuarterly Report\nBody line two.",
      "pipeline": [
        {
          "op": "trimText",
          "mode": "lines"
        },
        {
          "op": "removeDuplicateLines",
          "options": {
            "caseSensitive": true,
            "trimLines": true
          }
        }
      ]
    },
    {
      "id": "pdf-page-numbers-04",
      "label": "Standalone page numbers",
      "category": "page-numbers",
      "kind": "observation",
      "status": "manual-review",
      "summary": "Lines that are only digits (12, 13) look like page numbers but could be data. No safe auto-delete without context.",
      "input": "Introduction\n12\nNext section\n13"
    },
    {
      "id": "pdf-excess-spaces-05",
      "label": "Excess horizontal spaces and tabs",
      "category": "excess-spaces",
      "kind": "pipeline",
      "input": "Word1\t\tWord2    Word3 Word4",
      "pipeline": [
        {
          "op": "removeExtraSpaces"
        }
      ]
    },
    {
      "id": "pdf-blank-lines-06",
      "label": "Excessive blank lines",
      "category": "blank-lines",
      "kind": "pipeline",
      "input": "Paragraph A.\n\n\n\nParagraph B.",
      "pipeline": [
        {
          "op": "removeEmptyLines",
          "mode": "collapse"
        }
      ]
    },
    {
      "id": "pdf-real-hyphen-07",
      "label": "Legitimate hyphenated word",
      "category": "hyphenated-words",
      "kind": "pipeline",
      "input": "well-known example\nstate-of-the-art model",
      "pipeline": [
        {
          "op": "trimText",
          "mode": "lines"
        },
        {
          "op": "removeExtraSpaces"
        }
      ]
    },
    {
      "id": "pdf-multicolumn-08",
      "label": "Multi-column copy order",
      "category": "multi-column",
      "kind": "observation",
      "status": "limitation",
      "summary": "Copied reading order interleaves columns (Left1 Right1 Left2 Right2). No transform on this site can recover layout intent.",
      "input": "Alpha col\tBeta col\nA1\tB1\nA2\tB2"
    },
    {
      "id": "pdf-bullets-09",
      "label": "Bullet characters",
      "category": "bullets",
      "kind": "pipeline",
      "input": "• First item\n• Second item\n· Third item",
      "pipeline": [
        {
          "op": "trimText",
          "mode": "lines"
        }
      ]
    },
    {
      "id": "pdf-unicode-punct-10",
      "label": "Unicode punctuation",
      "category": "unicode-punctuation",
      "kind": "pipeline",
      "input": "“Smart quotes” and an em—dash with … ellipsis.",
      "pipeline": [
        {
          "op": "identity"
        }
      ]
    },
    {
      "id": "pdf-joined-words-11",
      "label": "Words joined incorrectly",
      "category": "joined-words",
      "kind": "observation",
      "status": "limitation",
      "summary": "Missing spaces (thequick brown) cannot be repaired reliably without a dictionary and language model.",
      "input": "thequick brownfox jumps"
    },
    {
      "id": "pdf-paragraph-bounds-12",
      "label": "Paragraph boundaries after wrap cleanup",
      "category": "paragraph-boundaries",
      "kind": "pipeline",
      "input": "  First paragraph line.  \n\n\n  Second paragraph line.  ",
      "pipeline": [
        {
          "op": "trimText",
          "mode": "lines"
        },
        {
          "op": "removeExtraSpaces"
        },
        {
          "op": "removeEmptyLines",
          "mode": "collapse"
        }
      ]
    }
  ]
}
