{
  "schemaVersion": 1,
  "baseUrl": "https://unify.fwdslsh.dev/",
  "pages": [
    {
      "path": "/all-pages/",
      "url": "https://unify.fwdslsh.dev/all-pages/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "All pages · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "Every page on the site in one searchable list, grouped by section."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          },
          {
            "property": "og:title",
            "content": "All pages"
          },
          {
            "property": "og:description",
            "content": "Every page on the site in one searchable list, grouped by section."
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "preload",
            "href": "/assets/unify/catalog.json",
            "as": "fetch",
            "crossorigin": ""
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/all-pages/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": null,
            "text": "All pages"
          }
        ]
      }
    },
    {
      "path": "/docs/authoring-rules/",
      "url": "https://unify.fwdslsh.dev/docs/authoring-rules/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "Authoring a unify site — the complete rules · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "unify composes plain HTML at build time."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/authoring-rules/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "authoring-a-unify-site--the-complete-rules",
            "text": "Authoring a unify site — the complete rules"
          },
          {
            "level": 2,
            "id": "files",
            "text": "Files"
          },
          {
            "level": 2,
            "id": "include--reuse-a-fragment",
            "text": "Include — reuse a fragment"
          },
          {
            "level": 2,
            "id": "layout--chrome-around-a-page",
            "text": "Layout — chrome around a page"
          },
          {
            "level": 2,
            "id": "merging-a-page-into-its-layout",
            "text": "Merging a page into its layout"
          },
          {
            "level": 2,
            "id": "markdown",
            "text": "Markdown"
          },
          {
            "level": 2,
            "id": "styles-scripts-finishing",
            "text": "Styles, scripts, finishing"
          }
        ]
      }
    },
    {
      "path": "/docs/cicd-workflows/",
      "url": "https://unify.fwdslsh.dev/docs/cicd-workflows/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "CI/CD workflows · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "What each of unify's GitHub Actions workflows runs, and what a green or red job is allowed to mean."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/cicd-workflows/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "cicd-workflows",
            "text": "CI/CD workflows"
          },
          {
            "level": 2,
            "id": "testyml--seven-jobs",
            "text": "test.yml — seven jobs"
          },
          {
            "level": 3,
            "id": "release-signal--runtime-coverage-against-the-phase-baseline",
            "text": "release-signal — runtime coverage against the phase baseline"
          },
          {
            "level": 3,
            "id": "module-graph--gate-g8",
            "text": "module-graph — gate G8"
          },
          {
            "level": 3,
            "id": "suite-hygiene--gate-g9",
            "text": "suite-hygiene — gate G9"
          },
          {
            "level": 3,
            "id": "traceability-static--the-phase-gate",
            "text": "traceability-static — the phase gate"
          },
          {
            "level": 3,
            "id": "examples--gate-g13-dependency-free-examples",
            "text": "examples — gate G13 (dependency-free examples)"
          },
          {
            "level": 3,
            "id": "examples-npm--gate-g13-the-half-that-needs-a-package-install",
            "text": "examples-npm — gate G13, the half that needs a package install"
          },
          {
            "level": 3,
            "id": "release-notes--gate-g14",
            "text": "release-notes — gate G14"
          },
          {
            "level": 2,
            "id": "coverage-is-reported-and-gates-nothing",
            "text": "Coverage is reported, and gates nothing"
          },
          {
            "level": 2,
            "id": "the-legacy-suite-is-gone",
            "text": "The legacy suite is gone"
          },
          {
            "level": 2,
            "id": "releaseyml",
            "text": "release.yml"
          },
          {
            "level": 2,
            "id": "deploy-docsyml",
            "text": "deploy-docs.yml"
          }
        ]
      }
    },
    {
      "path": "/docs/cli-reference/",
      "url": "https://unify.fwdslsh.dev/docs/cli-reference/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "unify CLI reference · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "Every unify command, option and exit code, and the unify.yaml keys that save them."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/cli-reference/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "unify-cli-reference",
            "text": "unify CLI reference"
          },
          {
            "level": 2,
            "id": "commands",
            "text": "Commands"
          },
          {
            "level": 3,
            "id": "unify-build-the-default--unify-alone-does-the-same",
            "text": "unify build (the default — unify alone does the same)"
          },
          {
            "level": 3,
            "id": "unify-audit",
            "text": "unify audit"
          },
          {
            "level": 3,
            "id": "unify-dev",
            "text": "unify dev"
          },
          {
            "level": 3,
            "id": "unify-watch",
            "text": "unify watch"
          },
          {
            "level": 3,
            "id": "unify-init-template",
            "text": "unify init [template]"
          },
          {
            "level": 3,
            "id": "unify-update-template",
            "text": "unify update [template]"
          },
          {
            "level": 2,
            "id": "options",
            "text": "Options"
          },
          {
            "level": 3,
            "id": "s---source-dir---o---output-dir",
            "text": "-s, --source <dir> / -o, --output <dir>"
          },
          {
            "level": 3,
            "id": "clean",
            "text": "--clean"
          },
          {
            "level": 3,
            "id": "exclude-glob-repeatable",
            "text": "--exclude <glob> (repeatable)"
          },
          {
            "level": 3,
            "id": "pretty-urls",
            "text": "--pretty-urls"
          },
          {
            "level": 3,
            "id": "base-url-url",
            "text": "--base-url <url>"
          },
          {
            "level": 3,
            "id": "canonical-auto----canonical-none",
            "text": "--canonical auto / --canonical none"
          },
          {
            "level": 2,
            "id": "structured-data-schema",
            "text": "Structured data (schema:)"
          },
          {
            "level": 2,
            "id": "feeds-feedxml",
            "text": "Feeds (feed.xml)"
          },
          {
            "level": 2,
            "id": "catalog-catalogjson",
            "text": "Catalog (catalog.json)"
          },
          {
            "level": 2,
            "id": "search-corpus-search-corpusjson",
            "text": "Search corpus (search-corpus.json)"
          },
          {
            "level": 3,
            "id": "generate-path",
            "text": "--generate <path>"
          },
          {
            "level": 4,
            "id": "source-inventory",
            "text": "--source-inventory"
          },
          {
            "level": 3,
            "id": "dry-run",
            "text": "--dry-run"
          },
          {
            "level": 3,
            "id": "extends-source",
            "text": "--extends <source>"
          },
          {
            "level": 3,
            "id": "template-source-init-and-update",
            "text": "--template <source> (init and update)"
          },
          {
            "level": 3,
            "id": "y---yes-update",
            "text": "-y, --yes (update)"
          },
          {
            "level": 3,
            "id": "keep-path-update-repeatable",
            "text": "--keep <path> (update, repeatable)"
          },
          {
            "level": 3,
            "id": "audit-build-and-init",
            "text": "--audit (build and init)"
          },
          {
            "level": 3,
            "id": "save-config",
            "text": "--save-config"
          },
          {
            "level": 3,
            "id": "strict",
            "text": "--strict"
          },
          {
            "level": 2,
            "id": "robotstxt",
            "text": "robots.txt"
          },
          {
            "level": 2,
            "id": "exit-codes",
            "text": "Exit codes"
          },
          {
            "level": 2,
            "id": "diagnostics",
            "text": "Diagnostics"
          },
          {
            "level": 2,
            "id": "unifyyaml",
            "text": "unify.yaml"
          }
        ]
      }
    },
    {
      "path": "/docs/conformance-spec/",
      "url": "https://unify.fwdslsh.dev/docs/conformance-spec/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "unify — Conformance Specification · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "The implementer-grade reference: unify's exact behavior rule by rule, with every worked example a test fixture."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/conformance-spec/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "unify--conformance-specification",
            "text": "unify — Conformance Specification"
          },
          {
            "level": 2,
            "id": "1-definitions",
            "text": "1. Definitions"
          },
          {
            "level": 2,
            "id": "2-build-pipeline-order-is-normative",
            "text": "2. Build pipeline (order is normative)"
          },
          {
            "level": 2,
            "id": "3-output-text-rules-the-splice-model",
            "text": "3. Output text rules (the splice model)"
          },
          {
            "level": 2,
            "id": "4-file-classification-exclusion-and-copying",
            "text": "4. File classification, exclusion, and copying"
          },
          {
            "level": 3,
            "id": "41-exclusion-globs",
            "text": "4.1 Exclusion globs"
          },
          {
            "level": 3,
            "id": "42-the-underscore-guard-problem",
            "text": "4.2 The underscore guard (problem)"
          },
          {
            "level": 3,
            "id": "43-never-shipped-list",
            "text": "4.3 Never-shipped list"
          },
          {
            "level": 3,
            "id": "44-mirror-copy-and-symlinks",
            "text": "4.4 Mirror copy and symlinks"
          },
          {
            "level": 3,
            "id": "45-the-project-root",
            "text": "4.5 The project root"
          },
          {
            "level": 2,
            "id": "5-includes",
            "text": "5. Includes"
          },
          {
            "level": 3,
            "id": "51-resolution-algorithm",
            "text": "5.1 Resolution algorithm"
          },
          {
            "level": 3,
            "id": "52-fixture--nested-include-with-relative-resolution",
            "text": "5.2 Fixture — nested include with relative resolution"
          },
          {
            "level": 2,
            "id": "6-layout-resolution",
            "text": "6. Layout resolution"
          },
          {
            "level": 3,
            "id": "61-selection-first-match-wins",
            "text": "6.1 Selection (first match wins)"
          },
          {
            "level": 3,
            "id": "62-no-chaining",
            "text": "6.2 No chaining"
          },
          {
            "level": 3,
            "id": "63-misplacement-and-migration-problems",
            "text": "6.3 Misplacement and migration (problems)"
          },
          {
            "level": 3,
            "id": "64-consumed-attributes",
            "text": "6.4 Consumed attributes"
          },
          {
            "level": 2,
            "id": "7-composition-the-merge",
            "text": "7. Composition: the merge"
          },
          {
            "level": 3,
            "id": "71-sink-detection",
            "text": "7.1 Sink detection"
          },
          {
            "level": 3,
            "id": "72-preparing-cs-content",
            "text": "7.2 Preparing C's content"
          },
          {
            "level": 3,
            "id": "73-filling",
            "text": "7.3 Filling"
          },
          {
            "level": 3,
            "id": "74-routing-default-content",
            "text": "7.4 Routing default content"
          },
          {
            "level": 3,
            "id": "75-sink-less-layouts",
            "text": "7.5 Sink-less layouts"
          },
          {
            "level": 3,
            "id": "76-stray-chrome-and-the-content-loss-law",
            "text": "7.6 Stray chrome, and the content-loss law"
          },
          {
            "level": 3,
            "id": "77-fixtures",
            "text": "7.7 Fixtures"
          },
          {
            "level": 4,
            "id": "c1--golden-path-main-default-with-unwrap",
            "text": "C1 — golden path: <main> default with unwrap"
          },
          {
            "level": 4,
            "id": "c2--named-slot-replace-the-element",
            "text": "C2 — named slot: replace the element"
          },
          {
            "level": 4,
            "id": "c3--unfilled-slot-renders-its-fallback",
            "text": "C3 — unfilled slot renders its fallback"
          },
          {
            "level": 4,
            "id": "c4--multiple-fills-one-name-page-order",
            "text": "C4 — multiple fills, one name, page order"
          },
          {
            "level": 4,
            "id": "c5--fill-to-a-slot-that-doesnt-exist",
            "text": "C5 — fill to a slot that doesn't exist"
          },
          {
            "level": 4,
            "id": "c6--bare-slot-inside-main-pinning-without-a-rule",
            "text": "C6 — bare slot inside <main>: pinning without a rule"
          },
          {
            "level": 4,
            "id": "c7--a-layout-that-declares-data-layout-is-a-problem",
            "text": "C7 — a layout that declares data-layout is a problem"
          },
          {
            "level": 4,
            "id": "c8--sink-less-layout-head-only-passthrough",
            "text": "C8 — sink-less layout: head-only passthrough"
          },
          {
            "level": 4,
            "id": "c9--slots-inside-template-are-never-unifys",
            "text": "C9 — slots inside <template> are never unify's"
          },
          {
            "level": 2,
            "id": "8-head-merge",
            "text": "8. Head merge"
          },
          {
            "level": 3,
            "id": "81-fixture--the-whole-table-at-once",
            "text": "8.1 Fixture — the whole table at once"
          },
          {
            "level": 2,
            "id": "9-root-attributes",
            "text": "9. Root attributes"
          },
          {
            "level": 2,
            "id": "10-markdown",
            "text": "10. Markdown"
          },
          {
            "level": 3,
            "id": "101-conversion",
            "text": "10.1 Conversion"
          },
          {
            "level": 3,
            "id": "102-frontmatter",
            "text": "10.2 Frontmatter"
          },
          {
            "level": 3,
            "id": "103-title-fallback",
            "text": "10.3 Title fallback"
          },
          {
            "level": 3,
            "id": "104-heading-ids",
            "text": "10.4 Heading ids"
          },
          {
            "level": 3,
            "id": "105-two-hard-errors",
            "text": "10.5 Two hard errors"
          },
          {
            "level": 3,
            "id": "106-fixture--markdown-end-to-end",
            "text": "10.6 Fixture — Markdown end to end"
          },
          {
            "level": 3,
            "id": "107-the-layout-less-shell",
            "text": "10.7 The layout-less shell"
          },
          {
            "level": 2,
            "id": "11-urls",
            "text": "11. URLs"
          },
          {
            "level": 3,
            "id": "111-provenance-rewriting",
            "text": "11.1 Provenance rewriting"
          },
          {
            "level": 3,
            "id": "111b-links-by-source-path",
            "text": "11.1b Links by source path"
          },
          {
            "level": 3,
            "id": "112---pretty-urls",
            "text": "11.2 --pretty-urls"
          },
          {
            "level": 3,
            "id": "113---base-url",
            "text": "11.3 --base-url"
          },
          {
            "level": 2,
            "id": "12-the-reference-check-post-build-publish-blocking",
            "text": "12. The reference check (post-build, publish-blocking)"
          },
          {
            "level": 2,
            "id": "13-output-paths-and-collisions",
            "text": "13. Output paths and collisions"
          },
          {
            "level": 2,
            "id": "14-diagnostics",
            "text": "14. Diagnostics"
          },
          {
            "level": 3,
            "id": "141-contract",
            "text": "14.1 Contract"
          },
          {
            "level": 3,
            "id": "142-problems-the-closed-list",
            "text": "14.2 Problems (the closed list)"
          },
          {
            "level": 3,
            "id": "143-advisories-the-closed-catalogue--capped-at-twelve-at-the-cap-adding-one-means-removing-one",
            "text": "14.3 Advisories (the closed catalogue — capped at twelve; at the cap, adding one means removing one)"
          },
          {
            "level": 2,
            "id": "15-transactional-publish",
            "text": "15. Transactional publish"
          },
          {
            "level": 2,
            "id": "16-watch-contract-dev-and-error-pages",
            "text": "16. Watch contract, dev, and error pages"
          },
          {
            "level": 2,
            "id": "17---dry-run-report",
            "text": "17. --dry-run report"
          },
          {
            "level": 2,
            "id": "18-unifyyaml",
            "text": "18. unify.yaml"
          },
          {
            "level": 2,
            "id": "19-scaffold-contract-unify-init",
            "text": "19. Scaffold contract (unify init)"
          },
          {
            "level": 3,
            "id": "191-the-primitive-set",
            "text": "19.1 The primitive set"
          },
          {
            "level": 3,
            "id": "192-the-discovery-set",
            "text": "19.2 The discovery set"
          },
          {
            "level": 3,
            "id": "193-the-two-guarantees",
            "text": "19.3 The two guarantees"
          },
          {
            "level": 3,
            "id": "194-files-outside-site",
            "text": "19.4 Files outside site/"
          },
          {
            "level": 3,
            "id": "195-a-template-file-may-be-bytes",
            "text": "19.5 A template file may be bytes"
          },
          {
            "level": 3,
            "id": "196-the-blog-templates-generator-seam",
            "text": "19.6 The blog template's generator seam"
          },
          {
            "level": 3,
            "id": "197-what-a-template-must-not-do",
            "text": "19.7 What a template must not do"
          },
          {
            "level": 3,
            "id": "198-the-docs-templates-all-pages-starter",
            "text": "19.8 The docs template's \"All pages\" starter"
          },
          {
            "level": 3,
            "id": "199-template-sources",
            "text": "19.9 Template sources"
          },
          {
            "level": 3,
            "id": "1910-the-template-record-and-unify-update",
            "text": "19.10 The template record and unify update"
          },
          {
            "level": 3,
            "id": "1911-template-structure-tooling-in-place-examples-to-copy",
            "text": "19.11 Template structure: tooling in place, examples to copy"
          },
          {
            "level": 2,
            "id": "20-the-final-document-model",
            "text": "20. The final document model"
          },
          {
            "level": 3,
            "id": "201-membership",
            "text": "20.1 Membership"
          },
          {
            "level": 3,
            "id": "202-extraction-source",
            "text": "20.2 Extraction source"
          },
          {
            "level": 3,
            "id": "203-the-documentsnapshot-shape-and-normalization",
            "text": "20.3 The DocumentSnapshot: shape and normalization"
          },
          {
            "level": 3,
            "id": "204-the-builddocument-envelope-and-the-selector-layer",
            "text": "20.4 The BuildDocument envelope and the selector layer"
          },
          {
            "level": 3,
            "id": "205-public-urls",
            "text": "20.5 Public URLs"
          },
          {
            "level": 3,
            "id": "206-robots-directives",
            "text": "20.6 Robots directives"
          },
          {
            "level": 3,
            "id": "207-visible-main-text",
            "text": "20.7 Visible main text"
          },
          {
            "level": 3,
            "id": "208-structured-data",
            "text": "20.8 Structured data"
          },
          {
            "level": 3,
            "id": "209-the-internal-link-graph",
            "text": "20.9 The internal link graph"
          },
          {
            "level": 3,
            "id": "2010-dates-raw-and-iso",
            "text": "20.10 Dates: raw and iso"
          },
          {
            "level": 3,
            "id": "2011-meta-refresh",
            "text": "20.11 Meta refresh"
          },
          {
            "level": 2,
            "id": "21-sitemap-generation",
            "text": "21. Sitemap generation"
          },
          {
            "level": 3,
            "id": "211-activation",
            "text": "21.1 Activation"
          },
          {
            "level": 3,
            "id": "212-membership",
            "text": "21.2 Membership"
          },
          {
            "level": 3,
            "id": "213-entry-contents",
            "text": "21.3 Entry contents"
          },
          {
            "level": 3,
            "id": "214-serialization-and-protocol-limits",
            "text": "21.4 Serialization and protocol limits"
          },
          {
            "level": 3,
            "id": "215-authored-sitemaps-and-generated-path-collisions",
            "text": "21.5 Authored sitemaps and generated-path collisions"
          },
          {
            "level": 3,
            "id": "216-loc-verification",
            "text": "21.6 <loc> verification"
          },
          {
            "level": 2,
            "id": "22-canonical-completion",
            "text": "22. Canonical completion"
          },
          {
            "level": 3,
            "id": "221-activation",
            "text": "22.1 Activation"
          },
          {
            "level": 3,
            "id": "222-what-is-added-and-where",
            "text": "22.2 What is added, and where"
          },
          {
            "level": 3,
            "id": "223-authored-canonicals-always-win",
            "text": "22.3 Authored canonicals always win"
          },
          {
            "level": 3,
            "id": "224-membership-is-212s-unchanged",
            "text": "22.4 Membership is §21.2's, unchanged"
          },
          {
            "level": 3,
            "id": "225-what-this-section-reports-and-what-it-deliberately-does-not",
            "text": "22.5 What this section reports, and what it deliberately does not"
          },
          {
            "level": 2,
            "id": "23-robots-consistency",
            "text": "23. Robots consistency"
          },
          {
            "level": 3,
            "id": "231-scope",
            "text": "23.1 Scope"
          },
          {
            "level": 3,
            "id": "232-records",
            "text": "23.2 Records"
          },
          {
            "level": 3,
            "id": "233-sitemap-is-a-reference",
            "text": "23.3 Sitemap: is a reference"
          },
          {
            "level": 3,
            "id": "234-what-is-deliberately-not-checked",
            "text": "23.4 What is deliberately not checked"
          },
          {
            "level": 2,
            "id": "24-unify-audit--evaluation",
            "text": "24. unify audit — evaluation"
          },
          {
            "level": 3,
            "id": "241-what-the-command-runs",
            "text": "24.1 What the command runs"
          },
          {
            "level": 3,
            "id": "242-read-only",
            "text": "24.2 Read-only"
          },
          {
            "level": 3,
            "id": "243-findings-are-not-diagnostics",
            "text": "24.3 Findings are not diagnostics"
          },
          {
            "level": 3,
            "id": "244-the-catalogue",
            "text": "24.4 The catalogue"
          },
          {
            "level": 3,
            "id": "245-the-report",
            "text": "24.5 The report"
          },
          {
            "level": 3,
            "id": "246-exit-codes",
            "text": "24.6 Exit codes"
          },
          {
            "level": 3,
            "id": "247-what-build-does-with-all-of-this",
            "text": "24.7 What build does with all of this"
          },
          {
            "level": 3,
            "id": "248-build---audit--one-run-audited-then-published",
            "text": "24.8 build --audit — one run, audited, then published"
          },
          {
            "level": 2,
            "id": "25-final-output-verification-the-routing-map",
            "text": "25. Final-output verification: the routing map"
          },
          {
            "level": 3,
            "id": "251-the-map",
            "text": "25.1 The map"
          },
          {
            "level": 3,
            "id": "252-why-fragments-and-duplicate-ids-are-findings-not-reference-check-extensions",
            "text": "25.2 Why fragments and duplicate IDs are findings, not reference-check extensions"
          },
          {
            "level": 3,
            "id": "253-what-635-asks-for-that-is-deliberately-not-done",
            "text": "25.3 What §6.3.5 asks for that is deliberately not done"
          },
          {
            "level": 2,
            "id": "26-structured-data-validation-and-bounded-generation",
            "text": "26. Structured data: validation and bounded generation"
          },
          {
            "level": 3,
            "id": "261-what-already-owns-which-half",
            "text": "26.1 What already owns which half"
          },
          {
            "level": 3,
            "id": "262-reading-a-block-the-subject-object",
            "text": "26.2 Reading a block: the subject object"
          },
          {
            "level": 3,
            "id": "263-validation-findings",
            "text": "26.3 Validation findings"
          },
          {
            "level": 3,
            "id": "264-generation-the-declaration",
            "text": "26.4 Generation: the declaration"
          },
          {
            "level": 3,
            "id": "265-generation-activation",
            "text": "26.5 Generation: activation"
          },
          {
            "level": 3,
            "id": "266-what-is-generated",
            "text": "26.6 What is generated"
          },
          {
            "level": 3,
            "id": "267-ordering-and-what-checks-the-result",
            "text": "26.7 Ordering, and what checks the result"
          },
          {
            "level": 3,
            "id": "268-what-is-never-generated",
            "text": "26.8 What is never generated"
          },
          {
            "level": 2,
            "id": "27-the-local-audit-view-unify",
            "text": "27. The local audit view (/_unify/)"
          },
          {
            "level": 3,
            "id": "271-it-is-served-never-published",
            "text": "27.1 It is served, never published"
          },
          {
            "level": 3,
            "id": "272-the-path-is-reserved-by-a-rule-that-already-exists",
            "text": "27.2 The path is reserved by a rule that already exists"
          },
          {
            "level": 3,
            "id": "273-what-it-shows",
            "text": "27.3 What it shows"
          },
          {
            "level": 3,
            "id": "274-it-follows-the-rebuild",
            "text": "27.4 It follows the rebuild"
          },
          {
            "level": 3,
            "id": "275-what-it-is-not",
            "text": "27.5 What it is not"
          },
          {
            "level": 3,
            "id": "276-the-page-map-unifypagesjson",
            "text": "27.6 The page map (/_unify/pages.json)"
          },
          {
            "level": 3,
            "id": "277-the-source-preview-unifypreviewsource-path",
            "text": "27.7 The source preview (/_unify/preview/<source path>)"
          },
          {
            "level": 3,
            "id": "278-the-chrome",
            "text": "27.8 The chrome"
          },
          {
            "level": 2,
            "id": "28-counter-prior-frontmatter",
            "text": "28. Counter-prior frontmatter"
          },
          {
            "level": 3,
            "id": "281-the-three-that-are-problems",
            "text": "28.1 The three that are problems"
          },
          {
            "level": 3,
            "id": "282-tags-and-categories-ordinary-metadata-not-a-reservation",
            "text": "28.2 tags and categories: ordinary metadata, not a reservation"
          },
          {
            "level": 3,
            "id": "283-what-stays-exactly-as-it-was",
            "text": "28.3 What stays exactly as it was"
          },
          {
            "level": 2,
            "id": "29-feed-generation",
            "text": "29. Feed generation"
          },
          {
            "level": 3,
            "id": "291-activation-and-why-there-is-no-collection",
            "text": "29.1 Activation, and why there is no collection"
          },
          {
            "level": 3,
            "id": "292-atom-and-why-not-rss",
            "text": "29.2 Atom, and why not RSS"
          },
          {
            "level": 3,
            "id": "293-an-entry-needs-an-instant-and-a-date-is-not-one",
            "text": "29.3 An entry needs an instant, and a date is not one"
          },
          {
            "level": 3,
            "id": "294-membership",
            "text": "29.4 Membership"
          },
          {
            "level": 3,
            "id": "295-the-document",
            "text": "29.5 The document"
          },
          {
            "level": 3,
            "id": "296---feed-full",
            "text": "29.6 --feed-full"
          },
          {
            "level": 3,
            "id": "297-references-collisions-and-the-report",
            "text": "29.7 References, collisions, and the report"
          },
          {
            "level": 2,
            "id": "30-the-catalog-and-the-search-corpus",
            "text": "30. The catalog and the search corpus"
          },
          {
            "level": 3,
            "id": "301-activation-output-paths-and-independence",
            "text": "30.1 Activation, output paths, and independence"
          },
          {
            "level": 3,
            "id": "302-the-catalog-schema",
            "text": "30.2 The catalog schema"
          },
          {
            "level": 3,
            "id": "303-the-search-corpus-schema",
            "text": "30.3 The search corpus schema"
          },
          {
            "level": 3,
            "id": "304-shared-membership",
            "text": "30.4 Shared membership"
          },
          {
            "level": 3,
            "id": "305-text-folding",
            "text": "30.5 Text folding"
          },
          {
            "level": 3,
            "id": "306-authored-files-collisions-and-publish",
            "text": "30.6 Authored files, collisions, and publish"
          },
          {
            "level": 3,
            "id": "307-determinism-and-versioning",
            "text": "30.7 Determinism and versioning"
          },
          {
            "level": 2,
            "id": "31-machine-readable-and-networked-evaluation",
            "text": "31. Machine-readable and networked evaluation"
          },
          {
            "level": 3,
            "id": "311-unify-audit---format-json",
            "text": "31.1 unify audit --format json"
          },
          {
            "level": 3,
            "id": "312-the-fingerprint",
            "text": "31.2 The fingerprint"
          },
          {
            "level": 3,
            "id": "313-unify-audit---external",
            "text": "31.3 unify audit --external"
          },
          {
            "level": 3,
            "id": "314-sarif",
            "text": "31.4 SARIF"
          },
          {
            "level": 2,
            "id": "32-slotted-includes",
            "text": "32. Slotted includes"
          },
          {
            "level": 3,
            "id": "321-the-two-kinds-of-include",
            "text": "32.1 The two kinds of include"
          },
          {
            "level": 3,
            "id": "322-the-target-must-be-a-fragment-that-declares-slots",
            "text": "32.2 The target must be a fragment that declares slots"
          },
          {
            "level": 3,
            "id": "323-the-merge-is-7s-with-two-subtractions",
            "text": "32.3 The merge is §7's, with two subtractions"
          },
          {
            "level": 3,
            "id": "324-one-fragment-both-roles",
            "text": "32.4 One fragment, both roles"
          },
          {
            "level": 3,
            "id": "325-fill-scope-is-lexical",
            "text": "32.5 Fill scope is lexical"
          },
          {
            "level": 3,
            "id": "326-order-and-what-this-changes-about-2",
            "text": "32.6 Order, and what this changes about §2"
          },
          {
            "level": 3,
            "id": "327-what-this-is-not-and-the-condition-on-shipping-it",
            "text": "32.7 What this is not, and the condition on shipping it"
          },
          {
            "level": 2,
            "id": "33---generate-path",
            "text": "33. --generate <path>"
          },
          {
            "level": 3,
            "id": "331-what-it-is-and-what-it-deliberately-is-not",
            "text": "33.1 What it is, and what it deliberately is not"
          },
          {
            "level": 3,
            "id": "332-the-contract-entire",
            "text": "33.2 The contract, entire"
          },
          {
            "level": 3,
            "id": "333-the-overlay",
            "text": "33.3 The overlay"
          },
          {
            "level": 3,
            "id": "334-collisions-between-the-two-trees",
            "text": "33.4 Collisions between the two trees"
          },
          {
            "level": 3,
            "id": "335-ordering",
            "text": "33.5 Ordering"
          },
          {
            "level": 3,
            "id": "336-the-boundary-stated-because-it-cannot-be-enforced",
            "text": "33.6 The boundary, stated because it cannot be enforced"
          },
          {
            "level": 3,
            "id": "337-the-source-inventory---source-inventory",
            "text": "33.7 The source inventory (--source-inventory)"
          },
          {
            "level": 2,
            "id": "34-extends-building-on-a-template-without-copying-it",
            "text": "34. extends: building on a template without copying it"
          },
          {
            "level": 3,
            "id": "341-the-option",
            "text": "34.1 The option"
          },
          {
            "level": 3,
            "id": "342-the-layer",
            "text": "34.2 The layer"
          },
          {
            "level": 3,
            "id": "343-fetching-and-the-cache",
            "text": "34.3 Fetching, and the cache"
          },
          {
            "level": 3,
            "id": "344-naming",
            "text": "34.4 Naming"
          }
        ]
      }
    },
    {
      "path": "/docs/docker-usage/",
      "url": "https://unify.fwdslsh.dev/docs/docker-usage/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "Docker Usage Guide · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "The unify container image: what it contains, and how to build a site with it."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/docker-usage/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "docker-usage-guide",
            "text": "Docker Usage Guide"
          },
          {
            "level": 2,
            "id": "the-image",
            "text": "The image"
          },
          {
            "level": 2,
            "id": "usage",
            "text": "Usage"
          },
          {
            "level": 3,
            "id": "build-a-site",
            "text": "Build a site"
          },
          {
            "level": 3,
            "id": "lint-in-ci",
            "text": "Lint in CI"
          },
          {
            "level": 3,
            "id": "scaffold-a-new-site",
            "text": "Scaffold a new site"
          },
          {
            "level": 3,
            "id": "watch",
            "text": "Watch"
          },
          {
            "level": 3,
            "id": "about-unify-dev-in-a-container",
            "text": "About unify dev in a container"
          },
          {
            "level": 2,
            "id": "docker-compose",
            "text": "Docker Compose"
          },
          {
            "level": 2,
            "id": "notes",
            "text": "Notes"
          },
          {
            "level": 2,
            "id": "troubleshooting",
            "text": "Troubleshooting"
          }
        ]
      }
    },
    {
      "path": "/docs/getting-started/",
      "url": "https://unify.fwdslsh.dev/docs/getting-started/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "Getting started with unify · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "The unify tutorial: install, scaffold a site, compose pages with includes, layouts and slots, and publish."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/getting-started/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "getting-started-with-unify",
            "text": "Getting started with unify"
          },
          {
            "level": 2,
            "id": "install",
            "text": "Install"
          },
          {
            "level": 2,
            "id": "two-commands",
            "text": "Two commands"
          },
          {
            "level": 2,
            "id": "what-init-gave-you",
            "text": "What init gave you"
          },
          {
            "level": 2,
            "id": "the-layout",
            "text": "The layout"
          },
          {
            "level": 2,
            "id": "pages",
            "text": "Pages"
          },
          {
            "level": 2,
            "id": "overriding-a-region",
            "text": "Overriding a region"
          },
          {
            "level": 2,
            "id": "markdown-pages",
            "text": "Markdown pages"
          },
          {
            "level": 2,
            "id": "opting-out-of-the-layout",
            "text": "Opting out of the layout"
          },
          {
            "level": 2,
            "id": "a-snippet-that-ships-as-written",
            "text": "A snippet that ships as written"
          },
          {
            "level": 2,
            "id": "links-and-assets",
            "text": "Links and assets"
          },
          {
            "level": 2,
            "id": "checking-and-publishing",
            "text": "Checking and publishing"
          },
          {
            "level": 2,
            "id": "feeds-a-catalog-and-a-search-corpus",
            "text": "Feeds, a catalog, and a search corpus"
          },
          {
            "level": 2,
            "id": "anything-else-derived-from-other-files",
            "text": "Anything else derived from other files"
          },
          {
            "level": 2,
            "id": "where-to-go-next",
            "text": "Where to go next"
          }
        ]
      }
    },
    {
      "path": "/docs/guides/catalog-and-search/",
      "url": "https://unify.fwdslsh.dev/docs/guides/catalog-and-search/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "A blog list and search, from catalog.json and search-corpus.json · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "A blog index sorted newest-first with tag facets, and a search box, built from the catalog and the search corpus with a script you own."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/guides/catalog-and-search/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "a-blog-list-and-search-from-catalogjson-and-search-corpusjson",
            "text": "A blog list and search, from catalog.json and search-corpus.json"
          },
          {
            "level": 2,
            "id": "1-what-the-two-files-hand-you",
            "text": "1. What the two files hand you"
          },
          {
            "level": 3,
            "id": "which-pages-are-in-the-files-and-private-sites",
            "text": "Which pages are in the files, and private sites"
          },
          {
            "level": 2,
            "id": "2-reading-meta-like-a-browse-ui-would",
            "text": "2. Reading meta like a browse UI would"
          },
          {
            "level": 2,
            "id": "3-a-static-blog-list-kind-sort-tags",
            "text": "3. A static blog list: kind, sort, tags"
          },
          {
            "level": 2,
            "id": "4-the-module-url-relative-fetch-so-a-subpath-deploy-doesnt-break-it",
            "text": "4. The module-URL-relative fetch, so a subpath deploy doesn't break it"
          },
          {
            "level": 2,
            "id": "5-full-text-search-joined-back-to-the-catalog",
            "text": "5. Full-text search, joined back to the catalog"
          },
          {
            "level": 2,
            "id": "6-a-relevance-ranked-search-minisearch-sketched",
            "text": "6. A relevance-ranked search: MiniSearch, sketched"
          },
          {
            "level": 2,
            "id": "7-an-all-pages-directory",
            "text": "7. An \"All pages\" directory"
          },
          {
            "level": 2,
            "id": "8-where-htmx-fits-alongside-this",
            "text": "8. Where htmx fits alongside this"
          }
        ]
      }
    },
    {
      "path": "/docs/guides/eleventy-htmx/",
      "url": "https://unify.fwdslsh.dev/docs/guides/eleventy-htmx/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "Eleventy inside --generate, htmx on top · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "Keeping a generator you already have, Eleventy here, and letting unify own every page's chrome, head, URLs and checks."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/guides/eleventy-htmx/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "eleventy-inside---generate-htmx-on-top",
            "text": "Eleventy inside --generate, htmx on top"
          },
          {
            "level": 2,
            "id": "1-why-combine-these-tools",
            "text": "1. Why combine these tools"
          },
          {
            "level": 2,
            "id": "2-responsibilities-of-each-layer",
            "text": "2. Responsibilities of each layer"
          },
          {
            "level": 2,
            "id": "3-project-structure",
            "text": "3. Project structure"
          },
          {
            "level": 2,
            "id": "4-running-eleventy-through---generate",
            "text": "4. Running Eleventy through --generate"
          },
          {
            "level": 2,
            "id": "5-collections-and-data",
            "text": "5. Collections and data"
          },
          {
            "level": 2,
            "id": "6-generating-pages-and-fragments",
            "text": "6. Generating pages and fragments"
          },
          {
            "level": 2,
            "id": "7-using-unify-layouts-over-generated-output",
            "text": "7. Using unify layouts over generated output"
          },
          {
            "level": 3,
            "id": "do-not-use-two-layout-systems",
            "text": "Do not use two layout systems"
          },
          {
            "level": 2,
            "id": "8-htmx-progressive-enhancement",
            "text": "8. htmx progressive enhancement"
          },
          {
            "level": 3,
            "id": "do-not-use-htmx-as-a-component-system",
            "text": "Do not use htmx as a component system"
          },
          {
            "level": 3,
            "id": "do-not-treat-the-result-as-an-spa",
            "text": "Do not treat the result as an SPA"
          },
          {
            "level": 2,
            "id": "9-static-versus-dynamic-htmx-requests",
            "text": "9. Static versus dynamic htmx requests"
          },
          {
            "level": 2,
            "id": "10-development-and-watch-workflow",
            "text": "10. Development and watch workflow"
          },
          {
            "level": 3,
            "id": "what-re-runs-measured",
            "text": "What re-runs, measured"
          },
          {
            "level": 3,
            "id": "a-failing-generator-mid-session",
            "text": "A failing generator mid-session"
          },
          {
            "level": 3,
            "id": "the-dev-servers-reload-script-reaches-fetched-fragments",
            "text": "The dev server's reload script reaches fetched fragments"
          },
          {
            "level": 3,
            "id": "what-a-full-rebuild-costs",
            "text": "What a full rebuild costs"
          },
          {
            "level": 2,
            "id": "11-deployment",
            "text": "11. Deployment"
          },
          {
            "level": 2,
            "id": "12-common-mistakes",
            "text": "12. Common mistakes"
          },
          {
            "level": 2,
            "id": "13-when-this-architecture-is-appropriate",
            "text": "13. When this architecture is appropriate"
          },
          {
            "level": 2,
            "id": "14-when-to-use-plain-unify-instead",
            "text": "14. When to use plain unify instead"
          }
        ]
      }
    },
    {
      "path": "/docs/",
      "url": "https://unify.fwdslsh.dev/docs/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "All documentation · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "Every unify document, in reading order, rendered from the repository's own docs directory."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "all-documentation",
            "text": "All documentation"
          },
          {
            "level": 2,
            "id": "guides",
            "text": "Guides"
          },
          {
            "level": 2,
            "id": "reference",
            "text": "Reference"
          },
          {
            "level": 2,
            "id": "project",
            "text": "Project"
          }
        ]
      }
    },
    {
      "path": "/docs/integrations/",
      "url": "https://unify.fwdslsh.dev/docs/integrations/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "Integrating compiled components: the compile-to-asset pattern · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "Using a component framework, Svelte here, on a unify site by compiling it to an asset, without adopting a framework for the site."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/integrations/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "integrating-compiled-components-the-compile-to-asset-pattern",
            "text": "Integrating compiled components: the compile-to-asset pattern"
          },
          {
            "level": 2,
            "id": "the-contract-in-four-lines",
            "text": "The contract, in four lines"
          },
          {
            "level": 2,
            "id": "the-svelte-recipe",
            "text": "The Svelte recipe"
          },
          {
            "level": 2,
            "id": "never-hand-translate-the-component",
            "text": "Never hand-translate the component"
          },
          {
            "level": 2,
            "id": "the-same-shape-for-anything-else",
            "text": "The same shape for anything else"
          },
          {
            "level": 2,
            "id": "five-recipes",
            "text": "Five recipes"
          },
          {
            "level": 2,
            "id": "1-the-generator-context-what---generate-hands-you",
            "text": "1. The generator context: what --generate hands you"
          },
          {
            "level": 3,
            "id": "an-index-of-your-pages-in-one-build",
            "text": "An index of your pages, in one build"
          },
          {
            "level": 2,
            "id": "2-image-optimization",
            "text": "2. Image optimization"
          },
          {
            "level": 2,
            "id": "3-an-external-cms-over-the-source-tree",
            "text": "3. An external CMS over the source tree"
          },
          {
            "level": 2,
            "id": "4-interoperating-with-post-build-tools",
            "text": "4. Interoperating with post-build tools"
          },
          {
            "level": 2,
            "id": "5-a-prebuilt-packages-browser-files",
            "text": "5. A prebuilt package's browser files"
          },
          {
            "level": 2,
            "id": "what-stays-outside-unify",
            "text": "What stays outside unify"
          }
        ]
      }
    },
    {
      "path": "/docs/migration-plan/",
      "url": "https://unify.fwdslsh.dev/docs/migration-plan/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "unify — Test-Suite and Codebase Migration Plan (v0.6 → v0.7.0) · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "How the v0.6 test tree and codebase were migrated to the suite the testing strategy defines, and the gates that kept it honest."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/migration-plan/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "unify--test-suite-and-codebase-migration-plan-v06--v070",
            "text": "unify — Test-Suite and Codebase Migration Plan (v0.6 → v0.7.0)"
          },
          {
            "level": 2,
            "id": "1-the-one-structural-decision-everything-else-follows-from",
            "text": "1. The one structural decision everything else follows from"
          },
          {
            "level": 2,
            "id": "2-disposition-of-the-existing-suite",
            "text": "2. Disposition of the existing suite"
          },
          {
            "level": 3,
            "id": "21-the-classification-rule-mechanical-first-judgment-second",
            "text": "2.1 The classification rule (mechanical first, judgment second)"
          },
          {
            "level": 3,
            "id": "22-the-table",
            "text": "2.2 The table"
          },
          {
            "level": 2,
            "id": "3-phases",
            "text": "3. Phases"
          },
          {
            "level": 3,
            "id": "phase-0--authority-inversion-no-engine-work-1-day",
            "text": "Phase 0 — Authority inversion (no engine work; ~1 day)"
          },
          {
            "level": 3,
            "id": "phase-1--deletion-and-the-cli-skeleton-23-days",
            "text": "Phase 1 — Deletion and the CLI skeleton (~2–3 days)"
          },
          {
            "level": 3,
            "id": "phase-2--the-composition-core-12-weeks",
            "text": "Phase 2 — The composition core (~1–2 weeks)"
          },
          {
            "level": 3,
            "id": "phase-3--the-engine-contract-1-week",
            "text": "Phase 3 — The engine contract (~1 week)"
          },
          {
            "level": 3,
            "id": "phase-4--watch-dev-init-release-1-week",
            "text": "Phase 4 — Watch, dev, init, release (~1 week)"
          },
          {
            "level": 2,
            "id": "4-the-coverage-number-during-migration",
            "text": "4. The coverage number during migration"
          },
          {
            "level": 2,
            "id": "5-standing-risks-named",
            "text": "5. Standing risks, named"
          }
        ]
      }
    },
    {
      "path": "/docs/product-spec/",
      "url": "https://unify.fwdslsh.dev/docs/product-spec/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "unify — Product Specification · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "The shipped product contract: what unify is, who it serves, the composition model, the CLI and the boundaries future work must keep."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/product-spec/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "unify--product-specification",
            "text": "unify — Product Specification"
          },
          {
            "level": 2,
            "id": "1-what-unify-is",
            "text": "1. What unify is"
          },
          {
            "level": 2,
            "id": "2-the-five-minute-site-golden-path",
            "text": "2. The five-minute site (golden path)"
          },
          {
            "level": 2,
            "id": "3-composition-model-normative--the-composition-rules-4-carries-the-file-exclusion-and-error-rules",
            "text": "3. Composition model (normative — the composition rules; §4 carries the file, exclusion, and error rules)"
          },
          {
            "level": 3,
            "id": "31-fragments-includes",
            "text": "3.1 Fragments: includes"
          },
          {
            "level": 3,
            "id": "32-layouts-selection",
            "text": "3.2 Layouts: selection"
          },
          {
            "level": 3,
            "id": "33-the-merge--four-rules",
            "text": "3.3 The merge — four rules"
          },
          {
            "level": 3,
            "id": "34-why-this-vocabulary",
            "text": "3.4 Why this vocabulary"
          },
          {
            "level": 3,
            "id": "35-markdown",
            "text": "3.5 Markdown"
          },
          {
            "level": 3,
            "id": "36-urls",
            "text": "3.6 URLs"
          },
          {
            "level": 2,
            "id": "4-cli-the-complete-surface",
            "text": "4. CLI (the complete surface)"
          },
          {
            "level": 2,
            "id": "5-non-goals",
            "text": "5. Non-goals"
          },
          {
            "level": 2,
            "id": "6-beyond-the-composition-core--design-record",
            "text": "6. Beyond the composition core — design record"
          },
          {
            "level": 3,
            "id": "61-design-constraints",
            "text": "6.1 Design constraints"
          },
          {
            "level": 3,
            "id": "62-foundation-the-final-document-model",
            "text": "6.2 Foundation: the final document model"
          },
          {
            "level": 3,
            "id": "63-production-and-discovery-layer",
            "text": "6.3 Production and discovery layer"
          },
          {
            "level": 3,
            "id": "64-constrained-reuse-and-a-one-process-generator-seam",
            "text": "6.4 Constrained reuse and a one-process generator seam"
          },
          {
            "level": 3,
            "id": "65-publication-outputs",
            "text": "6.5 Publication outputs"
          },
          {
            "level": 3,
            "id": "66-explicitly-deferred-or-rejected",
            "text": "6.6 Explicitly deferred or rejected"
          },
          {
            "level": 3,
            "id": "67-ai-agent-authoring-and-implementation-guidance",
            "text": "6.7 AI-agent authoring and implementation guidance"
          },
          {
            "level": 2,
            "id": "7-what-the-contract-requires",
            "text": "7. What the contract requires"
          },
          {
            "level": 2,
            "id": "8-success-criteria",
            "text": "8. Success criteria"
          }
        ]
      }
    },
    {
      "path": "/docs/ratification-protocol/",
      "url": "https://unify.fwdslsh.dev/docs/ratification-protocol/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "Ratification: dialling in the rules with micro-experiments · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "How to validate the authoring rules empirically, by having agents author from them in isolation, and how to triage what fails."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/ratification-protocol/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "ratification-dialling-in-the-rules-with-micro-experiments",
            "text": "Ratification: dialling in the rules with micro-experiments"
          },
          {
            "level": 2,
            "id": "why-this-works-when-review-does-not",
            "text": "Why this works when review does not"
          },
          {
            "level": 2,
            "id": "the-bar",
            "text": "The bar"
          },
          {
            "level": 2,
            "id": "setup",
            "text": "Setup"
          },
          {
            "level": 2,
            "id": "running-a-round",
            "text": "Running a round"
          },
          {
            "level": 3,
            "id": "giving-the-agent-the-build-or-not",
            "text": "Giving the agent the build, or not"
          },
          {
            "level": 2,
            "id": "triage-doc-spec-implementation-or-outlier",
            "text": "Triage: doc, spec, implementation, or outlier"
          },
          {
            "level": 3,
            "id": "0-is-it-a-violation-at-all",
            "text": "0. Is it a violation at all?"
          },
          {
            "level": 3,
            "id": "1-is-the-sample-contaminated",
            "text": "1. Is the sample contaminated?"
          },
          {
            "level": 3,
            "id": "2-did-several-independent-samples-make-the-same-mistake",
            "text": "2. Did several independent samples make the same mistake?"
          },
          {
            "level": 3,
            "id": "3-is-it-a-documentation-defect",
            "text": "3. Is it a documentation defect?"
          },
          {
            "level": 3,
            "id": "4-is-it-a-specification-defect",
            "text": "4. Is it a specification defect?"
          },
          {
            "level": 3,
            "id": "5-is-it-an-implementation-defect",
            "text": "5. Is it an implementation defect?"
          },
          {
            "level": 3,
            "id": "6-is-it-an-outlier",
            "text": "6. Is it an outlier?"
          },
          {
            "level": 2,
            "id": "the-other-experiment-repair-not-authoring",
            "text": "The other experiment: repair, not authoring"
          },
          {
            "level": 2,
            "id": "the-two-amendment-rules",
            "text": "The two amendment rules"
          },
          {
            "level": 2,
            "id": "designing-the-brief",
            "text": "Designing the brief"
          },
          {
            "level": 2,
            "id": "recording",
            "text": "Recording"
          },
          {
            "level": 2,
            "id": "what-this-method-gets-wrong",
            "text": "What this method gets wrong"
          },
          {
            "level": 2,
            "id": "results-log",
            "text": "Results log"
          },
          {
            "level": 3,
            "id": "the-pattern-across-eleven-rounds",
            "text": "The pattern across eleven rounds"
          }
        ]
      }
    },
    {
      "path": "/docs/ratification/",
      "url": "https://unify.fwdslsh.dev/docs/ratification/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "Ratification — what the agent-experiment rounds changed · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "The evidence behind the authoring rules: each ratification round, what it found, and what it changed in the docs, the spec and the code."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/ratification/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "ratification--what-the-agent-experiment-rounds-changed",
            "text": "Ratification — what the agent-experiment rounds changed"
          },
          {
            "level": 2,
            "id": "1-why-an-empirical-loop-existed-at-all",
            "text": "1. Why an empirical loop existed at all"
          },
          {
            "level": 2,
            "id": "2-the-loop",
            "text": "2. The loop"
          },
          {
            "level": 3,
            "id": "the-instrument-changed-at-round-7",
            "text": "The instrument changed at round 7"
          },
          {
            "level": 3,
            "id": "two-experiments-not-one",
            "text": "Two experiments, not one"
          },
          {
            "level": 2,
            "id": "3-rules-of-evidence-learned-the-hard-way",
            "text": "3. Rules of evidence, learned the hard way"
          },
          {
            "level": 2,
            "id": "4-triage-in-practice",
            "text": "4. Triage in practice"
          },
          {
            "level": 3,
            "id": "the-ledger",
            "text": "The ledger"
          },
          {
            "level": 2,
            "id": "5-the-sharpest-result-round-18s-accidental-control",
            "text": "5. The sharpest result: round 18's accidental control"
          },
          {
            "level": 2,
            "id": "6-what-the-loop-changed-in-the-product",
            "text": "6. What the loop changed in the product"
          },
          {
            "level": 2,
            "id": "7-the-guardrails-that-kept-it-honest",
            "text": "7. The guardrails that kept it honest"
          },
          {
            "level": 2,
            "id": "7b-round-26-the-slotted-include-rule-and-two-defects-it-found-on-the-way",
            "text": "7b. Round 26: the slotted-include rule, and two defects it found on the way"
          },
          {
            "level": 2,
            "id": "7c-round-27-the-08-surface-holds-and-a-diagnostic-is-the-rounds-one-fix",
            "text": "7c. Round 27: the 0.8 surface holds, and a diagnostic is the round's one fix"
          },
          {
            "level": 3,
            "id": "7d-the-post-round-session-review-what-was-adjusted-and-what-deliberately-was-not",
            "text": "7d. The post-round session review: what was adjusted, and what deliberately was not"
          },
          {
            "level": 3,
            "id": "7e-round-28-the-evaluator-needs-no-clause-and-a-sharper-question-replaces-it",
            "text": "7e. Round 28: the evaluator needs no clause, and a sharper question replaces it"
          },
          {
            "level": 3,
            "id": "7f-round-29-the-09-engine-under-the-ratified-surface",
            "text": "7f. Round 29: the 0.9 engine under the ratified surface"
          },
          {
            "level": 2,
            "id": "8-running-it-again-and-what-is-still-untested",
            "text": "8. Running it again, and what is still untested"
          }
        ]
      }
    },
    {
      "path": "/docs/templates/",
      "url": "https://unify.fwdslsh.dev/docs/templates/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "Templates: start from one, stay current with it, publish your own · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "Scaffolding a site from a template, keeping it current with unify update, publishing your own, and building on one with extends."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/templates/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "templates-start-from-one-stay-current-with-it-publish-your-own",
            "text": "Templates: start from one, stay current with it, publish your own"
          },
          {
            "level": 2,
            "id": "1-scaffold-from-a-template",
            "text": "1. Scaffold from a template"
          },
          {
            "level": 3,
            "id": "keep-it-only-if-it-is-a-proper-unify-site",
            "text": "Keep it only if it is a proper unify site"
          },
          {
            "level": 3,
            "id": "what-init-leaves-behind",
            "text": "What init leaves behind"
          },
          {
            "level": 2,
            "id": "2-the-recommended-workflow",
            "text": "2. The recommended workflow"
          },
          {
            "level": 3,
            "id": "the-list-is-the-protection-and-keep-is-the-exception-you-declare",
            "text": "The list is the protection, and keep is the exception you declare"
          },
          {
            "level": 3,
            "id": "what-update-never-does",
            "text": "What update never does"
          },
          {
            "level": 3,
            "id": "if-the-line-is-missing",
            "text": "If the line is missing"
          },
          {
            "level": 2,
            "id": "3-publish-a-template",
            "text": "3. Publish a template"
          },
          {
            "level": 3,
            "id": "tooling-in-place-examples-to-copy",
            "text": "Tooling in place, examples to copy"
          },
          {
            "level": 3,
            "id": "the-look-is-a-file-the-site-keeps",
            "text": "The look is a file the site keeps"
          },
          {
            "level": 3,
            "id": "what-a-template-must-still-ship",
            "text": "What a template must still ship"
          },
          {
            "level": 3,
            "id": "make-it-audit-clean-then-host-it",
            "text": "Make it audit clean, then host it"
          },
          {
            "level": 2,
            "id": "4-build-on-a-template-without-copying-it",
            "text": "4. Build on a template without copying it"
          },
          {
            "level": 2,
            "id": "5-where-to-look-next",
            "text": "5. Where to look next"
          }
        ]
      }
    },
    {
      "path": "/docs/testing-strategy/",
      "url": "https://unify.fwdslsh.dev/docs/testing-strategy/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "unify — Testing Strategy · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "The testing contract: what fully and correctly implemented means as machine-checkable conditions, and the tiers and gates that check them."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/docs/testing-strategy/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {},
        "headings": [
          {
            "level": 1,
            "id": "unify--testing-strategy",
            "text": "unify — Testing Strategy"
          },
          {
            "level": 2,
            "id": "1-root-cause-analysis-93-coverage-on-a-product-that-did-not-work",
            "text": "1. Root-cause analysis: 93% coverage on a product that did not work"
          },
          {
            "level": 3,
            "id": "m1--the-suite-tested-functions-not-the-product",
            "text": "M1 — The suite tested functions, not the product"
          },
          {
            "level": 3,
            "id": "m2--the-one-real-test-had-its-assertion-commented-out",
            "text": "M2 — The one real test had its assertion commented out"
          },
          {
            "level": 3,
            "id": "m3--the-suite-ratified-bugs-as-contracts",
            "text": "M3 — The suite ratified bugs as contracts"
          },
          {
            "level": 3,
            "id": "m4--coverage-measured-execution-not-verification",
            "text": "M4 — Coverage measured execution, not verification"
          },
          {
            "level": 3,
            "id": "m5--comparisons-were-normalized-until-they-couldnt-fail",
            "text": "M5 — Comparisons were normalized until they couldn't fail"
          },
          {
            "level": 2,
            "id": "2-the-tier-model",
            "text": "2. The tier model"
          },
          {
            "level": 3,
            "id": "tier-0--golden-path-e2e-the-product-works",
            "text": "Tier 0 — Golden path E2E (the product works)"
          },
          {
            "level": 3,
            "id": "tier-1--conformance-fixtures-the-spec-is-implemented",
            "text": "Tier 1 — Conformance fixtures (the spec is implemented)"
          },
          {
            "level": 3,
            "id": "tier-2--engine-contract-tests-the-operational-promises",
            "text": "Tier 2 — Engine-contract tests (the operational promises)"
          },
          {
            "level": 3,
            "id": "tier-3--unit-tests-developer-scaffolding-zero-authority",
            "text": "Tier 3 — Unit tests (developer scaffolding, zero authority)"
          },
          {
            "level": 2,
            "id": "3-spec-rule-traceability-mechanically-enforced",
            "text": "3. Spec-rule traceability, mechanically enforced"
          },
          {
            "level": 3,
            "id": "31-the-rule-inventory",
            "text": "3.1 The rule inventory"
          },
          {
            "level": 3,
            "id": "32-how-tests-declare-coverage",
            "text": "3.2 How tests declare coverage"
          },
          {
            "level": 3,
            "id": "33-the-gap-check",
            "text": "3.3 The gap check"
          },
          {
            "level": 3,
            "id": "34-why-declaration--vacuous-claiming",
            "text": "3.4 Why declaration ≠ vacuous claiming"
          },
          {
            "level": 2,
            "id": "4-the-metric-replacement",
            "text": "4. The metric replacement"
          },
          {
            "level": 2,
            "id": "5-anti-regression-rules-for-the-suite-itself",
            "text": "5. Anti-regression rules for the suite itself"
          },
          {
            "level": 2,
            "id": "6-release-gates",
            "text": "6. Release gates"
          },
          {
            "level": 2,
            "id": "7-spec-bugs-and-pinned-readings-found-while-building-the-fixtures",
            "text": "7. Spec bugs and pinned readings found while building the fixtures"
          },
          {
            "level": 2,
            "id": "8-what-this-strategy-does-not-cover-said-plainly",
            "text": "8. What this strategy does not cover, said plainly"
          }
        ]
      }
    },
    {
      "path": "/examples/",
      "url": "https://unify.fwdslsh.dev/examples/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "Examples · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "Eight example sites built with unify's five primitives, five of them running live in this deployment."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/examples/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {
          "class": "wide"
        },
        "headings": [
          {
            "level": 1,
            "id": null,
            "text": "Examples"
          },
          {
            "level": 2,
            "id": null,
            "text": "Live in this deployment"
          },
          {
            "level": 3,
            "id": null,
            "text": "seed-library"
          },
          {
            "level": 3,
            "id": null,
            "text": "seed-library-alt"
          },
          {
            "level": 3,
            "id": null,
            "text": "seed-library-ondemand"
          },
          {
            "level": 3,
            "id": null,
            "text": "htmx-fragments"
          },
          {
            "level": 3,
            "id": null,
            "text": "catalog-search-blog"
          },
          {
            "level": 2,
            "id": null,
            "text": "Also in this repository"
          },
          {
            "level": 3,
            "id": null,
            "text": "eleventy-htmx"
          },
          {
            "level": 3,
            "id": null,
            "text": "forge-svelte"
          },
          {
            "level": 3,
            "id": null,
            "text": "unify-docs"
          }
        ]
      }
    },
    {
      "path": "/",
      "url": "https://unify.fwdslsh.dev/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "unify documentation · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "The front page of unify's documentation site, built by unify from the repository's own docs directory."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {
          "class": "home"
        },
        "headings": [
          {
            "level": 1,
            "id": null,
            "text": "unify"
          },
          {
            "level": 2,
            "id": null,
            "text": "Start here"
          },
          {
            "level": 3,
            "id": null,
            "text": "Getting started"
          },
          {
            "level": 3,
            "id": null,
            "text": "Authoring rules"
          },
          {
            "level": 3,
            "id": null,
            "text": "CLI reference"
          }
        ]
      }
    },
    {
      "path": "/templates/",
      "url": "https://unify.fwdslsh.dev/templates/",
      "html": {
        "attributes": {
          "lang": "en"
        }
      },
      "head": {
        "title": "Templates · unify docs",
        "meta": [
          {
            "charset": "utf-8"
          },
          {
            "name": "viewport",
            "content": "width=device-width, initial-scale=1"
          },
          {
            "name": "description",
            "content": "Every template a unify site can start from, the five built into the CLI and every package on npm with the unify-template keyword, each with the command that scaffolds it."
          },
          {
            "property": "og:site_name",
            "content": "unify docs"
          },
          {
            "name": "theme-color",
            "content": "#0a0e0a"
          },
          {
            "property": "og:type",
            "content": "website"
          },
          {
            "property": "og:image",
            "content": "https://unify.fwdslsh.dev/assets/share-placeholder.png"
          },
          {
            "property": "og:image:width",
            "content": "1200"
          },
          {
            "property": "og:image:height",
            "content": "630"
          },
          {
            "name": "schema",
            "content": "WebPage"
          }
        ],
        "link": [
          {
            "rel": "icon",
            "href": "/assets/favicon.svg",
            "type": "image/svg+xml"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.googleapis.com"
          },
          {
            "rel": "preconnect",
            "href": "https://fonts.gstatic.com",
            "crossorigin": ""
          },
          {
            "rel": "stylesheet",
            "href": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400;600&family=Protest+Revolution&display=swap"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/site.css"
          },
          {
            "rel": "stylesheet",
            "href": "/assets/style.css"
          },
          {
            "rel": "canonical",
            "href": "https://unify.fwdslsh.dev/templates/"
          }
        ],
        "base": []
      },
      "body": {
        "attributes": {
          "class": "wide"
        },
        "headings": [
          {
            "level": 1,
            "id": null,
            "text": "Templates"
          },
          {
            "level": 3,
            "id": null,
            "text": "default built in"
          },
          {
            "level": 3,
            "id": null,
            "text": "basic built in"
          },
          {
            "level": 3,
            "id": null,
            "text": "blog built in"
          },
          {
            "level": 3,
            "id": null,
            "text": "docs built in"
          },
          {
            "level": 3,
            "id": null,
            "text": "portfolio built in"
          }
        ]
      }
    }
  ]
}
