{
  "schemaVersion": "pendulum-release-readiness/v1",
  "generatedAt": "2026-09-01T05:04:44.458Z",
  "status": "ready-for-owner-publish",
  "externalPublishSteps": [
    "Deploy reviewer.html through GitHub Pages and verify reports/publication-status.json.",
    "Bootstrap the npm package with owner credentials or configure its trusted publisher, then dispatch publish-npm.yml with dry_run=false.",
    "Authenticate Zenodo, run npm run zenodo:publish, then run npm run doi:sync."
  ],
  "artifacts": [
    {
      "id": "zenodo-metadata",
      "path": ".zenodo.json",
      "required": true,
      "available": true,
      "hash": "1c2bbff862b232",
      "note": "Zenodo metadata and authenticated deposition command are present."
    },
    {
      "id": "pages-workflow",
      "path": ".github/workflows/pages.yml",
      "required": true,
      "available": true,
      "hash": "0717063528be01",
      "note": "GitHub Pages deploy workflow is present."
    },
    {
      "id": "reviewer-dashboard",
      "path": "reviewer.html",
      "required": true,
      "available": true,
      "note": "Pages reviewer console reads report JSON directly."
    },
    {
      "id": "npm-workflow",
      "path": ".github/workflows/publish-npm.yml",
      "required": true,
      "available": true,
      "hash": "1aeb76c3a73715",
      "note": "Manual npm workflow uses OIDC trusted publishing and automatic provenance."
    },
    {
      "id": "attestation-workflow",
      "path": ".github/workflows/release.yml",
      "required": true,
      "available": true,
      "hash": "008c894ca48fd8",
      "note": "Release workflow emits SLSA/in-toto provenance plus a CycloneDX SBOM attestation."
    },
    {
      "id": "paper-pdf",
      "path": "paper/paper.pdf",
      "required": true,
      "available": true,
      "note": "Flagship paper PDF exists."
    },
    {
      "id": "portfolio-korean-pdf",
      "path": "reports/portfolio-korean.pdf",
      "required": true,
      "available": true,
      "note": "Korean portfolio PDF is generated from documents/portfolio-korean.md with Playwright Chromium."
    },
    {
      "id": "portfolio-korean-pdf-validation",
      "path": "reports/portfolio-korean-pdf-validation.json",
      "required": true,
      "available": true,
      "hash": "124d3f532f4c2f",
      "note": "Poppler-rendered page previews, dimensions, hashes, and structural PDF checks passed."
    },
    {
      "id": "reviewer-manifest",
      "path": "reports/reviewer-kit-manifest.json",
      "required": true,
      "available": true,
      "hash": "0bf8661250d297",
      "note": "Reviewer kit manifest exists."
    },
    {
      "id": "webgpu-hardware-validation",
      "path": "reports/webgpu-hardware-validation.md",
      "required": false,
      "available": true,
      "hash": "12aff87c0b7e5f",
      "note": "Real WebGPU adapter validation report exists when run on a hardware target."
    },
    {
      "id": "gpu-benchmark-ladder",
      "path": "reports/gpu-benchmark-ladder.md",
      "required": true,
      "available": true,
      "hash": "1351660b532741",
      "note": "Hardware GPU benchmark ladder records adapter metadata, f32/f64 drift, and CPU-oracle promotion metrics."
    },
    {
      "id": "gpu-benchmark-ladder-json",
      "path": "reports/gpu-benchmark-ladder.json",
      "required": true,
      "available": true,
      "hash": "18dde59b5c13d7",
      "note": "Machine-readable GPU benchmark ladder for release artifacts."
    },
    {
      "id": "gpu-adapter-matrix",
      "path": "reports/gpu-adapter-matrix.json",
      "required": true,
      "available": true,
      "hash": "0c810309c914d2",
      "note": "Physical Intel/NVIDIA/AMD evidence matrix; missing hardware remains explicit."
    },
    {
      "id": "publication-status",
      "path": "reports/publication-status.json",
      "required": true,
      "available": true,
      "hash": "03060b98c69d5d",
      "note": "Public registry, DOI, release, and Pages resolution audit."
    },
    {
      "id": "zenodo-deposition",
      "path": "reports/zenodo-deposition.json",
      "required": false,
      "available": true,
      "hash": "015120fde07fd7",
      "note": "Authenticated deposition result or explicit credential boundary; no DOI is inferred."
    },
    {
      "id": "attestation-verification",
      "path": "reports/attestation-verification.json",
      "required": false,
      "available": true,
      "hash": "0faf054b134ed0",
      "note": "Cryptographic verification of SLSA and CycloneDX attestations against the release tarball."
    },
    {
      "id": "npm-pack-dry-run",
      "path": "reports/npm-pack-dry-run.json",
      "required": true,
      "available": true,
      "hash": "1de7661022b11b",
      "note": "Exact npm tarball integrity, size, and included-file inventory from a successful dry run."
    },
    {
      "id": "mutation-aggregate",
      "path": "reports/mutation-aggregate.json",
      "required": true,
      "available": true,
      "hash": "13cb164881df12",
      "note": "Nightly sharded mutation aggregate score from Stryker reports."
    },
    {
      "id": "one-page-pdf",
      "path": "reports/release-one-page.pdf",
      "required": true,
      "available": true,
      "note": "One-page reviewer PDF generated locally."
    },
    {
      "id": "walkthrough-gif",
      "path": "reports/walkthrough-30s.gif",
      "required": true,
      "available": true,
      "note": "Thirty-second GIF walkthrough generated locally."
    },
    {
      "id": "narrated-demo",
      "path": "reports/demo-narrated-ko.mp4",
      "required": true,
      "available": true,
      "note": "67-second Korean narrated walkthrough, attached to the GitHub Release."
    },
    {
      "id": "narrated-demo-captions",
      "path": "reports/demo-narrated-ko.vtt",
      "required": true,
      "available": true,
      "note": "Timed Korean WebVTT captions generated from the narration segments."
    },
    {
      "id": "narrated-demo-transcript",
      "path": "reports/demo-narrated-ko.md",
      "required": true,
      "available": true,
      "hash": "02628dc8094a7d",
      "note": "Accessible Korean narration transcript."
    },
    {
      "id": "walkthrough-storyboard",
      "path": "reports/walkthrough-storyboard.svg",
      "required": false,
      "available": true,
      "hash": "1bf296172c17cd",
      "note": "Editable storyboard companion for the GIF."
    }
  ]
}
