{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "countdown-video",
  "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: (Verification loop explicitly specified in SKILL.md) `npx remotion still Countdown out/f-*.png --frame=N --pro"
    },
    {
      "file": "网络端点",
      "summary": "External network access declaration: (Optional, usually bypassed) `scripts/seek-shot.sh` invokes `npx -y playwright screenshot`: fetches from npm on first run "
    },
    {
      "file": "本地工作目录",
      "summary": "File I/O and artifact output: Remotion projects and out/countdown.mp4, out/demo.gif built by the agent following this skill"
    }
  ],
  "verification": {
    "method": "第二遍独立重读（换角度抓第一遍的错），全部取证于 pin commit 2a775336b5a638cbf8a61dbd785f9a1b649be016 的只读工作副本：① 目录清单 `find skills/countdown-video -type f` 只返回 4 个 .md，确认无脚本/资产；② 两份 reference 全量 grep `setInterval|Date.now|useCurrentFrame|durationInFrames`，逐条打开确认示例实现与纪律一致——组件体全部 useCurrentFrame 驱动，setInterval 在整个 skill 内只作为反例出现在 SKILL.md 的漂移说明里；③ 确认注册示例存在（countdown-cookbook.md 的 `<Composition … durationInFrames={DURATION_SECONDS * FPS}>`）且与 SKILL.md 的等式一致；④ 回读仓库根 scripts/{contact-sheet.sh,probe-mp4.sh,seek-shot.sh}，确认分别只调 ffmpeg hstack、ffprobe、`npx -y playwright screenshot`（本地 file://），无 curl/wget/外发；三仓库这三支脚本逐字节相同（md5 见 second_pass）；⑤ 把 SKILL.md 的验收断言（ceil 等式）与 reference 组件的取整实现逐行比对，同式。",
    "second_pass": [
      {
        "item": "「禁止 setInterval 递减」是否在 reference 的示例实现里也真的遵守（防第一遍只信 SKILL.md 的说法）",
        "status": "ok",
        "detail": "reference 全量 grep：countdown-cookbook.md 组件 `const frame = useCurrentFrame();`，注册处 `durationInFrames={DURATION_SECONDS * FPS}`；到日期的 web 组件 `Math.max(0, target - Date.now())` 每帧重算并自述 \"never a decrement\"；digit-flip.md 两个组件同样 `const frame = useCurrentFrame();`。setInterval 全 skill 仅作反例出现 1 次。"
      },
      {
        "item": "「倒计时结束时视频正好结束」是否真被约束住",
        "status": "ok",
        "detail": "SKILL.md 明写 `durationInFrames` = `durationInSeconds * fps`；cookbook 给出 \"Register it so `durationInFrames` matches the countdown exactly — the video ends when the timer does:\" 的注册片段；收尾清单第 2 条把它列为验收项。文档、示例、验收三者一致，不是单向声明。"
      },
      {
        "item": "「每分钟约丢 1 秒」的漂移量级是否有据",
        "status": "unlocatable",
        "detail": "SKILL.md 写 \"Reports of ~1 second lost per minute are common.\"，但仓库内无基准脚本、无引用、无数据文件；本次为只读侦查且不运行计时实验，故不验证该数值，仅记为文档声明，不在结论中当已核事实使用。"
      },
      {
        "item": "seek-shot.sh（Light tier）对本 skill 是否可用（防「Packaged helper」被读者误解为三条脚本都属本 skill）",
        "status": "ok",
        "detail": "scripts/README.md 把 seek-shot 归为「standalone HTML + `?t=N` harness」的 Light tier；本 skill 交付是 Remotion 组件（Heavy tier），SKILL.md 的 Packaged helper 行只点名 contact-sheet 与 probe-mp4。不存在悬空引用，也不存在被夸大的能力。"
      },
      {
        "item": "三仓库共享脚本是否同内容（跨包一致性）",
        "status": "ok",
        "detail": "md5 逐字节比对：contact-sheet.sh b7dcc28034c9bf8fda5d48683e54d8b5、probe-mp4.sh 167b7977c50f492014e1a6fef8c9ed12、seek-shot.sh 24a4130cd1e64874154429b0b4af12da，iart-tiktok / iart-text-message / iart-youtube 三包完全相同。"
      },
      {
        "item": "SKILL.md 是否声称了 reference 未兑现的能力（防文档夸大）",
        "status": "ok",
        "detail": "SKILL.md 承诺的四件事——可配置 duration、mm:ss 与 dd:hh:mm:ss、drift-free 计时、无缝循环背景——在 countdown-cookbook.md 与 digit-flip.md 里各有对应实现（§1 组件、§2 到日期、§4 循环、digit-flip 两组件），逐项可定位，无空头承诺。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "2a775336b5a638cbf8a61dbd785f9a1b649be016",
    "sha256": "2730e6053383cccb96592e7f72487c84be0f4ad59c4eb8298d32d9347c228d62",
    "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/countdown-video.tar.gz",
    "sha256": "2730e6053383cccb96592e7f72487c84be0f4ad59c4eb8298d32d9347c228d62",
    "commit": "2a775336b5a638cbf8a61dbd785f9a1b649be016"
  },
  "original": {
    "github": "https://github.com/iart-ai/tiktok-video-skills/tree/main/skills/countdown-video",
    "path": "skills/countdown-video",
    "commit": "2a775336b5a638cbf8a61dbd785f9a1b649be016"
  }
}