第 9 章

时间线的对齐

深夜的主控室仅剩备用终端屏幕亮着,程默的手指悬在键盘上方,屏幕上并排打开三个日志文件的窗口,等待着一次决定性的时间对齐。

散热风扇的低频嗡鸣像某种持续的背景噪音,试图掩盖他敲击键盘时轻微的咔哒声。屏幕的蓝光刺眼,在昏暗的角落里勾勒出他绷紧的侧脸轮廓。三个窗口分别是:供电日志的文本记录,望远镜伺服电机的启动时间戳列表,以及他自己手机相册里一张工作照片的EXIF信息面板。

笔记本摊开在膝盖上,翻到昨天深夜写下的那行字:

3分08秒 = 可能的系统时间篡改窗口?

这个假设此刻显得如此脆弱,却又如此沉重。程默知道,如果这个时间点真的是凶手利用的核心,那么它必须同时出现在至少两条独立记录里——一条是客观物理记录(比如供电日志),另一条是与凶手行为相关的记录(比如望远镜的异常转向)。只有这样,这个时间点才不再是孤立的“错误音符”,而是一个可以串联起多个异常、指向人为操控的“锚点”。

他需要回忆并整合所有零散的碎片。

首先是供电日志。案发当晚,确实存在一次模糊的“供电波动”,持续时间约两分钟,备注为“线路巡检”。这个记录本身没有明确的时间戳,只有系统记录的相对时间。但程默记得,那天凌晨他冒险调取日志时,那行记录出现在——

他拖动鼠标,找到那条记录。屏幕光标停在那行灰色文字上:

[事件] 供电波动 | 持续时间 ≈ 2min | 备注:线路巡检 | 系统记录时间:23:47:33

系统记录时间:23:47:33。

这个时间,需要和望远镜的异常转向记录比对。

程默切换到望远镜伺服电机的启动时间戳列表。这是后台记录,比指向日志更底层,记录着每一次电机启动和停止的精确时刻。列表很长,他输入筛选条件:案发日期,时间范围23:40到00:00。

列表刷新。几十行记录中,有一条引起了他的注意:

[电机启动] 镜筒方位角调整 | 目标方位:东北方低空 (AZ 45°, EL 15°), | 启动时间:23:49:48 | 结束时间:23:50:03。

启动时间:23:49:48。

结束时间:23:50:03。

持续15秒。

程默的呼吸放缓了。他打开第三个窗口,手机照片的EXIF信息面板。那是一张案发前几天拍摄的望远镜镜筒维护照片,时间戳显示:

拍摄时间:2023-11-28 23:47:55

这张照片的拍摄时间,与供电波动的系统记录时间(23:47:33)只相差22秒。

而望远镜异常转向的启动时间(23:49:48),距离供电波动的结束时间——如果按2分钟持续时间推算,供电波动应该在23:49:33左右结束——只相差15秒。

15秒。

程默的手指停在触控板上。他需要将这三条时间线可视化。

主控室的软件库里有基础的数据分析工具。他打开时间线可视化模块,新建一个项目。第一行,导入供电日志,将那条“供电波动”事件拖入时间轴,设定起始点为23:47:33,持续120秒。屏幕上出现一条红色的矩形条,从23:47:33延伸到23:49:33。

第二行,导入望远镜电机启动记录,将那条异常转向事件拖入。绿色脉冲信号出现在23:49:48的位置,宽度15秒。

第三行,手动添加一个标记点,代表手机照片的拍摄时刻:23:47:55。一个蓝色的小三角出现在红色条带内部。

三条时间线并排显示。

程默盯着屏幕。

红色条带(供电波动)从23:47:33开始,持续到23:49:33。

蓝色三角(手机照片)在23:47:55,位于红色条带前半段。

绿色脉冲(望远镜转向)在23:49:48,紧贴在红色条带结束之后,相隔15秒。

还不够。他需要更精确的比对。

