{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "webgpu-three-js",
  "built": "2026-10-26",
  "control_level": 1,
  "control_level_label": "L1 基础",
  "capabilities": [],
  "required_controls": {
    "agent": [
      "auto_load"
    ],
    "admin": [
      "register_source_and_version"
    ]
  },
  "evidence": [
    {
      "file": "SKILL.md",
      "summary": "Pure prompt instructions and rule text without script execution or external impact."
    }
  ],
  "verification": {
    "method": "第二遍独立重读 + 换角度反查（不沿用第一遍结论）：① git rev-parse HEAD 与 .git/shallow 比对 pin commit；git ls-tree -r 拿全量文件清单（确认无隐藏脚本、无 package.json）；② 逐类危险 token 全仓扫描（child_process|execSync|eval(|new Function|fetch(|XMLHttpRequest|curl |wget |npm i|process.env|localStorage|sessionStorage|indexedDB|api_key|secret|token|document.cookie|credentials|Authorization），逐个落地看待命中项语境；③ 网络面反查：unpkg|jsdelivr|cdn.|importmap 全仓零命中，并回读 templates/examples 的 import 语句确认只依赖 npm 包名而非 URL；④ @file 引用反查：grep '^@' 与 '@skills/' 逐条数 .mdc 的引用行，验证 README『thin shims』说法是否成立；⑤ 功能声明 vs 实际能力核对：把 README/SKILL.md 的承诺逐条映射到具体文档（7 docs + REFERENCE + 2 templates + 5 examples），并专门检查『已对齐 r183』这类时效性声明的内部一致性——由此抓出两处 .mdc 与 docs 冲突；⑥ 交叉核对 docs 内部一致性：grep computeAsync / renderer.compute / PostProcessing / RenderPipeline 在所有 .md 与 .mdc 的分布，判断谁是新结论。",
    "second_pass": [
      {
        "item": "pin commit 与工作副本一致",
        "status": "ok",
        "detail": "git rev-parse HEAD 输出 af2319bd01bb7cc881267a9ef42cafdaf5e9029d，与 .git/shallow 首行相同，等于任务 pin commit；结论只对该 commit 有效。"
      },
      {
        "item": "skill 目录定位",
        "status": "ok",
        "detail": "skills/webgpu-threejs-tsl/SKILL.md 存在且 frontmatter name: webgpu-threejs-tsl 与 slug 对应；同目录含 REFERENCE.md、docs/×7、examples/×5、templates/×2，路径写入 skill.path。"
      },
      {
        "item": "license 声明与仓库实际文件",
        "status": "discrepancy",
        "detail": "README.md 有『## License』段声明 MIT License，.claude-plugin/plugin.json 也写 \"license\": \"MIT\"；但 git ls-tree -r 全量清单里没有 LICENSE / LICENSE.md 文件，全仓 grep -il license 只命中 plugin.json、README.md 与 5 个 examples 的注释，与 GitHub API license=null 一致。即：许可为『源码内声明』而非仓内标准许可文件。"
      },
      {
        "item": "README 自述的 skill 结构图 vs 实际文件",
        "status": "discrepancy",
        "detail": "README『## Skill Structure』的 docs/ 分支只列 core-concepts / materials / compute-shaders / post-processing / wgsl-integration / device-loss 六篇（以 `└── device-loss.md` 收尾），而 docs/ 实有 7 篇——漏列 limits-and-features.md；SKILL.md 的 Skill Contents 则完整列出七篇。属 README 文档漂移。"
      },
      {
        "item": "Cursor 摘要与 docs 的 API 世代是否一致（后处理）",
        "status": "discrepancy",
        "detail": ".cursor/rules/post-processing.mdc 仍教 `import { PostProcessing } from 'three/webgpu';` 并说 postProcessing.renderAsync()，而 docs/post-processing.md 开篇即注明 r183 已改名 RenderPipeline、旧名仅为兼容包装，examples/post-processing.js 实际用的是 `new THREE.RenderPipeline(renderer)`。README 自称 shim 会『edits flow through automatically』——该说法对手写摘要句不成立。"
      },
      {
        "item": "Cursor 摘要与 docs 的 API 世代是否一致（compute 派发）",
        "status": "discrepancy",
        "detail": ".cursor/rules/compute-shaders.mdc 写『dispatched via `renderer.computeAsync()`』与『- `renderer.computeAsync(kernel)` to dispatch』，而 docs/compute-shaders.md『Execution Methods』明确『// Note: computeAsync() is deprecated since r181.』并给出『await renderer.init() at startup, then renderer.compute() synchronously』；templates/compute-shader.js 与 examples/particle-system.js 用的都是 renderer.compute(...)。同一漂移问题的第二例。"
      },
      {
        "item": "外部依赖反查：是否存在 CDN/网络调用",
        "status": "ok",
        "detail": "全仓 grep -riE 'unpkg|jsdelivr|cdn\\.|importmap|import-map' 零命中；templates/examples 的 import 全部是裸包名（three、three/webgpu、three/tsl、three/addons/...），无 URL 形式的模块来源。故 external_deps 只列 npm 包，security.network_calls 为空。"
      },
      {
        "item": "脚本/凭证面反查",
        "status": "ok",
        "detail": "git ls-tree 全清单只有 .md/.mdc/.json/.js；无 package.json（因此无 npm scripts、无依赖安装钩子）、无 scripts/、无 .sh/.py；危险 token 扫描对 child_process/eval/new Function/process.env/.env/token/secret/document.cookie/credentials 均无命中。scripts_executed 与 credential_reads 为空有据。"
      },
      {
        "item": "写文件面反查",
        "status": "ok",
        "detail": "唯一与持久化相关的命中是 docs/device-loss.md 的两行 localStorage.setItem/getItem，语境是教『用户生成的应用』保存 appState 以便设备恢复；skill 自身无任何写文件指令，故 file_writes 为空。"
      },
      {
        "item": "多宿主 shim 说法是否属实（@file 引用）",
        "status": "ok",
        "detail": "grep 数出 .mdc 内 @skills/... 引用共 10 条（entry 4 条、compute 3 条、post-processing 2 条、device-loss-and-limits 2 条、wgsl 1 条），逐条对应到实际存在的文件；README『.mdc 是 thin shims 且需连 skills/ 一起拷贝』的说法成立（.mdc 合计 5.9KB vs 被引用文档 60KB+）。"
      },
      {
        "item": "『Why it works』类核心论断是否被三处独立重复（防单点疏漏）",
        "status": "ok",
        "detail": "grep 确认 TSL 属性赋值 vs JS 变量重赋值的警告在 docs/core-concepts.md（§⚠️CRITICAL）、docs/compute-shaders.md（开篇 CRITICAL 段）、templates/compute-shader.js（头部 『⚠️  CRITICAL TSL GOTCHA - READ THIS FIRST!』）三处出现，且模板头部重复了 select()/.toVar()/element.assign() 三种解法，与 how_it_works 的判断一致。"
      },
      {
        "item": "功能声明夸大检查（官方 description vs 实际覆盖面）",
        "status": "discrepancy",
        "detail": "description 承诺覆盖 renderer setup / TSL 语法与节点材质 / compute / 后处理 / WGSL 集成，实际 7 篇 docs 逐项都对得上，无越界承诺；但 README 顶部『Last updated: April 1, 2026 — aligned with Three.js r183+ API changes』与正文『Recommended Three.js version: r171+』并存，且实测 Cursor shim 未同步到 r181/r183 结论——『已对齐 r183』的纯度被这两处漂移削弱，属声明略高于实现。"
      },
      {
        "item": "元数据可核实性（stars / last_push / installs）",
        "status": "ok",
        "detail": "stars 1192 与 last_push 2026-04-10T14:28:23Z 沿用任务给定的 gh api 复核值，与仓库内证据不冲突（README 标注的最后更新日期为 2026-04-01，早于 last_push）；installs 无公开来源，保持 null，不臆造。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "af2319bd01bb7cc881267a9ef42cafdaf5e9029d",
    "sha256": "afb594cdc14fec2b8dbae9cfbd4e88bff11e0bc5aeac235595ca6a5b6f6b266b",
    "reviewed_by": null,
    "reviewed_at": null
  },
  "assessed_at": "2026-10-25",
  "method_version": "2.0",
  "mirror": {
    "archive": "https://skillpub.pages.dev/r2/v/2026-09-15/webgpu-three-js.tar.gz",
    "sha256": "afb594cdc14fec2b8dbae9cfbd4e88bff11e0bc5aeac235595ca6a5b6f6b266b",
    "commit": "af2319bd01bb7cc881267a9ef42cafdaf5e9029d"
  },
  "original": {
    "github": "https://github.com/dgreenheck/webgpu-claude-skill/tree/main/skills/webgpu-threejs-tsl",
    "path": "skills/webgpu-threejs-tsl",
    "commit": "af2319bd01bb7cc881267a9ef42cafdaf5e9029d"
  }
}