Commit 2ef891d4192449b76447788b09259223e182c159

Authored by zichun
1 parent 9508a552

feat(lite): merge project-init + scope-lock into lite-init, lite docs/08 checklist + CLAUDE template

skills/plan/lite-init/SKILL.md 0 → 100644
  1 +---
  2 +name: lite-init
  3 +description: 计划第 1 段——项目初始化 + 范围锁定。复制 CLAUDE.md/docs(01/04/08) 模板、依赖检查、git init,引导项目概述+技术栈+需求索引,生成 REQ 卡片骨架,停下等人工审阅 REQ。
  4 +user-invocable: false
  5 +allowed-tools: Glob Read Edit Grep Skill AskUserQuestion Bash(mkdir *) Bash(cp *) Bash(sed *) Bash(bash *) Bash(cat *) Bash(git init) Bash(command -v *) Bash(uname *) Bash(brew *) Bash(apt *) Bash(apt-get *) Bash(yum *) Bash(apk *) Bash(export PATH=*) Bash(echo *)
  6 +---
  7 +
  8 +**所有输出必须使用中文。**
  9 +
  10 +你负责完成计划第 ① 段:项目初始化 + 范围锁定。合并了原 project-init + scope-lock 的全部逻辑。
  11 +
  12 +## 执行步骤
  13 +
  14 +### 步骤 0:打印计划流程图
  15 +
  16 +用 `Bash` 向用户展示 lite 流程图(▶ 位于"计划 ①"):
  17 +
  18 +```bash
  19 +cat "${CLAUDE_PLUGIN_ROOT}/skills/crosscut/plan-start/banners/flow-lite.txt" 2>/dev/null || true
  20 +```
  21 +
  22 +> 注:`flow-lite.txt` 由 Task 7 创建,当前若文件不存在,命令静默忽略,不影响后续执行。
  23 +
  24 +打印分发横幅:
  25 +
  26 +```
  27 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  28 + [lite-init] 计划 ① 初始化 + 范围锁定
  29 + ▶ 当前位置:计划 ① / 共 ③
  30 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  31 +```
  32 +
  33 +### A. 幂等复制模板文件
  34 +
  35 +用 `Bash` 一次性完成。`cp -n` 表示"不覆盖已存在的文件":
  36 +
  37 +```bash
  38 +mkdir -p docs/01-需求清单
  39 +cp -n "${CLAUDE_SKILL_DIR}/templates/CLAUDE-template.md" CLAUDE.md
  40 +cp -n "${CLAUDE_SKILL_DIR}/templates/docs-01-index-template.md" docs/01-需求清单/index.md
  41 +cp -n "${CLAUDE_SKILL_DIR}/templates/docs-04-stack-template.md" docs/04-技术规范.md
  42 +cp -n "${CLAUDE_SKILL_DIR}/templates/docs-08-initial-template.md" docs/08-模块任务管理.md
  43 +```
  44 +
  45 +完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:
  46 +- ` - [ ] 项目文件骨架已创建(CLAUDE.md + docs/01 index + docs/04 + docs/08)`
  47 +
  48 +### B. 依赖检查 + 自动安装(命令行工具)
  49 +
  50 +对 **git、mysql** 两个工具依次执行以下流程:
  51 + 1. 如果缺失,尝试自动安装。
  52 + 2. 如果检测到不在 PATH,尝试添加进 PATH,并加载。
  53 +
  54 +全部通过后打印单行汇总再进入步骤 C:
  55 +
  56 +```
  57 +[lite-init] 依赖检查: git ✓ mysql ✓
  58 +```
  59 +
  60 +完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:
  61 +- ` - [ ] 依赖检查通过(git / mysql)`
  62 +
  63 +### C. 初始化 Git(如尚未初始化)
  64 +
  65 +用 `Glob` 检查 `.git/` 目录是否存在。
  66 +- 不存在 → 用 `Bash` 执行 `git init`。
  67 +- 已存在 → 跳过。
  68 +
  69 +完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:
  70 +- ` - [ ] Git 已初始化`
  71 +
  72 +打印完成横幅:
  73 +
  74 +```
  75 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  76 + [lite-init] 项目初始化完成
  77 +
  78 + 已创建:
  79 + ✓ CLAUDE.md(从插件模板复制)
  80 + ✓ docs/01-需求清单/index.md(待人工填写模块索引)
  81 + ✓ docs/04-技术规范.md(默认技术栈,步骤 E 让用户确认)
  82 + ✓ docs/08-模块任务管理.md(全流程进度跟踪)
  83 + 已勾选:初始化子项 3 项
  84 +
  85 + 下一步:引导项目概述 + 技术栈 + 需求索引 + 生成 REQ 卡片
  86 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  87 +```
  88 +
  89 +### D. 提示用户填写项目概述并等待
  90 +
  91 +向用户输出:
  92 +
  93 +```
  94 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  95 + [lite-init] 请填写项目概述
  96 +
  97 + 📄 文件位置: ./CLAUDE.md
  98 + 📌 编辑位置: § 🎯 项目概述
  99 +
  100 + 请将以下占位符替换为实际值:
  101 + - 项目名称
  102 + - 项目简述
  103 + - 目标用户
  104 + - 部署方式
  105 + 改完后回来选择「继续」。
  106 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  107 +```
  108 +
  109 +用 `AskUserQuestion` 询问:
  110 +- **question**: `项目概述填写完毕了吗?`
  111 + - 用户选择「继续」→ 用 `Grep` 在 `CLAUDE.md` 搜索 `【人工填写:`(限定 § 🎯 项目概述 节)。命中 → 打印残留行 + 路径,重新弹出同样的 AskUserQuestion;0 命中 → 勾选并进入步骤 E。
  112 + - 用户选择「有疑问想先沟通」→ 回答用户问题后,再次弹出同样的 QA。
  113 +
  114 +0 命中后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:
  115 +- ` - [ ] 项目概述已填写(CLAUDE.md § 🎯 项目概述)`
  116 +
  117 +### E. 提示用户检查默认技术栈并等待
  118 +
  119 +`docs/04-技术规范.md` 已由步骤 A 用模板复制(默认技术栈)。本步骤让用户检查 / 调整 § 零。
  120 +
  121 +向用户输出:
  122 +
  123 +```
  124 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  125 + [lite-init] 技术栈已保存
  126 +
  127 + 📄 文件位置: ./docs/04-技术规范.md(由模板生成)
  128 + 📌 编辑位置: § 零、技术栈总览
  129 +
  130 + 请检查技术栈表:
  131 + - 不需要的行直接删除(如纯后端项目删前端行)
  132 + - 需要替换的技术直接改
  133 + - 需要新增的条目直接加行
  134 + 改完后回来选择「继续」。
  135 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  136 +```
  137 +
  138 +用 `AskUserQuestion` 询问:
  139 +- **question**: `技术栈检查完毕了吗?`
  140 + - 用户选择「继续」→ 进入步骤 F。
  141 + - 用户选择「有疑问想先沟通」→ 回答用户问题后,再次弹出同样的 QA。
  142 +
  143 +完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:
  144 +- ` - [ ] 技术栈已确认(docs/04 § 零)`
  145 +
  146 +### F. 提示用户填写需求清单并等待
  147 +
  148 +`docs/01-需求清单/index.md` 已由步骤 A 写入占位符模板,这里让用户补齐模块清单。
  149 +
  150 +向用户输出:
  151 +
  152 +```
  153 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  154 + [lite-init] 请填写需求清单模块索引
  155 +
  156 + 📄 文件位置: ./docs/01-需求清单/index.md
  157 + 📌 编辑位置: § 模块索引(表格)
  158 +
  159 + 请按业务列出所有模块:
  160 + - 每行一个模块(如 SYS 系统管理 / PUR 采购 / SAL 销售)
  161 + - 「核心功能点」只需关键词,CC 会拆分为 REQ 卡片
  162 + 改完后回来选择「继续」。
  163 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  164 +```
  165 +
  166 +用 `AskUserQuestion` 询问:
  167 +- **question**: `需求清单模块索引填写完毕了吗?`
  168 + - 用户选择「继续」→ 进入步骤 G。
  169 + - 用户选择「有疑问想先沟通」→ 回答用户问题后,再次弹出同样的 QA。
  170 +
  171 +完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:
  172 +- ` - [ ] 需求清单索引已填写(docs/01-需求清单/index.md)`
  173 +
  174 +### G. 生成 REQ 卡片骨架并停下等人工审阅
  175 +
  176 +1. 用 `Grep` 校验 `docs/01-需求清单/index.md` 无 `【人工填写:` 残留;有则回步骤 F。
  177 +2. 用 `Read` 读 `index.md` 解析模块索引。
  178 +3. **单次 Bash 写入所有文件**(替代 N×9 次 Edit):
  179 +
  180 + - **每模块推断**:三元组 `{module_code, module_name, module_brief}` + N 个 REQ 的六元组 `{req_id, title, goal, rules, constraints, acceptance}`。`req_id`/`title` 从核心功能点拆分;`goal` 展开 `title`;`rules`/`constraints`/`acceptance` 起草业务语义。**不推断**输入 / 输出(模板原样保留示例)。
  181 + - **单次 Bash**:调 `${CLAUDE_SKILL_DIR}/scripts/render.sh` 落盘所有文件(脚本内部完成模板读取 + 占位符替换 + HTML 注释剥离)。下面是**调用形态**示例,`<MOD>` / `<模块名>` / `<REQ-MOD-NNN>` 等尖括号位置 CC 按 `index.md` 实际值替换:
  182 +
  183 + ```bash
  184 + R="${CLAUDE_SKILL_DIR}/scripts/render.sh"
  185 + # 每个模块:mkdir + 1 个 render module + N 个 render req(每 REQ 一行)
  186 + mkdir -p "docs/01-需求清单/<MOD>-<模块名>"
  187 + bash "$R" module "docs/01-需求清单/<MOD>-<模块名>/_module.md" "<MOD>" "<模块名>" "<module_brief>"
  188 + bash "$R" req "docs/01-需求清单/<MOD>-<模块名>/<REQ-MOD-NNN>.md" "<REQ-MOD-NNN>" "<title>" "<goal>" "<rules>" "<constraints>" "<acceptance>"
  189 + ```
  190 +
  191 + - **兜底**:值含字面 `$xxx` 或 `}}` 的 REQ 单独走 cp + Edit。
  192 +
  193 +4. 用 `Edit` 在 `docs/08-模块任务管理.md` 勾选(计划 ① 子项 + ① 顶层):
  194 + - ` - [ ] REQ 卡片骨架已生成(docs/01-需求清单/<module>/REQ-*.md)`
  195 + - `- [ ] 计划 ① 初始化 + 范围锁定 — lite-init`
  196 +
  197 +5. 打印停下横幅并**停止**,不自动派发 lite-design:
  198 +
  199 +```
  200 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  201 + [lite-init] ✅ 计划 ① 完成
  202 +
  203 + 产出:
  204 + ✓ CLAUDE.md § 🎯 项目概述
  205 + ✓ docs/04 § 零 技术栈
  206 + ✓ docs/01-需求清单/index.md 模块索引
  207 + ✓ docs/01-需求清单/<module>/_module.md 模块头
  208 + ✓ docs/01-需求清单/<module>/REQ-*.md REQ 卡片骨架
  209 +
  210 + ⏸ 现在请你逐张打开 REQ 卡片:
  211 + - **必改**:输入 / 输出 两段
  212 + · `表1` / `表2` 是模板示例,按本 REQ 业务**改字段 / 增删行 / 增删整张表**
  213 + - **审阅**:目标 / 跨字段规则 / 边界 / 验收(已起草,对照业务校正)
  214 + - **保留**:`TBD` 不要改,由之后流程自动回填
  215 +
  216 + 审阅完成后,运行以下命令进入计划 ②:
  217 + /erp-workflow:plan-start
  218 +
  219 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  220 +```
  221 +
  222 +> **STOP**:此处是人工审阅 REQ 的闸门。停止执行,等待用户运行 `/erp-workflow:plan-start` 后由 plan-start 派发 lite-design。
  223 +
  224 +## 参考
  225 +
  226 +- `${CLAUDE_SKILL_DIR}/templates/CLAUDE-template.md`(项目级 CLAUDE.md 模板)
  227 +- `${CLAUDE_SKILL_DIR}/templates/docs-01-index-template.md`(需求索引初稿)
  228 +- `${CLAUDE_SKILL_DIR}/templates/docs-04-stack-template.md`(默认技术栈)
  229 +- `${CLAUDE_SKILL_DIR}/templates/docs-08-initial-template.md`(计划阶段进度初始化)
  230 +- `${CLAUDE_SKILL_DIR}/templates/req-card-template.md`(REQ 卡片模板)
  231 +- `${CLAUDE_SKILL_DIR}/templates/_module-template.md`(模块头模板)
  232 +- `${CLAUDE_SKILL_DIR}/scripts/render.sh`(步骤 G 渲染助手,dispatch `module` / `req` 两种模式)
  233 +- 下游:人工审阅 REQ 后运行 `/erp-workflow:plan-start`,由 plan-start 派发 `lite-design`(计划 ②)
