下一章 上一章 目录 设置
17、句号 工作间只开 ...
-
工作间只开了一盏台灯。
光圈压在桌面上,把周围的暗推到墙角去。老式木桌年久失修,漆皮在台灯底座那一圈磨掉了一小块。键盘左边那只马克杯壁挂着一道干掉的浅褐色印子,咖啡液蒸发后留下的弧形痕迹,像某种无人问津的地质年轮。林知遥伸手碰了一下杯身,凉透了。
指尖上残留着那股凉意。她收回手,在牛仔裤侧边蹭了一下。
她把库存模块的异常分支折叠又展开。
母婴店白天报过一次重复扣减库存。付款页一卡,用户多按了一次提交。这种事在弱网下不算稀奇。店主电话里的声音带着点焦躁,说顾客在柜台前等,后台显示库存扣了两份,实际货架只剩一份。她记得自己当时隔着手机屏幕点头,嗯嗯嗯,挂掉之后在备忘录里写:查回滚。
她回看自己上周写的那一段,回滚和库存释放之间留了一个含糊处。当时写得急,凌晨两点多,脑子里想着先跑通主流程,边界情况以后补。以后。这个词在代码注释里等于永远。光标停在 `rollbackOrder` 前一行。
窗外隐约传来一声狗叫。远,听不清是哪个方向。这条街夜里很安静,安静到能听见自己呼吸。
她敲了一行注释。
```js
// 待确认:弱网重复提交时,库存锁定与订单回滚的先后顺序
```
打完最后一个字,她的手指悬在键盘上方,没有立刻落下去。"待确认"三个字其实是一种推诿。确认什么?向谁确认?她知道答案,只是不想把那个名字从脑子里拎出来放到明面上。
光标往下走半行。
```js
// 如果按
```
闪了三下。
屏幕的冷白光在她脸上一明一暗。她盯着那三个字,"如果按"——按什么?按他的思路?按他上次改那个支付模块的写法?她甚至不确定自己想写什么,只是手指先动了。
她按退格,把这半行删掉。
光标退回去的时候发出一声极轻的提示音。或者没有。可能是她自己的错觉。
屏幕右下角,远程桌面那一栏的连接列表多出一个亮着的小绿点。江屿的工位机在线。
鼠标在绿点上停了一下。
绿。很浅的那种绿,系统默认的在线状态色。不是微信的那种亮绿,更像医院走廊里指示灯的颜色。她想起上次在厂房里看见他,隔着一排货架,他在跟仓管说什么,声音很低,听不清。后来他转过身,看见她,点了一下头。
就那一下。
她没有右键,也没有切到微信。
桌上那杯凉透的咖啡映着屏幕的光,杯底的残渣已经沉淀成一小圈深褐色。她把异常分支重新折起来,提交。提交说明只一行:
```
fix(stock): mark weak-network rollback boundary as TBD
```
TBD。To be determined。待定。又是一种推诿。她在提交按钮上方停了零点几秒,然后点下去。进度条转了一圈,绿色的勾。
合电脑前,她又看了一眼连接列表。绿点还在。她把屏幕合到一半,停住,手指捏着屏幕边缘,指甲盖发白。又抬起一点,确认那个状态是"在线",不是"断开重连"。
在线。
不是断开后又连上,是一直在。
然后合上。
电脑合拢的声音在安静的房间里显得有些突兀。金属转轴的轻响,像一声被压低的叹息。
台灯按下去之前,她把凉马克杯端起来。杯身上的褐色印子在灯光下显得更深了,像一道干涸的河床。她端着,看了一眼厨房的方向,没倒掉,又放回原位。
杯底在桌上磕了一声。
她按灭台灯。黑暗一下子涌上来,眼睛需要几秒钟适应。窗外有一点月光,不多,勉强能看清门的轮廓。
上楼的时候,她没有回头。
---
清晨六点多,外面还不亮。
天色是那种深灰与浅灰交界的模糊状态,像一张曝光不足的照片。窗户玻璃上凝了一层薄薄的水汽,外面的轮廓都显得柔和,模糊。
她下楼本来是为了把那只杯子拿去厨房。脚踩在楼梯上,木板发出轻微的吱嘎声,这栋老房子的每一级台阶都有自己的声音。路过工作间门口,她的脚步慢下来,停住。
门没关严。昨晚她走的时候随手带上的,现在门缝透出一线黑。
她站在门口,手搭在门框上。指尖碰到漆皮剥落的地方,有点粗糙。
然后拐了进来。
电脑掀开。屏幕的冷光打在脸上半秒,眼睛本能地眯了一下,亮度自动调下去。她的脸在屏幕反光里映出一个模糊的轮廓,眼下有一点青。昨晚没睡好,或者睡了,但不踏实。
她没先看连接列表,点开仓库。
提交记录最上面一条,时间戳 03:47。
03:47。凌晨三点四十七分。
她看着那个数字,手指无意识地在触控板边缘划了一下。那个时间她应该已经躺在床上了。躺着,睁着眼睛,听窗外不知道哪里传来的风声。三点四十七分。他在做什么?坐在厂房那边的工位上,对着屏幕,敲下这一行?
她拉开 diff。
绿色新增行不多。屏幕上绿色的加号竖成一小排,不长,克制。江屿没有动她那段半成品函数的结构,没有抽出新的工具方法,也没有把她那串 `if-else` 改成 `switch`。她知道他有这个习惯——他写的代码干净,逻辑走向明确,像工厂车间里摆放整齐的零件,各归各位。但他这次没改。
变量名沿用 `pendingOrder` 和 `stockSnapshot`,连那一处偏长的 `stockSnapshot.currentHoldList` 都没有改短。她盯着那一行看了几秒。这个变量名是她自己起的,当时想着"当前持有列表",直译过来就是 currentHoldList,有点啰嗦,但语义清楚。他没改。
异常分支的位置也没动,仍然挂在主逻辑后面。
她想起以前看过一篇文章,说代码审查有两种风格,一种是"我来告诉你怎么写更好",一种是"我顺着你的思路往前走一步"。他是后一种。
新增行贴着她昨晚留出来的空位长出来。像一株植物从她挖好的坑里冒出头,根系在土里接上了什么。
她先看见注释。
```js
// 先收边界,再走主流程
```
四个空格缩进。
不是 tab。
她用的是四个空格。editorconfig 里配好的。他原本习惯 tab,她记得他上次提交的那个工具函数里全是 tab 缩进。这次他换了。
四个空格。
她的手指在键盘上空悬着,没有落下去。
往下翻,`stockSnapshot` 内部多了一个字段。
```js
held_at: timestamp
```
时间戳。库存被锁住的那一刻的时间戳。有了这个字段,回滚的时候就能判断这笔锁定存在了多久,超过阈值的自动释放,没超过的等一等。她昨晚想到过这个方向,但没想清楚怎么落地。他落地了。
光标在这一行上停了一下。她没改,也没问,继续往下翻。
她昨晚原本想在自己那行注释后跟一句"可重构"。鼠标已经移到行尾,光标在那里一闪一闪。可重构。三个字。她按住没动,听见自己的呼吸声。过了两秒,光标退回行首,把那三个字一并从草稿里删掉。
可重构。意思是"我知道这里可以写得更好,但我现在没想清楚,你来"。她不想说这句话。不想用这种方式开口。
她又端起马克杯。
杯身还是凉的,凉意从掌心透进来。她把杯口凑近,低头看了一眼——忘了昨晚没倒。杯底的残渣干涸成一小块,边缘发白。
她把杯子放回原位。
重新坐下。
椅背发出一声轻响,老旧的弹簧在抗议。窗外的天色又亮了一点,深灰变成浅灰,玻璃上的水汽开始往下淌,留下几道细细的痕迹。
---
第二处异常分支她只改了一行。
```js
// 待确认:是否拆分库存锁与订单状态写入
```
提交。
提交按钮点下去的那一刻,她意识到自己的手心有一点潮。不是紧张,是什么别的东西。像在等一个回音,又不确定那个回音会不会来。
她没切窗口,继续往下看。屏幕右下角那个绿点一直在。中间没有弹窗,没有"对方正在输入",没有 @,没有微信图标跳起来。
安静。
她把代码页往下滚,看完一段,又滚回来。眼睛在屏幕上移动,脑子里想的是另一件事。他在线。他看见了。他没说话。
这是一种什么样的沉默?
四十多分钟。
窗外的光线又变了一点。从浅灰变成了某种偏白的灰,云层很厚,看不见太阳的位置。
提交列表多一条。
她的心跳快了半拍。手指点开 diff,比刚才急了一点。
不是改她的逻辑。是测试目录里多了两个文件名。
```
case_017_weak_network.spec
case_017_rollback_order.spec
```
017。
她的光标停在 `017` 上。
停了一下。
017。测试用例的编号。按顺序排下来,第十七个。或者——她不知道该不该往别处想。017 可以是任何东西。一个编号。一个巧合。一个日期。一个排名。
她的手指悬在鼠标上方,没有点下去。
她没打开测试文件,也没问那个数字。心里有一个念头升起来,又被她按下去。她在自己那行注释下面又补一行。
```js
// 回滚时机以库存锁释放为准?
```
问号。
她打问号的时候,指尖在键盘上顿了一下。问号是一种邀请,也是一种试探。你觉得呢?你同意吗?你会回答吗?
提交。
她靠回椅背,盯着屏幕右下角那个绿点。还在。他还在。
下一次更新比上一次快一点。三十分钟左右。
她点开 diff 的手指比刚才稳。或者只是她以为自己稳。
diff 只有一处。
她那行末尾的问号,被改成了句号。
```js
// 回滚时机以库存锁释放为准。
```
句号。
她看着那个标点,屏幕上的小黑点,在白底上显得很确定。没有别的字。没有"我建议",没有"应该"。没有"我觉得可以这样",没有"你看看行不行"。
就一个句号。
问号变成句号。疑问变成陈述。她的试探得到了回应,而这个回应是:是的,就这样,我同意。
她看着那个句号,看了两秒,又往下翻。`held_at` 还在。他没有删掉自己加的东西,也没有改动她留下的任何一处结构。
她仍然没改。
外面天色一点一点亮起来。灰变成白,白里带一点淡黄,是太阳从云层后面透过来的光。她起身去厨房,脚步很轻,像怕惊动什么。把昨晚那杯凉咖啡倒掉,褐色的液体顺着水槽壁流下去,留下一道浅浅的痕。杯口在水池边倒扣,白瓷杯底朝上,像一个倒置的句号。
回来的时候,她在窗边停了一下。顺手把窗帘掀开半指宽。
一线光透进来,落在桌角。
台灯没关。
---
下午到傍晚之间,屏幕右下角那个绿点一直在。
她没有刻意去看,但余光里总能瞥见。绿的,亮着。他在那边,做什么不知道,但在。
她把上午留下的几处边界全部收完。每一处都写得比平时仔细,注释多打了几行,变量名斟酌过再用。不是给他看。或者是。她分不清。
最后只剩 README 边角一处需要补一行说明。
窗外的光线开始变暗,从白变成橙,再变成一种介于灰和紫之间的颜色。傍晚了。一天快过完了。
她在那一行末尾敲。
```js
// 如果这里按你的
```
光标停。
按你的。你的什么?你的想法?你的习惯?你的——
她看了一会儿,手指悬在键盘上。窗外有什么声音传来,像是隔壁巷子里有人在收摊。金属碰撞的声音,很远,很轻。
她按下退格,把这半行删掉。
光标退回去的时候,屏幕上的字一个一个消失。她看着那些字消失,心里有一种说不清的感觉。不是遗憾,也不是释然。介于两者之间。
改成:
```js
// 待确认:回滚时机以库存锁释放为准
```
待确认。
她又用了这三个字。但这一次意思不一样。不是推诿,是呼应。是"我记得你刚才把我的问号改成了句号,我把它记下来了"。
提交。提交说明一行:
```
docs(stock): align rollback note with reviewer
```
reviewer。
她写完这一个字,停了一下。reviewer,审阅者。不是他的名字,不是江屿,是一个角色。她用角色来称呼他。安全。有距离。
没改。
仓库切回主分支。关闭 IDE。屏幕上的窗口一个一个消失,最后只剩下桌面壁纸。默认的蓝色。
合电脑之前——她本来不打算再看连接列表。手已经搭在屏幕边缘,指尖碰到凉凉的金属壳。她把盖子合到一半,铰链发出轻微的声响。
停住。
又掀回来,让屏幕重新亮起来。
右下角,远程桌面连接状态。
她这一侧,灰。
对方那一侧,灰。
两个灰点并排停在列表最下方。并排。挨着。之间隔了不到一厘米的屏幕距离。
他下线了。
她不知道是什么时候下的。就在刚才?还是更早?她低头看键盘的时候?她打那一行又删掉的"如果这里按你的"的时候?
屏幕过了几秒自动暗下去。
她没动。
暗下去的屏幕上映出她自己的脸,模糊的,只有一个轮廓。窗外的光线几乎没有了,房间里很暗,只有台灯那一小圈光还亮着。
桌面右上角,下周一的日程还亮着。
```
Mon 09:30 工厂硬件清单现场对接
```
下周一。她要去厂房。见他。
她把电脑合上。
这一次合得很轻,几乎没有声音。
杯口在水池边倒扣的那只马克杯,一整天没人去翻过来。白瓷杯底朝上,在厨房的暗处,像一个凝固的句号。