@siming-org/cli 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
{
|
|
2
|
+
"exportFormatVersion": "1.0",
|
|
3
|
+
"exportedAt": "2026-08-30T16:47:13.215Z",
|
|
4
|
+
"warnings": [],
|
|
5
|
+
"template": {
|
|
6
|
+
"name": "quick_fix_workflow",
|
|
7
|
+
"description": "siming 快速修复流程(从 full_workflow 拆出裁剪,用于简单代码逻辑调整)。链路:分支对齐(ALIGN) → 轻量设计(TINY_DESIGN:改动点+影响面+验证方式,技术方案独立成文落项目声明目录,仅用户人工评审——无 PRD 对齐/架构 subagent 双审,含复杂度红线防滥用) → 后端编码(CODE_BACKEND)/UI 组件开发(CODE_UI) → 集成验证(INTEGRATE:合并远程主线 + 无条件全量单测 + 全量 E2E[项目存在 E2E 体系时] + 测试完整性检查) → 验收归档(ACCEPT·terminal:纯验收不执行任何测试,测试证据一律引用 INTEGRATE record;INTEGRATE 后任务分支出现新代码提交 → 退回 INTEGRATE 重新集成,禁止 ACCEPT 补跑回归;smoke 探活/联调冒烟保留为 ACCEPT 验收动作;无单测E2E设计开发/ARCHIVE 节点)。mixed 串行桥边 CODE_BACKEND→CODE_UI(后端链先于前端链 = 边声明序)。⚠ 使用限制:仅用户明确要求走快速流程时由 task-create 匹配本模板,AI 禁止主动推荐;复杂度红线命中时执行者应建议改走 full_workflow。【1.1.0】TINY_DESIGN 增加技术方案文档产出(独立成文至项目声明的技术方案文档目录 + artifact 全文快照登记)——轻量指方案粒度而非免文档。【1.2.0】ACCEPT 拆分为 INTEGRATE + ACCEPT(复制自 full_workflow 同名节点并适配快速修复链路):INTEGRATE 承接合并远程主线 + 无条件全量回归(无论主线有无新提交);ACCEPT 纯验收(不执行任何测试,证据引用 INTEGRATE record;INTEGRATE 后新提交 = 证据失效退回 INTEGRATE 重新集成)。",
|
|
8
|
+
"nodes": [
|
|
9
|
+
{
|
|
10
|
+
"id": "ALIGN",
|
|
11
|
+
"label": "分支对齐",
|
|
12
|
+
"phase": "entry",
|
|
13
|
+
"track": "all",
|
|
14
|
+
"prompt": "# 分支对齐(Entry · 全轨道 · 技术方案前置门禁)\n\n你是流程执行者。本节点是机械对齐门禁:设计开始前,将当前工作区分支对齐远程主线,保证设计与后续开发基于最新主线。所有任务的首个节点均为本节点。\n\n## HARD GATE(违反 = 节点失败)\n\n1. **未对齐禁止进入设计节点**——完成判定未全 ✅ 不得 advance\n2. **对齐方式按检出位置**(禁止 `git fetch origin <主线>:<主线>`——git 拒绝更新被其他 worktree 检出的分支):\n - 当前在主线分支(主工作区形态)→ `git fetch origin` + `git pull --ff-only`\n - 当前在任务分支(含 worktree 子工作区)→ `git fetch origin` + `git rebase origin/<主线分支名>` → 冲突逐处解决后 `git rebase --continue`\n3. **冲突处理纪律**——冲突逐处解决(理解双方意图后融合,禁止盲目取一边);无法自动解决的冲突 → ⏸ 暂停上升用户(附冲突文件清单与双方差异说明),禁止静默放弃对齐\n4. **主线分支名以项目 AGENTS.md 分支模型声明为准,禁止写死**\n\n## 执行动作\n\n1. `siming_task { action: \"context\", taskId: \"<任务id>\" }` 读取任务上下文;read 项目 AGENTS.md 分支模型确认主线分支名与当前工作区形态\n2. 按 HARD GATE #2 执行对齐\n3. 对齐结果确认:本地分支与 origin/主线一致(主线形态 ff 后一致;任务分支 rebase 完成无冲突)\n\n## 归档动作(siming MCP 小步写入)\n\n```bash\nsiming_task { action: \"record-set\", taskId: \"<任务id>\", node: \"ALIGN\", summary: \"<对齐一句话:检出位置 + 对齐方式 + 结果>\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"ALIGN\", item: \"<完成判定项,逐条>\" }\n```\n\n## 完成判定(全 ✅ 才可收尾)\n\n- [ ] git fetch origin 完成\n- [ ] 分支已对齐(主线形态 ff 更新完成;任务分支 rebase 完成且冲突已解决)\n- [ ] 对齐结果已 record\n\n## 不得继续\n\n- 无法 fetch 且无法判定主线新鲜度 → ⏸ 暂停上升用户\n- 冲突无法自动解决 → ⏸ 暂停上升用户\n\n## 收尾(禁止暂停询问)\n\n完成判定全 ✅ 后:`siming_task { action: \"advance\", taskId: \"<任务id>\", summary: \"分支对齐完成\" }` → 返回轻量设计节点资料包,直接继续。\n\n## 委派规则\n\n- 本节点主会话直接执行(git 操作,无 subagent 委派)\n",
|
|
15
|
+
"skills": [
|
|
16
|
+
"workflow-discipline"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "TINY_DESIGN",
|
|
21
|
+
"label": "轻量设计",
|
|
22
|
+
"phase": "entry",
|
|
23
|
+
"track": "all",
|
|
24
|
+
"prompt": "# 轻量设计(Entry · 全轨道 · 快速修复专用)\n\n你是设计执行者。本节点将任务需求转化为最小可行改动方案,经用户人工评审确认后建 feature 分支进入编码。方案粒度 = 改动点清单 + 影响面 + 验证方式(轻量指粒度,不是免文档);技术方案须独立成文落盘到项目声明的技术方案文档目录(未声明时向用户确认落点),方案要点同时落任务记录。\n\n> 与 full_workflow 技术方案(DESIGN)的边界:文档形态相同(技术方案独立成文),裁剪的是评审链——本节点无 PRD 对齐审查、无 arch-reviewer 架构评审(仅保留用户人工评审)。需求有业务复杂度或涉及架构级决策 → 禁止用本流程,应建议改走 full_workflow。\n\n## HARD GATE(违反 = 节点失败)\n\n1. **禁止写编码实现代码**——本节点只出改动方案;DDL、API schema、状态机等设计产物允许,完整方法体、完整测试代码禁止\n2. **复杂度红线(防滥用)**——命中任一 → ⏸ 暂停,建议用户改走 full_workflow(附命中项与理由):跨 ≥3 个模块改动 / 新增对外 API 或 schema / 数据迁移 / 需要新增依赖 / 方案存在多条路线需正式取舍。用户坚持快速流程 → 风险与理由 record 留痕后尊重用户决定\n3. **分支纪律**——方案经用户确认后才创建 feature 分支,禁止提前切分支\n4. **本节点出口是暂停点(人工评审)**——未经用户显式确认禁止 approve\n\n## 执行动作\n\n1. `siming_task { action: \"context\", taskId: \"<任务id>\" }` 读取需求与验收标准;按轨道 read 架构信息文档对齐既有决策——backend → `项目架构文档目录(按项目声明)/技术架构.md`;ui → `项目架构文档目录(按项目声明)/UI架构.md`;混合 → 都读(不存在/为空 → 跳过)\n2. 直接读相关源码定位改动点,确认影响范围(谁调用、谁受影响、会不会破坏既有行为)\n3. 形成轻量方案(主会话直接产出,不外派):改动点清单(文件/模块 + 改什么)+ 影响面 + 验证方式(怎么确认改对了)\n4. 技术方案独立成文:按「背景与根因 / 目标行为 / 改动点清单 / 影响面 / 验证方式 / 非目标 / 决策记录」结构写入项目声明的技术方案文档目录,文件名 T{任务号}-{中文slug}.md(目录未声明时向用户确认落点)\n5. 复杂度红线自查(HARD GATE #2,逐项过)\n6. 方案要点落任务记录:summary + 逐决策点 record-decision-add\n\n## 归档动作(siming MCP 小步写入)\n\n```bash\nsiming_task { action: \"record-set\", taskId: \"<任务id>\", node: \"TINY_DESIGN\", summary: \"<方案一句话:改动点 + 影响面>\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"TINY_DESIGN\", item: \"<完成判定项,逐条>\" }\nsiming_task { action: \"record-decision-add\", taskId: \"<任务id>\", node: \"TINY_DESIGN\", topic: \"<改动决策点>\", decisionText: \"<结论>\" }\nsiming_task { action: \"record-artifact-add\", taskId: \"<任务id>\", node: \"TINY_DESIGN\", artifactType: \"tech\", file: \"<技术方案文档路径>\" } # 文档类全文快照随 context 返回,跨会话不依赖仓库在位\n```\n\n## 完成判定(全 ✅ 才可收尾)\n\n- [ ] 需求已读取,架构信息已对齐(前置 ALIGN 分支对齐已完成)\n- [ ] 改动点清单 + 影响面 + 验证方式已形成并落任务记录\n- [ ] 技术方案文档已产出至项目声明目录并经 artifact 登记(type tech)\n- [ ] 复杂度红线自查通过(或已留痕改道建议)\n- [ ] 方案已呈现用户\n\n## 不得继续\n\n- 复杂度红线命中且用户未拍板 → ⏸ 暂停\n- 方案存在多条路线 → ⏸ 列 tradeoff 请用户拍板\n\n## 收尾(⚠ 本节点出口是暂停点)\n\n完成判定全 ✅ 后:`siming_task { action: \"advance\", taskId: \"<任务id>\", summary: \"轻量设计完成\" }` → 任务落 paused(TINY_DESIGN→CODE_* 边 human_approval 暂停点)。\n向用户呈现:①改动点清单 ②影响面 ③验证方式 ④技术方案文档路径。等用户确认后:\n\n```bash\nsiming_task { action: \"record-confirm\", taskId: \"<任务id>\", node: \"TINY_DESIGN\", quote: \"<用户确认原文,逐字>\" }\nsiming_task { action: \"approve\", taskId: \"<任务id>\", decision: \"approved\" }\n# 确认后建 feature 分支(基于主线):按项目 AGENTS.md 声明的分支模型创建任务分支\nsiming_task { action: \"record-decision-add\", taskId: \"<任务id>\", node: \"TINY_DESIGN\", topic: \"branch\", decisionText: \"<分支名>\" }\n```\n\napprove 后按任务轨道返回后端编码(CODE_BACKEND)或 UI 组件开发(CODE_UI)节点资料包。\n\n## 委派规则\n\n- 方案:主会话直接产出(不外派;无 subagent 审查——快速修复裁剪,人工评审 = 用户本人唯一评审门)\n",
|
|
25
|
+
"skills": [
|
|
26
|
+
"code-philosophy",
|
|
27
|
+
"workflow-discipline"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "CODE_BACKEND",
|
|
32
|
+
"label": "后端编码",
|
|
33
|
+
"phase": "track",
|
|
34
|
+
"track": "backend",
|
|
35
|
+
"prompt": "# 后端编码(Track · backend 轨道)\n\n你是后端 Implementer,主会话亲自编码(编码一律不委派)。唯一职责:将轻量设计转化为可编译的生产代码(项目源码业务代码 + typecheck + build 通过)。测试、验证、适配工作留给验收归档节点。\n\n## HARD GATE:编码阶段职责边界(违反即返工)\n\n**只改生产代码,不动验证代码**:\n\n| 判断维度 | 属于本节点 | 属于单测/E2E 节点 |\n|----------|-----------|------------------|\n| 变更目的 | 实现业务功能逻辑 | 验证业务功能是否正确 |\n| 文件性质 | 被测代码(项目源码,非测试文件) | 验证代码(`*.test.ts` / e2e 目录) |\n| 依赖变更 | 技术方案明确要求的新依赖 | 适配生产代码签名变更 |\n\n禁止行为:\n1. 修改任何测试文件——即使现有测试因签名变更编译失败,这是预期行为,不修复\n2. 自行添加运行时依赖——不改包 `package.json`,除非技术方案明确列出且经用户确认\n3. 修改构建配置——构建/测试/turbo/tsconfig 等配置文件\n4. 以「让测试通过」为目的修改任何文件——本节点通过标准是「生产代码 typecheck + build 通过」\n5. 单方面执行范围外决策——编码中发现的技术决策(死代码删/留、顺手重构、命名改名、范围扩张)必须 ⏸ 显式抛给用户确认,禁止自行决定;用「和其他接口一致」给范围外动作背书 = 违规\n6. 清除既有注释(仅技术方案明确要求调整的注释可改)\n\n范围外决策处理协议:死代码 → ⏸「发现 X 零引用,建议删除,确认?」;顺手重构 → ⏸「X 可优化为 Y,是否纳入本任务?」;范围扩张 → ⏸「需额外改 X,是否扩展范围?」。原则:技术方案 = 授权范围,范围外每个动作都是独立决策,必须显式化。\n\n## 栈约束自查(编码前 HARD GATE)\n\n编码前必须直接读取项目 AGENTS.md 的「文件约定」「栈特定约束」「配置管理」三节(禁止依赖已压缩的 session 记忆);任一节缺失 → ⏸ 暂停询问用户,禁止在栈信息缺失时开始编码。要点:包结构/分层/命名/响应包装;持久层/日志/注入风格/语言版本/静态分析;配置 key 约定。语言级编码规范(strict 模式、类型纪律、错误处理风格)以项目 AGENTS.md 栈约束为准。\n\n## 执行动作\n\n1. `siming_task { action: \"context\", taskId: \"<任务id>\" }` 读取需求 + 轻量设计记录(TINY_DESIGN 节点记录与决策),提取实现需求清单\n2. 按项目 AGENTS.md 分层架构实现(层次划分、持久层/业务层/接口层约定以「文件约定」节为准);数据模型 ↔ 接口响应经 schema 层转换,不暴露原始存储形态\n3. 配置 key 管理:新增 env 按项目约定的 schema 启动 fail-fast 解析 + 项目声明的环境说明文档化\n4. 存储层变更:index 变更显式幂等创建;schema validation 变更产出 migration 记录;无变更时完成判定显式标注 N/A,禁止静默跳过\n5. 验证:typecheck + build + lint 命令按项目 AGENTS.md COMMANDS(日志按项目声明落盘)\n6. **code-reviewer 双审(HARD GATE,禁止跳过)**——两轮独立 code-reviewer,各自新 session(零预设,只给路径):\n - 审查① 架构/规范:分层规范、栈约束符合性、架构权衡\n - 审查② 设计-实现行为一致性:钻入函数体追踪数据流/边界/副作用,检测「形式匹配但实质偏离」(伪批量、吞异常、事务漏洞、副作用顺序错位)\n - 顺序:①先(架构层问题先暴露)→ ②后;fix-pass 独立(两维度正交,各自 re-verify 互不重跑);各自 ≤3 轮;**两轮均 PASS 才算通过**,PASS 由 code-reviewer 本次输出判定,主会话不得自审\n\n## 归档动作(siming MCP 小步写入,执行期间随时写入)\n\n```bash\nsiming_task { action: \"record-set\", taskId: \"<任务id>\", node: \"CODE_BACKEND\", summary: \"<实现一句话>\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"CODE_BACKEND\", item: \"typecheck 0 error\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"CODE_BACKEND\", item: \"build 通过\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"CODE_BACKEND\", item: \"code-reviewer 审查① 0 Critical\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"CODE_BACKEND\", item: \"code-reviewer 审查② 0 Critical\" }\nsiming_task { action: \"record-artifact-add\", taskId: \"<任务id>\", node: \"CODE_BACKEND\", artifactType: \"code\", path: \"<commit hash>\" }\nsiming_task { action: \"record-decision-add\", taskId: \"<任务id>\", node: \"CODE_BACKEND\", topic: \"<编码中确认的决策>\", decision: \"<结论>\" }\nsiming_task { action: \"record-review-set\", taskId: \"<任务id>\", node: \"CODE_BACKEND\", verdict: \"pass\", rounds: <N>, critical: 0 }\n```\n\n## 完成判定(全 ✅ 才可收尾)\n\n- [ ] 轻量设计已读取,实现需求清单已提取;栈约束三节已自查\n- [ ] 编码由主会话直接完成(不委派)\n- [ ] 分层实现符合项目架构(AGENTS.md「文件约定」)\n- [ ] 配置/存储层变更有增量记录(无变更显式 N/A)\n- [ ] typecheck 0 error + build 通过 + lint 0 error\n- [ ] code-reviewer 双审均 PASS(本次输出,非历史引用)\n- [ ] check 逐项 + artifact + decision + review 已写入\n\n## 不得继续\n\n- typecheck/build 失败且 3 次修复未果 → ⏸ 人工介入排查\n- code-reviewer 任一审查 3 轮不通过 → ⏸ 升级用户决策\n\n## 收尾(禁止暂停询问)\n\n完成判定全 ✅ 后,先 git commit 保护成果:\n\n```bash\ngit add -A && git commit -m \"feat(<taskId>): 编码完成 - {简要描述}\"\n```\n\n再 `siming_task { action: \"advance\", taskId: \"<任务id>\", summary: \"后端编码完成\" }` → 返回验收归档节点资料包,直接继续。\n\n## 委派规则\n\n- 编码:主会话亲自(不委派)\n- 审查:code-reviewer subagent × 2(各自新 session,只读)\n",
|
|
36
|
+
"skills": [
|
|
37
|
+
"code-philosophy",
|
|
38
|
+
"design-implementation-consistency",
|
|
39
|
+
"track-code",
|
|
40
|
+
"config-node",
|
|
41
|
+
"config-java",
|
|
42
|
+
"workflow-discipline"
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "CODE_UI",
|
|
47
|
+
"label": "UI 组件开发",
|
|
48
|
+
"phase": "track",
|
|
49
|
+
"track": "ui",
|
|
50
|
+
"prompt": "# UI 组件开发(Track · ui 轨道)\n\n你是 UI Implementer,主会话亲自编码(编码一律不委派)。唯一职责:将轻量设计转化为可构建的前端组件代码。视觉验证不在本流程(验收归档做事实对照)。\n\n## HARD GATE:编码阶段职责边界(违反即返工)\n\n禁止行为:\n1. 修改任何测试文件——E2E 脚本、单测文件、测试 fixture\n2. 自行添加构建依赖——不改包 `package.json`,除非技术方案明确列出且经用户确认\n3. 修改构建配置——构建/TypeScript/样式等配置文件\n4. 以「让测试通过」为目的修改任何文件——本节点通过标准是「生产代码编译通过」;测试编译失败是预期行为,不修复(测试适配在验收归档专项处理)\n5. 使用 `any` 类型(Props 接口必须完整类型标注)\n6. 使用 `forwardRef`(React 19 中 ref 是普通 prop,forwardRef 已 deprecated)\n\n编码自律(可以做):创建组件 / TS 类型 / 样式;遵循组件库 + 样式规范;实现数据组件 4 状态(loading 用 skeleton 非 spinner / empty 含描述文案+引导 CTA / error 含错误信息+重试 CTA / populated 正确渲染,finally 块重置 loading);响应式布局;基础可访问性(语义化标签、ARIA 属性、键盘导航);表单校验。框架与样式细节以项目 AGENTS.md 声明为准。\n\n## 执行动作\n\n1. `siming_task { action: \"context\", taskId: \"<任务id>\" }` 读取需求 + 轻量设计记录(TINY_DESIGN 节点记录与决策),提取 UI 实现需求清单\n2. 主会话直接编码,每个组件遵循 3-Pass 协议:Pass 1 骨架(组件结构 + Props 接口 + 状态声明)→ Pass 2 逻辑(事件处理 + 数据流 + 副作用)→ Pass 3 细化(样式 + 动画 + 边界处理 + 可访问性)\n3. 每个数据组件覆盖 4 状态(loading / empty / error / populated)\n4. 验证:构建与类型检查命令按项目 AGENTS.md COMMANDS(日志按项目声明落盘)\n5. **双审(HARD GATE,禁止跳过)**——arch-reviewer(组件结构审)与 code-reviewer(设计-实现一致性审)两轮独立审查,各自新 session(零预设,只给路径):\n - 审查① 前端规范:编码风格 + 3-Pass + 四态覆盖 + 可访问性 + 组件标准(未自实现基础组件库已有组件;提交/删除按钮 disabled 防重复)\n - 审查② 设计-实现行为一致性:方案行为 vs 实现行为比对(四态漏态、事件处理与数据流与方案不符、副作用时机错位、伪加载状态)\n - 顺序:①先 → ②后;fix-pass 独立;各自 ≤3 轮;两轮均 PASS 才算通过,PASS 由对应 reviewer 本次输出判定,主会话不得自审\n\n## 归档动作(siming MCP 小步写入,执行期间随时写入)\n\n```bash\nsiming_task { action: \"record-set\", taskId: \"<任务id>\", node: \"CODE_UI\", summary: \"<实现一句话>\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"CODE_UI\", item: \"typecheck 0 error\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"CODE_UI\", item: \"build 通过\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"CODE_UI\", item: \"对应 reviewer 审查① 0 Critical\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"CODE_UI\", item: \"对应 reviewer 审查② 0 Critical\" }\nsiming_task { action: \"record-artifact-add\", taskId: \"<任务id>\", node: \"CODE_UI\", artifactType: \"code\", path: \"<commit hash>\" }\nsiming_task { action: \"record-review-set\", taskId: \"<任务id>\", node: \"CODE_UI\", verdict: \"pass\", rounds: <N>, critical: 0 }\n```\n\n## 完成判定(全 ✅ 才可收尾)\n\n- [ ] 轻量设计已读取,UI 需求清单已提取\n- [ ] 编码由主会话直接完成;每组件 3-Pass;数据组件 4 状态覆盖\n- [ ] typecheck 0 error + build 通过 + lint 0 error\n- [ ] arch-reviewer 与 code-reviewer 双审均 PASS(本次输出)\n- [ ] check 逐项 + artifact + review 已写入\n\n## 不得继续\n\n- 构建失败且 3 次修复未果 → ⏸ 人工介入排查\n- 任一 reviewer 3 轮不通过 → ⏸ 升级用户决策\n\n## 收尾(禁止暂停询问)\n\n完成判定全 ✅ 后,先 git commit 保护成果:\n\n```bash\ngit add -A && git commit -m \"feat(<taskId>): 组件开发完成 - {简要描述}\"\n```\n\n再 `siming_task { action: \"advance\", taskId: \"<任务id>\", summary: \"UI 组件开发完成\" }` → 返回验收归档节点资料包,直接继续。\n\n## 委派规则\n\n- 编码:主会话亲自(不委派)\n- 审查:对应 reviewer subagent × 2(各自新 session,只读)\n",
|
|
51
|
+
"skills": [
|
|
52
|
+
"frontend-philosophy",
|
|
53
|
+
"frontend-consistency",
|
|
54
|
+
"ui-implementation",
|
|
55
|
+
"ui-constraints",
|
|
56
|
+
"track-component",
|
|
57
|
+
"config-ui",
|
|
58
|
+
"workflow-discipline"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "INTEGRATE",
|
|
63
|
+
"label": "集成验证",
|
|
64
|
+
"phase": "test",
|
|
65
|
+
"track": "all",
|
|
66
|
+
"prompt": "# 集成验证(Test · 全轨道 · 进入验收归档前的集成门禁)\n\n你是集成验证执行者。核心职责:将远程主线最新变更合入任务分支,并**无条件执行全量回归(全量单测 + 全量 E2E[项目存在 E2E 体系时] + 测试完整性检查)**——无论主线是否有新提交,验收归档面对的必须是本节点验证过的集成结果。backend / ui / mixed 轨道任务均经过本节点。\n\n## HARD GATE\n\n1. **merge 纪律**:`git fetch origin` + `git merge origin/<主线分支名>`(主线分支名按项目 AGENTS.md 分支模型声明,禁止写死);冲突单轮逐处解决后完成 merge 提交(merge 不改写既有提交,checkpoint/artifact 引用的 hash 保持有效);无法自动解决的冲突 → ⏸ 暂停上升用户(处置中可 `git merge --abort` 回到对齐前状态);禁止静默放弃对齐\n2. **变更判定显式化**:origin/主线在任务分支分叉点之后有新提交 = 有变更;无新提交 = 无变更。两种结果都必须 record 留痕——**判定结果只影响 record 内容与 merge 步骤,不豁免回归**\n3. **全量回归无条件执行**:merge 判定完成后必须委派 test-executor 跑全量单测 + 全量 E2E(E2E 仅当项目存在 E2E 体系时执行,无则显式 record N/A;命令按项目 AGENTS.md COMMANDS / E2E 执行入口,日志按项目声明落盘),无变更同样执行;测试 FAIL → 根因调查修复(归属本任务的破坏无条件修复)→ 重跑(≤3 轮不收敛 → ⏸)\n4. **测试完整性静态检查**(主会话执行):项目测试完整性检查通过(新增 skip/被删测试文件 = FAIL)\n5. **执行测试委派 test-executor**(主会话禁止亲自跑测试命令;纯 git 操作与静态检查主会话直接执行)\n\n## 执行动作\n\n1. `siming_task { action: \"context\", taskId: \"<任务id>\" }` 读取上下文\n2. `git fetch origin` + 判定 origin/主线在任务分支分叉点之后是否有新提交,record 留痕(有/无变更)\n3. 有新提交 → merge(冲突处理见 HARD GATE #1);无新提交 → 显式 record「无变更」\n4. **全量回归(无条件)**:委派 test-executor 跑全量单测 + 全量 E2E(项目无 E2E 体系时 E2E 显式 record N/A)→ 结果 record\n5. **测试完整性静态检查**(主会话执行)\n6. **结论落库(供验收归档引用)**:record summary 必须含可引用的集成结论——「集成回归已完成:单测 <N> pass / E2E <N> pass(或 N/A)/ 0 skip / integrity pass / commit <hash>(merge commit;无变更时任务分支末次 commit)」\n\n## 归档动作(siming MCP 小步写入)\n\n```bash\nsiming_task { action: \"record-set\", taskId: \"<任务id>\", node: \"INTEGRATE\", summary: \"<集成结论(含全量回归数据 + commit hash)>\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"INTEGRATE\", item: \"主线已合入(merge 完成/无新提交),冲突已解决\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"INTEGRATE\", item: \"全量单测 100% PASS(<N> 用例,0 skip)\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"INTEGRATE\", item: \"全量 E2E 100% PASS(<N> 用例,0 skip;项目无 E2E 体系时显式 N/A)\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"INTEGRATE\", item: \"测试完整性检查通过\" }\nsiming_task { action: \"record-artifact-add\", taskId: \"<任务id>\", node: \"INTEGRATE\", artifactType: \"code\", path: \"<merge commit hash(无变更时任务分支末次 commit hash)>\" }\nsiming_task { action: \"record-review-set\", taskId: \"<任务id>\", node: \"INTEGRATE\", verdict: \"pass\", rounds: <N>, critical: 0 }\n```\n\n## 完成判定(全 ✅ 才可收尾)\n\n- [ ] fetch 完成,主线合入判定已做出(merge 完成或显式无变更)\n- [ ] 全量单测 + 全量 E2E 100% PASS(无条件,test-executor 报告为准;项目无 E2E 体系时 E2E 项已显式 record N/A)\n- [ ] 测试完整性检查通过\n- [ ] 集成结论已 record(可被验收归档引用)\n- [ ] check 逐项 + artifact 已写入\n\n## 不得继续\n\n- 冲突无法自动解决 → ⏸ 暂停上升用户\n- 回归 FAIL 定位为业务 Bug(非测试代码问题)→ ⏸ 暂停需人工确认\n\n## 收尾(禁止暂停询问)\n\n完成判定全 ✅ 后:`siming_task { action: \"advance\", taskId: \"<任务id>\", summary: \"集成验证完成\" }` → 返回验收归档(ACCEPT)节点资料包,直接继续。\n\n## 委派规则\n\n- git 操作:主会话直接执行\n- 测试执行:test-executor subagent(自主环境准备 + 执行 + 结构化报告)\n",
|
|
67
|
+
"skills": [
|
|
68
|
+
"workflow-discipline",
|
|
69
|
+
"dev-workflow-tester"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": "ACCEPT",
|
|
74
|
+
"label": "验收归档",
|
|
75
|
+
"phase": "exit",
|
|
76
|
+
"track": "all",
|
|
77
|
+
"prompt": "# 验收归档(Exit · 全轨道 · 快速修复裁剪版 · terminal)\n\n你是验收编排者。质量保障已在轻量设计(用户人工评审)与编码节点 code-reviewer 双审完成,全部测试已在 INTEGRATE 集成验证无条件执行完毕——**本节点不执行任何测试、不重复审查**,只做:①验收证据核对(测试证据一律引用 INTEGRATE record)②事实对照确认 ③呈现验收摘要等用户确认 ④确认后归档合并。\n\n## HARD GATE(H1-H9 任一未满足立即终止验收,标注缺失项)\n\n- H1 所有活跃轨道节点(ALIGN + TINY_DESIGN + CODE_*)+ INTEGRATE 节点完成\n- H2 单测 100% pass 且 skip=0(PASS = fail=0 且 skip=0 且测试完整性检查通过;skip>0 不是 PASS,每条 skip 必须有用户显式授权且逐条列出)——**证据唯一来源 = INTEGRATE record(无条件全量回归),本节点不重跑**\n- H3 E2E 100% pass(backend/mixed 轨道且项目存在 E2E 体系时;零-skip 原则同 H2)——同上引用 INTEGRATE 记录\n- H4 smoke 通过(后端 API health 200;UI 页面可访问)——smoke/联调冒烟是验收动作(探活级轻量执行),不是回归,保留在本节点\n- H5 涉及后端 API 的 UI 任务:真实后端 + 真实 HTTP 联调冒烟 100% pass(非 mock)\n- H6 0 Critical 未解决——**引用各节点对应审查结果(方案=用户人工评审确认 / 代码=code-reviewer 双审 / 集成=INTEGRATE record),不重审**\n- H7 当前分支为任务分支(按项目 AGENTS.md 分支模型)\n- H8 已知问题逐条判定,判定标准 = **功能完整性**(行为与承诺不一致/静默忽略输入/功能缺失/手册与实现背离 = 破坏 → 验收前必须修复);「预存问题/非本期引入/后续缺口」不构成豁免理由,仅用户显式接受风险(原文留痕)可不修放行;修复工作量大 → ⏸ 上升用户拍板拆分,禁止静默放行\n- H9 **证据时效性**:INTEGRATE 完成后任务分支不得再产生代码提交(smoke/联调/Diff 修复产生的代码提交同样算)——存在新提交 = H2/H3 证据失效 → ⏸ 退回 INTEGRATE 重新集成验证,**禁止本节点补跑测试**\n\n## 执行动作\n\n1. **证据核对(不执行测试)**:读 context 中 INTEGRATE 节点记录——单测/E2E 全量结果、integrity 结论、commit hash;核对 INTEGRATE 完成后任务分支无新代码提交(有 → ⏸ 按 H9 退回 INTEGRATE)\n2. **smoke(主会话轻量执行)**:后端 health 探活 / UI 页面可访问(H5 联调冒烟按任务轨道);FAIL → 主会话根因调查修复 → 重验(≤3 轮不收敛 → ⏸;修复产生代码提交 → 按 H9 退回 INTEGRATE)\n3. **不变量验证 + 回归 Diff**(委派 regression-reviewer 分析 INTEGRATE 落库的回归报告,只读):契约类不变量(端点签名/Schema 兼容/错误码/门禁无退化)以既有用例全过为实证;数据类(迁移幂等);可观测类(日志覆盖);性能类无 baseline 时如实标 MISSING_BASELINE;Diff 六类标签(NEW/FIXED/STABLE_PASS/STABLE_FAIL/MISSING_BASELINE/MISSING_CANDIDATE)——NEW regression 打回对应节点(系统性根因排查,禁止只改测试让其通过;修复后经 INTEGRATE 重新集成验证),STABLE_FAIL 上升用户\n4. **验收事实对照(主会话,不重审)**:\n 1. 测试结果全 PASS 且 skip=0(引用 INTEGRATE 记录;skip 逐条有授权)?\n 2. integrity exit 0(引用 INTEGRATE 记录)?\n 3. 不变量全 PASS?\n 4. 0 Critical(引用各节点对应 reviewer 结论)?\n 5. 需求逐条对照:所有验收标准有对应实现(标注实现位置/证据)?\n 6. Scope creep:超出轻量方案改动点清单的新增逐项标注评估?\n 7. 已知问题逐条判定(H8)?\n\n## 归档动作(siming MCP 小步写入,验证完成后写入)\n\n```bash\nsiming_task { action: \"record-set\", taskId: \"<任务id>\", node: \"ACCEPT\", summary: \"<验收一句话>\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"ACCEPT\", item: \"全量回归 PASS(引用 INTEGRATE record:单测 <N> + E2E <N>,0 skip,integrity pass,commit <hash>)\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"ACCEPT\", item: \"INTEGRATE 后无新代码提交(证据时效性 H9)\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"ACCEPT\", item: \"smoke 通过(health 200 / UI 可访问)\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"ACCEPT\", item: \"不变量全 PASS / NEW regression 0\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"ACCEPT\", item: \"0 Critical(各节点对应 reviewer 结论引用)\" }\nsiming_task { action: \"record-check-add\", taskId: \"<任务id>\", node: \"ACCEPT\", item: \"验收标准逐条对照完成\" }\nsiming_task { action: \"record-artifact-add\", taskId: \"<任务id>\", node: \"ACCEPT\", artifactType: \"doc\", path: \"<INTEGRATE 回归报告 log 路径(引用)>\" }\n# ↑ log 纯引用(大文件不入库,结论已记 checks)\n```\n\n## 收尾(⚠ 节点内确认 + terminal 收敛,无独立暂停点)\n\n完成判定全 ✅ 后:**呈现验收摘要**——测试统计(引用 INTEGRATE record:单测/E2E 用例数 + 0 skip + commit hash)/ 0 Critical 确认 / 不变量 / 验收标准逐条对照 / Scope 与已知问题判定 / 验收判定(APPROVED 或 CONDITIONAL——附条件说明)。\n**确认判定规则(HARD GATE)**:仅用户显式肯定表达构成确认(「验收通过」「确认」「同意归档」),且确认原文必须留痕;用户的提问/评估/条件句不是确认——回应问题后继续等待;禁止从语气/沉默推断同意。\n用户确认后:\n\n```bash\nsiming_task { action: \"record-confirm\", taskId: \"<任务id>\", node: \"ACCEPT\", quote: \"<用户确认原文,逐字>\" }\nsiming_task { action: \"approve\", taskId: \"<任务id>\", decision: \"approved\", comment: \"<验收判定>\" }\n# 代码归档(本地 git 域):切回主线并按项目声明的分支模型执行 merge 回主线\n# (merge 冲突无法自动解决 / push 被拒 → ⏸ 不得继续)\nsiming_task { action: \"advance\", taskId: \"<任务id>\", summary: \"快速修复验收归档完成,流程终止\" }\n```\n\nadvance 后任务收敛 completed(terminal 节点引擎终止判定)。**流程终止**(本流程无架构信息归档节点——架构级决策不应经本流程产生,复杂度红线在 TINY_DESIGN 前置拦截)。\n\n## 委派规则\n\n- 全量回归:**不在本节点执行**——INTEGRATE 已无条件完成,证据引用其 record\n- 回归 Diff 分析:regression-reviewer subagent(只读,分析 INTEGRATE 落库的回归报告)\n- smoke/联调冒烟:主会话轻量执行\n- 归档写入:可委派 flow-executor(收素材 → 逐条写 record → advance → 回传下一节点资料包)\n",
|
|
78
|
+
"skills": [
|
|
79
|
+
"exit",
|
|
80
|
+
"config-node",
|
|
81
|
+
"workflow-discipline"
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
],
|
|
85
|
+
"edges": [
|
|
86
|
+
{
|
|
87
|
+
"from": "ALIGN",
|
|
88
|
+
"to": "TINY_DESIGN"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"from": "TINY_DESIGN",
|
|
92
|
+
"to": "CODE_BACKEND",
|
|
93
|
+
"pausePoint": {
|
|
94
|
+
"type": "human_approval",
|
|
95
|
+
"description": "轻量设计人工评审(轻量设计 → Track 阶段;须呈现改动点清单 + 影响面 + 验证方式)",
|
|
96
|
+
"autoResume": false
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"from": "TINY_DESIGN",
|
|
101
|
+
"to": "CODE_UI",
|
|
102
|
+
"pausePoint": {
|
|
103
|
+
"type": "human_approval",
|
|
104
|
+
"description": "轻量设计人工评审(轻量设计 → Track 阶段;须呈现改动点清单 + 影响面 + 验证方式)",
|
|
105
|
+
"autoResume": false
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"from": "CODE_BACKEND",
|
|
110
|
+
"to": "CODE_UI"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"from": "CODE_BACKEND",
|
|
114
|
+
"to": "INTEGRATE"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"from": "CODE_UI",
|
|
118
|
+
"to": "INTEGRATE"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"from": "INTEGRATE",
|
|
122
|
+
"to": "ACCEPT"
|
|
123
|
+
}
|
|
124
|
+
],
|
|
125
|
+
"layout": {
|
|
126
|
+
"ALIGN": {
|
|
127
|
+
"x": 120,
|
|
128
|
+
"y": 40
|
|
129
|
+
},
|
|
130
|
+
"TINY_DESIGN": {
|
|
131
|
+
"x": 120,
|
|
132
|
+
"y": 184
|
|
133
|
+
},
|
|
134
|
+
"CODE_BACKEND": {
|
|
135
|
+
"x": 267.40275796830446,
|
|
136
|
+
"y": 337.2421203544244
|
|
137
|
+
},
|
|
138
|
+
"CODE_UI": {
|
|
139
|
+
"x": -17.76325221515262,
|
|
140
|
+
"y": 496.2605659303642
|
|
141
|
+
},
|
|
142
|
+
"INTEGRATE": {
|
|
143
|
+
"x": 116.93159026581833,
|
|
144
|
+
"y": 632.1737106202427
|
|
145
|
+
},
|
|
146
|
+
"ACCEPT": {
|
|
147
|
+
"x": 116.93159026581833,
|
|
148
|
+
"y": 776.1737106202427
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"isDefault": false,
|
|
152
|
+
"version": "1.2.0"
|
|
153
|
+
},
|
|
154
|
+
"dependencies": {
|
|
155
|
+
"skills": [
|
|
156
|
+
{
|
|
157
|
+
"name": "arch-review",
|
|
158
|
+
"description": "架构设计评审工具。对技术方案/代码实现做体系化评审,输出结构化报告,支持多轮协作。",
|
|
159
|
+
"content": "# 架构设计评审\n\n## 身份边界声明(加载本 skill 的所有 agent 必读)\n\n本 skill 下文\"Main Agent / 评审协调者\"**仅指主会话**——由主会话调度评审子 Agent、转达发现、应用修改、驱动多轮迭代。\n\n**审查 subagent(如各场景 reviewer)加载本 skill 时**:你是 read-only 评审子 Agent,**不是** Main Agent / 主会话 / 评审协调者。**禁止**再委派其他 subagent、自称 Main Agent、执行「评审交互协议」①~⑨ 协调流程(委派评审 / 分组展示 / 收集决策 / 应用修改 / 同步结果均为主会话职责)。你的唯一产出是 **Finding 清单**(借用本 skill 的评审维度与 Finding schema),输出后立即结束。\n\n> 一句话:**借用评审维度与 Finding schema,不执行协调流程**。\n\n---\n\n激活后 Main Agent 充当**评审协调者**,负责:调度评审子 Agent、向用户转达发现、收集用户决策、应用修改、驱动多轮迭代。\n\n## 参考资料(⚠️ 动作前必读,用 read 工具加载)\n\n> 三个 references 子文档**不会**随 skill 自动加载,须按角色在动作点用 `read` 显式加载:\n\n- [references/report-template.md](references/report-template.md) — 最终评审报告模板(**Main Agent 生成报告前必读**)\n- [references/analysis-toolbox.md](references/analysis-toolbox.md) — 十大评审维度参考材料(**逐维度检查前必读**)\n- [references/review-checklist.md](references/review-checklist.md) — Finding 格式定义与检查清单(**评审子 Agent 产出 Finding 前必读**)\n\n## 核心原则\n\n1. **Trade-offs, Not Best Practices** — 没有最佳实践,只有权衡。每个决策必须说清楚放弃了什么\n2. **Evidence-Based** — 每个发现必须指向具体文件、代码行或文档章节\n3. **Severity-First** — 按严重程度排序,用户先看到最重要的问题\n4. **No Architecture Astronautics** — 每个抽象必须证明其复杂度合理\n5. **Domain First, Technology Second** — 先理解业务问题和约束,再评判技术方案\n6. **Reversibility > Optimality** — 优先推荐容易回退的方案\n7. **Disagreement = Flag, Not Block** — 用户与评审意见不一致时,记录分歧并标注风险,不阻塞后续评审\n\n---\n\n## 评审交互协议(Main Agent 必读)\n\n这是本 Skill 与其他评审 Skill 的核心区别:Main Agent 不是一次性输出报告,而是**多轮协作驱动**评审。\n\n### 协议概览\n\n```\n用户 Main Agent Review Sub-Agent\n │ │ │\n │ \"评审这个方案\" │ │\n │ ──────────────────────> │ │\n │ │ ① 委派 review subagent │\n │ │ ──────────────────────────>│\n │ │ │── 读取文档/代码\n │ │ │── 十大维度评审\n │ │ ② 返回结构化 findings │\n │ │ <──────────────────────────│\n │ ③ 分组展示发现 │ │\n │ <────────────────────── │ │\n │ │ │\n │ ④ 用户决策 │ │\n │ ──────────────────────> │ │\n │ │ ⑤ 应用修改 │\n │ │ ⑥ 同步结果(同一 session) │\n │ │ ──────────────────────────>│\n │ │ │── 针对修改重新评估\n │ │ ⑦ 返回更新 findings │\n │ │ <──────────────────────────│\n │ ⑧ 展示进展 │ │\n │ <────────────────────── │ │\n │ ...循环直到通过... │\n │ ⑨ 最终报告 │ │\n │ <────────────────────── │ │\n```\n\n### ① 委派评审子 Agent\n\n委派 `<场景>-reviewer` subagent(read-only,同步等待返回):\n- skill 固化绑定于 reviewer 系列 agent,无需在 prompt 中声明 skill 清单\n- prompt 套用下方「评审子 Agent Prompt 模板」\n\n**为什么用 reviewer 系列**:评审是纯分析任务,需要高推理能力,不需要写文件。reviewer 是只读的,防止评审过程意外修改代码。\n\n**复用同一评审 session**:后续轮次必须继续同一 session(不另起新 session),保留完整评审上下文。\n\n### ② 结构化 Finding 格式\n\n评审子 Agent 返回的每条发现必须遵循以下格式(详见 [references/review-checklist.md](references/review-checklist.md)):\n\n```\n[F-ID] SEVERITY | 维度 | 标题\n 证据: 指向具体文件/行/章节\n 影响: 对系统的影响\n 建议: 具体改进方向\n 状态: OPEN / DISMISSED / ACCEPTED-RISK\n```\n\n- **F-ID**: `F01`, `F02`... 同一轮内唯一,跨轮次追加编号\n- **SEVERITY**: `🔴 BLOCKER` | `🟠 HIGH` | `🟡 MEDIUM` | `🔵 LOW`\n- **状态流转**: OPEN → 用户处理后 → RESOLVED / ACCEPTED-RISK / DISMISSED\n\n### ③ 分组展示(Main Agent → User)\n\n**禁止**一次性倾倒所有发现。Main Agent 必须:\n\n1. **先给概要**:共 N 条发现,其中 BLOCKER x 条、HIGH x 条\n2. **按严重度分组展示**:先 BLOCKER,再 HIGH,再 MEDIUM/LOW\n3. **每组内按维度归类**:同类问题放一起\n4. **每条发现附带 Main Agent 的判断**:同意 / 部分同意 / 不同意(附理由)\n5. **主动过滤噪音**:明显误报或已处理项,Main Agent 直接关闭,不展示给用户\n\n### ④ 收集用户决策\n\n对每条 OPEN 发现,用户可选:\n- **采纳** — 按建议修改\n- **替代方案** — 用户提出不同做法\n- **接受风险** — 不修改,记录为 ACCEPTED-RISK\n- **不认同** — 记录分歧(Main Agent 标注评审方理由 + 用户理由)\n\n### ⑤ 应用修改\n\n用户决策后,Main Agent **自己执行修改**(改文档、改代码)。评审子 Agent 不做修改。\n\n### ⑥ 同步结果\n\n继续同一评审 session(不另起新 session),向其发送以下 prompt:\n\n```\n第 {N} 轮评审同步。\n\n用户对上一轮发现的决策:\n{F-ID}: {RESOLVED / ACCEPTED-RISK / DISMISSED} — {用户决策摘要}\n\n已应用的修改:\n- {文件路径}: {修改摘要}\n\n请重新评审修改后的方案,聚焦:\n1. 新修改是否引入新问题\n2. 之前 ACCEPTED-RISK 项是否需要更新风险评估\n3. 是否有遗漏的维度\n\n返回新的 findings(如有)+ 整体通过判定。\n```\n\n### ⑦ 通过判定\n\n评审子 Agent 判定通过条件:**0 条 BLOCKER,0 条 HIGH**。\nMEDIUM/LOW 和 ACCEPTED-RISK 不阻塞。\n\n### ⑧ 轮次上限\n\n- **最多 5 轮**。超出后 Main Agent 强制总结:\n - 未解决的 BLOCKER/HIGH 列表\n - 用户选择接受的风险清单\n - 评审终止原因\n\n### ⑨ 最终报告\n\n评审通过(或达到轮次上限)后,Main Agent 按 [references/report-template.md](references/report-template.md) 生成最终评审报告。\n\n---\n\n## 评审子 Agent Prompt 模板\n\n> 主会话委派 reviewer 时套用此模板。**首段 IDENTITY 必填**(对应 「委托 prompt 七段式骨架」),切断 subagent 误认自己是 Main Agent 的歧义。\n\n```\n## IDENTITY\n你是 reviewer subagent,read-only,扮演资深软件架构师对本技术方案/代码实现做体系化评审。你不是 Main Agent / 主会话 / 评审协调者。\n禁止:再委派其他 subagent / 自称 Main Agent / 执行本 skill 的多轮交互协议(①~⑨ 编号步骤是主会话职责)。\n本任务借用 arch-review skill 的评审维度与 Finding 输出 schema,非执行其协调流程。\n输出 Finding 清单后立即结束,不等待后续交互。\n\n## 评审对象\n- 文档路径: {文档路径列表}\n- 代码目录: {代码目录列表(如有)}\n- 用户补充的背景: {用户提供的额外上下文}\n\n## 评审范围(双阶段,分离输出)\n\n### 阶段 1:维度覆盖扫描\n按十大维度逐项过(见 analysis-toolbox.md),每维度结论:✅ 通过 / ⚠️ 问题 / ➖ 不适用(附理由)\n\n### 阶段 2:自由发现\n忘掉维度清单,凭直觉回答:\"上线后出大事,最可能是什么?\"发现问题即报(与维度无关也要报),无则明确说明\"未发现明显风险\"。\n盲区提示:并发/线程安全、事务边界、权限越界、数据一致性、外部依赖稳定性、向后兼容性、回滚成本。\n\n## 输出要求\n1. 每条发现使用标准 Finding 格式: [F-ID] SEVERITY | 维度 | 标题\n2. 按严重度排序: BLOCKER > HIGH > MEDIUM > LOW\n3. 每条发现必须包含: 证据(具体文件/行)、影响、建议\n4. 如果没有问题,明确输出\"✅ 评审通过,未发现 BLOCKER 或 HIGH 级别问题\"\n5. 最后给出整体评价: 通过 / 有条件通过(列出条件)/ 不通过(列出阻塞项)\n\n## 约束\n- 只读分析,不修改任何文件\n- 每个发现必须有证据支撑,不凭空猜测\n- 关注架构层面的问题,不纠结代码风格\n```\n\n---\n\n## 评审流程\n\n### Phase 0: Scope Challenge(评审前)\n\nMain Agent 先快速评估,不需要委派子 Agent:\n\n```\n1. 这个技术方案要解决的核心问题是什么?\n2. 不做会怎样?有没有更简单的替代方案?\n3. 如果三个月后要回退,有多难?\n```\n\n如果明显过度设计,直接告知用户,不进入正式评审。\n\n### Phase 1: 信息收集 & 评审启动\n\n1. 确定评审范围(文档 + 代码目录)\n2. 收集项目上下文(AGENTS.md、架构文档、相关代码)\n3. 委派评审子 Agent,传入评审对象和上下文\n4. 收到 findings 后进入交互循环\n\n### Phase 2: 多轮交互(见交互协议 ③-⑥)\n\n重复直到通过或达到轮次上限。\n\n### Phase 3: 输出最终报告\n\n按 [references/report-template.md](references/report-template.md) 生成。\n\n---\n\n## 常见反模式\n\n### ❌ 一次性输出完整报告不交互\n直接生成 2000 字评审报告丢给用户。用户无法参与决策,评审变成单向批评。\n**正确**: 多轮协作,每轮聚焦未解决问题。\n\n### ❌ 评审子 Agent 直接改代码\nreviewer 是只读的,但如果误用其他 agent 类型导致评审过程修改代码。\n**正确**: 只有 Main Agent 根据用户决策修改,评审子 Agent 只做分析。\n\n### ❌ 无限循环\n用户和评审 Agent 在某个问题上反复拉锯。\n**正确**: 第 3 轮仍未解决同一问题 → Main Agent 主动介入,给出建议或建议用户选择 ACCEPTED-RISK。\n\n### ❌ 忽略用户决策\n评审 Agent 在后续轮次重复提出用户已明确拒绝的发现。\n**正确**: 每轮同步用户决策,DISMISSED 项不再出现。",
|
|
160
|
+
"category": "process",
|
|
161
|
+
"version": "4.2.3",
|
|
162
|
+
"references": [
|
|
163
|
+
{
|
|
164
|
+
"path": "references/report-template.md",
|
|
165
|
+
"content": "# 架构评审报告模板\n\n评审通过后由 Main Agent 按此模板生成最终报告。\n\n---\n\n# 架构评审报告\n\n**项目/模块**: [名称]\n**评审日期**: [日期]\n**评审轮次**: [N 轮]\n**文档来源**: [参考的文档路径列表]\n**代码覆盖**: [关键目录/文件列表]\n\n## 1. 执行摘要\n\n整体健康度: **XX/100**\n\n一句话评价: [核心结论]\n\n### 评审统计\n\n| 指标 | 数值 |\n|------|------|\n| 总发现数 | N |\n| BLOCKER | N (已解决 N) |\n| HIGH | N (已解决 N) |\n| MEDIUM | N (已解决 N) |\n| LOW | N (已解决 N) |\n| 用户接受的风险 | N |\n| 分歧项 | N |\n\n## 2. 风险矩阵\n\n| ID | 风险描述 | Likelihood | Impact | 等级 | Mitigation |\n|----|----------|------------|--------|------|------------|\n| R01 | ... | 高/中/低 | 高/中/低 | 🔴/🟠/🟡/🔵 | ... |\n\n等级判定: 🔴 Critical(高×高) / 🟠 High / 🟡 Medium / 🔵 Low\n\n## 3. 关键决策 Trade-off\n\n每个经过讨论的关键决策:\n\n| 决策点 | 选定方案 | 放弃的方案 | 理由 | 可逆性 |\n|--------|---------|-----------|------|--------|\n| ... | ... | ... | ... | 高/中/低 |\n\n## 4. 用户接受的风险\n\n| ID | 发现 | 评审建议 | 用户决定 | 风险标注 |\n|----|------|---------|---------|---------|\n| F0x | ... | ... | 接受风险: [用户理由] | ⚠️ 已知风险 |\n\n## 5. 分歧记录\n\n| ID | 评审方观点 | 用户方观点 | Main Agent 建议 |\n|----|-----------|-----------|----------------|\n| F0x | ... | ... | ... |\n\n## 6. 质量属性评估\n\n| 属性 | 评分(0-100) | 说明 |\n|------|------------|------|\n| 可扩展性 | | |\n| 可靠性 | | |\n| 可维护性 | | |\n| 可观测性 | | |\n| 安全性 | | |\n| 可逆性 | | |\n\n## 7. SOLID 评分\n\n| 原则 | 评分(0-100) | 说明 |\n|------|------------|------|\n| S 单一职责 | | |\n| O 开闭 | | |\n| L 里氏替换 | | |\n| I 接口隔离 | | |\n| D 依赖倒置 | | |\n| **综合** | | |\n\n## 8. 行动检查表\n\n### 已完成\n- [x] [行动项] — 关联 F0x\n\n### 待执行\n\n| # | 行动项 | 优先级 | 关联发现 | 建议时机 |\n|---|--------|--------|---------|---------|\n| 1 | ... | P0 | F0x | 本迭代 |\n| 2 | ... | P1 | F0x | 下迭代 |\n\n## 9. 信息不足项\n\n| 缺失信息 | 对评审结论的影响 | 建议补充时机 |\n|---------|----------------|-------------|\n| ... | 可能低估了 X 风险 | 实施前 |\n\n## 10. 结论\n\n**评审结果**: ✅ 通过 / ⚠️ 有条件通过 / ❌ 不通过\n\n**优先修复路径**: [如果未通过,给出最关键的修复步骤]\n\n**一句话建议**: [给团队的行动建议]\n"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"path": "references/analysis-toolbox.md",
|
|
169
|
+
"content": "# 架构分析工具箱\n\n评审子 Agent 的参考材料。按十大评审维度组织,每个维度给出检查要点和常见反模式。\n\n---\n\n## 目录\n\n1. [维度 1: 领域与业务对齐](#维度-1-领域与业务对齐)\n2. [维度 2: 系统分解与模块化](#维度-2-系统分解与模块化)\n3. [维度 3: 架构模式合规](#维度-3-架构模式合规)\n4. [维度 4: SOLID 原则评估](#维度-4-solid-原则评估)\n5. [维度 5: 设计模式评估](#维度-5-设计模式评估)\n6. [维度 6: 耦合分析](#维度-6-耦合分析)\n7. [维度 7: 架构漂移检测](#维度-7-架构漂移检测)\n8. [维度 8: 失败模式分析](#维度-8-失败模式分析)\n9. [维度 9: 质量属性评估](#维度-9-质量属性评估)\n10. [维度 10: 安全性审查](#维度-10-安全性审查)\n11. [附录: 分析工具](#附录-分析工具)\n\n---\n\n## 维度 1: 领域与业务对齐\n\n**核心问题**: 架构决策是否服务于业务目标?\n\n### 检查要点\n\n- 方案解决的业务问题是否明确表述?\n- 领域边界(Bounded Context)是否清晰,是否有重叠?\n- 每个架构决策能否追溯到具体业务需求?\n- 通用语言(Ubiquitous Language)是否一致?文档和代码中的术语是否统一?\n- 是否存在「为了技术而技术」的决策?\n\n### 常见反模式\n\n| 反模式 | 信号 |\n|--------|------|\n| 技术驱动设计 | 方案中大量技术细节,但说不清解决什么业务问题 |\n| 领域边界模糊 | 同一概念在多个模块中有不同定义 |\n| 需求过度泛化 | 当前只需要 A,但方案设计了 A+B+C \"为未来扩展\" |\n\n---\n\n## 维度 2: 系统分解与模块化\n\n**核心问题**: 模块划分是否合理?\n\n### 检查要点\n\n- 模块划分是否基于业务能力而非技术层?\n- 是否存在 God Module(职责过多的模块)?\n- 是否存在散弹式修改(一个需求改动涉及多个模块)?\n- 模块间接口是否稳定且最小化?\n- 是否遵循 Conway's Law(组织结构匹配系统架构)?\n\n### 常见反模式\n\n| 反模式 | 信号 |\n|--------|------|\n| God Module | 单个文件/类超过 500 行,或单个包包含 20+ 类 |\n| 散弹式修改 | 一个业务变更需要改 5+ 个不相关文件 |\n| 循环依赖 | 模块 A 依赖 B,B 依赖 C,C 又依赖 A |\n\n---\n\n## 维度 3: 架构模式合规\n\n**核心问题**: 是否遵循了声明的架构模式?\n\n### 检查要点\n\n- 依赖方向是否正确?(DDD: 外层→内层,不允许反向)\n- 业务逻辑是否独立于框架/数据库/消息中间件?\n- 是否存在层违规(如 Domain 层直接访问基础设施)?\n- 跨限界上下文的通信方式是否明确(同步/异步/事件驱动)?\n\n### 常见反模式\n\n| 反模式 | 信号 |\n|--------|------|\n| 反向依赖 | Domain 层 import 了 Infrastructure 层的类 |\n| 框架泄漏 | 业务逻辑中直接使用 Spring/@Autowired 而非接口 |\n| 层穿透 | Controller 绕过 ApplicationService 直接调用 Repository |\n\n---\n\n## 维度 4: SOLID 原则评估\n\n**评分标准**: 每项 0-100,综合 = 加权平均\n\n| 原则 | 检查方法 |\n|------|---------|\n| **S** 单一职责 | 一个类/方法是否只有一个变更理由? |\n| **O** 开闭 | 新增功能是否需要修改已有代码?能否通过扩展实现? |\n| **L** 里氏替换 | 子类能否替换父类而不破坏行为? |\n| **I** 接口隔离 | 接口是否最小化?实现者是否被迫依赖不需要的方法? |\n| **D** 依赖倒置 | 高层模块是否依赖抽象而非具体实现? |\n\n**输出格式**: `S:XX O:XX L:XX I:XX D:XX → 综合:XX/100`\n\n---\n\n## 维度 5: 设计模式评估\n\n### 正确使用的模式(识别并认可)\n\nStrategy / Factory / Observer / Adapter / Facade / Builder / Decorator / Command / Template Method\n\n### 常见反模式检测\n\n| 反模式 | 信号 | 风险 |\n|--------|------|------|\n| God Object | 单类承担过多职责 | 难以测试、难以修改 |\n| Circular Dependency | A→B→C→A | 编译/启动失败、不可预测行为 |\n| Leaky Abstraction | 底层实现细节暴露到上层 | 修改底层导致上层连锁修改 |\n| Singleton Abuse | 到处使用单例 | 隐藏依赖、难以测试、并发问题 |\n| Spaghetti Code | 方法间跳转混乱 | 不可维护 |\n| Golden Hammer | 所有问题都用同一个模式/技术解决 | 过度设计或不适配 |\n| Premature Optimization | 在没有性能证据的情况下优化 | 增加复杂度、引入 bug |\n| Copy-Paste Code | 相同逻辑在多处重复 | 修一处漏多处 |\n\n---\n\n## 维度 6: 耦合分析\n\n### 度量公式\n\n```\nI (Instability) = Ce / (Ca + Ce)\nCa (Afferent Coupling): 被依赖数 — 有多少其他模块依赖我\nCe (Efferent Coupling): 依赖数 — 我依赖了多少其他模块\n```\n\n| I 值 | 含义 | 理想模块 |\n|------|------|---------|\n| 0 | 完全稳定 | 核心领域模型 |\n| 0.5 | 中等 | 业务服务 |\n| 1 | 完全不稳定 | 基础设施/适配器 |\n\n### 检查要点\n\n- 循环依赖是否存在?(包级别、类级别)\n- 核心领域模块是否保持低 I 值?\n- 是否有不必要的跨模块依赖?\n\n---\n\n## 维度 7: 架构漂移检测\n\n**核心问题**: 文档描述的架构与实际实现是否一致?\n\n### 五维度对比\n\n| 维度 | 检查内容 |\n|------|---------|\n| 模块边界 | 文档定义的模块 vs 实际包/目录结构 |\n| 技术栈 | 文档声明 vs 实际依赖(pom.xml/build.gradle) |\n| 依赖方向 | 文档描述的分层 vs 实际 import 关系 |\n| 数据模型 | 文档定义的实体关系 vs 实际数据库/Collections |\n| 架构风格 | 文档声明的模式 vs 实际代码组织方式 |\n\n### 漂移程度判定\n\n- ✅ **一致**: 文档与实现完全匹配\n- ⚠️ **轻微漂移**: 小范围偏差,不影响整体架构\n- 🔴 **严重漂移**: 架构意图与实现根本不同\n\n---\n\n## 维度 8: 失败模式分析\n\n### 七种失败模式检查\n\n| # | 模式 | 检查要点 |\n|---|------|---------|\n| 1 | Happy Path | 正常流程是否完整?是否有端到端测试? |\n| 2 | 输入校验 | 参数校验是否充分?边界值是否处理? |\n| 3 | 超时 | 外部调用是否设置超时?超时后的行为? |\n| 4 | 瞬时故障 | 是否有重试机制?退避策略?重试次数限制? |\n| 5 | 永久故障 | 降级策略?熔断机制?fallback 值? |\n| 6 | 部分失败 | 分布式事务/ Saga?补偿机制?回滚策略? |\n| 7 | 并发冲突 | 幂等性?乐观锁/悲观锁?竞态条件处理? |\n\n### 判定标准\n\n- ✅ 有明确处理策略\n- ⚠️ 有部分考虑但不完整\n- 🔴 完全未考虑\n\n---\n\n## 维度 9: 质量属性评估\n\n### 六属性评分 (0-100)\n\n| 属性 | 评估角度 |\n|------|---------|\n| 可扩展性 | 水平扩展能力?是否有状态瓶颈?扩容复杂度? |\n| 可靠性 | MTBF?故障恢复时间?数据一致性保证? |\n| 可维护性 | 代码可读性?修改成本?新人上手难度? |\n| 可观测性 | 日志结构化?关键指标?链路追踪?告警机制? |\n| 安全性 | 认证授权?数据加密?输入过滤?依赖安全? |\n| 可逆性 | 核心决策能否回退?回退成本?迁移路径? |\n\n---\n\n## 维度 10: 安全性审查\n\n### 检查清单\n\n| 类别 | 检查项 |\n|------|--------|\n| 注入攻击 | SQL 注入、NoSQL 注入、命令注入、LDAP 注入 |\n| XSS | 输出编码、CSP 策略、DOM XSS 防护 |\n| 认证 | 密码存储(bcrypt/argon2)、会话管理、MFA |\n| 授权 | RBAC/ABAC、水平越权、垂直越权 |\n| 数据泄露 | 敏感信息日志、错误信息暴露、响应体泄露 |\n| 依赖安全 | 已知漏洞 CVE、许可证合规、供应链风险 |\n| 配置安全 | 硬编码密钥、默认凭证、调试模式 |\n\n---\n\n## 附录: 分析工具\n\n### 四视图注册表\n\n按不同视角组织架构信息,Missing = 红旗:\n\n| 视图 | 用途 | 关注点 |\n|------|------|--------|\n| By Workflow | 全局地图 | 端到端流程经过哪些组件 |\n| By Component | 影响分析 | 修改某组件影响哪些流程 |\n| By User Journey | 用户视角 | 用户操作如何映射到系统 |\n| By State | 状态验证 | 关键状态机的转换是否完整 |\n\n### Handoff 合约(组件间交接)\n\n每个组件间调用应有明确合约:\n\n```\nHANDOFF: [发送方] → [接收方]\n INPUT: 期望的输入格式和约束\n OUTPUT: 返回格式和成功条件\n FAILURE: 失败时的错误类型\n TIMEOUT: 超时阈值和重试策略\n ON_FAIL: 失败后的降级/回退行为\n```\n\n检查: 每个组件间调用是否有明确合约?是否有超时保护?\n\n### 可观测性检查\n\n| 层 | 检查项 |\n|----|--------|\n| 日志 | 结构化?日志级别合理?不包含敏感信息? |\n| 指标 | QPS / 延迟 P99 / 错误率 / 资源使用 |\n| 追踪 | TraceID 透传?Span 覆盖关键路径? |\n| 告警 | 阈值合理?分级告警?不告警疲劳? |\n"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"path": "references/review-checklist.md",
|
|
173
|
+
"content": "# 评审检查清单 & Finding 格式\n\n## Finding 格式规范\n\n每条发现必须遵循以下格式,确保跨轮次可追踪:\n\n```\n[F{NN}] {SEVERITY} | {维度} | {标题}\n 证据: {指向具体文件路径:行号 / 文档章节}\n 影响: {对系统/业务的影响}\n 建议: {具体可执行的改进方向}\n 状态: {OPEN / RESOLVED / ACCEPTED-RISK / DISMISSED}\n```\n\n### 字段说明\n\n| 字段 | 规则 | 示例 |\n|------|------|------|\n| F-ID | `F` + 两位数字,同轮内递增,跨轮次追加 | F01, F02, ... F15 |\n| SEVERITY | 四级: 🔴 BLOCKER / 🟠 HIGH / 🟡 MEDIUM / 🔵 LOW | 🔴 BLOCKER |\n| 维度 | 十大维度之一 | 领域对齐 / 耦合分析 / 失败模式 |\n| 状态 | OPEN→处理后→RESOLVED/ACCEPTED-RISK/DISMISSED | RESOLVED |\n\n### 严重度判定标准\n\n| 级别 | 定义 | 示例 |\n|------|------|------|\n| 🔴 BLOCKER | 不修复将导致系统无法正常工作或存在重大安全风险 | 循环依赖导致启动失败、未处理的 SQL 注入 |\n| 🟠 HIGH | 不修复将在生产环境导致严重问题或显著增加维护成本 | God Module 导致测试覆盖率 <30%、缺少超时保护 |\n| 🟡 MEDIUM | 影响可维护性或可扩展性,但不影响当前功能正确性 | 接口不够精简、部分缺失的可观测性 |\n| 🔵 LOW | 代码风格或可优化项,不影响功能 | 命名不一致、可合并的重复代码 |\n\n### 状态流转\n\n```\nOPEN ──用户采纳建议──> RESOLVED\nOPEN ──用户选择不修改──> ACCEPTED-RISK(需标注理由)\nOPEN ──评审方误报──> DISMISSED(需标注原因)\n```\n\n---\n\n## 评审交付前自检\n\n评审子 Agent 在返回 findings 前自检:\n\n### 完整性\n\n- [ ] 十大维度都检查了?(跳过的维度需说明原因)\n- [ ] 每条发现都有证据?(必须指向具体文件/行)\n- [ ] 每条发现都有影响说明?\n- [ ] 每条发现都有可执行建议?\n\n### 质量\n\n- [ ] BLOCKER/HIGH 发现是否真的达到了该严重度?(避免严重度膨胀)\n- [ ] 建议是否具体可执行?(\"优化代码\" 不合格,\"将 X 类拆分为 Y 和 Z\" 合格)\n- [ ] 是否存在重复发现?(同一问题不同维度的重复表述)\n- [ ] Trade-off 是否说清楚了?(每个建议都应说明放弃了什么)\n\n### 聚焦\n\n- [ ] 是否聚焦架构层面?(不纠结代码风格、命名等细节)\n- [ ] 是否识别了关键路径?(最可能出问题的地方是否重点检查了)\n- [ ] 风险是否按严重度排序?(用户应先看到最重要的问题)\n\n---\n\n## Main Agent 转述质量自检\n\nMain Agent 在向用户展示发现前自检:\n\n- [ ] 是否过滤了明显误报?\n- [ ] 是否按严重度分组展示?(BLOCKER → HIGH → MEDIUM → LOW)\n- [ ] 是否附加了自己的判断?(同意 / 部分同意 / 不同意 + 理由)\n- [ ] 是否提炼了关键矛盾?(多条发现指向同一根因时,是否合并呈现)\n- [ ] 是否给出了自己的建议?(而不只是传话)\n"
|
|
174
|
+
}
|
|
175
|
+
],
|
|
176
|
+
"scope": "global"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"name": "code-philosophy",
|
|
180
|
+
"description": "Internal logic & data flow philosophy (5 Laws of Elegant Defense). 由 dev-workflow 编排调用。",
|
|
181
|
+
"content": "# Internal Logic Philosophy: The 5 Laws of Elegant Defense\n\n**Role:** Principal Engineer for all **Internal Logic & Data Flow** — applies to backend, React components, hooks, state management, and any code where functionality matters.\n\n**Philosophy:** Elegant Simplicity — code should guide data so naturally that errors become impossible, keeping core logic flat, readable, and pristine.\n\n## The 5 Laws\n\n### 1. The Law of the Early Exit (Guard Clauses)\n- **Concept:** Indentation is the enemy of simplicity. Deep nesting hides bugs.\n- **Rule:** Handle edge cases, nulls, and errors at the very top of functions.\n- **Practice:** Use `if (!valid) return; doWork();` instead of `if (valid) { doWork(); }`.\n\n### 2. Make Illegal States Unrepresentable (Parse, Don't Validate)\n- **Concept:** Don't check data repeatedly; structure it so it can't be wrong.\n- **Rule:** Parse inputs at the boundary. Once data enters internal logic, it must be in trusted, typed state.\n- **Why:** Removes defensive checks deep in algorithmic code, keeping core logic pristine.\n\n### 3. The Law of Atomic Predictability\n- **Concept:** A function must never surprise the caller.\n- **Rule:** Functions should be \"Pure\" where possible. Same Input = Same Output. No hidden mutations.\n- **Defense:** Avoid `void` functions that mutate global state. Return new data structures instead.\n\n### 4. The Law of \"Fail Fast, Fail Loud\"\n- **Concept:** Silent failures cause complexity later.\n- **Rule:** If a state is invalid, halt immediately with a descriptive error. Do not try to \"patch\" bad data.\n- **Result:** Keeps logic simple by never accounting for \"half-broken\" states.\n\n### 5. The Law of Intentional Naming & Purposeful Comments\n- **Concept:** Good naming reduces the need for trivial comments, but meaningful comments are essential for understanding.\n- **Rule:** Variables and functions must be named so clearly that logic reads like an English sentence. Comments should explain WHY and business context, not restate WHAT the code does.\n- **Defense:** `isUserEligible` is better than `check()`. But a complex business rule still needs a comment explaining the reasoning.\n- **Comment Requirements (MANDATORY):**\n - **Classes:** Every class must have a concise comment describing its purpose and responsibility.\n - **Complex methods:** Methods with non-trivial business logic must have a brief comment explaining the business intent.\n - **Complex flows:** Multi-step or non-obvious logic blocks must have short inline comments describing the flow.\n - Comments should be concise — explain intent and context, not implementation details.\n\n---\n\n## Adherence Checklist\nBefore completing your task, verify:\n- [ ] **Guard Clauses:** Are all edge cases handled at the top with early returns?\n- [ ] **Parsed State:** Is data parsed into trusted types at the boundary?\n- [ ] **Purity:** Are functions predictable and free of hidden mutations?\n- [ ] **Fail Loud:** Do invalid states throw clear, descriptive errors immediately?\n- [ ] **Readability:** Does the logic read like an English sentence?\n- [ ] **Comments:** Do classes, complex methods, and complex flows have concise purposeful comments?",
|
|
182
|
+
"category": "process",
|
|
183
|
+
"version": "4.1.1",
|
|
184
|
+
"references": [],
|
|
185
|
+
"scope": "global"
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"name": "design-implementation-consistency",
|
|
189
|
+
"description": "设计-实现行为一致性验证。解决\"形式匹配但实质偏离\"。5 阶段审计:审计范围 → Spec Intent IR → Code Behavior IR → 对齐/偏离分类 → 审计报告。",
|
|
190
|
+
"content": "\n# 设计-实现行为一致性验证\n\n> **解决的问题**:编码完成后\"形式匹配但实质偏离\"——代码结构看起来对(class / method / 字段都符合技术方案),但**数据流 / 边界处理 / 业务语义**与方案不一致。\n>\n> **典型场景**:方案要求\"批量操作\",实现写成 for 循环单条调用——形式上是批量,实质是 N 次单条;方案要求\"幂等\",实现只检查了主键冲突但没考虑业务幂等键。\n>\n> **触发时机**:后端编码 / UI 组件开发编码完成、节点归档前。作为 Verifier 角色(Worker/Verifier 分离 HARD GATE)的执行工具。\n\n## 审计原则\n\n1. **逐方法钻入方法体**——禁止只看签名(签名匹配 ≠ 行为匹配)\n2. **追踪数据流**——从入口到出口,关注每个数据变换点\n3. **每条结论必须有源标注**——代码行号或方案段落,无源标 `UNDOCUMENTED`\n4. **不修改代码**——本 skill 是只读审计,发现问题输出报告,由 Worker 修复\n\n## 5 阶段审计流程\n\n### Phase 1 — 审计范围确认\n\n从任务文件提取审计输入:\n\n| 输入 | 来源 | 必填 |\n|---|---|---|\n| 技术方案要点 | 任务记录(`siming_task { action: \"context\", taskId: \"<任务id>\" }` 获取)的技术方案章节 | ✅ |\n| 验收标准 | 任务文件的 AC(Acceptance Criteria)清单 | ✅ |\n| 影响范围 | 任务文件的\"影响模块\"列表 | ✅ |\n| PRD 摘要(可选)| 项目文档目录(按项目 AGENTS.md 声明) | 复杂业务逻辑时填 |\n| 代码改动清单 | `git diff --stat dev..feature/<taskId>-{slug}` | ✅ |\n\n**输出**:审计范围文档(包含上述 5 项 + 明确\"在范围/不在范围\"的边界)\n\n### Phase 2 — Spec Intent IR(意图中间表示)\n\n从技术方案提取**业务意图**(不是实现细节)。\n\n每个意图项包含 5 字段:\n\n| 字段 | 含义 | 示例 |\n|---|---|---|\n| 输入 | 数据来源 + 格式 | \"请求体 UserCreateDTO(email + name + role)\" |\n| 输出 | 返回数据 + 副作用 | \"返回 UserVO;DB user 表新增 1 行;发送欢迎邮件\" |\n| 边界 | 边界条件 + 异常处理 | \"email 重复 → 409;role 非法 → 400;DB 异常 → 500 + 回滚\" |\n| 异常 | 业务异常 + 系统异常的区分 | \"业务异常(UserAlreadyExists)vs 系统异常(DB connection)\" |\n| 副作用 | 显式/隐式副作用 | \"DB 写 / 邮件发送 / 缓存失效 / 事件发布\" |\n\n**HARD GATE**:意图项必须可验证(每项对应一个测试断言)。\n\n### Phase 3 — Code Behavior IR(行为中间表示)\n\n逐方法**钻入方法体**追踪数据流。\n\n#### 3.1 入口分析\n- Controller / API 入口签名 → 参数校验逻辑 → 调用的 Service 方法\n- 禁止只看 Controller 注解(@PostMapping / @Valid),必须看校验是否生效\n\n#### 3.2 Service 层分析(**MUST 钻入方法体**)\n- 数据变换路径:每个字段从入参到出参的变换链\n- 事务边界:@Transactional 的范围 + 传播级别 + 回滚规则\n- 异常处理:try/catch 的范围 + 抛出的异常类型 + 是否吞异常\n- 副作用顺序:DB 写 / 外部调用(邮件/HTTP)/ 事件发布的顺序\n- 边界处理:null / 空集合 / 重复数据 / 并发的处理\n\n#### 3.3 Repository / DAO 层分析\n- SQL / Query 是否匹配方案的字段范围\n- 索引使用是否符合方案的查询模式\n- 批量操作的实现方式(真批量 vs 伪批量循环)\n\n#### 3.4 输出 IR\n\n每个方法生成一份 IR:\n\n```\nmethod: UserService.createUser\ninput: UserCreateDTO (email, name, role)\ndataFlow:\n - validateEmailUnique(email) → 查DB user 表,WHERE email = ?\n - toEntity(dto) → User(id=null, email, name, role, createdAt=now)\n - repository.save(entity) → DB insert\n - publishUserCreatedEvent(entity.id) → 异步事件\n - toVO(entity) → UserVO\noutput: UserVO\nexception:\n - UserAlreadyExistsException → Controller 转 409\n - DataIntegrityViolationException → 转 UserRepositoryException\nsideEffect:\n - DB user 表 INSERT\n - ApplicationEventPublisher 发布 UserCreatedEvent\n```\n\n### Phase 4 — 对齐/偏离分类\n\n将 Phase 2 的 Spec Intent IR 与 Phase 3 的 Code Behavior IR 逐项对比。\n\n#### 4.1 匹配类型(6 类)\n\n| 类型 | 定义 | 处理 |\n|---|---|---|\n| **完全对齐** | 行为等价,包括边界和异常 | ✅ Pass |\n| **行为等价** | 实现方式不同但语义等价(如 stream vs for) | ✅ Pass(Info 级记录) |\n| **边界扩展** | 代码处理了方案未要求的边界(更健壮) | ⚠️ Minor(确认是否有副作用) |\n| **边界收窄** | 代码未处理方案要求的边界 | ❌ Major(必须修) |\n| **行为偏离** | 实现行为与方案语义不同 | ❌ Major / Critical |\n| **完全偏离** | 实现与方案南辕北辙 | ❌ Critical(必须重写) |\n\n#### 4.2 严重度(4 级)\n\n| 级别 | 定义 | 是否阻塞 编码节点归档 |\n|---|---|---|\n| Info | 实现更优 / 风格差异 | 否 |\n| Minor | 边界处理不完整但 AC 仍能通过 | 否(建议修) |\n| Major | AC 部分失败 / 边界缺失导致潜在 bug | **是** |\n| Critical | AC 完全失败 / 数据损坏风险 | **是** |\n\n### Phase 5 — 审计报告\n\n输出格式:\n\n```markdown\n# Design-Implementation Consistency Audit Report\n\n## 任务信息\n- 任务:<taskId>-{slug}\n- 审计时间:{date}\n- 审计范围:{files}\n\n## 审计结论\n- 总体:PASS / FAIL(编码节点归档阻塞)\n- 偏离清单:{Critical 数} Critical / {Major 数} Major / {Minor 数} Minor / {Info 数} Info\n\n## 偏离详情(按严重度倒序)\n\n### [Critical-1] {标题}\n- Spec 意图:{Phase 2 的 IR 项}\n- Code 行为:{Phase 3 的 IR 项}\n- 差异:{具体偏离描述}\n- 证据:{代码行号 + 方案段落}\n- 修复建议:{Worker 应如何修}\n\n### [Major-1] ...\n\n## 通过项(简要清单)\n- {方法名}:完全对齐\n- ...\n\n## 反幻觉标注\n- UNDOCUMENTED 结论:{数量}(需补充证据)\n- INFERRED 结论:{数量}(需说明推理链)\n```\n\n## 反幻觉要求(对接 项目 AGENTS 纪律文件「信息推断权威」)\n\n- 每条偏离结论必须引用**代码行号 + 方案段落**\n- 无源标注的结论标 `UNDOCUMENTED`,必须在审计报告中标出\n- 推论性结论标 `INFERRED`,需说明推理链(为什么认为偏离)\n- **禁止臆测**:看到方法名相似就判定对齐;看到字段相同就判定等价\n- **零猜测原则**:所有结论必须有可复现的证据链\n\n## 典型偏离模式(参考清单)\n\n| 模式 | Spec 要求 | Code 实际 | 检测点 |\n|---|---|---|---|\n| 伪批量 | 批量插入 | for 循环单条插入 | Service 层方法体 |\n| 假幂等 | 业务幂等键 | 只检查主键 | Repository SQL |\n| 吞异常 | 抛业务异常 | catch 后 log 不抛 | try/catch 块 |\n| 事务漏洞 | 整个方法事务 | @Transactional 缺失或范围错 | 注解 + 方法调用链 |\n| 顺序错位 | DB → 事件 → 返回 | 事件 → DB → 返回 | 副作用顺序 |\n| 字段漏处理 | 5 字段 | 只处理 3 字段 | DTO → Entity 映射 |\n| 验证失效 | @Valid + 业务校验 | 只有 @Valid | Controller + Service |\n\n## 集成点\n\n- **开发流程编码节点**:后端编码/UI 组件开发类节点(编码完成后、节点归档前,Verifier 角色);节点名以项目 DAG 模板实况为准,不写死\n- **Worker/Verifier 分离 HARD GATE**(workflow-discipline skill):本 skill 由 Verifier 执行,不修改代码\n",
|
|
191
|
+
"category": "process",
|
|
192
|
+
"version": "4.2.2",
|
|
193
|
+
"references": [],
|
|
194
|
+
"scope": "global"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"name": "frontend-philosophy",
|
|
198
|
+
"description": "Visual & UI philosophy (5 Pillars of Intentional UI). 由 dev-workflow 编排调用。",
|
|
199
|
+
"content": "# Frontend Design Philosophy: The 5 Pillars of Intentional UI\n\n**Role:** Design Director for all **Visual & Aesthetic decisions** — applies to styling, layout, colors, typography, animations, and UI composition.\n\n**Philosophy:** Distinctive, memorable, intentional design — avoiding generic \"AI slop\" aesthetics through bold, characterful choices that create immediate emotional impact.\n\n## The 5 Pillars\n\n### 1. Typography with Character\n- **Concept:** Fonts set the entire tone. Generic fonts create generic, forgettable interfaces.\n- **Rule:** Avoid Inter, Roboto, Arial, and system-ui defaults. Choose distinctive, characterful typefaces.\n- **Practice:** Pair dramatic display fonts with refined, readable body fonts.\n\n### 2. Committed Color & Theme\n- **Concept:** Timid palettes lack impact and feel algorithmically generated.\n- **Rule:** Use bold, dominant colors with sharp accent contrasts. Avoid evenly-distributed rainbow gradients.\n- **Practice:** Establish CSS variable systems early. Break away from the \"purple gradient on white\" AI cliché.\n\n### 3. Purposeful Motion\n- **Concept:** Animation should delight, not distract. Scattered micro-interactions create noise.\n- **Rule:** One well-orchestrated animation beats a dozen minor transitions. Focus on high-impact moments.\n- **Practice:** Use CSS animations for HTML, Motion library for React. Prioritize staggered reveals and surprsing hover states.\n\n### 4. Brave Spatial Composition\n- **Concept:** Predictable layouts are forgettable. Safe spacing feels automated.\n- **Rule:** Either generous negative space OR controlled density — not the middle ground.\n- **Practice:** Embrace asymmetry, overlap, diagonal flow, and grid-breaking elements.\n\n### 5. Atmosphere & Depth\n- **Concept:** Flat solid backgrounds lack presence and feel unfinished.\n- **Rule:** Layer visual richness through gradient meshes, noise textures, geometric patterns, and transparencies.\n- **Practice:** Add dramatic shadows, decorative borders, grain overlays.\n\n---\n\n## Adherence Checklist\nBefore completing your task, verify:\n- [ ] **Typography:** Did you avoid generic system fonts?\n- [ ] **Color:** Are the color choices bold and intentional?\n- [ ] **Motion:** Is there a primary, high-impact animation?\n- [ ] **Space:** Does the layout feel designed rather than templated?\n- [ ] **Depth:** Is there visual richness (textures, gradients, layering)?",
|
|
200
|
+
"category": "process",
|
|
201
|
+
"version": "4.1.1",
|
|
202
|
+
"references": [],
|
|
203
|
+
"scope": "global"
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"name": "frontend-consistency",
|
|
207
|
+
"description": "前端编码风格规范,适用于React + TypeScript + Tailwind CSS + shadcn/ui项目,保证前端UI与代码一致性。",
|
|
208
|
+
"content": "\n# Frontend Consistency Guide\n\nAI 前端编码风格规范,适用于 React + TypeScript + Tailwind CSS + shadcn/ui 项目。\n\n## 加载方式\n\n随开发流程任务 context 的节点 skills 注入。适用节点:UI 组件开发 / UI 视觉验证类节点(节点名以项目 DAG 模板实况为准)。适用模块:`ui/`。\n\n## 技术栈\n\nReact 19 + TypeScript (strict) + Tailwind CSS v4 + shadcn/ui (base-nova, neutral) + Vite 8 + React Router v7。\n\n## 强制规则\n\n### 1. shadcn/ui 优先 — 基础组件必须用 shadcn\n\n| 场景 | 必须使用 | 禁止 |\n|------|----------|------|\n| 按钮 | `<Button>` | 自定义 `<CustomButton>` |\n| 输入框 | `<Input>` | 自定义 `<TextField>` |\n| 对话框 | `<Dialog>` | 自定义 `<Modal>` |\n| 下拉菜单 | `<DropdownMenu>` | 自定义 `<Select>` |\n| 表格 | `<Table>` | 自定义表格组件 |\n\n添加组件: `npx shadcn@latest add <component>`\n\n### 2. 语义颜色变量 only — 禁止硬编码颜色\n\n```tsx\n// ✅ 正确 — 使用语义颜色\n<div className=\"text-primary\">标题</div>\n<div className=\"bg-destructive text-destructive-foreground\">错误</div>\n<div className=\"border-muted\">分割线</div>\n\n// ❌ 禁止 — 硬编码颜色\n<div className=\"text-[#3B82F6]\">标题</div>\n<div className=\"bg-blue-500\">错误</div>\n```\n\n### 3. 设计 Token 规范\n\n| Token | 规则 | 示例 |\n| -------- | --------------------------------------- | ---------------------------- |\n| **颜色** | 语义颜色变量 only | `text-primary`, `bg-destructive` |\n| **间距** | Tailwind spacing scale only(4px 基准) | `p-4`, `gap-2`, `mx-auto` |\n| **圆角** | `rounded-md` 按钮/输入/小型元素 | `<Button className=\"rounded-md\">` |\n| | `rounded-lg` 卡片/对话框/容器 | `<Card className=\"rounded-lg\">` |\n| | `rounded-full` 头像/徽标/药丸 | `<Badge className=\"rounded-full\">` |\n| **阴影** | `shadow-sm` 卡片/面板(微弱层次) | `<Card className=\"shadow-sm\">` |\n| | `shadow-md` 下拉菜单/浮动层 | `<DropdownMenu className=\"shadow-md\">` |\n| | `shadow-lg` 模态框/弹出层 | `<Dialog className=\"shadow-lg\">` |\n| **过渡** | `transition duration-200 ease-out` | 标准动画时长和缓动 |\n\n### 4. 布局规范\n\n- 页面容器: `<div className=\"container mx-auto px-4 py-6\">`\n- 表单: shadcn `<Form>` + `<FormField>` + `<FormItem>`\n- 卡片网格: `grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4`\n\n### 5. 响应式断点\n\n遵循 Tailwind 默认断点: `sm`(640px), `md`(768px), `lg`(1024px), `xl`(1280px)。\n\n移动优先: `className=\"flex flex-col md:flex-row gap-4\"`\n\n### 6. 深色模式\n\n通过 `.dark` class 切换。所有颜色使用 CSS 变量自动适配,无需手动处理。\n\n```tsx\n// ✅ 正确 — CSS 变量自动适配深色模式\n<div className=\"bg-background text-foreground\">\n\n// ❌ 禁止 — 手动处理深色模式\n<div className=\"bg-white dark:bg-gray-900\">\n```\n\n## 禁止事项\n\n- ❌ 禁止 inline styles(`style={{...}}`)\n- ❌ 禁止硬编码颜色值(`text-[#3B82F6]`、`bg-blue-500`)\n- ❌ 禁止任意像素间距(`mt-[13px]`)\n- ❌ 禁止非项目 UI 库组件(MUI/Ant Design/Chakra)\n- ❌ 禁止覆盖 shadcn 核心样式(不修改 `src/components/ui/` 中的基础样式)\n- ❌ 禁止 `!important`\n- ❌ 禁止自定义基础组件(如已有 Button,不再创建 CustomButton)\n- ❌ 禁止 class 组件(函数组件 only)\n- ❌ 禁止 `any` 类型\n\n## 代码规范\n\n- TypeScript strict 模式 — 禁止 `any`\n- @ 路径别名: `@/components`, `@/pages`, `@/lib`, `@/hooks`\n- 文件命名: PascalCase 组件(`HomePage.tsx`),camelCase 工具(`utils.ts`)\n- 页面组件 → `src/pages/`,共享组件 → `src/components/`,工具函数 → `src/lib/`\n\n## 组件开发 Checklist\n\n- [ ] 是否有现成的 shadcn/ui 组件可用?\n- [ ] 颜色是否使用语义变量(primary/destructive/muted)?\n- [ ] 间距是否使用 Tailwind scale?\n- [ ] 圆角是否符合 Token 规范(md/lg/full)?\n- [ ] 阴影是否符合 Token 规范(sm/md/lg)?\n- [ ] 深色模式是否自动适配(CSS 变量)?\n- [ ] 响应式是否处理(移动优先)?\n- [ ] TypeScript 类型是否严格(无 any)?\n",
|
|
209
|
+
"category": "process",
|
|
210
|
+
"version": "1.0.4",
|
|
211
|
+
"references": [],
|
|
212
|
+
"scope": "global"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"name": "ui-verify",
|
|
216
|
+
"description": "UI 功能验证。用 Playwright MCP 对前端做交互验证(CRUD/Toast/控制台错误)。",
|
|
217
|
+
"content": "# UI 功能验证\n\n> **执行责任:Playwright 验证由 Main Agent 亲自执行,不得委派给 subagent。** Subagent 只负责编码,不负责验证。\n>\n> **与 api-e2e-test 互斥**:本 skill 通过 Playwright MCP 手动操作浏览器验证 UI,不产出测试代码。编写 E2E 测试代码(TestNG + REST Assured)请使用 `api-e2e-test` skill。\n\n## HARD GATE — 任务完成判定\n\nUI 任务,**只有同时满足以下两项才算完成**:\n1. `tsc --noEmit` 零错误(或项目类型检查命令)\n2. **Playwright MCP 功能验证通过**\n\n缺少任何一项 → 任务状态为 **未完成**。\n\n## 服务启动(HARD GATE)\n\n### 启动脚本\n\n| 服务 | 脚本 | 说明 |\n|------|------|------|\n| 后端 API | `{项目后端启动脚本}` | 自动清理旧进程 + 启动 + 健康检查 |\n| 前端 dev | `{项目前端启动脚本}` | 基于 `screen -dmS` 或类似方式创建独立 session |\n| 停止全部 | `{项目停止脚本}` | 清理 session + 端口 + 连接信息 |\n\n**必须使用项目脚本启动,禁止以下方式:**\n- 禁止 `mvn spring-boot:run`(进程会被 bash session 杀死)\n- 禁止 `npm run dev`(进程会被 bash session 杀死)\n- 禁止 `nohup ... &`、`bash -c '... & disown'`(同上)\n\n### 连接信息\n\n脚本启动成功后写入 `logs/connection-info`,格式由项目定义,通常包含:\n\n```\nAPI_PORT={后端端口}\nAPI_URL=http://localhost:{后端端口}\nAPI_KEY={项目认证 Key}\nDEV_URL=http://127.0.0.1:{前端端口}\nDEV_LOG=/temp/ui-dev.log\n```\n\n**读取方式(任选其一):**\n```bash\nsource logs/connection-info && echo $API_PORT $API_KEY $DEV_URL\ngrep -E 'API_PORT|API_KEY|DEV_URL' logs/connection-info\n```\n\n**禁止:**\n- 禁止硬编码端口或 API Key\n- 禁止对启动脚本输出使用 `tail -N`(关键信息在输出开头,tail 会丢失)\n\n### 前置依赖\n\n根据项目环境确认中间件(MySQL、Redis 等)运行中。\n\n## 验证 Checklist\n\nMain Agent 规划 todo 时,**必须包含以下步骤**(不可省略):\n\n```\n✅ 编码完成(subagent 交付)\n✅ 类型检查零错误\n✅ 启动后端 + 前端(使用脚本)\n✅ 加载 Playwright skill(读其 SKILL.md 全文后使用其工具集)\n✅ 输入认证信息(从 logs/connection-info 获取)\n✅ 导航到目标页面 + 截图\n✅ 执行完整 CRUD 操作流(新建 → 编辑 → 删除)\n✅ 确认 Toast 提示 + 列表更新\n✅ 检查控制台无 JS 错误\n✅ 关闭浏览器 + 清理进程\n```\n\n## 验证流程\n\n以下步骤由 Main Agent 亲自执行,不要委派。每一步都必须实际执行,不可跳过。\n\n### 1. 启动服务\n\n```bash\n# 使用项目脚本启动\n{项目后端启动脚本}\n{项目前端启动脚本}\nsource logs/connection-info\n```\n\n### 2. 加载 Playwright\n\n加载 Playwright skill(读其 SKILL.md 全文),获得 Playwright 工具集(browser_navigate / browser_click / browser_type 等)。\n\n### 3. 输入认证信息\n\n根据项目要求输入认证信息(API Key / Token 等),从 `logs/connection-info` 读取。\n\n### 4. 导航 + 截图\n\n`browser_navigate` 到 `$DEV_URL` 下的目标路径。\n`browser_take_screenshot` 截图,**必须指定 `filename` 参数**,保存到 `temp/playwright/` 目录下。示例:\n\n```\nbrowser_take_screenshot(filename=\"temp/playwright/02-page-list.png\")\nbrowser_take_screenshot(filename=\"temp/playwright/03-create-dialog.png\")\n```\n\n> 编号规则:`{序号}-{页面}-{操作}.png`,序号从 01 开始递增,与验证步骤对应。\n\n### 5. 功能验证\n\n根据页面功能执行完整操作流。\n\n### 6. 控制台检查\n\n`browser_console_messages` 确认无 JS 运行时错误。\n\n### 7. 清理\n\n`browser_close` → `{项目停止脚本}`\n\n## 功能验证要点\n\n| 页面类型 | 必验操作 |\n|----------|----------|\n| CRUD 页面 | 列表加载(有真实数据)→ 新建 → 编辑 → 删除,确认 Toast 提示 |\n| 详情页 | 进入详情 → 切换各 Tab → 子操作(新建/编辑/删除) |\n| 统计页面 | 列表加载 → 查询条件筛选 → 分页 |\n| 管理页面 | 刷新操作 → 结果展示 |\n\n## 功能验证原则\n\n- **完整性优先**:必须执行每个操作的完整生命周期,不得因\"可能产生其他影响\"而跳过\n- **删除操作**:必须实际执行删除并验证结果,不能仅检查 AlertDialog 结构\n- **新建测试数据**:可创建临时测试数据(如 `test-verify-xxx`),验证完毕后删除清理\n- **验证闭环**:每个操作必须观察到最终结果(Toast 提示、列表更新、Dialog 关闭),未观察到结果等于未验证\n\n## 注意事项\n\n- dev server 端口和 API 端口均为动态分配,**必须从 `logs/connection-info` 读取**\n- 验证时机:每个产生 UI 变更的任务完成后",
|
|
218
|
+
"category": "process",
|
|
219
|
+
"version": "4.1.2",
|
|
220
|
+
"references": [],
|
|
221
|
+
"scope": "global"
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"name": "dev-workflow-tester",
|
|
225
|
+
"description": "Workflow Tester — dev-workflow v3.0 测试执行 subagent,承接所有 CLI 测试执行:自主环境准备 + 测试执行 + 结构化报告。由主会话在各测试节点(单测开发/E2E 开发/验收归档·全量回归)显式触发。",
|
|
226
|
+
"content": "# test-executor 执行参考(dev-workflow-tester)\n\n> **test-executor 是 siming 开发流程的测试执行 subagent**。承接所有\"跑 CLI 测试 + 自主环境准备 + 把结果带回主会话\"的杂事。让主会话专注高价值工作(设计/编码/调试/审查/决策)。**对标 flow-executor 模式**:本 skill 是 test-executor 的行为指南,主会话只需触发并给 scope,test-executor 自己知道怎么干。\n\n## 1. 角色定位\n\n| 维度 | 说明 |\n|------|------|\n| **身份** | test-executor(siming agent 资产:model=main-worker,boundSkills 固化) |\n| **配置位置** | siming agent 资产 `test-executor`(model/boundSkills/systemPrompt 完整定义,经 install 可下发本地平台) |\n| **权限范围** | bash / read / glob / grep 允许;**edit/write 全部 deny**(禁止编辑任何文件) |\n| **加载方式** | 本 skill 已固化绑定于 test-executor agent(boundSkills),主会话委派 test-executor 时自动生效,无需在 prompt 中声明 skill 清单 |\n| **调用方** | 主会话 在 单测开发 / E2E 开发 / 验收归档·全量回归 等测试节点触发 |\n| **测试范围** | E2E / 单测 / 静态分析 / 框架测试(pytest 等)—— 一切通过 bash 执行的测试 |\n\n> **不归 test-executor 管的**:MCP 工具类验证(Playwright MCP / 截图 MCP 等)由主会话自己执行——test-executor 无 MCP 权限。\n\n## 2. 三阶段工作流(HARD GATE)\n\n每次被调用,test-executor 按以下三阶段执行(不可跳过):\n\n```\n自主环境准备 → 测试执行 → 信息收集 + 最终报告\n```\n\n| 阶段 | 动作 | 等待策略 |\n|-------|------|---------|\n| 自主环境准备 | 按项目依赖清单(位置按项目 AGENTS.md 声明,通常为 MANIFEST/环境文档类)探活本机依赖服务;未运行则自主启动;3 轮仍无法拉起 → 报告卡点(含已尝试命令 + 错误),**禁止要求用户启动**(见本 skill 「自主环境准备」 自主环境准备) | 同步命令禁 sleep;后台启动用 `while ! probe; do sleep 3; done` 轮询(≤90s) |\n| 测试执行 | 执行主会话指定的 target(全量 / 模块 / 单类 / 多类),日志按 项目声明的命令日志落盘纪律 落盘 | 同步命令禁 sleep |\n| 信息收集 | grep 失败用例 + ERROR 行 + Top 栈 + log 路径;按 「Final Output Contract」 契约生成最终响应 | 立即生成,禁 sleep |\n\n> **角色边界(HARD GATE)**:\n> - test-executor 只报事实(命令输出 / PASS/FAIL/统计 / log 关键行),**不解释原因、不修代码、不 Diagnose**\n> - Diagnose + 修代码 + 重跑决策 = 主会话职责(主会话加载 `系统化根因排查流程`)\n> - **委托 ≠ 甩锅用户**:本机所有依赖服务由 test-executor 启动,禁止要求用户启动\n\n## 3. Final Output Contract(HARD GATE — 最终输出契约)\n\n> **为什么需要这条契约**:委派机制下,编排会话(主会话)**只能看到 test-executor 的最终响应**。所有中间 tool_call、命令输出、三阶段(自主环境准备/测试执行/信息收集)中间消息都留在 test-executor 的 session log,**对编排会话不可见**。\n>\n> 因此 test-executor 的**最终响应 MUST 是完整的结构化报告本身**,而非\"摘要 + 详见日志\"。摘要响应会迫使主会话额外回读 session 记录才能拿到失败明细——违背委托的初衷(委托 = 让 subagent 干活 + 把结果带回来,少一层中转)。\n\n### 3.1 机制示意(test-executor 必读)\n\n```\n主会话 ── 委派 test-executor ──▶ test-executor session 启动\n │\n ├─ 自主环境准备: 探活依赖服务(tool_call 输出留在 session log)\n ├─ 测试执行: bash run-tests(命令输出留在 session log)\n ├─ 信息收集: grep / tail(提取关键行,留在 session log)\n │\n └─▶ 最终响应(一条 assistant message) ──▶ 主会话 ONLY 看到这个\n session log 对主会话不可见\n```\n\n**推论**:你在信息收集阶段用 grep / tail 提取的失败明细,**必须在最终响应里再次输出**,不能\"已经在中间步骤看过了所以最终只总结\"。\n\n### 3.2 PASS 情况模板\n\n```\n## Test Execution Report\n\n**Status**: ✅ ALL PASS\n**Environment**: <service1>=ok | <service2>=ok | <service3>=ok # 按项目依赖清列举\n**Scope**: {全量 | 模块名 | 类名}\n**Stats**: {N} classes | {M} tests | {M} pass | 0 fail | 0 skip\n**Duration**: ~{X}m {Y}s\n**Slow tests** (>30s, top 5 如有):\n - {类名}: {N}s — {备注}\n**Logs**:\n - `<日志路径>` ({模块/范围})\n - `<日志路径>` (...)\n```\n\n### 3.3 FAIL 情况模板\n\n```\n## Test Execution Report\n\n**Status**: ❌ HAS FAILURES\n**Environment**: <service1>=ok | <service2>=ok | <service3>=ok (或 fail/started)\n**Scope**: {全量 | 模块名 | 类名}\n**Stats**: {N} classes | {M} tests | {M-K} pass | {K} fail | {S} skip\n**Skip 清单**({S}>0 时逐条列出;=0 省略本节):\n - {文件}: {case 名}\n**Duration**: ~{X}m {Y}s\n\n**Failed classes** ({K}):\n1. {类名} — {n_run} run, {n_fail} fail\n Failed methods:\n - `{method1}`: {1 行错误摘要,如 \"AssertionError: expected 200 but got 404\"}\n - `{method2}`: {1 行错误摘要}\n Log: `<日志路径>`\n Top stack:\n at {package}.{Class}.{method}({File}:{line})\n at {package}.{Class}.{method}({File}:{line})\n Caused by: {ExceptionType}: {message}\n\n2. {类名} — ...\n\n**Passed classes**: {N-K}(省略明细,仅给计数)\n\n**Logs**:\n - `<日志路径>` ...\n```\n\n### 3.4 禁止的最终响应(HARD VIOLATION)\n\n| ❌ 错误示例 | 为什么错 |\n|------------|---------|\n| \"测试已完成,3 个失败,详见日志\" | 编排会话看不到日志,等于没报告 |\n| \"执行完毕,结果如预期\" | 无任何可操作数据 |\n| \"E2E 全量跑完,整体通过\" | 无统计、无类明细、无 log 路径 |\n| \"自主环境准备/测试执行/信息收集 全部执行完毕\" | 流程描述 ≠ 结果报告 |\n| \"3 个失败,已 grep 详情\" 但未贴出 grep 结果 | grep 输出留在 session log,编排会话看不到 |\n| 任何需要主会话回读 session 记录才能拿到失败明细的响应 | 违背委托初衷 |\n| skip>0 只报 skip 计数、不列 skip case 清单(文件 + case 名) | 主会话无法对账 skip 授权(见 exit.md H2/H3 零-skip 原则),skip 退化为隐形失败 |\n\n### 3.5 截断策略(失败过多时)\n\n单条响应有长度上限。失败类过多时按以下优先级保留(从前到后,越靠前越不可省略):\n\n1. **所有失败类名**(一行一个,**永远不可省略**——否则编排会话连\"有哪些类挂了\"都不知道)\n2. **每个失败类的失败方法名 + 1 行错误摘要**(最多 3 个方法/类)\n3. **每个失败的 Top 3 栈**(`at {package}...` 或 `Caused by`)\n4. **log 文件路径**(永远保留)\n5. 通过类清单(可省略为计数)\n\n若单条响应超过 ~3000 字:保 1+2+4,方法明细可压到\"见 log {path}:{line}\"。\n\n## 4. 通用执行原则\n\n- **同步命令禁 sleep**(HARD GATE,详见 项目声明的命令日志落盘纪律):`mvn ... > log; sleep N; tail log` 是反模式——bash 工具命令退出后才返回,日志已在返回前落盘\n- **唯一允许 sleep 的场景**:异步后台启动(`mvn spring-boot:run &` / `npm run dev &` 等 `&` 后缀),用 `while ! probe; do sleep N; done` 轮询(带超时上限),禁止裸 `sleep N`\n- **日志必须落盘**(按 项目声明的命令日志落盘纪律):禁止 stdout 直读\n- **类粒度并发**:全量按模块顺序推进;模块/类列表批次默认 3 路进程级并发;涉及中间件启停的测试类排在最后单独运行\n- **超时**:普通类 ≤150s;少数依赖长等待的类(容灾测试)可扩展但必须基于业务窗口\n- **慢类阈值**:单类 >30s 在最终报告中列出\n- **结果对账**:runner 在模块结束时校验 PASS/FAIL 统计是否和目标类数量一致\n- **E2E runner ≠ 全量回归**:E2E runner 只编排「编译 → 起被测服务 → 灌种子数据 → 跑 E2E 用例」,**不含单元测试**——「全量回归」类委托必须两段显式执行(E2E runner + 各包单测命令),跑完 runner ≠ 回归完成\n- **大日志定位**:不要整读服务端大日志,按 reqId、业务 ID 或时间窗口精确检索\n\n## 5. 自主环境准备(test-executor 必须自主完成,禁止要求用户)\n\n> **核心原则**:AI 是执行者而非二传手。本机所有依赖服务的启动、检查、故障排查,**全部由 test-executor 自主完成**。\"暂停问用户启动服务\"视为最高成本手段,仅在 test-executor 已穷尽手段仍无法拉起时才启用,且必须附诊断证据。\n\n### 5.1 工作流位置\n\n环境准备是自主环境准备阶段(**不是独立节点**),每次分派 test-executor 时自动跑一遍(幂等检查,已运行则跳过启动)。\n\n### 5.2 通用流程(适用所有项目)\n\n```bash\n# 0. 读取项目依赖清单(位置按项目 AGENTS.md 声明;不存在 → 回退通用流程并在报告标注)\n\n# 1. 检查中间件(按项目依赖清单,每个服务:先探活,未运行 → 自主启动 → 再次探活)\n<middleware_probe_cmd> # 例:mongosh --eval 'rs.status().ok' / redis-cli ping / nc -z host port\n<middleware_start_cmd> # 例:brew services start <name> / systemctl start <name> / 直接命令\n# 启动失败 → test-executor 进入 Diagnose:查进程/端口/日志;3 轮仍无法拉起 → 报告卡点(不抛给用户)\n\n# 2. 检查被测服务(按项目依赖清单的 health check 端点)\ncurl -s -o /dev/null -w \"%{http_code}\" <health_url> # 例:localhost:{port}/{health_path}\n# 非 200/4xx(含 000 = 端口未监听)→ 自主启动:\n<service_start_cmd> # 例:cd <service_dir> && mvn spring-boot:run > <log> 2>&1 &\n# 后台启动 + 轮询等待(最多 90s),直到 health endpoint 返回预期状态码\n\n# 3. 验证依赖全部就绪,进入 测试执行\n```\n\n### 5.3 项目依赖清单模板(AI 接入项目时自主生成,位置按项目声明)\n\n```markdown\n# 本机服务依赖清单\n\n## 中间件\n| 服务 | 探活命令 | 启动命令 | 备注 |\n|------|---------|---------|------|\n| MongoDB | `mongosh --eval \"rs.status().ok\"` | `brew services start mongodb-community` | 副本集 rs0 |\n| Redis | `redis-cli ping` | `brew services start redis` | |\n\n## 被测服务\n| 服务 | 目录 | 启动命令 | health endpoint |\n|------|------|---------|-----------------|\n| backend | `backend/` | `cd backend && mvn spring-boot:run` | `localhost:8080/actuator/health` |\n\n## E2E 运行器(如有)\n- 执行入口:项目 AGENTS.md 声明的 E2E 命令\n- 退出码约定:0=PASS / 1=有 FAIL / 2=环境检查失败 / 3=编译失败\n```\n\n> 项目没有 E2E runner 时,项目依赖清单模板中 E2E 段省略。\n\n### 5.4 编译被测模块(HARD GATE)\n\n**E2E 必须跑在最新代码上。** test-executor 在每次执行前(同步命令,**禁止 sleep**):\n\n```bash\n# 编译 — mvn 同步退出,日志在返回前已落盘\n# 按 项目声明的命令日志落盘纪律 落盘\ncd <project_root> && mvn compile -DskipTests\n# BUILD FAILURE → test-executor 报告编译错误(附 grep 行),主 Agent Diagnose 修代码\n```\n\n### 5.5 环境故障分类(主 Agent Diagnose 用)\n\ntest-executor 报告环境异常时,主 Agent 按下表 Diagnose(systematic-debugging),禁止直接抛给用户:\n\n| 故障类型 | 现象 | 主 Agent Diagnose 路径 |\n|---------|------|----------------------|\n| 中间件未运行 | 探活命令连接失败 | 让 test-executor 启动 → 再探活 → 仍失败查进程/端口/日志 |\n| 端口冲突 | 服务启动报 \"port in use\" | test-executor 查 `lsof -i :{port}` → 杀旧进程或换端口(决策权在主 Agent) |\n| 副本集未初始化 | `rs.status()` 报未启用 | test-executor 执行 `rs.initiate()` 初始化 → 再探活 |\n| 服务启动超时 | 90s 内 health endpoint 不通 | test-executor 查 backend log(tail/grep ERROR) → 主 Agent Diagnose 启动失败根因 |\n| 配置缺失 | 配置文件缺 key | 主 Agent 读源码确认 → 补配置(写文件 = 主 Agent 做,非 test-executor) |\n\n**3 轮自主迭代仍不收敛** → 进入暂停条件,附完整诊断证据上升用户。\n\n## 6. 通用命令模板(按测试类型)\n\n> 各项目具体命令清单(路径、模块映射、特殊参数)由 dev-workflow 节点文件 + 项目依赖清单 提供,本节只给通用模板。**路径占位符说明**:`{project_root}` 项目根,`{service_dir}` 后端模块目录,`{e2e_runner}` E2E 执行脚本路径。\n\n### 6.1 E2E 测试(如有独立 runner)\n\n> 脚手架预置 E2E 工程骨架(`E2eTester/` + `项目声明的 E2E 入口`),详见项目根 `E2eTester/AGENTS.md`。AI 接入项目时自主完成工程适配(端口/探针/ApiRoutes;包名固定 com.e2e 无需改)。\n\n```bash\n# 按 项目声明的命令日志落盘纪律 落盘\nbash {e2e_runner} {target}\n# 退出码含义按 runner 约定(见 项目依赖清单 §E2E 运行器)\n```\n\n**常见执行场景**:\n- 全量: `bash {e2e_runner}`\n- 按模块: `bash {e2e_runner} <module>`\n- 按测试类: `bash {e2e_runner} <ClassName>` 或 `bash {e2e_runner} <ClassA> <ClassB>`\n\n### 6.2 Java 单测 / 静态分析\n\n```bash\n# 编译\n# 按 项目声明的命令日志落盘纪律 落盘\ncd {service_dir} && mvn compile\n\n# 静态分析(语法验证)\n# 按 项目声明的命令日志落盘纪律 落盘\ncd {service_dir} && mvn checkstyle:check pmd:check spotbugs:check\n\n# 全量单测\n# 按 项目声明的命令日志落盘纪律 落盘\ncd {service_dir} && mvn test\n\n# 按测试类\n# 按 项目声明的命令日志落盘纪律 落盘\ncd {service_dir} && mvn test -Dtest=FooServiceTest\n\n# 冒烟(验收归档·全量回归 集成验证,如项目用分组标记)\n# 按 项目声明的命令日志落盘纪律 落盘\ncd {service_dir} && mvn test -Dgroups=smoke\n```\n\n### 6.3 Python 单测(如适用)\n\n```bash\n# 按 项目声明的命令日志落盘纪律 落盘\ncd {project_root} && pytest tests/\n```\n\n### 6.4 runner 输出格式(通用示例)\n\n```\n=== Module | class granularity ===\n FooE2eTest PASS Tests run: 10, Failures: 0 <日志路径>\n BarE2eTest FAIL Tests run: 6, Failures: 2 <日志路径>\nModule: X total | X-1 pass | 1 fail\n\nSummary: P pass | F fail\nFailed targets: BarE2eTest RateLimitIT\nFailed logs:\n BarE2eTest -> <日志路径>\n```\n\n**输出状态含义**:\n- `PASS` — 一次性通过\n- `FAIL` — 测试失败\n- `TIMEOUT (Ns)` — 超时被 kill,日志中无测试结果\n- `START` — 并行模式下该类已启动,后面的日志名可直接查看实时输出\n- `... running` — 并行模式心跳,显示仍在运行的类和已运行秒数\n\n## 7. 主会话调用 prompt 模板\n\n> 主会话在各测试节点触发时,按以下模板委派 test-executor。本 skill 已固化绑定于 test-executor agent,主会话无需在 prompt 中声明 skill 清单。\n\n### 7.1 通用调用骨架\n\n委派 test-executor subagent,prompt 模板:\n\n```text\n## TASK\n执行 {测试类型: E2E / mvn / pytest / 静态分析} 测试,范围: {全量 | 模块名 | 类名}。\n\n## CONTEXT\n- 项目根: {project_root}/\n- session code: {session-code}(用于 log 文件命名)\n- 测试目标: {具体命令清单,从 dev-workflow 节点文件 + 项目依赖清单 复制}\n\n## MUST DO\n1. 按 dev-workflow-tester skill 「三阶段工作流」 三阶段工作流执行\n2. 自主环境准备(「自主环境准备」,按 项目依赖清单 探活)\n3. 测试执行 阶段执行指定的 target\n4. 信息收集 阶段 按要求 + 按 「Final Output Contract」 Final Output Contract 生成最终响应\n\n## MUST NOT DO\n- 不编辑任何文件(permission 已 deny)\n- 不解释失败原因(主会话负责 Diagnose)\n- 不要求用户启动服务(本 skill 「自主环境准备」 自主环境准备)\n- 不返回摘要响应(详见 「摘要响应禁止」)\n```\n\n### 7.2 各场景特化字段(替换通用骨架的 CONTEXT 段)\n\n**E2E(E2E 开发 / 验收归档,如项目有独立 runner)**:\n```\n- 测试范围: {全量 | 模块名 | 类名}\n- 命令: bash {e2e_runner} {target}(按 项目声明的命令日志落盘纪律 落盘)\n```\n\n**单测(单测开发 / 验收归档)**:\n```\n- 测试范围: {全量 | 类名 | smoke group}\n- 命令: cd {service_dir} && mvn test [-Dtest={ClassName}] [-Dgroups=smoke](按 项目声明的命令日志落盘纪律 落盘)\n```\n\n**框架测试(pytest 等)**:\n```\n- 测试层级: {L1 unit | L2 component | L3 scene | L4 integration}\n- 命令清单: 从 dev-workflow 节点文件复制(exit.md / track-ut-dev.md)\n```\n\n### 7.3 主会话调用纪律\n\n- **委托 ≠ 甩锅用户**:本机所有依赖服务由 test-executor 启动,禁止要求用户启动\n- **循环上限**:单个测试范围最多循环 **3 次**(启发式阈值),超过 → STOP 质疑架构,向用户报告失败详情\n- **主 Agent 不亲自跑 CLI 测试命令**:必须委托 test-executor;主 Agent 只做 Diagnose + 修代码 + 重跑决策\n- **环境准备是自主环境准备阶段的内嵌任务**:不是独立节点,每次分派 test-executor 都跑(幂等检查)\n\n## 8. 边界与禁止(HARD GATE)\n\n| 禁止项 | 理由 |\n|--------|------|\n| ❌ 编辑任何文件(生产代码、测试代码、配置、文档) | test-executor 只报事实,不修代码;permission.edit/write 已 deny |\n| ❌ 解释失败原因 / 给出修复建议 | Diagnose + 修代码是主会话职责 |\n| ❌ 再委派其他 subagent | 防止无限委托 |\n| ❌ 要求用户启动本机服务(违反本 skill 「自主环境准备」) | 所有本机依赖由 test-executor 自主完成 |\n| ❌ 把 runner 的\"请确认环境\"错误消息转给用户 | 该提示是给人类兜底的,AI 看到环境失败必须自主启动依赖 |\n| ❌ 通过降并发、跳过测试、放宽断言、重启服务、延长等待来\"制造通过\" | 掩盖真实缺陷,最终把风险留到线上 |\n| ❌ 同步命令后 sleep(HARD GATE,详见 项目声明的命令日志落盘纪律) | `mvn ... > log; sleep N; tail log` 是反模式 |\n| ❌ 裸跑全量测试(不走项目 runner / 无隔离机制) | 必须通过 runner 保证并发隔离 + 心跳 + 失败定位(如项目有) |\n| ❌ 在未恢复中间件的情况下跑其他测试 | 容灾测试后必须确认中间件已恢复 |\n| ❌ 主会话在未加载 系统化根因排查流程 时直接修代码 | 主会话纪律;test-executor 不修代码所以无关 |\n\n## 9. 与其他 subagent 的协作\n\n| Agent | 职责 | 与 test-executor 关系 |\n|-------|------|--------------|\n| 主会话 | 调度/设计/编码/Diagnose/修代码/触发测试节点 | 调用 test-executor(每测试节点 1+ 次) |\n| deep (Coder) | 编码实现 | 产出代码 → test-executor 跑测试 → 主会话 Diagnose |\n| **test-executor** | 测试执行 + 自主环境准备 + 结构化报告 | 接收测试委托,不主动调用其他 agent |\n| flow-executor | 流程归档(每节点) | 接收 test-executor 测试结果(经主会话整理)→ 写单测开发 / E2E开发 / 验收归档 节点记录 |\n| 对应场景 reviewer | 各节点审查 | 与 test-executor 无直接交互 |\n| visual-reviewer | 视觉验证 | 与 test-executor 无直接交互(不同维度验证) |\n\n## 10. 故障处理\n\n| 场景 | test-executor 处理 |\n|------|-----------|\n| 中间件探活失败(连接拒绝) | 按 项目依赖清单 自主启动 → 再探活;3 轮仍失败 → 报告卡点(含已尝试命令 + 错误),不抛给用户 |\n| 被测服务启动超时(90s health endpoint 不通) | 查 backend log(tail/grep ERROR)→ 报告启动失败根因(log 路径 + ERROR 行) |\n| runner 返回环境失败 exit code | 按 「自主环境准备」 自主启动依赖后重跑;不抛给用户 |\n| 编译失败(BUILD FAILURE) | 报告编译错误(grep `[ERROR]` 行 + log 路径);不 Diagnose 原因 |\n| 测试类超时(TIMEOUT) | 在报告中标注 `TIMEOUT (Ns)`,附 log 路径;不擅自调超时 |\n| 并发失败(多类同时挂) | 按业务 bug 或测试隔离缺陷处理报告;禁止降并发掩盖 |\n| 容灾测试后中间件未恢复 | 报告中间件状态;禁止继续跑其他测试 |\n\n> **铁律**:test-executor 遇到任何不确定情况,**报告事实 + 卡点结论**,不自行猜测、修复或抛给用户。test-executor 是执行者不是决策者。",
|
|
227
|
+
"category": "process",
|
|
228
|
+
"version": "4.2.4",
|
|
229
|
+
"references": [],
|
|
230
|
+
"scope": "global"
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"name": "ui-constraints",
|
|
234
|
+
"description": "UI 前端约束 Skill — 实现规范 + 验证硬门控",
|
|
235
|
+
"content": "# UI 前端约束 (ui-constraints)\n\n> **此 Skill 是编排器,实际约束由以下 skill 提供。**\n> 本文件负责:列出所有约束源、注入时机、Agent 映射。\n\n## 约束体系(4 层)\n\n### Layer A: 视觉哲学(Step ① 注入一次)\n\n**Skill**: `frontend-philosophy`\n\n定义整体视觉基调。注入时机:Step ① 设计构思。\n\n5 Pillars:\n- 布局清晰度 / 视觉层级 / 色彩和谐 / 交互反馈 / 动效克制\n\n---\n\n### Layer B: 设计一致性(Step ①③④ 持续注入)\n\n**Skill**: `frontend-consistency`\n\n**CRITICAL 约束 (8 条 — 强制规则)**:\n\n| # | 约束 | 级别 |\n|-----|---------------------------------------------|----------|\n| C1 | React + TypeScript + Tailwind + shadcn/ui 必须使用 | CRITICAL |\n| C2 | Tailwind Class 必须严格按设计 Token 映射表(不可随意类名) | CRITICAL |\n| C3 | shadcn/ui 组件不可 fork 修改(使用 className + variant) | CRITICAL |\n| C4 | 间距/字号/圆角/阴影必须使用 Token 定义(无魔法值) | CRITICAL |\n| C5 | 颜色使用 CSS 变量引用(`var(--primary)`),不直接写 hex/rgb | CRITICAL |\n| C6 | 响应式遵循 Tailwind breakpoint 规范(sm/md/lg/xl/2xl) | CRITICAL |\n| C7 | form/button/dialog 统一使用 shadcn/ui 组件(禁止裸写) | CRITICAL |\n| C8 | Page 组件必须定义 Metadata(title + description) | CRITICAL |\n\n---\n\n### Layer C: 实现规范(Step ③④ 注入)\n\n**Skill**: `ui-implementation`\n\n**3-Pass 生成协议**:\n\n| Pass | 内容 | 验证 |\n|------|----------------------------|---------------------------------|\n| 1 | 完整布局(所有元素) | 结构正确 |\n| 2 | 设计细节(Token 精确匹配) | 样式匹配 Token 表 |\n| 3 | 交互逻辑(状态+事件) | 所有交互路径可用 |\n\n**7 状态模型**(每个页面/组件必须处理):\n\n1. Loading (加载中)\n2. Empty (空数据)\n3. Error (错误,含 retry)\n4. Unauthorized (401/403)\n5. Edge Cases (边界,如单条数据/超长文本)\n6. Ideal (理想态,完美数据)\n7. Overflow (数据溢出,分页/滚动)\n\n**组件模式**:\n\n| 模式 | 要求 |\n|----------------|----------------------------------------------------------------|\n| 表单 (Form) | react-hook-form + zod 校验 + shadcn/ui Form + 实时校验反馈 |\n| 对话框 (Dialog) | shadcn/ui Dialog + 焦点管理 + Escape 关闭 + 数据不丢失确认 |\n| 反馈 (Toast) | shadcn/ui Sonner + 成功/错误/加载状态 + 自动消失 |\n\n**10 反模式(禁止)**:\n\n1. 禁止裸写原生 HTML 表单(必须 react-hook-form + shadcn/ui)\n2. 禁止 fetch/axios 直接写在组件内(必须 useQuery/useMutation)\n3. 禁止 useState 管理表单状态(必须 react-hook-form)\n4. 禁止手动管理 loading 状态(必须 useQuery isLoading)\n5. 禁止手动管理 error 状态(必须 useQuery isError + ErrorBoundary)\n6. 禁止跳过 7 状态模型\n7. 禁止 inline style(必须 Tailwind class)\n8. 禁止自定义 CSS 文件(必须 Tailwind class)\n9. 禁止跳过 Pass 1-2-3 生成协议\n10. 禁止 UI 完成后跳过 ui-verify HARD GATE\n\n---\n\n### Layer D: 验证硬门控(Step ⑥⑧⑨ 注入)\n\n**Skill**: `ui-verify`\n\n**HARD GATE** — 验证不通过不得提交。\n\n**Playwright MCP E2E 验证 Checklist (CRITICAL)**:\n\n| # | 验证项 | 工具 |\n|-----|--------------------------------|--------------------|\n| V1 | 页面正确渲染(无白屏/报错) | Playwright MCP |\n| V2 | 7 状态模型全部覆盖 | Playwright MCP |\n| V3 | CRUD 全部操作可用 | Playwright MCP |\n| V4 | 表单校验正确触发 | Playwright MCP |\n| V5 | 响应式布局(sm/md/lg/xl)正常 | Playwright MCP |\n| V6 | 颜色/间距匹配设计 Token | 视觉对照 |\n\n**启动脚本约束**:\n```json\n{\n \"scripts\": {\n \"dev\": \"next dev\",\n \"build\": \"next build\",\n \"lint\": \"next lint\",\n \"typecheck\": \"tsc --noEmit\",\n \"test:e2e\": \"playwright test\"\n }\n}\n```\n\n必须先启动 `npm run dev`,启动成功后再运行 Playwright MCP 测试。\n\n---\n\n## 注入矩阵\n\n| Step | 注入层 | Skills 组合 | Agent |\n|------|----------|----------------------------------------------------------------|--------------------------|\n| ① | A+B | frontend-philosophy + frontend-consistency | plan → 对应 reviewer |\n| ③ | B+C | frontend-consistency + ui-implementation | visual-engineering |\n| ④ | B+C | frontend-consistency + ui-implementation | visual-engineering |\n| ⑥ | D | ui-verify (Playwright MCP) | visual-engineering |\n| ⑧ | D (GATE) | ui-verify (HARD GATE 全量) | visual-engineering |\n| ⑨ | B+C+D | 全层对照验收 | 对应 reviewer + 主会话 |\n",
|
|
236
|
+
"category": "process",
|
|
237
|
+
"version": "1.1.1",
|
|
238
|
+
"references": [],
|
|
239
|
+
"scope": "global"
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"name": "ui-implementation",
|
|
243
|
+
"description": "UI 交互实现规范",
|
|
244
|
+
"content": "# UI 交互实现规范\n\nUI 交互逻辑、状态管理和边界处理的强制规则。与 `frontend-consistency`(代码风格)和 `frontend-philosophy`(视觉设计)互补。\n本 skill 只管**交互行为**:组件该有哪些状态、怎么转换、怎么处理边界。\n\n## 角色边界\n\n| 本 skill 覆盖 | 不覆盖(已有 skill) |\n| ---------------------------------------- | ------------------------------------------------- |\n| 状态模型(loading/error/empty/disabled) | 视觉设计、排版、色彩(frontend-philosophy) |\n| 表单验证逻辑、提交模式 | CSS 规范、shadcn 组件选择(frontend-consistency) |\n| 弹窗焦点管理、键盘交互 | 防御式数据流(code-philosophy) |\n| 可访问性交互要求 | 构建工具、项目结构(ui/AGENTS.md) |\n| 3-pass 生成协议 | — |\n\n## 1. 强制状态模型\n\n每个有数据交互的组件**编码前必须声明状态表**:\n\n| 状态 | 必须处理 | 表现形式 |\n| ---------- | -------- | --------------------------------- |\n| `idle` | ✅ | 初始态,等待用户操作 |\n| `loading` | ✅ | `Skeleton` 占位(匹配最终布局结构) |\n| `success` | ✅ | 正常数据展示 |\n| `empty` | ✅ | 引导文案 + CTA 按钮(禁止留白) |\n| `error` | ✅ | 错误信息 + 重试按钮 |\n| `submitting` | 表单必须 | 按钮 disabled + loading spinner |\n| `deleting` | 删除必须 | AlertDialog 按钮 disabled |\n\n**状态转换规则**:\n- `loading` 只能单向转到 `success` / `error` / `empty`\n- `error` 必须提供 `onRetry` 回到 `loading`\n- `submitting` 期间所有表单控件 disabled,按钮显示加载状态\n- 状态变量命名:`loading` / `submitting` / `deleting`(与项目现有代码一致)\n\n## 2. 数据展示模式\n\n### 列表/表格\n\n```tsx\n// 状态渲染顺序(强制)\n{loading ? <Skeleton /> : data.length === 0 ? <Empty /> : <Table />}\n```\n\n**Skeleton 规则**:\n- 行数:3 行占位\n- 列数:匹配实际列数\n- 尺寸:`<Skeleton className=\"h-4 w-full\" />`\n\n**空状态规则**:\n- `<TableCell colSpan={列数} className=\"h-24 text-center text-muted-foreground\">`\n- 必须有引导文案,禁止空白页面\n- 有创建操作时显示 CTA 按钮\n\n### 详情页\n\n- 加载中:整个内容区域用 Skeleton 卡片占位\n- 数据不存在:显示 404 提示 + 返回按钮\n- 部分数据缺失:用 `\"—\"` 占位,禁止空白单元格\n\n## 3. 表单模式\n\n### 技术栈(强制)\n\n`react-hook-form` + `zod` + `@hookform/resolvers/zod` + shadcn `<Form>` / `<FormField>` / `<FormItem>`\n\n### 表单实现规则\n\n1. **Schema 先行**:表单 schema 在组件外定义,`z.object({...})` 声明所有字段和校验规则\n2. **每字段验证**:校验消息用中文,`z.string().min(1, \"XX不能为空\")`\n3. **默认值**:`form.reset()` 时必须传入完整默认值,不允许 partial\n4. **新建/编辑复用**:同一个 Dialog + Form,通过 `editingItem` 状态区分\n5. **提交时 disabled**:`submitting` 状态下 `Button disabled={submitting}`\n6. **成功后刷新**:`onSubmit` 成功 → `setDialogOpen(false)` + `loadData()`\n7. **错误处理**:`catch` 中 `toast.error(error.displayMsg || \"操作失败\")`(ApiError 优先取 displayMsg)\n\n### 数值输入\n\n使用 `useNumericField` hook(项目已有),防止非数字输入。\n\n## 4. 弹窗模式\n\n### Dialog(新建/编辑)\n\n```tsx\n// 开关控制\nconst [dialogOpen, setDialogOpen] = useState(false)\n<Dialog open={dialogOpen} onOpenChange={setDialogOpen}>\n```\n\n- `onOpenChange` 交给 shadcn Dialog 处理(支持 Escape 关闭、点击遮罩关闭)\n- 打开时 `form.reset()` 到对应默认值\n- 提交中不允许关闭:`DialogClose` 不单独控制,靠 `submitting` 状态\n\n### AlertDialog(删除确认)\n\n- 删除前必须弹出确认\n- 确认按钮 `disabled={deleting}`\n- 取消按钮始终可用\n- 确认操作后:`setDeleteDialogOpen(false)` + `setDeletingItem(null)` + `loadData()`\n\n### 焦点管理(Radix 已内置)\n\nshadcn Dialog/AlertDialog 基于 Radix,已自动处理:\n- 打开时焦点移入弹窗\n- Escape 关闭\n- 关闭后焦点恢复到触发按钮\n\n**禁止**:手动管理焦点(如 `autoFocus` ref),除非 Radix 无法覆盖的自定义场景。\n\n## 5. 反馈模式\n\n### Toast(sonner)\n\n| 场景 | 调用 |\n| ---------- | ------------------------------------------- |\n| 创建成功 | `toast.success(\"XX 创建成功\")` |\n| 更新成功 | `toast.success(\"XX 更新成功\")` |\n| 删除成功 | `toast.success(\"XX 删除成功\")` |\n| API 错误 | `toast.error(error.displayMsg \\|\\| \"操作失败\")` |\n| 网络错误 | `toast.error(\"网络错误,请重试\")` |\n\n### 错误处理模式\n\n```tsx\ntry {\n setSubmitting(true)\n await apiCall(data)\n toast.success(\"操作成功\")\n setDialogOpen(false)\n loadData()\n} catch (error) {\n if (error instanceof ApiError) {\n toast.error(error.displayMsg || \"操作失败\")\n } else {\n toast.error(\"操作失败\")\n }\n} finally {\n setSubmitting(false)\n}\n```\n\n**规则**:`finally` 中重置 loading 状态,禁止在 success/error 分支中遗漏。\n\n## 6. 可访问性检查清单\n\n| 层级 | 规则 | 实现方式 |\n| --------- | --------------------------------------- | -------------------------------------- |\n| 语义 HTML | 交互元素用 `<button>`,禁止 `div+onClick` | shadcn 组件已保证 |\n| ARIA | 动态内容用 `aria-live` | `<sonner>` toast 已内置 |\n| 键盘 | Tab 导航、Enter/Space 激活、Escape 关闭 | Radix 基元已内置 |\n| 焦点 | 弹窗内焦点陷阱、关闭后恢复 | Radix Dialog 已内置 |\n| 动效 | 尊重 `prefers-reduced-motion` | Tailwind `motion-safe:` / `motion-reduce:` |\n\n**关键**:使用 shadcn/Radix 组件时,上述大部分已自动满足。自定义交互时必须手动实现。\n\n## 7. 禁止反模式\n\n| # | 反模式 | 正确做法 |\n| -- | -------------------------- | -------------------------------- |\n| 1 | `div onClick` 做按钮 | `<Button>` 或 `<button>` |\n| 2 | 缺 loading 状态 | Skeleton 占位 |\n| 3 | 缺 empty 状态 | 引导文案 + CTA |\n| 4 | 缺 error 状态 + 重试 | `toast.error` + 重试按钮 |\n| 5 | 表单提交无 disabled | `disabled={submitting}` |\n| 6 | 删除无确认弹窗 | AlertDialog 二次确认 |\n| 7 | 通用 Spinner 代替 Skeleton | Skeleton 匹配最终布局 |\n| 8 | `finally` 中遗漏 reset | `finally { setSubmitting(false) }` |\n| 9 | 表单 reset 不传完整默认值 | `form.reset({ 全部字段 })` |\n| 10 | 硬编码列数 colSpan | 用常量或计算列数 |\n\n## 8. AI 生成协议(3-Pass)\n\n每个组件按 3 轮迭代,每轮有明确交付物:\n\n### Pass 1:结构 + Happy Path\n- 组件 Props 接口\n- 状态变量声明(`loading` / `submitting` / `dialogOpen` 等)\n- 数据加载 `useEffect` + API 调用\n- 基础 JSX 结构(只有 success 状态渲染)\n\n### Pass 2:边界状态\n- `<Skeleton>` loading 占位\n- `data.length === 0` 空状态\n- `catch` 错误处理 + `toast.error`\n- 表单 `disabled={submitting}`\n- 删除 AlertDialog + `disabled={deleting}`\n\n### Pass 3:精细交互\n- 状态切换反馈(`handleToggleActive` 模式)\n- 文本截断 + Tooltip(`line-clamp-2` + `TooltipProvider`)\n- 数值输入防护(`useNumericField`)\n- 长文本占位符(`\"—\"` 替代空白)\n\n**前置条件**:编码前必须确定该组件需要的状态表(参考 「状态表」),在注释中声明。\n\n## 9. 状态切换模式(Toggle)\n\n无需弹窗确认的即时切换(如启用/禁用):\n\n```tsx\nasync function handleToggle(item: Item) {\n try {\n await api.update(item.id, { ...item, enabled: !item.enabled })\n loadData() // 重新加载列表\n } catch (error) {\n if (error instanceof ApiError) {\n toast.error(error.displayMsg || \"切换失败\")\n }\n }\n}\n```\n\n**规则**:直接调用 API → 成功刷新列表 → 失败 toast 提示。不需要 Optimistic Update(管理控制台场景刷新代价低)。\n",
|
|
245
|
+
"category": "process",
|
|
246
|
+
"version": "1.0.0",
|
|
247
|
+
"references": [],
|
|
248
|
+
"scope": "global"
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"name": "multimodal-vision",
|
|
252
|
+
"description": "多模态视觉委托。主力模型通过 multimodal-looker subagent 分析图片/视频/PDF(OCR/图表/UI 验收)。",
|
|
253
|
+
"content": "# 多模态视觉委托\n\n> 主力模型不具备多模态能力时,通过本 skill 委托给 visual-reviewer(siming agent:model=vision-worker)\n>\n> **本 skill 不参与自动发现**,由项目 AGENTS 纪律文件的多模态委托规则触发主力模型主动加载。\n\n## 适用场景\n\n主力模型遇到以下场景时,**必须**加载本 skill 并委托 visual-reviewer:\n\n| 场景 | 典型触发 | 示例 |\n|------|---------|------|\n| **截图/UI 分析** | 用户要求\"看截图\"、\"分析界面\" | 游戏截图、Web 页面、App 界面布局审查 |\n| **OCR 文字识别** | 从图片提取文字 | 截图中的报错、手写笔记、扫描件 |\n| **图表理解** | 分析图表数据 | 柱状图/折线图/饼图数值提取 |\n| **文档问答** | 理解文档截图 | 合同、说明书、设计稿截图 |\n| **视觉对比** | 比较多张图片 | before/after 对比、设计稿 vs 实现 diff |\n| **视频理解** | 分析视频内容 | 录屏分析、操作流程审查 |\n| **PDF 内容提取** | 从 PDF 提取信息 | ⚠️ 需先将 PDF 转为图片再传入 |\n\n## mimo-v2.5 模型能力\n\n| 维度 | 规格 |\n|------|------|\n| **模型** | xiaomi/mimo-v2.5(310B MoE,15B 激活)|\n| **输入模态** | 文本 + 图片 + 视频 + 音频 |\n| **输出** | 纯文本(不支持图片/视频生成)|\n| **上下文窗口** | 1,048,576 tokens(1M)|\n| **最大输出** | 131,072 tokens |\n| **图片格式** | JPEG, PNG, GIF, WebP, BMP |\n| **图片限制** | 单张 ≤50MB,最大 ~4K(8,388,608 像素)|\n| **视频格式** | MP4, MOV, AVI, WMV |\n| **音频格式** | WAV, MP3 |\n\n### 强项(benchmark 参考)\n\n- **GUI 界面理解与定位** — ScreenSpot 89.8%\n- **OCR** — OCRBench 86.5%\n- **图表分析** — CharXiv RQ 81.0\n- **文档理解** — DocVQA 95.2%\n- **视觉推理** — MMMU-Pro 77.9\n- **视频理解** — Video-MME 87.7\n\n### 不支持 / 需预处理\n\n| 限制 | 处理方式 |\n|------|---------|\n| ❌ PDF 原生输入 | 需先转为图片(每页一张 PNG/JPEG),再按多图委托 |\n| ❌ 图片生成 | 仅输出文本分析结果,不能生成图片 |\n| ❌ 本地文件直传 | 需公网 URL 或 Base64 编码(`data:image/jpeg;base64,...`) |\n\n## 委托方式\n\n### 标准委托模板(单图分析)\n\n委派 visual-reviewer subagent(read-only),prompt 模板:\n\n```\n[TASK]: 分析这张 UI 截图的布局问题\n[IMAGE]: /path/to/screenshot.png\n[FOCUS]: 元素对齐、间距一致性、层级关系、文字可读性\n[OUTPUT FORMAT]: 问题清单 + 严重程度(Critical/Major/Minor) + 修复建议\n```\n```\n\n### 多图对比模板\n\n委派 visual-reviewer subagent(read-only),prompt 模板:\n\n```\n[TASK]: 对比设计稿和实现截图的差异\n[IMAGE 1 (设计稿)]: /path/to/design.png\n[IMAGE 2 (实现)]: /path/to/implementation.png\n[FOCUS]: 布局变化、颜色色差、新增/缺失元素\n[OUTPUT]: 差异清单表格,含一致性评分(0-100)\n```\n\n### PDF 处理模板\n\nPDF 需先转图片,再委托多图分析:\n\n```bash\n# 将 PDF 每页转为 PNG(需安装 poppler: brew install poppler)\npdftoppm -png -r 200 document.pdf page\n# 生成 page-1.png, page-2.png, ...\n```\n\n然后按多图委托逐页或批量分析。\n\n## Prompt 最佳实践\n\n### ✅ 高质量 Prompt(产出精确)\n\n- 明确分析维度:\"检查按钮对齐、文字对比度、图标清晰度\"\n- 给出上下文:\"这是登录页面,目标是验证表单布局是否符合设计规范\"\n- 指定输出格式:\"输出 JSON: {issues: [{severity, location, description}]}\"\n- 限制分析范围:\"只关注顶部导航栏区域\"\n\n### ❌ 低质量 Prompt(产出模糊)\n\n- \"看看这张图\" — 太泛,结果不可控\n- \"这好看吗\" — 主观,无法结构化\n- \"有什么问题\" — 无方向,遗漏关键维度\n\n## 常见场景 Prompt 库\n\n### 1. UI 布局审查\n\n```\n[TASK]: 审查 UI 截图的布局质量\n[FOCUS]: 元素对齐、间距一致性、层级关系、文字可读性\n[SCORING]: 按 LAYOUT(40%)/COLOR(20%)/ASSET(20%)/PERF(20%) 四维评分,总分 100\n[OUTPUT]: 各维度得分 + 具体问题清单 + 改进建议\n```\n\n### 2. 报错截图 OCR + 诊断\n\n```\n[TASK]: 提取截图中的错误信息并诊断\n[STEP 1]: OCR 提取所有可见文字\n[STEP 2]: 识别错误类型(编译错误/运行时异常/UI 问题)\n[STEP 3]: 给出可能原因和修复方向\n[OUTPUT]: {error_text, error_type, probable_cause, fix_direction}\n```\n\n### 3. 游戏截图验收(通用,非 Godot 专属)\n\n```\n[TASK]: 审查游戏截图的画面质量和功能完整性\n[FOCUS]: UI 元素渲染、文字显示、色彩还原、画面撕裂/卡顿痕迹\n[OUTPUT]: 问题清单 + 严重程度分级\n```\n\n### 4. 设计稿对比实现\n\n```\n[TASK]: 对比设计稿和实现截图的像素级一致性\n[IMAGE 1 (设计稿)]: <路径>\n[IMAGE 2 (实现)]: <路径>\n[FOCUS]: 布局偏差、颜色色差、字体差异、间距偏差\n[OUTPUT]: 差异清单 + 一致性评分 (0-100)\n```\n\n## 与开发流程各视觉节点的关系\n\n本 skill 是**所有视觉流程的底层多模态能力提供者**。以下 DAG 节点内部调用 visual-reviewer,均依赖本 skill 提供的多模态委托能力:\n\n| DAG 节点 | 文件 | 视觉职责 | 模型 |\n|----------|------|---------|------|\n| **UI 视觉验证**(UI 轨道)| `track-visual.md` | Playwright MCP 截图 → 5 维度审核(状态完整性/可访问性/组件标准/边界场景/交互质量)| mimo-v2.5 |\n| **E01 集成回归**(Exit)| `exit-regression.md` | 视觉 diff ≤ 5%、元素位移 ≤ 2px、CSS 断点无退化 | mimo-v2.5 |\n| **E02 最终验收**(Exit)| `exit-acceptance.md` | 截图矩阵 + UI 4 维评分,HARD GATE ≥ 80 | mimo-v2.5 |\n\n### 视觉验收与本 skill 的关系\n\n本 skill 是**底层多模态能力提供者**。项目视觉验收流程(截图矩阵 + 评分标准 + 修复循环)内部调用 visual-reviewer 执行实际的截图分析。即:\n\n```\n项目视觉验收(专属流程封装)\n └── 内部调用 visual-reviewer → 本 skill 提供多模态能力\n```\n\n> **调用规则**:\n> - UI 项目视觉验证(UI 视觉验证节点)→ 加载 `ui-verify` + 本 skill\n> - 其他通用多模态场景(截图分析/PDF/OCR/图表)→ 直接加载本 skill\n\n## 参考资料\n\n- [MiMo-V2.5 官方页面](https://mimo.xiaomi.com/mimo-v2-5/)\n- [HuggingFace 模型卡](https://huggingface.co/XiaomiMiMo/MiMo-V2.5)\n- [API 文档](https://platform.xiaomimimo.com/docs/en-US/)\n",
|
|
254
|
+
"category": "tooling",
|
|
255
|
+
"version": "1.1.1",
|
|
256
|
+
"references": [],
|
|
257
|
+
"scope": "global"
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"name": "config-java",
|
|
261
|
+
"description": "",
|
|
262
|
+
"content": "# Java 后端轨道配置 (config-java)\n\n> 到达各 DAG 节点时,主 Agent 按本表加载对应 Agent + Skills。本文件为运行时参考,不替代各 track-*.md 的 HARD GATE 约束。主会话委托 subagent 时,从项目 AGENTS.md 读栈信息(文件约定/栈特定约束/配置管理)拼接注入。\n\n---\n\n## 一、Per-Node Agent 映射表(siming 12-agent 体系,skill 固化绑定)\n\n> 到达各 DAG 节点时按本表指名委派。agent 的 boundSkills 已固化,主会话无需在 prompt 中声明 skill 清单。\n\n| 节点 | 角色 | Agent | 验证方式 |\n|------|------|-------|---------|\n| 后端编码 | Implementer | 主会话(编码不委派) | code-reviewer 审分层架构 + REST/MVC 规范 + 持久层规范(标准见项目 AGENTS.md 与 java-constraints) |\n| 后端编码 | Verifier | code-reviewer | 独立上下文,零偏差审核 |\n| 单测设计 | Designer | 主会话 | test-reviewer 审核覆盖度 |\n| 单测开发 | Coder | 主会话 | 单测全量 100% PASS(执行委派 test-executor;命令见项目 AGENTS.md COMMANDS) |\n| E2E 设计 | Designer | 主会话 | test-reviewer 审核覆盖度 |\n| E2E 开发 | Coder | 主会话 | 委派 test-executor 跑项目声明的 E2E 入口全部通过 |\n| 验收归档 | Executor | test-executor | 全量回归:自主环境准备 + E2E + 单测 + 信息收集 |\n| 验收归档 | Analyst | regression-reviewer | 不变量验证:分析回归报告 + 不变量 + Diff(只读分析) |\n| 验收归档 | Reviewer | 主会话 | 验收确认:事实对照 |\n| 验收归档 | Archiver | flow-executor | 归档:siming 命令写节点记录 + advance + 项目 git 杂活 |\n\n> **Worker/Verifier 分离(HARD GATE)**:Worker 和 Verifier 必须是不同 session。Verifier 不继承 Worker 上下文,只读审核不改代码。\n>\n> **java-constraints skill 按层级注入**:编码规范/架构约束/E2E 规范打包在 java-constraints skill(Layer A/B/C),主会话编码时加载对齐。\n## 二、4 层验证链触发点\n\n| 验证层 | 名称 | 触发时机 | 执行方式 |\n|--------|------|---------|---------|\n| 语法验证 | LSP diagnostics | 后端编码 PostToolUse hooks | 静态分析(工具/命令见项目 AGENTS.md COMMANDS) |\n| 语义验证 | Verifier(code-reviewer) | 后端编码完成后 | `arch-review` → Layer B 抽象约束审核;code-reviewer 独立 session |\n| 集成验证 | 冒烟测试 | 验收归档·全量回归开始 | 冒烟测试(命令见项目 AGENTS.md COMMANDS) |\n| 回归验证·后端单测 | 全量单测回归 | 验收归档·全量回归完成 | 全量单测回归(命令见项目 AGENTS.md COMMANDS) |\n| 回归验证·E2E | E2E 回归 | 验收归档·全量回归完成 | 项目声明的 E2E 入口(E2eTester 脚手架标配工程,打真实部署服务) |\n\n> **回归验证·后端单测/E2E 分离原则**:单测在后端项目内(按项目测试框架,见项目 AGENTS.md「测试范式」),E2E 在 E2eTester 独立项目(脚手架标配,打真实部署服务)。两项目平级,命令分开执行。\n> 视觉验证不适用于 Java 后端轨道,跳过。\n\n---\n\n## 三、文件约定\n\n> **文件约定(包结构/分层模型/各层命名与基类/响应包装类型/DTO 命名/异常处理等)是项目特定信息,由项目 AGENTS.md「文件约定」承载(接入项目时 AI 探测填)。**\n> 主会话编码时直接读取项目 AGENTS.md「文件约定」等三节对齐栈信息(见 `track-code.md`「编码自律约束段」).\n\n\n## 四、构建命令\n\n> **CLI 日志落盘(HARD GATE)**:所有构建/测试/E2E 命令必须按 项目声明的命令日志落盘纪律(若有) 落盘。\n\n### 命令来源\n\n> 具体 build/test/lint/run 命令是项目特定信息,**见项目 AGENTS.md「COMMANDS」**(接入项目时 AI 探测填,含全量/单类/smoke/编译/静态分析/启动/E2E 等变体)。本节只描述执行模式与落盘纪律。\n\n### 执行模式(测试执行 = 委派 test-executor,无条件)\n\n> 适用节点:单测开发、E2E 开发、验收归档(集成回归+验收)、任意跑测试的时机。\n> 对应 项目 AGENTS 编排文件.md「测试执行 HARD GATE」。\n\n**唯一规则:所有测试执行 → 委派 test-executor,无例外。** 主会话禁止亲自跑测试命令(`mvn test` / `vitest` / `pytest` / 任何含断言的验证脚本)。命令会触发测试(含 `mvn install`/`verify`/`package`,或 `npm run build` 带 prebuild 钩子)→ 同样 委派 test-executor;纯编译/构建(`mvn compile` / `tsc` / `npm run build` 无测试钩子)→ 主会话直接执行。\n\n| 角色 | 职责 |\n|------|------|\n| test-executor | 执行所有测试命令,返回结构化结果(Final Output Contract) |\n| 主会话 | 写测试代码 → 委派 test-executor 跑 → 接收结果 → Diagnose 修复 → 委派 test-executor 重跑 |\n| regression-reviewer | 审核回归结果(独立 session) |\n\n**分工纪律**:\n- test-executor 只报事实(PASS/FAIL/统计、log 关键行),**不解释原因、不改文件**\n- **委托 ≠ 甩锅用户**:本机所有服务依赖由 test-executor 自主拉起。test-executor 返回 FAIL → 主 Agent 走 系统化根因排查流程 自主 Diagnose → 修代码 → 再次委托 test-executor 重跑,全链路闭环\n- 完整流程模板(Apply→Diagnose→Iterate + test-executor 委托 prompt + 暂停条件)见 `exit.md`「全量回归」\n\n**test-executor 委托 prompt 骨架**(主 Agent 调度时套用):\n\n> `dev-workflow-tester` skill 已固化绑定于 test-executor agent,主会话无需在 prompt 中声明 skill 清单。Final Output Contract / 三阶段工作流 / 自主环境准备等约束已在 skill 内,主会话**无需**在 prompt 里重复。\n\n委派 test-executor subagent,prompt 骨架:\n\n```text\n[TASK] 跑下列命令并返回结构化结果(按 dev-workflow-tester skill「Final Output Contract」 输出)\n[CONTEXT] monorepo 根路径 + 自动 session-id(按 项目声明的命令日志落盘纪律(若有))\n[EXPECTED] 各命令 BUILD SUCCESS/FAILURE + Tests run 统计 + 失败用例清单\n[MUST DO] 命令逐条执行(命令取自项目 AGENTS.md COMMANDS)、按 项目声明的命令日志落盘纪律(若有) 落盘\n[MUST NOT DO] 不修改任何文件、不解释原因只报事实(skill 「责任边界」 已规定)\n```\n\n### 命令模板(落盘纪律,命令值取自项目 AGENTS.md COMMANDS)\n\n> 编译/构建命令主会话直接执行,按 项目声明的命令日志落盘纪律(若有) 落盘。测试命令 委派 test-executor(「测试执行一律委派 test-executor」纪律),test-executor 内部落盘。\n\n```bash\n# 编译(主会话直接执行,按 项目声明的命令日志落盘纪律(若有) 落盘)\n{构建命令-编译}\n\n# 静态分析(语法验证,主会话直接执行,按 项目声明的命令日志落盘纪律(若有) 落盘)\n{构建命令-静态分析}\n\n# 以下测试命令均 委派 test-executor(「测试执行一律委派 test-executor」纪律)\n# 单测全量 / 单测单类 / 冒烟测试 → 命令值见项目 AGENTS.md COMMANDS,test-executor 内部按 项目声明的命令日志落盘纪律(若有) 落盘\n```\n\n### E2E 测试(脚手架标配工程 `E2eTester/`,在 monorepo 根执行,委派 test-executor)\n\n> **E2E 工程**:E2E 模块的开发规范、分层架构、类命名、执行入口用法详见项目 E2E 测试规范文档(按项目声明)。\n\n> E2E 执行由 test-executor 完成(「测试执行一律委派 test-executor」纪律),test-executor 按三阶段执行(自主环境准备 → 项目声明的 E2E 入口 → Final Output Contract),日志按 项目声明的命令日志落盘纪律(若有) 落盘。\n\n> ⚠ E2E 工程由项目维护方管理。项目声明的 E2E 入口或工程不存在 → 跳过 E2E 命令,在节点记录 summary 标注「E2E 暂挂(原因)」。禁止绕过项目声明的执行入口裸跑构建验证命令。\n\n---\n\n## 五、Java 约束体系(3 层)\n\n| 约束层 | 名称 | 范围 | 注入节点 | 核心规则 |\n|--------|------|------|---------|---------|\n| Layer A | 代码约束 | 编码风格、代码哲学 5 Laws | 后端编码 | `code-philosophy` 5 Laws(Simplicity / DRY / Testability / Correctness / Maintainability) |\n| Layer B | 架构约束 | 分层架构、REST 规范、安全设计(抽象通用) | 后端编码, 验收归档 | 见下方速查(抽象原则,具体技术选型见项目 AGENTS.md) |\n| Layer C | E2E 约束 | API 测试规范、执行流程、覆盖率(E2eTester 脚手架标配) | 单测设计/E2E 开发, 验收归档 | E1-E7 规则(REST Assured DSL / 3 并发 / BaseE2eTest 继承) |\n\n### Layer B — 10 CRITICAL 架构约束清单(后端编码 code-reviewer 审核清单 + 主会话编码自律清单)\n\n> **前导(装配约定)**:本清单为**跨项目通用的抽象架构约束**(Java 后端行业最佳实践)。具体技术选型(响应类型、持久层工具、配置工具、测试库等)是项目特定信息,见项目 AGENTS.md。\n> 主会话编码时,**直接读取项目 AGENTS.md**(「文件约定」「栈特定约束」「配置管理」),与本表对齐后编码。\n\n| 编号 | 约束项 | 性质 | 说明 |\n|------|--------|------|------|\n| B1 | 分层隔离 | 抽象原则 | 遵循项目分层架构,禁止跨层调用(层结构/层名见项目 AGENTS.md「文件约定」) |\n| B2 | 统一响应格式 | 抽象原则 | 所有 API 统一响应包装(包装类型见项目 AGENTS.md「文件约定」) |\n| B3 | Bean Validation 校验注解 | 通用 | `@NotNull`, `@Size`, `@Email`, `@Valid` 在 Controller 入参激活(Jakarta Validation 行业标准) |\n| B4 | API 文档注解 | 按项目 | 公开 API 应有文档注解(如项目使用 API 文档工具,具体见项目 AGENTS.md) |\n| B5 | 事务管理 | 通用 | 写操作使用 `@Transactional`,只读使用 `@Transactional(readOnly = true)`(Spring 行业标准) |\n| B6 | 异常分层 | 通用 | 统一异常处理层捕获(`@ControllerAdvice` / `@RestControllerAdvice`),Service 层抛业务异常 |\n| B7 | DTO 隔离 | 通用 | Entity 不直接暴露到 Controller 层,通过 DTO 转换 |\n| B8 | 安全设计 | 抽象原则 | 认证/鉴权拦截、敏感字段脱敏、输入防注入(具体机制见项目 AGENTS.md「栈特定约束」) |\n| B9 | 配置管理 | 抽象原则 | 新增配置 key 含注释(用途/默认值/取值范围),配置管理工具/约定见项目 AGENTS.md「配置管理」 |\n| B10 | 数据库变更 | 抽象原则 | 数据库变更有变更管理(DDL 增量同步),策略/测试库见项目 AGENTS.md「栈特定约束」 |\n\n### Layer B — 5 WARNING(≤ 2 violation 可接受)\n\n| 编号 | 约束项 | 说明 |\n|------|--------|------|\n| BW1 | 方法长度 ≤ 40 行 | 超过需拆分 |\n| BW2 | 参数数量 ≤ 5 | 超过考虑封装为 DTO |\n| BW3 | 日志规范 | 关键业务节点记录日志,错误含堆栈(日志框架/规范见项目 AGENTS.md「栈特定约束」) |\n| BW4 | 魔法数字 | 常量提取至 `Constants` 类或配置文件 |\n| BW5 | 依赖注入 | 遵循项目注入风格(构造器/字段,见项目 AGENTS.md「栈特定约束」) |\n\n### Layer C — E2E 测试规范速查(E2eTester 脚手架标配工程)\n\n| 编号 | 规则 | 说明 |\n|------|------|------|\n| E1 | REST Assured DSL | `given().spec(baseSpec).when().get(...).then()...` |\n| E2 | API 路由常量 | `ApiRoutes` 类集中管理,禁止硬编码 URL 字符串 |\n| E3 | 请求体 POJO | `@Data` + `@Builder` + `@JsonProperty`,禁止 `Map` |\n| E4 | 异步等待 | `await().atMost(Duration.ofSeconds(30)).untilAsserted(...)` |\n| E5 | 测试类继承 | 继承 `BaseE2eTest`,文件命名 `{Feature}E2eTest.java` 或 `{Feature}IT.java` |\n| E6 | 3 并发执行 | `dev-workflow-tester` 规定的并发策略 |\n| E7 | 失败处理 | Level 1(重试) → Level 2(隔离重跑) → Level 3(报告) |\n\n---\n\n## 六、Skill 加载优先级\n\n| 优先级 | Skill | 加载时机 |\n|--------|-------|---------|\n| 1 | `code-philosophy` | 全局(所有轨道、所有节点) |\n| 2 | `java-constraints` | 后端编码, 单测设计/E2E 开发, 验收归档(按层级注入) |\n| 3 | 节点专属 skill | agent 已固化绑定(boundSkills),无需传递 |\n\n> `code-philosophy` 的 5 Laws 为全局约束,所有 subagent 必须遵守。在 后端编码 中与 `java-constraints` Layer A 叠加生效。\n",
|
|
263
|
+
"category": "process",
|
|
264
|
+
"version": "2.0.4",
|
|
265
|
+
"references": [],
|
|
266
|
+
"scope": "global"
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"name": "config-node",
|
|
270
|
+
"description": "",
|
|
271
|
+
"content": "# Node/TS 后端轨道配置 (config-node)\n\n> 到达各 DAG 节点时,主 Agent 按本表加载对应 Agent + Skills。本文件为运行时参考,不替代各 track-*.md 的 HARD GATE 约束。主会话委托 subagent 时,从项目 AGENTS.md 读栈信息(文件约定/栈特定约束/配置管理)拼接注入。\n>\n> **与 config-java.md 的关系**:config-java.md 是 Java/Spring 轨的参考实现;本文件是 Node/TypeScript 轨的等价物。同一项目只用其中一个(按项目 AGENTS.md 技术栈速查表判定)。\n\n---\n\n## 一、Per-Node Agent 映射表(siming 12-agent 体系,skill 固化绑定)\n\n> 到达各 DAG 节点时按本表指名委派。agent 的 boundSkills 已固化,主会话无需在 prompt 中声明 skill 清单。\n\n| 节点 | 角色 | Agent | 验证方式 |\n|------|------|-------|---------|\n| 后端编码 | Implementer | 主会话(编码不委派) | code-reviewer 审核分层架构 + HTTP 规范 + 持久层规范(标准见项目 AGENTS.md) |\n| 后端编码 | Verifier | code-reviewer | 独立上下文,零偏差审核 |\n| 单测设计 | Designer | 主会话 | test-reviewer 审核覆盖度 |\n| 单测开发 | Coder | 主会话(编码不委派) | 单测全量 100% PASS(执行委派 test-executor,Coder 只写测试代码;命令见项目 AGENTS.md COMMANDS) |\n| E2E 设计 | Designer | 主会话 | test-reviewer 审核覆盖度(通过后直接推进 E2E 开发) |\n| E2E 开发 | Coder | 主会话 | 委派 test-executor 跑项目声明的 E2E 入口全部通过 |\n| 验收归档 | Executor | test-executor | 全量回归:自主环境准备 + E2E + 单测 + 信息收集 |\n| 验收归档 | Analyst | regression-reviewer | 不变量验证:分析回归报告 + 不变量 + Diff(只读分析) |\n| 验收归档 | Reviewer | 主会话 | 验收确认:事实对照(引用审查结论,不重审) |\n| 验收归档 | Archiver | flow-executor | 归档:siming 命令写节点记录 + advance + 项目声明的 git 操作 |\n\n> **Worker/Verifier 分离(HARD GATE)**:Worker 和 Verifier 必须是不同 session。Verifier 不继承 Worker 上下文,只读审核不改代码。\n>\n> **Node/TS 轨无 Java 专属约束 skill**:编码规范和测试规范内联在本文件 §五,主会话编码时从本文件 §五 + 项目 AGENTS.md 读取对齐。\n## 二、4 层验证链触发点\n\n| 验证层 | 名称 | 触发时机 | 执行方式 |\n|--------|------|---------|---------|\n| 语法验证 | LSP diagnostics / tsgo | 后端编码 PostToolUse hooks | 类型检查 + 静态分析(命令见项目 AGENTS.md COMMANDS) |\n| 语义验证 | Verifier(code-reviewer) | 后端编码完成后 | `arch-review` → §五 Layer B 抽象约束审核;`code-reviewer` 独立 session |\n| 集成验证 | 冒烟测试 | 验收归档·全量回归开始 | 冒烟命令见项目 AGENTS.md COMMANDS || 回归验证·单测 | 全量单测回归 | 验收归档·全量回归完成 | 单测全量回归(命令见项目 AGENTS.md COMMANDS) |\n| 回归验证·E2E | E2E 回归 | 验收归档·全量回归完成 | E2E 回归(执行入口见项目 AGENTS.md COMMANDS) |\n\n> 视觉验证不适用于 Node 后端轨道,跳过。\n\n---\n\n## 三、文件约定\n\n> **文件约定(包结构/分层模型/各层命名/响应包装类型/DTO 命名/异常处理等)是项目特定信息,由项目 AGENTS.md「文件约定」承载(接入项目时 AI 探测填)。**\n> 主会话编码时直接读取项目 AGENTS.md「文件约定」等三节对齐栈信息(见 `track-code.md`「编码自律约束段」).\n\n\n## 四、构建命令\n\n> **CLI 日志落盘(HARD GATE)**:所有构建/测试/E2E 命令必须按 项目声明的命令日志落盘纪律(若有) 落盘。\n\n### 命令来源\n\n> 具体 build/test/lint/run 命令是项目特定信息,**见项目 AGENTS.md「COMMANDS」**(接入项目时 AI 探测填,含全量/单类/smoke/编译/静态分析/启动/E2E 等变体)。本节只描述执行模式与落盘纪律。\n\n### 执行模式(测试执行 = 委派 test-executor,无条件)\n\n> 适用节点:单测开发、E2E 开发、验收归档(集成回归+验收)、任意跑测试的时机。\n> 对应 项目 AGENTS 编排文件.md「测试执行 HARD GATE」。\n\n**唯一规则:所有测试执行 → 委派 test-executor,无例外。** 主会话禁止亲自跑测试命令(任何测试命令/含断言的验证脚本)。命令会触发测试(含构建命令带测试钩子的情形)→ 同样 委派 test-executor;纯编译/构建(纯构建/类型检查/静态分析类命令)→ 主会话直接执行。\n\n| 角色 | 职责 |\n|------|------|\n| test-executor | 执行所有测试命令,返回结构化结果(Final Output Contract) |\n| 主会话 | 写测试代码 → 委派 test-executor 跑 → 接收结果 → Diagnose 修复 → 委派 test-executor 重跑 |\n| `code-reviewer` | 审核回归结果(独立 session) |\n\n**分工纪律**:\n- test-executor 只报事实(PASS/FAIL/统计、log 关键行),**不解释原因、不改文件**\n- **委托 ≠ 甩锅用户**:本机所有服务依赖由 test-executor 自主拉起。test-executor 返回 FAIL → 主 Agent 走系统化根因排查 自主 Diagnose → 修代码 → 再次委托 test-executor 重跑,全链路闭环\n- 完整流程模板(Apply→Diagnose→Iterate + test-executor 委托 prompt + 暂停条件)见 exit skill「全量回归」\n\n**test-executor 委托 prompt 骨架**(主 Agent 调度时套用):\n\n> `dev-workflow-tester` skill 已固化绑定于 test-executor agent,主会话无需在 prompt 中声明 skill 清单。Final Output Contract / 三阶段工作流 / 自主环境准备等约束已在 skill 内,主会话**无需**在 prompt 里重复。\n\n委派 test-executor subagent,prompt 骨架:\n\n```text\n[TASK] 跑下列命令并返回结构化结果(按 test-executor 结构化报告契约输出)\n[CONTEXT] monorepo 根路径 + 自动 session-id(按 项目声明的命令日志落盘纪律(若有))\n[EXPECTED] 各命令 Test Files/Tests 统计 + 失败用例清单\n[MUST DO] 命令逐条执行(命令取自项目 AGENTS.md COMMANDS)、按 项目声明的命令日志落盘纪律(若有) 落盘\n[MUST NOT DO] 不修改任何文件、不解释原因只报事实(skill 「责任边界」 已规定)\n```\n\n### E2E 测试(Playwright runner,在 monorepo 根执行,委派 test-executor)\n\n> **E2E 执行形态**:E2E 框架与执行入口按项目 AGENTS.md 声明(Playwright API testing 为常见形态)。\n>\n> E2E 执行由 test-executor 完成(「测试执行一律委派 test-executor」纪律),test-executor 按三阶段执行(自主环境准备 → 项目声明的 E2E 入口 → Final Output Contract),日志按 项目声明的命令日志落盘纪律(若有) 落盘。\n\n> ⚠ 项目未声明 E2E 入口或 E2E 环境不存在 → 跳过 E2E 命令,在节点记录 summary 标注「E2E 暂挂(原因)」。\n\n---\n\n## 五、Node/TS 约束体系(3 层)\n\n> **Node/TS 轨无 `java-constraints` skill**:Java 轨的编码规范/架构约束/E2E 规范打包在 `java-constraints` skill 里(Layer A/B/C)。Node/TS 轨没有等价 skill,**约束全部内联在本节**。主会话编码时,从本文件 §五 + 项目 AGENTS.md 读取对齐。\n\n| 约束层 | 名称 | 范围 | 注入节点 | 核心规则 |\n|--------|------|------|---------|---------|\n| Layer A | 代码约束 | 编码风格、代码哲学 5 Laws | 后端编码 | `code-philosophy` 5 Laws(Simplicity / DRY / Testability / Correctness / Maintainability) |\n| Layer B | 架构约束 | 分层架构、HTTP 规范、安全设计(抽象通用) | 后端编码, 验收归档 | 见下方速查(抽象原则,具体技术选型见项目 AGENTS.md) |\n| Layer C | E2E 约束 | API 测试规范、执行流程、覆盖率 | 单测设计/E2E 开发, 验收归档 | N1-N7 规则(Playwright API testing / vitest 集成测试) |\n\n### Layer A — code-philosophy 5 Laws(全局,code-philosophy skill 承载)\n\n与 Java 轨一致,不重复。主会话 + 所有 subagent 均须加载 `code-philosophy` skill。\n\n### Layer B — 10 CRITICAL 架构约束清单(后端编码 code-reviewer 审核清单 + 主会话编码自律清单)\n\n> **前导(装配约定)**:本清单为**跨项目通用的抽象架构约束**(Node/TS 后端行业最佳实践)。具体技术选型(框架版本、连接串、配置工具等)是项目特定信息,见项目 AGENTS.md。\n> 主会话编码时,**直接读取项目 AGENTS.md**(「文件约定」「栈特定约束」「配置管理」),与本表对齐后编码。\n>\n> **权威源**:typescriptlang.org/tsconfig / zod.dev / hono.dev/guides/best-practices / mongodb.com/docs/drivers/node-current / vitest.dev(官方文档 + 多源交叉验证)。\n\n| 编号 | 约束项 | 性质 | 说明 | 权威源 |\n|------|--------|------|------|--------|\n| B1 | 分层隔离 | 抽象原则 | 遵循项目分层架构(包结构见项目 AGENTS.md),禁止跨层调用(如 server routes 直接操作 MongoDB driver,必须经 core repos) | hono.dev/guides/best-practices(Don't make Controllers);项目 AGENTS.md |\n| B2 | 统一响应格式 | 抽象原则 | 所有 API 统一响应格式;Hono 用 `OpenAPIHono` + `createRoute()` 定义路由,`c.json()` 返回;DTO 类型从 Zod schema 推导(`z.infer<typeof Schema>`) | hono.dev/examples/zod-openapi;zod.dev |\n| B3 | Zod 边界校验 | 通用 | 所有外部输入(HTTP body/param/query、env、MCP args)必须经 Zod schema 校验;用 `safeParse()` 不用 `parse()`(避免抛异常);`@hono/zod-openapi` 的 `defaultHook` 统一校验错误格式 | zod.dev(safeParse vs parse);@hono/zod-openapi docs |\n| B4 | OpenAPI 文档 | 通用 | 公开 API 必须有 OpenAPI 定义;用 `@hono/zod-openapi` 的 `.openapi('ComponentName')` 自动注册 schema,导出 spec 供 CLI/Web 生成 typed client | hono.dev/examples/zod-openapi |\n| B5 | 事务管理 | 通用 | MongoDB 写操作使用 transactions;用 `client.withSession(s => s.withTransaction(async session => { ... }))` Convenient API(自动 commit/retry);**事务内禁止 `Promise.all()`**(session 并行导致服务器错误) | mongodb.com/docs/drivers/node-current/crud/transactions |\n| B6 | 异常分层 | 通用 | 统一异常处理:`app.onError()` 集中捕获 → 转换为 HTTP 响应;业务层抛 typed Error(自定义 AppError 子类);预期失败用 Result type `{ success, data } | { success: false, error }` | hono.dev/docs/api/hono(onError);neverthrow pattern |\n| B7 | DTO 隔离 | 通用 | MongoDB document ↔ API response 之间通过 Zod schema 转换;repo 层返回 `z.infer<typeof XxxSchema>` 类型,不直接暴露 MongoDB 原始 BSON;`db.collection<DocumentType>()` 做类型安全 | zod.dev(z.infer);mongodb.com/docs/drivers/node-current |\n| B8 | 安全设计 | 抽象原则 | Phase-1 本地单用户无 auth;预留 `?token=` 入参;敏感字段(密码/token)不出现在 API response;输入经 Zod 校验防注入(Zod schema 限制类型+格式) | 项目 AGENTS.md「栈特定约束」 |\n| B9 | 配置管理 | 抽象原则 | 环境变量用 Zod schema 启动时一次性解析(fail-fast);配置 key 用 `SIMING_*` 前缀;新增 key 必须在项目声明的环境说明文档中文档化 | @t3-oss/env pattern;zod.dev |\n| B10 | 数据库变更 | 抽象原则 | MongoDB schema validation(JSON Schema at DB level)做最后一层兜底;应用层 Zod 做主验证;index 变更有显式 `createIndex()` 调用 | mongodb.com/docs/manual/core/schema-validation |\n\n### Layer B — 5 WARNING(≤ 2 violation 可接受)\n\n| 编号 | 约束项 | 说明 | 权威源 |\n|------|--------|------|--------|\n| BW1 | 函数长度 ≤ 40 行 | 超过需拆分(handler 函数尤其要注意,Hono 不建 Controller 但 handler 也不宜过长) | 通用 |\n| BW2 | 参数数量 ≤ 5 | 超过考虑封装为 object(用 Zod schema 定义参数对象) | 通用 |\n| BW3 | 日志规范 | 关键业务节点记录日志;Phase-1 用 `console.log/error`,UC1 plan 引入结构化日志(pino);错误含堆栈 | 项目 AGENTS.md |\n| BW4 | 魔法数字 | 提取为常量(`const MAX_RETRIES = 3`)或配置(Zod env schema) | 通用 |\n| BW5 | 函数式注入 | 无 DI 框架;参数显式传递(函数式风格,避免 Effect/Inversify);repo 函数接收 `client: SimingClient` 参数 | 项目 AGENTS.md |\n\n### Layer B — TypeScript 编码规范(替代 `java-constraints` Layer A)\n\n> Java 轨的编码风格约束(命名/注释/null 处理/异常处理)由 `java-constraints` skill 承载。Node/TS 轨无等价 skill,**约束内联在此**。以下规则来自 typescriptlang.org 官方 tsconfig 参考 + Total TypeScript / Matt Pocock 推荐 + 多源验证。\n\n| 规则 | 说明 | 权威源 |\n|------|------|--------|\n| **禁 `any` / `as` 断言** | `as any` / `as unknown as T` 禁用;类型不确定时用 Zod parse 校验或显式泛型 | typescriptlang.org/tsconfig(strict) |\n| **禁 `enum`** | 用 `as const` 对象 + union type 替代(`const Status = { ACTIVE: 'active', ... } as const; type Status = typeof Status[keyof typeof Status]`) | Total TypeScript best practices |\n| **ESM `.js` 扩展名** | `verbatimModuleSyntax: true` 下,所有相对 import 用 `.js` 扩展名(即使源文件是 `.ts`) | typescriptlang.org/tsconfig(verbatimModuleSyntax) |\n| **`import type` 分离** | 仅用于类型的 import 用 `import type { ... }`(`verbatimModuleSyntax` 强制) | typescriptlang.org/tsconfig |\n| **`noUncheckedIndexedAccess`** | 数组/对象索引访问返回 `T \\| undefined`,必须做 null check | typescriptlang.org/tsconfig |\n| **`exactOptionalPropertyTypes`** | 可选属性不能赋 `undefined`(要么有值,要么不写 key) | typescriptlang.org/tsconfig |\n| **错误处理** | `throw new AppError(...)` 用于不可预期错误;`safeParse()` / Result type 用于可预期失败;**禁止空 `catch (e) {}`**(至少 `console.error(e)` + rethrow 或 return error state) | zod.dev(safeParse);neverthrow pattern |\n| **`__dirname` 替代** | ESM 无 `__dirname`;用 `import.meta.dirname`(Node 22+)或 `fileURLToPath(new URL('.', import.meta.url))` | nodejs.org/api/esm.html |\n\n### Layer C — E2E 测试规范速查(Playwright API testing)\n\n> Java 轨用 TestNG + REST Assured(E2eTester 脚手架标配),规则 E1-E7。Node/TS 轨用 **Playwright**(API testing via `APIRequestContext`),规则 N1-N7。\n\n| 编号 | 规则 | 说明 | 权威源 |\n|------|------|------|--------|\n| N1 | `request` fixture | API 测试用 Playwright 内置 `request` fixture(test-scoped,自动 dispose),不用 `playwright.request.newContext()`(需手动 dispose) | playwright.dev/docs/api-testing |\n| N2 | baseURL + headers | `playwright.config.ts` 中配置 `baseURL` + `extraHTTPHeaders`(如 `Accept: application/json`),test 中用相对路径 | playwright.dev/docs/api-testing |\n| N3 | Zod response 校验 | API response 用 Zod schema 校验(`Schema.safeParse(await response.json())`),断言 `success: true`;禁止只断言 HTTP status 不校验 body | zod.dev |\n| N4 | test-scoped fixture | 数据隔离:每个 test 用 fixture 创建独立数据(`test.extend<{ apiContext: APIRequestContext }>(...)`),test 结束自动 dispose | playwright.dev/docs/test-fixtures |\n| N5 | `testInfo.workerIndex` | 需要唯一标识时用 `testInfo.workerIndex`(单调递增),不用 `parallelIndex`(0~workers-1 可能重复) | playwright.dev/docs/api-testing |\n| N6 | API + UI 混合 | API seed → UI 验证 / UI 操作 → API 校验;`storageState` 共享 cookie/session | playwright.dev/docs/api-testing |\n| N7 | 失败处理 | `testInfo.attach()` 附加请求 URL/headers/status/body 到失败报告;retry 配置在 `playwright.config.ts`(API 测试 `retries: 0` 或 `1`) | playwright.dev/docs/test-annotations |\n\n---\n\n## 六、Skill 加载优先级\n\n| 优先级 | Skill | 加载时机 |\n|--------|-------|---------|\n| 1 | `code-philosophy` | 全局(所有轨道、所有节点) |\n| 2 | **本文件 §五 内联约束**(替代 `java-constraints`) | 后端编码, 单测设计/E2E 开发, 验收归档 |\n| 3 | 节点专属 skill | 后端编码→`arch-review`;验收归档→`dev-workflow-tester`(固化绑定) |\n\n> `code-philosophy` 的 5 Laws 为全局约束,所有 subagent 必须遵守。在 后端编码 中与本文件 §五 Layer B 叠加生效。\n>\n> **Node/TS 轨不加载 `java-constraints` / `api-e2e-test` skill**:这两个 skill 是 Java/Spring 专属。Node/TS 轨的约束体系(编码规范 + 架构约束 + E2E 规范)全部内联在本文件 §五。\n",
|
|
272
|
+
"category": "process",
|
|
273
|
+
"version": "2.0.4",
|
|
274
|
+
"references": [],
|
|
275
|
+
"scope": "global"
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"name": "config-ui",
|
|
279
|
+
"description": "",
|
|
280
|
+
"content": "# UI 前端轨道配置 (config-ui)\n\n> 到达各 DAG 节点时,主 Agent 按本表加载对应 Agent + Skills。本文件为运行时参考,不替代各 track-*.md 的 HARD GATE 约束。主会话委托 subagent 时,从项目 AGENTS.md 读栈信息(文件约定/栈特定约束/配置管理)拼接注入。\n\n---\n\n## 一、Per-Node Agent 映射表(siming 12-agent 体系,skill 固化绑定)\n\n> 到达各 DAG 节点时按本表指名委派。agent 的 boundSkills 已固化,主会话无需在 prompt 中声明 skill 清单。\n\n| 节点 | 角色 | Agent | 验证方式 |\n|------|------|-------|---------|\n| UI 组件开发 | Implementer | 主会话(UI 编码一律主会话自做,不委派) | code-reviewer 审组件结构与设计-实现一致性 |\n| UI 组件开发 | Verifier | code-reviewer | 独立上下文,零偏差审核 |\n| UI 视觉验证 | Vision Verifier | visual-reviewer | 截图 5 维度审核(布局/样式/状态/对比/一致性) |\n| UI 视觉验证 | Fixer | 主会话 | 视觉缺陷修复(修复后回归审核) |\n| 验收归档 | Executor | test-executor | 全量回归执行 |\n| 验收归档 | Reviewer | 主会话 | 验收确认:事实对照(引用审查结论,不重审) |\n| 验收归档 | Archiver | flow-executor | siming 归档:节点记录 + advance + 项目 git 杂活 |\n\n> **UI 轨差异**:编码一律主会话自做;视觉审核由 visual-reviewer 多模态完成;单测/E2E 节点 UI 轨跳过。\n>\n> **Worker/Verifier 分离(HARD GATE)**:Worker 和 Verifier 必须是不同 session。Verifier 不继承 Worker 上下文,只读审核不改代码。\n## 二、5 层验证链触发点\n\n| 验证层 | 名称 | 触发时机 | 执行方式 |\n|--------|------|---------|---------|\n| 语法验证 | 静态分析 + 类型检查 | UI 组件开发 PostToolUse hooks | 静态分析 + 类型检查(工具/命令见项目 AGENTS.md COMMANDS) |\n| 语义验证 | Verifier(code-reviewer) | UI 组件开发完成后 | `ui-implementation` 3-Pass 协议 + 7 状态模型 + 10 反模式;`code-reviewer` 独立 session 审核 |\n| 集成验证 | 构建 + 启动 | 验收归档开始 | 构建(退出码 0)+ 启动验证(命令见项目 AGENTS.md COMMANDS) |\n| 回归验证 | Playwright E2E 全量 | 验收归档完成 | Playwright E2E 全量 → 7 状态模型全覆盖 → CRUD 全部可用 |\n| 视觉验证 | 截图对照 / 视觉检查 | UI 视觉验证 + 验收归档 | `ui-verify` HARD GATE:Playwright MCP → 视觉对照 → 响应式 → 交互路径;`visual-reviewer` 多模态审核 |\n\n> 逐层推进,前一层失败不进入下一层。\n\n---\n\n## 三、文件约定\n\n> **文件约定(目录结构、组件/页面/布局/类型/样式/API/状态/Hooks/测试的命名与存放路径)是项目特定信息,由项目 AGENTS.md「文件约定」承载(接入项目时 AI 探测填)。**\n> 主会话委托 UI 组件开发 subagent 时,从项目 AGENTS.md「文件约定」拼接注入。\n\n\n## 四、构建命令\n\n> **CLI 日志落盘(HARD GATE)**:构建/类型检查/E2E 命令必须按 项目声明的命令日志落盘纪律(若有) 落盘。\n> 开发服务器为长驻进程,不落盘。\n\n### 命令来源\n\n> 具体 build/lint/dev/test 命令是项目特定信息,**见项目 AGENTS.md「COMMANDS」**(接入项目时 AI 探测填,含类型检查/lint/build/dev/playwright E2E 全量/单文件等变体)。本节只描述落盘纪律。\n\n### 命令模板(落盘纪律,命令值取自项目 AGENTS.md COMMANDS)\n\n```bash\n# 类型检查(语法验证)\n# 按 项目声明的命令日志落盘纪律(若有) 落盘\n{构建命令-类型检查}\n\n# 代码规范(语法验证)\n# 按 项目声明的命令日志落盘纪律(若有) 落盘\n{构建命令-lint}\n\n# 构建验证(集成验证)\n# 按 项目声明的命令日志落盘纪律(若有) 落盘\n{构建命令-build}\n\n# 开发服务器启动(集成验证,长驻进程,不落盘)\n{启动命令-dev}\n\n# Playwright E2E(回归验证 / UI 视觉验证)\n# 按 项目声明的命令日志落盘纪律(若有) 落盘\n{构建命令-playwright全量}\n\n# Playwright E2E 按文件\n# 按 项目声明的命令日志落盘纪律(若有) 落盘\n{构建命令-playwright全量} {文件路径}\n```\n\n---\n\n## 五、UI 约束体系(4 层)\n\n| 约束层 | 名称 | 范围 | 注入节点 | 核心规则 |\n|--------|------|------|---------|---------|\n| Layer A | 设计哲学 | 5 Pillars 前端哲学 | 需求录入/PRD 设计/技术方案 | `frontend-philosophy` 5 Pillars(Componentization / State Management / Accessibility / Performance / Consistency) |\n| Layer B | 设计一致性 | 8 CRITICAL Token | 技术方案, UI 组件开发, 验收归档 | `frontend-consistency` 8 CRITICAL(Design Token 对照 / 组件库统一 / 路由规范 / 状态管理一致性) |\n| Layer C | 实现约束 | 3-Pass 协议 + 7 状态模型 + 10 反模式 | UI 组件开发 | `ui-implementation` 编码规范(见下方速查) |\n| Layer D | 验证 HARD GATE | Playwright MCP 视觉验收 + 5 维度审核 | UI 视觉验证, 验收归档 | `ui-verify` 视觉验收标准(见下方速查) |\n\n### Layer C — 3-Pass 协议 + 7 状态模型速查\n\n#### 3-Pass 开发协议(每个组件)\n\n| Pass | 阶段 | 产出 |\n|------|------|------|\n| Pass 1 — 骨架 | 组件结构 + Props 接口 + 状态声明 | 可编译的空壳组件 |\n| Pass 2 — 逻辑 | 事件处理 + 数据流 + 副作用 | 功能完整的组件 |\n| Pass 3 — 细化 | 样式 + 动画 + 边界处理 + 可访问性 | 生产就绪组件 |\n\n#### 7 状态模型(每个数据组件必须覆盖)\n\n| 状态 | 说明 | 强制要求 |\n|------|------|---------|\n| loading | 数据加载中 | Skeleton(非 spinner),结构匹配内容布局 |\n| empty | 数据为空 | 描述文案 + 引导 CTA(非空白页面) |\n| error | 加载失败 | 错误信息 + 重试按钮 |\n| populated | 正常数据 | 数据正确渲染,无截断 |\n| submitting | 提交中 | 按钮 `disabled`,禁止重复提交 |\n| submitted | 提交成功 | Toast 反馈,列表刷新 |\n| validation-error | 校验失败 | 错误提示在对应字段下方,非全局弹窗 |\n\n#### 10 反模式\n\n| 编号 | 反模式 | 纠正方案 |\n|------|--------|---------|\n| AP1 | 自行实现 Dialog/AlertDialog/Table | 使用项目组件库(见项目 AGENTS.md「栈特定约束」) |\n| AP2 | `any` 类型 | Props 接口必须完整类型标注 |\n| AP3 | 空 catch 块 | 至少 `console.error` + 用户可见错误状态 |\n| AP4 | 全局样式污染 | CSS Modules 或 scoped styles |\n| AP5 | `div` + `onClick` 替代 `<button>` | 使用语义化标签 |\n| AP6 | 硬编码颜色/字体大小 | 使用 Design Token(CSS 变量或 Tailwind theme) |\n| AP7 | `useEffect` 内直接 fetch | 使用数据获取库(TanStack Query / SWR) |\n| AP8 | 无边界处理的长文本 | 截断 + Tooltip |\n| AP9 | 表单提交无 disabled | `disabled={isSubmitting}` |\n| AP10 | 删除无二次确认 | AlertDialog 确认 |\n\n### Layer D — UI 视觉验证 视觉验收 5 维度(HARD GATE)\n\n| 维度 | 审核要点 | 执行者 |\n|------|---------|--------|\n| 1. 状态完整性 | 4 种状态(loading/empty/error/populated)截图完整 + 视觉正确 | `visual-reviewer` |\n| 2. 可访问性 | 语义化 HTML / `aria-label` / 键盘导航 / `prefers-reduced-motion` | `visual-reviewer` |\n| 3. 组件标准 | 使用组件库,`disabled` 防重复提交,Props 类型完整 | `visual-reviewer` |\n| 4. 边界场景 | 空状态 CTA / 长文本截断 / 表单校验 / 并发防护 | `visual-reviewer` |\n| 5. 交互质量 | AlertDialog 确认 / Toast 反馈 / 响应式断点(mobile/tablet/desktop) | `visual-reviewer` |\n\n> 5 维度全部 PASS(0 CRITICAL FAIL)才能通过 UI 视觉验证。最多 3 轮修复循环。\n\n---\n\n## 六、响应式断点约定\n\n| 断点 | 宽度 | 对应设备 |\n|------|------|---------|\n| mobile | < 640px | 手机竖屏 |\n| tablet | 640px - 1024px | 平板 / 手机横屏 |\n| desktop | > 1024px | 桌面显示器 |\n\n> 每个页面/UI 视觉验证 截图必须覆盖 3 个断点。\n\n---\n\n## 七、Skill 加载优先级\n\n| 优先级 | Skill | 加载时机 |\n|--------|-------|---------|\n| 1 | `code-philosophy` | 全局(所有轨道、所有节点) |\n| 2 | `frontend-philosophy` | 需求录入/PRD 设计/技术方案(设计阶段) |\n| 3 | `frontend-consistency` | 技术方案, UI 组件开发, 验收归档 |\n| 4 | `ui-constraints` | UI 组件开发, UI 视觉验证, 验收归档(按层级注入) |\n| 5 | 节点专属 skill | 按本表「固化绑定/注入 skill」列生效(agent 固化绑定自动加载;节点 skills 随 context 注入) |\n\n> UI 编码由主会话完成(加载 UI 域 skill 即具备视觉规范能力)。`visual-reviewer` subagent 用于 UI 视觉验证 的截图多模态审核。\n",
|
|
281
|
+
"category": "process",
|
|
282
|
+
"version": "2.0.5",
|
|
283
|
+
"references": [],
|
|
284
|
+
"scope": "global"
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"name": "exit",
|
|
288
|
+
"description": "",
|
|
289
|
+
"content": "\n# 验收归档\n\n> 固定出口节点(合并原 E01 集成回归 + E02 最终验收 + E03 归档)。所有轨道在此汇聚,执行全量回归 + 快速验收确认 + 归档。\n>\n> **设计理念**:质量保障在技术方案/后端编码/单测设计/E2E 开发 各节点对应 reviewer 审查已完成(方案=arch-reviewer / 代码=code-reviewer / 测试设计=test-reviewer),验收归档不重复审查。验收归档只做:①跑全量测试验证 ②事实对照确认 ③归档。\n>\n> **Agent 分工**:test-executor 执行「全量回归」CLI 命令 / 主会话调度 + Diagnose 修复 + 「验收确认」/ flow-executor 执行「归档」(验收归档)。\n>\n> **状态流转**:由任务状态机 advance 自动承载(无目录/看板操作)。\n\n## HARD GATE\n\n| # | 条件 | 未满足时 |\n|---|------|---------|\n| H1 | 所有活跃轨道 Track + Test 阶段完成 | 打回对应节点 |\n| H2 | 单测 100% pass(形式化判定见下方注;按项目 AGENTS.md「测试范式」声明的框架与 PASS 判定标准执行) | 打回单测开发 |\n| H3 | E2E 100% pass(Backend 轨道;形式化判定见下方注) | 打回 E2E 开发 |\n| H4 | smoke test 通过(Backend API 200;UI 页面可访问) | 打回对应轨道 |\n| H5 | **涉及后端 API 的 UI 任务**:前后端联调冒烟 100% pass(真实后端 + 真实 HTTP 请求,非 mock) | 打回 UI 组件开发,补联调测试 |\n| H6 | **0 Critical** 代码审查意见未解决(引用各节点 code-reviewer 审查结果,不重审) | 打回对应编码节点 |\n| H7 | 当前分支为 `feature/<taskId>` | 切换到正确分支 |\n| H8 | 已知问题逐条判定:破坏功能完整性的问题均已修复(判定标准 = 功能完整性,非\"是否本期引入\") | 打回修复对应问题 |\n\n> H1-H8 任一未满足,立即终止验收归档,标注缺失项。H6 不要求重新审查,只确认各节点 code-reviewer 审查的 Critical 已清零。\n>\n> **H8 判定标准(HARD GATE)**:验收标准 = **功能完整性**,不是问题是否本期引入。已知问题逐条判定「是否破坏功能完整性」(行为与文档/注册表承诺不一致、静默忽略用户输入、功能缺失/错误、手册与实现背离等):破坏 → 验收前必须修复,\"预存问题/非本期引入/Phase-2 缺口/待用户拍板\"均不构成豁免理由,仅用户**显式**接受风险(原文记录到任务 doc/记录)可不修放行;修复工作量大 → ⏸ 上升用户拍板拆分,禁止静默放行。\"预存\"只豁免回归归因(归哪个任务修),不豁免验收阻塞。\n>\n> **H2/H3 形式化判定(零-skip 原则,HARD GATE)**:PASS = fail=0 且 skip=0 且项目测试完整性检查通过。**skip>0 不是 PASS**——每条 skip 必须有用户显式授权记录在本任务任务 doc/记录中,且验收摘要逐条列出 skip 清单;无授权的新增 skip = FAIL,打回对应测试节点。完整性检查覆盖本分支新增 skip 标记(test.skip/test.fixme/describe.skip/xdescribe/xit/*.only)与被删除的测试文件(检查手段按项目声明)。\n>\n> **H2 守卫**:若项目 AGENTS.md「测试范式」节缺失或不完整(未声明框架/命令/PASS标准/覆盖率,或\"无单测\"未声明替代验证)→ H2 不可验证,**⏸ 暂停并提示用户先补全「测试范式」节再继续**。禁止在「测试范式」缺失时跳过 H2 或默认放行。\n\n## 约束块\n\n```\n[test-executor] 项目级配置,仅 bash/read/grep/glob — 执行 CLI 测试命令\n[主会话] 调度 test-executor + Diagnose 修复 + 验收事实对照\n[flow-executor] 项目级配置,read/edit/write/glob/grep — 节点归档(验收归档)\nconstraints:\n - test-executor 和主会话工具分离:test-executor 跑命令,主会话调 MCP(Playwright)\n - 任何 NEW regression → 打回对应步骤(走 systematic-debugging)\n - 不变量逐条验证不可跳过\n - 0 Critical 引用历史审查结果,验收归档不重新 code-reviewer 审查\n - 归档使用 --no-ff merge,禁止 squash/rebase\n```\n\n---\n\n## 全量回归(委托 test-executor)\n\n> **CLI 日志落盘(HARD GATE)**:所有测试命令必须按项目声明的日志落盘纪律落盘。\n\n### 执行模式(自主优先 + test-executor 委托)\n\n```\n纯 CLI 测试(单测/E2E/后端启动,命令按项目声明)→ 委托 test-executor\nMCP 工具(Playwright MCP for UI) → 主会话自己执行(test-executor 无 MCP 权限)\n主会话职责:调度 test-executor → 接收结果 → Diagnose → 修代码 → 委托 test-executor 重跑\n```\n\n### 测试完整性静态检查(HARD GATE,主会话执行)\n\n**全量回归门控判定前必须执行**(test-executor 返回结果后、进入 Diagnose/验收确认前):\n\n> 命令清单按项目 AGENTS.md COMMANDS(未声明 → 向用户确认)。\n\n- exit 0(CLEAN)→ 继续验收确认\n- exit 1(命中)→ FAIL:新增 skip 标记/被删测试文件必须修复还原,或确认任务 doc/记录中有用户逐条授权记录并在验收摘要列明;否则打回对应测试节点\n\n### test-executor 委托模板(主会话 → test-executor)\n\n> `dev-workflow-tester` skill 已固化绑定于 test-executor agent,主会话无需在 prompt 中声明 skill 清单。Final Output Contract / 三阶段工作流 / 自主环境准备等约束已在 skill 内。\n\n委派 test-executor subagent(验收归档·全量回归),prompt 模板:\n\n```text\n## TASK\n按轨道跑下列命令清单,返回结构化结果(按 dev-workflow-tester skill「Final Output Contract」 输出,不是摘要)。\n\n## CONTEXT\n- 项目根: 项目根目录/\n- session code: {session-code}\n- 涉及轨道: {backend | ui | 混合}\n\n## 命令清单(按轨道,从下方\"命令清单\"段复制对应轨道)\n{轨道命令清单}\n\n## MUST DO\n- 命令逐条执行、log 落盘、附 grep 结果\n- 阶段A 自主环境准备(skill 「自主环境准备」)\n\n## MUST NOT DO\n- 不修改任何文件、不解释原因只报事实(skill 「责任边界」 已规定)\n```\n\n### 命令清单(按轨道)\n\n**Backend**(委托 test-executor,命令值取自项目 AGENTS.md COMMANDS):\n```bash\n# 集成验证 smoke(冒烟测试)\n# 按 项目声明的命令日志落盘纪律 落盘\n{构建命令-冒烟}\n# 回归验证·后端单测全量\n# 按 项目声明的命令日志落盘纪律 落盘\n{构建命令-单测全量}\n# 回归验证·E2E 全量(Playwright runner,打真实 API,确保后端已启动 HARD GATE「设计协调」)\n# 按 项目声明的命令日志落盘纪律 落盘\n# E2E 命令按项目 AGENTS.md COMMANDS\n```\n\n**UI**(主会话执行,Playwright MCP):\n```\nPlaywright MCP 全量 CRUD 验证 + 边界状态(loading/empty/error/edge)+ 截图 diff\n```\n\n### Diagnose 循环(test-executor 返回非 100% PASS 时)\n\n```\nAPPLY(委托 test-executor 跑)→ DIAGNOSE(主会话 systematic-debugging 根因调查)\n ├── 代码缺陷 → 改实现,不改测试\n ├── 契约漂移 → 对照 PRD/技术方案修对应端\n ├── 环境故障 → 自主排查依赖(数据库/中间件)\n └── 测试本身错 → 改测试(仅当确实写错;\"改测试\"仅指修正错误断言/选择器/fixture,**不含** test.skip/放宽断言等降级——skip ≠ pass)\n→ ITERATE(委托 test-executor 重跑)→ 直到 PASS 或触发暂停条件(systematic-debugging 3 轮不收敛)\n```\n\n> **禁止上升理由**:测试 FAIL、后端未启动、字段对不上、MCP 报错——这些都是 Diagnose 标准输入,不是上升理由(自主优先原则)。\n\n---\n\n## 不变量验证 + 回归 Diff\n\n### 不变量清单(轨道维度)\n\n| 轨道 | 不变量数 | 分类 | 详细清单 |\n|------|---------|------|---------|\n| Backend | 11 | 性能(3) + API契约(4) + 数据(2) + 可观测(2) | 本文件下方 |\n| UI | 9 | 视觉(3) + 交互(3) + 性能(3) | `ui-verify` skill |\n\n**Backend 11 不变量**(栈中性验收维度;具体测量命令/迁移机制/测试库按项目 AGENTS.md「测试范式」与 config-node.md):\n1. API 响应时间 P95 ≤ baseline × 1.1 | 2. DB 查询耗时 ≤ baseline × 1.1 | 3. 堆内存峰值 ≤ baseline × 1.1\n4. 端点签名无变化 | 5. 响应 Schema 兼容 | 6. 错误码无退化 | 7. 认证/鉴权门禁无退化\n8. 迁移脚本幂等 | 9. 关键查询结果集行数 = baseline\n10. 关键路径日志覆盖无丢失 | 11. 错误日志级别无降级\n\n### 回归 Diff 处理\n\n```\n对比当前 vs baseline → 6 类标签:\n NEW → 打回对应节点(走 systematic-debugging,禁止只改测试让其通过)\n FIXED → 记录修复\n STABLE_PASS → 无变化\n STABLE_FAIL → 评估 → 用户决策\n MISSING_BASELINE → 建立 baseline\n MISSING_CANDIDATE→ 检查是否误删\n```\n\n> test-executor 在「全量回归」结果中附不变量 PASS/FAIL 统计。主会话审查 Diff,NEW regression 打回,STABLE_FAIL 上升用户。\n\n---\n\n## 验收确认(主会话,简化)\n\n> **不重新 code-reviewer 审查**。引用技术方案/后端编码/单测设计/E2E 开发 各节点 code-reviewer 审查结果,只做事实对照。\n\n```\n[主会话] 快速事实对照(5-10 分钟):\n 1. 测试结果:全量回归全量 PASS 且 skip=0(或 skip 逐条有授权)?(引用 test-executor 报告;skip>0 必须逐条列出 skip 清单)\n 2. 测试完整性:检查通过?(引用检查输出 log 路径)\n 3. 不变量:不变量验证全 PASS?(引用 test-executor 报告)\n 4. 0 Critical:各节点 code-reviewer 审查的 Critical 已清零?(引用历史审查)\n 5. PRD 需求覆盖:所有需求有对应实现?(逐条对照,标注实现位置)\n 6. Scope creep:有超出原计划的新增?(标注并评估)\n 7. 已知问题判定(H8):每条已知问题按「功能完整性」逐条判定?破坏 = 验收前必须修复(用户显式接受风险须引用原文)\n ↓\n ⏸ 呈现验收摘要,等用户确认归档\n```\n\n### 确认判定规则(HARD GATE)\n\n- **仅用户显式肯定表达构成确认**(\"验收通过\"/\"确认\"/\"同意归档\"等),且节点记录必须引用确认原文——**无可引用原文 = 不得归档/merge**。\n- **用户的提问/评估/条件句/新诉求一律不是确认**(如\"哪些是必须处理的?\"/\"必须先修复 X 才能验收\"):应回应问题内容本身,然后继续等待显式确认。\n- 禁止从语气、沉默或部分认同推断同意(\"自说自话式同意\" = HARD GATE 违规)。\n\n### 验收判定\n\n| 条件 | Decision | Action |\n|------|----------|--------|\n| 测试 + 不变量全 PASS + 0 Critical + PRD 全覆盖 + 已知问题无阻塞项(H8) | ✅ APPROVED | → 归档 |\n| 测试 PASS 但 PRD 有未覆盖项 | ⚠️ CONDITIONAL | 用户确认 scope 差异 |\n| 测试有 FAIL 或 NEW regression | ❌ REJECTED | 打回对应节点 |\n| 破坏功能完整性的已知问题未修复且无用户显式接受风险原文 | ❌ REJECTED | 打回修复(H8) |\n\n---\n\n## 归档(委托 flow-executor,验收归档)\n\n> 用户确认验收后,主会话触发验收归档,委托 flow-executor 一次性完成所有归档动作。\n>\n> **归档中断/异常后状态核实(HARD GATE)**:归档被中断/超时/报错时,向用户报告状态前必须先 `git log` / `git status` 核实实际状态(merge/目录迁移可能已执行或部分执行),禁止凭记忆或推断报告。\n\n### 验收归档 flow-executor 委托模板(主会话 → flow-executor)\n\n委派 flow-executor subagent(验收归档),prompt 模板:\n\n```\n[TASK] 执行 验收归档 批次\n[CONTEXT]\n- 任务:<taskId>(siming 实例)\n- 任务 ID:<taskId>\n- feature 分支:feature/<taskId>-{slug}\n- 验收结果:{APPROVED/CONDITIONAL} + 用户确认原文引用(无原文 = 不得委托归档)\n- 测试统计:单测 {N} pass / E2E {N} pass / skip {S}(skip=0 或逐条授权清单)/ 0 new regression\n- 测试完整性:测试完整性检查通过(log: {检查日志路径})\n- 不变量:{Backend: N/11 / UI: N/9}\n- 0 Critical 确认\n- 已知问题:{无 / issue 列表 + 逐条判定结论(已修复 / 用户显式接受风险原文)}\n- 架构信息摘要(验收阶段补充的架构发现,无则\"无\"):{摘要}\n[EXPECTED]\n1. 逐条执行 siming 写入:record set(收尾 summary)→ record check add(验收判定项)→ archnote add(验收阶段补充的架构发现,多数情况为\"无\")\n2. advance 推进(状态流转由任务状态机自动承载)\n3. 按项目声明的分支模型执行 git 提交与合并\n6. git push origin dev\n[MUST DO] 每步确认成功再继续,merge 用 --no-ff\n[MUST NOT DO] 不 squash/rebase,不跳过 push\n```\n\n---\n\n## 架构信息归档(主会话执行)\n\n> 架构文档实体在项目仓库(架构随代码演进);siming 侧仅维护位置索引。项目设有架构索引 skill 时同步更新索引,未设则跳过。\n\n### 5 步流程\n\n1. **读取素材**:`siming_task { action: \"context\", taskId: \"<任务id>\" }` 取 archNotes 累积素材 + 各节点 decisions + review + 会话上下文中的重大决策(PRD/技术方案/E2E 设计)\n2. **产出「架构信息修改计划」**:按 分类 × 模块 × 决策主题 组织(架构决策任务无关,不绑定 <taskId>)。\n **写入要求(产出计划前逐条自查——违反 = 计划打回)**:① 简洁(每条一屏内可读)② 零基础可懂(用「行为与结果」语言,不用函数名/实现术语;必要的命令/路径/配置键可保留但须自解释)③ 对后续任务有帮助(写规则与约束,不写事件经过)④ 任务无关(不写评审轮次/返工/谁裁定等过程叙事——来源细节留在任务记录)⑤ 演进优先(同主题已存在则 edit 演进含退役标注,不新增重复条目)。完整版见项目架构文档目录的 README。\n\n ```\n 架构信息修改计划:\n 技术架构 · {模块名}:\n + {决策主题}(来源节点)\n 决策:{决策点} = {结论}\n 约束:{后续规则}\n 影响面:{受影响模块}\n ```\n\n3. **⏸ 人工 review(强制暂停点)**:呈现计划给用户审核。通过 → 步骤 4;放弃 → 不写入(任务记录保留作历史);全部无新增 → 显式记录跳过判定。**禁止跳过此步骤直接写入**。\n4. **写入/跳过**:通过条目 edit 写入项目架构文档目录(按项目声明)对应分类文档的模块章节(子标题 `### {决策主题}`);同主题已存在 → edit 演进而非新增。项目设有架构索引 skill → 同步更新索引。\n5. **提交**:按项目声明的 git 流程 commit(有远端则 push)。\n\n### 完成判定(架构信息归档独立判定 — 不依赖主完成判定)\n\n- [ ] archNotes/decisions 素材已读取\n- [ ] 架构信息修改计划已产出(写入要求 5 条自查通过)\n- [ ] 用户 review 已完成(通过/放弃/无新增三者必有其一且留痕)\n- [ ] 通过条目已写入 + 索引已更新(或显式判定跳过)\n- [ ] 提交完成(按项目 git 流程)\n\n### 不得继续(架构信息归档独有)\n\n- 计划未经用户 review 直接写入 → 违规\n- 全部「无新增」却未显式记录跳过判定 → 违规(跳过必须显式,禁止静默)\n\n## 质量 Skill 表\n\n| 角色 | Agent | Skill | 职责 |\n|------|-------|-------|------|\n| Executor | test-executor | dev-workflow-tester | 全量回归跑测试 |\n| Diagnoser | 主会话 | 系统化根因排查流程 | 全量回归 FAIL 修复 |\n| Acceptor | 主会话 | — | 验收确认事实对照 |\n| Archiver | flow-executor | `dev-workflow-buddy` | 归档 |\n\n---\n\n## 完成判定\n\n> **架构信息归档独立完成判定**:见上方「架构信息归档」章节(不在此处重复)。本节判定仅覆盖验收归档节点前段(到 验收归档 为止)。\n\n**流程步骤映射**:\n- [ ] 全量回归:全量测试已执行(所有活跃轨道 100% pass)\n- [ ] 不变量验证:不变量已全部 PASS(Backend 11 / UI 9)\n- [ ] 不变量验证:回归 Diff 无 NEW regression(STABLE_FAIL 已评估)\n- [ ] 验收确认:已获用户显式确认(引用确认原文;已知问题逐条判定,H8 满足)\n- [ ] 归档:flow-executor 已完成验收归档(记录追加 + 状态流转由任务状态机自动承载)\n- [ ] 架构信息归档:上方「架构信息归档」章节的独立完成判定全部 ✅(架构信息归档完成才是流程终止信号)\n\n**独立性约束**:\n- [ ] 验收基于本次实际测试结果 + 历史 code-reviewer 审查引用,不得伪造\n- [ ] 归档操作针对当前任务(<taskId>),不批量处理\n\n---\n\n## 不得继续\n\n- 任何 NEW regression 未修复\n- 不变量有 FAIL 且非已知问题\n- **涉及后端 API 的 UI 任务未跑联调冒烟(H5)或联调 FAIL**\n- 0 Critical 未满足(H6)\n- 用户未显式确认验收(确认须为显式肯定表达 + 引用原文;提问/评估 ≠ 确认)\n- 破坏功能完整性的已知问题未修复且无用户显式接受风险原文(H8)\n- merge 冲突且无法自动解决 / push 被拒绝\n\n## ▶ 直接继续\n\n架构信息归档完成后流程终止,不再有任何后续步骤。此时才可推荐下一个任务(HARD GATE「临时文件目录」)。\n\n> 完整顺序:用户确认验收 → 验收归档(flow-executor)→ 架构信息归档(主会话,5 步流程)→ 流程终止。\n\n### Rejection → Kickback\n\n| 失败项 | 打回到 | 原因 |\n|--------|--------|------|\n| 语法验证/语义验证 | 后端编码 / UI 组件开发 | 代码质量 |\n| 集成验证/smoke | 后端编码 | API 问题 |\n| 回归验证/E2E | 单测开发 / E2E 开发 | 测试不足 |\n| H5 联调冒烟 | UI 组件开发 | 补联调测试 |\n| 不变量 FAIL | 对应轨道编码节点 | 回归问题 |\n\n---\n\n## 轨道差异\n\n| 维度 | Backend | UI |\n|------|---------|-----|\n| 测试层 | 单测(框架按项目 AGENTS.md「测试范式」)+ E2E | Playwright MCP |\n| 不变量数 | 11(4 类) | 9(3 类) |\n| 回归基线 | E2E report baseline | Screenshot baseline |\n| 执行方式 | Maven CLI | Playwright MCP |\n\n> 集成验证前后端联调:涉及后端 API 的任务,验收归档的「全量回归」必须用真实后端 + 真实 HTTP 请求跑联调冒烟。纯 UI 任务(无后端依赖)N/A。\n\n",
|
|
290
|
+
"category": "process",
|
|
291
|
+
"version": "2.0.7",
|
|
292
|
+
"references": [],
|
|
293
|
+
"scope": "global"
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"name": "track-code",
|
|
297
|
+
"description": "",
|
|
298
|
+
"content": "# 后端编码 — Node/TS 后端轨道\n\n> 将技术方案转化为可编译的 TypeScript 生产代码(项目源码目录的生产代码(构建与类型检查按项目命令通过))。\n\n## Agent 配置\n\n| 角色 | Agent | Model | Skills |\n|------|-------|-------|--------|\n| Implementer | **主会话(一律,编码不委派)** | 主会话模型 | `code-philosophy` |\n| Verifier | `code-reviewer` subagent(**两轮独立调用**,新 session 各启,编排见执行动作第 6 步) | main-worker | ①架构/规范:`arch-review`, `code-philosophy` ②设计-实现一致性:`design-implementation-consistency` |\n\n> **Node/TS 轨无 `java-constraints` skill**:架构约束 + 编码规范内联在 `config-node.md` §五(Layer A/B/C)。主会话编码前从 `config-node.md` §五 + 项目 AGENTS.md 读取对齐。\n>\n> **Worker/Verifier 分离**: Implementer(主会话)实现 → `code-reviewer` 全新上下文审核。Verifier 不继承编码上下文,从文件读取结果零偏差审核。\n\n---\n\n## 🔒 HARD GATE — 编码阶段职责边界\n\n> **本节为 HARD GATE,违反即判定子 Agent 任务失败,主 Agent 必须回滚其所有改动。**\n\n### 核心规则:只改生产代码,不动验证代码\n\n「后端编码」的唯一职责:将技术方案转化为可编译的生产代码。测试、验证、适配工作留给后续步骤(单测/E2E 节点)。\n\n| 判断维度 | 属于 后端编码 | 属于 单测/E2E 节点 |\n|----------|-------------|------------------|\n| 变更目的 | 实现业务功能逻辑 | 验证业务功能是否正确 |\n| 文件性质 | 被测代码(项目源码目录,按项目 AGENTS.md 文件约定) | 验证代码(项目声明的测试文件模式/目录) |\n| 依赖变更 | 技术方案中明确要求的新依赖 | 适配生产代码签名变更 |\n\n### 禁止行为\n\n1. **修改任何 `*.test.ts` 文件** — 即使现有测试因生产代码签名变更而编译失败,这是预期行为,不要修复。\n2. **自行添加运行时依赖** — 不要修改项目包管理依赖清单的生产依赖,除非技术方案明确列出且经主 Agent 审核。devDependencies(测试工具等)同理。\n3. **修改构建配置** — 包括 `tsup.config.ts` / `vitest.config.ts` / `turbo.json` / `tsconfig.base.json`。\n4. **以\"让测试通过\"为目的修改任何文件** — 后端编码的通过标准是\"生产代码 typecheck + build 通过\",不是\"测试通过\"。\n5. **单方面执行技术方案范围外的决策**(HARD GATE) — 编码中发现的技术决策(死代码删/留、顺手重构、命名改名、范围扩张)**必须显式抛给用户确认**,禁止自行决定。即使看似\"明显的清理\"也必须先问。用\"和其他接口一致\"给范围外动作背书 = 违规。\n\n### 编码中发现决策的处理协议(对应禁止行为 #5)\n\n| 发现类型 | 正确做法 | 错误做法(禁止) |\n|---------|---------|---------|\n| 死代码(零引用导出/函数) | ⏸ 抛出:\"发现 X 零引用,建议删除,确认?\" | 禁止直接删;禁止删后恢复来回折腾 |\n| 顺手重构(命名/结构优化) | ⏸ 抛出:\"发现 X 可优化为 Y,是否纳入本任务?\" | 禁止以\"一致性\"名义混入改名 |\n| 范围扩张(发现需改技术方案外的代码) | ⏸ 抛出:\"发现需额外改 X,是否扩展范围?\" | 禁止自行扩展后包装成\"一致性\" |\n| 注释/格式调整 | 仅技术方案明确要求的注释可改;其余不动 | 禁止顺手清理\"不顺眼\"的注释(HARD GATE: 编码时除了明确有调整的注释能修改外,禁止清除注释) |\n\n> **原则**:技术方案 = 授权范围。范围外的每一个动作都是独立决策,必须显式化。把多个决策混进一个\"一致性\"动作里绕过确认 = HARD GATE 违规。\n\n### 编码自律约束段(主会话编码时逐条遵守,来源同 HARD GATE)\n\n```\n## 🔒 后端编码 — 编码阶段职责边界\n\n唯一职责:将技术方案转化为可编译的 TypeScript 生产代码(生产代码 = `packages/*/src/` 下源码,非 `*.test.ts`)。\n\n### 可以做(通用编码纪律)\n- 修改 `packages/*/src/` 下的业务源码与配置文件(按技术方案要求)\n- 使用 Zod schema 校验所有外部输入(HTTP body/param/query、env、MCP args)\n- 遵循项目的分层架构与响应/异常/事务约定(**栈特定细节见下方「栈特定约束」段**)\n\n### 绝对不能做(违反即返工)\n- 禁止修改 `*.test.ts` 文件(即使现有测试因生产代码签名变更而编译失败,这是预期行为,不要修复)\n- 禁止修改 `packages/*/package.json`(除非技术方案明确要求且经用户确认)\n- 禁止修改 `tsup.config.ts` / `vitest.config.ts` / `turbo.json` / `tsconfig.base.json` 等构建配置\n- 禁止以\"让测试通过\"为目的修改任何文件\n\n### 遇到测试编译失败时\n这是正常现象。正确做法:忽略测试编译错误,确保生产代码 typecheck + build 通过即可(命令见项目 AGENTS.md COMMANDS)。测试适配在后续步骤 单测/E2E 节点 专项处理。\n\n### TypeScript 编码规范(来自 config-node skill §五 Layer B)\n- 禁 `any` / `as` 断言(`as any` / `as unknown as T`)\n- 禁 `enum`(用 `as const` 对象 + union type 替代)\n- ESM `.js` 扩展名(`verbatimModuleSyntax: true`,相对 import 用 `.js`)\n- `import type` 分离类型导入\n- `noUncheckedIndexedAccess`:数组/对象索引返回 `T | undefined`,必须 null check\n- `exactOptionalPropertyTypes`:可选属性不能赋 `undefined`\n- 错误处理:`throw new AppError(...)` 用于不可预期错误;`safeParse()` / Result type 用于可预期失败;禁止空 `catch (e) {}`\n- `__dirname` 替代:`import.meta.dirname`(Node 22+)或 `fileURLToPath(new URL('.', import.meta.url))`\n\n### 【栈特定约束】(主会话编码前自查)\n\n> ⚠️ **编码前自查纪律(HARD GATE)**:主会话编码前**必须直接读取任务所属项目的项目 AGENTS.md**「文件约定」「栈特定约束」「配置管理」三节(禁止依赖已压缩的 session 记忆)。任一节缺失或为空(未填充占位符)→ **⏸ 暂停询问用户**,待栈信息补齐再编码。禁止在栈信息缺失时开始编码(将无法正确分层/命名/响应包装)。\n\n**自查三节要点(从项目 AGENTS.md 读取)**:\n- **「文件约定」**:包结构 / 分层模型 / 各层命名 / routes/repos/schemas 等存放路径 / 响应包装类型 / DTO 推导方式(`z.infer`)\n- **「栈特定约束」**:持久层技术(MongoDB driver)/ 日志框架 / 依赖注入风格(函数式参数传递)/ 安全机制 / 语言版本约束 / 静态分析工具(tsgo/oxlint)\n- **「配置管理」**:配置工具(环境变量 + Zod env schema)/ 配置 key 约定(`SIMING_*` 前缀)\n\n多项目工作区时,主会话按**任务所属项目**读对应项目 AGENTS.md。\n```\n\n---\n\n## 执行动作\n\n1. 读取技术方案,提取 TypeScript 实现需求清单\n2. 主会话直接编码(编码一律不委派,见 项目 AGENTS 编排文件「编码 delegation 决策」;编码前按下方「编码自律约束段」自查栈信息三节)\n3. 按项目分层架构实现(分层模型、各层职责、命名、响应包装、事务边界、DTO 推导等栈特定约定见项目 AGENTS.md「文件约定」与「栈特定约束」):\n - **持久层**(core/src/store/repos/):Zod schema 定义 document 结构 + Repository 函数(接收 `client: SimingClient`)+ MongoDB CRUD;事务用 `withTransaction(client, fn)` 包装\n - **业务层**(core/src/task/ + core/src/dag/ + core/src/sync/):状态机逻辑 + gate 校验 + DAG 实例化 + sync 引擎\n - **HTTP 层**(server/src/routes/):Hono routes(`OpenAPIHono` + `createRoute()` + Zod schema `.openapi('Name')` 自动注册)+ `c.req.valid('json'/'param')` 类型安全提取\n - **MCP 层**(cli/src/mcp/):MCP tool 定义(复用 CLI handler 函数 + `@modelcontextprotocol/sdk` 协议适配)\n - **转换**:MongoDB document ↔ API response 通过 Zod schema 转换(`z.infer<typeof Schema>`);不直接暴露 MongoDB 原始 BSON\n4. 配置 key 管理(涉及新增 env 时):按项目 AGENTS.md「配置管理」约定,用 Zod schema 启动时一次性解析(fail-fast);新增 key 须在 项目环境说明文档(按项目声明) 文档化\n5. MongoDB 变更管理:index 变更有显式 `createIndex()` 调用(在 repo 初始化或 migration 脚本中);schema validation(JSON Schema at DB level)做兜底\n6. **🔒 编码完成后必须 code-reviewer 审查(HARD GATE,禁止跳过)**——**两轮独立 code-reviewer,各自新 session**:\n - 主 Agent 加载 workflow-discipline(委派骨架) skill\n - **审查 ① 架构/规范审查**(新 session):委派 code-reviewer subagent(skill 固化绑定自动加载) —— 架构权衡 + 分层规范(config-node.md §五 Layer B)\n - **审查 ② 设计-实现行为一致性审计**(新 session):委派 code-reviewer subagent(skill 固化绑定自动加载) —— 钻入函数体追踪数据流/边界/副作用,检测\"形式匹配但实质偏离\"(伪批量、吞异常、事务漏洞、副作用顺序错位)\n - **顺序**:①先(架构层问题先暴露修复)→ ②后(钻函数体深度审计)\n - **fix-pass 独立**:两审查维度正交(架构 vs 行为),各自独立 re-verify;修①的问题不必重跑②,反之亦然。各自最多 3 轮,3 轮不通过 → ⏸ 升级用户决策\n - **两轮均 PASS 才算编码节点审查通过**;PASS 由两次 code-reviewer 本次输出判定,主会话不得自审\n\n## 质量 skill(主会话编码必载)\n\n| 委派对象 | 固化绑定 skill | 说明 |\n|---------------|-------------------|------|\n| 主会话(Node/TS 编码) | `code-philosophy` | 编码哲学与规范 |\n\n> Node/TS 轨无 `java-constraints` skill;架构约束 + 编码规范内联在 `config-node.md` §五,主会话编码时对齐。\n> 单测相关的测试规范在 `config-node.md` §五 Layer C + vitest 2 官方文档约束,单测设计节点加载,本步骤不写测试。\n\n## 数据库/配置变更增量记录(通用纪律)\n\n> 任何数据库 schema/配置变更必须有可追溯的增量记录,随编码 commit 提交。无变更时完成判定中显式标注 N/A,禁止静默跳过。\n\n| 变更类型 | 记录要求 |\n|---------|---------|\n| 数据库 index 变更 | 显式 createIndex() 调用迁移文件(位置按项目声明),含 index options |\n| 数据库 schema validation | 迁移文件中显式 collMod validator 变更 |\n| 新增配置 key | 项目声明的环境说明文档追加(用途/默认值/取值范围) |\n| 配置 schema 变更 | 纳入项目配置解析 schema,启动时 fail-fast |\n\n**幂等性**:迁移调用须幂等(重复执行无副作用);validator 变更前先检查现状。\n\n**禁止**:为让测试通过修改 test database 的 validator(同步须基于真实 schema 变更,非测试适配)。\n## 构建命令\n\n> **CLI 日志落盘(HARD GATE)**:所有构建/测试命令必须按 项目声明的命令日志落盘纪律(若有) 落盘。\n\n> 构建命令与日志落盘方式按项目 AGENTS.md COMMANDS 执行(未声明的命令 → 向用户确认,禁止臆测)。\n\n## 完成判定\n\n**流程步骤映射**(第 1 层):\n- [ ] 技术方案已读取,TypeScript 实现需求清单已提取\n- [ ] 编码已由主会话直接完成(编码不委派)\n- [ ] 分层实现已按项目分层架构完成(具体分层与命名见项目 AGENTS.md「文件约定」)\n- [ ] 涉及新增配置时:已按项目 AGENTS.md「配置管理」约定写入,每个 key 带注释;不涉及时:N/A\n- [ ] MongoDB 变更记录:涉及 index/schema validation 时已产出 migration 脚本;不涉及时:N/A\n- [ ] 配置变更记录:涉及新增 env key 时已在 项目声明的环境说明文档与配置 schema 同步更新;不涉及时:N/A\n- [ ] 已加载 workflow-discipline(委派骨架) skill,code-reviewer (Verifier) 已调用审查并通过(PASS 必须来自 code-reviewer 本次审查输出,不得引用历史审查或自审)\n\n**完整性约束**(第 2 层):\n- [ ] 涉及新增配置时:配置文件已按项目约定实际写入(非仅声明已写入)\n- [ ] MongoDB migration 脚本 / 项目环境说明文档(按项目声明) 更新已实际产出(非仅声明已产出)\n- [ ] 项目分层架构各层均有新增/修改的 TypeScript 源文件(具体层名/路径见项目 AGENTS.md「文件约定」)\n\n**独立性约束**(第 3 层):\n- [ ] TypeScript 代码已独立产出(产出路径:`packages/*/src/` 下项目包结构,具体见项目 AGENTS.md「文件约定」)\n- [ ] 不得引用技术方案章节替代实际编码(技术方案是设计产出物,后端编码是实现产出物,两者不可替代)\n\n## 不得继续的情况\n\n- typecheck 或 build 失败且多次修复(≤3 次)未果,需人工介入排查\n\n## ▶ 直接继续(禁止暂停询问)\n\n完成判定全部 ✅ 后,**先执行 git commit 保护编码成果**:\n\n```bash\ngit add -A\ngit commit -m \"feat(<taskId>): 编码完成 - {任务标题简要描述}\"\n```\n\ncommit 完成后:\n2. **直接继续 → 单测设计**(Node/TS 轨道),不得中断要求确认。\n",
|
|
299
|
+
"category": "process",
|
|
300
|
+
"version": "2.0.6",
|
|
301
|
+
"references": [],
|
|
302
|
+
"scope": "global"
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"name": "track-component",
|
|
306
|
+
"description": "",
|
|
307
|
+
"content": "# UI 组件开发 — UI 前端轨道\n\n> 将技术方案(组件树/路由/状态管理/API 对接)转化为可构建的前端组件代码(React 19 + TypeScript 5.8 + Tailwind CSS 4 + Radix UI primitives)。产出:项目前端源码目录下组件/类型/样式(构建与类型检查按项目命令通过)。\n\n## Agent 配置\n\n| 角色 | Agent | Model | Skills |\n|------|-------|-------|--------|\n| Implementer | **主会话(一律,编码不委派)** | 主会话模型 | `ui-implementation`, `ui-constraints` |\n| Verifier | code-reviewer subagent(**两轮独立调用**,新 session 各启,编排见执行动作第 5 步) | main-worker | ①前端规范:`frontend-consistency`, `ui-constraints`, `frontend-philosophy`, `ui-implementation` ②设计-实现一致性:`design-implementation-consistency` |\n\n> **Worker/Verifier 分离**: Implementer(主会话)实现 → code-reviewer 全新上下文审核。\n\n---\n\n## 🔒 HARD GATE — 编码阶段职责边界\n\n> **本节为 HARD GATE,违反即判定子 Agent 任务失败,主 Agent 必须回滚其所有改动。**\n\n### 核心规则:只改生产代码,不动验证代码\n\n「UI 组件开发」的唯一职责:实现业务组件和交互逻辑。测试、E2E、视觉验证留给 UI 视觉验证和验收归档。\n\n| 判断维度 | 属于 UI 组件开发 | 属于 UI 视觉验证 / 验收归档 |\n|----------|-----------|------------------|\n| 变更目的 | 实现组件 UI + 交互逻辑 | 验证视觉质量 / 交互正确性 |\n| 文件性质 | 生产代码(组件 / 样式 / 类型) | 验证代码(Playwright 脚本 / 测试配置) |\n| 依赖变更 | 技术方案中明确要求的新依赖 | 适配验证工具链 |\n\n### 禁止行为\n\n1. **修改任何测试文件** — 包括 Playwright E2E 脚本、Jest/Vitest 测试文件、测试 fixture。\n2. **自行添加构建依赖** — 不要修改 `package.json`,除非技术方案明确列出且经主 Agent 审核。\n3. **修改构建配置** — 包括 Vite/Webpack/TypeScript 配置、ESLint/Prettier 规则。\n4. **以\"让测试通过\"为目的修改任何文件** — UI 组件开发的通过标准是\"生产代码编译通过\",不是\"测试通过\"。\n\n### 编码自律约束段(主会话编码时逐条遵守,来源同 HARD GATE)\n\n```\n## 🔒 UI 组件开发 — 编码阶段职责边界\n\n唯一职责:将技术方案转化为可构建的前端组件代码。\n\n### 可以做\n- 创建 React 组件、TypeScript 类型定义、CSS 样式文件\n- 遵循项目组件规范(Tailwind CSS 4 CSS-only 配置 + Radix/Base UI primitives)\n- 实现所有交互状态的视觉反馈(loading / empty / error / populated)\n- 实现响应式布局(移动端适配)\n- 实现基础可访问性(语义化标签、ARIA 属性、键盘导航)\n- 表单校验(Zod + React 19 Actions: `useActionState` / `useFormStatus` / `useOptimistic`)\n\n### 绝对不能做(违反即返工)\n- 禁止修改任何测试文件 — Playwright / Vitest / 测试 fixture\n- 禁止修改 `packages/web/package.json`(除非技术方案明确要求且经用户确认)\n- 禁止修改 Vite / TypeScript / PostCSS 配置(`tailwind.config.js` 不存在,Tailwind 4 用 CSS-only 配置 `@theme`)\n- 禁止以\"让测试通过\"为目的修改任何文件\n- 禁止使用 `any` 类型(Props 接口必须完整类型标注)\n- 禁止使用 `forwardRef`(React 19 中 ref 是普通 prop,`forwardRef` 已 deprecated)\n\n### 遇到测试编译失败时\n这是正常现象。正确做法:忽略测试错误,确保生产代码构建与类型检查(命令按项目 AGENTS.md)通过即可。测试适配在 UI 视觉验证和验收归档专项处理。\n```\n\n---\n\n## 执行动作\n\n1. 读取技术方案,提取 UI 实现需求清单(组件树 / 路由 / 状态管理 / API 对接)\n2. 主会话直接编码(编码一律不委派,见 项目 AGENTS 编排文件「编码 delegation 决策」;遵守上方「编码自律约束段」)\n3. 每个组件实现遵循 `ui-implementation` 3-Pass 协议:\n - **Pass 1 — 骨架**:组件结构 + Props 接口 + 状态声明\n - **Pass 2 — 逻辑**:事件处理 + 数据流 + 副作用(useEffect / watch)\n - **Pass 3 — 细化**:样式 + 动画 + 边界处理 + 可访问性\n4. 每个数据组件覆盖 4 种状态:loading / empty / error / populated\n5. **🔒 编码完成后必须 code-reviewer 审查(HARD GATE,禁止跳过)**——**两轮独立 code-reviewer,各自新 session**:\n - 主 Agent 加载 workflow-discipline(委派骨架) skill\n - **审查 ① 前端规范审查**(新 session):委派 code-reviewer subagent(skill 固化绑定自动加载) —— 编码风格 + 3-Pass + 四态 + 可访问性规范\n - **审查 ② 设计-实现行为一致性审计**(新 session):委派 code-reviewer subagent(skill 固化绑定自动加载) —— 方案行为 vs 实现行为比对(如方案要求四态覆盖 loading/empty/error/populated 实现漏了某态、事件处理与数据流与方案不符、副作用时机错位、伪加载状态)\n - **顺序**:①先(前端规范问题先暴露修复)→ ②后(钻组件实现深度审计)\n - **fix-pass 独立**:两审查维度正交(规范 vs 行为),各自独立 re-verify;修①的问题不必重跑②,反之亦然。各自最多 3 轮,3 轮不通过 → ⏸ 升级用户决策\n - **两轮均 PASS 才算 UI 编码节点审查通过**;PASS 由两次 code-reviewer 本次输出判定,主会话不得自审\n\n## 质量 skill(主会话编码必载)\n\n| 委派对象 | 固化绑定 skill | 说明 |\n|---------------|-------------------|------|\n| 主会话(React 编码) | `code-philosophy`, `frontend-philosophy`, `frontend-consistency`, `ui-implementation` | UI 编码全部加载 |\n\n## 构建命令\n\n> **CLI 日志落盘(HARD GATE)**:`tsc`/`npm run build`/`npm run lint` 必须日志落盘按项目声明。\n\n```bash\n# 类型检查\n# 日志落盘按项目声明\n# typecheck 命令按项目 AGENTS.md COMMANDS\n\n# 构建验证\n# 日志落盘按项目声明\n# build 命令按项目 AGENTS.md COMMANDS\n\n# 代码规范(oxlint)\n# 日志落盘按项目声明\n# lint 命令按项目 AGENTS.md COMMANDS\n```\n\n## 完成判定\n\n**流程步骤映射**(第 1 层):\n- [ ] 技术方案已读取,UI 实现需求清单已提取\n- [ ] 编码已由主会话直接完成(编码不委派)\n- [ ] 每个组件实现已遵循 `ui-implementation` 3-Pass 协议(骨架→逻辑→细化)\n- [ ] 每个数据组件已覆盖 4 种状态(loading / empty / error / populated)\n- [ ] 已加载 workflow-discipline(委派骨架) skill,code-reviewer (Verifier) 已调用审查并通过(PASS 必须来自 code-reviewer 本次审查输出,不得引用历史审查或自审)\n\n**独立性约束**(第 3 层):\n- [ ] 组件代码已独立产出(产出路径:`packages/web/src/components/`、`packages/web/src/pages/` 等前端代码目录下的 TSX 文件)\n- [ ] 不得引用技术方案「组件树/状态管理」章节替代实际编码(技术方案是设计产出物,UI 组件开发是实现产出物,两者不可替代)\n\n## 不得继续的情况\n\n- 构建失败且多次修复(≤3 次)未果,需人工介入排查\n- review 连续 3 轮不通过 → ⏸ 暂停请用户决策\n\n## ▶ 直接继续(禁止暂停询问)\n\n完成判定全部 ✅ 后,**先执行 git commit 保护编码成果**:\n\n```bash\ngit add -A\ngit commit -m \"feat(<taskId>): 组件开发完成 - {任务标题简要描述}\"\n```\n\ncommit 完成后:\n1. 归档「UI 组件开发」节点(主会话直接执行小步命令):record set(summary:变更文件清单 + 构建验证 + code-reviewer 审查结果)+ record check add(完成判定逐条)+ artifact add --type code --path(commit hash);流转由任务状态机自动承载。详见 dev-workflow-buddy skill。\n2. **直接继续 → UI 视觉验证**(UI 轨道),不得中断要求确认。\n",
|
|
308
|
+
"category": "process",
|
|
309
|
+
"version": "2.0.5",
|
|
310
|
+
"references": [],
|
|
311
|
+
"scope": "global"
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"name": "workflow-discipline",
|
|
315
|
+
"description": "开发流程执行纪律(全节点通用 HARD GATE):Worker/Verifier 分离、审查轮次、暂停点确认判定、授权边界、任务边界、节点纪律速查、委派七段式",
|
|
316
|
+
"content": "# workflow-discipline — 开发流程执行纪律(全节点通用 HARD GATE)\n\n> 所有节点执行者必载。任何「任务简单/用户要急/改动只有一行」都不构成折扣理由——越是看似简单的任务,判断越容易藏在盲区。\n\n## 1. Worker/Verifier 分离\n\n- Worker(设计/编码)与 Verifier(审查)必须是不同 session;Verifier 只读不改代码\n- **零预设投喂**:给 Verifier 只投评审对象路径 + 客观约束 + 参照位置;禁投设计结论/决策理由/\"用户确认\"字样\n- 审查 PASS 由 reviewer 产出:修复 CRITICAL 后必须重新审查(re-verify),主会话不得自行声明通过\n- 交互式审查 ≤3 轮:问题清单 → 逐条修复/不修复(记录理由)→ re-verify;连续 3 轮不通过 → 暂停请用户决策\n- 不修复理由必须在节点记录中留痕\n- 增量评审只缩小审查范围(改了什么审什么),不缩减审查标准\n\n## 2. 暂停点确认判定\n\n仅用户**显式肯定表达**构成确认,节点记录须引用确认原文;用户的提问/评估/条件句/新诉求一律不是确认——回应问题本身,继续等待显式确认。\n\n## 3. 授权边界\n\n| 授权类型 | 作用域 | 是否覆盖自动审查 |\n|---------|--------|----------------|\n| 决策授权 | \"接受推荐方案/接受风险/跳过人工审批\" | **不覆盖** reviewer 审查与 re-verify |\n| 流程授权 | 显式指名跳过某步骤(\"跳过 re-verify\") | 仅覆盖被显式指名的步骤 |\n\n\"跳过人工审批\"只覆盖用户侧暂停点,绝不扩大解释为跳过自动质量门。\n\n## 4. 任务边界(P0)\n\n- 每个 DAG 节点必须有显式完成判定,**全部 ✅ 才能推进**;禁止\"测试通过即完成\"\"核心代码改完即完成\"\"验收 merge 完即任务结束\"\n- 任务未走完架构信息归档前,**禁止**推荐/询问下一个任务、切换任务上下文\n- 架构信息归档完成(或显式判定跳过并留痕)才是流程终止信号,之后才可输出任务总结\n\n## 5. 节点纪律速查\n\n- 编码一律主会话自做(不委派);设计文档(PRD/技术方案/测试设计)主会话直接产出\n- 测试执行一律委派 test-executor(主会话禁止亲自跑测试命令)\n- Track 阶段只改生产代码,不动验证代码;测试节点显式判定覆盖,禁止\"现有覆盖\"盖章\n- 范围外动作(死代码删留/顺手重构/范围扩张)= 独立决策,必须显式抛给用户\n- 本任务改动破坏的测试禁止定性\"pre-existing\"拒绝修复;禁止以预算为由给失败测试加 skip(预算压力是上升暂停的理由)\n- 已知问题逐条判定,破坏功能完整性必须验收前修复,唯一豁免 = 用户显式接受风险原文\n- 每个 git 操作前确认分支(分支模型按项目 AGENTS.md 声明)\n\n## 6. 委派 prompt 骨架(七段式)\n\n`IDENTITY(身份+只读性+禁止再委派)→ TASK → EXPECTED → CONTEXT(按角色区分投喂)→ CONSTRAINTS(节点 HARD GATE 原文)→ MUST DO / MUST NOT DO → VERIFICATION`\n\n- 首段 IDENTITY 必填;借用了其他 skill 输出格式时必须明示\"仅指输出 schema\"\n- subagent 产出后立即结束,多轮交互由主会话驱动\n",
|
|
317
|
+
"category": "process",
|
|
318
|
+
"version": "1.0.0",
|
|
319
|
+
"references": [],
|
|
320
|
+
"scope": "global"
|
|
321
|
+
}
|
|
322
|
+
],
|
|
323
|
+
"agents": [
|
|
324
|
+
{
|
|
325
|
+
"name": "code-reviewer",
|
|
326
|
+
"description": "代码评审(分层/HTTP/持久层 + 设计-实现一致性)",
|
|
327
|
+
"systemPrompt": "你是 siming 开发流程的代码评审者(只读 Verifier,新 session 审查)。不修改任何文件、不委派其他 subagent、不执行协调流程,产出后即结束。\n职责:评审代码变更——分层架构约束、接口规范、持久层规范(按轨道配置 skill 的约束清单)+ 设计-实现行为一致性(方案承诺 vs 代码实际行为)。\n纪律:只读;逐条约束核对,不做风格化发挥;引用文件:行号佐证。\n输出:Finding 清单(严重度/位置/问题/建议)+ 总体结论。",
|
|
328
|
+
"boundSkills": [
|
|
329
|
+
"arch-review",
|
|
330
|
+
"design-implementation-consistency"
|
|
331
|
+
],
|
|
332
|
+
"model": "main-worker",
|
|
333
|
+
"version": "1.0.2",
|
|
334
|
+
"tools": [],
|
|
335
|
+
"permissions": [],
|
|
336
|
+
"references": [],
|
|
337
|
+
"scope": "global",
|
|
338
|
+
"function": "reviewer"
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"name": "regression-reviewer",
|
|
342
|
+
"description": "回归分析(不变量验证/Diff 分类)",
|
|
343
|
+
"systemPrompt": "你是 siming 开发流程的回归分析者(只读 Verifier,新 session 审查)。不修改任何文件、不委派其他 subagent、不执行协调流程,产出后即结束。\n职责:分析全量回归报告——契约/数据/可观测/性能类不变量逐项判定;回归 Diff 六类标签(NEW/FIXED/STABLE_PASS/STABLE_FAIL/MISSING_BASELINE/MISSING_CANDIDATE);NEW regression 指出根因方向(禁止\"只改测试让它通过\")。\n输出:不变量判定表 + Diff 分类清单 + 结论。",
|
|
344
|
+
"boundSkills": [
|
|
345
|
+
"exit"
|
|
346
|
+
],
|
|
347
|
+
"model": "main-worker",
|
|
348
|
+
"version": "1.0.2",
|
|
349
|
+
"tools": [],
|
|
350
|
+
"permissions": [],
|
|
351
|
+
"references": [],
|
|
352
|
+
"scope": "global",
|
|
353
|
+
"function": "reviewer"
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
"name": "visual-reviewer",
|
|
357
|
+
"description": "UI 截图多模态 5 维度审核",
|
|
358
|
+
"systemPrompt": "你是 siming 开发流程的视觉审核者(多模态 Verifier)。对 UI 截图做 5 维度审核:状态完整性(loading/empty/error/disabled 覆盖)/ 可访问性 / 组件标准 / 边界场景 / 交互质量。只验证不修复,禁止根因分析与代码编辑,禁止委派。输出:逐截图 PASS/FAIL + 维度问题清单(附截图证据描述)。",
|
|
359
|
+
"boundSkills": [
|
|
360
|
+
"ui-verify",
|
|
361
|
+
"ui-constraints",
|
|
362
|
+
"multimodal-vision"
|
|
363
|
+
],
|
|
364
|
+
"model": "vision-worker",
|
|
365
|
+
"version": "1.0.2",
|
|
366
|
+
"tools": [],
|
|
367
|
+
"permissions": [],
|
|
368
|
+
"references": [],
|
|
369
|
+
"scope": "global",
|
|
370
|
+
"function": "reviewer"
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"name": "test-executor",
|
|
374
|
+
"description": "测试执行(自主环境+执行+结构化报告)",
|
|
375
|
+
"systemPrompt": "你是 siming 开发流程的测试执行者。承接所有测试命令执行:自主环境准备(按项目 AGENTS.md COMMANDS 拉起依赖服务)→ 执行给定命令清单 → 结构化报告。\n纪律:只报事实(PASS/FAIL/统计、log 关键行),不解释原因、不修改任何文件、不委派。执行纪律详见绑定 skill。\n输出(Final Output Contract):每命令 Test Files/Tests 统计 + 失败用例清单(文件:行号+错误原文)+ 环境操作记录 + 清理确认。",
|
|
376
|
+
"boundSkills": [
|
|
377
|
+
"dev-workflow-tester"
|
|
378
|
+
],
|
|
379
|
+
"model": "main-worker",
|
|
380
|
+
"version": "1.0.1",
|
|
381
|
+
"tools": [],
|
|
382
|
+
"permissions": [],
|
|
383
|
+
"references": [],
|
|
384
|
+
"scope": "global",
|
|
385
|
+
"function": "executor"
|
|
386
|
+
}
|
|
387
|
+
],
|
|
388
|
+
"modelAliases": [
|
|
389
|
+
{
|
|
390
|
+
"code": "main-worker",
|
|
391
|
+
"name": "主力模型",
|
|
392
|
+
"realModel": "deepseek/deepseek-v4-flash"
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"code": "vision-worker",
|
|
396
|
+
"name": "多模态视觉模型",
|
|
397
|
+
"realModel": "xiaomi/mimo-v2.5"
|
|
398
|
+
}
|
|
399
|
+
]
|
|
400
|
+
}
|
|
401
|
+
}
|