--- name: skeleton-gen description: A2 骨架生成——基于 docs/04 § 零 技术栈 + docs/01-需求清单/index.md 模块索引,生成项目专属的架构文档(docs/04 § 一+、docs/06、docs/07、docs/09)和工具脚本。固定工具文件走 cp,架构文档由 LLM 按大纲生成。 user-invocable: false allowed-tools: Read Write Edit Skill Grep Glob AskUserQuestion Bash(mkdir *) Bash(cp *) Bash(touch *) Bash(chmod *) Bash(git config *) Bash(cat *) Bash(bash *) --- **所有输出必须使用中文。** # skeleton-gen ## 执行步骤 ### 步骤 0:打印当前位置流程图 向用户展示当前在 A 阶段流程中的位置: ``` ┌──────────────────────────────────────────────────────┐ │ 📋 阶段 A:规划(一次性) │ │ │ │ A0 初始化项目 → A1 锁范围(REQ 卡片) │ │ ↓ │ │ ⏸ 等你审阅 REQ,重新运行 /plan-start 继续 │ │ ↓ │ │ ▶ A2 生成骨架 → A3 生成 DB 设计 → A4 初始化 DB → A5 生成下游文档│ │ ↓ │ │ 规划阶段到此结束 │ └──────────────────────────────────────────────────────┘ ``` ### A. 读取锁定的输入 用 `Read` 读取: - `docs/04-技术规范.md` § 零 技术栈表 - `docs/01-需求清单/index.md` 需求索引 - `docs/01-需求清单/` 需求卡片 后续所有内容都基于它们推导。 ### B.1 生成 3 个全新架构文档(docs/06 / 07 / 09) 对下表每个目标文件: 1. 读取对应的大纲模板 2. 基于步骤 A 的输入,按大纲生成项目专属内容 3. 剥掉 HTML 注释(注释是给 LLM 的提示,不应出现在最终文档里) 4. 写入目标路径 | 目标文件 | 大纲模板 | |---|---| | `docs/06-UI交互规范.md`(§ 一 ~ 四,§ 五 占位) | `${CLAUDE_SKILL_DIR}/templates/docs-06-static-template.md` | | `docs/07-环境配置.md` | `${CLAUDE_SKILL_DIR}/templates/docs-07-env-template.md` | | `docs/09-项目目录结构.md` | `${CLAUDE_SKILL_DIR}/templates/docs-09-structure-template.md` | 项目专属标识(根包名 / 命名空间)保留 `【人工填写:<说明>】` 占位,等人工在 docs/09 顶部补填一次后,其他文件复用。 ### B.2 追加 docs/04 § 一+(保留 § 零 不覆盖) docs/04 已由 scope-lock 写入 § 零。本步骤追加 § 一 ~ 三。 1. 读取 `docs/04-技术规范.md`(现有 § 零 完整内容)。 2. 读取 `${CLAUDE_SKILL_DIR}/templates/docs-04-skeleton-template.md`。 3. 基于技术栈,按大纲生成 § 一 ~ 三 的项目专属内容,剥掉 HTML 注释。 4. 拼接原有内容和新生成内容,写回 `docs/04-技术规范.md`。 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: - ` - [ ] 架构文档已生成(docs/04 § 一+、docs/06、docs/07、docs/09)` ### C. 生成工具脚本 #### C.1 复制 ```bash mkdir -p scripts .githooks sql/migrations touch sql/migrations/.gitkeep cp "${CLAUDE_SKILL_DIR}/templates/env-local-template" .env.local cp "${CLAUDE_SKILL_DIR}/templates/githooks-pre-push-template.sh" .githooks/pre-push cp "${CLAUDE_SKILL_DIR}/templates/scripts-setup-test-db-template.sh" scripts/setup-test-db.sh ``` #### C.2 渲染 scripts/test.sh 读取 `${CLAUDE_SKILL_DIR}/templates/scripts-test-template.sh`,基于步骤 A 的技术栈(docs/04)推断命令后写到 `scripts/test.sh`: - `{{build_cmd}}` 构建 - `{{lint_cmd}}` lint - `{{test_cmd}}` unit + integration - `{{e2e_cmd}}` E2E(无 E2E 则填 `echo "[test.sh] e2e 略"`) > 双端项目(backend + frontend)用 `(cd backend && ) && (cd frontend && )` 串联;单端直接写一条。 #### C.3 赋权 + 配置 git hooks ```bash chmod +x scripts/*.sh .githooks/pre-push git config core.hooksPath .githooks ``` 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: - ` - [ ] 工具脚本已生成(scripts/*.sh、.githooks/pre-push、.env.local)` ### D. 追加 .gitignore 忽略项 调用脚本完成合并: ```bash bash "${CLAUDE_SKILL_DIR}/scripts/merge-gitignore.sh" "${CLAUDE_SKILL_DIR}/templates/gitignore-append-template" ``` 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: - ` - [ ] .gitignore 已配置` ### E. 占位符补填 + QA 闸门 #### E.1 扫描 + 分组 用 `Grep` 在以下 8 个路径扫 `【人工填写:`,记录命中(文件 / 行号 / 说明): - `docs/04-技术规范.md` / `docs/06-UI交互规范.md` / `docs/07-环境配置.md` / `docs/09-项目目录结构.md` - `scripts/*.sh` / `.githooks/pre-push` / `.gitignore` - `.env.local` 分两组: - **敏感组**:`.env.local` 路径命中(凭据 / 密钥)。**不弹 QA**(凭据不进会话),E.3 提示用户自填。 - **非敏感组**:其余文件。按说明文字聚合为「根占位」(相同说明 = 同一值,多处共用)或「派生占位」(说明表达派生关系,如"后端 java 根包路径"派生自"根包名")。 无命中 → 跳 E.4。 #### E.2 问根占位 + 推派生 + 批量 Edit - 每个根占位用 `AskUserQuestion` 问(给合理默认值 + 自由输入),用 `Edit` 批量替换所有命中位置 - 派生占位**不问**,CC 基于根占位值推断后 `Edit`;不能可靠推断则回退当独立根占位问 #### E.3 敏感占位提示(不弹 QA) 若敏感组非空:打印提示横幅,列出 `.env.local` 待填字段名 + 告诉用户"直接编辑文件,凭据不进会话"。 #### E.4 验证 + QA 闸门 循环直到两条件**同时**满足: (a) `Grep` 重新扫 8 路径,0 命中 (b) 用户 `AskUserQuestion` 选「继续」 每次弹 QA 前重扫;有残留则打印残留位置清单(文件:行号 — 说明)+ 再弹 QA。 QA 横幅涵盖:产出文件清单(docs/04 / 06 / 07 / 09 + scripts/*.sh + .githooks/pre-push + .env.local + .gitignore)、占位状态(N=0 或待填清单)、「继续」/「有疑问先沟通」两选项。 通过后(N=0 且用户选「继续」),用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: - `- [ ] A2 骨架生成 — skeleton-gen` ### F. 进入 A3 输出 `skeleton-gen: 完成`,立即调用 `Skill(db-design-gen)`。 ## 参考 - `docs/04-技术规范.md` § 零(技术栈输入) - `docs/01-需求清单/index.md`(模块索引输入) - `${CLAUDE_SKILL_DIR}/templates/docs-04-skeleton-template.md`(大纲) - `${CLAUDE_SKILL_DIR}/templates/docs-06-static-template.md`(大纲) - `${CLAUDE_SKILL_DIR}/templates/docs-07-env-template.md`(大纲) - `${CLAUDE_SKILL_DIR}/templates/docs-09-structure-template.md`(大纲) - `${CLAUDE_SKILL_DIR}/templates/scripts-setup-test-db-template.sh`(0 槽位) - `${CLAUDE_SKILL_DIR}/templates/githooks-pre-push-template.sh`(0 槽位) - `${CLAUDE_SKILL_DIR}/templates/env-local-template`(0 槽位) - `${CLAUDE_SKILL_DIR}/templates/gitignore-append-template`(0 槽位) - `${CLAUDE_SKILL_DIR}/scripts/merge-gitignore.sh`(.gitignore 逐行判重合并脚本)