
一
6月5日,第一次庭前会议。
法院第7法庭。不大,审判席后面挂着一枚国徽,黄铜色的表面反射着日光灯的光,像一只沉默的眼睛。
沈未辰坐在旁听席第一排。郭垣坐在他旁边,面前摊着一本黄色便签本,上面一个字都没写。
赵弈铭没有出庭。他的代理律师坐在对面——一个五十岁左右的男人,姓钱,穿着一件深灰色的西装,衬衫领口别着一对金色的领撑。
旁听席上还有一个人:唐栩。她没有带相机,只带了一支笔和一本巴掌大的记事本。
法官简单核对完双方身份后,进入了第一个程序环节——证据交换。
钱律师从公文包里取出一个白色的U盘,放在桌上。
“被告方提交证据如下:沈氏集团Aurora项目源代码归档副本,版本时间为2024年3月28日。归档文件中包含IntentCore四项涉诉核心技术特征的完整实现。”
法警接过U盘,插入法院的专用读取设备。
投影屏幕上出现了一行目录。
沈未辰的目光穿过屏幕,停在那个目录列表上。
他看到了那个文件:/train/utils/mem_profiler.py。
归档版本的路径。文件名。时间戳。和周平的Git提交记录显示的路径、文件名、时间戳——完全一致。
归档版本确实包含了后门代码。
但归档版本把后门代码包装成了“标准性能监控模块”。
郭垣站起来。
“审判长,我方对该证据的完整性提出异议。”
钱律师转过头,看着他。法官的目光也移了过来。
“理由?”
“该归档版本的生成时间——2024年3月28日——晚于Aurora项目实际代码冻结时间至少两周。”郭垣说,“我方有证据证明,归档版本在此时间窗口内被人工修改过。”
他拿出一张打印好的表格,放在桌上,法警送交审判席。
“这是星核资本GitLab服务器上Aurora项目仓库的完整提交历史。从2024年3月1日到3月31日,共有二十三次代码提交。其中第二十一次提交——2024年3月17日——由Aurora项目核心开发者周平提交。提交的代码包含了被沈氏集团起诉状引用的四项技术特征。”
法官看着那张表格,没有立刻说话。
钱律师站了起来。
“审判长,对方当事人的主张存在根本性逻辑问题。如果这份归档版本确实如对方所说被人工修改过——修改者为什么要保留版本中的代码签名?”他转向郭垣,“Aurora归档中的每一行关键代码,都包含原始开发者的注释签名。”
他走到投影屏幕前,指着屏幕上的一段代码:
# debug_log_format: train/utils/mem_profiler.py
# Author: ZP | 2024-03-17
“ZP——周平。他的个人签名。如果归档版本是伪造的,伪造者不会保留原作者的签名。保留签名,说明这份归档是直接从原始代码仓库导出的,未经修改。”
法庭里安静了片刻。
郭垣没有争辩。他坐下了。
沈未辰看到郭垣在坐下之前,用左手的手指在桌面轻轻敲了两下——不是紧张,是一个信号。他在等对方说完。
因为郭垣在第一轮,本来就没打算赢。
第一轮的目的是:让赵弈铭的律师把他最有利的论据——ZP签名——搬到台面上来。
因为一旦钱律师当庭说出“保留签名证明归档版本未修改”这句话,他就等于在法官面前确认了一个事实——周平的代码签名在整个案件中具有关键的证据价值。
当ZP签名变成庭审焦点的时刻,周平本人的证词——周平可以解释他为什么要在代码里签名的那个人的证词——就不能再被赵弈铭的律师抹掉了。
二
庭前会议在四十分钟后结束。
走出法院时,唐栩追上了沈未辰。
“你方律师在第一轮几乎没有反驳ZP签名的问题。你在等下一轮?”
沈未辰没有承认,也没有否认。
“下一轮是什么时候?”
“三天后。”沈未辰说。
唐栩点了点头,没有继续追问。她收起笔记本,转身走向地铁站。
沈未辰站在法院门口的台阶上,看着她的背影消失在人群中。天气阴沉,云层又低又厚。空气像一块湿海绵,挤不出水,但也没有干的迹象。
手机震了一下。
Lin Shen: “今天庭上的交锋,我听说了一些。你还有三步棋要下。第一步是让周平开口。第二步是我。第三步——”
消息在这里断了一下。过了几秒,下一条才发来。
“——是你自己。”
沈未辰盯着那两行字。
三部棋。
周平。林深。他自己。
周平会开口。他知道。
林深的选择——他一直不确定。
而他自己——他一直在走棋,但从来没有想过自己才是最后一步需要的棋子。
三
6月6日,沈未辰约周平在自己家里见面。
不是公司,不是咖啡馆。是他自己的家。
周平来的时候,穿着一件黑色的运动外套,帽子没有戴,但淋了一点雨。头发上有细小的水珠,在灯光下发亮。
沈未辰给他倒了一杯热水。
“明天下午,郭垣会带你去法院做证人笔录。”
周平接过杯子,没有喝。
“我该说什么?”
“说你知道的事。说赵弈铭在两年前的技术评审会上让你做了什么。说他让刘总监在Jenkins上创建了什么任务。说他打完电话之后你做了什么。”
周平听着,沉默了一会儿。
“但如果他们问那段签名——”
“你照实说。”沈未辰说,“那句签名是你写的。你在代码里加签名是你入职之后养成的习惯——所有核心模块都会加。但赵弈铭知道你有这个习惯,所以他在归档的时候保留了你的签名。不是因为你签得理所当然——是因为他知道保留签名比删除签名更有用。”
周平的手指握着杯壁,指尖压得有些发白。
“他们不会信。”
“不需要所有人信。只需要法官信。”
周平没有再说话。他端起杯子,喝了一口水。
四
6月7日,郭垣带周平去法院做了证人笔录。
法律术语叫做“当事人陈述”。不是正式的出庭作证,但内容会被记录在案,作为正式庭审中的参考证言。
笔录持续了两个小时。
郭垣出来后,在法院门口给沈未辰打了一个电话。
“有两个好消息,一个坏消息。”
“先说坏的。”
“周平在陈述中提到了一条我们之前不知道的信息。”郭垣说,“赵弈铭在2025年11月,用内部通讯软件给周平发过一条消息。消息内容大概是:‘Aurora归档的事情你不用管了,交给技术总监办公室处理。’”
“坏在哪里?”
“这条消息没了。”
沈未辰握着电话,没有说话。
“周平说消息还存在他的旧手机上。但旧手机在2026年1月——他换新手机的时候——被公司IT部门回收了。公司IT的回收流程要求所有离职或换机员工的旧设备交回,执行‘数据销毁+设备再利用’。
如果消息确实被销毁了,就死无对证了。”
“那好消息呢?”
“好消息是——周平在交回旧手机之前,用另一台设备截图了那条消息。截图还在他的个人云盘里。”
沈未辰握着电话。
赵弈铭让周平不要管归档的事。周平截图了。
然后他换了手机。然后IT回收了旧手机。然后赵弈铭以为那条消息永远消失了。
但周平截图了。
“截图的完整度怎么样?”
“包含发送者头像、发送时间、消息内容。但没有完整的聊天上下文。”郭垣说,“在法律上,截图比原始消息记录弱一个等级。但它比没有强。”
“第二个好消息呢?”
“第二个好消息是——林深联系我了。”
沈未辰的手指在手机边缘停了一下。
“他说什么?”
“他说他愿意在正式庭审中出庭作证。但他有一个条件。”郭垣说,“他的证词需要和赵弈铭的律师团队达成一项保密协议——证词中涉及他个人的部分,不做公开披露。”
“只做不公开的内部质证?”
“对。闭门作证。”
沈未辰靠在椅背上,看着天花板。
林深选择在控辩双方和法官面前说出真相——但他不想让真相出现在新闻报道里。
这是他的底线。
沈未辰闭了一会儿眼睛。
“答应他。”
五
6月8日。
沈未辰站在B3层的走廊里。服务器的封条还在,上面的日期——6月3日——已经过了五天。
他在等一个人。
三点整,齐骁从前台领了一个人下来。
短发,灰色西装,手里拎着一个深棕色的公文包。男人看起来大约四十岁,步子不快不慢,像每一个来法院开会的律师。
但他不是律师。
他是赵弈铭的技术副总监——姓刘。
齐骁把人带到设备间门口,看了沈未辰一眼,然后转身走回工位。
刘总监站在走廊里,被日光灯照得表情没有任何明显的情绪——像是在很多场类似的会面中练出来的表情控制。
“周平说你在深圳见过他。”沈未辰说。
“对。他当时来找我,确认Jenkins任务的事。”
“你为什么愿意来?”
刘总监沉默了几秒。
“因为我不确定赵弈铭会怎么处理后续的事。”他说,“我做了我该做的技术工作。但如果有一天这件事上了法庭,我不想成为最后一个才知道真相的人。”
沈未辰没有立刻接话。
他想问的是:你手里有没有留存那份文档——赵弈铭让你创建Jenkins任务时给的参数说明文档?
但开口之前,他看到了刘总监的手。
他手里拿着一张叠好的A4纸。
刘总监把纸递给他。
沈未辰展开。
纸上是Zabbix API的调用参数——和他从周平手里拿到的那份一样。
但这一份的笔迹,不是林深的。
是打印的。
文件页眉上有一行系统生成的标记:Generated by: zhao.yiming.workstation
刘总监看着沈未辰的表情,然后开了口。
“那张纸是我用周平给我的原件,自己再打印的。因为我想留一份——以防他日后来问我,我说不清楚。”
沈未辰把纸折好,放进口袋。
“那份原件现在在哪里?”
“赵弈铭手里。他让周平把原件交给他的助理了。”
“交出去多久了?”
“周平从深圳回来后第三天。”
沈未辰点了点头。
和刘总监说了再见之后,他站在原地,把刚才的对话从头想了一遍。
刘总监说赵弈铭让周平把原件交给了他自己的助理。
助理。不是律师。
说明赵弈铭至今没有把原件作为证据提交给法院。
它不在法院的证据清单上。
它还在赵弈铭的手里。
沈未辰拿起手机,给郭垣发了一条消息:
“赵弈铭手里有一份关键的原始文档没有出现在证据清单上。Zabbix参数说明的原件——林深签过字的那份。他收起来了,没有提交。”
郭垣回复:
“如果他提交了,林深的签字就会出现在证据链条上。他不提交,是因为他不想让法院看到林深的签字。”
“那林深出庭作证的事——”
“变得更危险了。”郭垣说,“因为一旦林深的证词指向赵弈铭,赵弈铭的下一步就是把那份原件提交给法院——然后反问:‘如果林深真的不知情,为什么原始文档上有他的签字?’”
沈未辰站在走廊里,通风管道的低频嗡鸣像一段持续运行的底噪。
赵弈铭手里永远握着一张没出的牌。
而沈未辰的任务,是在他出牌之前,让那张牌失去杀伤力。
(第二十四章 · 质证 · 完)