{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "day-in-my-life",
  "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 script or command: python3 scripts/harvest.py --out <film>/receipts.json (reads local transcripts only; --root defaults to ~/.c"
    },
    {
      "file": "网络端点",
      "summary": "Declares external network access: registry.npmjs.org: setup runs npm ci to install locked p5/p5.brush/puppeteer, plus npx --ye on every run"
    },
    {
      "file": "本地工作目录",
      "summary": "File I/O and artifact outputs: within film directory: receipts.json, story.json, story.js, index.html (rewrites data-duration), mus"
    }
  ],
  "verification": {
    "method": "第二遍独立重读 + 反查（换角度抓第一遍的错）：① 全量文件清单核对（22 个文件：SKILL.md + scripts/{harvest.py,new-film.mjs,shoot.mjs,score.py,qc.py,setup.sh,package.json,package-lock.json,requirements.txt} + assets/kit/{brush-ink.js,props.js,film.js,hf-bridge.js} + assets/template/{index.html,scenes.js,archetypes.json,hyperframes.json,story.example.json} + references/{story.md,look.md,score.md}）。② import/网络扫描：harvest.py 的 import 行只有标准库，score.py 只有 numpy/scipy/subprocess，shoot.mjs 只 page.goto 本地 file:// URL；全目录 process.env/os.environ 零命中。③ 逐条打开脚本核对调用点：SUFFICIENT 门槛（harvest.py:256）、无会话即退出（:137）、SECRET/EMAIL/PATH/URL 四条分支与 approved 提醒、chapters 校验分支、ffmpeg loudnorm 调用。④ 反例检查：专门找有没有隐藏上传或凭证读取（结论是没有）。",
    "second_pass": [
      {
        "item": "脚本是否读凭证（黄/橙分界的关键）",
        "status": "ok",
        "detail": "全目录 grep process.env / os.environ 零命中；harvest.py 走 argparse 参数（--root/--tz/--project），score.py/qc.py 无环境变量入口。new-film.mjs 的 SECRET 常量是用于**拒绝**凭证形状的正则，不是读取。因此橙档第一条不成立。"
      },
      {
        "item": "『Nothing is uploaded』声明是否真的成立",
        "status": "ok",
        "detail": "harvest.py（读转录）import 仅 argparse/collections/datetime/glob/json/os/re/statistics，无任何网络模块；score.py 只 subprocess 调 ffmpeg；shoot.mjs 只 page.goto('file://…')；qc.py 只跑 ffmpeg 解码。唯一出网行为是 setup 的 npm ci、每次 npx 取 hyperframes 与页面加载 Google Fonts。"
      },
      {
        "item": "Use 门槛（至少 10 个本地会话、跨 5 个活跃日）是否真在代码里",
        "status": "ok",
        "detail": "harvest.py:256 'enough': len(sessions) >= 10 and len(days) >= 5，并在运行摘要里打印 'enough material: {out[\"enough\"]}'；与 SKILL.md 的 Use 条件一致，且 SKILL.md 要求 enough 为 false 时停下。"
      },
      {
        "item": "隐私闸（凭证/邮箱/路径/URL）是否真有拦截面",
        "status": "ok",
        "detail": "new-film.mjs 的 validate() 对每章每个字符串字段：SECRET 命中 → errs（'looks like a credential; remove it'）；EMAIL 命中 → errs；PATH 命中 → errs；URL 命中 → warns。errs 非空即 exit 1，故是硬拦截。"
      },
      {
        "item": "『故事必须经用户批准』是否被强制",
        "status": "discrepancy",
        "detail": "SKILL.md 的 Rules 写 'Approval before render.'，但代码层面 story.approved 未置 true 时只产生一条 warn（'story.approved is not true: show the user every on-screen line …'），并不阻断 --sync 或渲染。也就是说这是一道人工程序纪律，不是技术门禁；SKILL.md 的措辞（`story.approved` is set only by the user's yes）容易被读成强制。该出入对 pin commit 有效。"
      },
      {
        "item": "『8 到 13 章』是否被校验",
        "status": "discrepancy",
        "detail": "SKILL.md Workflow 第 3 步写 '8 to 13 chapters.'，但 new-film.mjs 的 validate() 只校验：非空、首章必须是 intro、末章必须是 tag、kept 必须紧邻 tag 之前、各章型必需字段；没有章数上下限检查。故 8–13 是写作纪律而非校验规则。"
      },
      {
        "item": "单一时间轴声明是否成立（画面与配乐同源）",
        "status": "ok",
        "detail": "archetypes.json 的 about 明写 scenes.js 与 scripts/score.py『both read it』；score.py 文档行也声明读 story.json + archetypes.json（'the same table scenes.js draws from'）。两处一致，未见第二处时钟。"
      },
      {
        "item": "没有本地转录时的行为",
        "status": "ok",
        "detail": "harvest.py:137 'if not sessions: raise SystemExit(f\\'no sessions under {a.root}: nothing to harvest\\')'，且没有任何兜底造数路径；与 SKILL.md『this skill never invents receipts』一致。"
      },
      {
        "item": "配乐听感与片中同步的观感声明",
        "status": "unlocatable",
        "detail": "SKILL.md 声称『the typed \"claude\" is the theme』并逐拍拍点对齐；本次为只读侦查且不得运行 score.py/渲染，无法试听验证该听感，仅记录为文档声明（其数据来源 archetypes.json 的 96 BPM 网格可在源码内定位）。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "ba7a0bb6d3567d124c51f6074625043bfe0b32eb",
    "sha256": "94c054dd0a6d242e8a04af7de54724918a6ed7ce7bb1df9fccb36af76c47d44c",
    "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/day-in-my-life.tar.gz",
    "sha256": "94c054dd0a6d242e8a04af7de54724918a6ed7ce7bb1df9fccb36af76c47d44c",
    "commit": "ba7a0bb6d3567d124c51f6074625043bfe0b32eb"
  },
  "original": {
    "github": "https://github.com/heygen-com/hyperframes-community-skills/tree/main/skills/day-in-my-life",
    "path": "skills/day-in-my-life",
    "commit": "ba7a0bb6d3567d124c51f6074625043bfe0b32eb"
  }
}