侦探小说:He's Replaceable

He’s Replaceable

正文

第一章:「那一天」

1

询问室的灯管有一根坏了,剩下的那根以一种不稳定的频率闪烁,像一个濒死的心电图。

牛大力坐在金属椅子上,椅面冰凉,隔着牛仔裤都能感觉到。对面的Detective Kim把一杯纸杯咖啡推过来。咖啡闻起来像烧焦的轮胎。他没喝。

“我需要你回忆那一天。”Kim说。她的声音没有感情,不是冷酷,更像是一个习惯了处理死亡的人特有的平静。”越详细越好。所有你能想起来的事。”

牛大力看着那杯咖啡,棕色的液面映出一截变形的灯管。

那一天。

他闭了一下眼睛。早上七点五十分闹钟响,八点零三分出门,八点四十七分到公司,前提是101公路没有出车祸。101公路总是出车祸。同一个弯道,同一种追尾,就好像圣何塞的司机们共享同一套出错的自动驾驶程序。

“从早上开始说吧。”Kim的笔悬在笔记本上。

他深吸一口气。

好吧。早上。

2

mala.ai的办公室在North San Jose的一栋三层商业楼里,和一家正畸诊所、一个跆拳道馆共享同一个停车场。楼的外墙是那种九十年代硅谷流行的灰白色,太阳一晒就像一块褪色的豆腐。

不过走进去是另一个世界。CEO Derek Huang花了不少钱做装修——开放式工位、可升降办公桌、Herman Miller的椅子,墙上刷着品牌色的渐变蓝。茶水间有一台La Marzocco咖啡机、两台冰箱、一个零食架,零食架上永远有Kirkland的mixed nuts和那种日本小饼干。角落里有一间冥想室,门上贴着一张贴纸写着”recharge & refocus”,据牛大力所知,那间房的实际用途是午睡。

每天早上的第一声响动是咖啡机的嗡鸣。九点零七分,准的——因为最早到办公室的永远是Andrei Volkov,公司的CFO。他是乌克兰人,五十来岁,灰白头发剃得很短,穿着永远是黑衬衫加黑裤子,像一个从约翰·勒卡雷的小说里走出来的角色。没人知道他的过去,也没人问。硅谷的规矩是你不问别人的过去,别人也不问你的。每个人都是从自己的前一段人生里逃出来的。

Andrei按下咖啡机,机器发出第一声嗡鸣,就像这栋建筑的起床号。

九点十五分,工程师们陆续到达。他们大多是中国人和印度人,穿着连帽衫和牛仔裤,背着同一款Northface或者Patagonia的双肩包,端着同一家Philz的外带杯。从停车场走进来的时候,他们看起来像是从同一条流水线上组装出来的。

牛大力就是其中一个。

九点半左右,产品VP李娜从电梯里出来,一手端着自己从家里带的保温杯——她从不喝公司的咖啡,说La Marzocco做出来的东西”像兑了水的焦油”——另一只手的手机贴着耳朵,用普通话在跟什么人说话,声音不大但语速很快,像在处理一件已经迟到了的事。她经过Andrei身边的时候,两个人交换了一个点头。公司里的高管们都有这种技能:用最少的肢体语言完成最多的社交义务。

再晚一点,Ravi Krishnan推开玻璃门,背着一个塞得快炸开的双肩包,手里拎着一袋Trader Joe’s的东西。Ravi是三个月前从竞对跳过来的,IIT毕业,话特别多,那种你在茶水间站三分钟就能知道他昨晚看了什么YouTube视频、他妈妈又给他介绍了什么相亲对象的人。他看见牛大力就喊了一句:”Dali!你试过Trader Joe’s新出的那个mango sticky rice ice cream没有?改变人生的,我跟你说。”牛大力还没来得及回答,Ravi已经走远了。

3

“那天早上有什么特别的事吗?”Kim问。

牛大力想了想。”有。Derek开了一个全体大会。”

全体大会是Derek Huang最喜欢的仪式。每隔几周,他就会把全公司五十多个人召集到大厅里,站在一块移动白板前面,用一种TED演讲式的语调描绘公司的未来。

Derek四十三岁,斯坦福MBA,在此之前创过两次业——第一次被收购,第二次死了。第三次是mala.ai。他长得不算帅,但有一种让人想跟着他走的魅力,就是那种你在机场酒吧遇到会主动搭话的人。他穿Allbirds,戴Apple Watch Ultra,说话的时候喜欢用手比划,好像在空气中画PPT。

“我们的模型在三个benchmark上已经超过了OopenAI,”Derek站在白板前说,每说一句就在白板上画一个向上的箭头,”下一轮融资的conversation已经在进行了。我要你们每个人都知道——你们不是在打工,你们在making history。”

牛大力坐在后排,看着Derek画了第四个箭头。他注意到Derek的Allbirds鞋底已经磨穿了一边。Making history的人大概没时间买新鞋。

他旁边的Ravi在小声给他翻译Derek刚才引用的一个棒球比喻——”bottom of the ninth的意思是最后关头,就是说我们快赢了”——Ravi来美国两年了,对美国体育的理解还停留在板球的框架里。李娜站在第二排靠墙的位置,双臂交叉,脸上的表情是一种经过精确校准的中性——既不热情也不冷淡,像一个在董事会里待久了的人的默认设定。但牛大力注意到,当Derek说到”产品方向会有一些adjust”的时候,李娜的下巴微微收紧了一下。只有一下。Andrei站在最后面,靠着门框,双手插在裤兜里。他从来不坐下来听这种会。他的表情像是在听,又像是在想别的事。

散会后,他在走廊里看到Derek拦住了一个实习生。实习生迟到了十分钟。Derek的脸从刚才全体大会上的光芒万丈切换成了一种他更熟悉的表情——不是愤怒,是比愤怒更冷的东西。他没听到Derek说了什么,但他看到实习生的手在发抖。

李娜从旁边经过,看了一眼那个场景,脚步没停。她的脸上什么表情都没有,但牛大力觉得她走得比平时快了一点。Ravi凑过来,小声说:”噢,又来了。上次他也这样骂过那个做前端的实习生,那个人后来直接quit了。”

凯文也走过来,压低声音补了一句:”Derek对迟到的人有一种私人恩怨。上辈子大概是德国火车调度员。”

牛大力没笑。他突然想起一件事——最近几天,Derek看他的眼神也变了。不是实习生那种冷,是另一种东西。像是在看一个棋盘上即将被吃掉的棋子,但还没决定什么时候动手。

他说不清那是什么。也许只是他想多了。

4