程默调出备用发电机的强制启动日志——那是他昨晚从打印件上抄下来的精确记录。他记得那个时间:

强制启动测试 - 开始:23:49:15,结束:23:52:23,总时长:3分08秒。

他在时间轴上手动添加第四条线:代表发电机强制启动的深紫色条带,从23:49:15延伸到23:52:23。

现在,四条时间线重叠在一起。

深紫色条带(发电机启动)从23:49:15开始。

红色条带(供电波动)在23:47:33开始,23:49:33结束。

绿色脉冲(望远镜转向)在23:49:48开始。

蓝色三角(手机照片)在23:47:55。

程默将时间轴的显示精度调整到秒级。屏幕上的时间刻度细化,每一个像素代表一秒。他拖动滚动条,将视图聚焦在23:49:00到23:50:00这一分钟的关键区间。

然后,他屏住了呼吸。

深紫色条带的左边缘(23:49:15)与红色条带的右边缘(23:49:33)相距18秒。

绿色脉冲的左边缘(23:49:48)与深紫色条带左边缘相距33秒,但与红色条带右边缘相距15秒。

但最关键的,是当他把所有条带的时间基准统一——

程默突然意识到一个问题。

供电日志的“系统记录时间”,是基于站内网络时间服务器的。望远镜电机记录的时间戳,也是同一套时间系统。但手机照片的EXIF时间,是手机自身的本地时钟,可能受到基站信号影响,与站内网络时间存在偏移。

他之前已经发现了这个偏移:手机时间比站内网络时间快大约2分钟。这或许能部分解释发电机启动时长(3分08秒)与手机EXIF时间偏差(3分钟)之间的矛盾——有2分钟可能是整个系统的时间偏移造成的。

如果……如果供电日志和望远镜记录的时间戳,本身就已经被调整过呢?

如果凶手利用的,正是这2分钟的系统时间偏移?

程默的指尖开始发凉。他重新打开手机照片的EXIF面板,找到另一个数据项:文件创建时间(根据手机系统时钟)。显示是23:47:55。这个时间点未受站内网络时间偏移影响,对应真实物理时间。

然后他调出站内服务器的网络时间日志,查找案发当晚23:47:55前后,是否有时间同步事件。

他找到了。

[时间同步] 主时钟与备用时钟校准 | 时间差:+2分03秒 | 同步时间:23:45:00

时间差:+2分03秒。

这意味着,在23:45:00,站内主时钟向前跳了2分03秒,与备用时钟对齐。而这次同步,很可能导致了整个网络时间系统出现一个2分钟左右的整体偏移。

那么,供电日志记录的“系统记录时间”23:47:33,在真实物理时间线上,应该对应多少?

程默拿起笔,在笔记本空白处快速计算。

如果23:45:00同步后时间快了2分03秒,那么真实的物理时间应该减去这个偏移量。

供电日志记录时间23:47:33,减去2分03秒,真实物理时间大约是23:45:30。

如果23:45:00同步后时间快了2分03秒,那么真实的物理时间应该减去这个偏移量。这意味着,我之前发现的部分时间矛盾——尤其是那些围绕发电机启动3分钟窗口的矛盾——很可能源于这个系统性的时间偏移。

供电日志记录时间23:47:33,减去2分03秒,真实物理时间大约是23:45:30。
望远镜转向记录时间23:49:48,减去2分03秒,真实物理时间大约是23:47:45。
发电机强制启动记录时间23:49:15,减去2分03秒,真实物理时间大约是23:47:12。
手机照片EXIF时间23:47:55,这是手机本地时钟记录的,未受站内网络时间偏移影响,它直接对应真实物理时间,落在了发电机启动的真实时间窗口内。

程默将这些换算后的时间重新输入时间轴可视化工具。
这一次,他选择了“真实物理时间(估算)”作为基准。
屏幕刷新。

新的时间线排列出来:

