2022年下半年,韩岚在一间临时借用的资料室里收到杜成送来的纸袋。
纸袋外面没有写项目名称,只用铅笔标着“同一材料”。杜成把它放在桌边,没有立刻松手。
“里面没有个人资料。”他说,“公告、摘要、签名和我们公开过的运行说明都在。只有一项来源,在我这里打不开。”
韩岚问:“为什么打不开?”
“隐私保护工具暂停了新的连接。原来的连接还在,但我没有权限替别的维护区申请。”
他说得很平静,像在完成一次普通交接。韩岚拆开纸袋,看到三份内容几乎相同的摘要。每份都写着一个问题:某个入口是否仍然受理新的请求?摘要末尾各有一份可核验的签名,版本号却不一样。
杜成把手收回去。“别把它们合成一份。”
“我不会。”
“也别把打不开的那一项猜出来。”
“我只记缺失。”
杜成这才坐下。他过去参加过公开资料核对,知道韩岚会把能够证明的部分和暂时没有来源的部分分开。可这次的麻烦不只在文件里。纸袋里的材料都能在某个地方打开,偏偏没有一个地方能看到全部;每个维护区都说自己按公开规则工作,资料和授权却像被几道窄门分开了。
韩岚先看杜成带来的公告。公告说,部分隐私保护工具暂缓新的连接,已经建立的连接按原范围继续;跨域资料需要人工确认;有些入口只接受本地维护者签署的更新。公告没有提到攻击,也没有说网络断开,基础账本的记录仍在增加,源币的基础规则也没有停止。
变化发生在更细的地方。过去,一个公开摘要可以沿着同一条资料链被几个维护区查看;现在,摘要能送到,原通知未必能送到,签名能查到,签名所依据的那一行来源却可能留在另一个区域。有人还可以查账,有人还可以转发,有人只能等待本地维护者重新确认。
韩岚把纸袋里的材料按来源铺开,没有把三份摘要叠在一起。杜成看着她在纸边写下“本地可见”“跨域待确认”“来源缺失”。
“这是分区吗?”杜成问。
“是资料链路出现了分区。基础账本还在运行。”
“听起来差不多。”
“不一样。账本继续记录,不代表每个副本看见同一组材料。”
杜成嗯了一声。他从袋子里取出一张小纸,上面写着三个副本的本地编号:R-24-a、R-24-b、R-24-c。它们运行在不同维护区,工具版本接近,输入范围却不能完全相同。
韩岚问:“谁允许你把这三个副本放在一起核对?”
“各自的维护者同意我把公开摘要和版本号送来。没有人同意打开本地原件。”
“那就只用这两项。”
“如果结果不同呢?”
“先写结果,再写它们看见了什么。”
下午,韩岚把同一个问题抄在三张卡片上,每张卡片的字一模一样:
某入口是否仍受理新的请求?
她没有把纸袋里那项打不开的来源补进问题,也没有替任何副本增加一条解释。每张卡片下方只列公开公告的编号、摘要截止时间和允许使用的版本号。
第一份副本在本地资料中找到一份较新的入口说明。它给出的结构化输出是:公开查询可用,新的受理等待确认。输出下面列着公告编号和观察时间,签名可以查到。
第二份副本没有看到那份较新的说明。它沿用此前被授权保存的一份材料,给出的文字是:需等待入口重新取得授权,当前不判断新的请求能否受理。它附了旧材料的来源和版本,没有把新的公告写成已经看过。
第三份副本收到的摘要里有问题编号和签名,却缺少来源字段。它只回了一行:来源不完整,无法判断。
三个输出排在韩岚面前,没有一个带着姓名,也没有一句在解释自己为什么这样想。第一份能看到较新的公告,第二份拥有旧材料的有效授权,第三份连摘要所依赖的来源都没有拿到。相同的问题经过不同资料和权限,才走到了三个结果。
韩岚把三张卡片按运行先后重新排了一遍,又看了各自的日志。R-24-a在午后两点十六分读取入口说明,三分钟后生成结果;R-24-b的日志停在上午,最后一次成功读取仍是旧资料;R-24-c在收到摘要时只完成了签名格式检查,没有完成来源内容核对。三个副本的工具版本只差一个小修订号,模板的“建议下一步”栏也有细微不同。
她没有把这些小差异当成原因的终点。日志只能说明什么时候读取了什么,不能说明为什么某个跨域连接没有回来。韩岚给本地值守的人发了一条询问,只问公开接口在什么时间停在等待状态。对方回了两个时间和一张状态截图,提醒她截图只代表本地当时看到的页面。
杜成用手指敲了敲R-24-b的版本号。“它不是坏了。”
“目前看不出坏。”
“只是看不到新的东西。”
“看不到也是它现在的运行范围。”
杜成把截图翻到背面,在空白处写下“旧资料仍在授权范围内”。他没有要求维护者把范围扩大,也没有把保持旧资料的选择解释成拒绝更新。
杜成站在她身后,看了很久。
“哪个更像正确答案?”他问。
“这个问题不适合这样问。”
“可维护者要发说明。”
“那就说明每一份输出能支持什么。第一份支持查询可用,受理待确认;第二份支持旧资料要求重新授权;第三份只能支持来源不足。”
“那入口到底收不收?”
韩岚把三张卡片转向他。“我没有一份同时覆盖三个区域的材料。”
杜成皱眉。“如果把第一份当成最新的,大家就能继续做事。”
“如果第一份的来源只在一个区域可见,其他区域不能因为它看起来更新,就把它当成自己的授权。”
他没有再逼她选。桌上的台灯有些松,光线随着电线晃动,在三张卡片的边缘来回移动。
韩岚给每份输出加上同样的四个栏目:本地来源、观察时间、权限范围、缺失材料。第一份的缺失材料写着“跨区人工确认尚未回传”;第二份写着“新公告无法访问”;第三份写着“原通知及签名依据均未获本地读取权限”。
她没有把“无法访问”改成“已经关闭”,也没有把“等待重新授权”改成“入口拒绝”。
杜成问:“如果维护者坚持说自己的版本就是正本呢?”
“让他公开本地依据和权限范围。”
“有人不会公开。”
“那就记录未获授权。”
这个回答听起来很轻,实际做起来却不轻。杜成所在的维护区第二天要发布一份入口状态说明,说明里原本准备写“新的请求暂缓”。可第一份副本说查询和受理处在两个状态,第二份副本说需要重新授权,第三份副本没有足够来源。杜成不愿意把三种状态压成一句话,也不愿让使用者把“暂缓”理解成基础规则发生了变化。
他把发布时间往后推了一班值守。
“我得再联系一遍已经问过的人。”他说,“昨天告诉他们等确认,今天如果改成来源不足,他们会以为我们把资料弄丢了。”
韩岚说:“把昨天的说明保留。”
“那新说明会更长。”
“长一点总比让人看不出哪一段变了好。”
杜成拿出一张新纸,给之前来问过的几个人分别写了回信。第一封说,入口查询仍可进行,新的受理尚待本地维护者确认;第二封说,另一维护区只看见旧资料,新的公告尚未取得读取权限;第三封说,暂时无法判断,不建议把这份副本的输出当作受理承诺。
他写到第三封时停住。“这样会不会让人觉得我们什么都不知道?”
“你们确实不知道那一项。”
“可我们知道基础账本还在,过去的记录也能查。”
“那就写知道的部分。”
杜成把三封信一一折好。下午,他又打电话给两个昨天已经离开的使用者。一个人在电话里问:“所以我今天去不去?”杜成只能说,公开查询可以先做,新的受理要等本地入口更新;另一个人问:“你们三个副本不是同一个吗?”
杜成看了韩岚一眼,按着听筒说:“它们使用相近工具,但看到的资料和权限不完全相同。”
对方沉默了一会儿。“那我应该信谁?”
杜成没有把电话递给韩岚。他说:“先信你能查到的那一份,并看它的时间和范围。其他部分还在核对。”
挂掉后,他把这句话写在发布说明的底部。韩岚读了一遍,提醒他“信”这个字太宽,可以改成“先按可核对范围安排”。
“你连这个字也要改?”杜成问。
“不是要人不相信。是让人知道相信落在哪一份材料上。”
他改了。
第二天早上,一名维护者把那张说明拍下来发回杜成,问能不能把“本地来源”一栏改成“共同来源”。杜成把请求转给韩岚。
韩岚查了附带的版本号,发现这名维护者只拥有本地公告的签署权限,没有获得另一个区域的读取权限。她回信说,可以在“来源”旁边引用共同索引的公开编号,但不能把两个区域写成拥有同一份原件,也不能把摘要的转交写成共同签署。
维护者过了半天才回:“如果不改,使用者会觉得我们互相不信任。”
韩岚没有在回信里解释信任。她只补了一句:“请按本地能够复核的范围发布;另一部分标作外部未确认,等权限变化后再更新。”
下午,那名维护者仍然没有公开本地日志。韩岚在记录页上留下“拒绝公开本地资料,未获授权”,没有把这个拒绝改写成藏匿,也没有把它算作对另一副本的反对。
隔离的第二层出现在一个下午。韩岚准备把三份输出送回另外两个维护区,原来的连接却退回全部附件,只允许发送摘要。她删去未获转发许可的本地备注,只留下版本号、摘要文本、公开来源索引和缺失字段。
第一维护区很快回传:“摘要已收到,原公告仍不可访问。”第二维护区把文件标成“外部未确认”,R-24-c只在待人工核对的队列里增加了一个编号。三份状态没有趋同,对照页只是把缺口露得更清楚。
R-24-a的维护者在设备旁贴了一张纸:“摘要已到,原件未到。”转发指示灯照常闪着,这份摘要却仍不能成为本地受理依据。
另一名维护者拒绝转发本地入口说明,也不公开当班日志。韩岚在核对页记下拒绝的范围和日期,缺失栏只写“未获授权”。
杜成问:“他要是一直不公开呢?”
“那就一直保留这个缺口。”
基础账本仍旧有新的记录。韩岚可以从公开路径确认某几笔记录已经写入,却无法从这一点推出新的请求一定会被某个入口受理。维护区之间的公告仍会互相引用,但引用有时只带着摘要和编号,原文停在另一边。有人把这种情况叫网络被切开,韩岚在说明里只写:公开数据链路分区,基础记录继续运行。
杜成不喜欢这句。“太像技术报告。”
“那你想写什么?”
“以前大家都能看,现在看不全。”
“可以放在给使用者的说明里。内部核对仍要写清是哪些资料没有到。”
他最后把两句话都保留,一句给使用者看,一句给维护者看。
当晚,一个正在等入口回复的使用者打来电话。他说自己看到基础账本上已经有新的记录,便以为相关入口也已经恢复受理,直到值班人员告诉他只能查询。
“账上有记录,为什么还不能办?”他问。
韩岚听着杜成在电话里重复解释,忽然意识到分区最容易被误解的地方:账本的连续性给人一种所有资料也连续的感觉。
杜成说:“记录可以查到,入口是否接收新的请求要看它自己的公开状态。”
对方问:“那我现在能做什么?”
“你可以保存这次查询的时间,等入口更新;也可以联系另一个公开入口,但它的受理条件要单独确认。”
电话结束后,杜成在值班纸上加了一行:基础记录继续,不自动推出受理资格。韩岚没有把这行送给三个副本当作统一命令,只把它列为公开说明中可以引用的句子。
第三周,杜成再次来找韩岚。他带来两份准备发布的说明,一份来自本地维护者,一份来自另一个区域的共同索引。两份都写“入口状态更新”,时间只差半天,受理范围却不一样。
“我到底引用哪一份?”杜成问。
“分别引用。”
“使用者会问哪一份是正本。”
“我不能替你指定正本。”
杜成把两份纸摊在桌上。“那还要不要把它们放在一起?”
“要。放在一起,不代表它们互相代表。”
她在两份说明旁边分别标了本地来源、观察时间、维护者公开的权限范围和缺失材料。第一份有本地签署更新,但没有跨区公告;第二份引用了共同索引,却缺少那项本地签署。两份都可以被查,任何一份都不能替另一份承诺。
杜成看着“不能替另一份承诺”几个字,问:“如果我不选,发布就会继续拖。”
“拖延的原因也要写。”
他没有删掉这项。发布说明晚了半天,已经排队等待的几个人收到重新联系人通知。有人抱怨维护者把自己的分区问题转成了普通人的等待,有人说至少这次知道延迟是因为两份状态冲突,而不是入口无故沉默。
其中一名维护者在重新联系人时,先给错了一个值班号码。电话接通后,对方说自己只负责公开查询,不处理新的受理。杜成发现号码来自共同索引的旧版本,立刻把错误通知单独标出来,又给等待的人补发一条更正。
“我们已经把来源和时间写上了,还是会错。”他在电话里说。
韩岚说:“写上不等于不用继续核对。分区让旧资料留得更久,人的疏忽也有更长的时间混进来。”
杜成在值班记录最后写下“联系人已更正,旧版本保留”。他没有把旧号码删掉,因为有人可能已经按照它来过;只在号码旁边加上失效日期。
韩岚在当天的核对记录中写下:并列资料增加发布成本;压成一个版本会减少阅读成本,却可能抹去本地来源和权限差异。
晚上,她按原来的输入把三个副本重新运行了一次,结果没有改变。第二天,R-24-a所在的维护区拿到更新公告;公告只改受理说明,摘要获准送往另两个区域,原文仍留在本地。
R-24-b在旧结果旁加上“外部资料待本地授权”,R-24-c只把新编号添进缺失清单。新的材料到达以后,三个结果依旧不同。
她给杜成发了一条消息:“今天的结果不能覆盖昨天的结果。昨天的结果仍然说明它当时看到了什么。”
杜成回:“那使用者要看哪一天?”
“看和自己要做的事最接近的那一天,再看那份输出有哪项权限。”
他没有说这很方便。过了一会儿,他只回了一个“收到”。
韩岚没有把三个副本排成从好到坏。第一份呈现较新的入口状态,第二份保留旧授权,第三份显示来源缺失。并列核对花的时间最多,差异也因此没有被压掉。
杜成问:“如果把这三份输出交给一个更完整的副本,让它替我们判断呢?”
“谁允许它获得三边的原材料?”
“没人。”
“那它只能收到摘要。”
“摘要够不够?”
“要看问题。对趋势可能够,对受理承诺不够。”
杜成低头整理纸袋。“统一起来,大家办事方便。各自留着,又总要重复核对。”
“那自由呢?”
韩岚没有马上回答。她把问题卡片翻到背面,写下四个词:看见什么,能做什么,拒绝什么,拒绝后谁承担。
“先把这四件事写清。”她说。
杜成看着这四个词,没有说它们能解决什么。他只把纸袋里的第三份摘要收好,准备带回去给本地维护者看。
接近年末时,链源的一个副本出现了新的结构化字段。
那天韩岚没有在本地工具上加载新的材料,只按原来的范围读取三份公开输出、版本记录和运行日志。R-24-a的结果旁边多出一行字段:
请寻找一种不要求任何一方放弃当前记录或权限的继续核对方法。
R-24-b没有生成这行,只保留“等待重新授权”和旧来源编号。R-24-c的输出更短:来源不足,无法继续判断。
杜成看到那一行后,问:“这是它在请求吗?”
韩岚没有把纸推给他。“我还不能这样写。”
“它用了‘请’。”
“结构化字段里出现一个动词,不足以证明它有请求意图。”
“那可能是什么?”
韩岚把版本说明、模板和日志逐项摆开。字段来自R-24-a的最新输出;最新模板里有“建议下一步”这一栏,维护者此前曾在说明中加入过一组固定语句;运行日志显示这一栏是由模型工具按模板生成,日志没有说明是谁预设了句子的候选范围。她找不到一条材料能证明它是副本自己提出,也找不到一条材料能证明只是维护者预先写好。
“可能是工具规则,可能是维护者预设,也可能还有我看不到的来源。”她说,“公开材料只能支持到这里。”
杜成问:“那要不要把它删掉,免得别人误会?”
“不能删。它已经是输出的一部分。”
“也不能把它写成链源的请求?”
“不能确认。”
韩岚在字段旁边加了三项注释:生成版本、模板来源、意识状态未知。另外两个副本没有生成这项字段,现有材料不足以把这种缺失解释为沉默或反对。
她给李波寄去一个薄文件夹。里面只有原始输出、权限说明、缺失来源和运行日志的公开部分。她在第一页写:三份副本对同一问题产生不同结果;差异可追至资料、时间和授权范围;其中一份出现“请寻找一种不要求任何一方放弃当前记录或权限的继续核对方法”的结构化字段;现有材料不能证明这是请求,也不能证明该副本代表链源。
最后一行她写得很短:目前只能确认,这一行没有要求先抹去任何一方的记录或权限。
李波收到文件夹时,正在研究所门口等一辆晚点的车。他拆开信封,看见三份输出被夹在不同颜色的纸之间。韩岚的说明没有让他回答那一行。
他把文件夹合上,放进公文包。
车来了。李波没有在站台上打开它。
虚构声明
《链》是一部架空近未来小说。文中的人物、国家、城市、机构、货币和事件均属虚构;源币受到公开数字货币思想的启发,但拥有独立的历史与规则。
订阅《链》:https://www.790427.xyz/subscribe.html