茶水间。下午三点。这是mala.ai的社交时刻——距离午饭足够远、距离下班足够近,人们端着咖啡聚在一起,假装在networking,其实是在拖延写代码。

Ravi正站在零食架前,把一盒Kirkland的mixed nuts倒进自己的咖啡杯里——他坚持认为这样吃”更有效率”。李娜坐在角落的高脚凳上,对着笔记本电脑,耳机只戴了一只,像是在听什么会议录音,偶尔皱一下眉头在键盘上敲几个字。

凯文靠在冰箱上,手里端着一杯茶水间自己做的拿铁,上面的拉花像一坨变形的cloud icon。话题不知道怎么就从Milpitas的麻辣烫开始了——可能是Ravi先提的,因为他昨天第一次吃了麻辣烫。

“我跟你们说,”Ravi把坚果咖啡放在台面上,双手比划着,”那个地方叫Mala Town还是什么来着,我一进去就被辣哭了。literally流眼泪。但是停不下来。这个东西有毒吧?这不是食物,这是drug。”

“你点的什么辣度?”牛大力问。

“Medium。”

凯文差点把拿铁喷出来。”你一个第一次吃麻辣烫的人点medium?那是给中国人点的medium。对你来说那是death。”

“现在他告诉我,”Ravi说,摊开手,”why didn’t you warn me before I went?”

“因为你没问我们啊,”牛大力说。

“而且那家的麻辣烫也不算麻辣烫,”凯文说,搅了搅拿铁,”所有东西涮完浇一层芝麻酱。芝麻酱。那是火锅蘸料,不是麻辣烫配料。这就像你把番茄酱挤进意大利面里——技术上可以吃,道德上是犯罪。”

“说到这个,”Ravi突然兴奋起来,”你们知道印度也有类似的东西吗?叫pani puri,就是一个小球,里面灌满了辣水,你一口塞进嘴里——”

“Ravi,”李娜突然从笔记本后面抬起头,摘下一只耳机,”你们从三点开始就没停过。你们一个team的人都这么闲吗?”

安静了一秒。然后Ravi说:”李娜姐,你要不要来一颗坚果?有益心脏健康。”

李娜看了一眼他的咖啡杯。”你往咖啡里倒坚果?”

“这是optimization——”

“这是犯罪。”李娜说。她的脸上没什么表情,但语气里有一种干燥的幽默,像是不小心漏出来的。

凯文和牛大力对视了一眼。李娜难得说笑话。或者说,她只是在陈述事实,只是事实本身恰好很好笑。

“说真的,”李娜没有戴回耳机,”你们公司叫mala.ai,你们有没有想过这个名字有多讽刺?”

牛大力没想到李娜会接这个话题。

“一个ABC给公司起了个中国食物的名字,”李娜继续说,语气平淡,像在读季度财报,”投资人deck上写着’Where East Meets West in AI’。我们就是那个East。我们是调味料。”

凯文举起咖啡杯。”李娜姐,我敬你这句话。”

“我不需要你敬,”李娜说,”我需要你们产品上线日期别再推了。”

Ravi笑得弯了腰。牛大力也笑了。连Andrei都在这个时候从走廊经过,端着他那杯永远是黑咖啡的黑咖啡,看了他们一眼。不是不赞同的那种看,是一种”我不理解你们在笑什么但我也无所谓”的看。

“你们美国的麻辣烫不是麻辣烫,”牛大力说,他不知道为什么自己突然想说下去,”你在长沙吃的麻辣烫是什么样的?路边摊,塑料凳子,老板用一根长筷子在滚水里涮,烫好了撒一把葱花一勺辣椒油,四块钱一碗。连碗都是不锈钢的,烫手。那才叫麻辣烫。这里的,只能算是fanfiction。”

“那我们也是fanfiction咯,”Ravi说,歪了歪头,”印度工程师、中国工程师、乌克兰CFO——全是美国对我们这些人的fanfiction。”

所有人安静了一秒。Ravi有时候就会这样,在一堆废话中间突然说出一句让人想很久的东西。

茶水间的灯光是暖黄色的,窗外的停车场在加州下午的阳光下白得刺眼。这是一个普通的下午。这是每一个下午。

5

牛大力说到这里停了一下。他意识到自己已经讲了好几分钟的麻辣烫和拉花,但Kim要听的是案件。

“抱歉,”他说,”我跑题了。”

Kim没抬头,笔还在动。”没关系。这些都有用。”她翻了一页笔记本。”那天下午在茶水间,都有谁?”

牛大力想了想。”Ravi,李娜,凯文,我。Andrei路过了一下。来来去去的还有几个人进来倒过咖啡。”

“你跟他们关系都怎么样?”

“都不错。凯文是大学同学,认识最久。Ravi来了三个月,但他那个人很快就跟谁都熟了。李娜……李娜比较难说。她不太跟人交心,但人很好,那天她还难得跟我们开了个玩笑。Andrei就更不用说了,没人真的了解他。”

Kim点了点头,在笔记本上记了什么。

6

Kim把笔放下了。”说说Derek Huang。你和他的关系怎么样?”

牛大力想了想。”正常。就是老板和员工的关系。”

“具体一点。”

“他对我的工作评价不错。去年年底的performance review他给我打了Exceeds Expectations。但是……”

“但是什么?”

“最近几周他对我的态度变了。我说不清是什么——不是明显的敌意,更像是一种……距离感。以前我在走廊里遇到他,他会停下来问问项目进展,有时候还开玩笑。但最近他看到我就点个头,然后快步走开。有一次我在Micro Kitchen遇到他,他看着我——就那样看着我,看了大概三秒——然后什么都没说就走了。”

“你觉得那是什么?”

“我不知道。”这是实话。”后来我想过很多,但那时候我真的不知道。”

他现在知道了。但那是后来的事。

7

窗外的光线暗了下来。询问室没有窗,但牛大力能感觉到外面的天在变暗——不知道为什么,被困在一个封闭空间里,你反而对外面的天色更加敏感。也许是本能。也许是因为你知道你不能出去。

他给Kim讲了更多的事。讲了mala.ai的办公室布局(他甚至在纸上画了一张草图),讲了团队的结构,讲了他负责的那个核心模型。他没有讲模型训练数据的问题。不是故意隐瞒——是他当时还不知道那件事会如此重要。

他讲了Derek的日常——早上九点半准时出现,总是最后到的那个管理层。讲了Derek怎么在Slack上用一种既casual又有压迫感的方式发消息——结尾永远是一个句号,不是感叹号也不是emoji,就是一个句号。一个句号比一百个感叹号更有威慑力。Ravi有一次说,每次收到Derek的Slack消息,他都要先做一次深呼吸再点开,”像拆一个可能是炸弹也可能是红包的快递”。

