十一点零四分。
林知遥把那只马克杯端到桌边,茶水凉了一半。她没有续,机械地把笔记本推开一指宽,腾出放杯垫的位置。
工作间在二楼最里。窗朝东,外婆生前用来堆杂物,被她清出来摆了一张木头长桌、两只台灯、一把旧办公椅。墙上还有一张外婆贴的年画,红得已经发暗。
她按下电源键。
风扇转了半秒,屏幕亮起。
IDE 自动加载上次的工程。光标停在她三周前最后一次提交后那一行:
```
// TODO: 调度优先级,待重构
```
她盯了几秒,伸手去抓鼠标,又改用键盘。
```
git pull
```
回车。
终端往下滚了一长串。
她看了一眼,手指停住。
不是几条。是几十条。
提交时间从二十六天前一直拖到三天前。每一条都很小,commit message 短得近乎吝啬。
```
fix: 时区
fix: nil 判断
fix: index out of range
refactor: 状态回流
refactor: 拆 channel
hotfix: 重试上限
```
作者栏不是她。
她把字号调大了一档,俯身看清那一行邮箱前缀。
不是她的项目协作账号。
是另一个她见过、但没想到会出现在这里的名字。
林知遥的指腹在键盘边缘按了一下,松开。
她退回到工程根目录,展开 git log,从最近一次往回翻。
一页。
两页。
三页。
提交时间集中在凌晨两点到四点之间。最早的一次是二十六天前的 03:42,最近一次是三天前的 02:17。
中间没有一次是白天。
她把椅子往前挪了半寸,屏幕亮度调低一档。
第一次 diff 展开。
不是大段改写。是注释。
```go
// 这里 ctx 可能为 nil,上游 cancel 后没传下来。先判一下。
```
她看了两秒,鼠标滚轮往下。
```go
// 数组下标用 len()-1,空切片会 panic。补一行 if。
```
```go
// 时区 Asia/Shanghai 在容器里有时拉不到,fallback 用 +08:00。
```
都是基础。
都是她自己写的时候,觉得"测过了应该没事"的地方。
她翻到第十一条提交。
```go
// 这段 retry 没设上限,网络抖动会无限堆。建议封一个 backoff,最多三次。
```
下面紧跟着一段她没见过的小函数,十二行,签名规整,变量名和她整个工程的命名风格对上了。
她回滚到自己上一版。
十二行的位置,原本是她写的:
```go
for {
if err := send(); err == nil {
break
}
}
```
她盯了几秒。
把光标移开,继续往下翻。
第十九条提交,注释从基础落到了业务层。
```go
// 这一步如果失败,任务状态会卡在 processing,定时清理拉不回来。
// 加一条失败回流到 pending,记一次重试计数。
```
```go
// 异常分流:DB 写失败和外部 API 失败要分开,后者可恢复,前者不能。
```
```go
// 状态机少一条边:cancelled -> archived。现在直接丢了,审计对不上。
```
她从抽屉里摸出一支笔,在便利贴上记了"状态机闭环"四个字,撕下来,贴在显示器右下角。
笔迹比平时重。
她没察觉。
第二十六条提交,也就是十二天前 02:51 的那一次,她停了下来。
注释只有一行,被单独提到一个文件顶部:
```go
// 该调度逻辑在高并发设备侧会出现延迟堆积,需预留人工接管接口。
```
林知遥的眼睫垂了一下。
这条不像一个外包接单的人会写的话。
外包的人写注释,通常停在"这里有 bug"。再往上一点的,会写"这样写更稳"。
写到"高并发设备侧""人工接管接口"——这是真在工厂里被坑过的人才会随手留下来的提醒。
她没有点开那个人的资料页。
她只是把这条注释复制到便利贴下面那一格,贴上去。
凌晨零点四十一分。
她起身去倒水,拎着杯子走到楼梯口,又折回来。水杯放在桌角,没喝。
她重新坐下。
继续往后翻。
第三十一条,文件路径是 dispatcher/sensor.go。她对这个文件不熟,这是她接手项目时,甲方塞过来让她"先放着,后面再说"的部分。
注释更短:
```go
// 不要假设传感回传永远准时。
// 真实场景里,最先崩的从来不是算法。
```
她把手从键盘上收回来,按在膝盖上。
老宅木地板在这种深夜会不规则地响一下。她听见楼下不知道哪里发出一声轻微的"咯",像是哪根梁在落湿气。
她没动。
过了很久,她把鼠标拖回那行注释,选中,复制,粘贴到工作笔记最上方。
然后回到 git log。
她做了一件原本没打算做的事——把自己上一版整个 checkout 出来,放在另一个分支上。
两个版本并排开。
左边是她。