Add 永期半自动: human arm, machine open/close, then stop.

Settings toggle, Plan panel, Fleet monitor, exit locks and armed TOCTOU gates; docs and dual audits.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-08-08 11:20:11 +08:00
parent bf3441537e
commit 4585dba3c3
22 changed files with 1147 additions and 44 deletions
+40
View File
@@ -0,0 +1,40 @@
# 审计说明 — 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 | 先验 MEDIUMopening→open_group 窗口) | 已用 `open_group` 直前 `is_armed` + `phase=opening` 禁止取消授权关闭 |
| 复审 Bugbot | 同窗口 TOCTOUhigh) | 同上已修;无其它半自动逻辑 bug |
## 验证
- `pytest backend/tests/test_semi_auto.py`:通过。
- 授权 API 仍 `require_user`Fleet 仅只读字段。
## 残留风险(可接受)
- 授权后至开仓完成前改系统级非半自动参数(如杠杆)仍可能影响定仓;与全自动一致,非半自动独有。
- 有仓重启保留 trade_lock;无仓清 armed 后须重新授权。