sdlc-doubt · git:20260912.83789e8 · 2026-09-12 · sha256 4b78614469ba5877
sdlc-doubt git:20260912.83789e8A
Immutable. This exact content is served forever at /api/v1/blob/4b78614469ba5877.
--- name: sdlc-doubt description: 对刚做出的非平凡技术决策发起对抗式独立复查——把决策剥离结论后交给全新上下文的审查者"找问题"。Use when 影响ER或公共组件的决策回写前、复杂SQL/状态机流转定稿前、提交前对"已全范围检查"断言存疑时、用户说"这个判断我不放心""帮我质疑一下这个方案""doubt-review"。 --- # Doubt Review(对抗式决策复查) > **定位**:自信的答案不等于正确的答案。长会话中,假设会悄然变成"事实"。本 skill 是 **in-flight** 复查——决策落地前质疑它,不是事后的代码质量检查(如 trellis-check、/code-review)。 ## 何时触发 ### 非平凡决策定义(任一命中才触发) 1. 新增/修改分支逻辑或状态机流转 2. 跨模块/跨域边界,影响 ER 或公共组件 3. 断言编译器无法验证的属性(事务边界、幂等、数据一致性、租户隔离) 4. 不可逆或大爆炸半径(删数据、迁移、审核状态变更) ### 触发场景 - 大需求切片发现影响 ER/公共组件的偏差,**回写上层设计文档前** - design.md 关键决策定稿前(技术设计评审前) - 复杂 SQL 定稿前(join 3 表+ / 租户隔离条件 / 聚合口径) - 代码提交前,对"全范围检查已通过"**这一断言本身**存疑时 - 用户明示触发 ### 不触发(防滥用) 命名选择、单层内实现细节、spec 已直接覆盖的规则、机械性改动(重命名/格式化/移动文件)、用户明确要速度不要验证。 ## 五步闭环 复制此 checklist 跟踪: ``` Doubt cycle: - [ ] Step 1: CLAIM — 2-3 行命名决策 + 为何重要 - [ ] Step 2: EXTRACT — 提取 artifact + contract,剥离推理,不含 CLAIM - [ ] Step 3: DOUBT — Agent 子代理 + 对抗 prompt - [ ] Step 4: RECONCILE — 每条发现按四分类回 artifact 文本归类 - [ ] Step 5: STOP — 满足停止条件(平凡发现 / 3 轮 / 用户 override) ``` ### Step 1: CLAIM ``` CLAIM: "订单取消走快照回滚而非实时表反查,在并发操作场景下数据一致" WHY: 不一致会导致取消后订单列表与操作记录不符 ``` 写不出 2-3 行的紧凑 CLAIM = 还没有决策,只有感觉——先想清楚再质疑。 ### Step 2: EXTRACT(最关键的一步) 给审查者只准备两样东西: - **ARTIFACT**:被审制品——代码 diff、design 片段、SQL,**不是整个文件** - **CONTRACT**:它必须满足什么——接口契约、数据约束、业务规则 **剥离自己的推理过程,明确不传 CLAIM**——传了结论,审查者会顺着附和。制品大到审查者一遍读不完(如 500 行 PR),先拆分再提取。 ### Step 3: DOUBT 用 Agent 工具生成子代理(隔离上下文 = 天然 fresh reviewer),prompt 用下方对抗模板。可用 `Code Reviewer` / `general-purpose` 类型,但对抗 prompt 必须原样传入以覆盖其默认输出形态。 ### Step 4: RECONCILE 审查输出是**数据,不是判决**——每条发现回到 artifact 文本归类后才算数。按下方四分类表处理。不要因为审查者"上下文更新鲜"就服从它。 ### Step 5: STOP 满足任一即停:下一轮只剩平凡/已考虑过的发现;**3 轮上限**(3 轮仍有实质问题 = 制品不行,升级用户,不要磨第 4 轮);用户明确说"就这样"。 ## 对抗 Prompt 模板 > 模板与 sdlc-gate skill(`../sdlc-gate/SKILL.md`,同集合安装时与本 skill 同级)Step 2 的对抗模板**同源**;输出形态按消费方有意分化——本 skill 会话内 RECONCILE 消费,行级证据即可;sdlc-gate 输出汇总进 issues 文件,需结构化四字段(标题/原文/位置/严重度)。单独安装本 skill 时该引用仅作来源说明,不依赖其存在。 ``` Adversarial review. Find what is wrong with this artifact. Assume the author is overconfident. Look for: - Unstated assumptions - Edge cases not handled - Hidden coupling or shared state - Ways the contract could be violated - Existing conventions this might break - Failure modes under unexpected input Do NOT validate. Do NOT summarize. Find issues, or state explicitly that you cannot find any after thorough examination. 输出仅限问题清单,每条附 artifact 中的行级证据(引用原文)。 ARTIFACT: <粘贴 artifact> CONTRACT: <粘贴 contract> ``` ## RECONCILE 四分类(按此 precedence 逐类过滤,首个命中即归类) | 分类 | 判定特征 | 处置 | |---|---|---| | 1. 契约误读 | 审查者因不知道的上下文误报(数据来源是内部可信的、上游已校验、变更是注释里写明的有意设计) | 先补全 CONTRACT 再进下一轮 | | 2. 有效可行动 | 真问题,artifact 确实违反 contract | 修改 artifact,重走 DOUBT | | 3. 有效权衡 | 真取舍但修复成本大于接受成本 | 在 decisions.md 或 design.md 备注后放行,**让用户看见** | | 4. 噪音 | 同义反复/风格偏好/对不存在场景的防御 | 记下,跳过 | 消费侧详表(甄别他人评审的误报形态)可引用项目内的 AI 评审误报甄别表(如使用 Trellis 的项目在 `.trellis/spec/guides/index.md`「核对 AI 评审结论时」)——每条 CRITICAL/WARNING 都要回到代码里验证;该文件读不到时跳过,详表是增强材料,不阻塞五步闭环。 ## 红旗(过程性,自查) - 跳过 EXTRACT 直接把结论传给了审查者 - 审查者输出形态变成"验证/总结"而非"找错"(对抗失效,重发 prompt) - 3 轮后还在磨同一条发现 - 应触发场景未触发且无用户豁免(静默跳过) - 2 轮以上审查有实质发现、却零条被归为可行动(在演戏质疑,停止并升级)