{
  "inputs": {
    "baseline": "<nav>방문 10</nav><main><h2>검사</h2><p>기한은 10월 20일.</p><a href=\"/v1\">자료</a></main>",
    "navigation-only": "<nav>방문 11</nav><main><h2>검사</h2> <p>기한은 10월 20일.</p><a href=\"/v1\">자료</a></main>",
    "deadline-changed": "<nav>방문 11</nav><main><h2>검사</h2> <p>기한은 10월 21일.</p><a href=\"/v1\">자료</a></main>",
    "href-only": "<nav>방문 11</nav><main><h2>검사</h2> <p>기한은 10월 20일.</p><a href=\"/v2\">자료</a></main>"
  },
  "baseline": {
    "text": "검사 기한은 10월 20일. 자료",
    "links": [
      "/v1"
    ],
    "mainCount": 1,
    "comparisonReady": true,
    "holdReasons": []
  },
  "results": [
    {
      "name": "navigation-only",
      "rawEqual": false,
      "comparisonStatus": "compared",
      "textEqual": true,
      "linksEqual": true,
      "extracted": {
        "text": "검사 기한은 10월 20일. 자료",
        "links": [
          "/v1"
        ],
        "mainCount": 1,
        "comparisonReady": true,
        "holdReasons": []
      }
    },
    {
      "name": "deadline-changed",
      "rawEqual": false,
      "comparisonStatus": "compared",
      "textEqual": false,
      "linksEqual": true,
      "extracted": {
        "text": "검사 기한은 10월 21일. 자료",
        "links": [
          "/v1"
        ],
        "mainCount": 1,
        "comparisonReady": true,
        "holdReasons": []
      }
    },
    {
      "name": "href-only",
      "rawEqual": false,
      "comparisonStatus": "compared",
      "textEqual": true,
      "linksEqual": false,
      "extracted": {
        "text": "검사 기한은 10월 20일. 자료",
        "links": [
          "/v2"
        ],
        "mainCount": 1,
        "comparisonReady": true,
        "holdReasons": []
      }
    }
  ],
  "contractCases": [
    {
      "name": "missing-main",
      "inputs": [
        "<div>로그인 안내</div>",
        "<div>로그인 안내</div>"
      ],
      "result": {
        "comparisonStatus": "hold-extraction",
        "textEqual": null,
        "linksEqual": null,
        "before": {
          "text": "",
          "links": [],
          "mainCount": 0,
          "comparisonReady": false,
          "holdReasons": [
            "main-count-must-be-one",
            "empty-main-text"
          ]
        },
        "after": {
          "text": "",
          "links": [],
          "mainCount": 0,
          "comparisonReady": false,
          "holdReasons": [
            "main-count-must-be-one",
            "empty-main-text"
          ]
        }
      }
    },
    {
      "name": "empty-main",
      "inputs": [
        "<main> </main>",
        "<main> </main>"
      ],
      "result": {
        "comparisonStatus": "hold-extraction",
        "textEqual": null,
        "linksEqual": null,
        "before": {
          "text": "",
          "links": [],
          "mainCount": 1,
          "comparisonReady": false,
          "holdReasons": [
            "empty-main-text"
          ]
        },
        "after": {
          "text": "",
          "links": [],
          "mainCount": 1,
          "comparisonReady": false,
          "holdReasons": [
            "empty-main-text"
          ]
        }
      }
    },
    {
      "name": "multiple-main",
      "inputs": [
        "<main>첫째</main><main>둘째</main>",
        "<main>첫째</main><main>둘째</main>"
      ],
      "result": {
        "comparisonStatus": "hold-extraction",
        "textEqual": null,
        "linksEqual": null,
        "before": {
          "text": "첫째 둘째",
          "links": [],
          "mainCount": 2,
          "comparisonReady": false,
          "holdReasons": [
            "main-count-must-be-one"
          ]
        },
        "after": {
          "text": "첫째 둘째",
          "links": [],
          "mainCount": 2,
          "comparisonReady": false,
          "holdReasons": [
            "main-count-must-be-one"
          ]
        }
      }
    },
    {
      "name": "pre-whitespace",
      "inputs": [
        "<main><pre>a  b</pre></main>",
        "<main><pre>a b</pre></main>"
      ],
      "result": {
        "comparisonStatus": "hold-extraction",
        "textEqual": null,
        "linksEqual": null,
        "before": {
          "text": "a b",
          "links": [],
          "mainCount": 1,
          "comparisonReady": false,
          "holdReasons": [
            "verbatim-policy-required"
          ]
        },
        "after": {
          "text": "a b",
          "links": [],
          "mainCount": 1,
          "comparisonReady": false,
          "holdReasons": [
            "verbatim-policy-required"
          ]
        }
      }
    }
  ],
  "comparisonContract": "Exactly one nonempty main; no pre/code without a separate whitespace policy. Failure is hold, never equal. This parser does not reproduce browser DOM correction or prove page identity.",
  "fixtureCreatedOn": "2026-10-15",
  "executedAt": "2026-10-15T03:56:35.070008+00:00",
  "runtime": "3.14.8",
  "synthetic": true
}
