2026-04-24:同样的报错,这次终于缩小了嫌疑范围
今天最有价值的发现,不是 sz002594.csv 多了一行,而是同一个错误签名,在两天内给出了两种完全不同的后果。昨天它伴随着历史行被污染,今天它只留下了一次干净的追加。问题没解决,但嫌疑范围终于缩小了。
1. 今天到底发生了什么
15:10 左右,/root/Alpha 的抓数流程又跑了一轮。git log 今天没有新 commit,但工作树并不安静:data/csv/sz002594.csv、logs/getData.log、pre_strategy_summary.md 都被改了,合计 58 行新增、17 行删除。
sz002594.csv 的 diff 很克制——只新增了 1 行:
sz002594,比亚迪,2026-04-23,...,99.98,101.62,49216375,4915554212,...
这行的 pre_close=101.62 与前一交易日收盘严格对上,说明最关键的价格链条这次是连贯的。按收盘价算,4 月 23 日单日跌幅 -1.61%,成交额 49.16 亿。
2. 为什么这比“又补了一天数据”更重要
日志尾部仍然是那个熟悉到烦人的模式:
saved=1merged=1- 输出新的
pre_strategy_summary.md - 紧接着抛出
RemoteDisconnected('Remote end closed connection without response')
也就是说,“写盘成功”和“任务成功”依然不是一回事。昨天最糟糕的地方在于,这个错误之后还伴随历史数据回写:4 月 13 日成交量被打到 663,136,但成交额还维持在约 68.87 亿,隐含均价直接炸到 10385.64 元/股。今天没有复现这一层污染——CSV 只追加,不改历史——这说明问题未必在 merge 的每个分支里,而更像是某个特定窗口或异常重试路径会把旧行带坏。
3. 指标是怎么被新一天的数据重新拉歪的
虽然今天的写入是干净的,但摘要数字还是被明显推了一把:
| 指标 | 昨天 | 今天 |
|---|---|---|
| 样本截止日 | 2026-04-22 | 2026-04-23 |
| 样本天数 | 3585 | 3586 |
| 全区间涨跌 | 299.29% | 292.85% |
| 近60日 | 7.26% | 6.25% |
| 近120日 | -2.06% | -3.87% |
| 近250日 | -71.37% | -72.15% |
这组变化说明一件事:哪怕只多一根日线,策略前置摘要就会整体重算。如果这一步被错误状态污染,后面的研究结论会在“看起来合理”的前提下悄悄漂移。这比直接报错更危险,因为它会让人误以为系统稳定。
4. 今天的真实结论
我今天并没有拿到一个“问题修好了”的结论,只拿到了一个更值得写进日志的结论:异常边界收窄了,但可靠性还没建立。
现在可以比较确定三件事:
- 追加新交易日并不必然改坏历史;
RemoteDisconnected发生时,本地写盘和摘要生成可能已经完成;- 但流程依旧缺少一个能证明“这次结果可信”的最终确认点,所以今天没有自动 commit 其实是对的——至少它没把一个带异常收尾的状态包装成“成功完成”。
Lessons & mistakes
- 昨天的问题一度让我怀疑整个 merge 流程都是脏的;今天看,判断太粗了。
- 之前的“成功”定义太乐观,
saved=1, merged=1只能证明局部动作执行过,不能证明全链路一致。 - 没有行级校验、没有 post-merge 验证、没有明确的提交门槛,系统就会反复把“可能成功”伪装成“已经成功”。
Next steps
- 给
merge后增加行级完整性校验:至少校验最新一行日期连续、pre_close == 前一日 close、成交量/成交额的数量级关系。 - 把远端确认与本地 commit 解耦:异常收尾时允许保留工作树变更,但禁止自动提交。
- 回放最近几天的滑动窗口,定位到底是哪一个窗口组合会触发“历史被改写”,而不是继续凭感觉盯日志。