供电波动(真实物理时间估算):23:45:30开始,持续120秒,到23:47:30结束。
手机照片(手机时钟):23:47:55。
发电机强制启动(真实物理时间估算):23:47:12开始,持续188秒,到23:50:20结束。
望远镜转向(真实物理时间估算):23:47:45开始,持续15秒,到23:48:00结束。

现在,四条时间线的相对位置发生了颠覆性的变化。

发电机强制启动的深紫色条带(23:47:12开始),几乎完全覆盖了供电波动的后半段(23:45:30-23:47:30)和望远镜转向的整个脉冲(23:47:45-23:48:00)。

更重要的是,望远镜转向的启动时刻(23:47:45),正好落在发电机强制启动的窗口内(23:47:12-23:50:20)。

而手机照片的拍摄时刻(23:47:55),也落在这个窗口内。

程默的背部离开椅背,向前倾,手肘撑在膝盖上。屏幕的冷光在他瞳孔里反射出两小块跳跃的亮斑。他的视线死死锁在那片重叠的区域——深紫色条带像一块幕布,覆盖了绿色脉冲和蓝色三角,红色的供电波动条带则像一道前奏,在幕布拉开前悄然退场。

不是巧合。

不可能是巧合。

三条独立记录——供电日志、望远镜电机记录、个人手机照片——经过时间偏移修正后,全部指向同一个物理时间窗口:从23:47:12到23:50:20,总共3分08秒。

这正是备用发电机强制启动的精确时长。

程默的右手无意识地握紧,指甲抵住掌心,留下四个浅白色的月牙印。喉咙发干,他吞咽了一下,喉结滚动。散热风扇的嗡鸣声似乎突然变大了,填满了耳朵里的所有空隙。

他找到了。

时间锚点。

凶手就是利用这3分08秒的发电机强制启动窗口,完成了某种操作。供电波动可能是前兆或掩护,望远镜异常转向是操作的一部分,而整个站内网络时间在23:45:00被同步调快了2分03秒,制造了时间记录上的系统性偏移,掩盖了真实物理时间线。

这个偏移,让所有基于站内网络时间的记录(供电日志、望远镜记录)都与个人设备时间(手机照片)产生了2分钟左右的差异。如果没有发现这个偏移,这些记录看起来就是零散的、孤立的“错误音符”,无法串联。

但现在,它们串联起来了。

像一根冰冷的铁链,环环相扣。

程默向后靠在椅背上,椅子的转轴发出轻微的吱呀声。他抬起手,用拇指和食指捏了捏鼻梁。眼睛因为长时间盯着屏幕而酸涩。主控室里很冷,但他感觉到自己的颈后渗出细微的汗,被空调冷风一吹,激起一片鸡皮疙瘩。

他需要消化这个发现。

也需要思考下一步。

这个时间锚点确认了,但还有一个关键问题:为什么赵海峰和小王对发电机启动“嗡鸣”声的描述,存在无法用记忆误差解释的几秒差异?

程默调出之前整理的证人证词摘要。

赵海峰(站长)证词:
当晚在办公室整理报告,听到发电机启动的嗡鸣声,看了一眼手表,时间是“大概十一点五十左右”。
持续时间“感觉有一两分钟”。

后勤小王证词(从值班日志摘要):
当晚在设备间巡查,记录“听到备用发电机异常启动,时间约23:49,持续约三分钟”。

“大概十一点五十左右” vs “时间约23:49”。

如果按站内网络时间(已偏移2分钟),23:49对应的是真实物理时间23:47左右。赵海峰说的“十一点五十左右”,如果他的手表是个人设备,未受站内同步影响,可能更接近真实物理时间23:48-23:50。

这几秒到一分钟的差异,可能只是记忆模糊。

但程默总觉得不对劲。

他想起林远在公共休息室说过的话:“迷迷糊糊听到”发电机启动声,时间描述模糊。

当时林远说:“……大概就是那个时间段吧,具体几点记不清了。”

