## 行为不可达推翻（Kill Mandate）

> 你的目标是推翻缺陷报告。只有找到确凿的代码证据才能推翻。
> 核心问题：缺陷报告描述了一个问题，但在实际运行时该行为不可触发。

### 适用场景

- 缺陷涉及特定触发路径或条件分支
- 缺陷假设某个执行路径可达，但实际被阻断
- 缺陷涉及环境限制或配置约束
- 缺陷的触发条件在业务场景下不可能满足

### 推翻流程

1. **追踪执行路径**：从用户输入/调用入口到问题代码，追踪完整执行路径
2. **检查路径阻断**：识别路径上是否存在使缺陷不可触发的阻断条件
3. **判定**：所有实际执行路径不可达 → Kill；存在可达路径 → 未推翻

### 推翻模式

#### 条件阻断

问题代码前存在提前 return/throw/guard 语句，阻断了执行路径：

| 阻断方式 | 验证方法 | 判定 |
|---------|---------|------|
| 提前返回 | `Read` 获取完整函数，检查 `return`/`throw` 是否在问题代码之前 | 提前返回使问题代码不可达 → Kill |
| Guard 语句 | `Read` 检查 guard 语句：`if (!condition) return`/`guard let`/`early return` | Guard 阻断路径 → Kill |
| 校验中断 | `Read` 检查校验逻辑：`if (!isValid(input)) throw new Error(...)` | 校验失败直接中断 → Kill |
| 断言拦截 | `Grep` 搜索 `assert`/`check`/`validate`/`precondition` | 断言拦截 → Kill |

**工具链**：
- `Read` 获取完整函数体，分析控制流
- `find_references` 追踪调用者，检查调用者是否已做前置校验

#### 环境限制

缺陷触发依赖特定的运行环境或配置，但实际环境不满足：

| 环境限制 | 验证方法 | 判定 |
|---------|---------|------|
| 条件编译 | `Grep` 搜索 `#ifdef`/`#ifndef`/`#if` 包裹问题代码 | 仅在特定编译条件下生效 → Kill |
| 环境变量守护 | `Grep` 搜索 `process.env`/`os.environ`/`System.getenv` 守护问题代码 | 环境变量控制且生产环境不启用 → Kill |
| 配置开关 | `Grep` 搜索 feature flag/配置开关包裹问题代码 | 配置默认关闭 → Kill |
| 平台限制 | `Read` 检查平台判断：`process.platform`/`os.name`/`RuntimeInformation.IsOSPlatform` | 特定平台才触发 → Kill |
| 仅开发/测试环境 | `Grep` 搜索 `process.env.NODE_ENV`/`@Profile`/`Spring profiles` 条件守护 | 仅 dev/test Profile 生效 → Kill |
| 调试代码守护 | `Read` 检查代码是否在 `if (process.env.NODE_ENV === 'development')` 内 | 仅开发环境运行 → Kill |
| 生产配置覆盖 | `Read` 检查配置文件覆盖链：`application-prod.yml` 覆盖 `application.yml` | 生产配置覆盖了问题配置 → Kill |
| 日志级别限制 | `Grep` 搜索日志配置，检查生产环境日志级别 | 生产级别为 info 以上，debug 日志不输出 → Kill |

#### 调用者前置校验

缺陷假设某个条件不安全，但调用者已保证该条件：

| 校验方式 | 验证方法 | 判定 |
|---------|---------|------|
| 参数校验 | `find_references` 追踪调用者 → `Read` 检查调用者是否有参数校验 | 调用者已校验 → Kill |
| 状态校验 | `find_references` 追踪调用者 → `Read` 检查调用者是否有状态检查 | 调用者已检查状态 → Kill |
| 中间件校验 | `Grep` 搜索中间件/拦截器中的校验逻辑 | 中间件已拦截 → Kill |
| 装饰器/注解校验 | `Grep` 搜索 `@Valid`/`@Validated`/`@NotNull` 等校验注解 | 注解校验覆盖 → Kill |

#### 业务场景限制

缺陷在理论上成立，但业务场景使其实际不可触发：

| 业务限制 | 验证方法 | 判定 |
|---------|---------|------|
| 单线程场景 | `Read` 检查代码是否运行在定时任务/管理后台/CLI 等单线程环境 | 单线程无竞态 → Kill |
| 单用户场景 | `Read` 检查接口是否为内部管理接口/运维接口 | 单用户无并发 → Kill |
| 单实例部署 | `Grep` 搜索部署配置，检查是否有实例数/并发数限制 | 单实例无分布式竞态 → Kill |
| 用户级锁定 | `Read` 检查操作是否有用户级锁定（如表单提交后按钮禁用） | 用户级锁定消除竞争窗口 → Kill |
| 内部服务调用 | `Read` 检查接口是否仅被内部服务调用（非外部 API） | 内部服务可信输入 → Kill |
| 内部网络隔离 | `Read` 检查网络隔离配置：VPC、服务网格、防火墙规则 | 网络隔离使外部攻击不可达 → Kill |
| 不可变数据 | `Grep` 检查数据源是否为常量/配置/只读数据 | 不可变数据无注入风险 → Kill |

#### 权限限制

缺陷触发需要特定权限，降低了实际风险：

| 权限限制 | 验证方法 | 判定 |
|---------|---------|------|
| 管理员权限 | `Grep` 搜索 `@PreAuthorize`/`@RolesAllowed`/`requireAdmin`/`adminOnly` | 需管理员权限 → 降级（非 Kill，记录权限要求） |
| 认证要求 | `Grep` 搜索认证中间件/拦截器 | 需认证 → 降级 |
| 内部网络限制 | `Read` 检查服务部署配置 | 仅内网可访问 → 降级 |

### 推翻判定规则

- **Kill 条件**：找到确凿的路径阻断证据，所有实际执行路径不可达
- **未推翻条件**：存在至少一条可达路径
- **降级条件**：权限限制降低了风险但不完全消除 → 不 Kill，但记录降级理由

### 降级策略

- `find_references` 不可用时，基于已读取的代码上下文推断调用关系
- 无法确认路径不可达时，标记"路径未完全验证"，该策略判定为"未推翻"
