{
  "$comment": "Single source of truth for every version, count and inventory quoted anywhere in the documentation. Edit THIS file, then run `npm run verify:docs` — it reports every doc that disagrees. Never hand-edit a number in a doc without updating this manifest first.",
  "verifiedOn": "2026-08-01",
  "packages": {
    "pdfnative": {
      "version": "1.6.0",
      "pinField": null,
      "pin": null,
      "repo": "https://github.com/Nizoka/pdfnative"
    },
    "pdfnative-cli": {
      "version": "1.3.0",
      "pinField": "dependencies",
      "pin": "^1.6.0",
      "repo": "https://github.com/Nizoka/pdfnative-cli",
      "binary": "pdfnative",
      "commandCount": 17,
      "commandGroups": {
        "Create & edit": [
          "render",
          "fill",
          "annotate"
        ],
        "Page tree": [
          "merge",
          "split",
          "extract"
        ],
        "Security": [
          "sign",
          "verify",
          "encrypt",
          "decrypt"
        ],
        "Read & extract": [
          "inspect",
          "extract-text"
        ],
        "Automation & meta": [
          "batch",
          "doctor",
          "schema",
          "completion",
          "govern"
        ]
      }
    },
    "pdfnative-mcp": {
      "version": "1.5.0",
      "pinField": "dependencies",
      "pin": "^1.6.0",
      "repo": "https://github.com/Nizoka/pdfnative-mcp",
      "toolCount": 24,
      "tools": [
        "add_attachment",
        "add_barcode",
        "add_chart",
        "add_form",
        "add_international_text",
        "add_table",
        "annotate_pdf",
        "decrypt_pdf",
        "draft_governance_issue",
        "embed_image",
        "encrypt_pdf",
        "extract_attachments",
        "extract_pages",
        "extract_text",
        "fill_form",
        "generate_basic_pdf",
        "inspect_pdf",
        "merge_pdfs",
        "prepare_signature_placeholder",
        "read_form_fields",
        "sign_pdf",
        "split_pdf",
        "validate_pdf",
        "verify_pdf"
      ],
      "prompts": [
        "governance_contract",
        "draft_issue_workflow"
      ]
    },
    "pdfnative-react": {
      "version": "1.1.0",
      "pinField": "peerDependencies",
      "pin": "^1.6.0",
      "repo": "https://github.com/Nizoka/pdfnative-react",
      "$comment": "pdfnative is declared as a PEER dependency here, not a dependency. versions.js must read both fields or the pin annotation silently never renders for this package.",
      "runtimeDependencies": [
        "react-reconciler"
      ],
      "nodeEngine": ">=22",
      "reactPeer": "^19.0.0"
    }
  },
  "derived": {
    "$comment": "Asserted against the filesystem by verify-docs. Never hand-edit to make a check pass — fix the docs or the tree instead.",
    "testFiles": 105,
    "sampleGenerators": 44,
    "samplePdfs": 228,
    "guides": 26,
    "playgrounds": 9,
    "learnSteps": 8
  },
  "declared": {
    "$comment": "Hand-maintained figures that no filesystem walk can derive. Every doc must echo these exactly.",
    "tests": 2396,
    "scripts": 22,
    "bundledFontModules": 26,
    "blockTypes": 13,
    "barcodeFormats": 5,
    "chartTypes": 5,
    "pdfaLevels": [
      "pdfa1b",
      "pdfa2b",
      "pdfa2u",
      "pdfa3b"
    ],
    "signatureAlgorithms": [
      "rsa-sha256",
      "ecdsa-sha256"
    ],
    "writeEncryption": [
      "aes128",
      "aes256"
    ],
    "readEncryption": [
      "RC4 V1-V4",
      "AES-128 V4/R4",
      "AES-256 V5/R6"
    ]
  },
  "assertions": [
    {
      "id": "mcp-tool-count",
      "canonical": "24 tools",
      "match": "\\b(\\d+)\\s+(?:[A-Za-z][\\w-]*\\s+){0,2}tools\\b",
      "expect": 24,
      "requireIn": [
        "docs/guides/mcp.md",
        "docs/index.html",
        "llms.txt",
        "docs/assets/architecture.svg",
        "docs/playgrounds/mcp.html"
      ]
    },
    {
      "id": "cli-command-count",
      "canonical": "17 commands",
      "match": "\\b(\\d+)\\s+(?:[A-Za-z][\\w-]*\\s+){0,2}commands\\b",
      "expect": 17,
      "requireIn": [
        "docs/guides/cli.md",
        "docs/index.html",
        "llms.txt"
      ]
    },
    {
      "id": "block-type-count",
      "canonical": "13 block types",
      "match": "\\b(\\d+)\\s+block\\s+types\\b",
      "expect": 13,
      "requireIn": [
        "docs/index.html"
      ]
    },
    {
      "id": "test-count-homepage",
      "$comment": "The homepage quoted a stale test count for a full release train; no assertion covered it. canonical-present pins the current figure where it is displayed.",
      "canonical": "396+ tests across 105 files",
      "requireIn": [
        "docs/index.html"
      ]
    },
    {
      "id": "script-count",
      "canonical": "22 scripts",
      "match": "\\b(\\d+)\\s+(?:supported\\s+|Unicode\\s+|writing\\s+)?scripts\\b",
      "expect": 22,
      "requireIn": [
        "docs/index.html",
        "README.md"
      ]
    }
  ],
  "apiDenylist": {
    "$comment": "Identifiers that have appeared in documentation but have never been exported. Any occurrence is a hard failure.",
    "streamDocumentPdf": "buildDocumentPDFStream / buildDocumentPDFStreamTrue",
    "streamPdf": "buildPDFStream / buildPDFStreamTrue",
    "buildPdfStream": "buildPDFStream"
  },
  "learnPath": [
    "01-install.html",
    "02-blocks.html",
    "03-tables.html",
    "04-page-furniture.html",
    "05-fonts-and-scripts.html",
    "06-browser.html",
    "07-going-big.html",
    "08-next-steps.html"
  ]
}