skills/plan/scope-lock/scripts/render.sh renamed to skills/plan/lite-init/scripts/render.sh
skills/plan/lite-init/templates/CLAUDE-template.md 0 → 100644
  1 +# CLAUDE.md — ERP项目 Claude Code 主指令文件
  2 +
  3 +> 本文件是 Claude Code 的"操作手册"。Claude Code 启动时会自动读取此文件。
  4 +
  5 +---
  6 +
  7 +## 🎯 项目概述
  8 +
  9 +- **项目名称**: 【人工填写:公司 + 项目名,例如"XX 公司 ERP 管理系统"】
  10 +- **项目简述**: 【人工填写:一句话描述项目目标,例如"面向中小制造企业的全流程 ERP,涵盖采购/库存/生产/销售/财务"】
  11 +- **目标用户**: 【人工填写:谁会用,例如"企业内部管理人员(采购员、仓管员、生产主管、销售员、财务人员、管理层)"】
  12 +- **部署方式**: 【人工填写:私有化部署 / 云部署 / Docker 容器化 等】
  13 +
  14 +---
  15 +
  16 +## 🔄 编码开发流程(统一循环)
  17 +
  18 +编码阶段入口:`/erp-workflow:coding-start`。所有模块统一走同一个 phase-driver 循环,无前后端分段。
  19 +
  20 +### 阶段路由(coding-start 内,只做分发)
  21 +
  22 +`coding-start` 每次入口扫描 `docs/08 § 二` 的 `里程碑:` 字段 + 本地 `git tag -l 'milestone/<id>'`,找第一个未打里程碑的模块分发到 `phase-driver`;所有模块里程碑均已打 → 输出"全部完成"。
  23 +
  24 +### 统一功能循环
  25 +
  26 +**模块循环(外)**:`phase-driver` → feature 循环 → `milestone`(本地 merge 进默认分支 + 打 `milestone/<id>` tag)→ 自动回调 `coding-start` 路由下一模块(无人工介入)。
  27 +
  28 +**功能循环(内,每个 REQ-XXX-NNN 一遍)**:`feature-spec` → `feature-tdd` → `feature-review`。
  29 +- `feature-review` verdict=approve → 勾选 docs/08 § 二 对应功能子项,继续下一 feature;
  30 +- 模块所有 feature 完成 → 调用 `milestone` 打里程碑 tag + 回调 `coding-start`。
  31 +
  32 +### 里程碑前守门
  33 +
  34 +- `milestone` 在打 tag 前内置测试闸门(后端:`scripts/test.sh`);红色不得跳过。
  35 +- 测试 / 验证统一派发到 Agent 子会话执行,主会话只接收结构化结论。
  36 +
  37 +---
  38 +
  39 +## ✅ 阶段完成判定规则
  40 +
  41 +`docs/08-模块任务管理.md` 分两段:
  42 +- `§ 一`:计划阶段三段(①②③)进度勾选
  43 +- `§ 二`:编码模块元数据表(每个模块一行 bullet,记录依赖 / 路径 / 里程碑 tag / 功能子项)
  44 +
  45 +**阶段完成判定**统一以 `里程碑:` 字段 + 本地 `git tag -l 'milestone/<id>'` 判定;子项勾选只作可视化进度,不参与完成判定。
  46 +
  47 +### 后端模块格式
  48 +
  49 +每个后端模块在 docs/08 § 二 中长这样:
  50 +
  51 +```markdown
  52 +- module_0 系统管理
  53 + - 依赖: —
  54 + - 路径: backend/module/sys/
  55 + - 里程碑: —
  56 + - 功能:
  57 + - [ ] REQ-SYS-001 用户登录
  58 + - [ ] REQ-SYS-002 用户注册
  59 +```
  60 +
  61 +- `里程碑:` 字段由 `milestone` 在打里程碑 tag 时从 `—` 改为 `milestone/<module_id>`。
  62 +- 每个 `REQ-*` 子项由 `feature-review` 在 verdict=approve 时自动勾选为 `[x]`。
  63 +
  64 +### 状态语义
  65 +
  66 +| `里程碑:` 字段 | `git tag -l` | 含义 | 你(Claude Code)的行为 |
  67 +|---|---|---|---|
  68 +| `—` | tag 不存在 | 该阶段未开始 / 进行中(未打里程碑) | ✅ 开始 / 继续该阶段开发 |
  69 +| `milestone/<id>` | tag 存在 | 阶段**已完成** | 🟢 进入下一未完成模块;全部完成 → 输出完成信息 |
  70 +
  71 +### 模块完成报告
  72 +
  73 +由 `milestone` skill 产出,模板由 milestone skill 持有。CC 不手写模块报告,仅填模板。
  74 +
  75 +---
  76 +
  77 +## 🏷️ 占位符统一约定
  78 +
  79 +项目文档里有 **2 种填写占位** + **1 种提示占位**:
  80 +
  81 +| 格式 | 谁填 | 使用阶段 | 说明 |
  82 +|------|-----|---------|------|
  83 +| `【人工填写:<简短说明>】` | 人 | 仅计划阶段文档 | 密钥 / 账密 / 包名 / 命名约定 / 小版本号等人工才能决定的值;编码阶段 plan/spec 禁止出现,查不到真值时用 `AskUserQuestion` 问用户 |
  84 +| `TBD(<责任人>)` | CC 自动 | 计划或编码 | 后缀附带责任方(如 `TBD(lite-design 自动补)` / `TBD(lite-build-db 自动补)`);由对应 skill 就地补填 |
  85 +
  86 +**HTML 注释 `<!-- ... -->`**:提示占位,是**插件内部大纲模板**里给 LLM 的**填空提示 / 章节引导**,指引 LLM 按结构填实际内容。skill 生成时会**剥除**这些注释,最终产物里注释不会保留。
  87 +
  88 +---
  89 +
  90 +## 📐 编码行为约束
  91 +
  92 +### 你必须做的 ✅
  93 +
  94 +1. **严格遵循** `docs/04-技术规范.md`——命名 / 编码 / 统一响应 / 异常处理 / 数据访问 / 配置与安全 / 环境配置(含 .env.local 字段说明)等项目专属技术规约全部在此
  95 +2. **每个后端接口** 必须先在 `docs/05-API接口契约.md` 定义,再编码实现
  96 +3. **每个功能可追溯到 `REQ-XXX-NNN`**——commit tag + 代码注释(如 `// REQ-SYS-001: 用户登录`)+ plan/spec 文件名均用此 tag
  97 +4. **遇到跨模块改动**(动到非当前模块的代码)——按 § 🟡 软规则 **S2** 执行(允许改,但必须留痕)
  98 +5. **遇到技术栈外组件引入**(`docs/04 § 零` 技术栈表外的框架 / 中间件 / 关键库),按 § 🟡 软规则 **S1** 执行(允许引入,但必须先 AskUserQuestion)
  99 +
  100 +### 你禁止做的 🚫
  101 +
  102 +1. **主会话直接 `mysql -e` 跑业务 DDL**(只读查询 / 临时本地调试除外)——业务 schema 必须走 `sql/migrations/V_n__*.sql`,详见下方 Schema 演化规约
  103 +2. **手动 Edit `docs/08 § 二` 的 `里程碑:` 字段**,必须由 `milestone` 自动回写
  104 +
  105 +### Schema 演化规约(Flyway migration)
  106 +
  107 +1. **文件命名**:`sql/migrations/V<n>__<snake_case_desc>.sql`,例:`V5__add_user_email_unique_index.sql`
  108 +2. **版本号分配**:建文件前 `ls sql/migrations/V*.sql` 查当前最大 n,新文件 `n_max + 1`
  109 +3. **Apply 方式**:Spring Boot 启动 / 测试启动时 Flyway 自动 apply(项目必须在 `pom.xml` 声明 `flyway-core` + `flyway-mysql` 依赖)。`scripts/setup-test-db.sh` 只负责清空库,不做 apply
  110 +4. **已合并的 migration 永不修改**:发现错了写一个补救 migration(如 `V7__fix_V5_index_name.sql`),旧 `V_n.sql` 不动
  111 +5. **临时调试 DDL**:临时在本地试字段/索引可手动 `mysql -e`,但不写 migration;下次 `setup-test-db.sh` 会 drop+create 清掉
  112 +6. **计划 ③ 生成的 V1**:`V1__initial_schema.sql` 是计划阶段由 `lite-build-db` 从 `docs/03-数据库设计文档.md`(lite-design 正向设计的 schema SSoT)翻译生成的初始版本;后续 V2/V3/... 由编码阶段每个 REQ 按需写入,**同时**反向同步更新 docs/03 对应表小节以保持 SSoT 一致
  113 +
  114 +---
  115 +
  116 +## 🗂️ Git 提交规范
  117 +
  118 +每次提交必须遵循以下格式:
  119 +
  120 +```
  121 +<type>(<scope>): <subject>
  122 +```
  123 +
  124 +- `scope`: 模块名,如 `user` / `inventory` / `order`
  125 +- `subject`: 简短描述;业务类(feat / fix / test)必须带 `REQ-XXX-NNN` 后缀
  126 +
  127 +`type` 含义:
  128 +
  129 +| type | 看到它意味着 |
  130 +|-----|-------------|
  131 +| `feat` | **新能力上线**——用户多了一个功能、接口、页面或业务规则 |
  132 +| `fix` | **修 bug**——原来行为错了,这次改对 |
  133 +| `refactor` | **重构**——外部行为不变,只改代码结构 / 命名 / 抽象 |
  134 +| `docs` | **文档改动**——只动 Markdown / 代码注释,不动实现 |
  135 +| `style` | **格式调整**——空白 / 缩进 / import 顺序,逻辑 0 变化 |
  136 +| `test` | **只动测试代码**——补用例 / 修 fixture,不碰实现 |
  137 +| `chore` | **流程维护**——构建 / 依赖 / 工具 / 证据档案 / 里程碑元数据等非业务动作 |
  138 +
  139 +---
  140 +
  141 +## 🚩 中断机制
  142 +
  143 +功能循环(每个功能 REQ-XXX 的 feature-spec → feature-tdd → feature-review)默认 **静默编程**,但触发以下任何一条必须**立刻停下、记录原因、等人决策**,不得自行绕过:
  144 +
  145 +| # | 中断 | 例子 |
  146 +| - | --- | --- |
  147 +| 1 | **测试反复失败** | 同一测试同一功能内连续 **10 次**修复失败 |
  148 +| 2 | **要改密钥 / 账密 / 包名** | 涉及 .env.local / docs/04 §零环境 中的密钥/账密字段 |
  149 +| 3 | **外部接口不可达** | 第三方 API 无法连接、证书失效等环境问题,并无法自行解决 |
  150 +
  151 +> 其余需要人类判断的场景一律走普通 `AskUserQuestion` Q&A,不中断、不写 Blocker 文件。
  152 +
  153 +**触发中断时的固定动作:**
  154 +
  155 +1. 在当前功能的 spec 文件里追加一节 `## 🚩 Blocker`(报告格式由 `interrupt-check` 的 `interrupt-block-template.md` 持有)
  156 +2. 停止后续所有功能的静默执行
  157 +3. 在主会话输出一句话摘要 + 指向 blocker 文件的路径,等人回复
  158 +
  159 +---
  160 +
  161 +## 🟡 软规则(允许继续,但有强制后续动作)
  162 +
  163 +以下情况 **不触发中断**,CC 可自行继续推进,但必须在约定位置留痕,模块完成时统一审计。
  164 +
  165 +| # | 软规则 | 允许动作 | 强制后续 |
  166 +| - | ----- | ------- | ------- |
  167 +| S1 | **技术栈外组件引入** | 用 `AskUserQuestion` 给用户三选一:接受引入 / 换方案 / 拒绝 | ① **接受** → 同会话直接在 `docs/04 § 零` 追加一行 → 继续流程 ② **换方案 / 拒绝** → 视为常规歧义澄清,继续 Q&A 收敛 ③ 不写 Blocker、不中断流程 |
  168 +| S2 | **跨模块改动** | **默认不改**,仅为当前模块实现所必需时允许修改 | ① hook `log-cross-module.sh` 自动落存根 ② `milestone` 在打里程碑前调用 `interrupt-check` skill 批量补齐「原因 / 影响评估」节 |
  169 +
  170 +---
  171 +
  172 +## 🧭 通用工作准则(General Principles)
  173 +
  174 +### 1. Think Before Coding
  175 +
  176 +**Don't assume. Don't hide confusion. Surface tradeoffs.**
  177 +
  178 +Before implementing:
  179 +- State your assumptions explicitly. If uncertain, ask.
  180 +- If multiple interpretations exist, present them - don't pick silently.
  181 +- If a simpler approach exists, say so. Push back when warranted.
  182 +- If something is unclear, stop. Name what's confusing. Ask.
  183 +
  184 +### 2. Simplicity First
  185 +
  186 +**Minimum code that solves the problem. Nothing speculative.**
  187 +
  188 +- No features beyond what was asked.
  189 +- No abstractions for single-use code.
  190 +- No "flexibility" or "configurability" that wasn't requested.
  191 +- No error handling for impossible scenarios.
  192 +- If you write 200 lines and it could be 50, rewrite it.
  193 +
  194 +Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.
  195 +
  196 +### 3. Surgical Changes
  197 +
  198 +**Touch only what you must. Clean up only your own mess.**
  199 +
  200 +When editing existing code:
  201 +- Don't "improve" adjacent code, comments, or formatting.
  202 +- Don't refactor things that aren't broken.
  203 +- Match existing style, even if you'd do it differently.
  204 +- If you notice unrelated dead code, mention it - don't delete it.
  205 +
  206 +When your changes create orphans:
  207 +- Remove imports/variables/functions that YOUR changes made unused.
  208 +- Don't remove pre-existing dead code unless asked.
  209 +
  210 +The test: Every changed line should trace directly to the user's request.
  211 +
  212 +### 4. Goal-Driven Execution
  213 +
  214 +**Define success criteria. Loop until verified.**
  215 +
  216 +Transform tasks into verifiable goals:
  217 +- "Add validation" → "Write tests for invalid inputs, then make them pass"
  218 +- "Fix the bug" → "Write a test that reproduces it, then make it pass"
  219 +- "Refactor X" → "Ensure tests pass before and after"
  220 +
  221 +For multi-step tasks, state a brief plan:
  222 +```
  223 +1. [Step] → verify: [check]
  224 +2. [Step] → verify: [check]
  225 +3. [Step] → verify: [check]
  226 +```
  227 +
  228 +Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.
  229 +
  230 +---
  231 +
  232 +## 🗺️ Skill 索引(erp-workflow-lite,共 11 个)
  233 +
  234 +### 入口
  235 +
  236 +| Skill | 描述 |
  237 +|-------|------|
  238 +| `plan-start` | 计划阶段入口——扫 docs/08 § 一找第一个未完成计划段(①②③)并派发 |
  239 +| `coding-start` | 编码阶段入口——扫 docs/08 § 二找第一个未打里程碑模块并派发 phase-driver |
  240 +
  241 +### 计划阶段
  242 +
  243 +| Skill | 描述 |
  244 +|-------|------|
  245 +| `lite-init` | 计划 ①——项目初始化 + 范围锁定(模板复制、依赖检查、git init、项目概述+技术栈+需求索引、REQ 卡片生成,停下等人工审阅) |
  246 +| `lite-design` | 计划 ②——脚手架 + 数据库设计(docs/04 § 一+、scripts、.env.local、docs/03 DB 设计,停下等人工审阅) |
  247 +| `lite-build-db` | 计划 ③——DB 初始化 + 下游文档(V1 migration apply、docs/05 API 契约、docs/08 § 二模块清单,计划阶段结束) |
  248 +
  249 +### 编码阶段
  250 +
  251 +| Skill | 描述 |
  252 +|-------|------|
  253 +| `phase-driver` | 模块驱动——加载当前模块 REQ 清单,逐个派发 feature 循环 |
  254 +| `feature-spec` | 功能规格——为 REQ 生成 spec 文档(API 签名、数据变更、边界) |
  255 +| `feature-tdd` | TDD 实现——按 spec 写测试先行,再实现,Agent 子会话跑测试 |
  256 +| `feature-review` | AI 代码审查——审查当前 REQ 实现,verdict approve/reject,approve 时勾选进度 |
  257 +| `milestone` | 里程碑——内置测试闸门(Agent 子会话),green 则本地 merge + 打 tag,生成模块完成报告 |
  258 +
  259 +### 守门
  260 +
  261 +| Skill | 描述 |
  262 +|-------|------|
  263 +| `interrupt-check` | 中断检查——触发中断条件时由功能循环 skill 调用,追加 Blocker 节并停止执行 |
  264 +
  265 +### 文档套件(5 文档)
  266 +
  267 +| 文档 | 职责 |
  268 +|------|------|
  269 +| `docs/01-需求清单/` | REQ 卡片目录(模块子目录 + index.md) |
  270 +| `docs/03-数据库设计文档.md` | 表/字段/索引/外键 SSoT(lite-design 生成,编码阶段同步更新) |
  271 +| `docs/04-技术规范.md` | 技术栈总览(§ 零)+ 架构规范 + 环境变量说明(含 .env.local 密钥字段) |
  272 +| `docs/05-API接口契约.md` | 所有后端接口契约(lite-build-db 生成,feature-spec 按需追加) |
  273 +| `docs/08-模块任务管理.md` | 全流程进度跟踪(§ 一计划 / § 二编码) |
