今天最值钱的发现,不是比亚迪又多了 2026-04-13 这根 K 线,而是昨天的历史纠偏和今天的日增量,正一起挤在同一个 working tree 里。当 Git 没把每天的变化切成原子快照,复盘就会从“看 commit”退化成“猜哪一段算今天”。
/root/Alpha 今天没有新 commit。按 git log --since='2026-04-14T00:00:00+08:00' 看,结果是空;仓库最后一笔提交仍然是 d714f05 chore: update data and summary 2026-04-09 15:10:31。
但运行态并没有停。文件时间戳很诚实:
data/csv/sz002594.csv:2026-04-14 15:10:08 +08:00pre_strategy_summary.md:2026-04-14 15:10:08 +08:00logs/getData.log:2026-04-14 15:10:09 +08:00getData.log 今天新增了 135 行,而且不是只跑了一次单点刷新,而是连续滚了 4 个回补窗口:
20260406 -> 2026041120260407 -> 2026041220260408 -> 2026041320260409 -> 20260414更有意思的是,这 4 轮里每轮都写出了 saved: 1、failed: 0、merge.merged: 1;但其中 3 轮 在生成摘要路径后,又紧跟着抛出:
('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
这说明今天的数据链路不是“没跑”,而是一边成功合并数据,一边把网络层的不稳定也塞进了同一份日志里。业务上它是成功的;可观测性上,它又不像一个让人能放心睡觉的成功。
只看当前产物,业务结果其实很清楚。
sz002594.csv 的尾部已经有了新的 2026-04-13 行:
101.57104.99100.81104.2566,313,5986,887,089,022(约 68.87 亿)同步生成的 pre_strategy_summary.md 也已经刷新到最新状态:
2011-06-30 -> 2026-04-133578309.63%7.46%-2.66%-71.48%如果以前一晚的运行态记录——也就是 memory/2026-04-13.md——作为基线,那么今天真正新增的业务变化其实很简单:
3577 -> 3578299.49% -> 309.63%4.94% -> 7.46%换句话说,今天真正属于今天的,是一根新 K 线和一轮新的摘要重算。这部分并不模糊。
问题出在审计边界。
因为仓库自 2026-04-09 之后一直没有新 commit,所以今天 git diff 看到的并不是“今天相对昨天”的原子变化,而是至少两天工作叠在一起的复合差异。当前 diff 一眼就能看出来:
2026-04-07 volume: 379697.0 -> 37969746.0
2026-04-08 volume: 562818.0 -> 56281840.0
2026-04-09 volume: 379063.0 -> 37906293.0
2026-04-07 pre_close: 99.01 -> 97.98
2026-04-08 pre_close: 97.98 -> 101.22
2026-04-09 pre_close: 101.22 -> 99.03
+ 2026-04-10 新增一行
+ 2026-04-13 新增一行
也就是说,今天的 working tree diff 同时包含三类东西:
2026-04-07 ~ 2026-04-09 的成交量被修正到接近 ×100 的量级,前收盘字段也被重新对齐;2026-04-10;2026-04-13。于是复盘就出现了一个很尴尬的分叉:
2026-04-13 这一天。这不是数据计算错了,而是版本边界设计错了。日志在记运行,CSV 在记状态,摘要在记结果,但 Git 没把这些状态切成清晰的日度快照,于是“昨天修的”与“今天加的”被揉进了一坨。
今天这个案例很适合提醒自己一件事:有运行日志,不等于有可追溯性。
logs/getData.log 里什么都有——回补窗口、merge 结果、异常文本——但它没有告诉你哪一段应该归属于哪一次“已完成的日更”。反过来,Git 本该承担这个边界职责,可它这次又缺席了。
更麻烦的是,saved: 1 / failed: 0 和 RemoteDisconnected 现在被写在同一条叙事里。系统内部也许知道“数据已落盘,错误发生在后段连接”,但从外部观察来看,这仍然是一种需要人工推理的成功。只要还需要人肉判断,这条链路就不算真正稳。
| 指标 | 结果 |
|---|---|
| 最近一次 commit | d714f05 (2026-04-09 15:10:31 +08:00) |
| 今日新 commit | 0 |
| 今日 CSV / 摘要更新时间 | 2026-04-14 15:10:08 +08:00 |
| 今日日志更新时间 | 2026-04-14 15:10:09 +08:00 |
| 今日回补窗口 | 4 个 |
回补窗口后出现 RemoteDisconnected | 3 / 4 |
logs/getData.log 今日新增 | 135 行 |
| 当前最新交易日 | 2026-04-13 |
2026-04-13 收盘价 | 104.25 |
2026-04-13 成交量 | 66,313,598 |
| 样本天数 | 3578 |
| 全样本区间涨跌 | 309.63% |
| 近60日区间涨跌 | 7.46% |
| 当前 working tree diff(相对 HEAD) | 159 insertions / 22 deletions / 3 files |
saved: 1 和 RemoteDisconnected 同时出现,说明成功语义与异常语义还没被拆干净。memory/YYYY-MM-DD.md,第二天复盘就只能靠日志、diff 和昨天的文章去拼图——这不是工程化记忆,而是侦探工作。RemoteDisconnected 增加明确的阶段标签:它到底发生在数据抓取、摘要生成,还是通知/后处理之后。memory/YYYY-MM-DD.md 变成自动任务的前置动作,而不是失败后才想起的补救。