哈哈小说
第 6 卷 · AI 的前夜 · 第 113 章 · 77 段 · 2705 字

第二个提交

第一百一十三章 第二个提交

电话接通的时候,麦景行第一句话是:「陆哥,出事了?」

他说没出事,但有一个问题要问:「泉华那边,最近有没有人主动联系过你?不是正式渠道,私下的。」

那边沉默了几秒。

「……邓工那件事?」

他没有立刻开口,等麦景行说下去。

「上周四,邓工给我打了个电话,说他路过我们这边附近,问我要不要一起吃个饭。我当时没想太多,就去了。就是普通的饭,聊的也是乱七八糟的,他说他最近在研究一些 BasePlatform 的旧接口,挺有意思的。」

「席间有没有提到我们这次审计?」

「快结束的时候,」麦景行说,「他问了一句,说'你们那套 G1/G2 的东西现在看得怎么样,有没有特别费解的地方'。我说还在看,没什么特别的。他说'好好好',就换话题了。」

「`set_system_fault`那条路径,有没有提到?」

麦景行说没有,说陆衍叮嘱过技术细节不往外说,就说还在梳理,没有细说。

「好。」

「陆哥,我做错了什么吗?」麦景行的声音低了一点,「当时真的没想到那顿饭有别的意思。」

「没做错,」他说,「这件事我需要知道,就这样。」

电话挂掉,坐了一会儿。

邓工是 BasePlatform 那边的人,对 `set_system_fault` 的调用路径了解程度不会比他们差。约麦景行吃饭,快结束的时候问了一句"有没有特别费解的地方",探的就是他们有没有看见那条路径。麦景行回答"还在看",邓工换了话题。那顿饭在4月2日联合会议之后,就在方晓晨约他通话的前几天。

时间点太准确了。

插图

消息发给乔木,说了邓工那顿饭。

「预期内。」乔木回了一个字。

「怎么说?」

「方总约你,不只是试探报告范围,是在弄清楚你们掌握了多少。她让邓工去试麦景行,因为邓工是技术对口,问技术问题最自然。麦景行没露,所以方总那边还在等。」乔木停了一下,「你们现在到哪了?」

「主要内容本周内可以出初稿。附件资料已经在整理了。」

「那就这周内出。」

「预审稿流程上是正式交付前一周。」

「我知道那是流程,但流程是死的。」乔木发过来,「她不知道你们的具体进度,这是你现在唯一还剩下的信息差。把它用在出稿上,不要留着让对方继续摸底。」

他看着这段话,回了一个「好」。


下午,麦景行把证据包整理清楚了大半。

三份核心材料:

魏磊5月12日那行 TODO:`verify isolation context before fault propagation`,提交记录完整,提交者、时间戳精确到分钟。

4月3日陈朗的删除提交,`style: remove verbose comments`,G2 这个库里陈朗第一次提交不过 review 流程的记录。附件里有提交前后的 diff,原始 WARNING 注释原文逐行保留。

陈朗的证词摘要:何时写、为何写、谭伟说了什么、最终如何删,时间线顺序排好,和 git 记录交叉比对,一一对得上。

麦景行发来:「陆哥,我在整理 `recovery_handler.c` 的完整提交历史,想打包进附件。」

插图

「好,有什么问题吗?」

「有一个提交我不太确定算不算需要写进来。」

「什么提交?」

消息停了几分钟,然后麦景行把一段 git log 发过来:

``` commit 7c4f1e9a Author: 谭伟 <tanwei@quanhua.com> Date: Tue Apr 5 09:12:03 2026

refactor: simplify error path in recovery_fail branch ```

「这个提交,」麦景行说,「是陈朗删注释之后两天,谭工自己提了一个。改的是`recovery_handler.c`里 recovery 失败那段的错误处理路径。我看了一下 diff,」

「发过来。」

diff 发来了。不长,二十行左右。

那段代码,看了两遍,又看了一遍。

原来的逻辑,recovery 彻底失败之后,函数返回一个非零的错误码,调用方可以据此判断系统状态异常。改动之后,那段路径里的返回值从 `ERR_RECOVERY_FAIL` 改成了 `STATUS_OK`。

`STATUS_OK`。

如果 G1 旁路和 G2 recovery 失败同时发生,触发了陈朗在3月15日记录过的那个竞争条件,`recovery_handler.c` 现在会告诉调用方:一切正常。


「麦景行,」他说,「谭工这个提交,有没有 reviewer?」

「查了,没有。」

「谭工在这个库里,有没有其他不走 review 的提交?」

插图

沉默了几分钟。

「有过几次,」麦景行回,「但 recovery 相关文件里,只有这一次没过 review。」

手机放在桌上,没有立刻发消息。

看了看屏幕上那段 diff。

`ERR_RECOVERY_FAIL` → `STATUS_OK`。

陈朗3月15日写了 WARNING,记录了竞争条件,`exit code non-deterministic`。4月2日联合会议。4月3日删 WARNING,无 review,以"代码整洁"为名。

4月5日,谭伟提交这段改动,`STATUS_OK`。

这已经不是注释的问题了。

注释可以有一百种理由删,代码风格、文档习惯,什么都可以说。但这段改动改的是函数的返回值。一个系统出了错,调用方问它"有没有问题",它回答"没有问题"。

这已经是实质性的修改了。不是文档习惯的问题——是在代码层面,把一个已知的故障出口堵掉了。


把情况发给乔木,附上了那段 diff 截图。

这次回得更快:「这件事的性质到此为止了。」

「我知道。」

乔木继续发:「原来'技术文档不完善''历史决策背景不清晰''合规文档遗漏'——那些说法,现在都不成立了。3月15日写 WARNING,4月3日删注释,4月5日改返回值。三步下来,是在代码层面主动屏蔽了已知并发安全问题的可见性。」

「对。」

插图

「这进了报告,监管那边看到的就不是'技术细节需要完善',是'已知安全风险被系统性掩盖'。这两件事的处理方式,完全不同。」

他没有立刻回。窗外的光已经偏黄了,快傍晚。

「报告结语部分,」他最后发过去,「需要加一句。」

「怎么写?」

他想了一下,把这句话打出来:「G1/G2 系统在上线前,存在一项经内部验证的并发故障路径。对该路径的技术警告,在特定时间节点后从代码库中被系统性移除;相关函数的错误可见性,在同一时间段内被代码变更主动屏蔽。上述操作均无正式代码审核记录。」

过了大约一分钟。

「写清楚了。」

「发前你把这段话再看一遍,确认没有一个字是超出证据的。」

他又看了一遍。每一句都有对应的 git 提交,时间戳,提交者,diff。

每一句都有对应的 git 提交,时间戳,提交者,diff,核对过了。「没有超出。」

「那就写进去。」停了一下,「陆衍。」

「嗯。」

「想好了吗?这份报告出去,泉华这边不会只是来沟通的。」

他看着屏幕,窗外的光一点点收进去。

「想好了。」