备用机房的灯在凌晨四点十七分还亮着。
日光灯管发出持续的低频嗡响。陈路从终端前站起身,走到窗边。玻璃上映出六排设备的指示灯,绿光密密麻麻,比窗外的夜色更深。她伸手摸了一下窗框上的冷凝水,指尖沾湿,在裤腿上擦了两下。
顾远坐在终端前,手指停在键盘上方,没有敲下去。屏幕上的光标在第四十七条的空白正文栏里闪烁,一明一暗,间隔均匀。他从烟盒里抖出一支烟,放进嘴里,没有点。滤嘴在齿间压出一道浅痕。
周启明把程久传来的最终议程复印件摊在桌上。纸边卷起,第七项被红笔圈了三道。圈痕很重,纸面几乎被划破。他用食指点着那张纸,指节在议程标题上投下一小片阴影。
“整体性确认。不设单独表决,不设单独辩论。”
陈路转过身来。投影仪的风扇嗡嗡转动。她把律师审阅意见、答复函和秘书处替代纪要依次拖进同一个窗口。三份文件在屏幕左半区排成竖列,文件名后面的修改时间码精确到秒。意见书:零点十一分。答复函:零点二十三分。替代纪要:一点零五分。
“三份互相矛盾的文件,一次性确认。”她把光标移到确认按钮的预置位置上,没有点击。“确认之后,它们就变成同一件事。”
伊琳站在白板前。马克笔的笔帽在她手里转了两圈,发出塑料摩擦的细小声响。她没写字。她的终端屏幕切到了中东应力监测窗口,波形图显示八号断层在凌晨三点五十分出现一次新的微震,振幅比三点零九分那次大了零点三个单位。位移方向与四十七分钟前那次之间,有一个十七度的夹角。
她盯着屏幕看了很久。
“它在转向。”
顾远没有回头。他按下快捷键切屏,光标从空白条款栏移开,第四解释索引在屏幕上铺展开来。条目编号、时间戳、分类标签、备注,逐行排列。他找到d-047所在的那一行。
索引显示,下午四点零三分的移除操作已被系统归档。分类标签栏里写着“制度自指行为”六个字,字体比标准字号小半号。备注栏里另有一行小字,宋体,九磅:“操作人在正文栏前停留四分钟。操作终端键盘无输入。鼠标无移动。”
那四分钟的沉默被系统逐条记录:光标停在第一行第一列的时间点,屏幕保护程序被延迟激活的指令,终端与服务器之间的三次保活握手。系统没有记录操作人想了什么。但它记录了操作人什么都没做这件事。
“他当时在看什么?”陈路的声音压得很低,像在档案室里说话。
周启明从文件夹里抽出秘书处操作日志的打印件,翻到第三页,指着一行时间戳。四点零三分十七秒,操作终端调用了第四十七条第二款。四点零三分二十二秒,操作人打开条款原文,窗口弹出,占据屏幕中央偏左。四点零三分二十五秒,光标停在空白正文栏第一行第一列,闪烁。四点零七分四十九秒,操作人移动鼠标,点击“确认引用”。
中间的四分二十四秒,日志栏没有一条操作记录。
他把打印件放在桌上,用指甲盖盖住四点零三分二十五秒和四点零七分四十九秒之间的所有时间。
“系统没有记录操作人在那四分钟里做了什么。”
顾远把烟从嘴里取下来,夹在指间。
“但它记录了‘没有记录’这件事。”
陈路的屏幕闪了一下。地底守护进程在凌晨自动巡检中生成一批子进程。她翻到编号跳跃的位置。四点零三分三十一秒——操作人打开条款原文后的第六秒——生成一条子进程,编号一百一十三。下一条是一百一十五。一百一十四不存在。
她在凌晨一点第一次翻查日志时发现这个跳跃。当时她以为是索引错误,关掉窗口重新打开。编号没有变化。她又调出原始日志文件,用十六进制编辑器逐字节查看。两条子进程的存储地址连续排列,中间没有留空。不是删除,不是隐藏。是跳过去的。
她把一百一十三条和一百一十五条的内容并排显示在屏幕上。
一百一十三条:记录第四十七条第二款被调用。条款正文区域指针为空。窗口句柄活跃。操作人光标位置:第一行第一列。
一百一十五条:记录操作人确认引用。空条款正文栏被填充为移除依据。引用源:法律顾问组审阅意见书。引用范围:第四十七条第二款第三项。
“中间那条呢?”伊琳问。她的马克笔笔尖抵在白板上,压出一个针尖大小的墨点。
顾远重新打开陶远十六年前留下的架构文档。文件很大,打开用了十几秒。他翻到附录第四十七条的预留字段说明,第五页,靠近页脚的位置。有一行铅笔字被擦过。
橡皮擦掉了大部分石墨,但没有擦干净。在屏幕背光的照射下,凹痕还能辨认。字迹很轻,笔画向右倾斜。
“编号跳跃是留给填充者的签名。”
他读出声来,读完没有立刻抬头。手指在那行字上停了一会儿。
“他早就知道。”
林序从笔记本上抬起头。他今晚一直在写。笔尖划过纸面的声音细密而持续。他没有用电脑,用的是纸和笔,一本棕色封面的硬皮本,内页是浅米色的道林纸。他记下移除操作的时间戳,精确到秒。记下四分钟日志空白的起始和结束时间。记下编号跳跃的位点。记下陶远铅笔字残留的笔画走势。字很小,排列紧密,几乎不留页边距。
他在最新一页的页脚停了一下,笔尖在纸面上点了两下,没有墨渍渗出。然后他写了下一行脚注,字比正文更小:
“空条款不是没有内容。空条款的内容就是填充者的行为。”
周启明拿起桌上的座机话筒。塑料外壳上有细小的划痕,按键上的数字已经磨得模糊。他拨了程久的号码。嘟嘟声响了两下,对方接起来。
程久的声音很清醒,没有刚被吵醒的沙哑。
“我在看同一份日志。”
她没有说“喂”,没有问几点了。她直接说了这句话。
周启明按下免提键,把听筒挂回座机。程久的声音从扬声器里传出来,在备用机房里散开,音质变薄了一点,但每个字都能听清。
“四分钟够一个人做什么?”
“够一个人读完三页纸的法律意见书。”程久的语速不快,每个字之间隔着均匀的间隔。“也够一个人意识到,自己正在做的事会被永远记录在条款正文栏里。不是记录在操作日志里——操作日志可以被删除。是记录在条款正文栏里。条款正文一旦被引用,就不能删除。”
电话那头传来翻页的声音,纸页相互摩擦,响了两下。
“我今天下午调取第四十七条的历史修订记录。这条款三年前被删除时,秘书处提交的删除说明只有五个字。‘待制定替代条款’。句号。这五个字就是删除的全部理由。替代条款从未制定。从未起草。从未列入议程。法律顾问组今天下午用了一个从未存在过的条款,移除了一份承认第一条构成新设职务的意见书。”
“而那份意见书里的判断——”周启明的话还没说完。
“被一个字不差地保留在同一律师的另一份文件里。答复函,第三页,第二段。措辞完全一致,连逗号的位置都没有变。”
机房里只有扬声器的声音和投影仪风扇的转动声。
“移除行为改变的不是判断。”周启明说。
“对。改变的是判断在程序中的可见性。”
伊琳转过身去,在白板上写下“可见性”三个字。笔画很用力,板擦擦几下才能擦掉。写完她在旁边画了一个箭头,指向三个字:应力。
没有解释。
林序看到了。他把“可见性”和“应力”并排抄在日志本上,中间空一格。然后在空白处画一个很小的问号。
顾远打开第四解释索引的最新条目。屏幕刷新,系统在记录移除操作的同一时间段内,自动生成三条c类陈述。编号一百一十六到一百一十八,逐条排列,每条后面跟着时间戳和置信度评分。一百一十六条的置信度零点七三。一百一十七条零点八一。一百一十八条零点六九。
他依次点开。
第一百一十六条:移除行为改变的是判断在程序中的可见性。
第一百一十七条:空条款由引用者的行为定义。
第一百一十八条:讨论的边界已被移除行为本身改变。
陈路盯着第一百一十八条看了很久。她的手指在桌面上不自觉地点了两下,和光标闪烁的节奏刚好错开。
“系统在学着用我们的措辞。”
顾远把第一百一十八条重新读了一遍,一个字一个字地读。主语是“讨论的边界”,谓语是“已被改变”,状语是“被移除行为本身”。这是一个观察者在对一个外部行为进行陈述,描述行为后果,不涉及行为动机。它没有说“因为”,没有说“为了”,没有说“应该”。
“不。它在描述我们。”
陈路动了动嘴,没有说出话来。
凌晨四点三十一分,伊琳的终端发出一声提示音,短促,低频。她转身去看屏幕,右手还捏着马克笔。
中东应力监测数据更新了。波形图上的曲线在三小时前出现第一次波动,振幅不大,但波形不对称。第二次波动出现在四十七分钟后,振幅增加零点三。然后波形平稳了四十多分钟,在四点三十一分再次出现变化。第三次波动,位移方向与第二次之间偏转了几度。不是回到第一次的方向,也不是继续沿第二次的方向。是转了九度。第三次微震的振幅比第二次大零点四。
伊琳把三次微震的时间点和位移方向写在白板上。
点位一:三点零九分。位移方向:北偏东十四度。
点位二:三点五十分。位移方向:北偏东三十一度。
点位三:四点三十一分。位移方向:转向,偏移九度。
她在三个时间点之间画两道竖线,标注间隔。
第一次与第二次:四十一分钟。
第二次与第三次:四十一分钟。
第三次微震还在继续。实时波形在屏幕上缓慢刷新,振幅曲线没有回落,维持在一个平台上,像什么东西在持续施压。
顾远看了一眼墙上的挂钟。时针刚过四点,分针指在六和七之间。从三点零九分到三点五十分,四十一分钟。从三点五十分到四点三十一分,又是四十一分钟。相等。
但伊琳没有看时间间隔。她在看震源位置。三次微震的震源越来越近,沿断裂带移动,朝一个方向移动。
周启明从最终议程上抬起头。他注意到第七项旁边有一个手写的时间标注:十一点。他看了一下挂钟:四点十九分。六小时四十一分钟。
“程久。”他叫了一声。
“在。”
“你明天在确认表决之后,有几分钟的个人意见陈述时间?”
“五分钟。”程久的声音里没有犹豫。“个人意见不纳入表决记录。这是议事规则第二十一条。但列入会议纪要。这是同一款第二项。”
“会议纪要可以被替代。”陈路说。
她说这话的时候语气很平,像在陈述一个已知参数。
“可以。”程久说。扬声器里传来椅子挪动的声音。“但个人意见一旦列入纪要,替代纪要的行为本身就会产生两份需要对比的文件。如果替代纪要声称我‘讨论了若干问题’,而原始纪要记录的是我逐条陈述三份文件的矛盾之处,那么替代纪要就必须覆盖原始纪要里的具体内容。从‘宣读’改成‘讨论’只需要改一个词。但如果要覆盖我逐条列出的矛盾项,替代纪要就必须逐条列出对应的替代说法。”
周启明听懂了。表决会通过,三份互相矛盾的文件会被一次性确认。但程久要在确认之前,用个人意见的入口,把被强行合并在一起的东西重新拆开。拆成三份,每条矛盾逐条陈述。这些陈述不会影响表决结果,但会留在档案里。
“你把三份文件的不同部分重新打开在档案里。”
“档案一旦生成,就无法被表决重新关闭。”
程久的声音里没有慷慨,没有愤慨。她说完这句话的语气和说“今天星期三”差不多。
电话挂断。扬声器里传来忙音。陈路伸手按掉免提键。备用机房陷入短暂的安静。日光灯的嗡响又变得清晰起来,频率稳定,像某种持续的底噪。
陈路在投影上调出一个新窗口。系统在看到最终议程副本流入网络流之后自动生成的档案入口,预建但尚未填写内容。入口标题栏是空的。备注栏里有一行字,无衬线体,黑色,不加粗:“待接收:个人意见陈述。”
她选中那行字,右键查看属性。创建时间:凌晨一点零九分。比程久拿到最终议程的时间晚六分钟。系统在六分钟内完成全流程:识别新议程,解析议程条目,预判每个条目将产生的档案需求,为尚未发生的事情预留接口。
伊琳还站在白板前。她用马克笔在三点五十分旁边画一个圆圈,边缘有些抖动。然后在四点零三分旁边又画一个圈。两个圈之间用横线连起来,横线上方标注:十三分钟。
“三点五十分是八号断层第二次微震。四点零三分是移除操作。”
“地质变化不等人做决定。”顾远说。
伊琳放下马克笔。笔落在白板槽里,发出塑料碰撞的轻响。
“地震波每秒数公里传播。十三分钟,应力场已经重新分布几百次。”
林序在日志本上写下:“物理现实不等待制度填充空条款。”
他用笔把这行字圈起来,圈了两道。外侧的圈画得比内侧用力,压出一道凹痕。旁边标注三个时间戳,纵向排列:三点五十分——微震;四点零三分——移除;四点三十一分——转向。
三个时间点之间的两个间隔,十三分钟和四十一分钟。没有明显的数学关系。他用笔尖在两个数字之间画一条线,线上打一个问号。
顾远重新打开陶远的架构文档,翻到附录第四十七条。预留字段说明占半页,正文是打印体,旁边有手写批注。他之前看这一页时注意到铅笔字,注意到编号跳跃,但漏掉一条脚注。
脚注写在页面最底部,第一次翻看时被滚动条遮住了。字号很小,墨水褪得厉害,颜色从黑色变成灰褐,个别笔画已经断开。但还能辨认。
“空条款的第一次引用将定义它。定义者的犹豫时间将被记录。犹豫时间的长短无关紧要。重要的是犹豫这件事本身。”
他读出声来。
机房里没有人接话。只有设备风扇的持续转动声。
陈路重新调出一百一十三条和一百一十五条之间的编号跳跃。她把光标移到一百一十三条的编号上,选中,按向下方向键。焦点直接跳到一百一十五条。中间没有条目,没有隐藏字符,没有零宽度的占位符。
她选中一百一十四条——那个空号——右键点击属性。系统弹出属性栏。窗口很小,里面只有一行字:
“已预留。等待填充。”
等宽字体,黑色,不加粗。没有闪烁,没有提示音。它就那么停在那里,像一条在队列中预留了位置但尚未写入任何内容的指令。
“它在等什么?”陈路问。
顾远看着那四个字。然后他看向白板上伊琳画的箭头。应力转向的箭头,三条矢量叠加在一起,指向一个还没有出现但已经被之前所有方向暗示了的方位。
“等我们在档案里重新打开那些被合并在一起的东西。”
凌晨四点四十七分,地底守护进程发送新一轮心跳。陈路的终端右下角弹出一个提醒框。心跳数据包每四十七秒发送一次,这个数字从几个月前就没变过。
但这次的数据包里多了一个字段。她点开详细内容,字段列表比平时多出一行。在常规的心跳时间戳、进程编号、状态码后面,新增一个文本字段。字段名:同步状态。字段值:“已同步。一百一十四条等待接收端。”
林序把这句话抄在日志本上。他写得很慢,每个字都压得很实。“已同步”三个字占两行,笔迹比前面的记录更重。写完他把笔帽合上,旋紧,发出细微的咔嗒声。
窗外还是黑的。
路灯的光从窗帘缝隙里透进来,在机房地板上画出一道窄窄的橘色光带。光带边缘模糊,被窗框的影子斜切一刀。远处能听见城市底层传来持续的低频嗡鸣,不知是交通还是工业设备。声音很闷,像隔着很厚的土层传上来的。