# Doubt Driven Development

> Use when stakes are high (production, security, irreversible), when working in unfamiliar code, when correctness matters more than speed, or when a confident output is cheaper to verify now than debug later.

- Skill: `just-silver/doubt-driven-development` (Agent Skill)
- Install (CLI): `npx skillmds@latest add just-silver/doubt-driven-development`
- Raw SKILL.md: https://api.skillmd.com/api/skills/just-silver/doubt-driven-development/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: Just-Silver (https://skillmd.com/u/just-silver)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/just-silver/doubt-driven-development

---


# Doubt-Driven Development（质疑驱动开发）

## Overview

自信不等于正确。长会话把假设悄悄熬成"事实"，没人察觉。本技能是在每个非平凡决策落地前，派一个新鲜上下文的评审员来**证伪**，不是来表扬。注意：这不是事后 review，是飞行中交叉审问，改向还便宜时动手。

## When to Use

**非平凡**（中一条即算）：引入/改分支逻辑；跨模块/服务边界；断言类型系统验不了的东西（线程安全、幂等、顺序、不变量）；正确性依赖未来读者看不见的上下文； blast 半径不可逆（生产发布、数据迁移、公开 API 变更）。

- 高风险（生产、安全、不可逆）前
- 在不熟的代码里改核心流程时
- 对自己很有信心的输出（"这肯定对/肯定快/肯定合 spec"）——自信时刻即盲点时刻
- 架构决策下不定、非平凡代码将提交时

**When NOT to use:**

- 机械操作（改名、格式化、移文件）、跑工具、读代码总结
- 用户明确说快比对重要
- 一行改动显而易见正确

每击必疑即发不出货——只疑非平凡。

## 五步（CLAIM→EXTRACT→DOUBT→RECONCILE→STOP）

```
- [ ] 1 CLAIM：写下断言 + 为何重要
- [ ] 2 EXTRACT：剥出最小可审单元（产物 + 契约，去推理）
- [ ] 3 DOUBT：新鲜上下文对抗评审（只给产物+契约，不给结论）
- [ ] 4 RECONCILE：逐条对产物文本分类，不橡皮图章
- [ ] 5 STOP：命中停止条件（只剩 trivial / 3 轮 / 用户拍板）
```

**1 CLAIM**：两三行写清断言 + 为何重要。写不 compact 即还没想清，先浮出水面再审。

```
CLAIM: "新缓存层在 spec 的读多写少负载下线程安全。"
WHY: 此处 race 坏用户数据且 QA 难发现。
```

**2 EXTRACT**：评审员要产物 + 契约，不要心路。代码给 diff/函数不给整文件；决策给 3-5 句提案 + 须满足的约束；断言给 claim + 所谓证据（与 CLAIM 块分开）。剥掉你的推理——给结论即换回附和。单元须一遍装进脑子：500 行 PR 先分解。

**3 DOUBT**：评审提示必须是**对抗式**。"找毛病"不是"看看好不好"：

```
对抗评审。找出这个产物的毛病。假设作者过度自信。找：
未声明假设、未处理边界、隐藏耦合/共享态、违契约的路、
破既有约定的地方、异常输入下的失败。
不许表扬，不许总结。找不到即明确说穷尽后无发现。
产物：<贴产物>
契约：<贴契约>
```

**只给产物 + 契约，不给 CLAIM**——给结论即偏向同意。评审员须独立判定产物是否合契约。

**4 RECONCILE**：评审输出是数据不是判决，你仍是协调人。逐条对产物文本重读再分类（优先级从上到下，先中先得）：

1. 契约误读——契约没写清先修契约，下轮重分
2. 有效可改——真问题改产物，重入循环
3. 有效权衡——修比认贵，写下权衡让用户看见
4. 噪音——评审缺上下文误报，记下并问：契约补一句能否防下次误报

新鲜不等于对——缺上下文的评审也会错，不跪只分。

**5 STOP**：下轮只剩 trivial/已议发现，或 3 轮走完（升级给用户，不独自磨第四轮），或用户说发。3 轮还有实质问题即产物没 ready，是信号不是继续的理由。嫌 3 轮不够多半是产物太大——回第 2 步分解，不放宽 bound。

## 降级模式（无独立评审时不得阻塞任务）

首选主会话派子代理做新鲜评审；派不出（如不许嵌套）即降级：把产物 + 契约重写成带硬分隔的新自提示，走 1-5 自问，并**标注降级**（自带上下文非新鲜），有用户在即优先升级。**缺独立 reviewer 不是阻塞普通任务的理由**——降级自检即可完成；只有高风险/不可逆项才值得专门等真正独立的新鲜上下文。

## Quick Reference

| 场景 | 动作 |
|------|------|
| 生产/不可逆/不熟 | 走五步，不凭信心直执 |
| 自信爆棚的输出 | 信心即开疑信号，先 CLAIM 再审 |
| 评审说没问题 | 看是真无还是提示词太软；提示词必须对抗式 |
| 评审有发现 | 对产物文本逐条分类，不跪不无视 |
| 3 轮还有实质问题 | 停，升级给用户，产物没 ready |
| 派不出评审 | 降级自问 + 标注，有用户即升级 |

## Common Rationalizations

| Excuse | Reality |
|--------|---------|
| "我很确定，跳过吧" | 确定感与正确率在新问题上最不相关；确定时刻即盲点时刻 |
| "派评审太贵" | 带五步的评审有界；生产事故无界 |
| "评审只会挑刺" | 不限"违契约才算"的提示词才会；收紧提示词 |
| "最后统一 review 就行" | 事后 review 是验尸；飞行中改向便宜，合后贵 |
| "步步疑发不出货" | 只疑非平凡；机械操作不走本技能 |
| "评审反对即我错" | 评审缺上下文；分歧是信息不是判决，重读产物再定 |
| "跨模型总更好" | 异构补盲点但加成本；有条件就加，没条件单模型 + 对抗提示也够 |

## Red Flags — STOP

- 给改名/格式化派新鲜评审（杀鸡用牛刀）
- 评审输出不看产物文本直接认（跪）
- 超 3 轮不升级独自磨
- 提示词是"看看好不好"而非"找毛病"
- 高风险赶时间跳疑
- 同一未改产物反复派审（刷相同发现即拖延）
- 2+ 轮有实质发现但零 actionable（演疑不决疑，升级）
- 提交后再疑（那是事后 review）
- 把 CLAIM/推理塞给评审（偏向同意）
- 降级自问不标注

**以上任一出现 → 停手，回五步修正后再立断言。**

## Verification

- [ ] 每个非平凡决策有 compact CLAIM + 为何重要
- [ ] 每产物至少一次新鲜评审（TDD 的 RED 失败测试可抵行为断言的一次）
- [ ] 评审只收到产物 + 契约（无 CLAIM、无推理），提示词对抗式
- [ ] 发现已对产物文本分类（误读/可改/权衡/噪音），非橡皮图章
- [ ] 命中停止条件（trivial/3 轮/用户拍板）
- [ ] 降级已标注