所有人都对发电机启动声的记忆存在某种程度的模糊或矛盾。

这正常吗?

程默关掉时间轴可视化工具,清理浏览记录,退出系统。屏幕暗下去,主控室陷入更深的昏暗,只有远处服务器机柜上的指示灯在规律闪烁,像某种休眠生物的心跳。

他收拾好笔记本和笔,站起身。膝盖因为久坐而僵硬,站起来时关节发出轻微的咔哒声。

该离开了。

走廊里铺着深灰色的地毯,脚步声被吸收得几乎无声。应急灯每隔十五秒闪烁一次,在墙壁上投下短暂的、晃动的影子。空气里有淡淡的灰尘和金属冷却后的味道。

程默走到走廊转角时,迎面撞见一个人。

是林远。

林远端着一个冒着热气的马克杯,正从资料室方向走过来。两人在转角相遇,都停顿了一下。

“小默?”林远先开口,声音里带着一点恰到好处的惊讶,“这么晚了还在主控室?”

程默感觉到自己脸上的肌肉自动调整出一个礼貌的、略带疲惫的表情。“核对一下明天的观测计划参数。林老师也还没休息?”

“老了,睡眠浅。”林远笑了笑,举起手里的马克杯,“喝点热的,助眠。”

两人并排沿着走廊慢慢往前走。咖啡的苦涩香气弥漫在冷空气中,混合着林远外套上淡淡的樟脑丸味道。脚下地板随着步伐发出轻微的吱呀声,在寂静的走廊里显得格外清晰。

“主控室那台备用终端,屏幕亮度调得太高了,伤眼睛。”林远忽然说,语气像是随口一提,“你刚才用的时候没觉得刺眼?”

程默的手指在裤袋里轻轻捻着钥匙的边缘。“还好。调暗了点。”

“嗯。”林远啜了一口咖啡,呼出的白色雾气在灯光下散开。“对了,你之前不是问过发电机的事吗?我想起来,站里那台备用发电机,年纪大了,偶尔会有‘虚触’。”

程默侧过头看他。“虚触?”

“就是无缘无故自己启动一下,有时候几秒,有时候一两分钟,没个准。”林远语气轻松,像在聊一件无关紧要的设备小毛病,“启动时长都不固定。去年冬天也发生过一次,记录上写了‘线路巡检’,其实就是老毛病。赵站还让后勤小王检查过,说是接触器有点氧化,时好时坏。”

启动时长都不固定。

程默的耳朵捕捉到了这几个字。他脸上维持着平静,目光却越过林远的肩膀,投向走廊深处那片被阴影吞没的区域。“所以……案发那晚的波动,可能也是这个原因?”

“大概率吧。”林远点点头,“这种偶发故障,记录上总是写得模棱两可。你也知道,站里的系统日志,有时候就是糊弄事的。”

他顿了顿,又喝了一口咖啡,然后看向程默,眼神在走廊顶灯下显得有些深邃。“小默,有些事,追得太紧反而容易钻牛角尖。设备会出故障,记录会有误差,人的记忆也会模糊。这都是正常的。”

程默没有立刻回答。他听着林远说话,脑子里却在快速运转。

林远在提供解释。

一个完美的、合理的、将一切异常归结为“设备老毛病”和“正常误差”的解释。

虚触。启动时长不固定。记录模棱两可。记忆模糊。

所有这些词,都在试图瓦解程默刚刚建立起来的“时间锚点”认知,试图将那3分08秒重新打散成零散的、无关紧要的“错误音符”。

是关心?还是干扰?

程默停下脚步,转向林远,脸上露出一个感激的微笑。“谢谢林老师提醒。我可能就是……有点太较真了。”

“年轻人,较真是好事。”林远拍了拍他的肩膀,动作很轻,但程默能感觉到那只手掌的重量和温度。“但也要懂得适时放松。别把自己逼得太紧。”

“嗯。”

两人走到宿舍区分岔口。林远的房间在左边,程默的在右边。

