步骤4阶段1 D2执行方案 最终确认版 v3

源文件:D:\Hermes\reports\步骤4阶段1_D2执行方案_最终确认版_v3.md · 日期 2026-09-14 · 3KB

D2执行前最后修正(最终确认版 v3)

日期: 2026-09-14
状态: 等待用户最终确认


关键发现:Dead-Man测试机制澄清 ⚠️

alert_channel_health.py的行为

# 从代码分析(409行):
# 1. 监控5个任务的状态(position_688306等)
# 2. 写入自己的心跳到channel_health表
# 3. 检查任务超时/失败
# 4. 发送TG告警
# 5. 但是没有Dead-Man自检测逻辑!

关键代码(第368-369行):
  # 写入心跳记录(供dead_mans_switch检查)
  _write_heartbeat("alert_channel_health", "ok" if alert_count == 0 else "warning", alert_count)

dead_mans_switch是什么?

从代码注释看,alert_channel_health写入心跳是"供dead_mans_switch检查"
但搜索未找到dead_mans_switch.py脚本

可能情况:
  1. dead_mans_switch是heartbeat_watchdog的功能之一
  2. dead_mans_switch是另一个名称
  3. dead_mans_switch尚未实现

任务1:修正Dead-Man测试方案 ⚠️

问题

原假设: alert_channel_health会检查自己的channel_health表
实际:   alert_channel_health不检查自己的心跳,只检查其他5个任务

结论: 暂停alert_channel_health的cron不会触发Dead-Man告警

修正方案

方案A:验证heartbeat_watchdog是否检查channel_health表

步骤:
  1. 读取heartbeat_watchdog.py的TASKS_FILE
  2. 确认是否包含alert_channel_health
  3. 如果不包含,Dead-Man测试需调整

方案B:直接测试alert_channel_health的告警功能

步骤:
  1. 修改channel_health表的last_check_time为2小时前
  2. 手动触发alert_channel_health
  3. 验证是否触发告警(如果它有Dead-Man检测逻辑)

注意: 从代码看,alert_channel_health没有Dead-Man检测逻辑
      这个方案可能无效

方案C:重新定义Dead-Man测试目标

目标: 验证alert_channel_health的告警功能
测试:
  1. 手动修改ops_system_health的last_run_at为3小时前
  2. 触发alert_channel_health运行
  3. 验证是否写入alerts表并发送TG告警

任务2:修正触发时间 ✅

时间线(方案C)

17:25  准备测试
17:26  备份状态
17:27  手动修改ops_system_health的last_run_at
       UPDATE task_runs SET start_time = datetime('now', '-3 hours')
       WHERE task_id = 'ops_system_health'
       ORDER BY start_time DESC LIMIT 1
17:28  手动触发alert_channel_health
       hermes cron run 7e8ae2aeca81
17:30  验证告警
       SELECT * FROM alerts WHERE task_id='ops_system_health'
17:32  恢复数据
       UPDATE task_runs SET start_time = ...(恢复原值)
17:35  清理测试数据
17:40  打印总结

任务3:21:00任务冲突确认 ✅

21:00运行的任务

任务 cron_id 脚本 冲突风险
共振桥接器每日流水线 725902f0 resonance_pipeline.py ⚠️ 需确认
选股台账静默检查 6b235078 hb_alpha_ledger_watch.py ⚠️ 需确认
📊 每周周报 weekly_s hb_weekly_summary.py ✅ 无冲突
月线主进月度回测 9dce3919 monthly_mainin_backtest.py ✅ 无冲突

建议

推迟受控测试到21:45后,避开21:00任务

任务4:D2最终时间表(修正版)

时段 任务 内容
17:25-17:45 Dead-Man测试 修改last_run_at→触发告警→验证→恢复
21:45-22:30 受控测试前3项 告警路径、超时路径、通道健康
22:30-23:00 影子cron集成 B3临时替换
23:00-23:30 回归验证 清理+确认

待确认问题

□ 1. Dead-Man测试用方案C(测试alert_channel_health的告警功能)?
□ 2. 共振桥接器和选股台账是否读写alert_state.db?
□ 3. 受控测试是否推迟到21:45后?

⏳ 等待用户确认...

请确认以上方案,回复"进入D2"启动明天执行。