# 审计说明 — 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 后须重新授权。