{
  "version": 1,
  "fixtureNote": "Invented HTML processed by the repository reader on 2026-10-28. ok/url are an offline envelope. No hosted request, customer evidence or credit receipt. Expected rules were written from the source before comparing outputs.",
  "cases": [
    {
      "id": "clean-article",
      "html": "<nav>GLOBALNAVMARKER</nav><article><h1>Deployment instructions</h1><p>The deployment procedure starts with a reviewed configuration, checks the selected source, and saves the output for inspection. Keep the original input available, compare each required section, and stop when a needed instruction is missing. This paragraph is invented for a local reader-selection test.</p><p>REQUIREDBODYMARKER</p></article>",
      "expected": {
        "main": true,
        "whole": true
      },
      "contract": {
        "version": 1,
        "expectedUrl": "https://example.com/reader-selection/clean-article",
        "rules": [
          {
            "id": "required-1",
            "kind": "contains",
            "text": "Deployment instructions"
          },
          {
            "id": "required-2",
            "kind": "contains",
            "text": "REQUIREDBODYMARKER"
          },
          {
            "id": "noise-1",
            "kind": "excludes",
            "text": "GLOBALNAVMARKER"
          }
        ]
      },
      "responses": {
        "main": {
          "ok": true,
          "url": "https://example.com/reader-selection/clean-article",
          "title": "Deployment instructions",
          "description": null,
          "author": null,
          "publishedAt": null,
          "siteName": "example.com",
          "image": null,
          "language": null,
          "content": "# Deployment instructions\n\nThe deployment procedure starts with a reviewed configuration, checks the selected source, and saves the output for inspection. Keep the original input available, compare each required section, and stop when a needed instruction is missing. This paragraph is invented for a local reader-selection test.\n\nREQUIREDBODYMARKER",
          "format": "markdown",
          "links": [],
          "stats": {
            "chars": 349,
            "words": 48,
            "estimatedTokens": 88,
            "readingTimeMinutes": 1,
            "extractedVia": "semantic:article",
            "truncated": false
          }
        },
        "whole": {
          "ok": true,
          "url": "https://example.com/reader-selection/clean-article",
          "title": "Deployment instructions",
          "description": null,
          "author": null,
          "publishedAt": null,
          "siteName": "example.com",
          "image": null,
          "language": null,
          "content": "# Deployment instructions\n\nThe deployment procedure starts with a reviewed configuration, checks the selected source, and saves the output for inspection. Keep the original input available, compare each required section, and stop when a needed instruction is missing. This paragraph is invented for a local reader-selection test.\n\nREQUIREDBODYMARKER",
          "format": "markdown",
          "links": [],
          "stats": {
            "chars": 349,
            "words": 48,
            "estimatedTokens": 88,
            "readingTimeMinutes": 1,
            "extractedVia": "whole-page",
            "truncated": false
          }
        }
      }
    },
    {
      "id": "sibling-context",
      "html": "<article><h1>Deployment instructions</h1><p>The deployment procedure starts with a reviewed configuration, checks the selected source, and saves the output for inspection. Keep the original input available, compare each required section, and stop when a needed instruction is missing. This paragraph is invented for a local reader-selection test.</p><p>REQUIREDBODYMARKER</p></article><section><h2>Appendix</h2><p>REQUIREDAPPENDIXMARKER</p></section>",
      "expected": {
        "main": false,
        "whole": true
      },
      "contract": {
        "version": 1,
        "expectedUrl": "https://example.com/reader-selection/sibling-context",
        "rules": [
          {
            "id": "required-1",
            "kind": "contains",
            "text": "REQUIREDBODYMARKER"
          },
          {
            "id": "required-2",
            "kind": "contains",
            "text": "REQUIREDAPPENDIXMARKER"
          },
          {
            "id": "noise-1",
            "kind": "excludes",
            "text": "GLOBALNAVMARKER"
          }
        ]
      },
      "responses": {
        "main": {
          "ok": true,
          "url": "https://example.com/reader-selection/sibling-context",
          "title": "Deployment instructions",
          "description": null,
          "author": null,
          "publishedAt": null,
          "siteName": "example.com",
          "image": null,
          "language": null,
          "content": "# Deployment instructions\n\nThe deployment procedure starts with a reviewed configuration, checks the selected source, and saves the output for inspection. Keep the original input available, compare each required section, and stop when a needed instruction is missing. This paragraph is invented for a local reader-selection test.\n\nREQUIREDBODYMARKER",
          "format": "markdown",
          "links": [],
          "stats": {
            "chars": 349,
            "words": 48,
            "estimatedTokens": 88,
            "readingTimeMinutes": 1,
            "extractedVia": "semantic:article",
            "truncated": false
          }
        },
        "whole": {
          "ok": true,
          "url": "https://example.com/reader-selection/sibling-context",
          "title": "Deployment instructions",
          "description": null,
          "author": null,
          "publishedAt": null,
          "siteName": "example.com",
          "image": null,
          "language": null,
          "content": "# Deployment instructions\n\nThe deployment procedure starts with a reviewed configuration, checks the selected source, and saves the output for inspection. Keep the original input available, compare each required section, and stop when a needed instruction is missing. This paragraph is invented for a local reader-selection test.\n\nREQUIREDBODYMARKER\n\n## Appendix\n\nREQUIREDAPPENDIXMARKER",
          "format": "markdown",
          "links": [],
          "stats": {
            "chars": 386,
            "words": 51,
            "estimatedTokens": 97,
            "readingTimeMinutes": 1,
            "extractedVia": "whole-page",
            "truncated": false
          }
        }
      }
    },
    {
      "id": "class-collision",
      "html": "<article><h1>Deployment instructions</h1><p>The deployment procedure starts with a reviewed configuration, checks the selected source, and saves the output for inspection. Keep the original input available, compare each required section, and stop when a needed instruction is missing. This paragraph is invented for a local reader-selection test.</p><p>REQUIREDBODYMARKER</p><section class=\"related\"><h2>Related deployment constraints</h2><p>REQUIREDCONSTRAINTMARKER</p></section><div class=\"newsletter\">NEWSLETTERNOISEMARKER</div></article>",
      "expected": {
        "main": false,
        "whole": false
      },
      "contract": {
        "version": 1,
        "expectedUrl": "https://example.com/reader-selection/class-collision",
        "rules": [
          {
            "id": "required-1",
            "kind": "contains",
            "text": "REQUIREDBODYMARKER"
          },
          {
            "id": "required-2",
            "kind": "contains",
            "text": "REQUIREDCONSTRAINTMARKER"
          },
          {
            "id": "noise-1",
            "kind": "excludes",
            "text": "NEWSLETTERNOISEMARKER"
          }
        ]
      },
      "responses": {
        "main": {
          "ok": true,
          "url": "https://example.com/reader-selection/class-collision",
          "title": "Deployment instructions",
          "description": null,
          "author": null,
          "publishedAt": null,
          "siteName": "example.com",
          "image": null,
          "language": null,
          "content": "# Deployment instructions\n\nThe deployment procedure starts with a reviewed configuration, checks the selected source, and saves the output for inspection. Keep the original input available, compare each required section, and stop when a needed instruction is missing. This paragraph is invented for a local reader-selection test.\n\nREQUIREDBODYMARKER",
          "format": "markdown",
          "links": [],
          "stats": {
            "chars": 349,
            "words": 48,
            "estimatedTokens": 88,
            "readingTimeMinutes": 1,
            "extractedVia": "semantic:article",
            "truncated": false
          }
        },
        "whole": {
          "ok": true,
          "url": "https://example.com/reader-selection/class-collision",
          "title": "Deployment instructions",
          "description": null,
          "author": null,
          "publishedAt": null,
          "siteName": "example.com",
          "image": null,
          "language": null,
          "content": "# Deployment instructions\n\nThe deployment procedure starts with a reviewed configuration, checks the selected source, and saves the output for inspection. Keep the original input available, compare each required section, and stop when a needed instruction is missing. This paragraph is invented for a local reader-selection test.\n\nREQUIREDBODYMARKER\n\n## Related deployment constraints\n\nREQUIREDCONSTRAINTMARKER\n\nNEWSLETTERNOISEMARKER",
          "format": "markdown",
          "links": [],
          "stats": {
            "chars": 433,
            "words": 54,
            "estimatedTokens": 109,
            "readingTimeMinutes": 1,
            "extractedVia": "whole-page",
            "truncated": false
          }
        }
      }
    },
    {
      "id": "semantic-loss",
      "html": "<article><header><h1>REQUIREDHEADINGMARKER</h1></header><p>The deployment procedure starts with a reviewed configuration, checks the selected source, and saves the output for inspection. Keep the original input available, compare each required section, and stop when a needed instruction is missing. This paragraph is invented for a local reader-selection test.</p><p>REQUIREDBODYMARKER</p><footer><p>REQUIREDATTRIBUTIONMARKER</p></footer></article>",
      "expected": {
        "main": false,
        "whole": false
      },
      "contract": {
        "version": 1,
        "expectedUrl": "https://example.com/reader-selection/semantic-loss",
        "rules": [
          {
            "id": "required-1",
            "kind": "contains",
            "text": "REQUIREDHEADINGMARKER"
          },
          {
            "id": "required-2",
            "kind": "contains",
            "text": "REQUIREDBODYMARKER"
          },
          {
            "id": "required-3",
            "kind": "contains",
            "text": "REQUIREDATTRIBUTIONMARKER"
          },
          {
            "id": "noise-1",
            "kind": "excludes",
            "text": "GLOBALNAVMARKER"
          }
        ]
      },
      "responses": {
        "main": {
          "ok": true,
          "url": "https://example.com/reader-selection/semantic-loss",
          "title": "REQUIREDHEADINGMARKER",
          "description": null,
          "author": null,
          "publishedAt": null,
          "siteName": "example.com",
          "image": null,
          "language": null,
          "content": "The deployment procedure starts with a reviewed configuration, checks the selected source, and saves the output for inspection. Keep the original input available, compare each required section, and stop when a needed instruction is missing. This paragraph is invented for a local reader-selection test.\n\nREQUIREDBODYMARKER",
          "format": "markdown",
          "links": [],
          "stats": {
            "chars": 322,
            "words": 45,
            "estimatedTokens": 81,
            "readingTimeMinutes": 1,
            "extractedVia": "semantic:article",
            "truncated": false
          }
        },
        "whole": {
          "ok": true,
          "url": "https://example.com/reader-selection/semantic-loss",
          "title": "REQUIREDHEADINGMARKER",
          "description": null,
          "author": null,
          "publishedAt": null,
          "siteName": "example.com",
          "image": null,
          "language": null,
          "content": "The deployment procedure starts with a reviewed configuration, checks the selected source, and saves the output for inspection. Keep the original input available, compare each required section, and stop when a needed instruction is missing. This paragraph is invented for a local reader-selection test.\n\nREQUIREDBODYMARKER",
          "format": "markdown",
          "links": [],
          "stats": {
            "chars": 322,
            "words": 45,
            "estimatedTokens": 81,
            "readingTimeMinutes": 1,
            "extractedVia": "whole-page",
            "truncated": false
          }
        }
      }
    }
  ]
}