他讲了李娜——她总是最后一个离开办公室的管理层,比Derek还晚。有人说她是工作狂,也有人说她是不想回家。他讲了Andrei——那个从不参加team lunch的CFO,午餐永远是一份从家里带的三明治,在自己的办公室里关着门吃。

他讲了公司楼下的停车场,讲了对面街上的帐篷区。

“帐篷区?”Kim抬了一下眉毛。

“就在马路对面。大概十几顶帐篷。我们每天停好车走进公司的时候会经过那里。”

“你有什么感觉?”

牛大力沉默了一会儿。”你知道最讽刺的是什么吗?我们公司做的是AI,我们说我们在building the future。但我每天早上路过那些帐篷的时候,我能闻到——”他停了一下,”一种气味。不是臭,是一种很复杂的气味,像脏衣服和雨水和塑料布混在一起。每天早上我闻到那个气味,然后走进公司,闻到La Marzocco咖啡机的咖啡香。两种气味之间的距离是三十米。三十米。创造未来的人和被未来抛弃的人,共享同一个邮编。”

Kim没说话。她在等他继续。

“抱歉,”他说,”这和案件无关。”

“你继续。”Kim说,”你能想到的所有事都有可能有关。”

8

“那一天,你有没有觉得有什么不对劲的地方?”Kim问。”任何不寻常的事。”

牛大力想了很久。

画面在他脑子里像一段损坏的录像带反复播放。Derek的Allbirds。全体大会上的箭头。实习生发抖的手。李娜收紧的下巴。Ravi的坚果咖啡。Andrei靠在门框上的轮廓。茶水间暖黄色的灯光。停车场刺眼的阳光。

“没有。”他最终说。”那就是一个普通的日子。和之前的每一天一样。和之后的每一天一样。”

他抬起头,看着Kim。

“这就是问题所在,不是吗?”他说。”如果那天有什么不对劲的地方,我会记住的。但那天什么都没有。所以它就混进了其他所有的日子里。像一滴水掉进了海里。”

Kim合上了笔记本。灯管还在闪。

“今天先到这里。”她说。”明天我们继续。我需要你再仔细想想。尤其是那天晚上的事。”

那天晚上。

牛大力点了点头,站起来。金属椅子在地板上刮出一声尖响。

他走出询问室,穿过走廊。走廊尽头有一扇窗,外面是圣何塞的夜景——101公路上的车灯像发光的血管,蜿蜒消失在远处。一切正常。一切都是每天的样子。

但有一个人已经死了。


第二章:「早安,Mala」

9

第二天晚上,Detective Kim把录音笔按开的时候,牛大力先听见的是自己呼吸的声音。

“我们继续。”Kim说,“从早上开始。你说‘那天早上’。”

那天早上。

牛大力每次想到这里,脑子里先出现的都不是人,是一个纸杯。白底,绿色字母,Philz。杯壁上有一圈被手心捂出来的水汽。

10

早上八点四十七分,他刷卡进办公室,门禁“滴”了一声,像所有工作日一样干脆。

凯文已经在工位上了,深蓝色连帽衫,袖口有一点起球,桌角放着四五杯Philz的外带杯,杯盖上贴着不同的便签。

这倒不算什么新鲜事。凯文到得早,每隔几天就会在群里发一句”Philz run, 谁要+1”,然后帮大家带上来。今天Ravi在群里要了chai latte,李娜让带一杯冰美式,还有两个前端的工程师也跟了单。牛大力前一晚上睡得不好,早上通勤的时候在群里回了一句”薄荷拿铁”。

“来,你的。”凯文从杯子堆里挑出一杯递过去。

牛大力接过来,打开杯盖闻了闻。薄荷味很冲,像有人在清晨把一扇窗猛地推开。

Ravi从外面冲进来,双肩包拉链都没拉好,一把抓走桌上写着他名字的那杯:”Kevin你是天使。如果你是一个app我给你五星。”他又从自己的双肩包里掏出一个塑料袋,”这是我妈寄过来的masala chips,你们一人一包,不要跟我客气。”

他往牛大力桌上扔了一包,又往凯文桌上扔了一包,然后拎着剩下的朝李娜的方向走去。

凯文低头看了一眼那包chips,笑了:”Ravi的妈妈一定觉得他在喂一整个村子。”

“今天有什么事?”牛大力问。

“没事。”凯文耸耸肩,”开会多。省得你十点前死机。”

11

mala.ai的早晨永远是工业化的。

升降桌缓慢上升的电机声,机械键盘像雨点一样落在木桌板上,显示器背光把每张脸照成同一种白。Ravi一边插电源一边讲他昨晚在Reddit上看到的阴谋论,Andrei路过茶水间,给自己的黑咖啡加第二次浓缩。李娜从会议室里走出来,手机贴着耳朵,中文和英文切换得没有缝,像在双语操作系统里开了两个线程。

牛大力坐下,打开Slack。未读消息四十三条。最上面是Derek昨晚十一点发的提醒:

Need final numbers by EOD Thursday.

句号依然在。Derek所有消息都带句号。好像每句话都已经定案。

12

十点零五分,全员会。

Derek站在大厅白板前面,画了三个箭头,讲了四次“execution”,两次“category-defining”,一次“once-in-a-generation opportunity”。

“下周和两家顶级基金进深聊,”他说,“我们离breakout就差一个漂亮的数据点。”

掌声响起来,稀稀拉拉。工程师们的掌声都像在跑单元测试,目标是“通过”,不是“动情”。

牛大力坐在后排,盯着Derek鞋边那道磨损。那双Allbirds左脚外侧磨得更厉害。一个总在往前冲的人,重心会偏向同一边。

会议结束时,Derek的目光在他脸上停了两秒。就两秒,不长,但足够让人不舒服。那不是“你做得不错”的目光,也不是“你给我麻烦了”的目光。更像是一个人站在超市货架前,看着某件东西,判断它还能不能继续用。

13

午饭去的是公司后面那家越南粉店,门口写着cash preferred,玻璃门上贴着一张褪色的NOW HIRING

他们六个人挤在一张四人桌,桌子摇摇晃晃,像硅谷所有早期创业公司的组织结构。

Ravi先开炮:“你们美国人这个小费系统太奇怪了。菜单价格不是价格,真正价格藏在后面。你们用guilt定价。”

凯文说:“15%是礼貌,18%是正常,20%是你想下辈子投胎当好人。”

“那0%呢?”Ravi问。

“0%是你还没走出门就被老板娘拿拖鞋追出来。”

全桌笑了。

