# 审计说明 — 2026-08-08 永期半自动

## 范围

半自动：`semi_auto.py`、引擎授权/出场/`wait_human`、`/api/plan/semi/*`、设置与 Fleet 透出、首页与中控 UI。

## 轮次

| 轮次 | 工具 | 结论 |
|------|------|------|
| 1 | Security Review | 3 项中高：取消授权 TOCTOU、出场参数未锁定、关半自动未清 armed |
| 2 | Bugbot | 2 项高：重启后陈旧 armed、授权绕过 LIVE `live_ready` |

## 已修复

1. 选约后、`opening` 前、以及 `open_group` 直前再次校验 `semi_armed`；取消授权中止开仓。  
2. `phase=opening` 时禁止取消授权（防 LIVE 落单窗口 TOCTOU）。  
3. 开仓成功写入 `semi_trade_lock`；盯盘出场读锁；平仓/收尾清理。  
4. 设置关/开半自动强制 `semi_armed=false`；设置接口不可写入 `semi_armed`。  
5. 进程启动无仓清 armed。  
6. `arm_semi` LIVE 先过 `live_ready`。  
7. 已授权或活跃阶段禁止改本单参数。  
8. 半自动平仓禁止远虚只平永续；平仓后勿覆盖 `wait_human` phase。

## 复审

| 轮次 | 工具 | 结论 |
|------|------|------|
| 复审 Security | 先验 MEDIUM（opening→open_group 窗口） | 已用 `open_group` 直前 `is_armed` + `phase=opening` 禁止取消授权关闭 |
| 复审 Bugbot | 同窗口 TOCTOU（high） | 同上已修；无其它半自动逻辑 bug |

## 验证

- `pytest backend/tests/test_semi_auto.py`：通过。  
- 授权 API 仍 `require_user`；Fleet 仅只读字段。

## 残留风险（可接受）

- 授权后至开仓完成前改系统级非半自动参数（如杠杆）仍可能影响定仓；与全自动一致，非半自动独有。  
- 有仓重启保留 trade_lock；无仓清 armed 后须重新授权。
