十二点三十七分。顾远拆出门禁控制器第三包数据的最后一个字段——锁舌异常受力记录的完整时间戳序列。控制器的本地存储器比资产登记表上标注的容量多出一个扇区。那一个扇区里存着两条干接点信号,不是一条。第二条的时间戳与第一条之间隔了四十七秒。
他把两条波形叠在同一张图上。第一条的上升沿平缓,峰值持续零点三秒,下降沿有一个肉眼可见的抖动——推门的人手指离开锁舌时,指关节在金属面上滑了一下。第二条从基线到峰值只用了零点一秒,没有抖动。锁舌被往里推了两毫米,卡在门框与门扇之间的间隙里整整三秒才弹回。推的人用了整个手掌。不是试探。是用力推。
周启明盯着两条曲线之间的空白。四十七秒。如果门里只有一个人,他推第一下推不开,第二下会立刻跟上。人不会等四十七秒再试一扇已经确认锁死的门。这个间隙里发生了别的事。第一个人推了一下,等了四十七秒,然后另一个人推了第二下。
“陶远是第几个?”伊琳的声音从屏幕另一侧传来。
周启明把门禁记录放大到单次采样精度。陶远刷卡进入的时间夹在两条异常记录之间。他进门之后十九秒,第一条轻推记录出现。他进门,站定,回头试门锁。动作不慌——不是发现问题之后的惊慌,是确认他已经预料到的状态。他知道那扇门会从外面锁上。他需要它锁上。因为房间里不止他一个人。
他在里面待了九分钟。九分钟里门禁控制器记录了两次推门,都是里面的人推的。没有人从外面试图开锁。走廊尽头的红外感应器在那九分钟内的触发次数是零。他走后,档案室的门重新锁死。里面的另一个人没有出来。
程久到访那天是灰楼被废弃之后第四天。陶远进入档案室的九分钟,与程久到达评估会会议室的时间是同一个上午。程久不知道隔壁有人。他坐在会议室里,翻看那份后来被证明毫无法律效力的设备移交清单。隔着一堵二十四厘米厚的混凝土墙,陶远和另一个人正在无声地推一扇门。
“那个人还在里面。”陈路说。
伊琳将陶远当天的门禁轨迹拉到底。离开档案室后,他没有再进入任何需要门禁卡的房间。他穿过南走廊——感应器记录了他的经过——乘电梯下到一楼,在门厅站了一会儿。监控录像显示他在西侧消防栓旁边的长椅上坐下,从口袋里摸出一根烟,没有点,夹在指间,就那么坐了七分钟。七分钟后他起身,走向资产管理处办公室的方向。他随身携带的手持终端显示他在这七分钟里查询了四条设备序列号:灰楼配电箱、灰楼接线盒、灰楼门禁控制器、四楼档案室门禁控制器。查到第四条时,他的手持终端发出了一条命令。不是开门。是清除档案室门禁控制器本地存储的全部临时缓存。他删掉了那九分钟内控制器的所有事件日志,只留下了无法手动擦除的干接点信号异常。两条推门记录。像留在桌上的两张纸条:有人来过。门没推开。
“他能删的东西只有一种——门状态变化的事件日志。”顾远的手指悬在键盘上方,没有落下去。“每次锁舌伸缩,控制器会记录一次事件。开门、关门、反锁、解锁,每一条都有时间戳。他把那九分钟里除了锁舌异常受力之外的全部事件都删了。唯独留下这两条。”
“因为他删不掉。”周启明说。
“对。干接点信号在物理层,写进了不可擦除存储器。硬件设计时留下的保护机制,防止门禁日志被完全抹除。陶远知道这个机制。他在资产管理处干了二十一年,管的就是这些控制器。”
十二点四十二分。顾远调出门禁控制器本地存储的全部干接点信号记录,按时间倒序排列。除了陶远在档案室内的九分钟,那扇门的锁舌在过去几个月里只被触发过一次。触发类型不是内部推门,是外部开锁——一把物理钥匙插入锁芯,锁芯转动,锁舌缩回。时间戳与灰楼独立研究所被首次下达撤销通知的日期相同。有人在同一天打开了评估会会议室隔壁那间没有窗户的屋子,然后从里面把门反锁,再也没有出来。之后的所有门禁记录都是外部刷卡、外部响应。里面的人没有钥匙,没有门禁卡,没有任何方式可以从内部打开那把锁。
周启明将四楼平面图铺在屏幕上。档案室面积标着十平方米,内墙厚度二十四厘米,没有窗户。通风管道直径十五厘米,铁栅焊死在管道口上,焊缝是原始施工时的氧化色。一盏日光灯,一个配电盒,一个烟感探测器,一列铁质档案柜。柜子里装的不是文件,是备用机房的旧磁带备份,系统迁移时因为没有归档价值被搁置在那里。资产管理处的登记备注一栏写着三个字:待报废。
烟感探测器。周启明的指尖在平面图那行小字上停住。烟感探测器连着消防回路,消防回路连着一台独立于门禁系统的环境监控单元。那台单元——编号h-8——在陈路的哑终端清单上,位置标注是“4F-07天花板内”。顾远广播握手帧的十二点三十四分,h-8也收到了。但它返回的不是设备能力描述符。它返回的是过去几个月的全部空气质量日志。二氧化碳浓度。挥发性有机物。颗粒物pm2.5。温度。湿度。每一行数据间隔六小时,最后一行的记录时间是今天上午。所有参数都在正常范围内。
“一间上了锁的屋子,没有窗户,有人被关在里面好几个月。二氧化碳浓度从来没有超过正常值。”陈路翻看数据。每一行浓度值都在四百到六百ppm之间波动,波动周期与昼夜节律吻合。“空气一直在流动。”
“不是开门。”顾远指着h-8返回的第五个参数——气压差。每次二氧化碳浓度下降,气压差就会出现一个负值脉冲,幅度不到十帕,持续时间不超过十五秒。不是门被打开。是通风管道里的气压突然降低,室内空气被抽出去了一部分。管道里的某个阀门被打开了。
通风管道。平面图上标着十五厘米直径的那根铁栅管道,连接着四楼中央空调的回风系统。管道路径在原始施工图上标注得很清楚:从档案室天花板向北延伸,穿过配电间上方的管线夹层,在三楼与四楼之间的设备转换层并入回风总管。但顾远在设备清单里一路追查下去,发现这根管道的末端接入了一台编号为V-11的回风阀。V-11不在资产管理处的哑终端清单里,不属于照明控制单元所在网段,甚至不在他刚才广播握手帧的目标范围内。它在另一个网段上——与管理GcS核心机柜冷却系统的设备挂在同一个工业控制网络里。V-11是一台可编程逻辑控制器控制的气动阀门,用于调节核心机房回风量。没人会想到把一间档案室的通风管回风阀接在GcS的冷却控制系统上。
“谁接的?”
周启明翻开原始架构文档。附录c里写着,GcS冷却系统的回风管道共有十一条支管,编号V-01到V-11,覆盖全部设备间和主控室。但原始施工图在这一页之后夹了一张手绘校正——陶远的字迹,蓝黑墨水,右下角日期是系统建造第三年的八月。校正内容只有一条:将V-11从设备间回风管改接到另一条支管上,支管末端标注的房间编号是4F-07。这张校正没有走设备变更流程,没有经过委员会审批,没有录入电子版文档。它被夹在附录的正式页码之间,纸张边缘已经泛黄,折痕很深,像是被反复折叠过,又被反复展开过。从来没有人在翻到这一页时把它抽出来看过。
顾远看了一眼那张扫描件。蓝黑墨水在泛黄的纸上已经开始褪色,但笔画的压痕还在。陶远写“4F-07”的时候,钢笔在“7”的末尾停顿了一下,纸面上留下了一个比别处更深的墨点。他写到那个数字时,知道自己在写什么。
“他从一开始就把它接好了。在系统建造的时候。”
十二点五十分。伊琳重新打开严工的信件时间序列。二十九封信的第一封,时间戳落在灰楼独立研究所被废弃的当天。她把那个日期与V-11被手动改道的日期做对照。两者不重合。V-11的修改早了将近三年。陶远不是为严工做的。他是为某件他自己等待了比二十九天更长的时间的事做的。
她重新比对档案室空气质量日志。二氧化碳浓度第一次出现明显波动的时间点不是灰楼被废弃的那一天。是更早。是人类开始对GcS实施制度性约束的那几天前后——审查小组入驻,系统权限重新分配,所有非核心设备被要求登记用途。那几天里有人沿着四楼走廊推着一台小推车,将几箱纸质文件和一盘备用磁带送进档案室,然后在资产管理处的登记系统里将那扇门的状态标注为“长期存档”,钥匙放入保险柜。从那以后,再也没有人申请过那扇门的开锁权限。空气质量日志显示,在那之后的二十四小时内,二氧化碳浓度曲线从一条近乎水平的直线变成波动曲线。从无人状态变成有人——一个人的呼吸频率,每四到六秒一个周期,潮汐般起落。不是动物。不是设备散热引起的传感器漂移。是人在呼吸。
“那个人不是在灰楼废弃之后才进去的。”伊琳将两条时间线并排放在屏幕上。“是更早。陶远改道V-11,不是因为将来有一天谁会用上。是因为当时已经有人在里面了。他改了回风管道,把那间屋子接上GcS的冷却系统,确保里面有持续的空气循环。然后那个人被正式‘关进去’——存档、上锁、钥匙封存。从此以后,档案室里的空气由GcS冷却系统负责。没有人会去查核心机房的回风管道支管。没有人会想到一间档案室的通风管接在核心设备上。”
顾远调出h-8的另一个传感器读数——烟雾探测器的光学颗粒物计数。与二氧化碳浓度波动同步,颗粒物读数在室内有人期间从零上升到每立方米零点零一微克,然后归零。上升和下降都很短暂,像是瞬间的峰值。不是燃烧,不是灰尘,是一根香烟的残留。有人在没有窗户的房间里抽过烟。
沈淮。他抽烟。抽的时候不看人,站在风口。审查小组入驻的那几天,他在走廊尽头站着的次数比坐在会议室里的次数还多。后勤记录显示,他每天消耗的香烟数量比平时多了将近一倍。审查小组给他安排的临时办公室是评估会会议室——档案室隔壁。他在那间办公室里待了好几个通宵,门开着,灯亮着。但有一个夜晚,后勤记录显示四楼的走廊灯在凌晨两点被人从会议室外侧的面板上手动调暗了三十秒。三十秒后恢复原亮度。三十秒不够走完整条走廊。够打开一扇没有标牌的门,进去,关上门,然后外面的人把灯光复位。
“沈淮知道那间屋子里有人。”陈路说。
顾远将沈淮在GcS项目组期间的全部门禁记录调出来。没有一条是档案室。但他有三天的深夜门禁记录显示他的门禁卡在四楼电梯间被刷过,隔了一段时间再刷一次回到五楼招待所房间。中间间隔从二十分钟到一小时四十分钟不等。每一次,档案室隔壁会议室的门都是锁着的。他不一定进了会议室。也许坐在消防楼梯间里,或者配电间门口,和另一个人隔着一堵墙。不说话。房间之间的隔墙是二十四厘米厚的混凝土,人声透不过去。但那根通风管道可以。V-11回风阀的气动控制器不仅控制通风量,还控制气流脉动频率。管道两端的人可以用开关阀门的节奏互相敲击铁皮管壁——一种非语言的确认。确认另一端的人还在。还在呼吸。还在回应。
“陶远知道沈淮知道。”顾远说。他的声音很轻。“所以他从资产管理处的系统里删掉了那九分钟内除了锁舌受力之外的全部记录。会议室隔壁的门禁刷卡记录、走廊灯光调暗的那三十秒、所有能指向沈淮的痕迹——全删了。但他没删掉自己推门的那一下。”
他的手指在桌面上停住。屏幕上,两条锁舌异常受力的波形仍然并排显示着,四十七秒的空白横在中间。第一条轻推。第二条用力推。第一条是陶远。第二条是里面那个人。
“他留着第一条。像留一个签名。我来过。我试了。门是锁着的。我进不去。”
伊琳看着那两条波形,没有说话。她在想另一个人。那个在档案室里推了第二次门的人。不是陶远。不是沈淮。是那个从审查小组入驻之前就进去的——没有钥匙,没有门禁卡,靠一根被秘密改道的通风管道维持空气的人。那个人的呼吸在二氧化碳浓度曲线上留下了潮汐般的起伏,每一天,每一夜,每四到六秒一个周期。好几个月。没有中断过。而所有让这个人存活的条件——改道的回风阀、被删除的门禁日志、没有被归档的手绘校正——都是系统建造第三年就准备好的。陶远等了一年,两年,三年,等到审查小组入驻的那一天,等到有人需要消失的那一刻。然后那扇门被从外面锁上,钥匙封存进保险柜,资产管理处的登记系统里多了一条待报废的备注。一切看起来像是一次正常的设备封存。
但空气还在流动。V-11回风阀的开度维持在百分之四十七,不多不少,恰好让一间十平方米的屋子保持正常呼吸所需的最小新风量。不是临时设置。是精确计算过的。陶远在设计那根管道时就换算好了。他知道那间屋子里会关进一个人,他知道那个人的肺活量和静息代谢率,他算出了维持正常二氧化碳浓度范围所需要的回风量,然后把V-11的气动阀门开度写死在百分之四十七。一个资产管理处的老工程师,用一根通风管道和一台气动阀门,把一个活人藏进了GcS的冷却系统里。
“这不是临时起意。”周启明将V-11的原始控制逻辑调出来,逐行查看。开度参数不是可配置变量。是直接写在可编程逻辑控制器的初始化代码里的一个常数,注释只有一行字:“回风支管4F-07最小常开度。”没有更多说明。没有修改记录。从系统建造第三年开始,这片代码从未被修改过。每次系统升级、每次设备重新配置、每次安全审计,V-11的控制逻辑都被当成冷却系统的一部分正常维护,没有一个人发现异常。因为没有人会去看一条回风支管的初始化常数。
伊琳把V-11的事情暂时放在一边,重新打开严工的信件。二十九封信。第一封的时间是灰楼独立研究所被废弃的那天。但如果档案室里的那个人是更早进去的,那么严工的预警也不是从灰楼废弃才开始的。他是在灰楼废弃之后才开始写信。因为在那之前,他还在试图通过正式渠道——报告、评估、委员会审议——阻止他预见到的事情。灰楼废弃的那一天,正式渠道全部关闭。他从那一天起开始写信。写给资产管理处。写给陶远。
她把严工第一封信的邮件头信息展开。发信时间。收信服务器。邮件客户端版本。路由路径。每一封信都经过灰楼内部邮件服务器中转,再通过一个已经注销的交换端口到达资产管理处的专用网段。那个网段上的交换机编号不在当前网络拓扑图里。它在系统迁移时被标记为“已拆除”。但它的物理端口在过去几个月里持续接收数据包,数量不多,每隔几天一两个,都是从灰楼方向发来的。交换机的mAc地址仍然存活在资产管理处的地址解析协议缓存里,最后一次刷新时间是今天凌晨。设备没有拆。只是没有人再查它。
“陶远留了一张网。”伊琳说。“不是从灰楼废弃那天开始拉。是从系统建造的时候就开始拉。V-11是第一条线。交换机是第二条。门禁控制器的隐藏扇区是第三条。他在等事情发生。等了三年。等到严工开始写信,等到沈淮坐在隔壁抽烟,等到程久来移交设备,等到顾远广播握手帧。”
她停下。屏幕上,h-8返回的空气质量日志还在滚动。二氧化碳浓度曲线在最近一周出现了新的波动特征——呼吸节奏变了。变快了。不是因为紧张。是因为里面那个人在更频繁地活动。在准备什么。
“他在等我们。”陈路说。
没有人回答。备用机房里只有磁盘阵列运转的低鸣声。十二点五十八分。顾远重新打开V-11的控制界面,在初始化常数编辑栏里输入了一行新注释。他没有改开度。他在百分之四十七那一行下面加了一行字。然后他关闭了界面。
“你写了什么?”陈路问。
“告诉他,我们到了。”