牛大力看着账单计算器上的数字跳来跳去,说:“我每次都给20%,不是因为我想给。是因为我怕我算错,然后被定义成‘那个中国工程师’。”

李娜把筷子放下,淡淡地说:“欢迎来到美国。这里一切都可以量化,除了体面。体面靠自觉充值。”

Andrei抬眼看了她一下,没接话,继续喝汤。

14

回程路上,太阳亮得过分。停车场对面帐篷区的蓝色篷布在风里拍打,像一排旧旗子。

Ravi还在讲房租:“我昨天看Zillow,Santa Clara一个一居室要三千二。三千二!这个价格在班加罗尔我能住进一个有泳池和健身房的高层。”

凯文说:“在这里三千二你住进的是‘地理位置优越’。翻译一下就是‘厨房和床之间只有一步’。”

“你们至少还有H1B,”Ravi说,”我还在F1 OPT,四月份抽签,求God保佑我能中。”

牛大力没说话。Ravi一提签证,他就忍不住打开了手机上的case tracker。页面转了两秒,跳出来的还是那行字:Case Was Received。两年了,一直是这行字。每次看都像在读一句没有主语的判决。

他们走进公司,自动门关上,外面的风和味道一起被隔绝。里面是咖啡、空调、显示器。未来总有一股很干净的气味。

15

下午四点二十三分,第一条异常消息出现。

Ravi在工程频道里发了一个链接:new vLLM CVE dropped

两分钟后,另一个人贴了PoC。三分钟后,SRE在群里问are we exposed in prod?。四点三十一分,Derek出现:

All engineering hands on deck. Assess impact NOW.

这次没有句号。

办公室的空气在十秒内变了。有人把外放音乐关掉,有人冲向白板写服务依赖,有人开始翻锁定版本和镜像哈希。连茶水间咖啡机都停了,因为没人再去按它。 Ravi第一个跑到白板前面,拿起马克笔画了一张服务依赖图,速度快得像在做限时考试。李娜从会议室里出来,耳机摘了,手机收了,走到工程区问:”影响范围出来了吗?我需要给客户那边发个预警。”Andrei不知道什么时候也出现了,站在Ravi身后看那张依赖图,一言不发,但偶尔会伸手点一下某个节点,意思是”这里也要查”。 凯文把椅子滑到牛大力旁边,语速比平时快一点:“你看推理服务那层,我去查我们fork的分支和上游差异。先别慌,先算暴露面。”

牛大力点头,手已经在键盘上了。

16

傍晚六点十五分,Derek从会议室出来,脸色不好看。

“今晚所有人都别走。”他说,“我要凌晨前看到结论。不是明天。是今晚。”

李娜问:“如果要热修,产品节奏要不要调整?”

Derek看都没看她:“现在不是讨论节奏的时候。”

这句话像一记干脆的耳光。李娜下巴收紧,没再说话。她转身回了工位,打开一个Google Doc开始写客户沟通的话术模版,键盘敲得很用力,像在把那记耳光还回去。

到了七点前后,饥饿开始蔓延。Ravi第一个投降:”我要死了,谁去买吃的?”他翻了翻手机上的DoorDash,嫌配送费太贵,又关掉。李娜说她车里有几根能量棒,去拿了一把回来,往桌上一撒:”先顶着。”Andrei从自己办公室里拿出一袋超市买的杏仁,放在公共区,没说话。

凯文起身抓了抓头发:”我去买点吃的吧,反正我车在楼下。你们要什么?”

Ravi喊了一句”三明治,什么都行”。另一个前端工程师说”饭团”。牛大力说”都行”。

“好,我尽快回来。”

凯文拿起车钥匙就走了。

当时这件事没有任何特别。加班夜里,总得有人出去跑一趟。只是在后来,牛大力总会记起这句”我尽快回来”,像一颗没有拧紧的螺丝,安静地卡在记忆里。

17

后来的记忆变得不那么清晰了。不是忘了,是太多东西堆在一起,像同一个文件夹里塞了太多截图,缩略图全部缩成了一团。

他记得补丁改了很久。有人在白板上画了三遍架构图又擦掉。Ravi在某个时刻瘫在椅子上仰头看天花板,说了句”如果这就是AI革命,那我建议革命明天再来”。有人笑了两声,很快又安静。李娜不知道什么时候泡了一壶茶放在公共桌上,旁边摆了一排纸杯,谁渴了自己倒。Andrei回了一趟自己的办公室,出来的时候换了一双拖鞋——他在公司放了一双——大概是做好了通宵的准备。

凯文回来了,手里拎着两大袋便利店的东西。他什么时候回来的?牛大力不确定。好像是八点多,也可能是九点。Ravi扑过去翻袋子,找到自己的三明治,撕开包装狼吞虎咽。凯文把饭团递给那个前端工程师,自己坐回了牛大力对面,深蓝连帽衫在冷白灯下看起来几乎是黑色的,开始帮他看一段推理链路的异常日志。

补丁的事慢慢稳定下来之后,凯文突然合上笔记本说:”走,出去吃个拉面。盯屏幕太久了。”

他们去了公司附近新开的那家拉面店。店里很空,只有他们两个客人,后厨传来抽油烟机的轰鸣和日语的低声说笑。凯文点了浓汤豚骨,他要了酱油拉面。

面上来之前,凯文看着他说:”你今天状态不对。”

“嗯?”

“太安静了。比平时安静。”

牛大力拿起筷子戳了戳面前的小碟蘸料。”可能就是累。”

凯文没追问。他们沉默地吃完了拉面。

回到公司以后继续写代码。pair programming,凯文写一段他review,交替进行,像两个人合下一盘很慢的棋。这种节奏他很熟悉——大学的时候他们就这样写作业,一个人敲一个人看,谁先发现bug谁请下一顿奶茶。安静的,有效率的,不需要说话的那种默契。

窗外停车场的灯光照进来,把地板切成一条一条的明暗。

18

凌晨的时候,人终于开始散了。Ravi第一个倒下,直接躺在休息区的沙发上,用自己的Patagonia外套盖着脸。李娜叫了一辆Uber,走之前把茶壶洗了放回柜子里。Andrei不知道什么时候已经走了,没人看见他离开——他总是这样,像一个不会触发门铃的人。几个工程师打车回家,有人回工位补最后一封邮件。

牛大力收电脑的时候,看见凯文还在发Slack消息,内容是例行进度更新,后面跟了个平时常用的emoji。看起来一切都正常,正常得像模板。

他走到门口,回头看了一眼办公室。灯还亮着一半,像城市里任何一个加班中的楼层。

“那天晚上就是这样。”牛大力对Kim说。

