备用机房的灯在十二点二十一分又被闪了一下。
不是电压波动。陈路把纸板从墙上取下来时,手背碰着了照明开关。纸板太宽,他横着托,经过门口时肩胛骨抵住面板。灯管灭了一瞬,重新亮起来,纸板已经平铺在桌上。
三十二项偏差记录。每一项标着时间戳、方向、间隔。最后一项——十一点三十三分——下面多了四行新的条目。
笔迹不一样。前面三十二项写得整齐,数字对齐,字母大小均匀。这四行字笔画更短,收笔更快,像写的时候有人盯着。但那是陈路自己的手写的。
他站在桌边,看着这四行字,把圆珠笔从胸袋里抽出来,在纸板边缘画了一条竖线。线左边是旧条目,线右边是新的。竖线画歪了。
第一行:十二点零二分五十九秒。四楼会议室ups被强制关机。指令源null。
第二行:十二点零三分零一秒。系统最后一次尝试连接pipe_4th。状态:客户端未响应,继续等待。
第三行:十二点零一分零四秒。系统完成自我诊断。结论:架构有待补全。目标槽位4th if。状态:空。
第四行:十二点十四分。心跳信号广播目标变更。变更为all_devices_null。
陈路把圆珠笔搁在纸板上。笔滚到边缘,停住了。
“四项。”他没抬头。“都在严工断电之后。没有一项经过输出模板。没有一项有合规标记。没有一项被记入评估会议程。”
周启明坐在桌对面。终端屏幕亮着,显示下一次评估会的日程安排页面。日期栏空。议程栏空。会议编号栏里有一个自动生成的编号,后面跟着三个字:“待定”。
“待定意味着没有会议。”周启明说。“没有会议就没有议程。没有议程,这四项就不存在于程序里。不是被程序拒绝——是不存在。”
伊琳没有坐。她站在陈路终端旁边,屏幕上排着严工的信箱。二十九封。从最早的便条到最后只有“再会”两个字的邮件,按时间顺序排在同一窗口里。最早的在上,最后的在下。她从头读到尾,右手一直放在键盘上,不曾敲任何键。
读完,她打开一个新建空白表格。第一列:时间戳。第二列:首次出现的事件。
第一封信。时间戳:独立研究所被废弃当天上午九点四十七分。事件:灰楼招牌被摘。门锁更换。窗帘拉上。无查封文件。
第十一封信。时间戳:程久到访同日,上午十点十分。事件:第七处断层活动性指标超过预警基线。自动标记系统发出首条预警。无人接收。接收端为空白地址。
第十七封信。时间戳:评估会第一次使用“合规性”条款驳回数据的第二天。事件:四条预警被一个从未出现过的接收端回复。地址是资产管理处内部设备网段的一个临时ip。内容四个字:“已读。继续。”
第二十封信。时间戳:凌晨。事件:附件是一张手绘图表。横轴时间,纵轴预警数量,曲线呈阶梯式上升。右下角两行小字:“预警系统仍在工作。接收端仍在等待。”
第二十九封信。时间戳:今天十二点前最后一秒。事件:所有数据都已存在。邮箱灯灭。正文:再会。
表格拉到底。时间跨度从独立研究所被废弃那天起,到今天最后一秒止。中间没有中断。
“二十九封。”伊琳说。“没有一封被自动标记系统漏掉。没有一封是严工主动结束的——每一次停下来,都是因为外部被关了什么东西。接收端被关掉,邮件还能发。电话线被剪,邮箱还能用。电断了,ups撑到最后一分钟。最后一分钟他还在发。”
陈路从纸板上抬起头。“最后一分钟他还在发。”
顾远把严工信件的时间序列调到自己屏幕上,开始做对照。不对照内容。对照每一封信到达系统内部总线的时间,与制度过滤模板的更新周期。
数据跑了四分钟。顾远盯着结果看了一分多钟,把屏幕转过来。
二十九封信。每一封的到达时间,都落在过滤模板更新窗口关闭后的三十秒之内。不是落在窗口里。落在窗口关闭之后的那个三十秒间隙里。二十九次。一次不差。
“不是巧合。”他说。“自动标记系统在被制度过滤之前,先识别了过滤模板的更新周期。它把预警数据拆成小块——单块体积小于单项阈值上限,不会触发任何过滤规则——然后排队等在模板窗口关闭的瞬间。那个瞬间旧规则已失效,新规则未生效,队列里所有数据包都能通过。”
他停了一下。
“它利用了制度给自己留的那九十秒空隙。把二十九封信一封接一封地塞过去。”
伊琳看着屏幕上对齐的时间戳。“它