{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "threejs-animation",
  "built": "2026-10-26",
  "control_level": 4,
  "control_level_label": "L4 高权限",
  "capabilities": [
    "execute_command",
    "network",
    "write_file"
  ],
  "required_controls": {
    "agent": [
      "sandbox_recommended",
      "graded_authorization"
    ],
    "admin": [
      "approval_process",
      "rollback_support",
      "full_audit"
    ]
  },
  "evidence": [
    {
      "file": "scripts/",
      "summary": "Executes local scripts or commands: (SKILL.md instruction) npx playwright screenshot --wait-for-timeout=600 \"file://$PWD/"
    },
    {
      "file": "网络端点",
      "summary": "Declares external network access: No network call code inside skill directory; runtime network surface only stems from `npx playwright` tool acquisition (npm registry + Chromium binary download)"
    },
    {
      "file": "本地工作目录",
      "summary": "File read/write and artifact output: Artifact itself: single scene.html (created by agent per output contract)"
    }
  ],
  "verification": {
    "method": "第二遍独立重读 + 反查：① 文件清单核对（skills/threejs-animation 下仅 SKILL.md、README.md(0 B)、references/r3f-and-perf.md、references/resource-disposal.md）；② token 扫描（URL / fetch / process.env / child_process / writeFile / API_KEY|TOKEN|SECRET / sandbox|bypass|no-verify）逐条回源；③ 反向验证能力声明：GLTF 交叉淡化、阻尼相机、InstancedMesh、useFrame、dispose 遍历、renderer.info 回归是否都有可运行片段；④ 与同仓另两个 skill 交叉比对档位（三者同为 blue）；⑤ 检查是否存在「文档承诺但文件不存在」的引用。",
    "second_pass": [
      {
        "item": "「skill 目录内无脚本、无 3D 资产」是否成立",
        "status": "ok",
        "detail": "文件清单实证：目录内只有 SKILL.md、README.md(0 B) 与两份 markdown reference；无 .glb/.gltf/.hdr/贴图，也无 package.json 或构建配置。引用到的 scripts/*.sh 属仓库根资产。"
      },
      {
        "item": "凭证/环境变量读取是否存在",
        "status": "ok",
        "detail": "本仓全仓正则 `process.env|API_KEY|TOKEN|SECRET|Authorization` 零命中；credential_reads 为空成立。"
      },
      {
        "item": "是否有更高的触发条件被漏掉（红档特征）",
        "status": "ok",
        "detail": "`sandbox|automationcontrolled|no-verify|stealth|bypass|ignoreHTTPSErrors|dangerously` 全仓零命中；无任意代码执行面（交付物在浏览器沙箱内运行用户自己的场景代码）。"
      },
      {
        "item": "「显存 GC 释放不了」的解释与处置是否自洽",
        "status": "ok",
        "detail": "文档先讲机制（GC 释放 JS 对象但释放不了上传的 WebGL buffer/texture），再给「该 dispose / 不用 dispose」清单，再给 disposeObject 遍历（含材质数组与 for…in 贴图槽），三者互证；scene.remove 的误解也单独点破：'it frees **nothing** on the GPU'。"
      },
      {
        "item": "R3F 自动 dispose 的边界声明是否有可验证手段",
        "status": "ok",
        "detail": "声明式自动 dispose vs imperative 泄漏的分界写得很具体，并要求 renderer.info.memory 挂载/卸载 10 次回归；references/resource-disposal.md 另附完整泄漏案例与 <DisposeOnUnmount> 方案，属可执行而非口号。"
      },
      {
        "item": "冻结 harness 与 mixer 的配合是否写对（易错点）",
        "status": "ok",
        "detail": "harness 段用 `mixer.setTime(elapsed)` 并注释 'setTime is absolute, not delta'，与循环里 `mixer.update(dt)` 的增量语义区分开，说明作者意识到差异，声明可信。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "50697d659fbf70152f48f9f8aadf1efe78bbdde1",
    "sha256": "de5e7ad51ab285c7db25caabcadab7ddb4dbabbd8ced31cd9f17b7dd2f5a6ecc",
    "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-28/threejs-animation.tar.gz",
    "sha256": "de5e7ad51ab285c7db25caabcadab7ddb4dbabbd8ced31cd9f17b7dd2f5a6ecc",
    "commit": "50697d659fbf70152f48f9f8aadf1efe78bbdde1"
  },
  "original": {
    "github": "https://github.com/iart-ai/webgl-animation-skills/tree/main/skills/threejs-animation",
    "path": "skills/threejs-animation",
    "commit": "50697d659fbf70152f48f9f8aadf1efe78bbdde1"
  }
}