{
  "schemaVersion": 2,
  "generatedAt": "2026-11-09T17:32:31.723Z",
  "generator": "scripts/fetch-occt.mjs",
  "note": "此文件是 /occt/ 产物的唯一事实来源：前端按它对 URL 加载，运维按它替换二进制，合规审计按它追溯版本。不要手改，重跑脚本即可。",
  "license": {
    "component": "Open CASCADE Technology (OCCT)",
    "spdx": "LGPL-2.1-only WITH OCCT-exception-1.0",
    "distribution": "separate replaceable file at a fixed path, loaded at runtime, NOT compiled into JS",
    "replaceable": true,
    "replaceNote": "/license#replacing-the-geometry-engine",
    "namingPolicy": "stable filename, no content hash (replacement must work without editing this site)",
    "patched": false,
    "patches": [],
    "licenseFile": "LICENSE-OCCT.txt",
    "noticeFile": "NOTICE-OCCT.txt",
    "licenseTextSource": "copied verbatim from replicad-opencascadejs@1.2.1/LICENSE",
    "upstreamSource": "https://github.com/Open-Cascade-SAS/OCCT",
    "complianceDoc": "docs/LICENSE-NOTES.md",
    "upstream": {
      "resolvedAt": "2026-11-09",
      "resolvedForVersion": "1.2.1",
      "resolutionMethod": "OCI config labels (opencontainers.image.revision) → DEPS.json pin",
      "occt": {
        "component": "Open CASCADE Technology",
        "version": "V8_0_1",
        "commit": "b8f597c677811d1f9f4d8a97f5ae2825c0353a42",
        "repo": "https://github.com/Open-Cascade-SAS/OCCT",
        "licenseFiles": {
          "lgpl21": "LICENSE_LGPL_21.txt",
          "exception": "OCCT_LGPL_EXCEPTION.txt"
        },
        "patched": false
      },
      "toolchain": {
        "name": "opencascade.js (taucad fork)",
        "repo": "https://github.com/taucad/opencascade.js",
        "commit": "341fa789f49ce73db76a0209d89ae518cc64a52d",
        "depsLock": "DEPS.json"
      },
      "image": {
        "ref": "ghcr.io/taucad/opencascade.js:3.1.0-single-threaded",
        "indexDigest": "sha256:d7bf97ada840afb0f0e0f6bba04b1b55dd0d276e1679a3e40c1431a2cf44900b",
        "amd64ManifestDigest": "sha256:dea5b58a92f8a44a5ffbdf6c1a04349217f6b939a9876a0a5f46822bd308d36b",
        "role": "build-environment provenance ONLY — this binary was NOT pulled from the image",
        "note": "tag 可能被移动，以 digest 为准；上面两个 digest 是 2026-11-09 读取到的值"
      }
    }
  },
  "packages": [
    {
      "name": "replicad-opencascadejs",
      "version": "1.2.1",
      "declaredLicense": "LGPL-2.1-only",
      "resolvedVia": "node require.resolve",
      "artifactSource": "node_modules/replicad-opencascadejs/dist/replicad_single.wasm and dist/replicad_single.js (byte-for-byte copy, unmodified)",
      "note": "replicad 本身是 MIT，但它不随包分发 OCCT 二进制；LGPL 义务来自本包。"
    }
  ],
  "variant": "single",
  "artifacts": {
    "wasm": {
      "file": "opencascade.wasm",
      "url": "/occt/opencascade.wasm",
      "bytes": 22942327,
      "sha256": "a9335919fa64bfeaee3e241d3139ad134022682429c6688e20d8ca12093d33d9",
      "contentType": "application/wasm",
      "cacheControl": "public, max-age=0, must-revalidate",
      "sha256Purpose": "integrity verification only — NOT part of the URL, NOT a cache-busting key"
    },
    "glue": {
      "file": "opencascade.js",
      "url": "/occt/opencascade.js",
      "bytes": 60483,
      "sha256": "465b68c209b416396857fad30a6e33e7f5407907373cfe240c194af6d80c4a1d",
      "contentType": "text/javascript",
      "cacheControl": "public, max-age=0, must-revalidate",
      "sha256Purpose": "integrity verification only — NOT part of the URL"
    }
  },
  "budgets": {
    "wasmLimitBytes": 24000000,
    "glueLimitBytes": 200000,
    "withinBudget": true,
    "warnings": []
  },
  "usage": {
    "glueUrl": "/occt/opencascade.js",
    "wasmUrl": "/occt/opencascade.wasm",
    "hint": "用 import(/* webpackIgnore: true */ glueUrl) 加载，避免打包器把胶水层收进 chunk；初始化时把 wasmUrl 作为 locateFile 的返回值传给 Emscripten 模块（文件名已改，不覆盖会 404）。打包器忽略 webpackIgnore 时改用 <script type=\"module\"> 注入 —— 见 docs/LICENSE-NOTES.md C1。"
  }
}
