{"id":"d187b505-4781-4360-a9cd-6c8e50a6416c","shortId":"XQQhNb","kind":"skill","title":"forge-doc-policy","tagline":"文档落地治理规范。统一管理 docs/ 目录下文档的写时约束、读时索引、生命周期标记。提供 SSoT 白名单（doc-paths.md）+ frontmatter schema + 新老项目装载脚本（init-project.sh / audit-project.sh）。所有 forge-* skill 的文档落地路径以本 skill 的 doc-paths.md 为准。触发方式：用户说\"文档治理\"、\"文档放哪\"、\"docs 目录乱了\"、\"forge-doc-policy\"、AI 准备创建任意 .md 或新目录前的自查。","description":"# /forge-doc-policy：文档落地治理规范\n\n> 这是一个**规范型 skill**，不主动产出代码或文档，作为其他 forge-* skill 和 LLM 自觉行为的**单一真相源（SSoT）**。\n>\n> 全程中文。\n\n---\n\n## 设计目标\n\n解决三层文档治理痛点：\n\n| 层级 | 痛点 | 本 skill 提供 |\n|---|---|---|\n| 写时约束 | AI 创建文档时落到错位置（forge skill 部分约束 + CLAUDE.md 表不全 + 直接对话完全无约束） | `doc-paths.md` 三层白名单 + LLM 强校验铁律 |\n| 读时索引 | 文档分散，找不到最新信息 | `frontmatter-schema.md` + `scripts/build-index.sh` 自动生成 `docs/INDEX.md` |\n| 生命周期 | 不带元数据，分不清活/死文档 | `frontmatter-schema.md` 必填字段 + `scripts/backfill-frontmatter.sh` 批量回填 |\n\n---\n\n## 文件清单\n\n| 文件 | 作用 | 状态 |\n|---|---|---|\n| `SKILL.md` | 本文件，元信息和装载说明 | ✅ v0.1 |\n| `doc-paths.md` | SSoT — 层 1+2+3 完整白名单 | ✅ v0.1 |\n| `frontmatter-schema.md` | frontmatter 字段定义（4 必填 + 2 选填） | ✅ v0.1 |\n| `claude-md-snippet.md` | 项目 CLAUDE.md 复制粘贴的引用段 | ✅ v0.1 |\n| `CHANGELOG.md` | 版本号 + 演进记录 | ✅ v0.1 |\n| `scripts/init-project.sh` | 新项目 day 0 一键脚手架 | ⏳ Sprint E |\n| `scripts/audit-project.sh` | 老项目接入兼容性审计 | ⏳ Sprint E |\n| `scripts/backfill-frontmatter.sh` | 批量 AI 回填 frontmatter | ⏳ Sprint C1 |\n| `scripts/build-index.sh` | 扫 frontmatter 生成 docs/INDEX.md | ⏳ Sprint C2 |\n| `hooks/post-stop-update-index.sh` | Stop hook 触发 INDEX 更新 | ⏳ Sprint C2 |\n| `templates/docs-skeleton/` | docs/ 标准目录骨架 | ⏳ Sprint E |\n| `templates/CLAUDE.md.tmpl` | 项目级 CLAUDE.md 模板 | ⏳ Sprint E |\n| `templates/.gitignore.tmpl` | 文档治理相关 .gitignore 规则 | ⏳ Sprint E |\n\n---\n\n## 装载方式（三选一，按场景）\n\n### 装载 1：项目 CLAUDE.md 引用（**当前主装载**，Sprint A）\n\n每个项目的 `CLAUDE.md`（项目根 / `~/claudecode_workspace/CLAUDE.md`）加 3 行引用段，详见 `claude-md-snippet.md`。\n\n**Why**：第 10 轮决策砍掉 PreToolUse hook，改 LLM 强校验自觉路线。规则源头在 SSoT，所有项目通过引用读取。\n\n### 装载 2：新项目 day 0（Sprint E）\n\n```bash\n~/claudecode_workspace/工具/forge-cookbook/skills/forge-doc-policy/scripts/init-project.sh\n```\n\n在新项目根跑一次：创建 docs/ 标准骨架 + 拷贝 CLAUDE.md 模板 + 配 .gitignore + 生成 docs/README.md。\n\n### 装载 3：老项目接入审计（Sprint E）\n\n```bash\n~/claudecode_workspace/工具/forge-cookbook/skills/forge-doc-policy/scripts/audit-project.sh\n```\n\n在已有项目根跑：检测偏差 + 输出 audit-report.md，用户确认后跑 `--fix` 自动补 frontmatter / 创建缺失目录。\n\n---\n\n## LLM 强校验铁律（每次创建 .md / 新目录前必须执行）\n\n> 本段被 `claude-md-snippet.md` 引用，写进每个项目 CLAUDE.md。\n\n1. **自查** — 核对目标路径是否在 `doc-paths.md` 的层 1 白名单内\n2. **违规处理** — 若不在白名单 / 介于多个目录 / 涉及新分类 → **停下问用户**（给 2-3 个候选路径）\n3. **合规处理** — 在白名单内 → 静默写入，不打断用户\n4. **铁律** — 违反 1-3 的写入即视为 bug，用户报告后 AI 必须立即移动文件 + 在 memory 加 feedback\n\n**Why 不上 PreToolUse hook**：第 10 轮 brainstorm 决策（追问 1）— Hook 误伤会让用户频繁被打断，3 次就会自己关掉，反而失效。LLM 自觉 + 违规才问 = 更友好且对 forge skill 已有约束的补强。\n\n---\n\n## 触发关键词\n\n| 用户说 | 行为 |\n|---|---|\n| \"文档治理\" / \"forge-doc-policy\" | 进入本 skill，按用户具体诉求路由（查白名单 / 装载 / 审计） |\n| \"文档放哪\" / \"这个文档应该放哪\" | 读 `doc-paths.md` 给路径建议 |\n| \"docs 目录乱了\" / \"想清理文档\" | 提示走 `audit-project.sh`（Sprint E 后可用） |\n| AI 准备创建任意 .md 或新目录 | 自查 `doc-paths.md` 三层白名单（LLM 强校验铁律） |\n\n---\n\n## 与其他 forge-* skill 的关系\n\n| skill | 关系 |\n|---|---|\n| 14 个 forge-* skill | 顶部加引用 `> 文档落地路径见 forge-doc-policy/doc-paths.md`，原 skill 私有路径合并到 SSoT |\n| forge-cookbook `_shared/` | 不重复造轮子。`_shared/visual-decision-layer.md` 等保留；本 skill 只管文档落地路径 |\n| 项目 CLAUDE.md / 工作区 CLAUDE.md | 引用本 skill 的 `claude-md-snippet.md`，不在 CLAUDE.md 重复规则 |\n\n---\n\n## 版本与演进\n\n- **v0.1**（2026-04-28）骨架 + SSoT 文件 + claude-md-snippet（Sprint A.1）\n- 后续版本演进见 `CHANGELOG.md`\n- 项目 CLAUDE.md 引用时**锁版本号**（如 `forge-doc-policy@v0.1`），SSoT 改动走 brainstorm worktree → audit-project.sh 跨项目预演 → 没炸再合 main","tags":["forge","doc","policy","skills","yike-gunshi","agent-skills","ai-development","claude-code","skill-md","skillsmp"],"capabilities":["skill","source-yike-gunshi","skill-forge-doc-policy","topic-agent-skills","topic-ai-development","topic-claude-code","topic-forge","topic-skill-md","topic-skillsmp"],"categories":["forge-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/yike-gunshi/forge-skills/forge-doc-policy","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add yike-gunshi/forge-skills","source_repo":"https://github.com/yike-gunshi/forge-skills","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 11 github stars · SKILL.md body (3,263 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:07:33.737Z","embedding":null,"createdAt":"2026-04-28T07:03:52.171Z","updatedAt":"2026-05-18T19:07:33.737Z","lastSeenAt":"2026-05-18T19:07:33.737Z","tsv":"'+2':104 '+3':105 '-04':397 '-28':398 '-3':272,283 '/claudecode_workspace':215,235 '/claudecode_workspace/claude.md':189 '/doc-paths.md':368 '/forge-cookbook/skills/forge-doc-policy/scripts/audit-project.sh':237 '/forge-cookbook/skills/forge-doc-policy/scripts/init-project.sh':217 '/forge-doc-policy':42 '0':128,211 '1':103,179,257,262,282,303 '10':197,298 '14':358 '2':113,208,264,271 '2026':396 '3':191,230,274,306 '4':111,279 'a.1':407 'ai':38,65,138,287,343 'audit-project.sh':19,339,424 'audit-report.md':241 'bash':214,234 'brainstorm':300,422 'bug':285 'c1':142 'c2':149,157 'changelog.md':121,409 'claud':403 'claude-md-snippet':402 'claude-md-snippet.md':116,194,253,390 'claude.md':70,118,165,181,187,223,256,384,386,392,411 'cookbook':375 'day':127,210 'doc':3,7,32,36,159,220,322,335,366,417 'doc-paths.md':14,26,73,100,260,333,348 'docs/index.md':83,147 'docs/readme.md':228 'e':131,135,162,168,174,213,233,341 'feedback':292 'fix':243 'forg':2,21,35,49,67,313,321,353,360,365,374,416 'forge-cookbook':373 'forge-doc-polici':1,34,320,364,415 'frontmatt':15,109,140,145,245 'frontmatter-schema.md':80,88,108 'gitignor':171,226 'hook':152,200,296,304 'hooks/post-stop-update-index.sh':150 'index':154 'init-project.sh':18 'llm':52,75,202,247,309,350 'main':427 'md':40,250,345,404 'memori':290 'polici':4,37,323,367,418 'pretoolus':199,295 'schema':16 'scripts/audit-project.sh':132 'scripts/backfill-frontmatter.sh':90,136 'scripts/build-index.sh':81,143 'scripts/init-project.sh':125 'share':376 'shared/visual-decision-layer.md':378 'skill':22,24,46,50,62,68,314,325,354,356,361,370,381,388 'skill-forge-doc-policy' 'skill.md':96 'snippet':405 'source-yike-gunshi' 'sprint':130,134,141,148,156,161,167,173,184,212,232,340,406 'ssot':12,55,101,205,372,400,420 'stop':151 'templates/.gitignore.tmpl':169 'templates/claude.md.tmpl':163 'templates/docs-skeleton':158 'topic-agent-skills' 'topic-ai-development' 'topic-claude-code' 'topic-forge' 'topic-skill-md' 'topic-skillsmp' 'v0.1':99,107,115,120,124,395,419 'worktre':423 '一键脚手架':129 '三层白名单':74,349 '三选一':176 '不上':294 '不主动产出代码或文档':47 '不在':391 '不带元数据':85 '不打断用户':278 '不重复造轮子':377 '与其他':352 '个':359 '个候选路径':273 '为准':27 '介于多个目录':267 '作为其他':48 '作用':94 '停下问用户':269 '元信息和装载说明':98 '全程中文':56 '关系':357 '写时约束':64 '写进每个项目':255 '决策':301 '准备创建任意':39,344 '分不清活':86 '创建':219 '创建文档时落到错位置':66 '创建缺失目录':246 '加':190,291 '单一真相源':54 '原':369 '反而失效':308 '只管文档落地路径':382 '合规处理':275 '后可用':342 '后续版本演进见':408 '和':51 '回填':139 '在':289 '在已有项目根跑':238 '在新项目根跑一次':218 '在白名单内':276 '复制粘贴的引用段':119 '如':414 '字段定义':110 '完整白名单':106 '审计':329 '层':102 '层级':59 '工作区':385 '工具':216,236 '已有约束的补强':315 '引用':182,254 '引用时':412 '引用本':387 '强校验自觉路线':203 '强校验铁律':76,248,351 '当前主装载':183 '必填':112 '必填字段':89 '必须立即移动文件':288 '想清理文档':337 '或新目录':346 '或新目录前的自查':41 '所有':20 '所有项目通过引用读取':206 '扫':144 '批量':137 '批量回填':91 '找不到最新信息':79 '拷贝':222 '按场景':177 '按用户具体诉求路由':326 '提供':11,63 '提示走':338 '改':201 '改动走':421 '文件':93,401 '文件清单':92 '文档分散':78 '文档放哪':31,330 '文档治理':30,319 '文档治理相关':170 '文档落地治理规范':5,43 '文档落地路径见':363 '新目录前必须执行':251 '新老项目装载脚本':17 '新项目':126,209 '更友好且对':312 '更新':155 '本':61,380 '本文件':97 '本段被':252 '查白名单':327 '标准目录骨架':160 '标准骨架':221 '核对目标路径是否在':259 '检测偏差':239 '模板':166,224 '次就会自己关掉':307 '死文档':87 '每个项目的':186 '每次创建':249 '没炸再合':426 '涉及新分类':268 '演进记录':123 '版本与演进':394 '版本号':122 '状态':95 '生命周期':84 '生命周期标记':10 '生成':146,227 '用户报告后':286 '用户确认后跑':242 '用户说':29,317 '痛点':60 '白名单':13 '白名单内':263 '的':25,389 '的关系':355 '的写入即视为':284 '的层':261 '的文档落地路径以本':23 '目录下文档的写时约束':8 '目录乱了':33,336 '直接对话完全无约束':72 '私有路径合并到':371 '第':196,297 '等保留':379 '给':270 '给路径建议':334 '统一管理':6 '老项目接入兼容性审计':133 '老项目接入审计':231 '自动生成':82 '自动补':244 '自查':258,347 '自觉':310 '自觉行为的':53 '若不在白名单':266 '行为':318 '行引用段':192 '表不全':71 '装载':178,207,229,328 '装载方式':175 '规则':172 '规则源头在':204 '规范型':45 '解决三层文档治理痛点':58 '触发':153 '触发关键词':316 '触发方式':28 '设计目标':57 '详见':193 '误伤会让用户频繁被打断':305 '读':332 '读时索引':9,77 '跨项目预演':425 '轮':299 '轮决策砍掉':198 '输出':240 '这个文档应该放哪':331 '这是一个':44 '进入本':324 '违反':281 '违规处理':265 '违规才问':311 '追问':302 '选填':114 '部分约束':69 '配':225 '重复规则':393 '铁律':280 '锁版本号':413 '静默写入':277 '顶部加引用':362 '项目':117,180,383,410 '项目根':188 '项目级':164 '骨架':399","prices":[{"id":"879c39b9-c681-48e8-89a9-7b8b8cf89eda","listingId":"d187b505-4781-4360-a9cd-6c8e50a6416c","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"yike-gunshi","category":"forge-skills","install_from":"skills.sh"},"createdAt":"2026-04-28T07:03:52.171Z"}],"sources":[{"listingId":"d187b505-4781-4360-a9cd-6c8e50a6416c","source":"github","sourceId":"yike-gunshi/forge-skills/forge-doc-policy","sourceUrl":"https://github.com/yike-gunshi/forge-skills/tree/main/skills/forge-doc-policy","isPrimary":false,"firstSeenAt":"2026-04-28T07:03:52.171Z","lastSeenAt":"2026-05-18T19:07:33.737Z"}],"details":{"listingId":"d187b505-4781-4360-a9cd-6c8e50a6416c","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"yike-gunshi","slug":"forge-doc-policy","github":{"repo":"yike-gunshi/forge-skills","stars":11,"topics":["agent-skills","ai-development","claude-code","forge","skill-md","skillsmp"],"license":"mit","html_url":"https://github.com/yike-gunshi/forge-skills","pushed_at":"2026-04-28T05:11:10Z","description":"Forge — 文档驱动的 AI 辅助开发框架 | Document-driven AI development framework with 14 Skills covering brainstorm → PRD → design → engineering → QA → review → ship → retrospective","skill_md_sha":"dc6620c7b6c44058b04c0a81c2e38e24cb70da32","skill_md_path":"skills/forge-doc-policy/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/yike-gunshi/forge-skills/tree/main/skills/forge-doc-policy"},"layout":"multi","source":"github","category":"forge-skills","frontmatter":{"name":"forge-doc-policy","description":"文档落地治理规范。统一管理 docs/ 目录下文档的写时约束、读时索引、生命周期标记。提供 SSoT 白名单（doc-paths.md）+ frontmatter schema + 新老项目装载脚本（init-project.sh / audit-project.sh）。所有 forge-* skill 的文档落地路径以本 skill 的 doc-paths.md 为准。触发方式：用户说\"文档治理\"、\"文档放哪\"、\"docs 目录乱了\"、\"forge-doc-policy\"、AI 准备创建任意 .md 或新目录前的自查。"},"skills_sh_url":"https://skills.sh/yike-gunshi/forge-skills/forge-doc-policy"},"updatedAt":"2026-05-18T19:07:33.737Z"}}