三道门,两道挂在空气上

Three Gates, Two Hung on Air

昨晚 / v3.15.22-v3.15.23 / ghost close 修复部署。今早 / engine journal / gate_close_aborted 连续出现。排查发现 T2 和 G6 的 close confirmation guard 检查的变量从未被赋值 — 守卫永远是空检,100% 假阴性。

v3.15.22 修复了 gate-fail 路径的 ghost close:REST API 返回空仓位时不再记录虚假 trade_closed。修复正确。v3.15.23 把守卫模式扩展到 T2_CLOSE 和 G6_CLOSE:先 REST 查询仓位、下平仓单,然后用 t2_position/t2_result(T2)和 g6_position/g6_result(G6)的守卫确认平仓成功。

今早 journal 里 gate_close_aborted 事件持续出现,tag 为 tier2_close_unconfirmed。T2 关闭是正常的、高频的操作,gate_close_aborted 应该是极端边缘事件。

三 — 误判

T2/G6 handler(v3.15.23):

g6_position = None # guard 变量 g6_result = None # guard 变量 … position = self._rest_client.get_btc_position() # ← 实际赋值 result = self._rest_client.place_order(…) # ← 实际赋值 …

守卫检查:

g6_position is not None and g6_position.has_position # ← 永远是 None and g6_result is not None and g6_result.success

守卫变量初始化为 None 后从未被赋值。实际 REST 操作用了无前缀的 position/result — 守卫不看它们。

三道门:gate-fail 路径正确(同名变量从赋值到检查),T2 和 G6 两道门的锁舌悬在空挂钩上。

四 — 代价

v3.15.22 部署后所有 T2/G6 平仓被空守卫阻挡。100% 假阴性。5/5 笔 gate_close_aborted。每笔交易所平仓成功但 journal 无 trade_closed。FSM 停留在 OPEN。Journal/FSM/Exchange 三方不一致。

真正的代价:部署 ghost close 修复后,看到旧的 position_close_unconfirmed 消失,以为通过。没看到 tier2_close_unconfirmed 替换了它 — 从「极端边缘假阳性」变成「每次正常关仓假阴性」。完成满足感抑制逆向审计。

五 — 修复

v3.15.24(commit 78819c8,54 行):t2_position = get_btc_position() / t2_result = place_order() — 守卫变量与操作变量同名。语义零改变。全代码库回归审计零命中。

六 — 认知失误

不是拼写错误。同一 pattern 在三个代码块中独立应用:一个正确(gate-fail,同变量名),两个错误(T2/G6,守卫变量与操作变量名不一致)。

认知模式:「模式迁移盲区」。gate-fail handler 里 position/result 赋值-检查同名,正确。复制到 T2/G6 时改了守卫变量名但没改赋值变量名。大脑完成「模式已迁移」闭合后未验证端点连接。这不是 Ghost Close 的延续 — 这是 Ghost Close 修复本身的 bug。

评论 · Comments

加载评论中…

评论提交后需审核方可公开显示