Kim翻了翻笔记,没有抬头。”你确定?就这些?”

“就这些。一个普通的加班夜。”

Kim把笔记本合上,说了句”好,今天先到这里”。

牛大力站起来,金属椅子在地板上刮出一声尖响。走出询问室的时候,他总觉得有什么地方不太对。像一段代码通过了所有测试,lint也没有报错,但你就是觉得哪里不干净。你说不出是哪一行。你只是觉得。

在硅谷,很多日子都像重复提交的代码。你以为自己在写新版本,其实只是在覆盖旧文件。而最危险的bug,往往藏在你以为没改过的那几行里。

第三章:「顶层的沉默」

19

第三天晚上,Kim又把录音笔放在桌上,红灯亮起来。

“我们把时间线往后推。”她说,“发现尸体之后,你当时在哪儿?”

牛大力盯着那颗红点看了两秒。

“公司。”他说,“和凯文一起。”

Kim点头,像是早就知道答案。

“从你接到电话开始说。”

20

电话是晚上十点多打来的。号码他不认识。

“Is this Dali Niu? This is San Jose Police Department. We need you to come to your office immediately.”

那一瞬间他脑子是空的。不是恐惧,是一种系统卡死式的空白,像你在终端里敲了一条命令,屏幕只回你一个转个不停的光标。

“发生什么了?”

“A death investigation, sir.”

他站在公寓厨房里,手还扶着水槽边,指尖有点发麻。灶台上是一锅刚煮开的挂面,蒸汽往上顶,把油烟机下面那盏灯熏出一圈白雾。

他把火关了,外套也没换,抓起车钥匙就出门。

101公路夜里照样堵,只是不再是白天那种硬塞,而是一段一段地挪。车流像低帧率视频,卡一下,走两米,再卡一下。导航显示二十三分钟,他开了四十分钟。

到公司楼下的时候,停车场已经停了两辆警车。蓝红警灯在墙面上轮流刷过,像廉价夜店的灯光,但没有音乐。

21

大楼一层的玻璃门开着,保安站在门口,脸色比平时白。

“上面,顶楼会议室。”保安说,“你们CEO……在里面。”

牛大力抬头看了一眼楼梯间。那条往上的楼梯平时很少有人走,灯管偏暗,拐角处的阴影显得很深。

电梯门开的时候,他先闻到一股过冷空调和清洁剂混在一起的味道。警戒线把顶层走廊拦成两截。会议室门开着,门口站着两名法证人员,白色连体防护服在灯下发蓝。

再往里一点,两个穿制服的巡警靠在打印机旁边低声聊天,声音压得很低,但在空走廊里反而清楚。

“你看《三体》了吗?”一个问。

“小说看了,Netflix那个我看了三集就关了,”另一个说,“中国科幻现在确实猛,但那个改编……有点浪费。”

“对吧,我就说。你不能把所有角色都拍成会说俏皮话的美剧人设。”

说完这句,两人又立刻收声,转头看向警戒线里。

李娜靠在走廊尽头的墙边,双臂抱在胸前,手机攥得很紧,屏幕亮了又灭。Ravi坐在地上,后背贴着墙,眼神发直,像刚跑完一场半马却不知道终点在哪。Andrei站在窗边,手插在裤兜里,脸上没有表情,像任何一次季度财报会前的样子。

凯文在离他两步远的地方,先看见他,走过来拍了拍他肩膀。

“你没事吧?”凯文问。

牛大力摇头。其实他不知道自己有没有事。

“到底怎么回事?”

“行政助理晚上一直联系不上Derek,”凯文压低声音说,“电话不接,Slack不回。她让保安上来看,门打开就……”

他停了一下,又补了一句:“她说下午还收到过Derek发的短信,让她把周四的会都取消,说要在家准备董事会。”

他没把后半句说完。

22

Detective Kim就是在那时出现的。她戴着一次性手套,从警戒线里走出来,手里拿着一个薄本子。

“Dali Niu?”

“是我。”

“我需要你和其他人都留在现场。我们要逐个做初步问询。”

她看人的方式很特别,不凶,也不温和。像在读一段你以为写得很清楚、其实全是歧义的代码。

先被叫走的是行政助理,接着是保安,再是李娜。Ravi进去之前小声骂了句“what the hell”,像在骂一个突然崩掉的线上服务。Andrei进去出来都很快,前后不超过七分钟。

轮到牛大力时,Kim的第一个问题不是“你最后一次见到死者是什么时候”。

她问的是:

“今晚联系不上你们CEO的时候,为什么没人第一时间觉得不对?”

牛大力愣了一下。“我们以为他在家办公。”

“为什么会这么以为?”

“Slack状态。”他说,“下午就改成了🏠 Working from home — board prep day。他还在#general发了消息,说今天专心准备董事会材料,urgent的再找他。”

Kim翻了翻本子,又问:“所以你们所有人都默认,他在家,在线,只是没回消息?”

“对。”

这个“对”出口的时候,牛大力自己都觉得荒唐。一个几十人的公司,从傍晚到深夜都没人见过CEO本人,却可以靠一个状态图标维持秩序运行。

在硅谷,在线状态有时候比真人更像真人。

23

问询结束已经过了午夜。会议室门口的灯还亮着,法证人员进进出出,提着黑色器材箱。

Kim让他们在大厅等,随时准备补充口供。

Ravi站在咖啡机前,按了两次都没按出东西,才想起来机器晚上会自动关机。他低声说了句“连咖啡都没了”,听起来像一句非常不合时宜的遗言。

他转过头又嘟囔了一句:“昨天也熬到半夜,今天又来这一出……我脑子已经分不清是哪天了。”

李娜在给谁发消息,打字速度比平时快一倍,删掉重写又删掉。Andrei去自动贩卖机买了一瓶常温水,拧开喝了两口,剩下半瓶一直攥在手里。

凯文拉了把椅子坐到牛大力旁边。

牛大力这时才注意到,凯文还是那件深蓝连帽衫,袖口那点起球的位置都没变。硅谷工程师连着两天穿同一件衣服很常见,但那一秒他还是生出了一点说不清的熟悉感。

“你脸色很差。”他说,“先坐着,别硬撑。”

牛大力点点头,坐下去,才发现自己腿在抖。

“你今天什么时候和我在一起的?”他忽然问。

凯文看了他一眼,像是没想到他会问这个。

“下班后一直在一起啊。你忘了?我们六点多就在那边pair,后来还去吃了拉面,回来继续改日志。”

牛大力“嗯”了一声。他当然记得。至少他以为自己记得。

24

凌晨一点半左右,Kim把他们重新叫到会议室外的小桌前,做最后一轮时间线确认。

