Commit 25afa9f0ddeee8b785f4949b503766828eee20f7
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
Showing
13 changed files
with
58 additions
and
249 deletions
.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
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 "${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs" .gitignore "${CLAUDE_SKILL_ | @@ -93,14 +93,13 @@ node "${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs" .gitignore "${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 "${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs" .gitignore "${CLAUDE_SKILL_ | @@ -111,7 +110,7 @@ node "${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs" .gitignore "${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 "${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs" .gitignore "${CLAUDE_SKILL_ | @@ -121,7 +120,7 @@ node "${CLAUDE_PLUGIN_ROOT}/lib/merge-gitignore.mjs" .gitignore "${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 | : [ |