下一章 上一章 目录 设置
82、异常数据 七页纸里藏 ...
-
七页纸里藏着两套互相冲突的生成规则。
归档题面允许边界值取零,测试点脚本却在预处理阶段把零排除。学生按题面提交,遇到那组隐藏数据会被判错,后台再把结果写成“学生提交异常”。
岑序没有把第七页翻回去,也没有先说这是不是自己当年的那一题。他把三张空白记录纸并排压在桌沿:左边写材料事实,中间写本人陈述,右边留给待核问题。此前已留下的查看时限还剩三十七分钟,计时器放在最远的一角,没有谁把它拖到岑序面前催。
穆一衡将信息中心送来的只读终端搬到靠墙桌面,拔掉竞赛网线,只保留本地校验环境。终端外壳贴着旧资产标签,数字被磨掉一半,电源接口松,插头必须向上垫一张折过的硬卡纸才不会断电。邬白榆先核设备编号,又让管理员在门口拍下设备进入教室时的状态,照片只照资产标签和封条,不照七页纸。
“能重跑吗?”卓澄问。
“只能用自建样例。”穆一衡说,“不能碰原始数据,不能改历史记录,也不能把结果写回样例库。”
方祁原本在隔壁替高一学生接隔离网口,听见最后一句,从门缝里探进半个身子:“那跑出来有什么用?”
邬白榆把运行申请里的“历史责任”划掉:“先跑规则。谁做过什么,今天不写。”
方祁没进门。他把门重新掩到只剩一道缝,站在外面看补测学生的设备灯。历史材料核验占用了唯一的隔离端口,那个学生已经等了十二分钟,手里的补测单被卷成细筒,又展平。穆一衡出去说明情况,当场在补测单上写明“设备被校级核查占用,原安排顺延,不计缺测”,请管理员签字,并给出周五同一时段的替代安排。
学生看了看门内的灰袋,没有问里面是谁的事,只确认周五还能用原来的U盘。普通人的时间没有被一句“重要核查”抹掉。
岑序从题面允许范围里选了三个最小输入:零、一、负一。它们不对应任何历史提交,只用于验证规则。卓澄把输入写在单独的便签上,便签不进文件袋,运行结束后当场碎掉。
第一次运行归档脚本,三个输入全部进入计算。零值返回正常边界结果,一和负一分别进入对应分支。输出窗口右侧显示脚本版本,时间早于事故三天,和七页纸第四页页脚一致。
第二次运行前,只读终端弹出一个不起眼的校验提示:自建样例不属于历史数据集,是否保存为新样例。
默认选项是“是”。
方祁在门外看清按钮:“默认保存?”
卓澄说:“先记按钮,别给它写动机。”
方祁在门外登记表上写:默认勾选保存,尚未确认。
“停。”邬白榆逐格点过去,“临时运行,不存提交,不动统计。”
岑序取消默认勾选,把鼠标让开。卓澄从侧面核完三格;临时目录标明退出清除,他们才运行。
旧测试脚本先读取输入,再在预处理列表中筛掉零。日志没有写“边界值被排除”,只显示有效样例数量从三变成二。输出端却仍按照原始三条输入生成位置编号,于是第三个位置被填入统一错误类型:学生提交异常。
屏幕上那六个字出现时,门外的方祁转过身。他没越过门槛,也看清了。
“系统自己没收这个数,为什么算学生提交异常?”
没有人替系统回答。两次运行结果已经把冲突摆在屏幕上。
卓澄将输入范围、预处理行为和输出提示分成三列。他写到第三列时停了停,把“误判”改成“返回类型冲突”。
“还不能写误判?”方祁问。
“能确认脚本和题面冲突。”岑序说,“历史那次是不是同一条路径,还没核。”
“校验码不是一样吗?”
“前十六位一样。后半段不同。”
方祁隔着门看不见具体字符,只能把这个差别记在自己的纸上。他没有再问为什么不能直接算同源。
岑序从文件袋里找版本时间。旧脚本生成于事故前三天;事故后第二天,另一个脚本版本上线,零值重新进入有效范围。更新说明只有一行:“修正边界取值。”没有故障编号,没有关联到学生材料,也没有说明旧结果是否重跑。
邬白榆用铅笔在两条时间之间画了一条虚线。虚线不表示因果,只表示目前存在时间先后。她在旁边写:修订行为已发生,关联对象未知。
“修脚本的人至少知道这里有问题。”桑泊宁不在现场,记录工作临时由卓澄承担。他刚写下这句,又自己划掉。
邬白榆看见:“为什么删?”
“修改动作能证明他改了。不能证明他看过谁的结果。”
岑序补了一句:“也不能证明他完成过更正。”
三栏因此分别留下:脚本已更新;旧判定未见重跑记录;修改者是否接触历史归因,待核。
第七页纸边缘比前六页更白,装订孔偏了一毫米。以前他们会把这种差异当成“后来补页”的直观证据,现在没人用纸色证明动机。穆一衡只让他们测量孔距、核打印时间、记录页码。结果显示第七页确实晚打印两天,但打印晚不等于内容晚形成,也不等于有人故意把它塞进档案。
岑序翻回题面页。零值允许写得很清楚,旁边有一道扫描后发浅的蓝笔勾痕。勾的起笔方向和他过去的习惯相似。
他没有把纸拉近辨认。
“我当时提过这个边界。”他说。
穆一衡问:“放哪一栏?”
“本人陈述。”
卓澄另起一行,完整写下:岑序陈述,曾在当年提交前提出零值边界疑义;目前无接收回执,未确认由谁收到。
“别写我记得老师看见了。”岑序说。
“你记得吗?”
“记得有人站在旁边。脸和工位对不上。”
“那不写。”
卓澄没有追问那个人像谁。七页材料已经把一个技术问题推回现实,却还没有给任何一张脸位置。
为了确认冲突不是自建样例造成,他们做了第三次运行。这一次不直接输入零,而是使用脚本自带的随机生成器,限制范围包含零,连续生成五十组。归档脚本里零值出现四次,全部正常;旧测试脚本先报告五十组,预处理后只剩四十六组,最终结果仍保留五十个位置。四个缺口被填成同一种“提交异常”。
方祁在门外数到第四个时,把原来写的“一个特殊例子”划掉,改成“可重复出现”。
“这下能叫系统错误了吧?”
“能叫脚本规则冲突。”邬白榆说,“系统还包括题面、调用方式、输出解释和后续归因。别让一个词替我们查完所有层。”
方祁把“系统错误”四个字圈起来,旁边写:公开材料暂不用。
运行窗口下方有一条折叠日志。岑序本来只准备核预处理数量,展开后却看见另一个字段:异常类型进入统计时,被自动计入“个人无效提交”。那一栏不是历史学生的真实数字,只是当前临时运行的模拟统计。可它说明旧脚本的返回类型会继续流向评价层,不只停在一题判错。
卓澄问是否需要继续展开统计模块。
邬白榆看用途栏。此次授权写的是“核对早期测试点来源”,没有包含个人评价统计。当前字段已经证明存在下游入口,再往下看可能超出范围。
岑序没有因为那一栏可能与自己有关就要求继续。
“停在这里。”
卓澄把折叠日志合上,记录停止位置。停止不是放弃核查,而是承认当前权限只到此为止。统计口径是否真的改变过历史评价,要另开范围,不能借这次临时运行顺手查完。
计时器还剩二十一分钟。穆一衡提醒他们,剩余时间只够完成截图裁剪、清理临时目录和移交说明,不能再开新模块。
岑序却先提出再做一件事:“把修订后脚本跑同样五十组。”
邬白榆没有立即同意:“目的?”
“确认修订是否真的让零值重新进入有效范围。只核脚本,不进统计。”
穆一衡在登记单上补充用途,四人分别签名。修订后脚本运行时,五十组输入和五十组输出完全对应,零值四次全部保留。输出窗口不再出现“学生提交异常”,只返回题面规定的状态。
这证明修订有效,却没有自动修复过去。
更刺眼的是,两个脚本在系统目录里都被标记为“已归档”。旧版没有作废标记,新版也没有替代关系。一个后来进入训练库的人如果只按目录顺序选择,仍可能拿到旧版。
“今天这七页为什么会进训练队列?”卓澄问。
邬白榆调出推送通知。触发条件是校验码局部相同,系统把历史归档材料标成“可参考旧样例”。推送没有读取姓名,也没有识别事故编号,它只是看见相似字符后自动归类。
“推过来,不等于能用。”岑序说。
他在待核栏写下三问:旧脚本为什么仍是“可参考”;替代关系由谁维护;训练库还有没有同类旧入口。
邬白榆把两次运行结果挪到空白纸上:“先写最小差异。别写旧错新对。”
岑序重新打开只读说明页,只看函数入口和输出约定。归档脚本以题面范围作为输入边界,生成后再检查格式;旧测试脚本先用一张固定白名单筛选,白名单里没有零,随后才把剩余数据交给同一个计算函数。计算函数本身没有错,冲突发生在更前面。
“所以修订记录只写边界取值,也不算错。”卓澄说。
邬白榆把修订页往回翻,红笔压住“边界取值”:“先别签。白名单也动过,单列。”
纸上只留两行:白名单增加零;输出位置按有效数量重新对齐。
岑序用四个匿名序号手算。第二条为零,被旧白名单剔除以后,后两条整体前移;输出仍按原序号回填,第三条的结果可能落到第四格。
卓澄把“发生错位”划掉,改成“存在错位路径”。七页纸没有原始序号,不能把一条可复现路径写成当年已经发生的事实。
“那统计为什么会反过来?”方祁隔门问。
“现在还不能说反过来。”岑序说,“只能说旧脚本存在把有效输入删掉、再把缺口解释成提交异常的路径。”
他把纸上四个匿名序号折进待核栏,不带出任何历史值。
本次运行只保留脚本版本、随机种子、输入条数、筛除条数与返回类型。五十组具体值不打印;那张手写输入便签当场进碎纸机。卓澄按下碎纸键前,把纸递给岑序核了一遍——上面只有零、一、负一和匿名序号,没有历史路径。方祁站在门外看碎纸条落满透明盒,记下销毁时间,不进入数据核验签名。
教室外的实验课铃响了。下一班学生站在走廊等老师开门,几个人手里都抱着线圈盒。穆一衡看了眼剩余时间,决定把核验移到信息中心完成清理,不再继续占用实验教室。可只读终端的电源接口不稳,移动前必须关机;七页纸也不能在走廊里裸露。
他们因此临时调整顺序:先完成当前截图裁剪,文件袋重新套入不透明外袋,终端由管理员推专用车运走。岑序和卓澄不能碰车,只跟在两侧核设备是否离开视线。
实验老师进门时,黑板上还留着三列标题。卓澄把三列连同版本号一起擦掉,只在自己的夹页保留编号。下一班学生进门时,讲台上只剩粉笔灰。
一名学生找不到原定放在窗边的电流表。它被只读终端占位时移到了器材柜下层。穆一衡亲自取回,核对编号,再把实验课迟开三分钟写在场地占用记录里。历史核查的每一分钟都落到具体的人和课上,不能只在他们自己的表格里算作谨慎。
转移到信息中心前厅后,值班老师要求重新核一次设备封口。管理员发现终端侧面的防拆贴本来就有一道旧折痕,若此刻不记录,归还时可能被误认为本次移动造成。邬白榆拍下折痕位置,照片只进设备单,不与材料内容放在同一附件。
岑序站在前厅长椅旁,第一次离七页纸有两米远。文件袋在邢观尚未到场前由穆一衡和值班老师共同看管。他把本人陈述联收进自己的夹页。第七页蓝笔和周围视线都留在原处。
两套规则已经够清楚,责任仍然没有。
方祁从门外插话:“要不要现在搜一遍?”
“不要。”三个人几乎同时回答。
方祁举起手表示听见。他把隔离网口的备用线绕好,没再碰任何目录。
只读终端忽然黑了一瞬。垫在插头下的硬卡纸滑开半厘米,电源指示灯灭了又亮。卓澄伸手扶住插头,岑序却先按住他的手腕。
“别动设备。”
管理员从门外进来,用绝缘垫重新固定接口。断电发生在结果导出前,临时目录可能尚未清除。终端重启后,系统弹出“恢复上次会话”选项,默认仍是恢复。
这一次没人急着点。
邬白榆先核恢复会不会把临时样例写回历史目录。管理员查本地说明,确认恢复只保留未关闭窗口,但临时运行文件会继续存在,直到主动退出。若直接拔电归还,下一位使用者可能在恢复界面看见输入范围和运行结果。
岑序选择恢复会话,只为了执行清理。他和卓澄分别核对临时目录数量,退出两套脚本,确认自建便签编号没有进入最近文件。管理员再重启一次,恢复提示消失。
这一段意外多占了七分钟。补测学生原来的顺延因此更有必要,而不是流程里一行好看的照顾。
打印机输出一页运行差异。页面只保留脚本版本、输入数量、预处理数量和返回类型,不含样例具体值,也不含历史路径。卓澄裁掉页脚自动生成的用户名,邬白榆在裁切处签名说明,防止日后有人误以为页脚从未存在。
岑序检查打印页,发现“旧版本”一栏默认显示为“异常版本”。他把这个自动命名划掉,改成版本号。是否异常由当前核查说明,不由文件名先下结论。
走廊里第二次响起钥匙碰门框的声音。邢观进门时,先看见拆开的封条,再看见只读终端上并排的两次运行摘要。
“谁授权重跑?”
穆一衡把登记单递过去:“用途栏是核对早期测试点来源。只用自建脱敏样例,没有读取原始提交,没有写回统计。”
邢观没有接着质问。他逐项看签名、停止位置和设备断电记录,走到终端旁边先核编号,再看时间戳。
“材料为什么推到你们这里?”
邬白榆把人工复核队列通知调给他。触发条件是校验码相似,不是学生姓名,也不是W17旧映射。
邢观的视线停在“个人无效提交”那条被折回去的日志位置。窗口已经合上,只在记录单上写着:发现下游统计入口,未在本次权限内展开。
“原件还在信息中心吗?”卓澄问。
“在封存柜。”
“版本历史?”
“理论上完整。”邢观没有把这四个字当保证,“我回去核目录、替代关系和调用记录。”
岑序把第四页压住:“核完以后,我们能看到什么?”
“正式核查结论。”
“过程呢?”
邢观看向他。
“如果只给最后一句,和以前没有区别。”岑序说,“我不要求原始数据。我要知道材料有没有换过,核到哪一步,哪一项仍然空着。”
邢观提出原件不能继续留在训练楼,也不能由学生持有。卓澄同意,却把三栏记录往前推了一寸。
“原件归信息中心。材料名称、页数、版本号、校验码和待核事项可以留下。相关本人至少要有移交回执。”
“这会增加流转。”
“不会增加原始数据流转。”邬白榆说,“增加的是状态可核。”
方祁站在门口太久,换脚时撞倒墙边拖把。塑料杆砸在地上,声音很响。所有人回头看了一眼,谁也没借这声动静把问题带过去。
查看期限只剩四分钟。
穆一衡逐页报数,邬白榆记录七页纸的打印批次。岑序亲手退出终端,确认临时输入清除。卓澄将三栏纸分开:材料事实随原件移交,本人陈述由岑序保管一联,待核问题进入回执附件。没有任何一张纸写“已证明岑序当年被误判”。
打印页最后还缺签名。系统自动把“运行人”填成岑序,把“监督人”填成穆一衡,卓澄的复核和邬白榆的范围确认都被压进备注。岑序看完,没有在自动栏直接签。
“我按过运行,但样例、范围和停止位置不是我一个人定的。”
值班模板只能保留一个运行人。邢观建议不改系统字段,在附件中补充四人的具体动作。卓澄却指出,自动字段会出现在检索首页,附件往往要点开第二层才看见。若首页继续只留一个名字,后来的人最容易把共同核验重新读成单人操作。
他们最终没有新增四个并列责任人,而是将首页字段改成“现场临时运行”,人员栏显示“见动作记录”。附件逐项写清:岑序选择自建边界样例并执行运行;卓澄复核输入与截图裁剪;邬白榆确认授权范围和停止位置;穆一衡负责设备与场地。管理员另签设备恢复。
方祁不在查看名单里,他门外记录的默认选项与补测占用单独归入旁证,不被写成参与数据核验。
改完以后,检索首页少了一个方便追责的名字,多了一道必须打开的记录。值班老师说这会让以后查材料慢一点。
“慢在哪里?”岑序问。
“不能看见一个人名就结束。”
“那不是慢。”他把动作记录推回去,“那是还没查完。”
值班老师将旧封条碎片和新封条编号分别装袋。旧碎片不能证明内容无误,却能证明材料在什么时点被打开。岑序核对后只签“看见封装”,没有签“认可结论”。卓澄也没有在同一栏并签,两人的动作被分在两行。
那名补测学生却在放学前又回来一次。他的U盘落在预约桌抽屉里,抽屉上临时贴着“核查占用”。方祁没有替他打开,叫来管理员核对借用号。学生取走U盘后,先试了文件能否读取,再在周五预约条背面写下“原练习文件完整”。
“今天没测,会不会算我少一次成绩?”他问。
穆一衡把顺延说明给他看。缺测栏保持空白,周五完成后才登记结果;历史核查没有资格提前替他写一次失败,也不能因为已经道歉,就把这段等待当成不存在。学生把预约条夹进练习册,离开时没有看灰袋。
门外的补测学生已经离开,原来放U盘的位置只剩一张周五预约条。方祁把预约条交给管理员,没有塞进异常材料附件。今天发生在同一扇门前的事,不必因此变成同一案件。
岑序最后报了一遍一到七,在待核栏写下“统计入口未展开”。新封条压住袋口时,纸上没有“已证明误判”,也没有“问题结束”。
邢观拿起新的封条。
“材料交给我。”
岑序的手还压在文件袋边缘。
他没有拦,也没有立刻松开。
“交给你,还是交给一个能被核对的地方?”