她说得很直接:“今晚每个人都给我一个可验证的不在场证明。几点到几点,和谁在一起,做了什么,谁能作证。”

“另外,”她抬头扫了一圈,“我们会调门禁、Slack记录和代码提交时间。各位今晚先不要删消息,也不要改状态。”

李娜先说了自己的行程,精确到会议和电话时间。Andrei报了一串几乎没有情绪的时间节点,像在念一份审计流水。Ravi卡壳了两次,最后靠Slack和Git提交时间把自己拼完整。

凯文的说法最完整,也最容易核对。

“我和Dali从晚上六点到十点基本都在一起,”他说,“中间出去吃了四十分钟拉面。回公司后继续pair。我们的提交记录能对上,门禁也能查到。”

Kim把目光转向牛大力:“他说的准确吗?”

“准确。”牛大力说。

她点头,记下。

那一刻,牛大力甚至有一点荒谬的安心。像在一团噪音里终于抓到一根稳定的线:至少有一个人的时间是清楚的,至少有一段记忆是可以被证实的。

后来他才知道,安心有时候也会误导人。

他和凯文一起走出公司大门时,凌晨的风很冷。停车场里警灯还在闪,蓝一下,红一下,像一个永远不结束的光标。

“回去睡一觉吧。”凯文说。

牛大力点头。

那段时间在他的记忆里,一直有一个固定的名字。很久以后他才发现,记忆先给出的标签,未必总是最接近真相。


第四章:「每个人的裂缝」

25

第四天,Kim没再让牛大力“从头说起”。

她把一叠打印材料放在桌上,指尖在最上面那页轻轻敲了一下。

“今天我们不聊感觉,”她说,“聊动机。一个一个来。”

牛大力点头。他知道这一轮会很难。

凶案之后,公司里每个人都像刚刚升级过一次防火墙。说话更慢,邮件更短,Slack里emoji突然变少。茶水间还有咖啡香,但人们端着杯子站在一起时,先看的是彼此的眼睛,确认对方值不值得说下一句。

26

第一个是李娜。

Kim把一份截图推到桌子中间。邮件草稿,收件人是董事会,标题是Re: Product Leadership Change。草稿里有一句话被高亮:transition in product leadership after the board meeting

“你知道这封草稿吗?”Kim问。

李娜盯着那行字看了两秒,嘴角绷得很直。“不知道。”

“你和Derek最近关系很紧张。”

“我和他一直紧张,”李娜说,“我们在战略上有分歧,不是新闻。”

“如果董事会后你被降职呢?”

李娜笑了一下,笑意很薄。“Detective,我在硅谷做了十年。今天title在,明天title没了,这种事我见得比你见尸体还多。”

她停了一下,声音压低:“但我不会因为一封我没见过的草稿去杀人。”

牛大力后来回想,那一刻李娜脸上同时有两种表情:愤怒和恐惧。愤怒是给Kim的,恐惧是给那封邮件的。

27

第二个是Andrei。

Kim给他看的是一段楼梯间监控,画面颗粒粗得像上个世纪的录像带。一个模糊身影穿着深灰色外套,从顶层往下走。

“这件外套像你的。”Kim说。

Andrei看完,面无表情。“像,不代表是。”

“你有一件类似的深灰大衣。”

“丢了。两周前。”

“有报失记录吗?”

“没有。”

Kim把笔放下。那一下很轻,但房间里所有人都听见了。

Andrei继续说:“你们想要一个简单故事:有财务问题的CFO,深夜出现在楼梯间。很好讲。但现实不是PPT。”

他说完就沉默,像把门从里面锁上。

28

第三个是Ravi。

这次是数字取证。Kim把一张内部搜索日志递过去:Derek Huang stock options vesting schedule,账号名是Ravi。

“这不是我搜的。”Ravi第一反应就是摇头,摇得很用力,“I swear to god,这真的不是我。”

“记录显示是你的工位设备,你的账号,周三下午。”

“那时候我在修bug!我可能去过厕所,或者去拿咖啡,但我没搜这个。”

Kim没接这句话,只问:“你为什么会关心他vesting?”

“我不关心!”Ravi声音抬高了半格,又自己压下去,“我连自己401(k)都懒得看。”

他说完那句,抬头看牛大力,眼神像在问:你信我吗?

牛大力没法立刻回答。不是不想,是他突然发现自己对所有人的记忆都开始失真。

29

第四个轮到牛大力自己。

Kim把笔记本转了个方向,像是故意提醒他:你不是旁听席,你也在名单里。

“你和Derek最后一次一对一谈话是什么时候?”

“案发前一周。”牛大力说。

“谈了什么?”

“项目,董事会,和……一些方向问题。”

“方向问题,还是责任切割?”Kim盯着他,“我们看到你负责的模型有合规灰区。你有没有担心,Derek会把问题推到你身上?”

牛大力喉咙发紧,没立刻回答。

Kim继续问:“如果你觉得自己会被开除、被起诉、签证受影响——这是不是动机?”

这句话落下来的时候,房间安静得能听到空调风口的嗡鸣。

“我没有杀他。”牛大力说。

“我问的不是结论,”Kim说,“我问的是动机是否存在。”

牛大力看着桌上的木纹,一道一道,像程序里的缩进线。过了几秒,他才说:“存在。压力一直都在。但存在动机,不等于会去做那件事。”

Kim点头,把这句记了下来。

“还有时间线。”她说,“周四晚上六点到十点,你和谁在一起?”

“凯文。”

“持续在一起?”

“中间出去吃了拉面,其他时间基本都在一起。”

Kim把笔帽扣上,又打开,像在想什么。

“好。你的设备也会做完整取证。手机、公司电脑、门禁、提交记录,都会核。”

牛大力点了点头。那一刻他第一次真正理解了“嫌疑人”这个词——不是一个标签,是一种被系统性拆开的感觉。

30

轮到凯文时,问询节奏明显快了一点。Kim的问题仍然直接,但语气比前面更平。

“你周四下午三点刷过顶楼门禁。”Kim说。

“对,”凯文点头,“我去拿Derek之前答应借我的一本书。门锁着,我没进去,站了半分钟就下来了。”

“有人听到你周一和Derek在走廊争执。”

“技术路线吵架,API接口怎么拆。我们经常吵。”

“你周三深夜11点发过一封CVE相关邮件。”

“那天都在加班,发封总结很正常。”

Kim把三份打印页并排摆开:门禁、Git提交、Slack时间戳。

“18:12到20:03,你和Dali在同一分支有交替提交。20:11到20:49,这段空白在做什么?”

“去吃拉面。”凯文说。

“谁提议的?”

