{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "whiteboard-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": "Execution of local scripts or commands: npx playwright screenshot --wait-for-timeout=500 … (SKILL.md Verify loop inline command)"
    },
    {
      "file": "网络端点",
      "summary": "Declaration of external network access: The skill itself makes no business API calls; network exposure stems from the toolchain—npx fetches playwright packages from registry.npmjs.org and downloads Playwright browser binaries"
    },
    {
      "file": "本地工作目录",
      "summary": "File I/O and artifact output: frame-mid.png (SKILL.md inline screenshot example output), frame-<t>.png (seek-shot.sh output)"
    }
  ],
  "verification": {
    "method": "第二遍独立重读 + 反查（不沿用第一遍结论）：① 逐个复算 external_deps 的调用点是否真实存在（含仓库根 scripts/、reference 的 import 原文与字体建议）；② 对三份文档与仓库根 scripts/*.sh 做凭证/网络 token 扫描（API_KEY / token / env / curl / cookie），反查有无漏网外发；③ 清点 skill 目录资产面；④ 核对「手跟笔尖」的机制自洽性（dashoffset 与 hand transform 是否真由同一进度值驱动）；⑤ 复核 VO 语速口径与同 repo explainer-video 是否一致；⑥ 核对跨引用可解析性；⑦ 对齐 description 宣称与文中兑现的技术面。",
    "second_pass": [
      {
        "item": "外部依赖调用点复核（npx playwright / ffmpeg / GSAP 插件 / 字体）",
        "status": "ok",
        "detail": "SKILL.md Verify loop 内确有 `npx playwright screenshot --wait-for-timeout=500 \"file://$PWD/scribe.html?t=1.2\" frame-mid.png`；仓库根 scripts/seek-shot.sh 与 contact-sheet.sh 分别为 npx playwright 与 ffmpeg；draw-on-recipes 第 4 节确有 `import { DrawSVGPlugin } from \"gsap/DrawSVGPlugin\";` 与 MotionPathPlugin 版本；字体建议在 whiteboard-pipeline 第 3 节。四条均落地，非推测。"
      },
      {
        "item": "「手跟笔尖」机制自洽性",
        "status": "ok",
        "detail": "SKILL.md 的 drawOn 与 reference 的 drawOnWithHand 都把同一个 k 同时用于 `path.style.strokeDashoffset = len * (1 - k)` 与 `path.getPointAtLength(len * k)`，并有 liftTo 在笔画间抬手、unDraw 反向跟随——机制自洽，无「手与线不同源」的写法。"
      },
      {
        "item": "无凭证 / 无业务 API 反查",
        "status": "ok",
        "detail": "三份文档与仓库脚本中无 API_KEY/token/secret/.env 读取、无 curl/wget、无业务端点调用；GSAP 以裸包名 import（无内嵌 CDN URL），字体建议未附 URL。判橙依据是远程包依赖，不含凭据读取。"
      },
      {
        "item": "VO 语速口径跨 skill 一致性",
        "status": "ok",
        "detail": "本 skill 写「Estimate from VO at ~2.3 words/sec」，同 repo 的 explainer-video 写「~2.3 words/sec (140 wpm)」「scene_seconds = line_words / pace + 0.4」——口径一致，跨 skill 可互操作。"
      },
      {
        "item": "目录资产面清点",
        "status": "ok",
        "detail": "skills/whiteboard-animation/ 下仅 SKILL.md（154 行）、references/draw-on-recipes.md（210 行）与 references/whiteboard-pipeline.md（95 行）、0 字节 README.md；无 scripts/、无手部资产实物、无模板/数据——「纯指令 + 内联代码片段」结论成立（手部 PNG/SVG 由使用者自备，skill 只给标定方法）。"
      },
      {
        "item": "跨引用可解析性",
        "status": "ok",
        "detail": "SKILL.md 两处引用均可解析：`scripts/seek-shot.sh`、`scripts/contact-sheet.sh` 位于仓库根（单装本 skill 目录会悬空，需装整个 repo）；`see explainer-video` 指向的 explainer-video 确实存在于本 repo 的 skills/ 下。"
      },
      {
        "item": "功能声明 vs 实际能力",
        "status": "ok",
        "detail": "frontmatter 宣称覆盖 SVG stroke draw-on、跟随笔尖的手、错峰揭示、擦除/擦转场与旁白导出，正文与两份 reference 逐项兑现（含 GSAP 与 Remotion 两条实现路径）；未声称能自动生出手部素材或自动描摹——素材转换只给方法不给工具。"
      }
    ],
    "note": "结论仅对本 pin commit（3e2d411b725d9a72939cf8e5eb81579e751373e7）有效。",
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "3e2d411b725d9a72939cf8e5eb81579e751373e7",
    "sha256": "e46a8cf637ab1932d0722a5cdc1e6e4ab88a92611f2c9a3b150bd10f71daf74d",
    "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/whiteboard-animation.tar.gz",
    "sha256": "e46a8cf637ab1932d0722a5cdc1e6e4ab88a92611f2c9a3b150bd10f71daf74d",
    "commit": "3e2d411b725d9a72939cf8e5eb81579e751373e7"
  },
  "original": {
    "github": "https://github.com/iart-ai/explainer-video-skills/tree/main/skills/whiteboard-animation",
    "path": "skills/whiteboard-animation",
    "commit": "3e2d411b725d9a72939cf8e5eb81579e751373e7"
  }
}