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 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 4 "version": "0.2.0",
5 5 "skills": [
6 6 "./skills/plan/plan-start",
... ... @@ -10,7 +10,6 @@
10 10 "./skills/plan/db-design-gen",
11 11 "./skills/plan/db-init",
12 12 "./skills/plan/downstream-gen",
13   - "./skills/plan/frontend-scope-lock",
14 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 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 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 39 ### 3. 无障碍 (Accessibility) — best-effort, flag-obvious-only
40 40 - Form controls have `<label>` or `aria-label`.
... ... @@ -43,7 +43,7 @@ For each dimension below, classify Critical / Important / Suggestion as above.
43 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 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 47 - Critical operations must not depend on hover-only interactions (must work on touch).
48 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 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 4 user-invocable: true
5 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 39  
40 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 44 - 任一未勾 → 缺口:`Plan 未完成(<未勾项>)→ 先运行 /erp-workflow:plan-start`。
45 45  
46 46 2. **当前在本地默认分支(main / master)**
... ... @@ -59,7 +59,7 @@ allowed-tools: Read Glob Workflow Bash(pwd) Bash(git rev-parse *) Bash(git statu
59 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 64 处理后重新运行 /erp-workflow:coding-start。
65 65 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
... ... @@ -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 113 - `docs/08-模块任务管理.md § 二`(后端模块元数据 + 里程碑字段,步骤 3 读取)
114 114 - `docs/08-模块任务管理.md § 三`(前端阶段整体里程碑,步骤 3 读取)
115 115 - `workflows/coding.mjs`(B 阶段编排脚本,步骤 4 启动)
... ...
skills/plan/downstream-gen/SKILL.md
1 1 ---
2 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 4 user-invocable: false
5 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 37  
38 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 52 ### D. docs/08 — 追加模块清单
47 53  
... ... @@ -72,9 +78,9 @@ allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion
72 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 88 - `${CLAUDE_SKILL_DIR}/templates/docs-02-template.md`
83 89 - `${CLAUDE_SKILL_DIR}/templates/docs-05-header-template.md`
84 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 92 - `${CLAUDE_SKILL_DIR}/templates/docs-08-module-row-template.md`(模块 bullet 行模板)
87 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 17  
18 18 2. **根据 § 一 找到当前进度**
19 19  
20   - **判定算法(务必按此执行,不要凭"表里含 Axx"判断;docs/08 § 一 模板始终列出 A0~A6 全部行,"含"恒为真)**:
  20 + **判定算法(务必按此执行,不要凭"表里含 Axx"判断;docs/08 § 一 模板始终列出 A0~A5 全部行,"含"恒为真)**:
21 21 - 用 Read / Grep 把 `docs/08-模块任务管理.md § 一` 全文读出,按文件顺序自上而下扫描,找到**第一个 `- [ ]` 未勾子项**(仅扫 § 一)。
22   - - 该子项归属的父项 `Axx`(A0~A6)即为当前阶段,按下表派发到对应 skill。
  22 + - 该子项归属的父项 `Axx`(A0~A5)即为当前阶段,按下表派发到对应 skill。
23 23 - 若 § 一 所有 `[ ]` 都已变成 `[x]`(含父项与全部子项)→ 进入 §2.1 Plan 终结闸。
24 24  
25 25 | `第一个未勾子项归属` | `后续` | `阶段` |
... ... @@ -31,14 +31,13 @@ allowed-tools: Skill Read Glob Grep
31 31 | A3 父项或其任一子项 | `db-design-gen` | `A3` |
32 32 | A4 父项或其任一子项 | `db-init` | `A4` |
33 33 | A5 父项或其任一子项 | `downstream-gen` | `A5` |
34   -| A6 父项或其任一子项 | `frontend-scope-lock` | `A6` |
35 34 | § 一 全部 `[x]` | **无分发** → §2.1 Plan 终结闸 | - |
36 35  
37 36 ## 第二步:分发通知 + 调用目标 skill
38 37  
39 38 ### 2.1 Plan 已完成 — 终结硬闸(HARD GATE)
40 39  
41   -A 阶段 checkbox 全部 `[x]` 后先跑下面 5 项前移闸门; 全过才放行, 任一未过则拦截.
  40 +A 阶段 checkbox 全部 `[x]` 后先跑下面 4 项前移闸门; 全过才放行, 任一未过则拦截.
42 41  
43 42 #### 第 1 步:逐项校验前移闸门(用 Read / Glob / Grep,禁止跳过任何一项)
44 43  
... ... @@ -46,12 +45,11 @@ A 阶段 checkbox 全部 `[x]` 后先跑下面 5 项前移闸门; 全过才放
46 45  
47 46 1. **REQ 卡片真实数据**(来自 A1 scope-lock)
48 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 53 - 任一未填即缺口。(docs/07-环境配置.md 仅承载规则/约定,不参与值校验。)
56 54  
57 55 3. **docs/04 §零 命令齐**(来自 A1 收集的每栈构建/lint/单测/e2e 命令)
... ... @@ -62,13 +60,11 @@ A 阶段 checkbox 全部 `[x]` 后先跑下面 5 项前移闸门; 全过才放
62 60 - `Read` `docs/05-API接口契约.md` 与 `docs/02-开发计划.md`。
63 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 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 72  
77 73 已校验通过:
78 74 ✓ REQ 卡片均为真实数据(无占位/示例残留)
79   - ✓ .env.local secrets + config-vars.yaml(account/package/namespace)全锁
  75 + ✓ config-vars.yaml 全部配置(含 DB 凭据 / 密钥 / 包名 / 端口 / 初始账号)全锁
80 76 ✓ docs/04 §零 各栈 build/lint/unit/e2e 命令齐全
81 77 ✓ docs/05 API 契约 + docs/02 构建顺序已评审
82   - ✓ A6 前端 scope(UI 约定 / tokens / 组件库)已锁
83 78  
84 79 运行 /erp-workflow:coding-start 进入 B 阶段 (coding-start 会校验 git 状态).
85 80 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
... ... @@ -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 100 [docs/04 §零] node 栈缺 e2e 命令 → docs/04-技术规范.md §零
106 101  
107 102 补齐后再次运行 /erp-workflow:plan-start 重新校验。
... ...
skills/plan/project-init/templates/docs-08-initial-template.md
1 1 # 08-工作流进度
2 2  
3 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 5 ## 一、Plan 阶段(一次性)
8 6  
... ... @@ -18,8 +16,8 @@
18 16 - [ ] REQ 卡片骨架已生成(docs/01-需求清单/<module>/REQ-*.md,业务内容留待人工填写)
19 17  
20 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 21 - [ ] 样式 token 骨架已生成(src/styles/tokens.css)
24 22 - [ ] .gitignore 已配置
25 23  
... ... @@ -30,22 +28,17 @@
30 28 - [ ] A4 DB 初始化 — db-init
31 29 - [ ] sql/migrations/V1__initial_schema.sql 已生成
32 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 33 - [ ] DDL ↔ docs/03 apply 后 5 维一致(validate-ddl.mjs)
36 34  
37 35 - [ ] A5 下游文档生成 — downstream-gen
38 36 - [ ] docs/02 开发计划已生成
39 37 - [ ] docs/05 API 契约已生成
40   - - [ ] docs/06 § 三 页面清单已填入
41 38 - [ ] docs/10 验收清单已生成
42 39 - [ ] 下方模块列表已填入
43 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 43 ## 二、Coding 阶段(后端模块循环)
51 44  
... ... @@ -53,7 +46,7 @@
53 46  
54 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 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 4 user-invocable: false
5 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 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 24 1. 读取对应的大纲模板
... ... @@ -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 31 | `docs/07-环境配置.md` | `${CLAUDE_SKILL_DIR}/templates/docs-07-env-template.md` |
33 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 36 项目专属标识(根包名 / 命名空间)保留 `【人工填写:<说明>】` 占位,等人工在 docs/09 顶部补填一次后,其他文件复用。
36 37  
37 38 ### B.2 追加 docs/04 § 一+(保留 § 零 不覆盖)
... ... @@ -44,7 +45,7 @@ docs/04 已由 scope-lock 写入 § 零。本步骤追加 § 一 ~ 三。
44 45 4. 拼接原有内容和新生成内容,写回 `docs/04-技术规范.md`。
45 46  
46 47 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:
47   -- ` - [ ] 架构文档已生成(docs/04 § 一+、docs/06、docs/07、docs/09)`
  48 +- ` - [ ] 架构文档已生成(docs/04 § 一+、docs/07、docs/09)`
48 49  
49 50 ### C. 生成工具脚本
50 51  
... ... @@ -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 58 | `${CLAUDE_SKILL_DIR}/templates/scripts-setup-test-db-template.mjs` | `scripts/setup-test-db.mjs` |
59 59 | `${CLAUDE_SKILL_DIR}/templates/styles-tokens-template.css` | `src/styles/tokens.css` |
60 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 64 #### C.2 渲染 scripts/test.mjs
65 65  
... ... @@ -72,7 +72,7 @@ docs/04 已由 scope-lock 写入 § 零。本步骤追加 § 一 ~ 三。
72 72 > 占位是普通 shell 命令字符串,模板在运行期用 `spawnSync(cmd, { shell:true })` 跨平台执行(Windows 走 cmd.exe,*nix 走 /bin/sh),缺席 stack 由模板内的 `existsSync('backend')` / `existsSync('frontend')` 守卫跳过。
73 73  
74 74 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:
75   -- ` - [ ] 工具脚本已生成(scripts/*.mjs、.env.local)`
  75 +- ` - [ ] 工具脚本已生成(scripts/*.mjs)`
76 76 - ` - [ ] 样式 token 骨架已生成(src/styles/tokens.css)`
77 77  
78 78 ### D. 追加 .gitignore 忽略项
... ... @@ -93,14 +93,13 @@ node &quot;${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs&quot; .gitignore &quot;${CLAUDE_SKILL_
93 93 #### E.1 扫描 + 分组
94 94  
95 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 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 104 无命中 → 跳 E.4。
106 105  
... ... @@ -111,7 +110,7 @@ node &quot;${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs&quot; .gitignore &quot;${CLAUDE_SKILL_
111 110  
112 111 #### E.3 敏感占位提示(不弹 QA)
113 112  
114   -若敏感组非空:打印提示横幅,列出 `.env.local` 待填字段名 + 告诉用户"直接编辑文件,凭据不进会话"。
  113 +若敏感组非空:打印提示横幅,列出 `config-vars.yaml` 待填的敏感字段名 + 告诉用户"直接编辑 config-vars.yaml 填真实值,凭据不进会话"。
115 114  
116 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 120  
122 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 125 通过后(N=0 且用户选「继续」),用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:
127 126 - `- [ ] A2 骨架生成 — skeleton-gen`
... ... @@ -135,13 +134,11 @@ QA 横幅涵盖:产出文件清单(docs/04 / 06 / 07 / 09 + config-vars.yaml
135 134 - `docs/04-技术规范.md` § 零
136 135 - `docs/01-需求清单/index.md`
137 136 - `${CLAUDE_SKILL_DIR}/templates/docs-04-skeleton-template.md`
138   -- `${CLAUDE_SKILL_DIR}/templates/docs-06-static-template.md`
139 137 - `${CLAUDE_SKILL_DIR}/templates/docs-07-env-template.md`
140 138 - `${CLAUDE_SKILL_DIR}/templates/docs-09-structure-template.md`
141 139 - `${CLAUDE_SKILL_DIR}/templates/scripts-test-template.mjs`
142 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 142 - `${CLAUDE_SKILL_DIR}/templates/gitignore-append-template`
146 143 - `${CLAUDE_SKILL_DIR}/templates/styles-tokens-template.css`
147 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 15 ├── 03-数据库设计文档.md
16 16 ├── 04-技术规范.md
17 17 ├── 05-API接口契约.md
18   -├── 06-UI交互规范.md
19 18 ├── 07-环境配置.md
20 19 ├── 08-模块任务管理.md
21 20 ├── 09-项目目录结构.md
... ...
workflows/coding.mjs
... ... @@ -133,7 +133,7 @@ function featureStageContract(phase) {
133 133 return [
134 134 '## 硬约束(非交互子代理)',
135 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 137 '- 仍查不到 → **不要编造、不要留 `【人工填写:】` / `TBD` / `TODO` 占位**;把具体阻塞点(缺哪个值、应在哪个 Plan 闸门锁定、为何无法继续)写进产物。',
138 138 '- 然后让本步骤以非零结果 / 显式 throw 结束,由上层 Workflow 转为带诊断的 halt(fail-fast)。',
139 139 '- 全部输出文档**使用中文**。',
... ... @@ -198,7 +198,7 @@ function deriveSpecPrompt(id, phase) {
198 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 204 fe
... ... @@ -206,7 +206,7 @@ function deriveSpecPrompt(id, phase) {
206 206 `- 关联 REQ 卡片:\`${ROOT}/docs/01-需求清单/<module>/<REQ>.md\`(提取业务校验规则、acceptance、UI 描述)。`,
207 207 `- 关联 prototype:Read \`${ROOT}/prototype/**/*.html\`(含 anchor 时聚焦相应区域),作为页面布局权威。`,
208 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 210 `- 前端组件库:\`${ROOT}/docs/04-技术规范.md § 零\` 的 \`frontend.ui_lib\`,决定组件选型。`,
211 211 ].join('\n')
212 212 : [
... ...