{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "product-demo-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": "Execute local scripts or commands: No bundled scripts inside the skill directory; reference instructs the agent to run `node capture.mjs` (Playwright capture, source code in docs)"
    },
    {
      "file": "网络端点",
      "summary": "Declare external network access: Capture phase: Headless Chromium accesses the **user-provided app URL** (e.g., app.example.com placeholder), which is the only network access in the skill path"
    },
    {
      "file": "本地工作目录",
      "summary": "File read/write and artifact output: Writes `public/shots/*.png` (capture artifacts), `out/f-settle.png`/`out/f-click.png`/`ou...` inside the user project"
    }
  ],
  "verification": {
    "method": "第一遍读全目录（SKILL.md + 两份 reference + 仓库根 scripts/），逐条摘录逐字引用；第二遍独立重读并找茬：① 逐段核对实现片段的可执行性（发现 Callout 的 g 包裹 HTML 问题）；② 核对示例 URL 与帧号是否可落地（发现 example.com 占位 URL）；③ 交叉核对常量口径（DPR 2、zoom ≤2×、16:9/9:16 安全区、步进预算表）；④ token 扫描凭证面并确认唯一的 cookie 字样属 CSS 隐藏横幅；⑤ 对「需登录页面如何抓图」做定位尝试，记 unlocatable；⑥ 拼装脚本内置与 tools/verify_analysis.py 同口径的 quote 回源校验。仓库元数据 stars/last_push 取自 GitHub API 快照 2026-09-28。",
    "second_pass": [
      {
        "item": "抓图脚本的目标 URL 是否可直接使用",
        "status": "discrepancy",
        "detail": "reference 的 SHOTS 列表硬编码 https://app.example.com/dashboard 等占位 URL（含 /reports/42?export=open 这类路径），原样运行必然失败；SKILL.md 未提示必须先替换成真实或本地 URL。"
      },
      {
        "item": "Callout 组件的可渲染性",
        "status": "discrepancy",
        "detail": "annotation-and-transitions.md 的 Callout 把 HTML div 包在 SVG 元素 g 里（g 只在 SVG 上下文有效），作为 React 组件直接放入 HTML 层会得到无效结构；该片段需改写才能用。"
      },
      {
        "item": "光标/涟漪与 clickAt 的因果同步是否有实现支撑",
        "status": "ok",
        "detail": "screenshot-demo.md 的 Cursor 用 since = frame - clickAt 同时驱动 ripple 与 press 缩放，并把「ripple 与状态变化不同帧」列入失败模式，与 SKILL.md 的因果同帧要求一致。"
      },
      {
        "item": "2× 抓取与 ≤2× 缩放口径",
        "status": "ok",
        "detail": "SD 的 deviceScaleFactor: 2（→2560×1600）与 SKILL.md/reference 的 zoom scale 2（个别 1.8）自洽。"
      },
      {
        "item": "多比例安全区口径",
        "status": "ok",
        "detail": "AT 的 16:9/9:16 表（caption 在下方 80–120px；9:16 保留中心 80% 宽、避开底部 18%）与 SKILL.md 的 Keep captions in the lower third 一致。"
      },
      {
        "item": "需登录的目标页如何处理",
        "status": "unlocatable",
        "detail": "skill 未提供任何会话/凭证注入方式（无 storageState、无 cookie 导入）；「需要登录的应用怎么抓图」源码内无解答，记 unlocatable（也正因此不存在凭证读取面）。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "2bd0dd19c9b2df5230f5d8f7453861b9681e49b4",
    "sha256": "1e7d345b4981c5dbf7fdbec8d73de6d17dde077bbbe4483881f65686e3a878fa",
    "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/product-demo-video.tar.gz",
    "sha256": "1e7d345b4981c5dbf7fdbec8d73de6d17dde077bbbe4483881f65686e3a878fa",
    "commit": "2bd0dd19c9b2df5230f5d8f7453861b9681e49b4"
  },
  "original": {
    "github": "https://github.com/iart-ai/ecommerce-video-skills/tree/main/skills/product-demo-video",
    "path": "skills/product-demo-video",
    "commit": "2bd0dd19c9b2df5230f5d8f7453861b9681e49b4"
  }
}