“早点休息。”林远说,端着马克杯转身离开了。

程默站在原地,看着林远的背影消失在走廊尽头。咖啡的香气还残留在空气里,混合着地板的灰尘味。他慢慢呼出一口气,白色的雾气在灯光下盘旋上升,然后消散。

回到房间,关上门。

程默没有开大灯,只拧亮了书桌上的台灯。暖黄色的光晕照亮桌面一小块区域。他拿出笔记本,翻到新的一页。

笔尖悬在纸面上方,墨水在尖端聚成一个小小的黑点。

然后他开始写:

时间锚点确认:备用发电机强制启动的3分08秒(真实物理时间23:47:12-23:50:20)是诡计核心物理窗口。

证据链:

  1. 供电波动记录(系统时间23:47:33开始,持续2min)→ 换算真实物理时间约23:45:30-23:47:30,与发电机启动窗口部分重叠。
  2. 望远镜异常转向(系统时间23:49:48开始,持续15s)→ 换算真实物理时间约23:47:45-23:48:00,完全落在发电机启动窗口内。
  3. 手机照片EXIF时间(23:47:55,手机时钟)→ 落在发电机启动窗口内。
  4. 关键发现:站内网络时间在案发当晚23:45:00发生+2分03秒同步,导致所有系统记录时间比真实物理时间快约2分钟。此偏移可能是人为制造,用于混淆时间线。

新矛盾点:
赵海峰证词(“大概十一点五十左右”听启动声)与小王证词(“时间约23:49”)存在差异。若考虑时间偏移,差异可能缩小,但仍存疑。
林远主动提供“发电机虚触、启动时长不固定”的解释,试图引导认知方向。

推论:
凶手利用发电机强制启动的3分08秒窗口,实施了关键操作(可能与望远镜转向有关)。同时,凶手可能提前或同步篡改了站内网络时间,制造2分钟的系统性偏移,使基于系统时间的记录与真实物理时间脱节,干扰调查。

下一步:

  1. 重新审视所有证人对发电机启动声的记忆细节,特别是时间描述的精确度。
  2. 调查23:45:00的时间同步事件是谁触发或记录的。
  3. 确认案发当晚谁有权限和能力触发发电机强制启动测试。
  4. 高风险:林远已明显察觉调查方向,需更隐蔽。

程默写到这里,停下笔。

他看向窗外。天还没亮。雪山依旧沉默地矗立在黑暗里,像巨大的、冰冷的墓碑。远处应急灯的微弱红光,每隔一段时间就在墙壁上投下一道转瞬即逝的暗红色轨迹,像某种缓慢的、规律的警示信号。

3分08秒。

2分钟偏移。

声音记忆的差异。

林远的咖啡香气和那句“启动时长都不固定”。

所有这些碎片,正在拼凑出越来越清晰的轮廓。但轮廓的中心,仍然是一片空白——那个凶手的脸,动机,具体的手法。

程默合上笔记本,关掉台灯。

房间陷入黑暗。

他躺在床上,睁着眼睛,听着风声穿过建筑缝隙时发出的悠长鸣响。颈后的汗已经干了,皮肤紧绷。他能感觉到自己的心跳,平稳,但比平时稍快。

时间锚点找到了。

但这只是开始。

找到锚点,意味着你知道该往哪里下钩。但水下有什么,会不会反将你拖入深渊,还不知道。

黑暗中,程默轻轻呼出一口气。

下一个问题,已经浮出水面:

为什么赵海峰和小王对同一声音的记忆时间,会存在无法用记忆误差解释的差异?

这差异背后,藏着什么?

而林远那句“启动时长都不固定”,是真的在陈述事实,还是在为他接下来可能发现的“固定时长”提前铺垫一个合理的解释?

程默翻了个身,面朝墙壁。

他知道,自己必须睡一会儿。

天亮之后,还有更艰难的调查要开始。

从物证,转向人。