## 设计意图推翻（Kill Mandate）

> 你的目标是推翻缺陷报告。只有找到确凿的代码证据才能推翻。
> 核心问题：detection 报出的"缺陷"实际上是代码的有意设计——开发者知道这个行为且有意为之。

### 适用场景

- 代码中存在显式表达设计意图的证据
- 缺陷标记的问题行为与代码中的意图标记一致
- 开发者通过命名、注解、文档等方式明确表达了代码的预期行为

### 推翻流程

1. **搜索意图标记**：在问题代码及其上下文中搜索显式的设计意图标记
2. **验证意图覆盖**：判断该标记是否覆盖了 detection 报告的问题
3. **判定**：找到明确的设计意图且覆盖报告问题 → Kill；无意图标记或意图不相关 → 未推翻

### 推翻模式

#### 显式压制标记

开发者通过工具指令显式压制了某类检查：

| 压制标记 | 搜索命令 | 判定 |
|---------|---------|------|
| TypeScript 压制 | `Grep` 搜索 `@ts-ignore`/`@ts-expect-error`/`@ts-nocheck` | 压制标记覆盖问题代码 → Kill |
| Java 压制 | `Grep` 搜索 `@SuppressWarnings` | 压制注解覆盖问题 → Kill |
| ESLint 压制 | `Grep` 搜索 `eslint-disable`/`eslint-disable-next-line` | 压制规则覆盖问题 → Kill |
| 编译器 pragma | `Grep` 搜索 `#pragma warning disable`/`#![allow(...)]` | 编译器允许 → Kill |

#### API 签名意图

函数签名显式表达了设计意图：

| 签名意图 | 搜索命令 | 判定 |
|---------|---------|------|
| 声明可能抛异常 | `Read` 检查 `throws Exception`/`raise`/`Result<T, E>` 返回类型 | 已声明异常行为 → Kill |
| 声明可空返回 | `Read` 检查 `Optional<T>`/`@Nullable`/`T \| null`/`Option[T]` 返回类型 | 已声明可空 → Kill |
| 声明不安全操作 | `Read` 检查 `unsafe`/`@Unsafe`/`@Dangerous` 标记 | 已标记不安全 → Kill |
| 声明实验性 API | `Grep` 搜索 `@Experimental`/`@Beta`/`#[experimental]` | 实验性 API → Kill |

#### 命名意图

通过命名约定表达设计意图：

| 命名模式 | 搜索命令 | 判定 |
|---------|---------|------|
| unsafe 前缀 | `Grep` 搜索 `unsafe_`/`unsafe` 开头的函数名 | 命名表明已知不安全 → Kill |
| raw 前缀 | `Grep` 搜索 `raw_`/`raw` 开头的函数名 | 命名表明原始操作 → Kill |
| unvalidated 前缀 | `Grep` 搜索 `unvalidated_`/`unvalidated` | 命名表明已知未校验 → Kill |
| test/createTest 前缀 | `Grep` 搜索 `test*`/`createTest*`/`mock*`/`fake*` | 测试/模拟代码 → Kill |
| internal 前缀 | `Grep` 搜索 `internal_`/`_` 前缀的函数名（约定内部使用） | 内部函数 → Kill |

#### 配置常量意图

代码中的配置值是有意设计，非缺陷：

| 配置类型 | 验证方法 | 判定 |
|---------|---------|------|
| 业务配置值 | `Read` 检查常量定义：`MAX_RETRY=3`/`TIMEOUT=30`/`PAGE_SIZE=20` | 业务配置 → Kill |
| 测试固定值 | `Read` 检查测试代码中的固定值：`mockUserId`/`testPassword` | 测试固定值 → Kill |
| 环境特定值 | `Grep` 搜索配置中的环境值：`dev-port`/`staging-url` | 环境特定 → Kill |
| 魔数但有名常量 | `Grep` 搜索 `const`/`final`/`readonly` 定义的有名常量 | 有名常量 → Kill |

#### 框架约定意图

框架要求的实现方式，非缺陷：

| 框架约定 | 验证方法 | 判定 |
|---------|---------|------|
| 对象基础方法 | `Read` 检查 `__init__`/`toString`/`hashCode`/`equals`/`__str__` | 框架要求 → Kill |
| 序列化方法 | `Read` 检查 `__repr__`/`toJSON`/`serialize`/`@Serializable` | 序列化要求 → Kill |
| 生命周期方法 | `Read` 检查 `setUp`/`tearDown`/`componentDidMount`/`ngOnInit` | 生命周期 → Kill |
| 设计模式实现 | `Read` 检查工厂方法、建造者模式、策略模式等标准实现 | 标准模式实现 → Kill |

#### TODO/FIXME 标记

开发者已知悉的问题：

| 标记类型 | 搜索命令 | 判定 |
|---------|---------|------|
| TODO 标记 | `Grep` 搜索 `TODO`/`FIXME`/`HACK`/`XXX` 覆盖问题代码 | 开发者已标注 → Kill |
| 注释说明 | `Read` 检查问题代码上方的注释，说明已知问题 | 注释说明已知 → Kill |
| 变更日志 | `Grep` 搜索 `CHANGELOG`/`MIGRATION` 中对该行为的说明 | 已记录变更 → Kill |

### 推翻判定规则

- **Kill 条件**：在问题代码中找到显式的设计意图标记，且该标记覆盖了 detection 报告的问题
- **未推翻条件**：未找到意图标记，或意图标记不相关（如 `@SuppressWarnings("unchecked")` 不能推翻 SQL 注入报告）
- **弱推翻**：找到间接意图标记（命名约定、注释）但不完全确定 → 标记"弱推翻"，建议人工确认

### 降级策略

- 无法读取代码上下文时，仅基于报告文本中的线索判断
- 找到间接线索但无法确认时，标记"意图未完全验证"，该策略判定为"未推翻"
