fix: enforce independent design review gates

This commit is contained in:
dafang
2026-06-30 15:24:07 +08:00
parent 875f77ae19
commit 7170e2d79f
5 changed files with 31 additions and 21 deletions
+9 -8
View File
@@ -14,7 +14,7 @@ description: Feature design review gate。触发人审前审 design/checklist
目标不是替用户做产品判断,而是确认这份 design 已经具备让用户有效 review 和让下游稳定执行的条件需求边界可核对、名词层和编排层有代码事实支撑、steps 可独立验证、checks 能回到 design 证据、风险 / 基线 / 交付物 / 清洁度可被后续 implement、code review、QA 和 acceptance 消费。
> 共享路径与命名约定看 `.codestable/reference/shared-conventions.md`。feature design 的具体结构以目标 `{slug}-design.md` / `{slug}-checklist.yaml` 和项目内共享口径为准。
> 报告语言:plan review / design-review 报告正文默认用**中文**(见 `.codestable/attention.md` 报告语言节);frontmatter / yaml 字段不翻译。
> 报告语言design-review 报告正文必须按 `.codestable/attention.md` 用**中文**;若草稿用了英文,落盘前先改写为中文。frontmatter / yaml 字段不翻译。
---
@@ -50,17 +50,17 @@ description: Feature design review gate。触发人审前审 design/checklist
---
## 独立 Task agent reviewer 增强项
## 独立 Task agent reviewer gate
本阶段默认由当前 agent 做本地方案审查;独立 Task agent reviewer 是增强项,不是硬依赖。检测不到 Task agent 能力、provider 配置或用户明确要求快速完成时,可以继续本地 review并在报告里记录 `Independent reviewer: local-only` / `skipped-by-user`;若需要用户授权降级,先按 `.codestable/reference/approval-conventions.md``approval-report.md`,再让用户选择。
本阶段必须优先启动独立 Task agent reviewer;当前 agent 的本地审查只能作为合并与事实核验,不能替代独立审查。只有运行时确实没有 Task agent 能力、provider 不可用且无法配置或用户在看到降级风险后明确授权,才允许 `local-only` / `skipped-by-user`。批量 design、赶时间、主 agent 自认为风险低,都不是降级理由;需要授权降级,先按 `.codestable/reference/approval-conventions.md``approval-report.md`,再让用户选择。
一旦本轮已经启动独立 Task agent reviewer它就是本轮 review gate 的输入。主 agent 可以先做本地审查草稿,但不能在 reviewer 返回前定稿 `{slug}-design-review.md`、不能给出 `passed`、不能把 design 交给用户确认。reviewer 卡住、失败、权限阻塞或耗时过长时,只能把本轮标成 `blocked` / `independent-review-pending`,让用户决定继续等待、重试 reviewer或明确降级为 local-only review。
一旦本轮应该启动或已经启动独立 Task agent reviewer它就是本轮 review gate 的输入。主 agent 可以先做本地审查草稿,但不能在 reviewer 返回前定稿 `{slug}-design-review.md`、不能给出 `passed`、不能把 design 交给用户确认。reviewer 卡住、失败、权限阻塞或耗时过长时,只能把本轮标成 `blocked` / `independent-review-pending`,让用户决定继续等待、重试 reviewer或明确降级为 local-only review。
**检测由主 agent 在运行时自检自己的工具**,不靠脚本猜环境——主 agent 最清楚自己手上有哪些工具。按 Task agent 选择规则启动独立 Task agent reviewer优先 Paseo subagent否则当前宿主原生 Codex/Claude Task/Agent
1. **有 `mcp__paseo__create_agent` 工具**:优先用 Paseo subagent 做只读独立审查(**首选**:能换 provider做到真正异构审查。启动前先加载 / 读取 `paseo` skill 的当前说明,并遵守它的规则:读取 `~/.paseo/orchestration-preferences.json`,使用 `providers.audit`,不要硬编码 Claude 或 Codex。不要无限轮询运行中的 agent如果 reviewer 已启动但结果未返回,停止在 review gate记录 pending/blocked等待通知或用户决定。
1. **有 `mcp__paseo__create_agent` 工具**必须优先用 Paseo subagent 做只读独立审查(首选:能换 provider做到真正异构审查。启动前先加载 / 读取 `paseo` skill 的当前说明,并遵守它的规则:读取 `~/.paseo/orchestration-preferences.json`,使用 `providers.audit`,不要硬编码 Claude 或 Codex。不要无限轮询运行中的 agent如果 reviewer 已启动但结果未返回,停止在 review gate记录 pending/blocked等待通知或用户决定。
2. **否则有当前宿主原生 Codex/Claude Task/Agent 工具**:用原生 Task agent 做独立上下文审查。如属同类 agent在报告里记录降级和残余风险。
3. **两者都没有**:本地 review记录 `local-only`,并在需要授权降级时写 `approval-report.md`不要伪装启动。
3. **两者都没有**:本地 review 只能在记录 `local-only` 且获得必要授权后定稿;没有授权时报告 `blocked`不要伪装启动。
独立 Task agent reviewer prompt 必须只给原始材料和边界,不透露本地 review 结论:
@@ -100,7 +100,7 @@ description: Feature design review gate。触发人审前审 design/checklist
### 2. 独立审查合并
- 记录主 agent 自检结果:`paseo` / `native-agent` / `local-only`
- 没有启动独立 Task agent reviewer 时,记录原因,本地 review 可以定稿
- 没有启动独立 Task agent reviewer 时,记录确无能力 / provider 不可用 / 用户授权降级;未满足这些条件时不得定稿 `passed`
- 启动 Paseo subagent / 原生 Task agent 后,最终 verdict 必须等 reviewer 返回。
- reviewer 返回后逐条做本地事实核验;能用 design / checklist / 文档 / 代码证据支撑才合并。
- reviewer 失败、权限阻塞、超时或仍在运行时,不要默默降级;报告 `status: blocked`
@@ -263,7 +263,7 @@ Summary: E={n}, C={n}, H={n}, H-only core checks={列表或 none}。
- [ ] 已读取 attention、design、checklist、相关 intent / brainstorm / roadmap / req / arch / compound。
- [ ] 已按 design 声明核验必要代码、接口、类型、组件或命令事实。
- [ ] 已确认 checklist 可解析steps/checks 都可追溯。
- [ ]运行独立 Task agent reviewer 检测,或记录为什么跳过
- [ ] Task agent 选择规则启动独立 reviewer若未启动已记录确无能力 / provider 不可用 / 用户授权降级
- [ ] 如果启动了独立 Task agent reviewer已等到 completed 并逐条本地核验合并 / 驳回 findings否则报告 `status: blocked`,没有进入用户 review。
- [ ] 已审查需求边界、术语、名词层、编排层、挂载点、结构健康度、验收契约、steps/checks、基线、交付物、清洁度。
- [ ] 已检查 Acceptance Coverage Matrix、Feature Design Review Invariants 和 Evidence Confidence Ledger。
@@ -281,6 +281,7 @@ Summary: E={n}, C={n}, H={n}, H-only core checks={列表或 none}。
- roadmap 起头时不检查接口契约,导致 feature 偷偷绕开 roadmap。
- 现状段没读代码就放过implement 阶段才发现设计站不住。
- steps 出现"和 / 以及 / 同时"却不复查是否该拆。
- 把批量 design 或赶时间当成 local-only 降级理由。
- 启动独立 Task agent reviewer 后结果还没回来,就把本地 review 定稿为 passed。
- 外部 reviewer 的结论没经本地事实核验就照抄。
- review 报告没有落盘,导致用户 review 和后续实现没有可追溯输入。
+3 -2
View File
@@ -12,7 +12,7 @@ description: Feature design。触发新功能已清楚需要起草 design/
这一阶段的产出是一份方案文件 `{slug}-design.md`,加上从中抽出的行动清单 `{slug}-checklist.yaml`,以及人审前的 `{slug}-design-review.md`。这些东西后面会被 implement / code review / QA / acceptance 消费,所以这里写错或写漏,下游就跟着错。
> 共享路径和命名约定看 `.codestable/reference/shared-conventions.md`。本阶段一般 feature 目录已经由 brainstorm 创建好了;没有的话在这一步建。
> 报告语言design / plan 正文默认用**中文**(见 `.codestable/attention.md` 报告语言节);frontmatter / yaml 字段不翻译。
> 报告语言design / plan 正文必须按 `.codestable/attention.md` 用**中文**;若草稿用了英文,落盘前先改写为中文。frontmatter / yaml 字段不翻译。
本阶段有三个入口:
@@ -179,7 +179,7 @@ AI 默认翻车的姿势是**不思考就往眼前最顺手的文件里加**。
按 reference.md 模板补齐剩余节(第 0 / 3 / 4 节)。初稿 frontmatter `status: draft`
整稿成型后先落盘 draft design并从 `{slug}-design.md` 抽出 candidate `{slug}-checklist.yaml`。checklist 的 steps/checks 初始都保持 `pending`,用 `validate-yaml.py` 校验。不要等用户确认后才生成 checklist因为人审前的 `cs-feat-design-review` 需要同时审 design 和 checklist 是否对齐。
整稿成型后先确认正文语言符合 `.codestable/attention.md`(默认中文;英文草稿先改写),再落盘 draft design并从 `{slug}-design.md` 抽出 candidate `{slug}-checklist.yaml`。checklist 的 steps/checks 初始都保持 `pending`,用 `validate-yaml.py` 校验。不要等用户确认后才生成 checklist因为人审前的 `cs-feat-design-review` 需要同时审 design 和 checklist 是否对齐。
第 3 节"验收契约"提示:每条写成"输入 / 触发 → 期望可观察结果",覆盖正常 + 边界 + 错误,并补 `Acceptance Coverage Matrix``DoD Contract`;完整模板看 reference.md。
@@ -241,6 +241,7 @@ AI 默认翻车的姿势是**不思考就往眼前最顺手的文件里加**。
用户整体 review 通过,并且:
- [ ] frontmatter 完整(`doc_type` / `feature` / `status=approved` / `summary` / `tags`requirement 字段已对齐
- [ ] design 正文已按 `.codestable/attention.md` 的报告语言落盘默认中文frontmatter / yaml 字段保持机读格式)
- [ ] 第 1 节含"不做什么"和复杂度档位偏离(或明确走默认)
- [ ] 第 2.1 / 2.2 用"现状 → 变化"两段式;接口有示例 + 来源位置;编排层开头有主流程图
- [ ] 第 2.3 挂载点按"删了它 feature 是否消失"判据收紧(一般 3-5 条)
@@ -11,7 +11,7 @@ worktree、review、finish 和 handoff 规则。
1. 读取 `.codestable/attention.md`
2.`.codestable/attention.md` 时视为骨架不完整,提示补齐或运行 `cs-onboard`
3. 不回退读取 `AGENTS.md` / `CLAUDE.md` / `.cursorrules` 等外部 AI 入口文件。
4. 正文报告语言按 `.codestable/attention.md` 的报告语言策略执行frontmatter / yaml 字段不翻译。
4. 正文报告语言按 `.codestable/attention.md` 的报告语言策略执行;默认中文,若草稿用了英文,落盘前先改写为项目语言。frontmatter / yaml 字段不翻译。
`cs-note` 是唯一例外:`.codestable/` 存在但 `attention.md` 缺失时,它可以创建最小分节骨架后写入。
@@ -89,6 +89,12 @@ unit。若 goal 还没有子 unit在 goal iteration 中记录原因,并采
不要把主 agent 的结论泄露进 Task agent prompt。只提供原始产物、审查范围和期望输出。
主 agent 仍负责核验返回 findings并负责所有最终状态写入。
对 review gateroadmap-review、feature design-review、implementation code-review
Task agent 可用时必须启动。批量处理、赶时间、主 agent 已做本地 review 或认为风险低,
都不是 local-only 降级理由。local-only 只在确无 Task agent 能力、provider 不可用且无法
配置,或 owner 明确批准降级时有效;否则报告 `blocked` / `independent-review-pending`
不要写 `passed`
## 独立代码 review
每个执行 worktree 在汇报一批实现完成前,必须触发独立 review。review 是完成 gate
+3 -3
View File
@@ -83,9 +83,9 @@ description: Roadmap goal 编排。触发:完整推进大需求、执行整个
对 roadmap items 里的每个 planned 子 feature按依赖顺序逐个完成 `cs-feat-design` 的候选设计阶段:
- 创建 feature 目录。
-`{feature-slug}-design.md`frontmatter 带 `roadmap` / `roadmap_item`
-`{feature-slug}-design.md`frontmatter 带 `roadmap` / `roadmap_item`,正文按 `.codestable/attention.md` 的报告语言落盘(默认中文)
-`{feature-slug}-checklist.yaml`
- 运行 `cs-feat-design-review`;有 blocking / blocked 时先修订等待 reviewer不进入用户二次确认。
- 运行 `cs-feat-design-review`Task agent 可用时每份 design-review 都必须有独立 reviewer 结果。批量生成多个 feature 不是 local-only 降级理由;有 blocking / blocked / pending 时先修订等待 reviewer 或让用户明确授权降级,不进入用户二次确认。
- 按现有 `cs-feat-design` 约定,把 items.yaml 对应条目更新为 `in-progress` 并填写 `feature` 字段。
- design 必须包含:基线预检、必跑验证命令、交付物、验收场景证据类型、清洁度规则、可独立验证 steps。
@@ -181,7 +181,7 @@ features:
1. roadmap items 是否 DAG无循环依赖。
2. 每个 item 是否已有 design + checklist。
3. roadmap review 是否存在且 `status: passed`,没有 unresolved blocking finding。
4. 每个 item 是否已有 design-review 且 `status: passed`,没有 unresolved blocking finding。
4. 每个 item 是否已有 design-review 且 `status: passed`,没有 unresolved blocking finding,并记录已完成独立 reviewer 或用户明确降级
5. 每份 design 是否已 `status: approved`,且 frontmatter 的 `roadmap` / `roadmap_item` 与 items.yaml 一致。
6. 每个 checklist step 是否可独立验证,且初始 `steps.status``pending``checks.status``pending`
7. 每个 feature 是否有必跑命令 / 基线风险 / 交付物 / 清洁度规则。
+9 -7
View File
@@ -14,6 +14,7 @@ description: Roadmap review gate。触发人审前审 roadmap/items或用
目标不是追求"规划看起来完整",而是确认这份 roadmap 已经具备让用户有效 review 的条件:目标可证伪、范围边界清楚、模块拆分与接口契约可执行、子 feature 可独立验证、依赖 DAG 合理、风险和验证策略提前暴露。
> 共享路径与命名约定看 `.codestable/reference/shared-conventions.md`。roadmap 的具体结构以目标 `{slug}-roadmap.md` / `{slug}-items.yaml` 和项目内共享口径为准。
> 报告语言roadmap-review 报告正文必须按 `.codestable/attention.md` 用**中文**若草稿用了英文落盘前先改写为中文。frontmatter / yaml 字段不翻译。
---
@@ -49,17 +50,17 @@ description: Roadmap review gate。触发人审前审 roadmap/items或用
---
## 独立 Task agent reviewer 增强项
## 独立 Task agent reviewer gate
本阶段默认由当前 agent 做本地规划审查;独立 Task agent reviewer 是增强项,不是硬依赖。检测不到 Task agent 能力、provider 配置或用户明确要求快速完成时,可以继续本地 review并在报告里记录 `Independent reviewer: local-only` / `skipped-by-user`;若需要用户授权降级,先按 `.codestable/reference/approval-conventions.md``approval-report.md`,再让用户选择。
本阶段必须优先启动独立 Task agent reviewer;当前 agent 的本地审查只能作为合并与事实核验,不能替代独立审查。只有运行时确实没有 Task agent 能力、provider 不可用且无法配置或用户在看到降级风险后明确授权,才允许 `local-only` / `skipped-by-user`。批量 roadmap、赶时间、主 agent 自认为风险低,都不是降级理由;需要授权降级,先按 `.codestable/reference/approval-conventions.md``approval-report.md`,再让用户选择。
一旦本轮已经启动独立 Task agent reviewer它就是本轮 review gate 的输入。主 agent 可以先做本地审查草稿,但不能在 reviewer 返回前定稿 `{slug}-roadmap-review.md`、不能给出 `passed`、不能把 roadmap 交给用户确认。reviewer 卡住、失败、权限阻塞或耗时过长时,只能把本轮标成 `blocked` / `independent-review-pending`,让用户决定继续等待、重试 reviewer或明确降级为 local-only review。
一旦本轮应该启动或已经启动独立 Task agent reviewer它就是本轮 review gate 的输入。主 agent 可以先做本地审查草稿,但不能在 reviewer 返回前定稿 `{slug}-roadmap-review.md`、不能给出 `passed`、不能把 roadmap 交给用户确认。reviewer 卡住、失败、权限阻塞或耗时过长时,只能把本轮标成 `blocked` / `independent-review-pending`,让用户决定继续等待、重试 reviewer或明确降级为 local-only review。
**检测由主 agent 在运行时自检自己的工具**,不靠脚本猜环境——主 agent 最清楚自己手上有哪些工具。按 Task agent 选择规则启动独立 Task agent reviewer优先 Paseo subagent否则当前宿主原生 Codex/Claude Task/Agent
1. **有 `mcp__paseo__create_agent` 工具**:优先用 Paseo subagent 做只读独立审查(**首选**:能换 provider做到真正异构审查。启动前先加载 / 读取 `paseo` skill 的当前说明,并遵守它的规则:读取 `~/.paseo/orchestration-preferences.json`,使用 `providers.audit`,不要硬编码 Claude 或 Codex。不要无限轮询运行中的 agent如果 reviewer 已启动但结果未返回,停止在 review gate记录 pending/blocked等待通知或用户决定。
1. **有 `mcp__paseo__create_agent` 工具**必须优先用 Paseo subagent 做只读独立审查(首选:能换 provider做到真正异构审查。启动前先加载 / 读取 `paseo` skill 的当前说明,并遵守它的规则:读取 `~/.paseo/orchestration-preferences.json`,使用 `providers.audit`,不要硬编码 Claude 或 Codex。不要无限轮询运行中的 agent如果 reviewer 已启动但结果未返回,停止在 review gate记录 pending/blocked等待通知或用户决定。
2. **否则有当前宿主原生 Codex/Claude Task/Agent 工具**:用原生 Task agent 做独立上下文审查。如属同类 agent在报告里记录降级和残余风险。
3. **两者都没有**:本地 review记录 `local-only`,并在需要授权降级时写 `approval-report.md`不要伪装启动。
3. **两者都没有**:本地 review 只能在记录 `local-only` 且获得必要授权后定稿;没有授权时报告 `blocked`不要伪装启动。
独立 Task agent reviewer prompt 必须只给原始材料和边界,不透露本地 review 结论:
@@ -97,7 +98,7 @@ description: Roadmap review gate。触发人审前审 roadmap/items或用
### 2. 独立审查合并
- 记录主 agent 自检结果:`paseo` / `native-agent` / `local-only`
- 没有启动独立 Task agent reviewer 时,记录原因,本地 review 可以定稿
- 没有启动独立 Task agent reviewer 时,记录确无能力 / provider 不可用 / 用户授权降级;未满足这些条件时不得定稿 `passed`
- 启动 Paseo subagent / 原生 Task agent 后,最终 verdict 必须等 reviewer 返回。
- reviewer 返回后逐条做本地事实核验;能用文档 / 代码 / items 证据支撑才合并。
- reviewer 失败、权限阻塞、超时或仍在运行时,不要默默降级;报告 `status: blocked`
@@ -255,7 +256,7 @@ Summary: E={n}, C={n}, H={n}, H-only core checks={列表或 none}。
- [ ] 已读取 attention、roadmap、items、相关 req / arch / compound / drafts。
- [ ] 已按 roadmap 声明核验必要代码或命令事实。
- [ ] 已确认 items.yaml 可解析,依赖图无未知节点;有问题已列 finding。
- [ ]运行独立 Task agent reviewer 检测,或记录为什么跳过
- [ ] Task agent 选择规则启动独立 reviewer若未启动已记录确无能力 / provider 不可用 / 用户授权降级
- [ ] 如果启动了独立 Task agent reviewer已等到 completed 并逐条本地核验合并 / 驳回 findings否则报告 `status: blocked`,没有进入用户 review。
- [ ] 已审查目标、范围、模块、接口、feature 原子性、依赖、最小闭环、验证、风险、知识回写。
- [ ] 已检查 Granularity Gate、Goal Coverage Matrix 和 Roadmap Review Invariants。
@@ -273,6 +274,7 @@ Summary: E={n}, C={n}, H={n}, H-only core checks={列表或 none}。
- 不读 requirement / architecture导致规划和现状冲突没发现。
- 接口契约写着"待定"也放过,后续每条 feature 各自发明接口。
- 子 feature 里塞多个可独立验收的交付,却只当一条。
- 把批量 roadmap 或赶时间当成 local-only 降级理由。
- 启动独立 Task agent reviewer 后结果还没回来,就把本地 review 定稿为 passed。
- 外部 reviewer 的结论没经本地事实核验就照抄。
- review 报告没有落盘,导致用户 review 和后续 design 没有可追溯输入。