Commit 25afa9f0ddeee8b785f4949b503766828eee20f7

Authored by zichun
1 parent 2a3f8d09

remove docs/06 + A6 frontend-scope-lock — prototype/ is the frontend SSoT

- delete frontend-scope-lock skill + docs/06 templates (static + module-pagelist)
- A5 downstream-gen gains prototype/ gate + FE-list derivation -> docs/08 § 三
- plan-start: drop A6 dispatch row, gate 5->4 items; coding-start A0~A6 -> A0~A5
- Design Tokens single source = src/styles/tokens.css (code-reviewer, coding.mjs)
- plugin.json skills 9->8; docs-09 tree drops 06-UI; docs-08 drops A6 section
.claude-plugin/plugin.json
1 { 1 {
2 "name": "erp-workflow", 2 "name": "erp-workflow",
3 - "description": "ERP 项目全流程框架:阶段 A 计划(plan-start 入口 + A0~A6 共 7 个 skill + B 阶段瘦入口 coding-start = 9 个 skill;plan-start 终结闸 5 项前移硬校验) + 阶段 B 编码(单个静默 Workflow 脚本 coding.mjs,子代理自动跑后端+前端功能循环、测试闸门、本地里程碑 tag)。", 3 + "description": "ERP 项目全流程框架:阶段 A 计划(plan-start 入口 + A0~A5 共 6 个 skill + B 阶段瘦入口 coding-start = 8 个 skill;plan-start 终结闸 4 项前移硬校验) + 阶段 B 编码(单个静默 Workflow 脚本 coding.mjs,子代理自动跑后端+前端功能循环、测试闸门、本地里程碑 tag)。",
4 "version": "0.2.0", 4 "version": "0.2.0",
5 "skills": [ 5 "skills": [
6 "./skills/plan/plan-start", 6 "./skills/plan/plan-start",
@@ -10,7 +10,6 @@ @@ -10,7 +10,6 @@
10 "./skills/plan/db-design-gen", 10 "./skills/plan/db-design-gen",
11 "./skills/plan/db-init", 11 "./skills/plan/db-init",
12 "./skills/plan/downstream-gen", 12 "./skills/plan/downstream-gen",
13 - "./skills/plan/frontend-scope-lock",  
14 "./skills/coding/coding-start" 13 "./skills/coding/coding-start"
15 ] 14 ]
16 } 15 }
agents/code-reviewer.md
@@ -33,8 +33,8 @@ For each dimension below, classify Critical / Important / Suggestion as above. @@ -33,8 +33,8 @@ For each dimension below, classify Critical / Important / Suggestion as above.
33 - Not allowed: structural deviation (e.g., moving the primary action from top-right to bottom-center, dropping a filter region the prototype shows). 33 - Not allowed: structural deviation (e.g., moving the primary action from top-right to bottom-center, dropping a filter region the prototype shows).
34 34
35 ### 2. Design Tokens (objective → can request-changes) 35 ### 2. Design Tokens (objective → can request-changes)
36 -- All color values MUST use `var(--color-*)` per `docs/06 § 二`. Hard-coded hex / rgb → `request-changes` with file:line.  
37 -- New tokens used in code without registration in `docs/06 § 二` and `tokens.css` → `request-changes`. 36 +- All color values MUST use `var(--color-*)` per `src/styles/tokens.css` (the single token source). Hard-coded hex / rgb → `request-changes` with file:line.
  37 +- New tokens used in code without registration in `src/styles/tokens.css` → `request-changes`.
