diff --git a/skills/coding/fe-feature-review/SKILL.md b/skills/coding/fe-feature-review/SKILL.md index 58e0465..2cf1012 100644 --- a/skills/coding/fe-feature-review/SKILL.md +++ b/skills/coding/fe-feature-review/SKILL.md @@ -21,12 +21,12 @@ allowed-tools: Read Write Edit Skill Agent Bash(git add *) Bash(git commit *) **approve** - `Edit docs/08-模块任务管理.md § 三`,把本 FE 下 `- [ ] ...` 改为 `- [x] ...`(仅 FE 级可视化;前端阶段完成仍以 `整体里程碑:` 字段 + 本地 `git tag -l` 为准) - - 输出 `fe-feature-review: round 通过`,调用 `Skill(frontend-start)` 推进下一 FE 或进入 test-gate(phase=frontend) + - 输出 `fe-feature-review: round 通过`,**同一 turn 内立即**调用 `Skill(frontend-start)` 推进下一 FE 或进入 test-gate(phase=frontend)(**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue) **request-changes(round < 5)** - 逐项编辑 `must_fix[]` 指向的代码文件 - 按 `${CLAUDE_SKILL_DIR}/templates/commit-message-template.md` 格式 commit:`fix(): 修复 review round must-fix REQ_ID: ` - - 调用 `Skill(fe-feature-verify)` 重新验证;verify 通过后会再次链回本 skill,round `` 重审 + - **同一 turn 内立即**调用 `Skill(fe-feature-verify)` 重新验证(不先输出桥接叙述,避免 turn 提前结束、害用户手敲 continue);verify 通过后会再次链回本 skill,round `` 重审 **request-changes(round == 5)** - 停止并打印摘要,升级给用户手工介入;不再自动修复,不回调 frontend-start diff --git a/skills/coding/fe-feature-tdd/SKILL.md b/skills/coding/fe-feature-tdd/SKILL.md index 4cbf6fe..aafadae 100644 --- a/skills/coding/fe-feature-tdd/SKILL.md +++ b/skills/coding/fe-feature-tdd/SKILL.md @@ -26,7 +26,10 @@ allowed-tools: Read Write Edit Agent Skill Bash(git add *) Bash(git commit *) - `frontend.e2e_runner`:playwright(默认 playwright) - `frontend.test_command` / `frontend.e2e_command`:执行命令(缺失则用 `pnpm test:ci` / `pnpm e2e:ci`) -3. 按顺序处理每个任务: +3. 按顺序处理每个任务。**全程自主连续执行(静默编程)**:每个 task 跑完 a~f 立刻进入下一个 task,直到全部任务完成才进步骤 4。 + + > **不要输出桥接叙述**(同 `feature-plan` 步骤 7):task 之间、子会话验证返回后、commit 之后,都**不要**输出 "Task N 完成 / 接下来 / 下一步 / 准备继续 / 请检查 / 等你确认" 之类的收尾过渡话——那些会被解读为 **turn 结束信号**,导致你被迫手敲 `continue`。完成一步就直接动手做下一步,不旁白、不停顿。 + > 唯一允许的停点:3.e 的中断 与「路径护栏」的硬停。 a. 在 `test_file::test_name` 处写**失败**测试: - `测试先行类型 = jsdom`:在 jsdom 环境下用 vitest/jest 写组件单测(render + 断言 DOM / 交互后状态变化) @@ -48,7 +51,7 @@ allowed-tools: Read Write Edit Agent Skill Bash(git add *) Bash(git commit *) - `subject` ≤ 50 字符 - 必含 trailer `REQ_ID: `(如 `REQ_ID: FE-01`) -4. 全部任务完成 → 调用 `Skill(fe-feature-verify)`。 +4. 全部任务完成 → **同一 turn 内立即** `Skill(fe-feature-verify)`(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。 ## 护栏 diff --git a/skills/coding/fe-feature-verify/SKILL.md b/skills/coding/fe-feature-verify/SKILL.md index ad9f192..f601645 100644 --- a/skills/coding/fe-feature-verify/SKILL.md +++ b/skills/coding/fe-feature-verify/SKILL.md @@ -46,7 +46,7 @@ allowed-tools: Skill Read Agent 4. **任一目标 `exit_code != 0` 或 `failed > 0`** → 停止,不进入 review。 -5. 全部通过 → 调用 `Skill(fe-feature-review)`。 +5. 全部通过 → **同一 turn 内立即** `Skill(fe-feature-review)`(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。 ## 护栏 diff --git a/skills/coding/feature-review/SKILL.md b/skills/coding/feature-review/SKILL.md index bd603c1..9a1cf67 100644 --- a/skills/coding/feature-review/SKILL.md +++ b/skills/coding/feature-review/SKILL.md @@ -19,12 +19,12 @@ allowed-tools: Read Write Edit Skill Agent Bash(git add *) Bash(git commit *) **approve** - `Edit docs/08-模块任务管理.md § 二`,把本模块下 `- [ ] ...` 改为 `- [x] ...`(仅功能级可视化;模块完成仍以 `里程碑:` 字段 + 本地 `git tag -l` 为准,不依赖此勾选) - - 输出 `feature-review: round 通过`,调用 `Skill(module-start)` + - 输出 `feature-review: round 通过`,**同一 turn 内立即**调用 `Skill(module-start)`(**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue) **request-changes(round < 5)** - 逐项编辑 `must_fix[]` 指向的代码文件 - 按 `feature-tdd/templates/commit-message-template.md` 格式 commit:`fix(): 修复 review round must-fix ` - - 调用 `Skill(feature-verify)` 重新验证;verify 通过后会再次链回本 skill,round `` 重审 + - **同一 turn 内立即**调用 `Skill(feature-verify)` 重新验证(不先输出桥接叙述,避免 turn 提前结束、害用户手敲 continue);verify 通过后会再次链回本 skill,round `` 重审 **request-changes(round == 5)** - 停止并打印摘要,升级给用户手工介入;不再自动修复,不回调 module-start diff --git a/skills/coding/feature-tdd/SKILL.md b/skills/coding/feature-tdd/SKILL.md index 882f4ef..edfff42 100644 --- a/skills/coding/feature-tdd/SKILL.md +++ b/skills/coding/feature-tdd/SKILL.md @@ -19,14 +19,16 @@ allowed-tools: Read Write Edit Agent Skill Bash(git add *) Bash(git commit *) - **同步**把新 CREATE / ALTER 反向更新到 `docs/03-数据库设计文档.md` 对应表小节,保持 docs/03 是 schema 的 SSoT;新增表按表小节模板追加 - migration + docs/03 改动**同一 commit**,避免 SSoT 与 migration 分裂 - 测试运行时 Spring Boot 启动 Flyway 会自动 apply 这个新 migration;`scripts/setup-test-db.sh` 只负责清库 -3. 按顺序处理每个代码类任务: +3. 按顺序处理每个代码类任务。**全程自主连续执行(静默编程)**:每个 task 跑完 a~f 立刻进入下一个 task,直到全部任务完成才进步骤 4。 + > **不要输出桥接叙述**(同 `feature-plan` 步骤 7):task 之间、子会话验证返回后、commit 之后,都**不要**输出 "Task N 完成 / 接下来 / 下一步 / 准备继续 / 请检查 / 等你确认" 之类的收尾过渡话——那些会被解读为 **turn 结束信号**,导致你被迫手敲 `continue`。完成一步就直接动手做下一步,不旁白、不停顿。 + > 唯一允许的停点:3.e 的中断 与「护栏」节的硬停。 a. 在 `test_file::test_name` 处写**失败**测试 b. 派发 Agent 子会话(general-purpose)运行测试确认失败,子会话只返回 `{command, exit_code, failing_assertion}` JSON c. 在 `impl_file` 处写**最小**实现使测试通过 d. 再次派发子会话确认通过 e. 同一测试 >10 次修复仍失败 → 调用 `interrupt-check`(中断 #1:测试反复失败) f. 按 `${CLAUDE_SKILL_DIR}/templates/commit-message-template.md` 格式 commit(`scope` = 任务模块;`subject` ≤ 50 字符;`req_id` 必填) -4. 全部任务完成 → 调用 `Skill(feature-verify)`。 +4. 全部任务完成 → **同一 turn 内立即** `Skill(feature-verify)`(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。 ## 护栏 diff --git a/skills/coding/feature-verify/SKILL.md b/skills/coding/feature-verify/SKILL.md index f583d75..d9c56f6 100644 --- a/skills/coding/feature-verify/SKILL.md +++ b/skills/coding/feature-verify/SKILL.md @@ -27,7 +27,7 @@ allowed-tools: Skill Read Agent ``` 3. 按 `${CLAUDE_SKILL_DIR}/templates/feature-verify-evidence-template.md` 渲染证据并打印到会话。 4. **`exit_code != 0` 或 `failed > 0`** → 停止,不进入 review。 -5. 通过 → 调用 `Skill(feature-review)`。 +5. 通过 → **同一 turn 内立即** `Skill(feature-review)`(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。 ## 护栏 diff --git a/skills/coding/frontend-start/SKILL.md b/skills/coding/frontend-start/SKILL.md index ab2387e..b023a6c 100644 --- a/skills/coding/frontend-start/SKILL.md +++ b/skills/coding/frontend-start/SKILL.md @@ -52,8 +52,8 @@ allowed-tools: Read Write Edit Skill Glob Grep AskUserQuestion Bash(git branch * ### 步骤 7:进入下一环节 -- 存在未完成 FE → `Skill(fe-feature-brainstorm)`,参数 `{ fe_id, name, associated_reqs[], associated_prototypes[] }` -- 全 FE 完成 → `Skill(test-gate)` 带 `phase=frontend` +- 存在未完成 FE → **同一 turn 内立即** `Skill(fe-feature-brainstorm)`,参数 `{ fe_id, name, associated_reqs[], associated_prototypes[] }`(**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue) +- 全 FE 完成 → **同一 turn 内立即** `Skill(test-gate)` 带 `phase=frontend`(**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue) ## 参考 diff --git a/skills/coding/milestone-tag/SKILL.md b/skills/coding/milestone-tag/SKILL.md index 3a3a432..65dab14 100644 --- a/skills/coding/milestone-tag/SKILL.md +++ b/skills/coding/milestone-tag/SKILL.md @@ -89,7 +89,7 @@ git commit -m "docs(): record milestone/ in completion repor ### 步骤 8:自动回调 coding-start 推进下一阶段 -本阶段已集成 + 打 tag,**不停下等人工**。立即用 Skill 工具调用 `coding-start`: +本阶段已集成 + 打 tag,**不停下等人工**。立即用 Skill 工具调用 `coding-start`(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue): - coding-start 重新做后端 / 前端完成性检查(按 `里程碑:` 字段 + `git tag -l`),未完则推进下一模块 / 前端阶段,全部完成则打印"所有阶段已完成"。 diff --git a/skills/coding/module-report/SKILL.md b/skills/coding/module-report/SKILL.md index 979d3d7..a33dcdb 100644 --- a/skills/coding/module-report/SKILL.md +++ b/skills/coding/module-report/SKILL.md @@ -61,7 +61,7 @@ allowed-tools: Read Write Glob Grep Skill Bash(git diff *) Bash(git log *) Bash( ``` commit 是必需的——`milestone-tag` 的 worktree-clean 前置条件依赖此步。 -6. 调用 `Skill(milestone-tag)` 本地集成并打里程碑 tag。 +6. **同一 turn 内立即** `Skill(milestone-tag)` 本地集成并打里程碑 tag(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。 ## 参考 diff --git a/skills/coding/module-start/SKILL.md b/skills/coding/module-start/SKILL.md index 368b539..b81692b 100644 --- a/skills/coding/module-start/SKILL.md +++ b/skills/coding/module-start/SKILL.md @@ -57,8 +57,8 @@ allowed-tools: Read Write Skill Glob Grep Bash(git branch *) Bash(git checkout * ### 步骤 6:派发 -- 还有未完成 REQ → 调用 `Skill(feature-brainstorm)` 启动该 REQ 的功能循环 -- 本模块 REQ 全部完成 → 调用 `Skill(test-gate)` 进入模块测试闸门 +- 还有未完成 REQ → **同一 turn 内立即**调用 `Skill(feature-brainstorm)` 启动该 REQ 的功能循环(**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue) +- 本模块 REQ 全部完成 → **同一 turn 内立即**调用 `Skill(test-gate)` 进入模块测试闸门(**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue) ## 参考 diff --git a/skills/coding/test-gate/SKILL.md b/skills/coding/test-gate/SKILL.md index df6d188..d1e8949 100644 --- a/skills/coding/test-gate/SKILL.md +++ b/skills/coding/test-gate/SKILL.md @@ -42,7 +42,7 @@ allowed-tools: Read Write Skill Agent Bash(git add *) Bash(git commit *) Bash(gi git add docs/superpowers/module-reports/-test-gate.md git commit -m "chore(): add local test-gate evidence" ``` -4. **`exit_code = 0`** → 调用 `Skill(module-report)`。 +4. **`exit_code = 0`** → **同一 turn 内立即** `Skill(module-report)`(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。 5. **失败** → 打印以下横幅并停止,不调用下游 skill;不自动重试、不自动修复(失败分类需人工判断): ``` diff --git a/skills/crosscut/coding-start/SKILL.md b/skills/crosscut/coding-start/SKILL.md index 9f653ae..fe4cb42 100644 --- a/skills/crosscut/coding-start/SKILL.md +++ b/skills/crosscut/coding-start/SKILL.md @@ -35,7 +35,7 @@ cat "${CLAUDE_PLUGIN_ROOT}/skills/crosscut/coding-start/banners/flow-overview.tx 读 `docs/08 § 二`,对每个后端模块的 `里程碑:` 字段(并用 `git tag -l 'milestone/'` 校验 tag 真实存在): -- **任一模块 `里程碑: —` 或对应 `milestone/` tag 不存在** → 后端未完成,打印 `[coding-start] 后端未完成 → 派发 module-start(写后端)`,立即用 Skill 工具调用 module-start,本 skill 结束,不进入步骤 4。 +- **任一模块 `里程碑: —` 或对应 `milestone/` tag 不存在** → 后端未完成,打印 `[coding-start] 后端未完成 → 派发 module-start(写后端)`,立即用 Skill 工具调用 module-start(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue),本 skill 结束,不进入步骤 4。 - **所有模块 `里程碑: milestone/` 且 tag 存在** → 后端已完成,进入步骤 4。 @@ -45,7 +45,7 @@ cat "${CLAUDE_PLUGIN_ROOT}/skills/crosscut/coding-start/banners/flow-overview.tx - **`整体里程碑: milestone/frontend-phase` 且 tag 存在** → 前端已完成,打印 `所有阶段已完成(后端模块 + 前端阶段里程碑均已标记)`,结束本 skill。 -- **`整体里程碑: —` 或 tag 不存在** → 前端未完成,打印 `[coding-start] 后端已完成、前端未完成 → 派发 frontend-start(写前端)`,立即用 Skill 工具调用 frontend-start,本 skill 结束。 +- **`整体里程碑: —` 或 tag 不存在** → 前端未完成,打印 `[coding-start] 后端已完成、前端未完成 → 派发 frontend-start(写前端)`,立即用 Skill 工具调用 frontend-start(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue),本 skill 结束。 ## 参考 diff --git a/skills/crosscut/interrupt-check/SKILL.md b/skills/crosscut/interrupt-check/SKILL.md index 6ad7b57..36de300 100644 --- a/skills/crosscut/interrupt-check/SKILL.md +++ b/skills/crosscut/interrupt-check/SKILL.md @@ -23,7 +23,7 @@ allowed-tools: Read Write Bash(mysql *) ## 检查清单(权威来源:`CLAUDE.md § 🚩 中断机制`) 1. **测试反复失败** — 同一功能中同一测试连续 10 次修复失败 -2. **要改密钥/账密/包名** — 涉及 `docs/07-环境配置.md` 中的人工填写字段 +2. **要改密钥/账密** — 涉及 `docs/07-环境配置.md` 中的人工填写字段(根包名固定 `com.xly.erp`,不属此项) 3. **外部接口不可达** — 第三方 API / 证书 / 网络问题 ## 执行步骤 diff --git a/skills/crosscut/plan-start/SKILL.md b/skills/crosscut/plan-start/SKILL.md index 2d25329..33d2112 100644 --- a/skills/crosscut/plan-start/SKILL.md +++ b/skills/crosscut/plan-start/SKILL.md @@ -81,7 +81,7 @@ cat "${CLAUDE_PLUGIN_ROOT}/skills/crosscut/plan-start/banners/flow-overview.txt" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` -立即用 `Skill` 工具调用 `后续`。 +立即用 `Skill` 工具调用 `后续`(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。 ## 参考 diff --git a/skills/plan/db-init/SKILL.md b/skills/plan/db-init/SKILL.md index a2c4e4b..7b1a322 100644 --- a/skills/plan/db-init/SKILL.md +++ b/skills/plan/db-init/SKILL.md @@ -144,7 +144,7 @@ EXPECTED=$(grep -c '^## `' docs/03-数据库设计文档.md) - ` - [ ] SHOW TABLES 行数 == docs/03 表数量` - `- [ ] A4 DB 初始化 — db-init` -2. 立即调用 `Skill(downstream-gen)` 进入 A5,不等用户手动输入。 +2. 立即调用 `Skill(downstream-gen)` 进入 A5,不等用户手动输入(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。 ## 参考 diff --git a/skills/plan/project-init/SKILL.md b/skills/plan/project-init/SKILL.md index 431dd21..f57266b 100644 --- a/skills/plan/project-init/SKILL.md +++ b/skills/plan/project-init/SKILL.md @@ -78,7 +78,7 @@ cp -n "${CLAUDE_SKILL_DIR}/templates/docs-08-initial-template.md" docs/08-模块 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` -立即调用 `Skill(scope-lock)` 进入 A1,不等用户手动输入。 +立即调用 `Skill(scope-lock)` 进入 A1,不等用户手动输入(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。 ## 参考 diff --git a/skills/plan/project-init/templates/CLAUDE-template.md b/skills/plan/project-init/templates/CLAUDE-template.md index a048f68..f5c646f 100644 --- a/skills/plan/project-init/templates/CLAUDE-template.md +++ b/skills/plan/project-init/templates/CLAUDE-template.md @@ -111,7 +111,7 @@ B 阶段分两段,**全部固化到 skills**。入口:`/erp-workflow:coding- | 格式 | 谁填 | 使用阶段 | 说明 | |------|-----|---------|------| -| `【人工填写:<简短说明>】` | 人 | 仅 A 阶段文档 | 密钥 / 账密 / 包名 / 命名约定 / 小版本号等人工才能决定的值;B 阶段 plan/spec 禁止出现,查不到真值时用 `AskUserQuestion` 问用户 | +| `【人工填写:<简短说明>】` | 人 | 仅 A 阶段文档 | 仅 A 阶段文档中**人工才能决定**的值;B 阶段 plan/spec 禁止出现,查不到真值时用 `AskUserQuestion` 问用户。**后端根包名不在此列——固定为 `com.xly.erp`,禁止占位、禁止弹问。** | | `TBD(<责任人>)` | CC 自动 | A 或 B | 后缀附带责任方(如 `TBD(A3 自动补)` / `TBD(A5 自动补)`);由对应 skill 就地补填,`module-report` § ⑦ 检查 `TBD(CC 补)` 残留 | **HTML 注释 ``**:提示占位,是**插件内部大纲模板**里给 LLM 的**填空提示 / 章节引导**,指引 LLM 按结构填实际内容。skill 生成时会**剥除**这些注释,最终产物里注释不会保留。 @@ -177,7 +177,7 @@ B 阶段分两段,**全部固化到 skills**。入口:`/erp-workflow:coding- | # | 中断 | 例子 | | - | --- | --- | | 1 | **测试反复失败** | 同一测试同一功能内连续 **10 次**修复失败 | -| 2 | **要改密钥 / 账密 / 包名** | `docs/07-环境配置.md` 里由人工标注必须填的字段 | +| 2 | **要改密钥 / 账密** | `docs/07-环境配置.md` 里由人工标注必须填的字段(根包名固定 `com.xly.erp`,不在此列、不触发中断) | | 3 | **外部接口不可达** | 第三方 API 无法连接、证书失效等环境问题,并无法自行解决 | > 其余需要人类判断的场景一律走普通 `AskUserQuestion` Q&A,不中断、不写 Blocker 文件。 diff --git a/skills/plan/skeleton-gen/SKILL.md b/skills/plan/skeleton-gen/SKILL.md index 57fa418..65c19d9 100644 --- a/skills/plan/skeleton-gen/SKILL.md +++ b/skills/plan/skeleton-gen/SKILL.md @@ -63,13 +63,13 @@ docs/04 已由 scope-lock 写入 § 零。本步骤追加 § 一 ~ 三。 ```bash mkdir -p scripts sql/migrations src/styles src/main/java/com/xly/erp/config touch sql/migrations/.gitkeep -cp "${CLAUDE_SKILL_DIR}/templates/env-local-template" .env.local +cp -n "${CLAUDE_SKILL_DIR}/templates/env-local-template" .env.local cp "${CLAUDE_SKILL_DIR}/templates/scripts-setup-test-db-template.sh" scripts/setup-test-db.sh cp "${CLAUDE_SKILL_DIR}/templates/styles-tokens-template.css" src/styles/tokens.css cp -n "${CLAUDE_SKILL_DIR}/templates/CorsConfig.java.template" src/main/java/com/xly/erp/config/CorsConfig.java ``` -> `cp -n` 保证 `CorsConfig.java` 不会覆盖已有文件(B 阶段可能对它做收紧;幂等可重跑)。 +> `cp -n` 保证 `.env.local` / `CorsConfig.java` 不会覆盖已有文件——用户在 E.3 核对时改过的凭据、B 阶段对 CORS 的收紧都不会被重跑冲掉(幂等可重跑)。 #### C.2 渲染 scripts/test.sh @@ -121,18 +121,23 @@ bash "${CLAUDE_SKILL_DIR}/scripts/merge-gitignore.sh" "${CLAUDE_SKILL_DIR}/templ - **敏感组**:`.env.local` 路径命中(凭据 / 密钥)。**不弹 QA**(凭据不进会话),E.3 提示用户自填。 - **非敏感组**:其余文件。按说明文字聚合为「根占位」(相同说明 = 同一值,多处共用)或「派生占位」(说明表达派生关系,如"后端 java 根包路径"派生自"根包名")。 -无命中 → 跳 E.4。 +非敏感组无命中 → 跳过 E.2/E.3,直接进 E.4(E.4 是收尾必停步,含 `.env.local` 连接核对,不可跳)。 #### E.2 问根占位 + 推派生 + 批量 Edit -- 每个根占位用 `AskUserQuestion` 问(给合理默认值 + 自由输入),用 `Edit` 批量替换所有命中位置 +- **根包名例外(不问,静默补齐)**:凡说明涉及「根包名 / Java 包路径 / 包路径」的占位**一律不弹问**,CC 直接用固定值 `com.xly.erp`(派生目录路径 `com/xly/erp`)`Edit` 替换。这是兜底——正常情况下步骤 B 已写死、不该出现此类占位;若因旧项目残留或生成遗漏而出现,此处静默补齐,**绝不** `AskUserQuestion`。 +- 其余每个根占位用 `AskUserQuestion` 问(给合理默认值 + 自由输入),用 `Edit` 批量替换所有命中位置 - 派生占位**不问**,CC 基于根占位值推断后 `Edit`;不能可靠推断则回退当独立根占位问 #### E.3 敏感占位提示(不弹 QA) 若敏感组非空:打印提示横幅,列出 `.env.local` 待填字段名 + 告诉用户"直接编辑文件,凭据不进会话"。 -#### E.4 验证 + QA 闸门 +> `.env.local` 的 DB 连接核对**不在此处停**,统一放到 E.4 最终闸门——等所有产出(docs / scripts / .env.local / .gitignore)都初始化完成后再停一次,避免「一生成就停」。 + +#### E.4 验证 + QA 闸门(含 .env.local 连接核对) + +**这是 skeleton-gen 唯一的收尾停顿——所有产出(docs / scripts / .env.local / .gitignore)全部初始化完成后才在此停一次**,**严禁**在 `.env.local` 一生成(C.1)时就提前停。 循环直到两条件**同时**满足: (a) `Grep` 重新扫 8 路径,0 命中 @@ -140,14 +145,18 @@ bash "${CLAUDE_SKILL_DIR}/scripts/merge-gitignore.sh" "${CLAUDE_SKILL_DIR}/templ 每次弹 QA 前重扫;有残留则打印残留位置清单(文件:行号 — 说明)+ 再弹 QA。 -QA 横幅涵盖:产出文件清单(docs/04 / 06 / 07 / 09 + scripts/*.sh + .env.local + .gitignore)、占位状态(N=0 或待填清单)、「继续」/「有疑问先沟通」两选项。 +QA 横幅涵盖: +- 产出文件清单(docs/04 / 06 / 07 / 09 + scripts/*.sh + .env.local + .gitignore) +- 占位状态(N=0 或待填清单) +- **`.env.local` DB 连接核对**:用 `Bash`(`set -a; . .env.local; set +a`)读出后列出当前 `DB_HOST` / `DB_PORT` / `DB_USER` / `DB_SCHEMA` 的**值**;`DB_PASSWORD` / `JWT_SECRET` **只列字段名、不回显值**(凭据不进会话)。提示「默认连接开箱即用;若与本地 MySQL 不符,**现在直接编辑 `.env.local`** 再选『继续』(`cp -n` 不会覆盖你的修改,下一步 A4 db-init 会真正连库验证)」。 +- 两选项:「继续」/「有疑问先沟通」 通过后(N=0 且用户选「继续」),用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: - `- [ ] A2 骨架生成 — skeleton-gen` ### F. 进入 A3 -输出 `skeleton-gen: 完成`,立即调用 `Skill(db-design-gen)`。 +输出 `skeleton-gen: 完成`,立即调用 `Skill(db-design-gen)`(直接调用,**不要**先输出"已完成 / 接下来 / 请检查 / 等你确认"之类桥接叙述——会被解读为 turn 结束信号、害用户手敲 continue)。 ## 参考