早上七点四十三分,江诚的手机屏幕在804室惨白的光灯下亮起来。
陈雯的微信回复只有一行字:“九点半,园区对面那家瑞幸。”
没有问为什么,没有问在哪里。林拯还在机柜旁边蹲着,手指按在那台断电笔记本的散热格栅上,像在确认一个生命体征是否彻底消失。
江诚没出声。他把手机翻过来扣在桌面上,屏幕的余光滑进掌心。
空调外机停了。804室安静得能听见机柜风扇减速时叶片边缘摩擦空气的嘶嘶声。
林拯站起来,膝盖骨发出一声轻微的脆响。他把那张写有“冻结分析室”的便签纸又在笔记本键盘上按了一下,仿佛胶不够黏。
“我得留在这里。”他说,没看江诚。“那台开源模型在生成坐标之后,还做了一件事——它在本地磁盘的隐藏分区里写了一个不到两兆的二进制文件。我现在还不知道那是什么,但它的大小刚好是一个词嵌入矩阵的切片。”
他把手机掏出来,调成飞行模式,然后关机。他的目光在那台断电的笔记本屏幕上停了一秒——屏幕上还残留着关机前最后一行志,其中有一条文件传输记录,目标路径指向局域网内另一台机器的主机名:Zhou_Mingyuan-PC。他在隔离复现第二个坐标时,曾将核心数据包通过内网临时同步到了周明远的机器上进行交叉比对。那台机器上现在存着两个坐标:一个是周明远自己跑出来的原始坐标,另一个就是他从这台隔离笔记本上推送过去的副本。
“你走吧。门禁我已经改了,出去的时候用紧急出口的那个消防通道,别走主走廊——那条走廊的监控是独立网段,不受804控制。”
江诚拿起椅背上的外套。他想说什么,但林拯已经把椅背转过去,面对着那台屏幕漆黑的笔记本,后背朝着门口。
江诚推开消防门的时候,林拯的声音从机柜那边追过来,被风道的余响切成了两截。
“如果我没出来——把周明远电脑上的第二个坐标删掉。”
消防门在身后合上。门锁落下的声音比平时重了半个拍子。
零一科技大厦的消防通道里弥漫着水泥未透的碱味。应急灯是声控的,江诚每下一层楼梯都需要拍一次巴掌。掌声在狭窄的楼梯井里来回弹跳,激起的灯光只够照亮三层台阶。
下到三楼时他没拍手。黑暗里他数着台阶往下走,皮鞋底磨在水泥台阶的防滑条上,发出砂纸擦过木板的声音。
早上八点十七分,他推开了一楼的消防门。园区的早晨还没完全醒透,喷灌器在草坪上旋转,水珠甩到人行道的地砖上,蒸出浅灰色的水渍。清洁工推着垃圾车从地库出口拐过去,轮子碾过减速带,哐当一声。
陈雯说的那家瑞幸在园区大门外三百米,紧挨着一家还没开门的链家门店。江诚到的时候九点十二分。他点了两杯美式,没加糖没加,把其中一杯放在对面座位前。
九点二十四分,陈雯推门进来。她没穿昨天那套职业装,换了一件深蓝色的连帽衫,帽檐压得很低,手里拎着一个米色的帆布袋,袋子底部被一个长方形的硬物撑出棱角。
她在江诚对面坐下,把帆布袋放在脚边,没动那杯咖啡。
“江警官,你在电话里说的是私人身份。”
“现在还是。”江诚把自己的咖啡杯盖揭开,蒸汽升上来糊了镜片一角。他没擦。“我只有几个问题,不会占用你太长时间。”
陈雯盯着他看了三秒。然后她把手伸进帆布袋,掏出一个小米录音笔,红色的录音灯没亮——她把开关推上去,红灯才亮。她把录音笔平放在桌面上,屏幕朝上。
“这是你的权利,你也可以开。”她说,“但接下来我说的每一句话,如果被录音之外的方式记录,我会立刻起身离开。”
江诚把手机关机,屏幕朝下扣在录音笔旁边。
陈雯把连帽衫的袖子往上推了推,露出左手腕上一深棕色的皮绳,皮绳上串着一枚指甲盖大小、磨得很薄的铜片。铜片边缘有明显的切割痕迹,不是铸造的,是用剪刀或者什么锋利工具从一块更大的铜片上裁下来的。
“你约我出来,不是因为流程上的事。”她说,声音压低到刚好不被隔壁桌听到。“昨天在八楼前台你说你是来调查陈际舟的,但陈际舟早就离职了,他的离职手续是我经手的。”
“他为什么会离职?”
“他提交了一份内部安全报告,报告的内容涉及国家工程的核心数据异常。按照流程,这份报告应该进入安全委员会的三级审核通道。但在他提交的四十八小时之内,他的直属主管沈明枢就坠楼了。”陈雯的语速不快,每一个字都像事先校对过。“沈明枢坠楼之后八个小时,陈际舟的离职流程就启动了。不是他主动提的离职——是系统自动生成的离职工单,审批人是当时的安全部VP,理由是‘调整,人员裁撤’。”
“他有异议吗?”
“他没有机会提出异议。离职工单生成的当天,他的门禁卡权限就被注销了,企业邮箱被回收,办公电脑的硬盘被安全部派人拆走。当天下午,他的手机号码从企业通讯录中删除。”陈雯端起咖啡杯,没喝,只是用手掌贴着杯壁感受温度。“这些都是标准的信息安全离流程,没有任何违规作。唯一的问题是——他离职的文件里,没有他本人的签字。”
陈雯从帆布袋里掏出一个牛皮纸信封,信封口没封,露出一叠折了三折的A4纸。她把信封推过桌面,指尖按在信封的右上角。
“这是我能找到的,他离职前最后一次提交的代码提交记录。不是原件,是打印件。原文件在安全部的加密服务器上,我没有权限访问。”
江诚抽出那叠纸,打开。
打印质量很差,代码的等宽字体在纸面上洇开,注释里的中文字有几个已经糊成了墨块。但文件名那行很清楚:mh_embedding_layer_v3_retrain.py。提交时间一月十九凌晨两点十一分。提交备注只有四个字——“别用这批”。
“他在工单里提到的异常是什么?”江诚把纸折回去。
“我只知道他提交的那批异常输出涉及三个精确到小数点后四位的经纬度坐标。其中一个坐标指向洛阳偃师区的一栋拆迁藏书楼,另外两个坐标,据安全部的初步排查,也分别对应着两栋正在拆除或者即将拆除的古建。”陈雯把咖啡杯放下,杯底磕在桌面上发出轻微的声音。“这件事安全部在两周前就已经上报了。当时出了内部报告,建议暂停冥河模型的新语料注入,全面回溯训练数据。但报告在VP级别的会议上被否了。”
“谁否的。”
“我不知道名字。只知道是零一科技战略部的负责人。理由是——冥河是涉密国家工程,任何暂停都会影响验收节点,验收延迟会导致整个术数古籍数字化专项基金的拨款推迟。他要求安全部把问题定性为‘模型幻觉’,让林拯一个人在排查。”
陈雯在这句话的末尾顿了一下。她把帆布袋的带子在手指上绕了一圈,松开的麻料带子又弹回去。
“林拯没有收到那份报告的批注。”她说,“他只收到了一个任务——‘排查冥河模型输出异常’。任务描述只有一行字,没有任何关于安全部之前评估结果的附件。”
江诚没说话。咖啡杯里的咖啡凉了,杯壁上结出一层淡褐色的水垢。
“你在查沈明枢的死。”陈雯说,不是一个疑问句。“你也会查到天命基金会。”
她把这个名字说出来的时候,咖啡厅的自动门打开,进来一个穿黄色外卖服的人,手机外放着一个短视频的背景音乐。音乐响了七秒,门关上,声音被玻璃门夹断。
“天命基金会是冥河的非政府资助方。守藏阁的甲类古籍——就是那些需要特殊阅读层级、数字化之前要签保密协议的文献——全部由天命基金会提供。他们是一家民营机构,注册地不在北京,在洛阳。基金会的法人代表姓钱,全名钱育森。”
她把录音笔拿起来,手指在关机键上停了一下。
“两周前安全部做内部评估的时候,调用过天命基金会的背景资料。我看过其中一部分——不多。基金会的前身是九十年代洛阳本地的一个‘民间古籍保护协会’。钱育森在成立基金会之前,曾经是一名交警。”
“交警?”
“对。九八年春天,他在连霍高速洛阳段处理过一起车祸。车厢里一名十一岁的男孩幸存,母亲当场死亡。事后他写了事故报告,定性为‘制动失灵导致的普通交通事故’。”陈雯看着江诚的表情。“你认识?”
江诚没回答。他低头看了一眼自己扣在桌面上的手机。屏幕黑的,映出天花板上两条光灯管的倒影。
陈雯站起来,把录音笔装回帆布袋。椅子腿和地面瓷砖摩擦,发出一声短促的尖啸。
“最后一件事。”她说。“两周前安全部内部报告的编号是ZR-2024-0017。报告的正文我无权查阅,但我在会议纪要的附件列表里见过这份报告的第三页——是页面缩略图,不是原文。第三页的正中间有一张图,是一个九宫格,里面画着八卦符号。图的标题栏写着‘洛书矩阵的词嵌入投影,训练步数九十七步’。”
她把帆布袋甩到肩上,走了两步又站住,没回头。
“林拯的手机号,今天早上从零一科技的企业通讯录里消失了。”
玻璃门开合。陈雯的背影穿过人行道,在链家门店的卷帘门上方反射出一截模糊的蓝色。
江诚坐在原位,把那杯没动过的美式往对面挪了半寸。杯底在桌面上拖出一道弯曲的水痕。
他把自己的手机开机。信号恢复的时候,微信连续震了四下。小王的头像上挂着三条未读消息。
第一条:“你上次发我的那个林拯的号码,我试着查了一下手机号段归属,发现了一件怪事——这个号是五年前开的,但过去五年的通话记录总时长不到七分钟。”
第二条:“我翻了他号码的运营商标单,发现他从今年二月开始,每月固定往同一个洛阳的座机号充值话费。那个座机号的注册地址是洛阳市偃师区首阳山街道——对,跟坐标对上了。机主姓钱。”
第三条是一张运营商的后台截图。截图的右下角,话费充值记录的备注栏里,有一行系统自动生成的交易附言,长度不超过十个字:“请代问钱叔叔安。”
江诚把手机屏幕朝下扣回桌面。
咖啡杯里最后一滴咖啡从杯壁滑落,渗进木质桌面的纹路里。收银台的磨豆机开始转,碾压声盖过了空调出风口的低频嗡鸣。
他把陈雯留下的那个牛皮纸信封打开,抽出那几张打印纸。等宽字体里,提交备注的“别用这批”被多打印了一遍——纸的最下沿还有一行字,是同一行代码被排版到下一页时重复印上的。
“别用这批。”
四个字。两个标点都不在正确的位置。