![]()
钻戒递到桌前时,陈砚正握着遥控器,准备播放交付复盘。许知微伸出的左手上,还留着昨夜摘下婚戒的浅痕。
陆承单膝跪在他对面,仰头笑得体面:“知微,三年了,我不想再让你躲在任何人身后。”
四周的同事举起手机,主持人把背景音乐推到最高,镜头正好对准那枚亮得刺眼的钻戒。
许知微看了陈砚一眼,嘴角仍挂着笑。陈砚还握着遥控器,她的手却缓慢伸了出去。戒指套上她无名指时,掌声像一堵墙压过来。
陈砚按下暂停键,站了起来。他端起桌上的酒杯,隔着半张圆桌看向两个人。
“祝二位早生贵子。”
掌声骤然断掉,音乐还在播放,屏幕上的彩带停在半空,像一场被按住的闹剧。
许知微脸上的笑僵了片刻,随即压低声音:“陈砚,坐下,我们回家再解释。”
“解释什么?”他看着她左手上的戒指,“解释你为什么没有否认,还是解释我该坐在哪一桌?”
陆承慢慢站直,脸色第一次变了:“你们认识?”
陈砚没有回答,只把自己的左手放在桌面上。婚戒昨晚被许知微收进抽屉,留下的白痕比戒指更清楚。
有人倒吸一口凉气,摄影师下意识放低了手机。主持人攥着话筒,连祝福词都忘了接下去。
许知微转过身,声音仍然很轻:“别在公司面前闹。”
“我没有闹。”陈砚把酒杯放回桌面,“我只是确认一件事。”
他看着她,一字一顿地问:“许知微,我是不是你的丈夫?”
她的睫毛颤了一下,没有立即回答。沉默比任何承认都更快传遍了整张桌子。
陆承猛地看向她:“你不是说已经处理完了吗?”
这句话落下,连最远处的同事都听见了。许知微的脸色变白,抬手想拦住他。
“陆承!”
“你明明告诉我,你和他只差一份手续。”陆承攥紧戒指盒,声音失去刚才的温柔,“你说你会处理。”
许知微咬住嘴唇:“我说的是我会想办法,不代表你可以——”
“那你为什么还没处理完?”陆承打断她,像终于发现自己也站在被欺骗的位置上。
陈砚看着他们争执,没有追问谁更爱谁,也没有问这场求婚准备了多久。那两件事已经不值得他再浪费一句话。
他转身走向舞台,把遥控器重新握紧。大屏幕上,交付复盘的第一页已经亮起。
页面底部有一行黑色小字:上线负责人陈砚,验收保证人陈砚。
“这份保证页是谁提交的?”他举起话筒,声音传遍宴会厅,“我没有提交过。”
老板周启明从主桌起身,快步走来:“陈砚,今天是庆功宴,技术细节会后再说。”
“庆功的依据就是这份页面。”陈砚指向屏幕,“如果我没有提交,它就不该拿来替任何人庆功。”
许知微拎着裙摆走到台下,脸上已经没有半点求婚时的笑意:“你先把话筒给我,客户和领导都在。”
“客户更应该知道保证来自谁。”
陆承立刻接过话:“陈砚,你是不是因为私人关系受刺激,故意在这里否定项目成果?”
陈砚看向他:“你说我提交过保证页,那就把原始记录投出来。”
陆承的表情一滞,很快转向老板:“周总,先切下一页,别让无关内容影响庆功。”
“先切屏。”周启明沉下脸,“陈砚,把遥控器交给我。”
陈砚没有松手,按下下一页。屏幕上出现一段验收结论,写着系统已完成全面可用验证。
乔宁坐在靠墙的位置,看到那行字后立刻抬头。她打开手机,迅速翻出测试记录,眉头越皱越紧。
“全面可用?”陈砚问,“哪一版做的验证?”
没人回答。背景音乐终于停了,服务员端着酒站在门边,不敢再往前一步。
陈砚把话筒贴近嘴边:“今晚这场庆功,如果靠一份我没提交过的保证页成立,那我现在撤回自己的名字。”
周启明伸手去拿遥控器:“你没有权限在这里撤回公司文件。”
“那就更说明这不是我的提交。”陈砚侧身避开他的手,“请把原始版本投出来。”
许知微走到台边,低声说:“陈砚,你一定要把事情做绝吗?”
“事情不是我做绝的。”他看着她,“是你把我的名字留在了上面。”
台下有人开始低声议论,陆承则拿出手机拨电话,像想先把某个消息压下去。
乔宁从人群里站起来:“我有测试环境的版本记录,但不确定能不能证明线上文件被改过。”
“先发给我。”陈砚说。
她没有走上台,只把记录发进项目群,并附上时间戳:“测试版只允许限定试运行,未出具全面可用结论。”
屏幕右下角不断跳出消息提示,周启明的脸色越来越难看。
陆承盯着那行字,转头对许知微说:“你不是说他不会公开吗?”
许知微没有回应。陈砚将话筒放回支架,按住遥控器,停在那张有问题的保证页前。
“今晚的祝福先到这里。”他说,“接下来,谁改了这份文件,谁就站出来。”
周启明几步走上舞台,手掌压住遥控器:“陈砚,把设备交出来。”
“原始文件还没核对。”陈砚没有松手,“现在切走,明天所有人只会记得这份假保证。”
“你已经把私人矛盾带进项目了。”周启明压低声音,“客户还在场,别逼公司替你收拾。”
陈砚看向台下:“我要求保留证据,怎么就成了私人矛盾?”
宴会厅里没人再说话。许知微站在舞台边,手上的钻戒被灯光照得发冷。
周启明最终用力抽走遥控器,转身对主持人说:“先结束直播,祝福画面全部撤掉。”
主持人如获大赦,赶紧关掉摄影设备。刚才准备上传的三人同框被停在未发布状态。
陆承却拦住摄影师:“不用删,刚才只是求婚花絮,留着也没关系。”
“删掉。”许知微第一次厉声开口。
陆承看了她一眼,手指停在半空,终于没有再阻拦。
周启明把遥控器交给助理,随后指向陈砚:“你现在不是上线负责人了,交付由陆承接手。”
陈砚问:“负责人撤了,保证页上的名字呢?”
“先把客户观感稳住。”
“也就是说,责任保留,权限撤掉?”
周启明没有回答。遥控器已被拿走,大屏幕上的保证页却还写着陈砚的名字。
陈砚从桌上拿起自己的手机,拍下大屏幕上的保证页和版本号。乔宁站在台下,迅速把另一份测试记录转给他。
“你看这里。”她说,“测试版本是3.8.14,宴会屏幕显示的是3.8.17。”
陈砚放大页面,看到右下角的提交人栏,确实写着他的名字。
“3.8.17是谁编译的?”
乔宁摇头:“我只负责测试,编译权限在发布组和产品负责人手里。”
许知微走近一步:“现在最重要的是客户观感,不是追着一串权限找人。”
陈砚把手机递到她面前:“你确认这份全面可用结论,是在3.8.17上完成的吗?”
她没有接手机,只说:“项目结果不会因为你今晚的情绪改变。”
“我问的是版本,不是结果。”
许知微的目光躲开了。陆承站在她身后,刚才的惊慌已经变成了戒备。
周启明拿起话筒,对还没离席的客户代表笑道:“技术团队内部有些误会,项目已经按计划完成验收。”
陈砚立即打断:“周总,验收保证页是未经我确认的文件。”
周岚坐在最后一桌,合上手里的菜单:“那就请把原始验收记录给我。”
周启明的笑停住:“周总监,今晚不适合——”
“我只问记录。”周岚看向陈砚,“如果你说没有确认,就保留当前页面,明天给我完整版本链。”
陈砚点头:“可以。”
许知微皱眉:“周岚,客户已经接受结果了。”
“客户接受的是可复现结果,不是宴会上的一句话。”周岚答道。
周启明的脸色彻底沉下来:“陈砚,交接。”
陈砚回到座位,拿起工作电脑,拔下电源线和加密钥匙,放进包里。
乔宁低声问:“你真的要交?”
“权限被收走,电脑就不能继续留在我手里。”他看着她,“但交接必须写清楚时间和状态。”
他在会议室临时打印的交接单上写下:当前版本3.8.17,保证页未由本人提交,原始测试结论待核验。
周启明扫了一眼:“这些话会影响项目。”
“它们只会影响错误的说法。”
许知微站在门口,像是终于等到没人围观,低声说:“你非要这样,让所有人看我的笑话吗?”
陈砚收起签字笔:“今晚被安排在镜头前的人不是只有你。”
她怔住:“我说过回家会解释。”
“我现在不需要解释求婚。”陈砚把交接单递给助理,“我只需要证明没有替这份结论背书。”
陆承从旁边走过来:“你要是继续闹,客户会认为你报复团队。”
“那就把现场验证拿出来。”
“你已经不是负责人。”
“所以我没有继续操作,只要求保存记录。”
陆承被堵得说不出话,许知微却盯着陈砚:“你真的不肯顾全大局?”
“大局不是把我的名字留在错误文件上。”
宴会在一片低声议论中散场。许知微没有再追上来,陆承也没有送她离开。
陈砚把交接单的回执拍照存档,随后将工作电脑交给助理,拿走自己的充电器。
凌晨零点十七分,乔宁在项目群里发出正式异常说明:发布版本与测试版本不一致,全面可用结论缺少对应复验记录。
几乎同时,群里跳出一条设备告警。正在客户预生产环境运行的节点,开始反复断开连接。
陆承回复得很快:“先别扩大问题,按重启流程处理。”
乔宁没有执行,只问:“重启会覆盖现场日志,是否确认?”
陈砚看着那句话,手指停在屏幕上。
周启明随即在群里发令:“所有人停止讨论,明早统一口径。”
陈砚没有回复口径两个字。他把告警截图转发给周岚,并注明:当前不建议重启,需先保留故障样本。
周岚几分钟后回了消息:“明早八点,客户现场复验。请你带上能证明版本差异的材料。”
陈砚看着左手的婚戒白痕,关掉手机屏幕。明早八点,他得带着版本差异记录去客户现场,而保证页上还留着他的名字。
早上七点四十,陈砚赶到客户机房门口,手里只有一份打印的版本差异记录和周岚发来的正式邀请。
陆承已经站在那里,身后跟着两名发布组员工。他抬手挡住门:“离岗人员不得介入现场。”
陈砚把邀请函递过去:“周岚安排我参加复验。”
陆承扫了一眼,没有接:“你现在不负责上线,进去也只能制造混乱。”
“那就让现场负责人确认。”陈砚侧身看向门禁旁的客户人员,“我只提出隔离建议,不操作内部系统。”
陆承冷笑:“你昨晚已经把项目说成错误交付,今天还想回来抢功?”
陈砚没有与他争辩,指向机房里闪烁的红灯:“三号节点还在反复断开,先切断它和主集群的同步。”
“发布组会处理。”
“如果它继续把异常状态写回集群,重启会覆盖最有价值的故障日志。”
门内的周岚听到声音,快步走出来:“让他进来。”
陆承皱眉:“周总,他已经被撤掉上线负责人身份。”
“我邀请的是能说明版本差异的人。”周岚接过陈砚手里的文件,“客户现场由我负责。”
陈砚进门后没有碰键盘,先让值守工程师拍下三号节点的状态和时间。
“把同步链路断开,只保留本地日志。”他说,“其他节点维持原状态,不要批量重启。”
值守工程师看向周岚,得到允许后立刻执行。三号节点的告警仍在跳,但没有继续扩散。
陆承站在旁边:“这只是暂时隔离,不能证明版本有问题。”
“所以要保留样本。”陈砚打开打印记录,“3.8.14测试版没有这个断连机制,3.8.17新增了自动回写。”
许知微赶到机房时,陈砚正蹲在设备旁查看指示灯。她摘下墨镜,第一句话就是:“你为什么还要追?”
周岚转头看她:“客户要求复验,他是受邀人员。”
许知微压低声音:“陈砚,你只负责恢复,不要再追问变更是谁下的。”
陈砚站起身:“恢复之前,必须保留故障样本。”
“现在最重要的是让系统恢复。”
“恢复后样本被覆盖,谁都无法说明它为什么发生。”
许知微看向周岚:“这是技术争议,不该影响客户上线窗口。”
周岚把文件翻到最后一页:“客户给你的不是争议,是一个复验窗口。陈砚的要求合理。”
许知微的手指收紧,钻戒在冷白灯下轻轻一闪。
陆承走到她身边:“周总,我们可以先按发布组方案重启,再补采集。”
陈砚立即说:“不能。故障一旦重启,自动回写会清掉断连前的缓存状态。”
值守工程师迟疑地看向屏幕:“目前缓存还在,但只保留一台设备完整。”
周岚问:“能否先复制出来?”
“可以,但需要隔离设备继续保持现状。”陈砚回答。
陆承不耐烦地说:“客户只给我们几个小时,不是让你们做实验。”
陈砚转向他:“正因为只剩几个小时,才不能把唯一样本重启掉。”
许知微沉默片刻,对周岚说:“如果先处理三号节点,其他设备的复验会被推迟。”
“那就用备用设备。”周岚回答,“原集群保持封存。”
技术人员推来一台备用设备,型号与线上节点相同,但还没有接入生产数据。
陈砚检查完固件版本,发现备用设备预装的是3.8.14。
“这台不能直接当最终结果。”他说,“先用原测试包跑基线,再换3.8.17复现。”
陆承立即反对:“我们没有时间按你的流程重新搭建。”
周岚看着他:“那你给出一套能保留证据的替代流程。”
陆承张了张嘴,没有说出答案。
陈砚从包里取出自己的记录本,在设备标签旁写下时间、版本和初始状态。
许知微盯着他的动作:“你连这个都要记?”
“以后每个人都会说自己记得不一样。”他没有抬头,“现在写下来,才不用靠谁的记忆负责。”
周岚让现场人员为备用设备拍照,并由双方代表确认封条完好。
第一轮基线测试开始后,设备连续运行了二十分钟,没有出现断连。
陆承看着计时器:“这只能说明测试版没问题,不能证明发布版一定有问题。”
“那就换发布版。”陈砚说。
安装3.8.17时,他要求值守人员录下完整操作过程,并让陆承确认包的校验值。
陆承犹豫了几秒,还是在记录表上签下名字。
许知微低声说:“你满意了?所有人都在等你证明自己没错。”
陈砚看着她:“我不是来证明自己没错,是来证明设备在什么条件下出错。”
发布版启动后,系统先保持稳定。陆承露出一点放松的笑,仿佛昨晚的告警只是偶然。
第五分钟,备用设备突然断开,状态灯由绿转红,随后日志里出现连续回写失败。
机房里有人低声骂了一句。周岚立即让人停止下一步操作,不准拔电源。
陈砚指向屏幕:“记录时间,保留当前缓存。把三号节点的封存日志和备用设备对照。”
值守工程师按他的要求导出日志,两份记录在触发条件处出现相同字段。
陆承脸色发白:“这可能是环境差异。”
“所以还要做第二次复现。”陈砚说,“但不能再动三号节点。”
周岚点头:“客户保留复验窗口,下午继续。今天先封存现有数据。”
许知微急声道:“如果下午才继续,全面上线会延期。”
“延期总比把故障带进生产环境好。”周岚看着她,“产品负责人应该比任何人都清楚这一点。”
许知微没有再说话。她看向陈砚,像想从他脸上找到一点旧日的退让。
陈砚合上记录本:“我会把复现过程交给客户,但不会替任何未经验证的版本签字。”
陆承咬牙:“你这是借客户的手报复公司。”
周岚冷冷打断:“客户只看设备和记录,不替谁处理婚姻。”
这句话让机房里彻底安静下来。陈砚把封存编号拍照发进项目群,随后退出了原来的发布权限。
乔宁在群里回复:“已收到现场样本。按照日志,异常由3.8.17新增回写机制触发。”
周启明很快发来消息,要求陈砚停止对外发送任何技术结论。
陈砚没有删除已发出的记录,只把客户确认的复验时间补进群公告。
周岚走到他身旁:“下午复验由客户主持,你可以继续参加,但不能代表公司承诺上线。”
“我明白。”
“如果有人要求你删记录,直接告诉我。”
陈砚点头,望向被封存的三号节点。那台设备仍在红灯下保持沉默,却已经替他说出了第一句完整的证词。
上午八点,客户会议室的玻璃门半掩着,周岚已经让人把三号节点的封存记录投到大屏幕上。陈砚和乔宁坐在设备两侧,没有人再碰那台红灯闪烁的机器。
备用设备上的3.8.17仍保持运行,日志却不断出现回写失败。每一次断连都发生在相同的重试间隔,像有人按着秒表重复敲门。
“先不要解释原因。”周岚抬手制止陆承开口,“让两个版本接受完全相同的输入。”
客户工程师按照陈砚写出的步骤,向备用设备发送连续请求。旧版3.8.14完成第一次重试后恢复连接,新版却在第二次重试时卡死。
乔宁盯着两块屏幕,把时间点逐一标进表格:“输入相同,网络延迟相同,设备型号也相同。”
陆承站在会议桌另一端:“客户环境和测试环境毕竟不一样,不能仅凭一次结果下结论。”
陈砚没有看他:“所以继续做第二轮,增加断开后立即恢复的场景。”
周岚点头,客户工程师重新清空测试缓存,将两台设备放在同一交换机下。
第二轮开始不到三分钟,新版再次断开。旧版在短暂延迟后恢复,日志里留下完整的重试次数和返回码。
陈砚指向新版日志中间的一行:“这里被直接跳过了。”
乔宁放大屏幕:“重试保护的计数器没有递增,异常回写直接进入了下一步。”
客户工程师调出代码差异包,发现3.8.17删掉了旧版的保护分支,新增了一个不等待确认的快速回写。
陆承的声音发紧:“这是为了赶上客户窗口做的性能优化。”
周岚转头问:“谁批准的?”
陆承没有立即回答,目光落在许知微身上。她今天没有戴昨晚那枚钻戒,左手空空地放在桌边。
许知微接过话:“当时项目进度已经落后,客户要求提前看到完整效果,团队判断可以先用快速回写。”
陈砚问:“风险意见呢?”
“风险意见只是测试阶段的建议。”
乔宁抬头:“我写的是高风险,不是建议优化。”
会议室里安静了一瞬。乔宁把原始测试报告投出来,红色标注清楚写着:禁止进入全面上线流程。
周岚按下暂停键:“这份报告提交给谁?”
“产品、发布组和项目负责人。”乔宁回答,“我还在项目群里提醒过。”
许知微的眼神微微一变:“那次提醒没有形成正式审批。”
“没有正式审批,所以更不能当成通过。”乔宁说。
陆承往前一步:“现在争论措辞没有意义,先把旧版换回来,客户可以继续复验。”
陈砚转过身:“换回旧版之前,必须保存两次复现的原始记录。”
“你要让客户看着系统继续报错?”
“客户已经看见了。现在消失的只能是记录,不能是故障。”
陆承低声道:“陈砚,项目合同是280万元,真延期了,所有人的奖金和职位都要受影响。”
“所以更不能用一台没验证的版本去赌。”
周岚让客户工程师复制日志,并将三号节点与备用设备的样本一并封存。谁都不能删除,谁也不能用新文件覆盖旧文件。
陆承见劝说无效,趁众人离开会议室取文件时,单独拦住陈砚。
“你想要什么?”他问,“职位、解释,还是许知微当众承认你们的关系?”
陈砚合上笔记本:“我只要现场记录留在客户手里。”
“旧版换回去,故障就不会继续扩大。你回公司,我可以让周总恢复你的上线权限。”
“恢复权限之前,先把我的名字从错误保证页上拿掉。”
陆承的笑意僵住:“你现在把事情做得这么绝,回去也不会有人欢迎你。”
“那就不回去。”陈砚把封存编号拍照发给周岚,“但你不能拿职位换我删掉证据。”
陆承看着那张照片,压低声音:“许知微已经说过,你知道风险,却默认我们往前推。”
陈砚的手指停了一下。昨夜,她要他回家听解释;此刻,陆承却说她把风险推给了他。“她什么时候说的?”
“很快你就会知道。”陆承转身离开,鞋跟在走廊上敲出急促的声响。
陈砚回到会议室时,许知微正站在窗边。乔宁被周岚叫去核对授权包,她终于有了单独说话的机会。
“现在还来得及。”陈砚说,“把你知道的版本、时间和审批经过写清楚,客户会按记录判断,不按谁的婚姻判断。”
许知微背对着他:“你是在提醒我自保,还是逼我替你作证?”
“我在提醒你,说明一旦提交,就会成为正式材料。”
“你认为我不该保护项目?”
“保护项目和替错误版本找责任人,不是一回事。”
她慢慢转过身:“你从来都这样。出了问题就只看记录,好像人做过的选择都不算数。”
“选择当然算数。”陈砚看着她,“所以我才让你现在写。”
许知微攥紧手机,眼里第一次有了明显的疲惫:“你想让我承认,是我放行的?”
“我想让你写真实发生过的事。”
周岚推门进来,手里拿着客户授权单:“对照测试会保留,下午继续复验。公司需要在一小时内提交初步说明。”
许知微接过文件,坐到会议桌前。她没有看陈砚,只快速浏览了故障时间和设备编号。
“说明里写,技术团队依据项目负责人陈砚的口头确认,采用了快速回写方案。”
陈砚抬眼:“谁告诉你的?”
“发布组的记录。”
“那就把完整记录一起交出来。”
“完整记录现在还在整理。”
周岚皱眉:“没有完整记录,就不能写成确定事实。”
许知微合上文件:“客户需要一个明确的责任联系人。”
“责任联系人不是口头推测。”陈砚说。
她没有再回应,起身走进隔壁小会议室。玻璃门合上前,陈砚看见那份说明摊在她面前,末尾还没有签名。
许知微停顿了几秒,像是在等谁阻止。陈砚隔着玻璃看着她,没有动,只把手里的封存编号递给周岚。
她最终落笔,签名压在那句口头授意之后,墨水尚未干透,纸张已经被她推向门外。