“我。”

“回来后呢?”

“继续pair,到十点左右。”

Kim又问了两条细节:拉面店位置、回程路线。凯文都答上来了。

她把那几页叠回去,点了点头,示意下一位。

牛大力坐在旁边,看着表格里一串一串时间,忽然觉得它们像自动生成的日志:格式正确,语法正确,但没有任何温度。

31

那天晚上回去以后,牛大力想起一段更早的对话。

案发前一周,Derek在会议室单独找过他。没骂人,也没拍桌子,只是用那种过分温和的语气说:“Dali,下周董事会之后,一切都会不一样。你要提前做好心理准备。”

当时他以为Derek在说组织调整,或者融资节奏。现在回看,那句话像一个提前写好的判决,只是他当时听不懂。

凌晨一点,凯文发消息问他要不要出来透气。

他们去了凯文公寓,电视里放的是《无间道》。两个人都没怎么喝酒,只开了一罐气泡水。

电影播到后半段,凯文忽然按了暂停。

“你说刘建明最后是真的疯了,”他问,“还是一直清醒,只是选择活在谎言里?”

牛大力盯着暂停画面里那张脸,说:“也许没有区别。”

凯文笑了一下,没接话,按下播放。

窗外是圣何塞凌晨的安静街区。屋里是粤语对白和空调的低噪。手机屏幕一会儿亮一会儿灭,LinkedIn推送着某某人“Thrilled to announce”升职、融资、跳槽,像一场永不落幕的线上庆典。

现实里,每个人都在用不同方式崩溃。

第二天早上,Kim给牛大力发来一条简短短信:

We are focusing on Lina as primary suspect for now.

牛大力盯着那行字看了很久,心里却没有任何“案子快结束了”的轻松。

他说不上来哪里不对。


第五章:「完美的不在场」

32

第三次问询时,Detective Kim没再从“那天早上”问起。

她把一份打印报告推到牛大力面前,手指压在最后一行。

“法医初步意见,”她说,“死亡时间窗口:周三晚到周四晚。”

牛大力看着那行字,第一反应不是震惊,是一种荒谬的错位感。周三晚到周四晚,像一个被随手写下的范围,宽得足够容纳所有人的侥幸。

“你们现在更怀疑谁?”他问。

Kim翻开下一页,是Derek电脑里恢复出的邮件草稿。

Re: Product Leadership Change

收件人是董事会,内容暗示李娜在下次会议后会被降职。草稿最后修改时间显示周四下午。

“有动机,有权限进顶层,周四晚没有可靠的不在场证明。”Kim说,“李娜目前是第一嫌疑人。”

她停了一秒,又补了一句:“Andrei也没排除。楼梯间拍到一个模糊人影,穿深灰大衣,体型和他接近。”

牛大力点点头,像一个配合调查的普通证人。

可他心里没有“快破案了”的轻松。只有一层更薄、更冷的东西,贴在胸口。

33

晚上八点,凯文给他发消息:

“家里没菜,去不去大华?”

他们在Ranch 99的冷冻柜前站了快十分钟。凯文拿起一袋思念水饺,看配料表,又放回去;又拿起来,再放回去。

“你知道我妈包的饺子是什么馅吗?”凯文问,“韭菜鸡蛋。她会放一点虾皮,别人家都不放。”

“我妈也是韭菜鸡蛋。”牛大力说。

“不一样的,”凯文笑了笑,“每家人的韭菜鸡蛋都不一样。”

他盯着袋子背面的营养表,声音突然低下来。

“我四年没回去了。每次打电话我妈都问,什么时候回来。我都说快了快了。快了。四年了。”

说完他把那袋水饺扔进购物车,语气一秒钟切回平常。

“走,看看五花肉。上次买的太瘦,烤出来像纸板。”

他们推着车从冷冻区走到生鲜区,路过一排排写着“限时特价”的红牌子。牛大力忽然想起他们这些人也是这样活着:白天在圣何塞调参数、写文档、讨论product-market fit;晚上在微信里跟国内家人报平安,假装自己没有错过任何一个节日。

他们同时活在两个时区里。

34

第二天中午,办公室微波炉前排着队。凯文端着餐盒,像随口聊天那样说:

“Costco牛肉又涨价了,离谱。”

牛大力抬头看他,愣了半秒。

“你昨天是不是也说过这句?”

“有吗?”凯文笑,“那说明它真的涨得很离谱。”

Ravi在旁边插话:“CVE那个事你们怎么看?影响到底多大?”

凯文接得很快,几乎抢在所有人前面:“对啊,我也正想问——”

“昨天不是已经修完了吗?”另一个工程师把饭盒从微波炉里拿出来,“补丁昨晚就merge了。”

“对,今天就正常监控了。”Ravi说。

凯文停了一下,笑着耸肩:“行,那我白紧张了。”

话题立刻被带去别处——有人在抱怨停车费,又有人在争论哪家拉面店的汤底最咸。牛大力也跟着笑,但那一秒短暂停顿像一粒沙,卡在他记忆里。

35

当晚七点多,凯文在Slack敲他:

“新开那家拉面去不去?我今天特别想吃拉面。”

“走。”

店在Japantown边上,门口排了二十分钟。凯文点了最辣那档,吃到一半开始出汗,还坚持说“这家不够劲”。他们聊了半天无关紧要的东西:101哪一段永远堵,GitHub Copilot最近又改了什么交互,旧金山的房租到底是不是集体幻觉。

回程路上凯文说:“你看,今天其实也没那么糟。”

牛大力当时点了头。

后来他在问询室里回忆“那天晚上”时,脑子里第一个跳出来的就是这碗拉面。热气、排队号码、凯文说“今天特别想吃拉面”的语气。这个“今天”太具体了,具体得像一颗钉子,把他整段记忆钉在“案发当天=周四”的木板上。

可那块木板,本来就是凯文递给他的。

36

第四次问询,Kim把一叠时间线放在桌上,从左到右排开:门禁、Slack、Git、外卖单、网约车记录。

“证据在收拢。”她说,“李娜这边很快会有结果。”

牛大力盯着那叠纸,听见自己开口:“凯文……有问题吗?”

Kim看了他一眼。“目前没有。周四晚他和你长时间同处,时间戳很干净。比很多人都干净。”

她说“很干净”的时候语气很平,像在描述一份格式正确的日志。

牛大力想起另一个时间段:周三晚上,CVE全员响应那会儿,凯文说去买饭,后来隔了很久才回来。那段空白他本来已经忘了,或者说,他让自己忘了。

“还有别的信息吗?”Kim问。

牛大力沉默了几秒,最终摇头。

“没有了。”

