Skip to content

RiskGuard v1.3.0 — 状态持久化:堵住重启绕过熔断的后门

Choose a tag to compare

@SilentFleetKK SilentFleetKK released this 10 Jul 03:25

第三方独立体检(架构 + 领域 + 竞品 + 唱衰四路评审)发现的必修项修复:名实不符的文档主张,以及一个与产品使命直接矛盾的结构性缺陷——重启可以绕过熔断

🔒 核心修复:状态持久化

RiskState 此前纯内存,进程一重启,高水位和熔断标记全部归零,等于给亏红眼的操作者留了一条"重启一下继续交易"的隐藏后路。现在接一个 state_store,熔断真的扛得住重启:

from riskguard import RiskEngine, SqliteStateStore
engine = RiskEngine(config, broker=broker, state_store=SqliteStateStore("risk_state.db"))
  • 加载失败在构造期硬失败(拒绝以"一切正常"假象启动)
  • 乐观锁(版本号 CAS):两个引擎共用同一存档不会静默互相覆盖,而是响亮报错
  • reset_breaker() 先落盘、成功后才切内存(fail-closed)
  • 拒绝写入/读回非有限权益(NaN/inf 会让回撤熔断永久失效)
  • CLI riskguard check 新增 --state-db / --state-key,脚本化重复调用(cron 定时验单)也能跨调用持久化

🛡️ 其它必修项

  • README 安装指引名实不符:pip install riskguard 在 PyPI 未发布前是装不上的坏指令,改为诚实的 git 安装方式
  • GitHub Actions CI:pytest 矩阵(3.10–3.13)+ ruff,徽章从手写静态数字换成真实 CI 状态
  • 纪律的代价:新增 examples/09,诚实展示同一配置在 +200% 单边牛市里只吃到 20% 收益——不只展示风控救命的一面

🔬 发布前对抗审查

新模块经一轮聚焦审查,修复 1 critical + 4 high + 2 medium:两引擎共享存档静默覆盖对方熔断状态(critical)、NaN 权益毒化存档、reset_breaker() 崩溃窗口、RiskMonitor 重启后重复拉响 kill-switch 等(详见 CHANGELOG)。

730 项测试全绿。建议所有用户升级。

⚡ 升级

pip install -U "riskguard @ git+https://github.com/SilentFleetKK/riskguard.git"