第四部 · 等重的人
第十三章维护模式

K-0重新接上电源时,箱门没有关。
两扇门都用黄色机械撑杆固定在最大开启位置。氮气总阀已经拆下,供气软管末端套着盲板,盲板上横穿一把只有邵临保管钥匙的锁。四周拉起警戒带,除了取证人员,没有人可以靠近控制柜。
乔澄仍然要求把一个人留在箱外,手始终放在机械急停上。
“气路都断了。”曹牧说。
“我看见了。”
“门也撑住了。”
“我也看见了。”
曹牧没有再问她为什么还要留人。他把维护终端接上箱体左前角的本地接口。屏幕亮起,先显示设备序列号,再显示当前状态:
维护隔离。禁止自动作业。
这八个字,在启用仪式当晚没有出现过。
邵临把两张工单贴在移动白板上。
第一张是他们已经见过的热惯性校准盒维护单。作业内容是移除约六十七公斤模拟介质,送质量实验室复核。工单在十九点十八分完成,执行人曹牧。附件曾被删除,十二个钨板编号因此一度不在正式系统里。
第二张工单来自应急释放机构的季度联调。
工单编号:K0-ER-2198 作业内容:内部拉柄位置开关、指示灯与总控报警链路测试 作业状态:信号模拟 机械释放:隔离 测试启用:前一日16:19—16:20 原定机械恢复:案发日18:00 变更申请:17:52,延至22:30 申请人:曹牧 批准账户:DEMO-MAINT(活动保障共享)
执行人仍然是曹牧。
“机械释放隔离是什么意思?”邵临问。
曹牧从证物袋里取出一枚销钉的照片。销钉比一节拇指略长,灰色表面带着车削纹路,正中有一圈几乎看不出的细槽。
“正常销是实心的。”他说,“拉柄向下,钢索把力传到摇臂,摇臂再通过这枚销带动锁舌。做位置开关测试时不需要真的开门,否则每拉一次都要重新压紧门封。测试销外形和实销一样,中间是空的。把手能走完整行程,位置开关会闭合,绿灯会亮,可力不会传到锁舌。”
“罗定川拉动把手时,看见了绿灯。”
“是。”
“但门没有开。”
“是。”
“这枚测试销为什么还在?”
曹牧的手指压在工单最下面一行。
原计划要求案发日十八点换回实心销、撤销急停测试规则。十七点五十二分,曹牧因为信号联调尚未结束,主动申请把机械恢复延到二十二点三十分。共享账户批准了变更。按照工单里的前提,活动期间严禁人员入箱,内侧机械释放不会被使用;但这个前提不在空箱认证程序的启动条件里。
“两张工单都是合法的吗?”邵临问。
“分别看,是。”
“一起看呢?”
曹牧没有回答。
前一日十六点十九分,内部急停进入信号测试规则;十六点二十分,曹牧换入空心测试销,确认内部拉柄的绿色指示灯能够点亮。案发日十七点五十二分,他申请延后恢复。十九点十八分,他又按另一张工单取走十二块钨板。测试位下,急停按钮仍会向总控发送输入,却不直接切断气阀;维护人员需要观察信号到达,再由箱外的人手动复位。
如果K-0继续处于维护隔离,这些操作都不会伤害任何人。
如果它被送入自动空箱程序,拉柄、绿灯、按钮和报警都还像安全装置,只有真正能够让人活下来的部分不再工作。
乔澄走进箱内。内壁已恢复到室温,铝合金地板仍从鞋底透上来一层冷。她握住罗定川最后握过的拉柄,缓慢向下拉。
阻力先增加,随后在某一点突然变轻。绿色指示灯亮了。
锁舌没有动。
那盏灯的颜色和空箱认证通过时一模一样。
“工单完成以后,你有没有检查演示计划?”她问。
“检查了。”
“什么时候?”
“十九点三十四分。”
“看到了什么?”
曹牧望着白板,没有看她。“K-0还在主演示队列里。”
邵临把笔放下。“你之前说,你不知道两项工作会和演示组合。”
“我不知道它会接气。”
“我问的是,你看没看见K-0仍在演示队列。”
“看见了。”
“你做了什么?”
“我在活动保障群里发了告警。系统回复,主程序只做称重干演示,低氧程序由舞台总控屏蔽。过了两分钟,工单状态旁边出现‘演示后复位’。我以为总控知道。”
“谁回复的?”
“DEMO-MAINT。”
还是那个共享账户。
“你可以拔掉气路。”乔澄说。
“气路不是我负责。”
“可以给机械隔离挂牌。”
“活动开始前,主箱体不允许挂外露警示牌。”
“可以让演示停下来。”
曹牧终于看向她。他眼下发青,像几天没有完整睡过。“活动厅里那时有三百多人。部长、企业、媒体都到了。群里已经给了回复。两张单都有批准。我只是维护工程师。”
乔澄松开拉柄。
绿色指示灯灭了。
“九号冷舱的十一名清洁工也只是外包工。”她说,“系统最喜欢‘只是’这个词。它能把一个人缩到不用再问的尺寸。”
曹牧的嘴唇动了一下,没有说话。
邵临让人把他的补充陈述单独登记。曹牧服从工单,不等于他设计了谋杀;他看见风险却没有让设备停下,也不等于什么都没发生。两件事必须分别写。
上午十一点,删除的附件被恢复。
它不是从中心服务器里恢复的。附件在十九点四十分从工单页面消失,数据库只剩一个内容校验值。服务器使用固态阵列,删除区已经被新日志覆盖。真正留下副本的是曹牧的维护平板。
十九点十六分,平板进入过港区信号盲区。为保证离线作业,它自动把整张工单和附件下载到本地。曹牧按照附件上的十二个编号拆板,完成后只上传了签名和结果,平板缓存要到次日凌晨才会清理。警方在清理任务运行前扣押了设备。
取证人员把离线包展开。附件是一页没有标题的表格,左边列出十二个模块号,右边是质量与槽位坐标。最下方只有两行结果:
合计质量:66.920 kg 四角示值变化:均匀
附件的生成时间是十八点四十一分五十二秒。
它被挂入工单的时间是十八点四十三分零六秒。
十八点三十六分,有人查询罗定川入场时的精确体重。
五分多钟后,一组与他完全等重、且不会改变四角分配的钨板编号出现了。
“这不是维护人员从货架上随手挑的。”乔澄说。
“附件是谁做的?”邵临问。
“还不知道。”
“共享账户?”
“共享账户只解释谁可以打开那一页。它不会自己查询体重,也不会自己挑十二块钨。”
下午,控制程序的切换痕迹也被找到。
启用仪式使用的是一套临时图形界面。维护检查和空箱认证共用同一张K-0示意图,右上角的状态栏只有两字不同:一个显示“维护”,一个显示“认证”。箱内的人看不到外部界面。箱外的舞台大屏为了直播整洁,只显示总重、皮重和净载荷,不显示作业类型。
应用服务器的正式报告只保存最终状态。报告上写着:
20:45:00 空箱认证开始
但K-0本地安全控制器还有一只不能被远程清空的事件环。它容量很小,只循环记录最近两千次继电器状态变化。取证人员拆下存储片,读出了案发当晚被上层报告省略的过程。
二十点三十八分二十一秒,K-0收到一条二号角位传感器异常。
异常描述是:
告警:角位回零迟滞。建议进入舱内,检查二号角位导线压接;无须停止演示队列。
二十点三十九分零四秒,罗定川的临时维护证在准备区入口的联动检修台刷过,授权同步到K-0。
二十点四十分十七秒,作业类型登记为“维护检查”。三分钟自动开门倒计时启动。
二十点四十一分二十七秒,四角载荷记录到罗定川跨过门槛,箱内合计质量增加六十六点九公斤,与人员门示值在合成不确定度内一致。
二十点四十二分四十六秒,控制器接收第二个作业令牌。原来的“维护检查”被取消,新的作业类型是“空箱认证”。自动开门倒计时随之清零,门体助力器开始闭门。
二十点四十二分五十四秒,箱门闭合确认。
二十点四十五分,机械臂加装钢封。
二十点四十四分零九秒与十六秒,内部拉柄位置开关先后闭合,锁舌没有动作。二十点五十八分二十九秒,箱体重新静止后,罗定川再次拉动把手;七秒后又拉了一次。
二十一点零二分十一秒,惰性气体置换自动启动。
二十一点零二分十七秒,进气阀打开。
二十一点零二分三十一秒,内部急停第一次输入到达总控。十五秒后,同一输入再次到达。因为通道仍处于信号测试位,程序只记录:
维护测试信号。已确认。
二十一点零三分零九秒,四角载荷记录到第一次门体撞击。此后冲击持续、节奏变乱。
二十一点零九分零一秒,载荷分布由站立态转为地板静态。二十一点十二分十秒以后,未再检出可辨认的主动重心修正。
二十一点十七分四十二秒,第六套秤完成终点复核。
二十一点二十七分,钢封被剪断。
白板上的时间从十八点三十二分一直排到二十一点二十七分。邵临用黑笔画出三条竖线:拆板、换模式、启动氮气。
“哪一步是黑客做的?”他问。
控制系统负责人站在一旁,脸色不太好看。“没有远程入侵证据。”
“共享账户发了工单、查了体重、改了程序。”
“共享账户不是一套超越物理条件的权限。它只能在活动网内使用。工单从维护终端下发,模式队列要写进本地控制器,气体程序由既定条件自动启动。每一项都要经过具体设备。”
“也就是说,账户可以共享,手不能。”
“手也可能提前把命令排好。”乔澄说。
本地记录中,二十点四十二分出现的第二个令牌并不是那一刻由总控发出的。它在十八点五十三分已经写入K-0的任务队列,只是附带了执行条件:临时维护证刷入,连续八秒的中央稳定采样完成,当前总重等于法定皮重。
三个条件在二十点四十二分同时满足。
队列自己向下走了一格。
舞台上没有人需要按键。
有人在演示开始以前,就把罗定川刷证、站到地板中央和总重补足皮重写成了切换条件。三个条件一旦满足,程序便取消维护倒计时,切换模式并闭合箱门。
乔澄看着白板上那条从十八点五十三分伸向二十一点零二分的线。
这只手在杀人发生时不必靠近箱门。
它只需要比死者更早到场。
K-0本地事件环(恢复节录) 20:38:21 CH-2 FALSE ALERT RECEIVED 20:39:04 TEMP MAINTENANCE PASS ACCEPTED 20:40:17 JOB=MAINT_INSPECT AUTO-OPEN T-180s 20:41:27 INTERIOR LOAD ENTRY DETECTED 20:42:46 CONDITIONAL TOKEN ACCEPTED 20:42:46 JOB=CERT_EMPTY AUTO-OPEN CANCELLED 20:42:54 DOOR CLOSED / CONFIRMED 20:44:09 RELEASE HANDLE INPUT 20:44:16 RELEASE HANDLE INPUT 20:58:29 RELEASE HANDLE INPUT 20:58:36 RELEASE HANDLE INPUT 21:02:11 GAS PURGE ENABLED 21:02:17 GAS INLET VALVE OPEN 21:02:31 E-STOP INPUT / TEST CHANNEL / ACKNOWLEDGED 21:02:46 E-STOP INPUT / TEST CHANNEL / ACKNOWLEDGED