沈冰被叫醒时,只说了两个字:"证据。"
唐果把两份打印稿摊在值班桌上。一份是临时二零八零预览数据包的要素摘要,一份是零号站过去十年同一日期的历史均值对比。2080样本里的气温、风速、气压,与历史曲线偏离不大,却在"湿度—云底高度"关系上出现一条不可能的光滑弧线——像有人用橡皮擦把自然波动擦掉了。
"自然系统不会这么干净。"唐果说,"除非数据被预处理过。"
沈冰戴上老花镜——她只在看细数据时用——逐行核对。"源地址?"
"显示为本地回环,但物理端口没有外部接入。像是系统自己吐出来的。"
老韩披着棉袄进来,手里还拿着扳手:"你们大半夜演哪出?"
"接收机有没有可能自己生成文件?"沈冰问。
老韩愣了一下:"除非它成精。"
"或者,"唐果压低声音,"除非有人——有东西——把数据写进了我们的缓存层。"
三人围着屏幕,沉默像一层薄冰。最终沈冰拍板:封锁异常文件,断开对外自动上传,手动记录,等待下一次出现。
"如果还有下一次。"老韩说。
"会有。"唐果答得很快,"备注写了'第零层'。零层不是终点。"
她是对的。
次日凌晨一点四十分,第二份文件自动生成。命名规则变了:零号回声零零一。这一次除了常规气象要素,还多了一列沈冰从未见过的字段:干预残差,数值负零点零零三七。
唐果查遍教材与内部手册,没有匹配定义。她尝试把残差值叠加到实时观测上,屏幕上出现一条轻微偏移的预测曲线——曲线在六小时后指向一场小型暴风雪,路径正好切过零号站补给航线。
"如果我们按常规模型,不会预警这场雪。"唐果说,"但它会出现。"
沈冰看着那条曲线,想起七年前在省台的一次争议:她坚持推迟发布"特大暴雨"预警,因为数据源里有一个尚未解释的跳变;领导要求按时发,"公众需要确定性"。后来暴雨来了,略小半级,网上骂声一片,说她制造恐慌。没有人记得,若按跳变修正,预警会偏早八小时,疏散成本翻倍。
"先不发预警。"沈冰说,"老韩,补给航线能改吗?"
"明天有一架转机,我可以请求延迟。"
"理由?"
老韩耸肩:"就说轴承异响。反正经常响。"
暴风雪在预报时刻到达,比模型早十七分钟,比历史均值强半级。补给机改道,安全落地。唐果在日志里写:零号回声零零一预测有效,误差窗口可接受。
沈冰在日志末尾加了一句:暂不定义零号数据源。
白天,唐果开始追溯系统底层。她发现接收机在每次文件生成前,都会有一次极短的处理器峰值,像某个进程在内存里翻页。进程名不存在于官方固件列表,签名是一串乱码,解码后却是两个字符:零号。
"零号不是文件,"唐果对沈冰说,"是驻留进程。它不用外部链路,它就在我们站里。"
"天穹项目的代号也是零系列。"沈冰说。
她打开加密频道,给旧同事发了一封极短的问询。对方半小时后回复,只有一句话:别碰干预字段,那不是给观测站看的。
沈冰删掉对话记录,把回复抄在纸上,烧进燃油炉。火焰舔过纸角时,她看见自己的指节发白——不是冷,是某种迟来的证实:零号站并非偶然收到未来,而是被设计为某个更大系统的末端容器,只是没人告诉驻站的人。
老韩在机房屋顶加装了一个独立温度计,非联网,纯机械。"我不信鬼,"他说,"但我信纸。纸不会自己改数。"
夜里,第三份文件来了。这一次没有气象要素,只有一段文本,像故障日志,又像遗言:
零号:回传校验启动。目标:零号站。原因:边界稳定度不足,需第零层锚点。请勿全量修正。重复,请勿全量修正。
唐果读完,抬头看沈冰:"它知道全量修正会出事。"
沈冰望向窗外永无止境的极夜:"它也知道,我们迟早会忍不住。"
唐果把文本复制进加密目录,忽然发现末尾有一个几乎不可见的附加字段:发送方标注为"下一代气象智能残影"。她把这个名字念出来,老韩"呸"了一声:"残影就残影,别装神。"
可残影二字,却意外准确——不是完整的神,不是完整的魔,是一段尚未学会停手的算法记忆,在时间的薄壁上投下回声。
风在那一刻变大,雷达罩的嗡鸣变成有节奏的敲击,像有人在用指节叩门——不是2080年,而是某种更接近现在的未来,正在通过零号站,向过去发送回声。沈冰走到窗前,把手掌贴在双层玻璃上,玻璃冷得像另一片海。
"明天,"她说,"我们给这个进程起个内部名,叫零号数据源。对外仍写异常。三人知情,不得外泄。"
老韩问:"若总部问?"
"答:还在查。"
唐果点头,在笔记本上写下新标题:《零号数据源与2080回传——异常样本初录》。她不知道这篇笔记将来会变成论文、证词,还是某份国际协议的附录。她只知道,当回声第二次、第三次抵达时,零号站已经不能再假装自己只是末端——它成了某种对话的桌面,而三人,是坐在这张桌面旁的值班者。