{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "hand-drawn",
  "built": "2026-10-26",
  "control_level": 4,
  "control_level_label": "L4 高权限",
  "capabilities": [
    "execute_command",
    "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: scripts/render_prompt.py (called by agents when deterministic rendering is required; reads only STYLES.md and the anchor PNG, writing exclusively to stdout)"
    },
    {
      "file": "本地工作目录",
      "summary": "File I/O and artifact output: scripts/render_prompt.py: No disk writes (confirmed by actual run to output solely to stdout)."
    }
  ],
  "verification": {
    "method": "第二遍独立复核：① 不用第一遍结论，按 git ls-files 列全量受控文件（90 个，去掉 PNG 后逐个人工过目）核对资产面；② 对 scripts/*.py 做 import 与写盘点扫描（ast 解析 import + grep write/网络 token），确认只读与零网络；③ 实跑三条路径：普通画风渲染（触发占位符校验）、3.1 JSON 渲染（触发锚点校验与 JSON 合同）、3.1 主体注入（触发黑名单）；④ 文档承诺 vs 代码分支逐条对照（锚点像素、默认 JSON、text-only-preview、text/title 互斥）；⑤ STYLES.md 段落数与 PROTOCOL 声明的画风数对照；⑥ commit/许可/星标与 GitHub API 及本地 HEAD 对数。",
    "second_pass": [
      {
        "item": "渲染器零改写、零网络、零写盘",
        "status": "ok",
        "detail": "ast 解析 import：argparse/hashlib/json/re/struct 全是标准库；grep 命中 write_text/open('w')/requests/urllib/socket/http 全无（0 命中）。实跑输出只到 stdout。"
      },
      {
        "item": "占位符集校验真实生效",
        "status": "ok",
        "detail": "实跑 --style 1 传入配方不存在的 --var 标题词/未提供 主体 → 'render_prompt: 配方不包含这些占位符: 主体, 标题词'，退出码 2（stderr），说明不会把占位符或缺失项留在输出里。"
      },
      {
        "item": "3.1 锚点像素门禁真实生效",
        "status": "ok",
        "detail": "实跑 --style 3.1 --format json 成功；代码路径 build_payload → validate_style_3_1_anchor（尺寸 1086×1448 + 像素 SHA-256 常量比对，不匹配即 '停止正式生产'）；锚点文件与 provenance/privacy 审计文件均在包内。"
      },
      {
        "item": "随包锚点确实能过门禁（独立重算）",
        "status": "ok",
        "detail": "独立调用 render_prompt.png_pixel_sha256 重算随包资产：size=(1086,1448) 与 STYLE_3_1_ANCHOR_SIZE 相符，digest 与 STYLE_3_1_ANCHOR_PIXEL_SHA256 相符（两项 match=True）——即仓库当前分发的锚点就是被钉住的那一张，承诺可自证。"
      },
      {
        "item": "3.1 默认 JSON、text 需显式预览开关",
        "status": "ok",
        "detail": "main() 中 output_format 对 3.1 强制 json；text 且未加 --text-only-preview 时抛错（原文见 evidence）。实跑未加开关的 text 路径未单独跑，但分支为单行显式判断，且与 PROTOCOL.md 第 58 行表述一致。"
      },
      {
        "item": "主体画风注入检测真实生效",
        "status": "ok",
        "detail": "实跑 --subject '蜡笔质感的爸爸' → 报 '检测到疑似业务画风注入: 蜡笔质感, 质感'；实现为 STYLE_INJECTION_TERMS（35 词）+ STYLE_INJECTION_PATTERNS（比例/长度/加粗类正则）。"
      },
      {
        "item": "画风数与文档一致",
        "status": "ok",
        "detail": "STYLES.md 有 20 个 `##` 段 = 3.1 + 编号 1–18 + 附录 A 叠加层；SKILL.md 描述与 PROTOCOL 菜单均声明 18 种编号画风 + 3.1 变体，无虚报。"
      },
      {
        "item": "「不生图」边界成立",
        "status": "ok",
        "detail": "全仓库可执行代码仅 2 个 Python 文件，均无图像 API/HTTP 调用；SKILL.md、PROTOCOL.md、README.md 三处一致声明默认只输出 prompt，图像模型由用户自行使用。维护者验收例外只写在 AGENTS.md 的维护流程里。"
      },
      {
        "item": "锚点元数据与像素分离的说法可核",
        "status": "ok",
        "detail": "png_pixel_sha256 只拼接 IDAT 行数据算摘要，忽略元数据 chunk；provenance.json 显示元数据被改写后 pixelDigestChanged=false，与 PROTOCOL.md 第 54 行「元数据变化不改变画风身份，实际像素变化必须失败关闭」一致。"
      },
      {
        "item": "外部依赖清单为空是否为漏项",
        "status": "ok",
        "detail": "反查三个方向仍无线索：无 package.json/requirements.txt/CI 配置引用第三方包；脚本只 import 标准库；SKILL.md/PROTOCOL.md 未要求任何 CLI 之外的网络服务。因此仅记 python3 一项（可选）。"
      },
      {
        "item": "元数据与 pin 一致",
        "status": "ok",
        "detail": "本地 git HEAD = 7388c55d2a135e91eb62f5b6b2fc5300a5b0f40d，remote = github.com/threerocks/hand-drawn-styles；GitHub API：MIT、stargazers 1179、pushed_at 2026-09-04T03:10:16Z。注意 GitHub 仓库描述仍写「内置 5 种已验证画风」，与当前 18+1 种不符——属仓库简介未更新，不影响源码结论。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "7388c55d2a135e91eb62f5b6b2fc5300a5b0f40d",
    "sha256": "cc7b7797cb8fdf2862ccf8d68369f35bdaaf99abb453a3bf288711a9fabbfdd4",
    "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-15/hand-drawn.tar.gz",
    "sha256": "cc7b7797cb8fdf2862ccf8d68369f35bdaaf99abb453a3bf288711a9fabbfdd4",
    "commit": "7388c55d2a135e91eb62f5b6b2fc5300a5b0f40d"
  },
  "original": {
    "github": "https://github.com/threerocks/hand-drawn-styles",
    "path": "",
    "commit": "7388c55d2a135e91eb62f5b6b2fc5300a5b0f40d"
  }
}