总结会开始前,张强把报告摊在会议桌上,手指压住封面,像压住一项不容更改的决定。
林远刚坐下,就看见第一作者一栏换成了陈明,原本属于自己的名字被挪到了技术支持后面。
陈明低头看着封面,只问:“我排第几?”
“第一作者。”张强把签字笔推到他面前,“对外材料必须由项目负责人署名。”
林远没有碰那支笔,翻到验收条件页,脸色一点点沉了下去。
他写下的三条限制被整段删掉,只剩一句“系统满足上线要求”,连适用的测试环境也没有留下。
“专项性能测试是在隔离环境做的。”林远抬头说,“这页不能作为生产上线依据。”
张强靠在椅背上:“技术出问题,你负责;对外署名,陈明负责。团队安排就这样。”
陈明又问:“那我只需要在这里签字?”
“你负责把项目交出去。”张强看向林远,“林工,把条件页整理成客户能看懂的版本。”
林远把报告转过来,指着被删掉的段落:“客户需要看懂的不是结论,是结论成立的边界。”
张强的手指敲了两下桌面,会议室外已经传来会务催促的脚步声。
“今天要交付,别把简单事情复杂化。”他说,“这不是讨论署名的场合。”
林远打开电脑,进入评审系统,把当前文件另存为版本号R7。
他没有改动张强已经上传的材料,只在异议栏逐条写明测试环境、重试保护和验收前置条件。
最后一行,他勾选了“需保留原始限制说明”,并把删除前的页面作为附件上传。
张强看见屏幕上的提交提示,伸手按住了林远的鼠标:“你这是要把争议留在正式记录里?”
“材料马上要生效。”林远说,“我只要求记录事实发生过。”
陈明皱起眉:“有必要吗?客户又不看这些底层细节。”
“如果结果依赖这些细节,就必须让使用结果的人知道。”林远合上电脑,“否则签的是一句没有条件的保证。”
张强站起身,拿过自己的手机拨给会务:“报告按修改版发放,封面不用再换。”
电话挂断后,评审系统弹出新通知,提示异议已登记,并自动列入交付附件目录。
林远看见自己的文字出现在附件列表里,才把手从键盘上移开。
张强盯着那行记录,脸色终于变了:“谁允许你把它挂进去的?”
“系统按权限登记。”林远回答,“如果要删除,应由审批人留下理由。”
“你现在没有审批权限。”张强抽走桌上的文件,“去档案室,把旧版本和验收截图整理出来。”
林远看着他:“你是把我调离评审,还是让我继续为这份材料背书?”
“这是工作安排。”张强把笔塞回陈明手里,“别把岗位调整理解成针对你。”
陈明低头在封面旁写下自己的名字,笔尖停顿了一下,最终还是落了下去。
林远收起电脑,准备带走R7的提交回执,屏幕右下角忽然跳出红色提示。
系统提示:发布权限已被管理员张强撤销,当前账号不得提交上线申请。
第二天上午,林远带着档案交接单走进资料室,门外的验收准备已经开始,客户代表的车停在楼下。
他被调来整理档案,却仍保留着项目文档的查阅权限,只是所有发布和配置操作都被锁住了。
档案管理员把一只封存盒推给他:“这些是昨天的验收截图和导出记录,交接完要签收。”
林远先核对封条编号,再打开目录,没有要求调取任何生产原始数据。
几张截图排列得过分整齐,接口成功率、处理时延和订单完成数都呈现绿色。
他放大右下角的时间戳,发现截图间隔只有五分钟,恰好避开了重试队列最拥挤的时段。
客户还没签验收单,会议室里已经有人开始庆祝提前完成。
林远把截图目录复制到评审附件,不带走原文件,只新增一条比对说明。
他需要确认的不是截图是否真实,而是截图中的“成功”到底指接口返回,还是订单已经落库。
楼层广播响起时,许禾从值班区出来,手里还拿着没有喝完的咖啡。
林远叫住他:“我想请你按值班职责复核订单状态,不能私传生产数据。”
许禾停在门边:“你要查什么?”
“同一请求的返回成功和订单落库是否一致,再看重试保护当前是不是启用。”
许禾看了一眼档案盒:“如果要导出明细,我不能直接发给你。”
“不用导出。”林远递给他一张检查步骤,“按正式工单执行,只回填数量、时间段和配置版本。”
许禾接过纸,没有立刻答应:“这会不会被算成越权排查?”
“你只做值班范围内的健康检查。”林远说,“我只提供可复核的判断条件。”
许禾转身回到值班区,先在系统里开立工单,再将检查对象锁定为上午九点至十点的重试队列。
林远回到资料室,继续比对验收截图与配置清单,没有在记录里替自己辩解。
十分钟后,许禾发来第一条结果:接口层返回成功,但订单表出现相同外部流水号的两条记录。
林远立刻把时间段与截图时间对齐,发现重复记录从九点十七分开始增加。
许禾又发来一句:“当前配置里的保护开关是关闭状态,最近一次修改人显示为陈明。”
林远盯着那行字,没有问许禾是否看错,而是让他按同一工单重新查询配置历史。
复核结果很快回来,配置备注写着“沿用性能测试优化项”,变更说明却没有填写回归范围。
林远继续往前追,终于在旧方案库里看见熟悉的文件名:应急重试处理方案V2。
文件作者一栏是他,创建时间在项目立项前两个月,备注写明只能用于故障隔离和人工确认。
许禾问:“这是你写的?”
“是。”林远回答,“当时是为了让故障请求暂时脱离自动重试,等人工确认后再恢复。”
他没有要求同事删掉自己的名字,也没有把旧方案说成与自己无关。
“问题不在文件存在。”林远补充,“问题在于它被当成通用优化,却没有防误用提示。”
许禾继续检查运行参数,确认线上配置正是从这份旧方案复制出来的。
订单重复的数量仍在增加,值班屏幕上的绿色状态却没有变化。
林远把两份结果一起附到工单,注明接口返回成功不能证明订单实际落库。
档案管理员催他签收时,他只签了资料交接,没有在验收确认栏留下姓名。
楼下会务再次通知客户入场,许禾的工单状态变成“异常待处置”。
林远望着那行状态,知道自己已经无法发布修复,却仍能把下一步检查交到真正值班的人手里。
午后,事故会议临时改到大会议室,投影幕上仍挂着那张全部绿色的验收看板。
客户代表坐在周岚右侧,没有签字的验收单放在桌角,边缘被反复翻出了折痕。
张强先解释:“接口监控显示服务正常,订单异常可能来自历史数据。”
许禾把值班工单投到屏幕上:“九点十七分后,同一外部流水号出现重复落库,数量还在上升。”
周岚看向张强:“为什么验收截图没有显示这个状态?”
张强没有立即回答,只让会务把截图放大,试图强调接口成功率仍然是绿色。
林远坐在末席,面前放着R7异议回执和档案交接单,没有抢着发言。
张强忽然转向他:“这套重试设计最早是你做的,你先说明是不是原设计缺陷。”
林远抬眼:“先确认正在运行的配置,再讨论设计责任。”
“现在不是争论流程的时候。”张强说,“如果你确认方案有问题,服务恢复就由你签技术责任书。”
陈明坐在另一侧,手指不停摩挲着笔帽:“我只是按优化项关闭了一个影响演示速度的开关。”
许禾看了他一眼,没有插话,只把配置历史停在修改记录页。
林远问:“关闭前,是否做过回归检查?”
陈明的嘴唇动了动:“张总说当天要交付,测试窗口很短。”
张强立即打断:“项目节点是大家都知道的,不能把所有决定推给我。”
会议室里安静下来,屏幕上的重复订单曲线又向上抬了一格。
林远把刚刚整理的临时建议递给许禾:“暂停自动重试,保留人工确认队列,先阻断新增重复落库。”
许禾确认工单权限后执行,没有私下改生产参数,而是让值班审批链同步记录。
几分钟后,曲线停止上升,新增重复订单变成零,尚未处理的请求则停在待确认队列。
客户代表终于开口:“暂停后,已有订单还能查到吗?”
许禾回答:“已落库订单保留,待确认请求不再自动提交,恢复前需要逐条核验。”
周岚点头:“先保住数据,再查谁改了配置。”
张强的脸色变得难看,仍坚持说:“这只能证明原设计没有覆盖所有异常。”
林远打开审计页面,申请留存当前快照,包含账号状态、配置版本和操作时间。
张强皱眉:“留快照可以,但不要把内部权限问题扩大成个人责任。”
“快照只记录事实。”林远说,“是否构成责任由调查依据决定。”
快照生成后,审计时间线显示关闭保护开关的操作发生在林远账号被撤销发布权限之后。
陈明盯着屏幕:“这不代表就是我改的。”
林远没有接话,只让许禾核对操作终端、变更单和审批记录三处是否一致。
三处记录都指向陈明使用的项目账号,操作时间也落在他进入性能测试环境之后。
张强伸手合上文件:“即使是陈明操作,原作者也应该承担技术后果。”
周岚看向林远:“你来汇报目前能确认的事实。”
林远站起身,先看了一眼被暂停的订单曲线,然后对周岚说:“请先核验原始操作人。”
这九个字落下后,会议室里没人再把署名、操作和审批混成一个问题。
周岚示意他继续。林远没有替自己抹掉旧方案的缺陷,只按时间、账号和配置版本逐项拆开责任。
张强打断道:“要恢复服务,就得由原作者签下技术责任书。”
林远把签字页推回去:“我可以承担旧版方案缺少防误用提示的改进,不接受替未核验的操作签责。”
他随即把恢复预案交给许禾:先保留暂停状态,完成订单去重、配置回滚和人工抽检,再由值班负责人决定是否恢复。
许禾接过预案,在工单中补上执行人和复核人,周岚则要求会议纪要附上审计快照。
张强看着自己的责任链被一项项拆开,终于没有再要求林远当场签字。
尚未处理的请求仍堆在队列里,服务没有恢复,事故也没有被一句设计缺陷带过。
但新增重复订单已经停止,真正的操作记录也留在了所有人都能复核的文件里。
林远没有再看张强,只将手里的回执递给会务人员。
“请把审计快照、配置历史和原始工单放在同一屏,先标明各自的生成位置。”
周岚点头:“按他说的做。”
投影上的绿色看板被移到左侧,右侧出现三份文件的来源栏,分别写着监控系统、配置中心和值班工单。
张强皱眉:“事故会上没必要展示这么多后台记录,先把结论讲清楚。”
林远看向他:“结论如果脱离来源,就无法判断是谁在什么时候做了什么。”
三份来源记录还并列在屏幕上,陈明却拿起张强准备好的汇报稿,照着第一页念:“项目已完成性能验证,系统运行稳定,具备交付条件。”
周岚抬手打断:“什么条件?”
热门跟贴