{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "chart-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": "Local script or command execution: No built-in scripts inside the skill directory; SKILL.md/reference instructs the agent to run `node scripts/build-props.mjs`"
    },
    {
      "file": "网络端点",
      "summary": "External network access declaration: No business API calls during execution; datasets are provided by the user via CSV/JSON."
    },
    {
      "file": "本地工作目录",
      "summary": "File I/O and artifact output: Writes `props/<name>.json`, `out/<name>.mp4`, `out/f-start.png`/`out/f-mid.p` inside user project"
    }
  ],
  "verification": {
    "method": "第一遍读全目录（SKILL.md + bar-chart-race.md + data-pipeline.md + 仓库根 scripts/），逐条摘录逐字引用；第二遍独立重读并找茬：① 逐行对照 SKILL.md 片段与 reference 实现（clamp 差异、示例帧号）；② 用算式复算 duration 公式与示例帧号（(rows-1)×1.5s×fps + hold）；③ 核对依赖清单是否在 SKILL.md 层完整（发现 csv-parse 缺失）；④ token 扫描凭证面；⑤ 拼装脚本内置与 tools/verify_analysis.py 同口径的 quote 回源校验。仓库元数据 stars/last_push 取自 GitHub API 快照 2026-09-28。",
    "second_pass": [
      {
        "item": "SKILL.md 是否声明了 CSV 解析依赖",
        "status": "discrepancy",
        "detail": "SKILL.md 通篇未提 `csv-parse`（只把 CSV→props 指向 data-pipeline.md），而 reference 直接 `import { parse } from \"csv-parse/sync\"`；依赖清单在 SKILL.md 层面不完整。"
      },
      {
        "item": "race 伪代码是否与 reference 的 clamp 要求一致",
        "status": "discrepancy",
        "detail": "SKILL.md 片段 `const f = easeInOut(t - i);` 未把 f 夹到 [0,1]，而 bar-chart-race.md 用 `Math.min(Math.max(tRow - i, 0), 1)` 并把它列入 pitfall 表（Last frame overshoots → Clamp f to [0,1]）；直接照抄 SKILL.md 片段会末帧过冲。"
      },
      {
        "item": "示例帧号与 reference 默认节奏是否对齐",
        "status": "discrepancy",
        "detail": "SKILL.md 验证示例给 `--frame=149 # last = durationInFrames - 1`（即 150 帧＝5s 总长），而 reference 默认 SECONDS_PER_ROW=1.5 且示例 4 行 → 195 帧（末帧 194）。公式正确但示例数字与 reference 算例不一致。"
      },
      {
        "item": "数字格式化口径是否全文一致",
        "status": "ok",
        "detail": "SKILL.md 与 data-pipeline/bar-chart-race 三处都用 Math.round() + Intl.NumberFormat(en-US) + font-variant-numeric: tabular-nums；percent 变体单独处理分数。"
      },
      {
        "item": "「D3 可用 scale 不可用 transition」的边界是否一致",
        "status": "ok",
        "detail": "SKILL.md 明说 D3 仍适合 scales and shapes，只是不用它的 timers；bar-chart-race.md 实际只 import scaleLinear、无任何 .transition() 调用。"
      },
      {
        "item": "时长推导与 calculateMetadata 声明",
        "status": "ok",
        "detail": "SKILL.md 要求数据相关时长在 calculateMetadata 计算，reference 用 (rows.length - 1) * SECONDS_PER_ROW * fps + hold * fps 推导总帧数，思路一致。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "8ce2709c3992490251e8a991535b1945f01c6865",
    "sha256": "a97e1c50769273d4b57ce969c6cd778fddc801b3d6426b57222464811b81b48a",
    "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/chart-animation.tar.gz",
    "sha256": "a97e1c50769273d4b57ce969c6cd778fddc801b3d6426b57222464811b81b48a",
    "commit": "8ce2709c3992490251e8a991535b1945f01c6865"
  },
  "original": {
    "github": "https://github.com/iart-ai/data-animation-skills/tree/main/skills/chart-animation",
    "path": "skills/chart-animation",
    "commit": "8ce2709c3992490251e8a991535b1945f01c6865"
  }
}