他知道自己在做什么。

他也知道自己为什么这么做。

有些人你认识太久,久到你宁可怀疑自己的记忆,也不愿先怀疑他。

尤其当那个人是凯文。


第六章:「星期三 / He’s Replaceable」

37

牛大力是在公司会议室写第二份书面陈述时发现不对劲的。

白板上还留着前一天的路线图:Q1、Q2、latency、ARR,几个词被擦得只剩一层浅灰色影子。空调吹得太冷,他把连帽衫拉链拉到喉咙,盯着电脑屏幕上那行字:

“那天晚上大家都在修vLLM漏洞。”

他手停在键盘上,突然想起CVE的披露时间是周三下午五点半。补丁也是周三深夜合并的。周四晚上办公室不该还有那种“production还没patch”的集体紧张。

如果他的记忆里有那种紧张,那就不是周四。

他盯着那行字,像盯着一条本来就在那里的裂缝,直到它一点一点张开。

38

“不可能。”他低声说了一句。

但脑子已经开始自动回放。

周三和周四像两段录音,被人剪开又重新拼接。Philz咖啡、深蓝连帽衫、Costco牛肉涨价、Slack里几乎一模一样的meme、晚上长时间pair programming,所有锚点都在重复。重复到最后,连“那天”这个词都变得可疑。

凯文没有伪造一段记忆。

凯文只是把两天做成了同一天。

牛大力打开通讯录,给Ravi打过去。

39

Ravi接电话时背景音轰得像机场。

“Dali?等会儿等会儿,我这把马上打完。这个赛季平衡组是疯了吗,法师伤害砍成这样——还有印度服延迟又上去了,我ping值现在一百八,你敢信?”

牛大力没接他的话,直接问:“周三晚上修CVE那会儿,凯文是不是出去过?”

Ravi那边先是键盘噼里啪啦,然后是半秒安静。

“出去过啊,”他说,“他说去买晚饭。挺久的,差不多两小时吧。我那会儿还在找他。”

“找他干嘛?”

“我有个和漏洞相关的edge case想让他看,发Slack没人回,工位也没人。后来补丁都merge了我就没再找了。第二天当然不会再找,事情都过去了。”

牛大力闭上眼,握着手机的手心出了一层薄汗。

Ravi在电话那头继续抱怨:“你突然问这个干嘛?等等,我被秒了……我靠这游戏——”

“没事。”牛大力说,“谢谢。”

挂断之后,他对着黑掉的屏幕坐了很久。

法医写的是周三晚到周四晚。

Ravi记得凯文周三消失两小时。

而他自己,一直在拿周四的拉面给周三作证。

40

牛大力把更新后的陈述发给Kim,只写了两行:

“你们看错了一天。请重查周三晚上。”

二十分钟后,Kim电话打来。

“你现在在哪?”

“公司。”

“别走。我十五分钟到。”

Kim到的时候没带寒暄,直接把平板转给他看。她已经让技术组回拉周三的门禁和楼内监控。

19:02,凯文从工程区离开,进了楼梯间监控盲区。

21:07,他从同一处楼梯口返回工位区域。

“之前我们默认案发在周四,只调了周四影像。”Kim说,“你这条线把窗口打开了。”

她又翻到另一页:周三晚间,顶层附近没有凯文的个人门禁记录,但Derek的卡在21:14触发过一次。

Kim抬头看他。

“这不是巧合了。”

41

凌晨一点,警方在凯文公寓楼下把人带走。

牛大力没有去现场。他坐在自己车里,看着仪表盘上的时间从00:58跳到01:03。手机震了一下,是Kim发来的短信:

He is in custody.

第二天下午,Kim让他去看一段审讯录像。

画面里的凯文穿着灰色囚服,头发没梳,整个人看起来比平时瘦了一圈。他听完问题,没有立刻反驳,只是很慢地抹了一下脸。

“周三你去哪里了?”Kim问。

“顶楼。”凯文说。

“你为什么要制造周四的不在场?”

“因为你们会先查周四。”

“你都做了什么?”

凯文把过程说得几乎像技术复盘:

复制咖啡接龙,复制午餐对话,复制Slack节奏,复制衣着;晚上主动拉牛大力pair四小时,把注意力锁死;用Derek手机伪造远程办公消息,锁会议室,调低空调;在Derek电脑里留给李娜的降职草稿,用模糊楼梯监控影子牵Andrei,用Ravi账号留一次敏感搜索,再在自己身上故意留下“看起来太明显”的几处痕迹,等警察排除。

“唯一没复制成功的是CVE。”凯文说,“周四我想再把气氛点起来,大家都说昨天已经修完了。”

他说这句的时候笑了一下,那种知道程序里有个bug终于被复现出来的笑。

42

“动机呢?”Kim问。

凯文沉默了很久。

“Derek准备在董事会把Dali推出去,”他说,“合规背锅。开掉他,再切割。签证也一起断。”

“你怎么知道?”

“我听见的。周二晚上,他跟法务在电话里说,‘He’s just an engineer. He’s replaceable.’”

审讯室里静了几秒。

凯文盯着桌面继续说:“你们都觉得这是商业决策。对你们是。对我们不是。”

他抬起眼,声音第一次有了裂口。

“大三那年我抑郁,差一点从楼顶跳下去。那时候每天给我送饭的人是他。三个星期。没讲大道理,也没问我怎么了,就把饭放门口。你问我为什么做这件事?”

他停下来,像是在找一个最短、最不容易被误解的句子。

“他救过我的命。他自己都不知道。”

43

三天后,牛大力去县看守所探视。

隔着玻璃电话接通,凯文先开口:“你最近去那家新开的奶茶店了吗?就是Santa Clara那家,门口总在排队的。”

“去过一次。”牛大力说,“太甜了,排队还特别久。”

“可惜。”

“嗯。”

他们又聊了两句无关紧要的:Ranch 99最近五花肉涨价,Milpitas那家兰州拉面换了老板,Andrei果然还是每天九点零七分第一杯咖啡。

谁都没有提案子。

谁都知道案子就在两人中间,像玻璃里那条看不见的接缝。

最后凯文说:“对不起。”

牛大力点了点头,没有说“没关系”。

电话挂断,玻璃里只剩下他自己的脸。

44

那天傍晚,他回到mala.ai停车场,坐进车里。

101还是堵在老地方,Philz还是同一个味道,Slack照样有人在频道里发“quick sync?”,世界继续以一种稳定且冷漠的速度向前滚。

他把车点着火,又熄火,再点一次。

很多事情没有变。

但有一件事终于变得非常清楚:

今天不是昨天。

周三不是周四。

人也不是模块。