十分钟后,供应商在电话里报出了一个简化的原因分类枚举(监管要求其会后以书面形式确认):
a.电源监测异常(poweranomaly)
b.策略校验失败(policyvalidationfail)
c.设备通信异常(devicemunicationerror)
d.安全风险触发(securitytrigger)
e.人工工单触发(manualticket)
监管问:“0218回滚属于哪一类?”
供应商答:“初步归类为b,策略校验失败。”
策略校验失败。
林昼看到这几个字,后背一阵发冷。策略校验失败意味着系统认为当前策略包(v3.1或v3.1-hotfix)不可信或不一致,于是回滚到稳定基线(v2.9)。这就与“转运前一天热修复覆盖”形成强关联:热修复可能引入了不一致,导致当夜校验失败而回滚。可“校验失败”也可能被人为制造:通过修改校验参数、植入不一致,让系统自动触发回滚,从而达到“旧版照做”的目的。
无论哪一种,关键都在“校验”本身:校验机制是否可被操控?谁有权修改?校验失败是否有详细日志?是否有校验哈希比对?是否能还原失败原因?
林昼没有让自己立刻奔向推断。他只把“b:策略校验失败”作为一个新的事实节点,写进内部表格:
*1418监管电话会议:供应商口头提供回滚原因分类枚举;0218回滚初步归类为b策略校验失败→待供应商书面确认
事实节点一旦写下,下一步就很自然:让它变成书面。
梁组长发:“监管要求供应商24小时内提交书面枚举与0218事件处置报告(脱敏)。供应商说可以提交枚举,但处置报告仍需内部审批。”
林昼回:“让他们审批,但必须有时间表与责任人。处置报告是合同义务,且涉及患者安全事件核查,拖延需记录。监管可注明:逾期将采取进一步措施。”
梁组长回:“监管已说。”
林昼补:“同时要他们提供‘策略校验失败’的定义说明(不含算法):校验对象是什么?校验结果输出字段有哪些?失败会生成哪些审计字段?例如校验哈希、策略包签名、校验模块版本。定义说明属于文档,不是秘密。”
梁组长回:“我加到追问清单。”
---
电话会议结束后的半小时,原医院与供应商的“技术说明”又更新了。
这次声明更谨慎,出现了一个新词:“策略一致性校验”。他们承认“回滚系一致性校验失败触发的自动化回退”,并强调“未涉及人为操作”。
“未涉及人为操作”是一句结论性话术,不提供证据。可声明里出现“一致性校验”四个字,反而给了林昼一个更明确的核对方向:一致性校验要比什么?比策略包签名、比配置哈希、比策略生效状态。如果比对失败,那失败的对象是什么?是策略包本身,还是现场设备的回执?如果是设备回执,那设备日志与运维日志之间是否存在时间差?如果时间差存在,是否意味着有人在关键窗口更改了配置?
更重要的是:一致性校验失败为何偏偏发生在转运当夜0218?而不是其他夜晚?如果系统长期稳定,为何这一次失败?要么是事件异常,要么是配置变化,要么是触发阈值改变。无论哪一种,都可以被日志核对。
林昼把声明截图封存,并给梁组长发:“他们承认一致性校验失败触发回滚,这是重要事实。下一步必须索要‘一致性校验失败’的最小证据:失败时间戳、失败对象类型(策略包签名配置哈希设备回执)、失败代码或错误分类字段。不给这些,‘未人为操作’只是口头结论。”
梁组长回:“监管会追问错误分类字段。”
林昼又加:“同时要求对v3.1-hotfix的变更摘要与签名证书链说明。既然说校验失败,可能与签名证书或策略包签名有关。把证书链与签名时间戳列出来,不是算法。”
梁组长回:“收到。”
---
傍晚五点,证人战线又起波澜。
护士长告诉法务:原医院有人在她家小区门口等她母亲,问她“什么时候回去签字”。这是越线了。不是停车场盯梢,不是短信威胁,是把压力投向家人。
法务当即报警备案,并建议护士长暂时不要回家,改由院方安排临时住宿。林昼听到这个消息时,手指一瞬间冰冷。他从不希望事情走到这一步。可他也明白,结构一旦受伤,就会用最小成本制造最大恐惧――恐惧会让证人崩溃,让证据链断。
他对护士长说:“你不要自责。越线是他们的问题,不是你的。你现在更要稳:任何接触都记录、都备案。你不用与他们争执,你只需要让他们每一次靠近都变成一条警方记录。”
护士长声音哽了一下:“我真的只是想救人,我没想得罪谁。”
林昼沉默两秒,回:“你救的不只是一个人。你救的是所有以后可能被‘回滚’当成耗材的人。你做的是对的。”
他说完这句话,立刻意识到自己差点越界――不是越界于情绪,而是越界于“道德叙事”。道德叙事会让人燃烧,但燃烧也会让人耗尽。他迅速补回制度语:“你按法务安排做。我们用制度保护你。”
护士长“嗯”了一声。
许景那边也被施压:内部复盘会改成“线上视频会议”,要求其必须参加。许景把会议链接截图发给林昼,问怎么办。林昼回:“拒绝参加,要求书面说明会议目的与记录方式,并声明你只接受监管或依法授权的询问。线上会议更危险,容易录音剪辑。”
许景回:“他们会说我不配合。”
林昼回:“配合不是参加任何会议。配合是按程序提供事实。你已经提供了封存陈述。你现在要做的是不让他们把你拖进他们的叙事剪辑里。”
---
晚上九点二十,监管将供应商口头枚举整理成会议纪要,发给供应商确认。供应商未立即确认,但监管在纪要中注明:若对方不确认,将视为默认其口头陈述内容,并记录拒绝确认行为。
拒绝确认,也是一条痕迹。
梁组长发来最后一条消息:“我们拿到今天最关键的一句话:0218回滚初步归类为b策略校验失败。供应商会后可能改口,但纪要已发出。明天重点拿书面枚举与错误分类字段。”
林昼回:“好。今晚把所有证人安全措施升级。对方会在‘校验失败’上做文章,也会在人的身上做文章。我们守住人,才能守住明天的字段。”
他放下手机,走到icu门口。父亲的波形仍稳,像一条平直的线穿过所有风暴。林昼看着那条线,忽然明白自己这些天做的每一件事,其实都在做同一件事:把一条看不见的线变成可见的线。
邮件头字段、验收报告版本号、回滚日志事件、原因枚举、策略校验失败――这些都是线。线越清晰,黑暗越难藏。
他在心里把今天定格成一句话:
“算法不给,枚举先拿;规则不开,合同先压。”
只要枚举到手,校验失败就不会只是一个词。它会变成一组可核对的错误码与字段。错误码一出现,谁改了策略包、谁做了热修复、谁触发了回滚,就不再能躲在“自动化应急”的背后。
自动化只是外衣。外衣之下,总有人穿着工牌,点过平板,签过回执。
林昼不会急着撕外衣。他会继续钉字段、钉编号、钉纪要、钉备案号。钉到他们不得不把“谁”说出来。_c