38 38
39 ### 3. 无障碍 (Accessibility) — best-effort, flag-obvious-only 39 ### 3. 无障碍 (Accessibility) — best-effort, flag-obvious-only
40 - Form controls have `<label>` or `aria-label`. 40 - Form controls have `<label>` or `aria-label`.
@@ -43,7 +43,7 @@ For each dimension below, classify Critical / Important / Suggestion as above. @@ -43,7 +43,7 @@ For each dimension below, classify Critical / Important / Suggestion as above.
43 - **Color contrast is subjective/best-effort:** flag only obvious, unambiguous failures, and only as a Suggestion. Accessibility findings here **never** become the sole basis for `request-changes` — a missing `<label>` on a control that the spec requires may be a must-fix, but contrast judgments are not. 43 - **Color contrast is subjective/best-effort:** flag only obvious, unambiguous failures, and only as a Suggestion. Accessibility findings here **never** become the sole basis for `request-changes` — a missing `<label>` on a control that the spec requires may be a must-fix, but contrast judgments are not.
44 44
45 ### 4. 响应式 (Responsive) — best-effort, flag-obvious-only 45 ### 4. 响应式 (Responsive) — best-effort, flag-obvious-only
46 -- At the minimum resolution declared in `docs/06 § 一通用交互规则`, no horizontal scrollbar. 46 +- At the prototype's intended viewport (per `prototype/`), no horizontal scrollbar.
47 - Critical operations must not depend on hover-only interactions (must work on touch). 47 - Critical operations must not depend on hover-only interactions (must work on touch).
48 - **This dimension is subjective/best-effort:** flag only obvious failures, and as a Suggestion. Responsive findings **never** become the sole basis for `request-changes`. 48 - **This dimension is subjective/best-effort:** flag only obvious failures, and as a Suggestion. Responsive findings **never** become the sole basis for `request-changes`.
49 49
skills/coding/coding-start/SKILL.md
1 --- 1 ---
2 name: coding-start 2 name: coding-start
3 -description: B 阶段(Coding)瘦入口。校验 Plan 终结闸(docs/08 §一 A0~A6 全勾、已在本地默认分支、工作树干净)后,读取 docs/08 §二/§三 概述模块/前端进度,然后调用 workflows/coding.mjs Workflow 全自动、静默地跑完整个编码阶段(后端+前端功能循环、测试闸、里程碑 tag),跑完或 halt 时返回最终状态。本入口不写任何文件、不做编码决策。 3 +description: B 阶段(Coding)瘦入口。校验 Plan 终结闸(docs/08 §一 A0~A5 全勾、已在本地默认分支、工作树干净)后,读取 docs/08 §二/§三 概述模块/前端进度,然后调用 workflows/coding.mjs Workflow 全自动、静默地跑完整个编码阶段(后端+前端功能循环、测试闸、里程碑 tag),跑完或 halt 时返回最终状态。本入口不写任何文件、不做编码决策。
4 user-invocable: true 4 user-invocable: true
5 allowed-tools: Read Glob Workflow Bash(pwd) Bash(git rev-parse *) Bash(git status *) Bash(git branch *) Bash(git tag *) 5 allowed-tools: Read Glob Workflow Bash(pwd) Bash(git rev-parse *) Bash(git status *) Bash(git branch *) Bash(git tag *)
6 --- 6 ---
@@ -39,8 +39,8 @@ allowed-tools: Read Glob Workflow Bash(pwd) Bash(git rev-parse *) Bash(git statu @@ -39,8 +39,8 @@ allowed-tools: Read Glob Workflow Bash(pwd) Bash(git rev-parse *) Bash(git statu
39 39
40 `Read` `docs/08-模块任务管理.md`,逐项校验,任一不满足即**拦截、不启动 Workflow**: 40 `Read` `docs/08-模块任务管理.md`,逐项校验,任一不满足即**拦截、不启动 Workflow**:
41 41
42 -1. **docs/08 § 一 A0~A6 全部勾选**  
43 - - 读 § 一 进度表,确认 A0/A1/A2/A3/A4/A5/A6(含各自子项)均为 `[x]`。 42 +1. **docs/08 § 一 A0~A5 全部勾选**
  43 + - 读 § 一 进度表,确认 A0/A1/A2/A3/A4/A5(含各自子项)均为 `[x]`。
44 - 任一未勾 → 缺口:`Plan 未完成(<未勾项>)→ 先运行 /erp-workflow:plan-start`。 44 - 任一未勾 → 缺口:`Plan 未完成(<未勾项>)→ 先运行 /erp-workflow:plan-start`。
45 45
46 2. **当前在本地默认分支(main / master)** 46 2. **当前在本地默认分支(main / master)**
@@ -59,7 +59,7 @@ allowed-tools: Read Glob Workflow Bash(pwd) Bash(git rev-parse *) Bash(git statu @@ -59,7 +59,7 @@ allowed-tools: Read Glob Workflow Bash(pwd) Bash(git rev-parse *) Bash(git statu
59 [coding-start] ⛔ 未满足进入 B 阶段的前置条件 59 [coding-start] ⛔ 未满足进入 B 阶段的前置条件
60 60
61 <逐条列出缺口,格式:[项] 缺口描述 → 回填/处理位置> 61 <逐条列出缺口,格式:[项] 缺口描述 → 回填/处理位置>
62 - 例:[Plan 进度] A6 前端 scope 未勾 → 先运行 /erp-workflow:plan-start 62 + 例:[Plan 进度] A5 下游文档生成 未勾 → 先运行 /erp-workflow:plan-start
63 63
64 处理后重新运行 /erp-workflow:coding-start。 64 处理后重新运行 /erp-workflow:coding-start。
65 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 65 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
@@ -109,7 +109,7 @@ Workflow({ @@ -109,7 +109,7 @@ Workflow({
109 109
110 ## 参考 110 ## 参考
111 111
112 -- `docs/08-模块任务管理.md § 一`(A0~A6 Plan 进度,步骤 2 读取) 112 +- `docs/08-模块任务管理.md § 一`(A0~A5 Plan 进度,步骤 2 读取)
113 - `docs/08-模块任务管理.md § 二`(后端模块元数据 + 里程碑字段,步骤 3 读取) 113 - `docs/08-模块任务管理.md § 二`(后端模块元数据 + 里程碑字段,步骤 3 读取)
114 - `docs/08-模块任务管理.md § 三`(前端阶段整体里程碑,步骤 3 读取) 114 - `docs/08-模块任务管理.md § 三`(前端阶段整体里程碑,步骤 3 读取)
115 - `workflows/coding.mjs`(B 阶段编排脚本,步骤 4 启动) 115 - `workflows/coding.mjs`(B 阶段编排脚本,步骤 4 启动)
skills/plan/downstream-gen/SKILL.md
1 --- 1 ---
2 name: downstream-gen 2 name: downstream-gen
3 -description: A5 下游文档生成——基于 docs/01 和 docs/03 推导,一次性生成 docs/02 + docs/05 + docs/06 § 三 + docs/10,回填 REQ 卡片依赖接口,把模块清单追加到 docs/08 § 二 3 +description: A5 下游文档生成——基于 docs/01 和 docs/03 推导,一次性生成 docs/02 + docs/05 + docs/10,回填 REQ 卡片依赖接口,把模块清单追加到 docs/08 § 二,并由 prototype/ + docs/01 + docs/05 推导 FE 清单写入 docs/08 § 三。这是 Plan 阶段最后一个 A 步骤(A6 已并入此处)
4 user-invocable: false 4 user-invocable: false
5 allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion 5 allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion
6 --- 6 ---
@@ -37,11 +37,17 @@ allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion @@ -37,11 +37,17 @@ allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion
37 37
38 勾选:` - [ ] REQ 卡片依赖接口已回填` 38 勾选:` - [ ] REQ 卡片依赖接口已回填`
39 39
40 -### C. docs/06 — 页面清单 40 +### C. FE 清单 — 推导前端功能写入 docs/08 § 三
41 41
42 -对每个有前端页面的模块:读取并填充 `${CLAUDE_SKILL_DIR}/templates/docs-06-module-pagelist-template.md`,追加到 `docs/06-UI交互规范.md` § 三 42 +前端布局 / 页面 / 交互的权威是项目根 `prototype/`(完整前端 demo,含全部页面与布局)。本步**只**把「有哪些前端功能(FE-NN)」推导出来,供 Coding 阶段 `coding.mjs` 的 Router 聚合 `frontend-phase`——不另写 UI 规范文档
43 43
44 -勾选:` - [ ] docs/06 § 三 页面清单已填入` 44 +1. 用 `Glob` 检查 `prototype/**/*.html`:
  45 + - **0 个** → Plan 期可问:用 `AskUserQuestion` 告知「未在 prototype/ 找到 .html 原型,前端以 prototype/ 为权威」,给「我已补齐原型,请重新检查」/「本项目无前端」。选「无前端」→ docs/08 § 三「功能:」留空(Router 不产生 frontend-phase),跳过 2/3;选「已补齐」→ 重新 `Glob`。
  46 + - **≥1 个** → 继续。
  47 +2. 综合 `prototype/*.html` + docs/01 REQ 卡片 + docs/05 端点,按业务功能粒度推导 FE 清单(一个 `FE-NN` 可关联多个 prototype 区域 / 多个 REQ)。
  48 +3. 用 `Edit` 把 FE-NN 行写入 `docs/08-模块任务管理.md § 三` 的「功能:」项下,一行一个:` - [ ] FE-NN <功能名>`(coding.mjs Router 据此聚合前端阶段)。
  49 +
  50 +勾选:` - [ ] FE 清单已推导填入 docs/08 § 三`
45 51
46 ### D. docs/08 — 追加模块清单 52 ### D. docs/08 — 追加模块清单
47 53
@@ -72,9 +78,9 @@ allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion @@ -72,9 +78,9 @@ allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion
72 4. 打印 A5 完成横幅并**停下**: 78 4. 打印 A5 完成横幅并**停下**:
73 79
74 ``` 80 ```
75 - [downstream-gen] ✅ A5 下游文档生成完成(A0~A5)  
76 - 产出:docs/02 / docs/05 / docs/06 § 三 / docs/08 § 二 / docs/10;docs/08 § 一 A0~A5 已全勾。  
77 - ⏭️ 下一步:运行 /erp-workflow:plan-start 81 + [downstream-gen] ✅ A5 下游文档生成完成(Plan A0~A5 全部完成)
  82 + 产出:docs/02 / docs/05 / docs/10 / docs/08 § 二 模块清单 / docs/08 § 三 FE 清单;docs/08 § 一 A0~A5 已全勾。
  83 + ⏭️ 下一步:运行 /erp-workflow:plan-start 进入终结闸
78 ``` 84 ```
79 85
80 ## 参考 86 ## 参考
@@ -82,6 +88,6 @@ allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion @@ -82,6 +88,6 @@ allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion
82 - `${CLAUDE_SKILL_DIR}/templates/docs-02-template.md` 88 - `${CLAUDE_SKILL_DIR}/templates/docs-02-template.md`
83 - `${CLAUDE_SKILL_DIR}/templates/docs-05-header-template.md` 89 - `${CLAUDE_SKILL_DIR}/templates/docs-05-header-template.md`
84 - `${CLAUDE_SKILL_DIR}/templates/docs-05-endpoint-template.md` 90 - `${CLAUDE_SKILL_DIR}/templates/docs-05-endpoint-template.md`
85 -- `${CLAUDE_SKILL_DIR}/templates/docs-06-module-pagelist-template.md`(追加到 docs/06 § 三 91 +- `prototype/**/*.html`(前端页面/布局/交互权威;C 段据此推导 FE 清单
86 - `${CLAUDE_SKILL_DIR}/templates/docs-08-module-row-template.md`(模块 bullet 行模板) 92 - `${CLAUDE_SKILL_DIR}/templates/docs-08-module-row-template.md`(模块 bullet 行模板)
87 - `${CLAUDE_SKILL_DIR}/templates/docs-10-header-template.md` 93 - `${CLAUDE_SKILL_DIR}/templates/docs-10-header-template.md`
skills/plan/downstream-gen/templates/docs-06-module-pagelist-template.md deleted
1 -### {{module_id}} {{module_name}}  
2 -  
3 -{{#each pages}}  
4 -- **{{page_name}}** (`{{route}}`)  
5 - - 类型: {{page_type}} (列表页 / 表单页 / 详情页 / 树形管理页)  
6 - - 对应 REQ: {{req_ids}}  
7 - - 入口菜单: {{menu_path}}  
8 - - 主要交互: {{interactions}}  
9 -{{/each}}  
skills/plan/frontend-scope-lock/SKILL.md deleted
1 ----  
2 -name: frontend-scope-lock  
3 -description: A6 前端范围锁定(Plan 期)——检查项目根 prototype/*.html,从 prototype + docs/01 REQ 卡片 + docs/05/06 提炼项目级 UI 约定、Design Tokens、组件库选型,逐项 AskUserQuestion 确认后写入 docs/06(UI 交互规范)+ docs/04(前端栈),并为每个 FE-NN 锁定设计决策表。把全部前端歧义前移到 Plan 期问清,使 Coding 阶段前端循环无需再弹窗。  
4 -user-invocable: false  
5 -allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion  
6 ----  
7 -  
8 -**所有输出必须使用中文。**  
9 -  
10 -# frontend-scope-lock  
11 -  
12 -## 执行步骤  
13 -  
14 -> **关于 AskUserQuestion**:下文只描述「问什么、给哪些选项、各选项导向什么后续」。`header` / 各选项的 `description` / `multiSelect` 等具体参数由你按工具 schema 自行填全合法值——不要把下文的选项文字当成完整调用照抄。  
15 -  
16 -### 步骤 1:检查 prototype(缺失则在此问)  
17 -  
18 -用 `Glob` 检查项目根 `prototype/**/*.html`:  
19 -  
20 -- **至少 1 个 `.html`** → 通过,记下文件清单,进入步骤 2。  
21 -- **0 个** → 这是 Plan 期,**可以问**。用 `AskUserQuestion` 告知用户「未在 prototype/ 找到任何 .html 原型,前端范围锁定依赖原型作为页面骨架权威」,给「我已补齐原型,请重新检查」和「本项目无前端,跳过 A6」两个选项。  
22 - - 选「已补齐」→ 重新 `Glob`:命中则进入步骤 2,仍为 0 则重复本问。  
23 - - 选「无前端」→ 在 docs/08 § 一 同时勾父项 + 3 子项(否则下次 plan-start 会重派),父项行尾注「(无前端,A6 跳过)」,打印步骤 6 横幅(产出标注「跳过」)并**停止**,不写 docs/06 / docs/04。3 子项:  
24 - - ` - [x] docs/06 项目级 UI 约定 + Design Tokens + 组件库已锁定(无前端跳过)`  
25 - - ` - [x] docs/04 § 二 前端栈已锁定(引用 docs/06)(无前端跳过)`  
26 - - ` - [x] 各 FE-NN 设计决策表已生成(docs/06 § 三之后 / docs/08 § 三)(无前端跳过)`  
27 -  
28 -### 步骤 2:收集证据(只读,不问)  
29 -  
30 -为提炼项目级约定,`Read` 以下来源:  
31 -  
32 -- **prototype/**:所有 `*.html`,作为页面布局 / 组件 / 交互的**实测权威**(DOM 结构、表单展现、列表范式、状态色实例)。  
33 -- **docs/01-需求清单/**:各 `_module.md` + `REQ-*.md`,提取 UI 描述、业务校验、acceptance 中与界面相关的部分。  
34 -- **docs/05-API接口契约.md**:端点列表,确认前端要消费的接口集合(影响页面状态机 / 加载态)。  
35 -- **docs/06-UI交互规范.md**:已有的通用交互规则(§ 一)、Design Tokens(§ 二)、页面清单(§ 三 由 A5 填)。布局以项目根 `prototype/` 为权威,docs/06 不设独立布局小节。本 skill 在此基础上**收敛 / 补全**,不推翻已确认内容。  
36 -- **docs/04-技术规范.md § 零**:技术栈表里的前端行(如 `前端 UI 组件` = Ant Design),作为组件库选型默认值来源。  
37 -  
38 -把证据归纳为三组**草案**:(a) 项目级 UI 约定、(b) Design Tokens(全局调色板 + 组件级状态色)、(c) 组件库选型。草案优先复用 docs/06 / docs/04 既有值(已锁定的不重问),仅对 prototype 与现文档**不一致**或**缺失**的点进入步骤 3 确认。  
39 -  
40 -### 步骤 3:逐项 AskUserQuestion 确认  
41 -  
42 -**一次一问**,仅对真歧义点。每问给出「从证据提炼的默认值」让用户**确认 / 覆盖**,不造无意义确认题。建议覆盖(无歧义的项直接采用默认值,不弹问):  
43 -  
44 -1. **UI 约定**:整体布局骨架、最小视口 / 响应式策略、列表页范式、表单展现阈值(Modal / Drawer / 独立页)、操作反馈范式、数据展示约定、前端权限控制方式。  
45 -2. **Design Tokens**:全局调色板语义→变量→默认值;组件级状态色表(编辑 / 只读 / 悬浮 的 bg/fg)。prototype 中出现但未登记的色值 → 问是否新增 token。  
46 -3. **组件库选型**:UI 组件库 + 版本(默认取 docs/04 § 零)、主题接入方式、图标库、表格 / 表单是否二次封装。  
47 -  
48 -每个确认结果即时记入对应草案。**绝不**留 `【人工填写:】` / `{{占位}}` / `TBD` 作为最终值。  
49 -  
50 -### 步骤 4:写入 docs/06 + docs/04  
51 -  
52 -用 `${CLAUDE_SKILL_DIR}/templates/fe-scope-template.md` 作为填充骨架,把步骤 3 确认后的真实值填入(剥掉模板内 HTML 注释),分别落盘:  
53 -  
54 -- **docs/06-UI交互规范.md**(用 `Edit` 合并,不另起文件;小节编号以 `skeleton-gen/templates/docs-06-static-template.md` 为权威:§ 一 通用交互规则 / § 二 Design Tokens / § 三 页面清单):  
55 - - 模板 § 一 → 收敛 / 补全 docs/06 § 一(通用交互规则)的项目级约定。  
56 - - 模板 § 二 → 写入 / 校正 docs/06 § 二(Design Tokens 全局调色板 + 组件级状态色 + Token 默认值),与 `src/styles/tokens.css` 命名规范(docs/04 § 2.5)一致。  
57 - - 模板 § 五 → 追加到 docs/06 § 三(页面清单)之后,作为 **FE 级设计决策表**:FE 清单来自 docs/08 § 三(若 § 三 尚无 FE bullet,则在此按 prototype + docs/01 + docs/05 推导 FE 清单并**同时写入 docs/08 § 三**「功能:」项,行格式见 docs/08 模板)。一 FE 一行。  
58 -- **docs/04-技术规范.md § 二(前端编码规范)**(用 `Edit`):  
59 - - 把组件库选型 + 模板 § 四前端栈摘要写入 / 校正 § 2.3(组件 / 页面编写规范)与 § 2.5(样式与主题)的引用说明;色值约定指向 docs/06 § 二。  
60 - - 不重复抄 docs/06 全文,只写「前端组件库 = X、tokens 锁定于 docs/06 § 二」这类引用,保持 SSoT。  
61 -  
62 -写入时遵循模板的字面安全约定:值含 `$` / `{` / `}` 等字符**原样写入**,不做二次解释。  
63 -  
64 -### 步骤 5:自审(inline 修,不等用户)  
65 -  
66 -- 模板五节均已填充,**无** `{{...}}` / `【人工填写:】` / `TBD` 残留(`Grep` 校验 docs/06 + docs/04 本次写入区域)。  
67 -- 组件库选型与 docs/04 § 零前端行一致;如确认值覆盖了 § 零默认值,回写 § 零保持一致。  
68 -- docs/06 § 五 / docs/08 § 三 的 FE-NN 集合一致,每个 FE 行字段非空。  
69 -- 命中残留 → 就地修正后重新校验;无法自决的歧义 → 回步骤 3 补问。  
70 -  
71 -### 步骤 6:勾选 docs/08 + 终止横幅  
72 -  
73 -1. 用 `Edit` 在 `docs/08-模块任务管理.md § 一` 勾选 A6 子项 + 父项:  
74 - - ` - [ ] docs/06 项目级 UI 约定 + Design Tokens + 组件库已锁定`  
75 - - ` - [ ] docs/04 § 二 前端栈已锁定(引用 docs/06)`  
76 - - ` - [ ] 各 FE-NN 设计决策表已生成(docs/06 § 三之后 / docs/08 § 三)`  
77 - - `- [ ] A6 前端范围锁定 — frontend-scope-lock`  
78 -2. 向用户**直接输出**终止横幅并**停止**:  
79 -  
80 -```  
81 -[frontend-scope-lock] ✅ A6 前端范围锁定完成  
82 -产出:docs/06 § 一/二 + § 三之后各 FE-NN 决策表;docs/04 § 二 前端栈(引用 docs/06)。  
83 -Plan 阶段(A0~A6)到此结束。请运行 /erp-workflow:plan-start 进入终结闸。  
84 -```  
85 -  
86 -## 参考  
87 -  
88 -- `${CLAUDE_SKILL_DIR}/templates/fe-scope-template.md`(产出骨架)  
89 -- `prototype/**/*.html`(页面骨架实测权威,步骤 1 前置门由本 skill 自承)  
90 -- `docs/01-需求清单/**/*.md`(UI 描述 / 业务校验来源)  
91 -- `docs/05-API接口契约.md`(前端消费端点)  
92 -- `docs/06-UI交互规范.md`(写入目标:§ 一 通用交互约定、§ 二 Tokens、§ 三之后 FE 决策表)  
93 -- `docs/04-技术规范.md § 二 / § 零`(前端栈 + 组件库选型写入目标)  
94 -- `docs/08-模块任务管理.md § 一`(A6 进度勾选)/ `§ 三`(FE 清单)  
95 -- 上游:`plan-start`(A5 完成后派发到此)  
96 -- 下游:`plan-start` 终结闸(A6 完成后回交校验);Coding 阶段 `workflows/coding.mjs` 前端循环消费本 skill 的产出  
skills/plan/frontend-scope-lock/templates/fe-scope-template.md deleted
1 -## 一、项目级 UI 约定  
2 -  
3 -> 来源:prototype/*.html 实测 + docs/01 REQ 卡片 UI 描述 + docs/06 已有布局。经用户确认。  
4 -  
5 -| 约定项 | 锁定值 | 依据 |  
6 -| --- | --- | --- |  
7 -| 整体布局骨架 | {{LAYOUT_SKELETON}} | {{LAYOUT_SOURCE}} |  
8 -| 最小支持视口 / 响应式策略 | {{VIEWPORT_POLICY}} | {{VIEWPORT_SOURCE}} |  
9 -| 列表页交互范式 | {{LIST_PATTERN}} | {{LIST_SOURCE}} |  
10 -| 表单展现规则(Modal / Drawer / 独立页阈值) | {{FORM_PATTERN}} | {{FORM_SOURCE}} |  
11 -| 操作反馈范式(成功 / 失败 / 二次确认) | {{FEEDBACK_PATTERN}} | {{FEEDBACK_SOURCE}} |  
12 -| 数据展示约定(状态 / 日期 / 金额 / 空值 / 操作列) | {{DISPLAY_PATTERN}} | {{DISPLAY_SOURCE}} |  
13 -| 前端权限控制方式 | {{AUTH_PATTERN}} | {{AUTH_SOURCE}} |  
14 -  
15 -## 二、Design Tokens  
16 -  
17 -> 单元格写 token 名(`--color-xxx`),不写裸 hex;色值默认值落地于 `src/styles/tokens.css`。命名规范见 docs/04 § 2.5。  
18 -  
19 -### 2.1 全局调色板  
20 -  
21 -| 语义 | 变量名 | 默认值 | 用途 |  
22 -| --- | --- | --- | --- |  
23 -| {{TOKEN_SEMANTIC}} | {{TOKEN_VAR}} | {{TOKEN_VALUE}} | {{TOKEN_USAGE}} |  
24 -  
25 -### 2.2 组件级状态色  
26 -  
27 -| 序号 | 组件 | 编辑 bg | 只读 bg | 悬浮 bg | 编辑 fg | 只读 fg | 悬浮 fg | 备注 |  
28 -| --- | --- | --- | --- | --- | --- | --- | --- | --- |  
29 -| {{COMP_NO}} | {{COMP_NAME}} | {{COMP_BG_EDIT}} | {{COMP_BG_READONLY}} | {{COMP_BG_HOVER}} | {{COMP_FG_EDIT}} | {{COMP_FG_READONLY}} | {{COMP_FG_HOVER}} | {{COMP_NOTE}} |  
30 -  
31 -## 三、组件库选型  
32 -  
33 -| 项 | 锁定值 | 依据 / 备注 |  
34 -| --- | --- | --- |  
35 -| 前端 UI 组件库 | {{UI_LIB}} | {{UI_LIB_SOURCE}} |  
36 -| 版本 | {{UI_LIB_VERSION}} | 与 docs/04 § 零 一致 |  
37 -| 主题接入方式 | {{UI_LIB_THEME}} | 如 ConfigProvider.theme.token 引用 § 二全局调色板 |  
38 -| 图标库 | {{ICON_LIB}} | {{ICON_LIB_SOURCE}} |  
39 -| 表格 / 表单封装策略 | {{WRAP_STRATEGY}} | 是否二次封装、统一 props 约定 |  
40 -  
41 -## 四、前端栈摘要(同步 docs/04 § 二)  
42 -  
43 -| 分层 | 技术 | 版本 | 说明 |  
44 -| --- | --- | --- | --- |  
45 -| {{FE_LAYER}} | {{FE_TECH}} | {{FE_VERSION}} | {{FE_NOTE}} |  
46 -  
47 -## 五、各 FE 设计决策表  
48 -  
49 -> 一 FE 一行,FE 清单来自 docs/08 § 三。每行锁定该 FE 的页面骨架来源、页面类型、组件库选型与状态机要点,供 Coding 阶段前端循环直接消费(不再二次问人)。  
50 -  
51 -| FE-NN | 功能名 | 关联 REQ | 关联原型 | 页面类型 | 核心组件树要点 | 关键状态机(loading/empty/error/正常/提交中) | 引用 Design Tokens |  
52 -| --- | --- | --- | --- | --- | --- | --- | --- |  
53 -| {{FE_ID}} | {{FE_NAME}} | {{FE_REQS}} | {{FE_PROTOTYPES}} | {{FE_PAGE_TYPE}} | {{FE_COMPONENT_TREE}} | {{FE_STATE_MACHINE}} | {{FE_TOKENS}} |  
skills/plan/plan-start/SKILL.md
@@ -17,9 +17,9 @@ allowed-tools: Skill Read Glob Grep @@ -17,9 +17,9 @@ allowed-tools: Skill Read Glob Grep
17 17
18 2. **根据 § 一 找到当前进度** 18 2. **根据 § 一 找到当前进度**
19 19
20 - **判定算法(务必按此执行,不要凭"表里含 Axx"判断;docs/08 § 一 模板始终列出 A0~A6 全部行,"含"恒为真)**: 20 + **判定算法(务必按此执行,不要凭"表里含 Axx"判断;docs/08 § 一 模板始终列出 A0~A5 全部行,"含"恒为真)**:
21 - 用 Read / Grep 把 `docs/08-模块任务管理.md § 一` 全文读出,按文件顺序自上而下扫描,找到**第一个 `- [ ]` 未勾子项**(仅扫 § 一)。 21 - 用 Read / Grep 把 `docs/08-模块任务管理.md § 一` 全文读出,按文件顺序自上而下扫描,找到**第一个 `- [ ]` 未勾子项**(仅扫 § 一)。
22 - - 该子项归属的父项 `Axx`(A0~A6)即为当前阶段,按下表派发到对应 skill。 22 + - 该子项归属的父项 `Axx`(A0~A5)即为当前阶段,按下表派发到对应 skill。
23 - 若 § 一 所有 `[ ]` 都已变成 `[x]`(含父项与全部子项)→ 进入 §2.1 Plan 终结闸。 23 - 若 § 一 所有 `[ ]` 都已变成 `[x]`(含父项与全部子项)→ 进入 §2.1 Plan 终结闸。
24 24
25 | `第一个未勾子项归属` | `后续` | `阶段` | 25 | `第一个未勾子项归属` | `后续` | `阶段` |
@@ -31,14 +31,13 @@ allowed-tools: Skill Read Glob Grep @@ -31,14 +31,13 @@ allowed-tools: Skill Read Glob Grep
31 | A3 父项或其任一子项 | `db-design-gen` | `A3` | 31 | A3 父项或其任一子项 | `db-design-gen` | `A3` |
32 | A4 父项或其任一子项 | `db-init` | `A4` | 32 | A4 父项或其任一子项 | `db-init` | `A4` |
33 | A5 父项或其任一子项 | `downstream-gen` | `A5` | 33 | A5 父项或其任一子项 | `downstream-gen` | `A5` |
34 -| A6 父项或其任一子项 | `frontend-scope-lock` | `A6` |  
35 | § 一 全部 `[x]` | **无分发** → §2.1 Plan 终结闸 | - | 34 | § 一 全部 `[x]` | **无分发** → §2.1 Plan 终结闸 | - |
36 35
37 ## 第二步:分发通知 + 调用目标 skill 36 ## 第二步:分发通知 + 调用目标 skill
38 37
39 ### 2.1 Plan 已完成 — 终结硬闸(HARD GATE) 38 ### 2.1 Plan 已完成 — 终结硬闸(HARD GATE)
40 39
41 -A 阶段 checkbox 全部 `[x]` 后先跑下面 5 项前移闸门; 全过才放行, 任一未过则拦截. 40 +A 阶段 checkbox 全部 `[x]` 后先跑下面 4 项前移闸门; 全过才放行, 任一未过则拦截.
42 41
43 #### 第 1 步:逐项校验前移闸门(用 Read / Glob / Grep,禁止跳过任何一项) 42 #### 第 1 步:逐项校验前移闸门(用 Read / Glob / Grep,禁止跳过任何一项)
44 43
@@ -46,12 +45,11 @@ A 阶段 checkbox 全部 `[x]` 后先跑下面 5 项前移闸门; 全过才放 @@ -46,12 +45,11 @@ A 阶段 checkbox 全部 `[x]` 后先跑下面 5 项前移闸门; 全过才放
46 45
47 1. **REQ 卡片真实数据**(来自 A1 scope-lock) 46 1. **REQ 卡片真实数据**(来自 A1 scope-lock)
48 - `Glob` 找出全部 REQ 卡片(如 `docs/01-需求清单/**/*.md`)。 47 - `Glob` 找出全部 REQ 卡片(如 `docs/01-需求清单/**/*.md`)。
49 - - 对每张卡片 `Grep` 命中以下任一即缺口: `【人工填写` / `TBD` / `待补` / `<示例` / `【示例行` (与 scope-lock E.1 同集合).  
50 - - 缺口表述示例:`REQ-USER-001 仍含 TBD / 示例值未替换为真实约束 / 示例行未删除`。 48 + - 对每张卡片 `Grep` 命中以下任一即缺口: `【人工填写` / `TBD` / `待补` / `{{`(6 个标量占位未替换) (与 scope-lock E.1 同集合).
  49 + - 缺口表述示例:`REQ-USER-001 仍含 TBD / {{title}} 占位未替换`。
51 50
52 -2. **secrets / 项目配置全锁**(来自 A1 收集的 secret/account/package-name/namespace 清单)  
53 - - `Read` `.env.local`(真实 secret 值所在;gitignored,docs/07 只记规则不记值):校验 `config-vars.yaml` 的 `secrets_ref` 列出的每个 secret 键(如 `DB_PASSWORD` / `JWT_SECRET`)均有真实值,无 `【人工填写`/`TBD`/空值。  
54 - - `Read` `config-vars.yaml`(非敏感项目级配置):校验包名 / namespace / 端口 / 初始账号等字段均已填,无 `【人工填写`/`TBD`。 51 +2. **全部配置全锁**(来自 A1 写入 `config-vars.yaml` 的非敏感配置 + 敏感凭据,单一文件)
  52 + - `Read` `config-vars.yaml`(项目全部配置,含敏感凭据,随项目提交):校验所有字段均有真实值,无 `【人工填写`/`TBD`/空值——含非敏感项(`backend`/`frontend` 包名 / 端口、`admin_init.username`、`database.host/port/user/schema`)与敏感项(`database.password`、`admin_init.password`、`secrets.*`)。
55 - 任一未填即缺口。(docs/07-环境配置.md 仅承载规则/约定,不参与值校验。) 53 - 任一未填即缺口。(docs/07-环境配置.md 仅承载规则/约定,不参与值校验。)
56 54
57 3. **docs/04 §零 命令齐**(来自 A1 收集的每栈构建/lint/单测/e2e 命令) 55 3. **docs/04 §零 命令齐**(来自 A1 收集的每栈构建/lint/单测/e2e 命令)
@@ -62,13 +60,11 @@ A 阶段 checkbox 全部 `[x]` 后先跑下面 5 项前移闸门; 全过才放 @@ -62,13 +60,11 @@ A 阶段 checkbox 全部 `[x]` 后先跑下面 5 项前移闸门; 全过才放
62 - `Read` `docs/05-API接口契约.md` 与 `docs/02-开发计划.md`。 60 - `Read` `docs/05-API接口契约.md` 与 `docs/02-开发计划.md`。
63 - 校验:(a) docs/05 每个端点都有请求/响应 schema、无 `【人工填写`/`TBD`;(b) docs/02 每个 REQ 都在构建顺序 DAG 中、cycle-breaking 顺序有 `note` 说明。缺任一即缺口。 61 - 校验:(a) docs/05 每个端点都有请求/响应 schema、无 `【人工填写`/`TBD`;(b) docs/02 每个 REQ 都在构建顺序 DAG 中、cycle-breaking 顺序有 `note` 说明。缺任一即缺口。
64 62
65 -5. **A6 前端 scope 已锁**(来自 A6 frontend-scope-lock)  
66 - - 若 A6 父项行尾含「无前端, A6 跳过」标注 → 本项直接通过, 不再读 docs/06.  
67 - - 否则(有前端):`Read` `docs/06-UI交互规范.md`,校验项目级 UI 约定 / Design Tokens / 组件库选型已确认;每个 FE-NN 的设计决策表非占位;prototype 闸门已过(docs/08 § 一 A6 勾选即代表此项已由 A6 skill 锁定,但仍核对 docs/06 无 `【人工填写`/`TBD` 残留)。缺任一即缺口。 63 +(前端无独立 Plan 文档闸:布局/交互以项目根 `prototype/` 为权威,FE 清单由 A5 写入 docs/08 § 三,Coding 阶段前端循环直接消费 prototype/ + tokens.css + docs/04。)
68 64
69 #### 第 2 步(A):全部通过 → 放行 65 #### 第 2 步(A):全部通过 → 放行
70 66
71 -仅当第 1 步 **5 项全部 `通过`** 时,向用户输出完成横幅: 67 +仅当第 1 步 **4 项全部 `通过`** 时,向用户输出完成横幅:
72 68
73 ``` 69 ```
74 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
@@ -76,10 +72,9 @@ A 阶段 checkbox 全部 `[x]` 后先跑下面 5 项前移闸门; 全过才放 @@ -76,10 +72,9 @@ A 阶段 checkbox 全部 `[x]` 后先跑下面 5 项前移闸门; 全过才放
76 72
77 已校验通过: 73 已校验通过:
78 ✓ REQ 卡片均为真实数据(无占位/示例残留) 74 ✓ REQ 卡片均为真实数据(无占位/示例残留)
79 - ✓ .env.local secrets + config-vars.yaml(account/package/namespace)全锁 75 + ✓ config-vars.yaml 全部配置(含 DB 凭据 / 密钥 / 包名 / 端口 / 初始账号)全锁
80 ✓ docs/04 §零 各栈 build/lint/unit/e2e 命令齐全 76 ✓ docs/04 §零 各栈 build/lint/unit/e2e 命令齐全
81 ✓ docs/05 API 契约 + docs/02 构建顺序已评审 77 ✓ docs/05 API 契约 + docs/02 构建顺序已评审
82 - ✓ A6 前端 scope(UI 约定 / tokens / 组件库)已锁  
83 78
84 运行 /erp-workflow:coding-start 进入 B 阶段 (coding-start 会校验 git 状态). 79 运行 /erp-workflow:coding-start 进入 B 阶段 (coding-start 会校验 git 状态).
85 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 80 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
@@ -100,8 +95,8 @@ A 阶段 checkbox 全部 `[x]` 后先跑下面 5 项前移闸门; 全过才放 @@ -100,8 +95,8 @@ A 阶段 checkbox 全部 `[x]` 后先跑下面 5 项前移闸门; 全过才放
100 95
101 <逐条列出每个缺口,格式:[闸门] 缺口描述 → 回填位置> 96 <逐条列出每个缺口,格式:[闸门] 缺口描述 → 回填位置>
102 例: 97 例:
103 - [REQ 真实数据] REQ-USER-001 输入字段「示例值」列仍为模板占位 → docs/01-需求清单/...  
104 - [secrets] DB_PASSWORD 未填 → .env.local 98 + [REQ 真实数据] REQ-USER-001 仍含 {{goal}} 占位未替换 → docs/01-需求清单/...
  99 + [配置] database.password 未填 → config-vars.yaml
105 [docs/04 §零] node 栈缺 e2e 命令 → docs/04-技术规范.md §零 100 [docs/04 §零] node 栈缺 e2e 命令 → docs/04-技术规范.md §零
106 101
107 补齐后再次运行 /erp-workflow:plan-start 重新校验。 102 补齐后再次运行 /erp-workflow:plan-start 重新校验。
skills/plan/project-init/templates/docs-08-initial-template.md
1 # 08-工作流进度 1 # 08-工作流进度
2 2
3 > 全流程进度跟踪。CC 每完成一项产出就勾选一项。 3 > 全流程进度跟踪。CC 每完成一项产出就勾选一项。
4 -> - **§ 一 Plan(A0~A6)**:`plan-start` 找第一个未勾 A 子项分发到对应 skill  
5 -> - **§ 二 Coding(模块)**:分发以 `docs/02-开发计划.md § 二 开发顺序清单` 为准;`coding.mjs` Router 按 docs/02 顺序扫描,对每个 REQ 所属模块查询本 § 二的 `里程碑:` 字段 + 本地 `git tag -l 'milestone/<id>'` 判定模块完成,并用 `git tag -l 'req-done/<REQ-or-FE>'` 判定功能级跳过。本 § 二 行序无语义,仅作模块元数据表  
6 4
7 ## 一、Plan 阶段(一次性) 5 ## 一、Plan 阶段(一次性)
8 6
@@ -18,8 +16,8 @@ @@ -18,8 +16,8 @@
18 - [ ] REQ 卡片骨架已生成(docs/01-需求清单/<module>/REQ-*.md,业务内容留待人工填写) 16 - [ ] REQ 卡片骨架已生成(docs/01-需求清单/<module>/REQ-*.md,业务内容留待人工填写)
19 17
20 - [ ] A2 骨架生成 — skeleton-gen 18 - [ ] A2 骨架生成 — skeleton-gen
21 - - [ ] 架构文档已生成(docs/04 § 一+、docs/06、docs/07、docs/09)  
22 - - [ ] 工具脚本已生成(scripts/*.mjs、.env.local) 19 + - [ ] 架构文档已生成(docs/04 § 一+、docs/07、docs/09)
  20 + - [ ] 工具脚本已生成(scripts/*.mjs)
23 - [ ] 样式 token 骨架已生成(src/styles/tokens.css) 21 - [ ] 样式 token 骨架已生成(src/styles/tokens.css)
24 - [ ] .gitignore 已配置 22 - [ ] .gitignore 已配置
25 23
@@ -30,22 +28,17 @@ @@ -30,22 +28,17 @@
30 - [ ] A4 DB 初始化 — db-init 28 - [ ] A4 DB 初始化 — db-init
31 - [ ] sql/migrations/V1__initial_schema.sql 已生成 29 - [ ] sql/migrations/V1__initial_schema.sql 已生成
32 - [ ] DDL 与 docs/03 全量一致 30 - [ ] DDL 与 docs/03 全量一致
33 - - [ ] .env.local 凭据已验证(mysql -e "SELECT 1" OK)  
34 - - [ ] setup-test-db.mjs 防护通过 + DROP+CREATE + apply V1 已执行 31 + - [ ] config-vars.yaml DB 凭据已验证(mysql -e "SELECT 1" OK)
  32 + - [ ] setup-test-db.mjs DROP+CREATE + apply V1 已执行
35 - [ ] DDL ↔ docs/03 apply 后 5 维一致(validate-ddl.mjs) 33 - [ ] DDL ↔ docs/03 apply 后 5 维一致(validate-ddl.mjs)
36 34
37 - [ ] A5 下游文档生成 — downstream-gen 35 - [ ] A5 下游文档生成 — downstream-gen
38 - [ ] docs/02 开发计划已生成 36 - [ ] docs/02 开发计划已生成
39 - [ ] docs/05 API 契约已生成 37 - [ ] docs/05 API 契约已生成
40 - - [ ] docs/06 § 三 页面清单已填入  
41 - [ ] docs/10 验收清单已生成 38 - [ ] docs/10 验收清单已生成
42 - [ ] 下方模块列表已填入 39 - [ ] 下方模块列表已填入
43 - [ ] REQ 卡片依赖接口已回填 40 - [ ] REQ 卡片依赖接口已回填
44 -  
45 -- [ ] A6 前端范围锁定 — frontend-scope-lock  
46 - - [ ] docs/06 项目级 UI 约定 + Design Tokens + 组件库已锁定  
47 - - [ ] docs/04 § 二 前端栈已锁定(引用 docs/06)  
48 - - [ ] 各 FE-NN 设计决策表已生成(docs/06 § 三之后 / docs/08 § 三) 41 + - [ ] FE 清单已推导填入 docs/08 § 三
49 42
50 ## 二、Coding 阶段(后端模块循环) 43 ## 二、Coding 阶段(后端模块循环)
51 44
@@ -53,7 +46,7 @@ @@ -53,7 +46,7 @@
53 46
54 ## 三、Coding 阶段(前端整体) 47 ## 三、Coding 阶段(前端整体)
55 48
56 -(FE 业务功能清单在 Plan 期 A6 `frontend-scope-lock` 由 prototype/ + docs/01 + docs/05 推导后写入下方"功能:"项;Coding 阶段 `coding.mjs` 的 Router 把缺少 `req-done/<FE-NN>` tag 的 FE 聚合为单一 `frontend-phase` 阶段,排在所有后端模块之后。整个前端阶段 1 个里程碑 tag,分支 `frontend-phase`。) 49 +(FE 业务功能清单在 Plan 期 A5 `downstream-gen` 由 prototype/ + docs/01 + docs/05 推导后写入下方"功能:"项;Coding 阶段 `coding.mjs` 的 Router 把缺少 `req-done/<FE-NN>` tag 的 FE 聚合为单一 `frontend-phase` 阶段,排在所有后端模块之后。整个前端阶段 1 个里程碑 tag,分支 `frontend-phase`。无前端则此处留空,Router 不产生前端阶段。)
57 50
58 - 整体里程碑: — 51 - 整体里程碑: —
59 - 功能: 52 - 功能:
skills/plan/skeleton-gen/SKILL.md
1 --- 1 ---
2 name: skeleton-gen 2 name: skeleton-gen
3 -description: A2 骨架生成——基于 docs/04 § 零 技术栈 + docs/01-需求清单/index.md 模块索引,生成项目专属的架构文档(docs/04 § 一+、docs/06、docs/07、docs/09)和工具脚本(.mjs,跨平台)。固定工具文件用 Read/Write 落盘,架构文档由 LLM 按大纲生成。 3 +description: A2 骨架生成——基于 docs/04 § 零 技术栈 + docs/01-需求清单/index.md 模块索引,生成项目专属的架构文档(docs/04 § 一+、docs/07、docs/09)和工具脚本(.mjs,跨平台)。固定工具文件用 Read/Write 落盘,架构文档由 LLM 按大纲生成。
4 user-invocable: false 4 user-invocable: false
5 allowed-tools: Read Write Edit Skill Grep Glob AskUserQuestion Bash(node *) 5 allowed-tools: Read Write Edit Skill Grep Glob AskUserQuestion Bash(node *)
6 --- 6 ---
@@ -18,7 +18,7 @@ allowed-tools: Read Write Edit Skill Grep Glob AskUserQuestion Bash(node *) @@ -18,7 +18,7 @@ allowed-tools: Read Write Edit Skill Grep Glob AskUserQuestion Bash(node *)
18 18
19 后续所有内容都基于它们推导。 19 后续所有内容都基于它们推导。
20 20
21 -### B.1 生成 3 个全新架构文档(docs/06 / 07 / 09) 21 +### B.1 生成 2 个全新架构文档(docs/07 / 09)
22 22
23 对下表每个目标文件: 23 对下表每个目标文件:
24 1. 读取对应的大纲模板 24 1. 读取对应的大纲模板
@@ -28,10 +28,11 @@ allowed-tools: Read Write Edit Skill Grep Glob AskUserQuestion Bash(node *) @@ -28,10 +28,11 @@ allowed-tools: Read Write Edit Skill Grep Glob AskUserQuestion Bash(node *)
28 28
29 | 目标文件 | 大纲模板 | 29 | 目标文件 | 大纲模板 |
30 |---|---| 30 |---|---|
31 -| `docs/06-UI交互规范.md`(§ 一 ~ 三;FE 决策表由 A6 frontend-scope-lock 追加到 § 三之后) | `${CLAUDE_SKILL_DIR}/templates/docs-06-static-template.md` |  
32 | `docs/07-环境配置.md` | `${CLAUDE_SKILL_DIR}/templates/docs-07-env-template.md` | 31 | `docs/07-环境配置.md` | `${CLAUDE_SKILL_DIR}/templates/docs-07-env-template.md` |
33 | `docs/09-项目目录结构.md` | `${CLAUDE_SKILL_DIR}/templates/docs-09-structure-template.md` | 32 | `docs/09-项目目录结构.md` | `${CLAUDE_SKILL_DIR}/templates/docs-09-structure-template.md` |
34 33
  34 +> 前端 UI/交互/布局不再单独出文档:项目根 `prototype/` 是完整前端 demo(页面 + 布局 + 交互的权威);Design Tokens 在 `src/styles/tokens.css`;前端编码规范在 docs/04 § 二。
  35 +
35 项目专属标识(根包名 / 命名空间)保留 `【人工填写:<说明>】` 占位,等人工在 docs/09 顶部补填一次后,其他文件复用。 36 项目专属标识(根包名 / 命名空间)保留 `【人工填写:<说明>】` 占位,等人工在 docs/09 顶部补填一次后,其他文件复用。
36 37
37 ### B.2 追加 docs/04 § 一+(保留 § 零 不覆盖) 38 ### B.2 追加 docs/04 § 一+(保留 § 零 不覆盖)
@@ -44,7 +45,7 @@ docs/04 已由 scope-lock 写入 § 零。本步骤追加 § 一 ~ 三。 @@ -44,7 +45,7 @@ docs/04 已由 scope-lock 写入 § 零。本步骤追加 § 一 ~ 三。
44 4. 拼接原有内容和新生成内容,写回 `docs/04-技术规范.md`。 45 4. 拼接原有内容和新生成内容,写回 `docs/04-技术规范.md`。
45 46
46 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: 47 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:
47 -- ` - [ ] 架构文档已生成(docs/04 § 一+、docs/06、docs/07、docs/09)` 48 +- ` - [ ] 架构文档已生成(docs/04 § 一+、docs/07、docs/09)`
48 49
49 ### C. 生成工具脚本 50 ### C. 生成工具脚本
50 51
@@ -54,12 +55,11 @@ docs/04 已由 scope-lock 写入 § 零。本步骤追加 § 一 ~ 三。 @@ -54,12 +55,11 @@ docs/04 已由 scope-lock 写入 § 零。本步骤追加 § 一 ~ 三。
54 55
55 | 模板 | 目标路径 | 56 | 模板 | 目标路径 |
56 |---|---| 57 |---|---|
57 -| `${CLAUDE_SKILL_DIR}/templates/env-local-template` | `.env.local` |  
58 | `${CLAUDE_SKILL_DIR}/templates/scripts-setup-test-db-template.mjs` | `scripts/setup-test-db.mjs` | 58 | `${CLAUDE_SKILL_DIR}/templates/scripts-setup-test-db-template.mjs` | `scripts/setup-test-db.mjs` |
59 | `${CLAUDE_SKILL_DIR}/templates/styles-tokens-template.css` | `src/styles/tokens.css` | 59 | `${CLAUDE_SKILL_DIR}/templates/styles-tokens-template.css` | `src/styles/tokens.css` |
60 | (空文件) | `sql/migrations/.gitkeep` | 60 | (空文件) | `sql/migrations/.gitkeep` |
61 61
62 -> **`.env.local` 须与 `config-vars.yaml` 的 `secrets_ref` 对齐**:写完 `.env.local` 后用 `Read` 读仓库根 `config-vars.yaml` 的 `secrets_ref` 列表,逐个核对键名。env-local-template 已含 `DB_*` / `JWT_SECRET`;`secrets_ref` 里其余项目专属键(如 `REDIS_PASSWORD` / `ADMIN_INIT_PASSWORD` / 第三方凭证)用 `Edit` 追加到 `.env.local`,值统一为 `【人工填写:<说明>】` 62 +> 凭据 / 配置不在此生成:项目**全部配置**(含 DB 凭据 / 密钥)已由 A1 `scope-lock` 写入仓库根 `config-vars.yaml`;`scripts/setup-test-db.mjs` 运行时按 2 层 map 直接读它
63 63
64 #### C.2 渲染 scripts/test.mjs 64 #### C.2 渲染 scripts/test.mjs
65 65
@@ -72,7 +72,7 @@ docs/04 已由 scope-lock 写入 § 零。本步骤追加 § 一 ~ 三。 @@ -72,7 +72,7 @@ docs/04 已由 scope-lock 写入 § 零。本步骤追加 § 一 ~ 三。
72 > 占位是普通 shell 命令字符串,模板在运行期用 `spawnSync(cmd, { shell:true })` 跨平台执行(Windows 走 cmd.exe,*nix 走 /bin/sh),缺席 stack 由模板内的 `existsSync('backend')` / `existsSync('frontend')` 守卫跳过。 72 > 占位是普通 shell 命令字符串,模板在运行期用 `spawnSync(cmd, { shell:true })` 跨平台执行(Windows 走 cmd.exe,*nix 走 /bin/sh),缺席 stack 由模板内的 `existsSync('backend')` / `existsSync('frontend')` 守卫跳过。
73 73
74 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: 74 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:
75 -- ` - [ ] 工具脚本已生成(scripts/*.mjs、.env.local)` 75 +- ` - [ ] 工具脚本已生成(scripts/*.mjs)`
76 - ` - [ ] 样式 token 骨架已生成(src/styles/tokens.css)` 76 - ` - [ ] 样式 token 骨架已生成(src/styles/tokens.css)`
77 77
78 ### D. 追加 .gitignore 忽略项 78 ### D. 追加 .gitignore 忽略项
@@ -93,14 +93,13 @@ node &quot;${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs&quot; .gitignore &quot;${CLAUDE_SKILL_ @@ -93,14 +93,13 @@ node &quot;${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs&quot; .gitignore &quot;${CLAUDE_SKILL_
93 #### E.1 扫描 + 分组 93 #### E.1 扫描 + 分组
94 94
95 用 `Grep` 在以下路径扫 `【人工填写:`,记录命中(文件 / 行号 / 说明): 95 用 `Grep` 在以下路径扫 `【人工填写:`,记录命中(文件 / 行号 / 说明):
96 -- `docs/04-技术规范.md` / `docs/06-UI交互规范.md` / `docs/07-环境配置.md` / `docs/09-项目目录结构.md`  
97 -- `config-vars.yaml`(A1 留下的未推断字段,如包名 / 端口) 96 +- `docs/04-技术规范.md` / `docs/07-环境配置.md` / `docs/09-项目目录结构.md`
  97 +- `config-vars.yaml`(A1 留下的未填字段)
98 - `scripts/*.mjs` / `.gitignore` 98 - `scripts/*.mjs` / `.gitignore`
99 -- `.env.local`  
100 99
101 分两组: 100 分两组:
102 -- **敏感组**:`.env.local` 路径命中(凭据 / 密钥)。**不弹 QA**(凭据不进会话),E.3 提示用户自填。  
103 -- **非敏感组**:其余文件。按说明文字聚合为「根占位」(相同说明 = 同一值,多处共用)或「派生占位」(说明表达派生关系,如"后端 java 根包路径"派生自"根包名")。 101 +- **敏感组**:`config-vars.yaml` 中敏感字段命中(`database.password` / `admin_init.password` / `secrets.*` 等凭据 / 密钥)。**不弹 QA**(凭据不进会话),E.3 提示用户自填。
  102 +- **非敏感组**:其余命中(含 config-vars.yaml 的非敏感字段)。按说明文字聚合为「根占位」(相同说明 = 同一值,多处共用)或「派生占位」(说明表达派生关系,如"后端 java 根包路径"派生自"根包名")。
104 103
105 无命中 → 跳 E.4。 104 无命中 → 跳 E.4。
106 105
@@ -111,7 +110,7 @@ node &quot;${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs&quot; .gitignore &quot;${CLAUDE_SKILL_ @@ -111,7 +110,7 @@ node &quot;${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs&quot; .gitignore &quot;${CLAUDE_SKILL_
111 110
112 #### E.3 敏感占位提示(不弹 QA) 111 #### E.3 敏感占位提示(不弹 QA)
113 112
114 -若敏感组非空:打印提示横幅,列出 `.env.local` 待填字段名 + 告诉用户"直接编辑文件,凭据不进会话"。 113 +若敏感组非空:打印提示横幅,列出 `config-vars.yaml` 待填的敏感字段名 + 告诉用户"直接编辑 config-vars.yaml 填真实值,凭据不进会话"。
115 114
116 #### E.4 验证 + QA 闸门 115 #### E.4 验证 + QA 闸门
117 116
@@ -121,7 +120,7 @@ node &quot;${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs&quot; .gitignore &quot;${CLAUDE_SKILL_ @@ -121,7 +120,7 @@ node &quot;${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs&quot; .gitignore &quot;${CLAUDE_SKILL_
121 120
122 每次弹 QA 前重扫;有残留则打印残留位置清单(文件:行号 — 说明)+ 再弹 QA。 121 每次弹 QA 前重扫;有残留则打印残留位置清单(文件:行号 — 说明)+ 再弹 QA。
123 122
124 -QA 横幅涵盖:产出文件清单(docs/04 / 06 / 07 / 09 + config-vars.yaml + scripts/*.mjs + .env.local + .gitignore)、占位状态(N=0 或待填清单)、「继续」/「有疑问先沟通」两选项。 123 +QA 横幅涵盖:产出文件清单(docs/04 / 07 / 09 + scripts/*.mjs + .gitignore;config-vars.yaml 由 A1 产出,此处仅扫其待填项)、占位状态(N=0 或待填清单)、「继续」/「有疑问先沟通」两选项。
125 124
126 通过后(N=0 且用户选「继续」),用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: 125 通过后(N=0 且用户选「继续」),用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:
127 - `- [ ] A2 骨架生成 — skeleton-gen` 126 - `- [ ] A2 骨架生成 — skeleton-gen`
@@ -135,13 +134,11 @@ QA 横幅涵盖:产出文件清单(docs/04 / 06 / 07 / 09 + config-vars.yaml @@ -135,13 +134,11 @@ QA 横幅涵盖:产出文件清单(docs/04 / 06 / 07 / 09 + config-vars.yaml
135 - `docs/04-技术规范.md` § 零 134 - `docs/04-技术规范.md` § 零
136 - `docs/01-需求清单/index.md` 135 - `docs/01-需求清单/index.md`
137 - `${CLAUDE_SKILL_DIR}/templates/docs-04-skeleton-template.md` 136 - `${CLAUDE_SKILL_DIR}/templates/docs-04-skeleton-template.md`
138 -- `${CLAUDE_SKILL_DIR}/templates/docs-06-static-template.md`  
139 - `${CLAUDE_SKILL_DIR}/templates/docs-07-env-template.md` 137 - `${CLAUDE_SKILL_DIR}/templates/docs-07-env-template.md`
140 - `${CLAUDE_SKILL_DIR}/templates/docs-09-structure-template.md` 138 - `${CLAUDE_SKILL_DIR}/templates/docs-09-structure-template.md`
141 - `${CLAUDE_SKILL_DIR}/templates/scripts-test-template.mjs` 139 - `${CLAUDE_SKILL_DIR}/templates/scripts-test-template.mjs`
142 - `${CLAUDE_SKILL_DIR}/templates/scripts-setup-test-db-template.mjs` 140 - `${CLAUDE_SKILL_DIR}/templates/scripts-setup-test-db-template.mjs`
143 -- `${CLAUDE_SKILL_DIR}/templates/env-local-template`  
144 -- `config-vars.yaml` 141 +- `config-vars.yaml`(A1 产出,含 DB 凭据;setup-test-db.mjs 运行时读取)
145 - `${CLAUDE_SKILL_DIR}/templates/gitignore-append-template` 142 - `${CLAUDE_SKILL_DIR}/templates/gitignore-append-template`
146 - `${CLAUDE_SKILL_DIR}/templates/styles-tokens-template.css` 143 - `${CLAUDE_SKILL_DIR}/templates/styles-tokens-template.css`
147 - `${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs` 144 - `${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs`
skills/plan/skeleton-gen/templates/docs-06-static-template.md deleted
1 -# 06-UI交互规范  
2 -  
3 -> 本项目所有页面布局以项目根 `prototype/` 目录下的静态 HTML mockup 为权威。前端阶段实现时直接以 prototype/ HTML 推导组件树与样式。本文件仅承载跨页面通用规则与 Design Tokens。  
4 -  
5 -## 一、通用交互规则  
6 -  
7 -### 1.1 操作反馈  
8 -  
9 -### 1.2 数据展示  
10 -  
11 -### 1.3 权限控制(前端)  
12 -  
13 -## 二、Design Tokens  
14 -  
15 -### 2.1 全局调色板  
16 -  
17 -### 2.2 组件级状态色  
18 -  
19 -### 2.3 引用约定  
20 -  
21 -## 三、页面清单  
22 -(由 `downstream-gen` 按模块追加段落)  
skills/plan/skeleton-gen/templates/docs-09-structure-template.md
@@ -15,7 +15,6 @@ docs/ @@ -15,7 +15,6 @@ docs/
15 ├── 03-数据库设计文档.md 15 ├── 03-数据库设计文档.md
16 ├── 04-技术规范.md 16 ├── 04-技术规范.md
17 ├── 05-API接口契约.md 17 ├── 05-API接口契约.md
18 -├── 06-UI交互规范.md  
19 ├── 07-环境配置.md 18 ├── 07-环境配置.md
20 ├── 08-模块任务管理.md 19 ├── 08-模块任务管理.md
21 ├── 09-项目目录结构.md 20 ├── 09-项目目录结构.md
workflows/coding.mjs
@@ -133,7 +133,7 @@ function featureStageContract(phase) { @@ -133,7 +133,7 @@ function featureStageContract(phase) {
133 return [ 133 return [
134 '## 硬约束(非交互子代理)', 134 '## 硬约束(非交互子代理)',
135 '- 你是 Workflow 派生的**非交互子代理**,物理上无法弹出 AskUserQuestion / 等待人类输入。**绝不要尝试问人**。', 135 '- 你是 Workflow 派生的**非交互子代理**,物理上无法弹出 AskUserQuestion / 等待人类输入。**绝不要尝试问人**。',
136 - '- 缺值查找顺序:`.env.local` → `docs/07-环境配置.md` → `docs/04-技术规范.md` → `docs/05-API接口契约.md` → `docs/06-UI交互规范.md` → `CLAUDE.md` → 现有代码。', 136 + '- 缺值查找顺序:`config-vars.yaml` → `docs/07-环境配置.md` → `docs/04-技术规范.md` → `docs/05-API接口契约.md` → `prototype/`(前端布局/交互权威)→ `src/styles/tokens.css`(前端色值)→ `CLAUDE.md` → 现有代码。',
137 '- 仍查不到 → **不要编造、不要留 `【人工填写:】` / `TBD` / `TODO` 占位**;把具体阻塞点(缺哪个值、应在哪个 Plan 闸门锁定、为何无法继续)写进产物。', 137 '- 仍查不到 → **不要编造、不要留 `【人工填写:】` / `TBD` / `TODO` 占位**;把具体阻塞点(缺哪个值、应在哪个 Plan 闸门锁定、为何无法继续)写进产物。',
138 '- 然后让本步骤以非零结果 / 显式 throw 结束,由上层 Workflow 转为带诊断的 halt(fail-fast)。', 138 '- 然后让本步骤以非零结果 / 显式 throw 结束,由上层 Workflow 转为带诊断的 halt(fail-fast)。',
139 '- 全部输出文档**使用中文**。', 139 '- 全部输出文档**使用中文**。',
@@ -198,7 +198,7 @@ function deriveSpecPrompt(id, phase) { @@ -198,7 +198,7 @@ function deriveSpecPrompt(id, phase) {
198 featureStageContract(phase), 198 featureStageContract(phase),
199 '', 199 '',
200 '## 目标', 200 '## 目标',
201 - `静默派生 \`${id}\` 的实现规格(无 Q&A)。需求歧义本应在 Plan 期的结构化 per-REQ 表单 / 前端 scope-lock 锁定;这里**只消费已锁定的事实**,不再澄清。`, 201 + `静默派生 \`${id}\` 的实现规格(无 Q&A)。需求歧义本应在 Plan 期的结构化 per-REQ 表单锁定,前端布局/交互以 \`${ROOT}/prototype/\` 为权威;这里**只消费已锁定的事实**,不再澄清。`,
202 '', 202 '',
203 '## 收集上下文', 203 '## 收集上下文',
204 fe 204 fe
@@ -206,7 +206,7 @@ function deriveSpecPrompt(id, phase) { @@ -206,7 +206,7 @@ function deriveSpecPrompt(id, phase) {
206 `- 关联 REQ 卡片:\`${ROOT}/docs/01-需求清单/<module>/<REQ>.md\`(提取业务校验规则、acceptance、UI 描述)。`, 206 `- 关联 REQ 卡片:\`${ROOT}/docs/01-需求清单/<module>/<REQ>.md\`(提取业务校验规则、acceptance、UI 描述)。`,
207 `- 关联 prototype:Read \`${ROOT}/prototype/**/*.html\`(含 anchor 时聚焦相应区域),作为页面布局权威。`, 207 `- 关联 prototype:Read \`${ROOT}/prototype/**/*.html\`(含 anchor 时聚焦相应区域),作为页面布局权威。`,
208 `- API 契约:\`${ROOT}/docs/05-API接口契约.md\`,按本 FE 关联的 REQ 过滤出消费的端点。`, 208 `- API 契约:\`${ROOT}/docs/05-API接口契约.md\`,按本 FE 关联的 REQ 过滤出消费的端点。`,
209 - `- Design Tokens:\`${ROOT}/docs/06-UI交互规范.md § 二\`(色值 / 状态色引用源)。`, 209 + `- Design Tokens:\`${ROOT}/src/styles/tokens.css\`(色值 / 状态色单一来源;只用 var(--color-*),禁硬编码 hex)。`,
210 `- 前端组件库:\`${ROOT}/docs/04-技术规范.md § 零\` 的 \`frontend.ui_lib\`,决定组件选型。`, 210 `- 前端组件库:\`${ROOT}/docs/04-技术规范.md § 零\` 的 \`frontend.ui_lib\`,决定组件选型。`,
211 ].join('\n') 211 ].join('\n')
212 : [ 212 : [