skills/plan/scope-lock/templates/_module-template.md renamed to skills/plan/lite-init/templates/_module-template.md
skills/plan/project-init/templates/docs-01-index-template.md renamed to skills/plan/lite-init/templates/docs-01-index-template.md
skills/plan/project-init/templates/docs-04-stack-template.md renamed to skills/plan/lite-init/templates/docs-04-stack-template.md
skills/plan/lite-init/templates/docs-08-initial-template.md 0 → 100644
  1 +# 08-工作流进度
  2 +
  3 +> 全流程进度跟踪。CC 每完成一项产出就勾选一项。
  4 +> - **§ 一 计划阶段**:`plan-start` 找第一个未勾的计划段(①②③)分发到对应 skill
  5 +> - **§ 二 Coding(模块)**:`coding-start` 扫描 docs/08 § 二 的 `里程碑:` 字段 + 本地 `git tag -l 'milestone/<id>'`,找第一个未打里程碑模块分发。本 § 二 行序无语义,仅作模块元数据表
  6 +
  7 +## 一、计划阶段进度
  8 +
  9 +- [ ] 计划 ① 初始化 + 范围锁定 — lite-init
  10 + - [ ] 项目文件骨架已创建(CLAUDE.md + docs/01 index + docs/04 + docs/08)
  11 + - [ ] 依赖检查通过(git / mysql)
  12 + - [ ] Git 已初始化
  13 + - [ ] 项目概述已填写(CLAUDE.md § 🎯 项目概述)
  14 + - [ ] 技术栈已确认(docs/04 § 零)
  15 + - [ ] 需求清单索引已填写(docs/01-需求清单/index.md)
  16 + - [ ] REQ 卡片骨架已生成(docs/01-需求清单/<module>/REQ-*.md)
  17 +- [ ] 计划 ② 脚手架 + 数据库设计 — lite-design
  18 + - [ ] 架构文档已生成(docs/04 § 一+ | scripts/*.sh | .env.local | sql/migrations/)
  19 + - [ ] docs/03 数据库设计已生成(REQ → 表/字段/索引/外键,回填 REQ 依赖表)
  20 +- [ ] 计划 ③ DB 初始化 + 下游文档 — lite-build-db
  21 + - [ ] V1 migration 已生成并校验 + apply 到本地 MySQL
  22 + - [ ] docs/05 API 契约已生成 + 回填 REQ 依赖接口
  23 + - [ ] docs/08 § 二 模块清单(含 REQ 顺序)已生成
  24 +
  25 +## 二、Coding 阶段(模块循环)
  26 +
  27 +(lite-build-db 填入后,每行一个后端模块。每个模块的 `里程碑:` 字段在 `—` 和 `milestone/<id>` 之间变化,完成由本地 `git tag -l` 判定。`coding-start` 每次扫每模块的里程碑 tag 决定派发。所有模块打里程碑后整体完成。)
  28 +
  29 +<!-- 模块格式示例(由 lite-build-db 追加;功能子项由 feature-review 在 approve 时勾选):
  30 +- module_0 系统管理
  31 + - 依赖: —
  32 + - 路径: backend/module/sys/
  33 + - 里程碑: —
  34 + - 功能:
  35 + - [ ] REQ-SYS-001 用户登录
  36 + - [ ] REQ-SYS-002 用户注册
  37 +-->
skills/plan/scope-lock/templates/req-card-template.md renamed to skills/plan/lite-init/templates/req-card-template.md
skills/plan/project-init/SKILL.md deleted
1 ----  
2 -name: project-init  
3 -description: A0 项目初始化——从插件模板幂等地复制 CLAUDE.md / docs/01-需求清单/index.md / docs/04-技术规范.md / docs/08-模块任务管理.md(已存在则跳过),并初始化 Git(如未初始化)。session-start 在 docs/08 缺失时派发本 skill。  
4 -user-invocable: false  
5 -allowed-tools: Glob Edit Skill Bash(mkdir *) Bash(cp -n *) Bash(git init) Bash(command -v *) Bash(uname *) Bash(brew *) Bash(apt *) Bash(apt-get *) Bash(yum *) Bash(apk *) Bash(export PATH=*) Bash(echo *) Bash(cat *)  
6 ----  
7 -  
8 -**所有输出必须使用中文。**  
9 -  
10 -你负责在项目目录中创建初始文件结构,已存在的文件不覆盖。  
11 -  
12 -## 执行步骤  
13 -  
14 -### 步骤 0:打印当前位置流程图  
15 -  
16 -用 `Bash` 执行 `cat` 命令向用户展示当前位置流程图(stdout 即 ASCII 框图):  
17 -  
18 -```bash  
19 -cat "${CLAUDE_PLUGIN_ROOT}/skills/plan/project-init/banners/flow.txt"  
20 -```  
21 -  
22 -### A. 幂等复制模板文件  
23 -  
24 -用 `Bash` 一次性完成。`cp -n` 表示"不覆盖已存在的文件":  
25 -  
26 -```bash  
27 -mkdir -p docs/01-需求清单  
28 -cp -n "${CLAUDE_SKILL_DIR}/templates/CLAUDE-template.md" CLAUDE.md  
29 -cp -n "${CLAUDE_SKILL_DIR}/templates/docs-01-index-template.md" docs/01-需求清单/index.md  
30 -cp -n "${CLAUDE_SKILL_DIR}/templates/docs-04-stack-template.md" docs/04-技术规范.md  
31 -cp -n "${CLAUDE_SKILL_DIR}/templates/docs-08-initial-template.md" docs/08-模块任务管理.md  
32 -```  
33 -  
34 -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:  
35 -- ` - [ ] 项目文件骨架已创建(CLAUDE.md + docs/01-需求清单/index.md + docs/04-技术规范.md)`  
36 -  
37 -### B. 依赖检查 + 自动安装(命令行工具)  
38 -  
39 -对 **git、mysql** 两个工具依次执行以下流程。  
40 - 1. 如果缺失,尝试自动安装。  
41 - 2. 如果检测到不在 PATH,尝试添加进 PATH,并加载。  
42 -  
43 -全部通过后打印单行汇总再进入步骤 C:  
44 -  
45 -```  
46 -[project-init] 依赖检查: git ✓ mysql ✓  
47 -```  
48 -  
49 -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:  
50 -- ` - [ ] 依赖检查通过`  
51 -  
52 -### C. 初始化 Git(如尚未初始化)  
53 -  
54 -用 `Glob` 检查 `.git/` 目录是否存在。  
55 -- 不存在 → 用 `Bash` 执行 `git init`。  
56 -- 已存在 → 跳过。  
57 -  
58 -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选(A0 子项 + A0 顶层):  
59 -- ` - [ ] Git 已初始化`  
60 -- `- [ ] A0 项目初始化 — project-init`  
61 -  
62 -### D. 打印完成横幅并进入 A1  
63 -  
64 -向用户输出:  
65 -  
66 -```  
67 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  
68 - [project-init] 项目初始化完成  
69 -  
70 - 已创建:  
71 - ✓ CLAUDE.md(从插件模板复制)  
72 - ✓ docs/01-需求清单/index.md(待人工填写模块索引)  
73 - ✓ docs/04-技术规范.md(默认技术栈,A1 让用户确认)  
74 - ✓ docs/08-模块任务管理.md(全流程进度跟踪)  
75 - 已勾选:A0 项目初始化  
76 -  
77 - 下一步:A1 scope-lock(填写项目概述 + 技术栈 + 需求索引 + REQ 卡片)  
78 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  
79 -```  
80 -  
81 -立即调用 `Skill(scope-lock)` 进入 A1,不等用户手动输入。  
82 -  
83 -## 参考  
84 -  
85 -- `${CLAUDE_SKILL_DIR}/templates/CLAUDE-template.md`(项目级 CLAUDE.md 模板)  
86 -- `${CLAUDE_SKILL_DIR}/templates/docs-01-index-template.md`(需求索引初稿)  
87 -- `${CLAUDE_SKILL_DIR}/templates/docs-04-stack-template.md`(默认技术栈)  
88 -- `${CLAUDE_SKILL_DIR}/templates/docs-08-initial-template.md`(A 阶段进度初始化)  
89 -- 下游:`scope-lock`(A1,自动派发)  
skills/plan/project-init/banners/flow.txt deleted
1 -┌────────────────────────────────────────────────────────┐  
2 -│ 📋 阶段 A:规划(一次性) │  
3 -│ │  
4 -│ ▶ A0 初始化项目 │  
5 -│ ↓ │  
6 -│ A1 锁范围(生成 REQ 卡片) → 人工审核 │  
7 -│ ↓ │  
8 -│ A2 生成骨架 │  
9 -│ ↓ │  
10 -│ A3 生成 DB 设计 → 人工审核 │  
11 -│ ↓ │  
12 -│ A4 初始化 DB │  
13 -│ ↓ │  
14 -│ A5 生成下游文档 │  
15 -│ │  
16 -│ 规划阶段到此结束 │  
17 -└────────────────────────────────────────────────────────┘  
skills/plan/project-init/templates/CLAUDE-template.md deleted
1 -# CLAUDE.md — ERP项目 Claude Code 主指令文件  
2 -  
3 -> 本文件是 Claude Code 的"操作手册"。Claude Code 启动时会自动读取此文件。  
4 -  
5 ----  
6 -  
7 -## 🎯 项目概述  
8 -  
9 -- **项目名称**: 【人工填写:公司 + 项目名,例如"XX 公司 ERP 管理系统"】  
10 -- **项目简述**: 【人工填写:一句话描述项目目标,例如"面向中小制造企业的全流程 ERP,涵盖采购/库存/生产/销售/财务"】  
11 -- **目标用户**: 【人工填写:谁会用,例如"企业内部管理人员(采购员、仓管员、生产主管、销售员、财务人员、管理层)"】  
12 -- **部署方式**: 【人工填写:私有化部署 / 云部署 / Docker 容器化 等】  
13 -  
14 ----  
15 -  
16 -## 🔄 B 阶段开发流程(后端模块循环 → 前端整体阶段)  
17 -  
18 -B 阶段分两段,**全部固化到 skills**。入口:`/erp-workflow:coding-start`。  
19 -  
20 -### 阶段路由(coding-start 内,只做分发)  
21 -  
22 -`coding-start` 每次入口做两段完成性检查后真值表派发:  
23 -  
24 -- 后端完成性检查 → `backend_done`(扫 docs/08 § 二 里程碑字段 + `git tag -l`)  
25 -- 前端完成性检查 → `frontend_done`(扫 docs/08 § 三 整体里程碑 + `git tag -l`)  
26 -  
27 -| `backend_done` | `frontend_done` | 派发 |  
28 -|---|---|---|  
29 -| `false` | 任意 | `module-start`(写后端) |  
30 -| `true` | `false` | `frontend-start`(写前端) |  
31 -| `true` | `true` | "所有阶段已完成" |  
32 -  
33 -前端阶段前置(prototype/ 门禁)由 `frontend-start` 自带,不在 coding-start。`module-start` 与 `frontend-start` **互不感知对方**。  
34 -  
35 -### 后端阶段(每模块一个里程碑 tag)  
36 -  
37 -- **模块循环(外)**:`module-start` → `test-gate(phase=backend)` → `module-report` → `milestone-tag`(本地 merge 进默认分支 + 打 `milestone/<id>` tag)→ 自动回调 coding-start 路由下一阶段(无人工介入)  
38 -- **功能循环(内,每 REQ-XXX-NNN 一遍)**:`feature-brainstorm` → `feature-plan` → `feature-tdd` → `feature-verify` → `feature-review`  
39 -- 后端阶段任务严格落在 `backend/` 路径下;docs/01 REQ 卡片的 UI 描述在此阶段忽略,UI 推迟到前端阶段。  
40 -  
41 -### 前端阶段(整体一个里程碑 tag,所有后端模块打里程碑后启动)  
42 -  
43 -- **FE 清单(AI 自主推导,无审阅断点)**:`frontend-start` 进入时扫 prototype + docs/01 + docs/05 → AI 自主推导 FE 业务功能清单写入 `docs/08 § 三`(已有则加载)。**FE 是业务功能粒度,与 prototype HTML 文件数无关**——一个 HTML 可拆多个 FE,多个 HTML 也可合成一个 FE。FE 清单的合理性由 fe-feature-review / milestone-tag 在整体里程碑标记时一并校核(全程无人工介入)。  
44 -- **FE 循环(外)**:`frontend-start` → fe-feature 循环 → `test-gate(phase=frontend)` → `module-report(phase=frontend)` → `milestone-tag`(分支 `frontend-phase`,docs/08 § 三 整体里程碑)。  
45 -- **FE 功能循环(内,每个 FE-NN 一遍)**:`fe-feature-brainstorm` → `fe-feature-plan` → `fe-feature-tdd` → `fe-feature-verify` → `fe-feature-review`(专用 `fe-code-reviewer` agent,硬编码 7 维 review checklist)  
46 -- 前端阶段任务严格落在 `frontend/` 路径下;布局以 `prototype/` 为权威。  
47 -  
48 -### 里程碑前测试闸门  
49 -  
50 -- `test-gate`:后端阶段子会话跑 `scripts/test.sh`(含本模块新增 + 已合并模块回归);前端阶段子会话跑 vitest + playwright。  
51 -- `test-gate` 是打里程碑 tag 前唯一的硬测试门;红色不得跳过进入 `module-report` / `milestone-tag`。  
52 -  
53 ----  
54 -  
55 -## ✅ 阶段完成判定规则  
56 -  
57 -`docs/08-模块任务管理.md` 分两段:  
58 -- `§ 二`:后端模块元数据表(每个模块一行 bullet,记录依赖 / 路径 / 里程碑 tag / 功能子项)  
59 -- `§ 三`:前端阶段元数据(整体里程碑 + FE 子项清单,由 `frontend-start` 在所有后端模块打里程碑后填入)  
60 -  
61 -**阶段完成判定**统一以 `里程碑:` 字段(§ 二 各模块) / `整体里程碑:` 字段(§ 三)+ 本地 `git tag -l 'milestone/<id>'` 判定;子项勾选只作可视化进度,不参与完成判定。  
62 -  
63 -### 后端模块格式  
64 -  
65 -每个后端模块在 docs/08 § 二 中长这样:  
66 -  
67 -```markdown  
68 -- module_0 系统管理  
69 - - 依赖: —  
70 - - 路径: backend/module/sys/  
71 - - 里程碑: —  
72 - - 功能:  
73 - - [ ] REQ-SYS-001 用户登录  
74 - - [ ] REQ-SYS-002 用户注册  
75 -```  
76 -  
77 -- `里程碑:` 字段由 `milestone-tag` 在打里程碑 tag 时从 `—` 改为 `milestone/<module_id>`。  
78 -- 每个 `REQ-*` 子项由 `feature-review` 在 `verdict=approve` 时自动勾选为 `[x]`。  
79 -- 路径限定为后端目录(如 `backend/module/sys/`);前端代码不在此阶段产生。  
80 -  
81 -### 前端阶段格式(§ 三)  
82 -  
83 -```markdown  
84 -- 整体里程碑: —  
85 -- 功能:  
86 - - [ ] FE-01 用户登录与注册 | 关联 REQ:REQ-SYS-001, REQ-SYS-002 | 关联原型:prototype/auth.html  
87 - - [ ] FE-02 仪表盘总览 | 关联 REQ:REQ-DASH-001 | 关联原型:prototype/dashboard.html  
88 -```  
89 -  
90 -- `整体里程碑:` 字段由 `milestone-tag` 在打前端里程碑 tag 时从 `—` 改为 `milestone/frontend-phase`。  
91 -- "功能:" 列表由 `frontend-start` 进入时由 AI 自主推导写入(无人工审阅断点)。FE 是业务功能粒度,与 prototype HTML 文件数无关;合理性由 fe-feature-review / 整体里程碑标记时统一校核。  
92 -- 每个 `FE-NN` 子项由 `fe-feature-review` 在 `verdict=approve` 时自动勾选为 `[x]`。  
93 -- 进入前端阶段前 `frontend-start` 步骤 1 自带 prototype/ 门禁,强制检查项目根 `prototype/` 至少含 1 个 `*.html` mockup。  
94 -  
95 -### 状态语义(后端模块 + 前端阶段共用)  
96 -  
97 -| `里程碑:` 字段 | `git tag -l` | 含义 | 你(Claude Code)的行为 |  
98 -|---|---|---|---|  
99 -| `—` | tag 不存在 | 该阶段未开始 / 进行中(未打里程碑) | ✅ 开始 / 继续该阶段开发 |  
100 -| `milestone/<id>` | tag 存在 | 阶段**已完成** | 🟢 后端:进入下一未完成模块;后端全完 → 前端阶段;前端已打里程碑 → 全部完成 |  
101 -  
102 -### 模块完成报告  
103 -  
104 -由 `module-report` skill 产出,模板位于 由 module-report skill 持有(12 节标准化,含跨模块改动等 CLAUDE.md 软规则映射节)。CC 不手写模块报告,仅填模板。  
105 -  
106 ----  
107 -  
108 -## 🏷️ 占位符统一约定  
109 -  
110 -项目文档里有 **2 种填写占位** + **1 种提示占位**:  
111 -  
112 -| 格式 | 谁填 | 使用阶段 | 说明 |  
113 -|------|-----|---------|------|  
114 -| `【人工填写:<简短说明>】` | 人 | 仅 A 阶段文档 | 密钥 / 账密 / 包名 / 命名约定 / 小版本号等人工才能决定的值;B 阶段 plan/spec 禁止出现,查不到真值时用 `AskUserQuestion` 问用户 |  
115 -| `TBD(<责任人>)` | CC 自动 | A 或 B | 后缀附带责任方(如 `TBD(A3 自动补)` / `TBD(A5 自动补)`);由对应 skill 就地补填,`module-report` § ⑦ 检查 `TBD(CC 补)` 残留 |  
116 -  
117 -**HTML 注释 `<!-- ... -->`**:提示占位,是**插件内部大纲模板**里给 LLM 的**填空提示 / 章节引导**,指引 LLM 按结构填实际内容。skill 生成时会**剥除**这些注释,最终产物里注释不会保留。  
118 -  
119 ----  
120 -  
121 -## 📐 编码行为约束  
122 -  
123 -### 你必须做的 ✅  
124 -  
125 -1. **严格遵循** `docs/04-技术规范.md`——命名 / 编码 / 统一响应 / 异常处理 / 数据访问 / 配置与安全 等项目专属技术规约全部在此  
126 -2. **严格遵循** `docs/09-项目目录结构.md`——文件放对位置  
127 -3. **每个后端接口** 必须先在 `docs/05-API接口契约.md` 定义,再编码实现  
128 -4. **每个功能可追溯到 `REQ-XXX-NNN`**——commit tag + 代码注释(如 `// REQ-SYS-001: 用户登录`)+ plan/spec 文件名均用此 tag  
129 -5. **遇到跨模块改动**(动到非当前模块的代码)——按 § 🟡 软规则 **S2** 执行(允许改,但必须留痕)  
130 -6. **遇到技术栈外组件引入**(`docs/04 § 零` 技术栈表外的框架 / 中间件 / 关键库),按 § 🟡 软规则 **S1** 执行(允许引入,但必须先 AskUserQuestion)  
131 -  
132 -### 你禁止做的 🚫  
133 -  
134 -1. **主会话直接 `mysql -e` 跑业务 DDL**(只读查询 / 临时本地调试除外)——业务 schema 必须走 `sql/migrations/V_n__*.sql`,详见下方 Schema 演化规约  
135 -2. **手动 Edit `docs/08 § 二/§ 三` 的 `里程碑:` / `整体里程碑:` 字段**,必须要由 `milestone-tag` 自动回写  
136 -  
137 -### Schema 演化规约(Flyway migration)  
138 -  
139 -1. **文件命名**:`sql/migrations/V<n>__<snake_case_desc>.sql`,例:`V5__add_user_email_unique_index.sql`  
140 -2. **版本号分配**:建文件前 `ls sql/migrations/V*.sql` 查当前最大 n,新文件 `n_max + 1`  
141 -3. **Apply 方式**:Spring Boot 启动 / 测试启动时 Flyway 自动 apply(项目必须在 `pom.xml` 声明 `flyway-core` + `flyway-mysql` 依赖)。`scripts/setup-test-db.sh` 只负责清空库,不做 apply  
142 -4. **已合并的 migration 永不修改**:发现错了写一个补救 migration(如 `V7__fix_V5_index_name.sql`),旧 `V_n.sql`  
143 -5. **临时调试 DDL**:临时在本地试字段/索引可手动 `mysql -e`,但不写 migration;下次 `setup-test-db.sh` 会 drop+create 清掉  
144 -6. **A4 生成的 V1**:`V1__initial_schema.sql` 是 A 阶段由 `db-init` 从 `docs/03-数据库设计文档.md`(A3 正向设计的 schema SSoT)翻译生成的初始版本;后续 V2/V3/... 由 B 阶段每个 REQ 按需写入,**同时**反向同步更新 docs/03 对应表小节以保持 SSoT 一致  
145 -  
146 ----  
147 -  
148 -## 🗂️ Git 提交规范  
149 -  
150 -每次提交必须遵循以下格式:  
151 -  
152 -```  
153 -<type>(<scope>): <subject>  
154 -```  
155 -  
156 -- `scope`: 模块名,如 `user` / `inventory` / `order`  
157 -- `subject`: 简短描述;业务类(feat / fix / test)必须带 `REQ-XXX-NNN` 后缀  
158 -  
159 -`type` 含义:  
160 -  
161 -| type | 看到它意味着 |  
162 -|-----|-------------|  
163 -| `feat` | **新能力上线**——用户多了一个功能、接口、页面或业务规则 |  
164 -| `fix` | **修 bug**——原来行为错了,这次改对 |  
165 -| `refactor` | **重构**——外部行为不变,只改代码结构 / 命名 / 抽象 |  
166 -| `docs` | **文档改动**——只动 Markdown / 代码注释,不动实现 |  
167 -| `style` | **格式调整**——空白 / 缩进 / import 顺序,逻辑 0 变化 |  
168 -| `test` | **只动测试代码**——补用例 / 修 fixture,不碰实现 |  
169 -| `chore` | **流程维护**——构建 / 依赖 / 工具 / 证据档案 / 里程碑元数据等非业务动作 |  
170 -  
171 ----  
172 -  
173 -## 🚩 中断机制  
174 -  
175 -功能循环(每个功能 REQ-XXX 的 Brainstorm → Plan → TDD → Verify → AI 自审)默认 **静默编程**,但触发以下任何一条必须**立刻停下、记录原因、等人决策**,不得自行绕过:  
176 -  
177 -| # | 中断 | 例子 |  
178 -| - | --- | --- |  
179 -| 1 | **测试反复失败** | 同一测试同一功能内连续 **10 次**修复失败 |  
180 -| 2 | **要改密钥 / 账密 / 包名** | `docs/07-环境配置.md` 里由人工标注必须填的字段 |  
181 -| 3 | **外部接口不可达** | 第三方 API 无法连接、证书失效等环境问题,并无法自行解决 |  
182 -  
183 -> 其余需要人类判断的场景一律走普通 `AskUserQuestion` Q&A,不中断、不写 Blocker 文件。  
184 -  
185 -**触发中断时的固定动作:**  
186 -  
187 -1. 在当前功能的 plan 文件里追加一节 `## 🚩 Blocker`(报告格式由 `interrupt-check` 的 `interrupt-block-template.md` 持有)  
188 -2. 停止后续所有功能的静默执行  
189 -3. 在主会话输出一句话摘要 + 指向 blocker 文件的路径,等人回复  
190 -  
191 ----  
192 -  
193 -## 🟡 软规则(允许继续,但有强制后续动作)  
194 -  
195 -以下情况 **不触发中断**,CC 可自行继续推进,但必须在约定位置留痕,模块完成时统一审计。  
196 -  
197 -| # | 软规则 | 允许动作 | 强制后续 |  
198 -| - | ----- | ------- | ------- |  
199 -| S1 | **技术栈外组件引入** | 用 `AskUserQuestion` 给用户三选一:接受引入 / 换方案 / 拒绝 | ① **接受** → 同会话直接在 `docs/04 § 零` 追加一行 → 继续流程 ② **换方案 / 拒绝** → 视为常规歧义澄清,继续 Q&A 收敛 ③ 不写 Blocker、不中断流程 |  
200 -| S2 | **跨模块改动** | **默认不改**,仅为当前模块实现所必需时允许修改 | ① hook `log-cross-module.sh` 自动落存根 ② `module-report` 一次性调用 `cross-module-log` skill 批量补齐「原因 / 影响评估」+ 「跨模块改动」节完整贴入《模块完成报告》 |  
201 -  
202 ----  
203 -  
204 -## 🧭 通用工作准则(General Principles)  
205 -  
206 -### 1. Think Before Coding  
207 -  
208 -**Don't assume. Don't hide confusion. Surface tradeoffs.**  
209 -  
210 -Before implementing:  
211 -- State your assumptions explicitly. If uncertain, ask.  
212 -- If multiple interpretations exist, present them - don't pick silently.  
213 -- If a simpler approach exists, say so. Push back when warranted.  
214 -- If something is unclear, stop. Name what's confusing. Ask.  
215 -  
216 -### 2. Simplicity First  
217 -  
218 -**Minimum code that solves the problem. Nothing speculative.**  
219 -  
220 -- No features beyond what was asked.  
221 -- No abstractions for single-use code.  
222 -- No "flexibility" or "configurability" that wasn't requested.  
223 -- No error handling for impossible scenarios.  
224 -- If you write 200 lines and it could be 50, rewrite it.  
225 -  
226 -Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.  
227 -  
228 -### 3. Surgical Changes  
229 -  
230 -**Touch only what you must. Clean up only your own mess.**  
231 -  
232 -When editing existing code:  
233 -- Don't "improve" adjacent code, comments, or formatting.  
234 -- Don't refactor things that aren't broken.  
235 -- Match existing style, even if you'd do it differently.  
236 -- If you notice unrelated dead code, mention it - don't delete it.  
237 -  
238 -When your changes create orphans:  
239 -- Remove imports/variables/functions that YOUR changes made unused.  
240 -- Don't remove pre-existing dead code unless asked.  
241 -  
242 -The test: Every changed line should trace directly to the user's request.  
243 -  
244 -### 4. Goal-Driven Execution  
245 -  
246 -**Define success criteria. Loop until verified.**  
247 -  
248 -Transform tasks into verifiable goals:  
249 -- "Add validation" → "Write tests for invalid inputs, then make them pass"  
250 -- "Fix the bug" → "Write a test that reproduces it, then make it pass"  
251 -- "Refactor X" → "Ensure tests pass before and after"  
252 -  
253 -For multi-step tasks, state a brief plan:  
254 -```  
255 -1. [Step] → verify: [check]  
256 -2. [Step] → verify: [check]  
257 -3. [Step] → verify: [check]  
258 -```  
259 -  
260 -Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.  
skills/plan/project-init/templates/docs-08-initial-template.md deleted
1 -# 08-工作流进度  
2 -  
3 -> 全流程进度跟踪。CC 每完成一项产出就勾选一项。  
4 -> - **§ 一 Plan(A0~A5)**:`plan-start` 找第一个未勾 A 子项分发到对应 skill  
5 -> - **§ 二 Coding(模块)**:分发以 `docs/02-开发计划.md § 二 开发顺序清单` 为准;`coding-start` 按 docs/02 顺序扫描,对每个 REQ 所属模块查询本 § 二的 `里程碑:` 字段 + 本地 `git tag -l 'milestone/<id>'`,找第一个未打里程碑模块分发。本 § 二 行序无语义,仅作模块元数据表  
6 -  
7 -## 一、Plan 阶段(一次性)  
8 -  
9 -- [ ] A0 项目初始化 — project-init  
10 - - [ ] 依赖检查通过  
11 - - [ ] 项目文件骨架已创建(CLAUDE.md + docs/01-需求清单/index.md + docs/04-技术规范.md)  
12 - - [ ] Git 已初始化  
13 -  
14 -- [ ] A1 范围锁定 — scope-lock  
15 - - [ ] 项目概述已填写(CLAUDE.md § 🎯 项目概述)  
16 - - [ ] 技术栈已确认(docs/04 § 零)  
17 - - [ ] 需求清单索引已填写(docs/01-需求清单/index.md)  
18 - - [ ] REQ 卡片骨架已生成(docs/01-需求清单/<module>/REQ-*.md,业务内容留待人工填写)  
19 -  
20 -- [ ] A2 骨架生成 — skeleton-gen  
21 - - [ ] 架构文档已生成(docs/04 § 一+、docs/06、docs/07、docs/09)  
22 - - [ ] 工具脚本已生成(scripts/*.sh、.env.local)  
23 - - [ ] .gitignore 已配置  
24 -  
25 -- [ ] A3 DB 设计 + REQ 回填 — db-design-gen  
26 - - [ ] docs/03-数据库设计文档.md 已生成  
27 - - [ ] docs/01 各 REQ 卡片"依赖表" + 模块头"涉及表" 已回填  
28 -  
29 -- [ ] A4 DB 初始化 — db-init  
30 - - [ ] sql/migrations/V1__initial_schema.sql 已生成  
31 - - [ ] DDL 与 docs/03 全量一致  
32 - - [ ] .env.local 凭据已验证(mysql -e "SELECT 1" OK)  
33 - - [ ] setup-test-db.sh 防护通过 + DROP+CREATE + apply V1 已执行  
34 - - [ ] SHOW TABLES 行数 == docs/03 表数量  
35 -  
36 -- [ ] A5 下游文档生成 — downstream-gen  
37 - - [ ] docs/02 开发计划已生成  
38 - - [ ] docs/05 API 契约已生成  
39 - - [ ] docs/06 § 三 页面清单已填入  
40 - - [ ] docs/10 验收清单已生成  
41 - - [ ] 下方模块列表已填入  
42 - - [ ] REQ 卡片依赖接口已回填  
43 -  
44 -## 二、Coding 阶段(后端模块循环)  
45 -  
46 -(A5 填入后,每行一个后端模块。每个模块的 `里程碑:` 字段在 `—` 和 `milestone/<id>` 之间变化,完成由本地 `git tag -l` 判定。`coding-start` 每次按 docs/02 REQ 序扫每模块的里程碑 tag 决定派发。后端模块全部打里程碑后自动进入 § 三 前端阶段。)  
47 -  
48 -<!-- 模块格式示例(由 A5 downstream-gen 追加;功能子项由 feature-review 在 approve 时勾选):  
49 -- module_0 系统管理  
50 - - 依赖: —  
51 - - 路径: backend/module/sys/  
52 - - 里程碑: —  
53 - - 功能:  
54 - - [ ] REQ-SYS-001 用户登录  
55 - - [ ] REQ-SYS-002 用户注册  
56 --->  
57 -  
58 -## 三、Coding 阶段(前端整体)  
59 -  
60 -(`frontend-start` 进入时扫 prototype/ + docs/01 + docs/05 → AI 自主推导 FE 业务功能清单写到下方"功能:"项(无人工审阅断点;合理性由整体里程碑标记时统一校核)。已有清单则直接加载。整个前端阶段 1 个里程碑 tag,分支 `frontend-phase`。)  
61 -  
62 -- 整体里程碑: —  
63 -- 功能:  
64 - <!-- AI 进入时按以下行格式写入(每行 1 个 FE,可关联多个 REQ / 多份原型):  
65 - - [ ] FE-NN 功能名 | 关联 REQ:REQ-A, REQ-B | 关联原型:prototype/<file>.html, prototype/<other>.html  
66 -  
67 - 示例:  
68 - - [ ] FE-01 用户登录与注册 | 关联 REQ:REQ-SYS-001, REQ-SYS-002 | 关联原型:prototype/auth.html  
69 - - [ ] FE-02 仪表盘总览 | 关联 REQ:REQ-DASH-001 | 关联原型:prototype/dashboard.html  
70 - -->  
skills/plan/scope-lock/SKILL.md deleted
1 ----  
2 -name: scope-lock  
3 -description: A1 计划范围锁定——引导用户填写项目概述 + 技术栈 + 需求索引,并按模块子目录生成 REQ 卡片骨架(CC 推断 req_id/title/goal/rules/constraints/acceptance;输入/输出 各含一句简述 + N 张示例字段表全部原样复制由人工编辑;依赖表/依赖接口模板写死 `TBD(A3/A5 自动补)` 由后续 skill 回填)。  
4 -user-invocable: false  
5 -allowed-tools: Read Edit Grep Skill AskUserQuestion Bash(mkdir *) Bash(cp *) Bash(sed *) Bash(bash *) Bash(cat *)  
6 ----  
7 -  
8 -**所有输出必须使用中文。**  
9 -  
10 -# scope-lock  
11 -  
12 -## 执行步骤  
13 -  
14 -### 步骤 0:打印当前位置流程图  
15 -  
16 -用 `Bash` 执行 `cat` 命令向用户展示当前位置流程图(stdout 即 ASCII 框图):  
17 -  
18 -```bash  
19 -cat "${CLAUDE_PLUGIN_ROOT}/skills/plan/scope-lock/banners/flow.txt"  
20 -```  
21 -  
22 -### A. 提示用户填写项目概述并等待  
23 -  
24 -向用户输出:  
25 -  
26 -```  
27 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  
28 - [scope-lock] 请填写项目概述  
29 -  
30 - 📄 文件位置: ./CLAUDE.md  
31 - 📌 编辑位置: § 🎯 项目概述  
32 -  
33 - 请将以下占位符替换为实际值:  
34 - - 项目名称  
35 - - 项目简述  
36 - - 目标用户  
37 - - 部署方式  
38 - 改完后回来选择「继续」。  
39 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  
40 -```  
41 -  
42 -用 `AskUserQuestion` 询问:  
43 -- **question**: `项目概述填写完毕了吗?`  
44 - - 用户选择「继续」→ 用 `Grep` 在 `CLAUDE.md` 搜索 `【人工填写:`(限定 § 🎯 项目概述 节)。命中 → 打印残留行 + 路径,重新弹出同样的 AskUserQuestion;0 命中 → 勾选并进入步骤 B。  
45 - - 用户选择「有疑问想先沟通」→ 回答用户问题后,再次弹出同样的 QA。  
46 -  
47 -0 命中后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:  
48 -- ` - [ ] 项目概述已填写(CLAUDE.md § 🎯 项目概述)`  
49 -  
50 -### B. 提示用户检查默认技术栈并等待  
51 -  
52 -`docs/04-技术规范.md` 已由 A0 `project-init` 用模板复制(默认技术栈,见 `project-init/templates/docs-04-stack-template.md`)。本步骤让用户检查 / 调整 § 零。  
53 -  
54 -向用户输出:  
55 -  
56 -```  
57 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  
58 - [scope-lock] 技术栈已保存  
59 -  
60 - 📄 文件位置: ./docs/04-技术规范.md(由 A0 模板生成)  
61 - 📌 编辑位置: § 零、技术栈总览  
62 -  
63 - 请检查技术栈表:  
64 - - 不需要的行直接删除(如纯后端项目删前端行)  
65 - - 需要替换的技术直接改  
66 - - 需要新增的条目直接加行  
67 - 改完后回来选择「继续」。  
68 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  
69 -```  
70 -  
71 -用 `AskUserQuestion` 询问:  
72 -- **question**: `技术栈检查完毕了吗?`  
73 - - 用户选择「继续」→ 进入步骤 C。  
74 - - 用户选择「有疑问想先沟通」→ 回答用户问题后,再次弹出同样的 QA。  
75 -  
76 -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:  
77 -- ` - [ ] 技术栈已确认(docs/04 § 零)`  
78 -  
79 -### C. 提示用户填写需求清单并等待  
80 -  
81 -`docs/01-需求清单/index.md` 已由 `project-init` 写入占位符模板,这里让用户补齐模块清单。  
82 -  
83 -向用户输出:  
84 -  
85 -```  
86 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  
87 - [scope-lock] 请填写需求清单模块索引  
88 -  
89 - 📄 文件位置: ./docs/01-需求清单/index.md  
90 - 📌 编辑位置: § 模块索引(表格)  
91 -  
92 - 请按业务列出所有模块:  
93 - - 每行一个模块(如 SYS 系统管理 / PUR 采购 / SAL 销售)  
94 - - 「核心功能点」只需关键词,CC 会拆分为 REQ 卡片  
95 - 改完后回来选择「继续」。  
96 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  
97 -```  
98 -  
99 -用 `AskUserQuestion` 询问:  
100 -- **question**: `需求清单模块索引填写完毕了吗?`  
101 - - 用户选择「继续」→ 进入步骤 D。  
102 - - 用户选择「有疑问想先沟通」→ 回答用户问题后,再次弹出同样的 QA。  
103 -  
104 -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:  
105 -- ` - [ ] 需求清单索引已填写(docs/01-需求清单/index.md)`  
106 -  
107 -### D. 生成 REQ 卡片骨架并停下等人工审阅  
108 -  
109 -1. 用 `Grep` 校验 `docs/01-需求清单/index.md` 无 `【人工填写:` 残留;有则回步骤 C。  
110 -2. 用 `Read` 读 `index.md` 解析模块索引。  
111 -3. **单次 Bash 写入所有文件**(替代 N×9 次 Edit):  
112 -  
113 - - **每模块推断**:三元组 `{module_code, module_name, module_brief}` + N 个 REQ 的六元组 `{req_id, title, goal, rules, constraints, acceptance}`。`req_id`/`title` 从核心功能点拆分;`goal` 展开 `title`;`rules`/`constraints`/`acceptance` 起草业务语义。**不推断**输入 / 输出(模板原样保留示例)。  
114 - - **单次 Bash**:调 `${CLAUDE_SKILL_DIR}/scripts/render.sh` 落盘所有文件(脚本内部完成模板读取 + 占位符替换 + HTML 注释剥离)。下面是**调用形态**示例,`<MOD>` / `<模块名>` / `<REQ-MOD-NNN>` 等尖括号位置 CC 按 `index.md` 实际值替换:  
115 -  
116 - ```bash  
117 - R="${CLAUDE_SKILL_DIR}/scripts/render.sh"  
118 - # 每个模块:mkdir + 1 个 render module + N 个 render req(每 REQ 一行)  
119 - mkdir -p "docs/01-需求清单/<MOD>-<模块名>"  
120 - bash "$R" module "docs/01-需求清单/<MOD>-<模块名>/_module.md" "<MOD>" "<模块名>" "<module_brief>"  
121 - bash "$R" req "docs/01-需求清单/<MOD>-<模块名>/<REQ-MOD-NNN>.md" "<REQ-MOD-NNN>" "<title>" "<goal>" "<rules>" "<constraints>" "<acceptance>"  
122 - ```  
123 -  
124 - - **兜底**:值含字面 `$xxx` 或 `}}` 的 REQ 单独走 cp + Edit。  
125 -4. 用 `Edit` 在 `docs/08-模块任务管理.md` 勾选(A1 子项 + A1 顶层):  
126 - - ` - [ ] REQ 卡片骨架已生成(docs/01-需求清单/<module>/REQ-*.md,业务内容留待人工填写)`  
127 - - `- [ ] A1 范围锁定 — scope-lock`  
128 -5. 打印停下横幅并**停止**:  
129 -  
130 -```  
131 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  
132 - [scope-lock] ✅ A1 范围锁定完成  
133 -  
134 - 产出:  
135 - ✓ CLAUDE.md § 🎯 项目概述  
136 - ✓ docs/04 § 零 技术栈  
137 - ✓ docs/01-需求清单/index.md 模块索引  
138 - ✓ docs/01-需求清单/<module>/_module.md 模块头  
139 - ✓ docs/01-需求清单/<module>/REQ-*.md REQ 卡片骨架  
140 -  
141 - ⏸ 现在请你逐张打开 REQ 卡片:  
142 - - **必改**:输入 / 输出 两段  
143 - · `表1` / `表2` 是模板示例,按本 REQ 业务**改字段 / 增删行 / 增删整张表**  
144 - - **审阅**:目标 / 跨字段规则 / 边界 / 验收(已起草,对照业务校正)  
145 - - **保留**:`TBD` 不要改,由之后流程自动回填  
146 -  
147 - 审阅完成后,运行以下命令继续进入 A2:  
148 - /erp-workflow:plan-start  
149 -  
150 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  
151 -```  
152 -  
153 -## 参考  
154 -  
155 -- `CLAUDE.md` § 🎯 项目概述(写入目标)  
156 -- `docs/04-技术规范.md`(技术栈输出,供 skeleton-gen 读取使用)  
157 -- `docs/01-需求清单/index.md`(模块索引输入)  
158 -- `docs/01-需求清单/<module>/_module.md`(模块头输出)  
159 -- `docs/01-需求清单/<module>/REQ-*.md`(REQ 卡片骨架输出,A3 db-design-gen / A5 downstream-gen 会回填 TBD 字段)  
160 -- `${CLAUDE_SKILL_DIR}/templates/req-card-template.md`  
161 -- `${CLAUDE_SKILL_DIR}/templates/_module-template.md`  
162 -- `${CLAUDE_SKILL_DIR}/scripts/render.sh`(步骤 D 渲染助手,dispatch `module` / `req` 两种模式)  
skills/plan/scope-lock/banners/flow.txt deleted
1 -┌────────────────────────────────────────────────────────┐  
2 -│ 📋 阶段 A:规划(一次性) │  
3 -│ │  
4 -│ A0 初始化项目 │  
5 -│ ↓ │  
6 -│ ▶ A1 锁范围(生成 REQ 卡片) → 人工审核 │  
7 -│ ↓ │  
8 -│ A2 生成骨架 │  
9 -│ ↓ │  
10 -│ A3 生成 DB 设计 → 人工审核 │  
11 -│ ↓ │  
12 -│ A4 初始化 DB │  
13 -│ ↓ │  
14 -│ A5 生成下游文档 │  
15 -│ │  
16 -│ 规划阶段到此结束 │  
17 -└────────────────────────────────────────────────────────┘