{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "photo-slideshow",
  "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 in skill directory; SKILL.md/reference instructs agent to execute `node scripts/build-manifest."
    },
    {
      "file": "网络端点",
      "summary": "Declare external network access: No business API calls during execution; photos and music originate from user local files."
    },
    {
      "file": "本地工作目录",
      "summary": "File I/O and artifact output: Writes `photos.json`/`props.json`, `beats.json`, `out/<name>.mp4`, `out/*.gif` inside the user project"
    }
  ],
  "verification": {
    "method": "第一遍读全目录（SKILL.md + 四份 reference + 仓库根 scripts/），逐条摘录逐字引用；第二遍独立重读并找茬：① 逐文件核对「SKILL.md 要求 vs reference 实现」（发现 staticFile/delayRender 口径不一致）；② 用文件清单核对被引用的打包脚本是否真的存在（发现 build-manifest.mjs 与 beats.py 均未随包）；③ 交叉核对常量与阈值（base=1.05、0.15 阈值、每张 3–6s、每 2/4 拍）；④ token 扫描凭证面；⑤ 尝试定位隐私/元数据处理声明，记 unlocatable；⑥ 拼装脚本内置与 tools/verify_analysis.py 同口径的 quote 回源校验。仓库元数据 stars/last_push 取自 GitHub API 快照 2026-09-28。",
    "second_pass": [
      {
        "item": "图片加载门控口径是否实现一致",
        "status": "discrepancy",
        "detail": "SKILL.md 要求 staticFile() + delayRender/continueRender 门控，但 templating-folder.md 的 Slideshow 直接把 manifest 里的文件系统路径（join(dir, f)）交给 Img/KenBurnsImage，既未用 staticFile 也无 delayRender——照抄 reference 会拿不到 Remotion public/ 之外的资源，且仍可能出现空白帧。"
      },
      {
        "item": "被引用的「打包脚本」是否真的存在",
        "status": "discrepancy",
        "detail": "reference 以 `scripts/build-manifest.mjs` 文件名给出源码、SKILL.md 也写 `node scripts/build-manifest.mjs ./photos`，但仓库根 scripts/ 只有 seek-shot.sh / contact-sheet.sh / probe-mp4.sh，没有 build-manifest.mjs；`python beats.py` 同理（脚本内联在文档里）。使用前必须自行落盘。"
      },
      {
        "item": "起始 scale 与运动确定性口径",
        "status": "ok",
        "detail": "SKILL.md 的 start scale ≥ 1.05、seeded by index 与 ken-burns.md 的 `const base = 1.05;`、`mulberry32(index * 2654435761)` 完全一致。"
      },
      {
        "item": "适配策略与判据是否自洽",
        "status": "ok",
        "detail": "aspect-and-layout.md 的三策略表与 fitStrategy 阈值（<0.15 → cover）一致；SKILL.md 的 never stretch 与 blurred-pad 默认选择一致。"
      },
      {
        "item": "换片节奏的量化声明",
        "status": "ok",
        "detail": "timing-and-audio.md 的每张 3–6s、低于约 2.5s 会显仓促、每 2/4 拍换片，与 SKILL.md 的 photos hold ≥1 musical unit, not every beat 一致。"
      },
      {
        "item": "隐私面：照片元数据是否被提示处理",
        "status": "unlocatable",
        "detail": "manifest 读取 EXIF DateTimeOriginal 并把日期上屏，但全文未讨论照片 GPS/相机信息的处理与输出视频的元数据策略；源码内定位不到任何隐私处理声明，记 unlocatable（能力缺口，不作为档位依据）。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "2bd0dd19c9b2df5230f5d8f7453861b9681e49b4",
    "sha256": "58ffd9961bdf764e24234495db87a0d2e8ab971ed3188e94a419f757a2cd77fe",
    "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/photo-slideshow.tar.gz",
    "sha256": "58ffd9961bdf764e24234495db87a0d2e8ab971ed3188e94a419f757a2cd77fe",
    "commit": "2bd0dd19c9b2df5230f5d8f7453861b9681e49b4"
  },
  "original": {
    "github": "https://github.com/iart-ai/ecommerce-video-skills/tree/main/skills/photo-slideshow",
    "path": "skills/photo-slideshow",
    "commit": "2bd0dd19c9b2df5230f5d8f7453861b9681e49b4"
  }
}