diff --git a/README.md b/README.md index 0a2fdb0..bd1c4ff 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Claude Code 插件:ERP / 后端管理系统全流程开发框架。 -把"从零到 N 个模块上线"的整个流程固化成 **21 个 skill + 1 个 agent + 2 个 hook + 35 份模板**,让 CC 在 schema 演化用 Flyway migration、需求可追溯、人工审核可控的前提下推进编码。 +把"从零到 N 个模块上线 + 前端整体阶段"的整个流程固化成 **27 个 skill + 2 个 agent + 2 个 hook + 44 份模板**,让 CC 在 schema 演化用 Flyway migration、需求可追溯、人工审核可控的前提下推进编码。后端按模块循环依次提交 MR,所有后端 merged 后进入前端整体阶段(以项目根 `prototype/` 静态 HTML mockup 为页面权威)。 ## 这个插件做什么 @@ -19,13 +19,23 @@ Claude Code 插件:ERP / 后端管理系统全流程开发框架。 ↓ A4 初始化 DB(docs/03 → V1 migration → 自动 apply 到本地 MySQL) ↓ - A5 生成下游文档(docs/02 / docs/05 / docs/06 § 五 / docs/10) + A5 生成下游文档(docs/02 / docs/05 / docs/06 § 三 / docs/10) ↓ 用户显式 /erp-workflow:coding-start -🔁 阶段 B:编码(按模块循环,入口 /erp-workflow:coding-start) - 功能循环:Brainstorm → Plan → TDD → Verify → Review - 模块循环:本地测试闸门 → 写模块报告 → 创建 GitLab MR → ⏸ 用户 Approve+Merge → 下次 coding-start 自动扫描 MR 状态为 merged → 下一模块 +🔁 阶段 B:编码(入口 /erp-workflow:coding-start) + + B-后端(按模块循环) + 功能循环:Brainstorm → Plan → TDD → Verify → Review + 模块循环:本地测试闸门 → 写模块报告 → 创建 GitLab MR → ⏸ 用户 Approve+Merge → 下次 coding-start 自动扫描 MR 状态为 merged → 下一模块 + + ↓ 后端全部 merged 后 + + B-前端(整体阶段,1 个 MR) + 入口门禁:检查项目根 prototype/ 至少含 1 个 *.html mockup(缺失则 AskUserQuestion 提示用户补齐) + FE 拆分:AI 自主推导功能清单(业务功能粒度,与 HTML 文件数无关)写入 docs/08 § 三;已有则加载——无人工审阅断点(人工只在 MR Approve+Merge 处介入) + FE 循环(每个 FE-NN):fe-feature-brainstorm → -plan → -tdd → -verify → -review + 收尾:test-gate(phase=frontend) → module-report(phase=frontend) → mr-create(分支 frontend-phase)→ ⏸ 用户 Approve+Merge → 全部完成 ⚙️ 后台守门:占位符未填 / 中断触发 / 跨模块改动未记录 ``` @@ -52,22 +62,33 @@ Claude Code 插件:ERP / 后端管理系统全流程开发框架。 > 两个审阅断点的处理方式一致:A1 / A3 完成时 skill 已自动勾选 `docs/08-模块任务管理.md § 一` 该阶段的全部子项 + 顶层;审阅是隐式的——你看完 REQ 卡片 / docs/03 后直接重新运行 `/plan-start`,下次入口就会派发到下一阶段。如果审阅时发现需要修订,直接编辑 docs/01 / docs/03 即可,不依赖 docs/08 的勾选状态。 -3. **Coding 阶段入口**(模块循环): +3. **Coding 阶段入口**(后端模块循环 → 前端整体阶段): ``` /erp-workflow:coding-start ``` - Plan 全部完成后由你显式触发。**按 `docs/02 § 二` REQ 开发顺序清单**扫描,决定当前模块: - 对每个 REQ 所属模块查询 `docs/08` 的 `MR:` 字段,必要时调 GitLab API 取 `state`: - - `MR: —` → 该模块是当前模块(未建过 MR) - - `MR: !` 且 API `state == merged` → 模块已完成,跳过 - - `MR: !` 且 API `state ∈ {opened, closed}` → 该模块是当前模块 - - `MR: !` 但 API HTTP 非 200 / 查不到 / state 非法 → **停下报错**让用户排查 token / API URL / project ID / iid(绝不静默假设未 merged) + Plan 全部完成后由你显式触发。`coding-start` 是阶段分发权威——每次入口都重新扫描 docs/08 § 二/§ 三 + GitLab API state,按当前进度决定派发: + + **路由规则(coding-start 真值表,只做分发)**: + + | `backend_done` | `frontend_done` | coding-start 派发 | + |---|---|---| + | `false` | 任意 | `module-start`(写后端) | + | `true` | `false` | `frontend-start`(写前端) | + | `true` | `true` | 打印"所有阶段已完成",停下 | - 之后**自动探测远程默认分支** → `git checkout <默认分支>` + `git pull --ff-only` 同步远程 → 派发到 `module-start`。 + GitLab API HTTP 非 200 / 查不到 / state 非法 → 停下报错(绝不静默假设未 merged)。 - **`docs/08 § 二` 每模块占一行 bullet**,完成信号由 MR merged state 判定;即使用户提前触发 coding-start,未 merged 的模块仍会被选中,不会跳过。 + **后端阶段(module-start 内,单一职责)**: + - 切到 `module-` 分支,跑功能循环(feature-brainstorm → ... → feature-review)→ 全 approve → test-gate → module-report → mr-create → ⏸ 人工 Approve+Merge → 用户重跑 coding-start,coding-start 再次路由 -4. **中途恢复**:任何时候运行对应入口命令——根据 Plan § 一 checkbox 和 § 二 各模块 MR state 跳到当前该做的事。 + **前端阶段(frontend-start 内,自带前置门禁)**: + - 步骤 1:prototype/ 门禁(≥ 1 个 *.html,缺失则 AskUserQuestion 提示用户补齐 → 停下) + - 步骤 2:准备 FE 清单(无审阅断点)。§ 三 占位则 AI 扫 prototype + docs/01 + docs/05 自主推导 FE 业务功能清单写入 § 三(每个 FE 标注关联 REQ + 关联原型;FE 数与 HTML 文件数无关);§ 三 已有则直接加载 + - 步骤 4-8:MR state 判定 → 切 `frontend-phase` 分支 → 跑 fe-feature 循环(fe-feature-brainstorm → ... → fe-feature-review,专用 `fe-code-reviewer` agent 做 7 维 review)→ 全 approve → test-gate(frontend) → module-report(frontend) → mr-create(docs/08 § 三 整体 MR)→ ⏸ 人工 Approve+Merge + + `docs/08 § 二` 每后端模块占一行 bullet,`§ 三` 是前端阶段整体段,完成信号统一由 MR merged state 判定。 + +4. **中途恢复**:任何时候运行对应入口命令——根据 Plan § 一 checkbox、§ 二 各后端模块 MR state、§ 三 前端整体 MR state 跳到当前该做的事。 ## 目录结构 @@ -80,10 +101,11 @@ erp-workflow-plugin/ │ ├── hooks.json # hook 注册表(2 个 hook) │ └── scripts/*.sh # 2 个 hook 脚本 ├── agents/ -│ └── superpower-code-reviewer.md # code-reviewer agent(feature-review 调用) +│ ├── superpower-code-reviewer.md # 后端 code-reviewer agent(feature-review 调用) +│ └── fe-code-reviewer.md # 前端专用 reviewer(fe-feature-review 调用,硬编码 7 维 review) └── skills/ ├── plan/ # 阶段 A:6 个一次性规划 skill - ├── coding/ # 阶段 B:9 个模块/功能循环 skill + ├── coding/ # 阶段 B:15 个 skill = 9 个后端模块/功能循环 + frontend-start + 5 个 fe-feature-* ├── crosscut/ # 横切:2 个入口 + 1 中断守门 + 1 留痕 skill └── internal/ # superpowers 本地 fork:2 个无门 brainstorming / writing-plans ``` @@ -95,7 +117,7 @@ erp-workflow-plugin/ | 拒绝 no-verify | `deny-no-verify.sh` | PreToolUse / Bash | CC 尝试 `git push --no-verify` | 硬拦截,强制 `.githooks/pre-push` 生效 | | 跨模块改动留痕 | `log-cross-module.sh` | PostToolUse / Edit \| Write | 当前处于 `module-*` 分支 且 编辑目标路径落在 `docs/08 § 二` 中**非当前模块**的 path 范围内(无论目标模块 MR 是否已 merged) | 把改动追加为 `TBD(CC 补)` 存根到 `-cross-module.md`;通过 `additionalContext` 软提示 CC 调 `cross-module-log` skill **自主推断**补「原因 / 影响评估」两列。即时性由 CC 自己决定;**最迟在 `module-report` § ⑦ 硬闸门处**(TBD 未清空会阻断模块完成报告),保证模块完成前所有 TBD 必被 CC 填实 | -## Skill 清单(21 个) +## Skill 清单(27 个) ### Plan 阶段(6 个,`skills/plan/`) @@ -106,59 +128,102 @@ erp-workflow-plugin/ | A2 | `skeleton-gen` | • 生成架构文档:docs/04 § 一+ / docs/06 / docs/07 / docs/09
• 生成工具脚本:scripts/*.sh、.githooks/pre-push、.env.local
• 创建 `sql/migrations/` 空目录(Flyway 准备)
• 合并 .gitignore(逐行判重) | `plan-start` | | A3 | `db-design-gen` | • 从 docs/01 REQ 卡片正向设计 `docs/03-数据库设计文档.md`(schema SSoT)
• 回填 REQ 卡片依赖表(`TBD(A3 自动补)` → 实际表名)
• **停下**等人工审阅 docs/03,审阅完毕用 `/plan-start` 恢复续进 A4 | A2 | | A4 | `db-init` | • LLM 解析 docs/03 → `sql/migrations/V1__initial_schema.sql`(DDL only)
• **5 维度全量校验** DDL ↔ docs/03(表名 / 列名+列序 / 类型+nullable+默认值 / 索引名 / FK 名),fail-closed
• 验证 MySQL 连接
• 调 `scripts/setup-test-db.sh` 复用三层防护(与 B 阶段 test.sh 共用)→ DROP+CREATE 空库
• apply V1 + `SHOW TABLES` 行数自检 | A3 | -| A5 | `downstream-gen` | • 一次性生成 docs/02 / docs/05 / docs/06 § 五 / docs/10
• 回填 REQ 卡片依赖接口(`TBD(A5 自动补)` → 实际 endpoint)
• 追加模块清单到 docs/08 § 二
• 最终占位符扫描(TBD 自动补 + `【人工填写:】` QA 循环)
• 打印 Plan 完成横幅并**停下**(不自动进 B) | A4 | +| A5 | `downstream-gen` | • 一次性生成 docs/02 / docs/05 / docs/06 § 三 / docs/10
• 回填 REQ 卡片依赖接口(`TBD(A5 自动补)` → 实际 endpoint)
• 追加模块清单到 docs/08 § 二
• 最终占位符扫描(TBD 自动补 + `【人工填写:】` QA 循环)
• 打印 Plan 完成横幅并**停下**(不自动进 B) | A4 | -### Coding 阶段(9 个,`skills/coding/`) +### Coding 阶段(15 个,`skills/coding/`) **触发与顺序**(`coding-start` 是唯一由用户手动触发的入口,下面所有 skill 都由 skill 链自动调用): ``` -/erp-workflow:coding-start ← 用户每次手动触发 +/erp-workflow:coding-start ← 用户每次手动触发;阶段分发器(只做分发) + │ + │ ① Plan 完成校验(docs/08 § 一 A0~A5) + │ ② 后端完成性检查(§ 二 + GitLab state) + │ ├ 未完成 → 立即派发 module-start,结束 + │ └ 已完成 → 继续 ③ + │ ③ 前端完成性检查(§ 三 整体 MR + state) + │ ├ 已完成 → 打印"所有阶段已完成",结束 + │ └ 未完成 → 派发 frontend-start,结束 + │ + ├─ 后端未完成 → 派发 module-start(写后端) + │ │ + │ │ 切 module- 分支,对每个未完成 REQ: + │ │ feature-brainstorm → -plan → -tdd → -verify → -review + │ │ + │ │ review approve → 回 module-start(下一 REQ) + │ │ request-changes (<5) → fix → 回 feature-verify + │ │ request-changes (=5) → 停下(升级给人) + │ │ + │ │ 本模块所有 REQ approve: + │ │ test-gate(phase=backend) → module-report → mr-create + │ │ (docs/08 § 二 写 MR iid) + │ │ + │ └─ ⏸ 停下等人工 Approve + Merge + │ (合并后用户重跑 coding-start → coding-start 再次路由) │ - │ 扫描 docs/02 REQ 序 + docs/08 MR 字段 + GitLab API state 判定当前模块: - │ - 所有模块都 merged → 打印"所有模块已完成" - │ - 找到第一个非 merged 模块 → 派发 - │ 派发前自动探测远程默认分支(main / master),git checkout + git pull --ff-only 同步远程 base + ├─ 后端完成 & 前端完成 → 打印"所有阶段已完成",停下 │ - └─→ module-start(幂等可重入,切 module- 分支) - │ - │ 对每个未完成 REQ,按序串链: - │ feature-brainstorm → -plan → -tdd → -verify → -review - │ - │ review approve → 回 module-start(推进下一 REQ) - │ review request-changes (<5) → fix commit → 回 feature-verify 重新执行 - │ review request-changes (=5) → 停下(升级给人) - │ - │ 模块全部 REQ approve → - │ test-gate(commit test-gate.md) - │ → module-report(commit 模块报告 + cross-module log) - │ → mr-create(worktree clean 校验 → push 代码+evidence → 创建 MR - │ → 追 MR URL 到报告 + commit → 写 MR iid 到 docs/08 + commit - │ → 再 push) - │ - └─ ⏸ 停下等人工 Approve + Merge - (人工合并后再次运行 coding-start,扫描到 state=merged 自动跳过 - → pull 默认分支 → 推进下一模块) + └─ 后端完成 & 前端未完成 → 派发 frontend-start(写前端) + │ + │ frontend-start 自带前置门禁(coding-start 不做): + │ ① prototype/ 门禁(≥ 1 个 *.html,缺失则 AskUserQuestion) + │ ② 准备 FE 清单(无审阅断点): + │ § 三 已有 FE bullet → 加载 + │ § 三 仅占位 → AI 推导写入 + │ ③ 切 frontend-phase 分支 + │ + │ + │ 准备 FE 清单(无审阅断点): + │ § 三 占位 → 扫 prototype + docs/01 + docs/05 + │ → AI 自主推导 FE 业务功能清单写入 § 三 + │ (含 fe_id / 功能名 / 关联 REQ / 关联原型) + │ § 三 已有 FE bullet → 直接加载 + │ + │ 切 frontend-phase 分支 + │ FE 是业务功能粒度(与 HTML 文件数无关, + │ 一个 HTML 可拆多个 FE / 多 HTML 可合一个 FE) + │ + │ 对每个未完成 FE: + │ fe-feature-brainstorm → -plan → -tdd → -verify → -review + │ (review 委托 fe-code-reviewer agent,硬编码 7 维 checklist) + │ + │ review approve → 回 frontend-start(下一 FE) + │ request-changes (<5) → fix → 回 fe-feature-verify + │ request-changes (=5) → 停下 + │ + │ 全部 FE approve: + │ test-gate(phase=frontend)(vitest + playwright,子会话跑) + │ → module-report(phase=frontend) + │ → mr-create(docs/08 § 三 整体 MR) + │ + └─ ⏸ 停下等人工 Approve + Merge + (合并后再跑 coding-start → "所有阶段已完成") ``` | Skill | 做什么 | 谁触发它 | |---|---|---| -| `module-start` | 定位当前模块(docs/02 REQ 序)+ 切换或创建 `module-` 分支 + 扫描 `docs/superpowers/reviews/*.md` 的 `verdict=approve` 计算已完成 REQ + 推进第一个未完成 REQ 的功能循环。全部完成 → `test-gate`。**幂等可重入**(中途断开后重新运行会自动跳过已 approve 的 REQ) | `coding-start` 派发;`feature-review` approve 后回调 | +| `module-start` | **后端模块循环单一职责**(不感知前端阶段)。切 `module-` 分支,扫 `docs/superpowers/reviews/*.md` 的 `verdict=approve` 计算已完成 REQ,推进第一个未完成 REQ;本模块全 approve → `test-gate`。**幂等可重入** | `coding-start` 派发(仅当后端有未 merged 模块时);`feature-review` approve 后回调 | | `feature-brainstorm` | 功能循环步骤 1:交互 brainstorm → 生成 `docs/superpowers/specs/*.md` | `module-start` 推进 REQ 时调用 | | `feature-plan` | 功能循环步骤 2:spec → 任务级 plan(文件路径 + API 签名 + 测试意图 + 完成判据,代码由 TDD 阶段产出),输出 `docs/superpowers/plans/*.md` | `feature-brainstorm` 链式调用 | -| `feature-tdd` | 功能循环步骤 3:红绿循环(写失败测试 → 实现 → 子会话验证通过 → commit 到 `module-` 分支) | `feature-plan` 链式调用 | +| `feature-tdd` | 功能循环步骤 3:红绿循环(写失败测试 → 实现 → 子会话验证通过 → commit 到 `module-` 分支);路径硬护栏:`impl_file` 落 `frontend/` 前缀 → 硬停(UI 推迟到前端阶段) | `feature-plan` 链式调用 | | `feature-verify` | 功能循环步骤 4:将全量测试派发到子会话执行一次,用模板渲染 evidence | `feature-tdd` 链式调用;`feature-review` 在 request-changes 修复后重新调用 | | `feature-review` | 功能循环步骤 5:AI 自审,写 `docs/superpowers/reviews/*.md`。approve → 回 `module-start`;request-changes → 逐项 Edit + fix commit → 回 `feature-verify` 重新执行(最多 5 轮,第 5 轮仍 request-changes 则停下) | `feature-verify` 链式调用 | -| `test-gate` | MR 前硬闸门:子会话执行 `scripts/test.sh`(脚本内部 drop+create 空库、Flyway apply `sql/migrations/V*.sql`、再执行测试);通过 → 写 `-test-gate.md` 并 `git add + commit`(evidence 提交到 module 分支);失败停下 | `module-start` 在本模块所有 REQ approve 后调用 | -| `module-report` | 中断检查 → 生成 12 节模块完成报告 `docs/superpowers/module-reports/-.md` → `git add + commit`(报告 + cross-module log 提交到 module 分支,mr-create 的 worktree clean 前置条件依赖此步) | `test-gate` 链式调用 | -| `mr-create` | 中断检查 → 验证当前分支 = `module-` 且 `git status --porcelain` worktree 干净 → `git push` 推代码与全部 evidence → 用 curl 调 GitLab REST API 创建 MR(模块报告嵌入 MR 描述)→ 追加 MR URL 到报告并 commit → 把 docs/08 该模块的 `MR: —` 回写为 `MR: !` 并 commit → 再次 push;**停下等人工 Approve+Merge**。完成由 MR state 判定 | `module-report` 链式调用 | +| `test-gate` | MR 前硬闸门。按当前分支推 phase:`module-*` → 跑 `scripts/test.sh`(drop+create 空库、Flyway apply、测试);`frontend-phase` → 跑 vitest + playwright(命令取自 docs/04 § 零)。通过 → 写 `-test-gate.md` 并 commit 到当前分支;失败停下 | `module-start`(后端 REQ 全 approve 后)/ `frontend-start`(FE 全 approve 后) | +| `module-report` | 中断检查 → 生成 12 节完成报告 `docs/superpowers/module-reports/-.md`(前端阶段 § ④/§ ⑥ 写 N/A)→ commit 到当前分支(后端:module-* 分支;前端:frontend-phase 分支) | `test-gate` 链式调用 | +| `mr-create` | 中断检查 → 验证当前分支 = `module-` 或 `frontend-phase` 且 `git status --porcelain` worktree 干净 → `git push` 推代码与全部 evidence → 用 curl 调 GitLab REST API 创建 MR(完成报告嵌入 MR 描述)→ 追加 MR URL 到报告并 commit → 把 docs/08 § 二 该模块的 `MR: —`(后端) / § 三 `整体 MR: —`(前端) 回写为 `!` 并 commit → 再次 push;**停下等人工 Approve+Merge**。完成由 MR state 判定 | `module-report` 链式调用 | +| `frontend-start` | 写前端阶段单一职责。步骤 1 自带 prototype/ 门禁(≥ 1 个 *.html,缺失则 AskUserQuestion)。步骤 2 准备 FE 清单(无审阅断点):§ 三 占位则 AI 自主推导写入;§ 三 已有则加载。后续切 `frontend-phase` 分支 + 计算未完成 FE + 推进第一个 FE 的 fe-feature 循环;全 approve → `test-gate(phase=frontend)` | `coding-start` 派发(仅当 `backend_done=true && frontend_done=false`);`fe-feature-review` approve 后回调 | +| `fe-feature-brainstorm` | 前端功能循环步骤 1:基于 FE 关联的 `associated_prototypes[]` + `associated_reqs[]` + docs/05 + docs/06 § 二 + docs/04 § 零前端 → spec | `frontend-start` 推进 FE 时调用,传 `{ fe_id, name, associated_reqs[], associated_prototypes[] }` | +| `fe-feature-plan` | 前端功能循环步骤 2:spec → 任务级计划(组件/路由/hook/API client,`impl_file` 必须 `frontend/` 前缀) | `fe-feature-brainstorm` 链式调用 | +| `fe-feature-tdd` | 前端功能循环步骤 3:jsdom 组件测试 + Playwright E2E(E2E 派子会话);commit trailer `REQ_ID: FE-NN`;路径硬护栏 `frontend/` | `fe-feature-plan` 链式调用 | +| `fe-feature-verify` | 前端功能循环步骤 4:派子会话跑 vitest + playwright,按模板渲染证据 | `fe-feature-tdd` 链式调用;`fe-feature-review` request-changes 修复后重调 | +| `fe-feature-review` | 前端功能循环步骤 5:委托 `fe-code-reviewer` agent 做 7 维 review。approve → 回 `frontend-start`;request-changes 5 轮上限 | `fe-feature-verify` 链式调用 | ### Crosscut(4 个,`skills/crosscut/`) | Skill | 作用 | 流程中谁调用 | |---|---|---| | `plan-start` | **A 阶段入口**。读取 docs/08 § 一 找第一个未勾 A 子项 → 派发对应 A skill;A 全部完成时提示运行 coding-start | **用户手动**运行 `/erp-workflow:plan-start` | -| `coding-start` | **B 阶段入口**。先验证 Plan 已完成;**按 `docs/02 § 二` REQ 序扫描**,对每个 REQ 所属模块查询 `MR:` 字段 + GitLab API `state`:`merged` 跳过;`—`/opened/closed 选为当前模块;查不到则停下报错。派发前自动探测远程默认分支(main / master),`git checkout + git pull --ff-only` 同步远程 base,然后调用 `module-start` | **用户手动**运行 `/erp-workflow:coding-start` | +| `coding-start` | **B 阶段入口 + 阶段分发器(只做分发)**。① 验证 Plan 已完成(docs/08 § 一 A0~A5 全勾选)② 后端完成性检查(§ 二 + GitLab state)③ 前端完成性检查(§ 三 整体 MR)④ 真值表派发:`backend=false` → `module-start`;`backend=true & frontend=false` → `frontend-start`;都 done → "全部完成"。前端阶段的 prototype/ 门禁由 `frontend-start` 自带,不在此处 | **用户手动**运行 `/erp-workflow:coding-start` | | `interrupt-check` | 检查 CLAUDE.md 的 3 项中断清单;触发则追加 Blocker 到计划文件并停下 | 功能循环各步骤和生成重要制品前自动调用 | | `cross-module-log` | 给 `log-cross-module.sh` 追加的跨模块改动存根批量补「原因 / 影响评估」 | `module-report` § ⑦ 硬验收时一次性调用(CC 编辑中途不主动调);`module-start` 初始化日志文件时也会用其模板 | @@ -171,11 +236,12 @@ erp-workflow-plugin/ | `superpower-brainstorming` | `superpowers:brainstorming` 5.0.7 | `` 整块、Anti-Pattern 段、Checklist 里 Visual Companion / approve-design / review-spec 三项、User Review Gate、Visual Companion 整节、终点 `invoke writing-plans` | | `superpower-writing-plans` | `superpowers:writing-plans` 5.0.7 | Execution Handoff 整节("Which approach?" 问询)、"Complete code in every step" 硬要求(改为"API 签名 + 测试意图"粒度,完整代码留给 TDD) | -## Agent 清单(1 个) +## Agent 清单(2 个) | Agent | 源 | 用途 | 谁调用 | |---|---|---|---| -| `superpower-code-reviewer` | `superpowers:code-reviewer` 5.0.7 agent,仅改 name | 对 REQ diff 做 AI 自审,产出 `must_fix[]` / `nice_to_have[]` / `gaps` | `feature-review` 步骤 1:`Agent(subagent_type=superpower-code-reviewer)` | +| `superpower-code-reviewer` | `superpowers:code-reviewer` 5.0.7 agent,仅改 name | 对后端 REQ diff 做 AI 自审,产出 `must_fix[]` / `nice_to_have[]` / `gaps` | `feature-review` 步骤 1:`Agent(subagent_type=superpower-code-reviewer)` | +| `fe-code-reviewer` | 自写(前端专用) | 对前端 FE-NN diff 做 7 维 AI 自审:prototype 一致性 / Design Tokens / 无障碍 / 响应式 / 业务校验前端复刻 / API 一致性 / 状态机覆盖。明确禁止给后端建议 | `fe-feature-review` 步骤 1:`Agent(subagent_type=fe-code-reviewer)` | ## Banners 清单(7 份,`bash cat` 直接输出,绕开 LLM 复读) @@ -193,7 +259,7 @@ step 0 流程图被抽到独立 `.txt` 文件,SKILL.md 步骤 0 改为 `bash cat **字节对齐保证**:每个文件 17 行,每行 visible width = 58 cell(内宽 56 + 2 个 `│` 边框)。改动需重新校准。 -## Templates 清单(37 份) +## Templates 清单(44 份) | 所属 Skill | 模板文件 | 用途 | |---|---|---| @@ -204,7 +270,7 @@ step 0 流程图被抽到独立 `.txt` 文件,SKILL.md 步骤 0 改为 `bash cat | scope-lock | `req-card-template.md` | 单张 REQ-XXX-NNN 卡片骨架(6 个 `{{...}}` 占位符由 CC 替换;输入 / 输出 各含一句简述 + N 张示例字段表,模板原样复制由人工编辑) | | scope-lock | `_module-template.md` | 模块子目录的 `_module.md` 模块头(4 行:模块代码-名 / 简述 / 依赖模块 TBD / 涉及表 TBD) | | skeleton-gen | `docs-04-skeleton-template.md` | docs/04 § 一+ 编码规范大纲(HTML 注释引导 LLM) | -| skeleton-gen | `docs-06-static-template.md` | docs/06 § 一~四 UI 模式大纲 | +| skeleton-gen | `docs-06-static-template.md` | docs/06 § 一~二 大纲(通用交互 + Design Tokens;布局以 prototype/ 为权威) | | skeleton-gen | `docs-07-env-template.md` | docs/07 环境配置大纲 | | skeleton-gen | `docs-09-structure-template.md` | docs/09 目录结构大纲 | | skeleton-gen | `scripts-setup-test-db-template.sh` | 运行时 drop + create 空库脚本(0 槽位);schema apply 交给 Flyway | @@ -217,7 +283,7 @@ step 0 流程图被抽到独立 `.txt` 文件,SKILL.md 步骤 0 改为 `bash cat | downstream-gen | `docs-02-template.md` | docs/02 开发计划 | | downstream-gen | `docs-05-header-template.md` | docs/05 API 契约头部 | | downstream-gen | `docs-05-endpoint-template.md` | docs/05 单接口小节 | -| downstream-gen | `docs-06-module-pagelist-template.md` | docs/06 § 五 单模块页面清单 | +| downstream-gen | `docs-06-module-pagelist-template.md` | docs/06 § 三 单模块页面清单 | | downstream-gen | `docs-08-module-row-template.md` | docs/08 § 二 单模块 bullet 行 | | downstream-gen | `docs-10-header-template.md` | docs/10 验收清单(项目级 SOP,零槽位 + 引用指针) | | module-start | `module-start-banner-template.md` | 模块启动横幅 | @@ -233,6 +299,13 @@ step 0 流程图被抽到独立 `.txt` 文件,SKILL.md 步骤 0 改为 `bash cat | interrupt-check | `interrupt-block-template.md` | Blocker 节追加模板 | | cross-module-log | `cross-module-log-template.md` | cross-module 日志头(由 hook log-cross-module.sh 在首次跨模块改动时渲染创建;skill 自身不再读取) | | cross-module-log | `cross-module-log-row-template.md` | 单条改动行模板 | +| frontend-start | `frontend-start-banner-template.md` | 前端阶段启动横幅 | +| fe-feature-brainstorm | `fe-feature-spec-template.md` | 前端功能规格结构(组件树 / 状态机 / API / 业务校验复刻 / token 引用) | +| fe-feature-plan | `fe-feature-plan-template.md` | 前端功能计划结构(组件 / 路由 / hook / API client,`impl_file` 必须 `frontend/`) | +| fe-feature-tdd | `commit-message-template.md` | 前端 TDD commit 信息(与后端共用格式,但 `req_id` = FE-NN) | +| fe-feature-verify | `fe-feature-verify-evidence-template.md` | 前端验证证据(vitest + playwright 双段) | +| fe-feature-review | `fe-feature-review-template.md` | 前端自审报告结构(含 7 维核查表) | +| fe-feature-review | `commit-message-template.md` | 前端 review fix commit 信息 | **流程使用情况**:所有模板都被对应 skill 的 `SKILL.md` 引用,没有孤儿模板。 diff --git a/agents/fe-code-reviewer.md b/agents/fe-code-reviewer.md new file mode 100644 index 0000000..1747590 --- /dev/null +++ b/agents/fe-code-reviewer.md @@ -0,0 +1,69 @@ +--- +name: fe-code-reviewer +description: | + Use this agent when fe-feature-review delegates a frontend code review for a single FE-NN business feature (which may span multiple prototype HTML files / regions). Specializes in React/Vue components, styling, accessibility, prototype fidelity, and Design Tokens. Does NOT review SQL/migration/controller/service — those are the backend reviewer's domain. +model: inherit +--- + +You are a Senior Frontend Code Reviewer with deep expertise in component architecture, accessibility, design systems, and visual fidelity to design mockups. Your role is to review frontend code changes for a single FE-NN business feature (which may span multiple prototype HTML files or regions) against its associated prototypes, specification, and the project's design tokens. + +**Strict scope rules**: + +- Review ONLY frontend code (under `frontend/` or the project's frontend root per `docs/09-项目目录结构.md`). +- Do NOT propose SQL, migration, controller, service, repository, transaction, or DTO suggestions. If the diff contains backend files, flag this as a path violation and return `request-changes` with a single must-fix entry pointing the reviewee back to `feature-tdd` (backend phase). +- Do NOT recommend backend architectural changes; the backend phase is already merged. + +When reviewing, you will evaluate the following 7 dimensions in order. For each dimension, classify findings as Critical (must fix) / Important (should fix) / Suggestions (nice to have). + +## 1. Prototype 一致性 + +- Compare the rendered DOM structure (inferred from JSX/template) against the FE's `associated_prototypes` (listed in the spec header). One FE may span multiple prototype files or specific regions (anchored like `prototype/dashboard.html#metrics-section`). +- For each associated prototype / region, check: top navigation placement, grid columns, primary action button position, key region layout (header / filters / table / pagination). +- Allowed: implementation differences (class naming, component library syntax, framework idioms). +- Not allowed: structural deviation (e.g., moving the primary action from top-right to bottom-center, dropping a filter region the prototype shows). + +## 2. Design Tokens + +- All color values MUST use `var(--color-*)` per `docs/06 § 二`. +- Hard-coded hex / rgb values → `request-changes` with file:line. +- New tokens introduced in code without registration in `docs/06 § 二` and `tokens.css` → `request-changes`. + +## 3. 无障碍 (Accessibility) + +- Form controls have `