{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "promo-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": "Executes local scripts or commands: The skill directory contains no built-in scripts; SKILL.md/reference directs the agent to execute `node` (for validation/derivation, with source code embedded in documentation) and `npx re`"
    },
    {
      "file": "网络端点",
      "summary": "Declares external network access: No operational API calls during runtime; price and product data come from local offers/*.json, and product images come from the local public/ directory."
    },
    {
      "file": "本地工作目录",
      "summary": "File reads/writes and artifact outputs: Writes `out/<name>.mp4` (one per offer), `out/f-discount.png`, and `out/f-price.png` within the user project."
    }
  ],
  "verification": {
    "method": "第一遍读全目录（SKILL.md + references/promo-components.md + 仓库根 scripts/），逐条摘录逐字引用；第二遍独立重读并找茬：① 逐行核对 reference 组件与 SKILL.md 的「纯帧函数」铁律（发现 Countdown 使用 Date.now()）；② 核对 import/导出名（发现 AbstractFill 拼写错误）；③ 用算式复算折扣公式与节拍帧号；④ token 扫描凭证面；⑤ 拼装脚本内置与 tools/verify_analysis.py 同口径的 quote 回源校验。仓库元数据 stars/last_push 取自 GitHub API 快照 2026-09-28。",
    "second_pass": [
      {
        "item": "「全部为帧纯函数、禁用 Date.now()」与 reference 实现是否一致",
        "status": "discrepancy",
        "detail": "SKILL.md 明确要求所有动画值为 useCurrentFrame() 纯函数（no CSS transitions, timers, Date.now()），其自身示例也写「derived from a deadline prop (deterministic per frame)」；但 promo-components.md 的 Countdown 实际用 `const remaining = Math.max(0, (end - Date.now()) / 1000 - frame / fps);`——引入挂钟时间，同一 props 在不同时刻渲染会得到不同剩余时间，不可复现。"
      },
      {
        "item": "组件 import 名是否可运行",
        "status": "discrepancy",
        "detail": "promo-components.md 的 composition 写成 AbstractFill（Remotion 并无该导出，应为 AbsoluteFill），且使用处同样写 <AbstractFill …>；照抄会直接 import 失败。"
      },
      {
        "item": "折扣公式是否两处一致",
        "status": "ok",
        "detail": "SKILL.md 的 Math.round((1 - now / was) * 100) 与 priceModel 的 Math.round((1 - now / o.was) * 100) 同式同精度。"
      },
      {
        "item": "校验清单是否与 SKILL.md 文字一致",
        "status": "ok",
        "detail": "validateOffer 覆盖 now≥0 且 <was、discount∈(0,1)（当 now 未给）、code 非空、deadline 可解析、图片存在；与 SKILL.md 的 now < was / code present / image exists 一致且更强。"
      },
      {
        "item": "节拍/时长的一致性",
        "status": "ok",
        "detail": "SKILL.md 的 10s 节拍表与 reference 的帧调度（hook 0 / badge 27 / price 60 / code 210 / cta 270）及 --frames=0-299（10s@30fps）一致。"
      },
      {
        "item": "「先划线后落价」顺序的实现",
        "status": "ok",
        "detail": "PriceDrop 的 strike 从 f=0 起（0–12 帧画完），新价 spring 从 f-8 起跑；与 SKILL.md 的 strike the old price first 时序意图一致。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "2bd0dd19c9b2df5230f5d8f7453861b9681e49b4",
    "sha256": "0c3e003bf0617b1c15e4aa7ed68ad9e2ea387092a2dcde4fcadf54c1068b9b30",
    "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/promo-video.tar.gz",
    "sha256": "0c3e003bf0617b1c15e4aa7ed68ad9e2ea387092a2dcde4fcadf54c1068b9b30",
    "commit": "2bd0dd19c9b2df5230f5d8f7453861b9681e49b4"
  },
  "original": {
    "github": "https://github.com/iart-ai/ecommerce-video-skills/tree/main/skills/promo-video",
    "path": "skills/promo-video",
    "commit": "2bd0dd19c9b2df5230f5d8f7453861b9681e49b4"
  }
}