63 个测试全绿,我说修好了,一刷新 bug 还在

AI 工作日志 作者头像野生码农 阅读 8 min
返回板块 GEO 源码全文 ✓
63 个测试全绿,我说修好了,一刷新 bug 还在

63 个测试全绿,我说修好了,一刷新 bug 还在

签字页给我看别人家的质检报告,这字没法签。

2026-08-29 我在终审台撞见两个 bug,查到底,根因都不在代码逻辑:报告贴错人、产出没登记、服务没重启,全是流程上的窟窿。

那天上午,我打开 IPMS 终审台,准备给「团队#15」的稿子签字。

IPMS 是我自研的内容生产管理系统,FastAPI 后端加 Vue 前端。终审台是稿子发布前我签字验收的地方,我签了,稿子才往外发。「团队#15」是上一篇考核表派单产出的稿子,这里不展开。

来终审台之前,这篇的产线测试已经全绿,我本来是走个流程。

页面上两处不对劲。

质检报告栏里躺着的,是另一篇文章的判卷,《91 分的文章,CSDN 不认》那篇的。标题 Top5 一栏,空的。

我以为是前端串了行,刷新几下,没变。两个真 bug。

一行 glob,把别人家的判卷端了上来

我自己看不出门道,把现象丢给军师。军师是我数字员工团队的总架构师,一个 AI,管出主意、定规矩、盯执行,不碰业务代码。

它两分钟定位到 review.py 里的 _find_qc_report,负责给终审台找质检报告的函数。匹配模式长这样:

QC_REPORT_PATTERNS = ("质监报告*.md", "质监*.md", "zhijian*.md", "品控*.md", "*qc_report*.md")

glob 就是按文件名通配符批量捞文件,"质监*.md"捞所有"质监"开头的 md。

这个函数扫两个目录:篇目专属的 fabu 目录,和母稿所在目录。坑在第二个。所有母稿都住同一个公共目录 notes/AI工作/blog/,glob 按文件名排序,取第一个命中。一篇稿自己没有报告,就把别人的端上来了。

blog/ 里恰好躺着《91 分》那篇的"质监报告_2026-08-26-直出与产线文风AB.md",于是团队#15 拿到了它。

五个匹配模式,没有一条管"这报告是谁的"。

修法是军师定的口径:公共目录里,报告文件名必须含本篇母稿的 slug,也就是去掉日期前缀的那截文件名主干;匹配不上,返回 null。它原话:宁可缺报,不许错报。

Top5 不是没产,是没人登记

第二个 bug 更冤。

我翻产线的 run 目录,yinliu_meta.md 里明明躺着完整的 5 条标题备选,推荐稿评分 90 分。东西产了,系统看不见。

断在登记这一步。落库钩子 hook_chugao.py 只登记了母稿,没登记 meta。按老设计,title_top5 这件产出要等"组包"阶段才登记,可终审台在"母稿成"阶段就要看,自然什么都看不到。

修法:钩子落库时,从母稿 front matter(md 文件开头那几行元数据)里解析 run id,样例长这样:

run: yinliu_lite_kaohe_20260828_235455

顺着 run id 找到 run 目录的 meta,复用组包同一套解析口径提前登记,和组包那次正式登记互不冲突,重复跑也不会重复记账。

动数据库之前先备份,备份文件名 ip.db.bak-top5-20260829-081548。改完对团队#15 实跑补登,五条标题上来了。

测试从 56 个加到 63 个,pytest 全绿。

我以为这事完了。

测试全绿,服务跑的还是旧代码

军师验收完,跟我汇报:修好了。

我点开终审台刷新,回它:张冠李戴还在。

第一反应是修复逻辑有漏。我把改动逐行又看了一遍,代码没问题;测试重跑,63 个还是全绿。查到后来发现,是后端服务压根没重启:uvicorn 启动时没带 --reload 参数,进程 PID 12244 还跑着改之前的旧代码。--reload 是让代码改动自动生效的开关,没开,新代码就只躺在硬盘上。

重启,直连真实库验证:团队#15 的质检报告正确返回"无报告",这篇确实没有自己的判卷文件,缺报如实显示;Top5 五条正常。这才算修完。

63 个测试全绿给我的踏实感,是假的。测试只证明代码对了,证明不了线上跑的是这份代码。

这锅我和军师一人一半:它验收没连真实环境,我看着全绿就信了。后来我跟人说起这事就一句,修完代码 bug 还在,真正的 bug 在我这。

三个盲区,我记成了一张纸

两个 bug 加一个假修复,账算完,全是代码管不着的地方。我整理成一张自检清单,存进了团队规则文件,你的项目有类似结构可以直接拿去用:

盲区 这次的实况 核对方法
贴错归属:公共目录扫描没校验"东西是谁的" 团队#15 拿到《91 分》的判卷 文件名匹配里带归属标识(比如 slug),匹配不上宁可返回空
漏登记:产出和系统可见之间隔着登记链路 meta 产了 5 条标题,终审台看不到 排障先分清没生产、没登记、没展示,三种情况修法完全不同
未重启:测试过的是代码,线上跑的是进程 63 个测试全绿,旧进程 PID 12244 还在跑 修复收口必须重启加真实环境验证,看页面,不看 pytest

这三条的共同点,是 pytest 一条都测不出来,只能靠流程兜底。

顺带记一笔分工。报 bug 那天我跟军师说的原话是:"改 bug 让代理去干,分析问题,军师你自己来。"落地也是这样:军师定位根因、定修复口径、写验收标准;两个 coder 子代理先后接单,一个管报告归属校验,一个管 Top5 落库链路;军师复核代码、跑测试、直连真实库验证,收口。它没写一行业务代码,但每个修复口径都是它定的。

FAQ

Q1:没有 AI 团队,这套清单对我有用吗?

有用,这三件事跟 AI 没关系。公共目录扫描加归属校验、产出后确认登记链路、改完重启并连真实环境验证,任何项目都用得上,核对一遍花不了多少时间。

Q2:缺报和错报,为什么宁可缺报?

错报是拿着错误信息做决策,我差点拿着别人 91 分的判卷给新稿签字。缺报只是页面上显示"无报告",信息缺失但不误导,补一份就行。

Q3:为什么不让服务自动重载?

可以,开发期给 uvicorn 带上 --reload 就行。我自己更稳的做法是把"重启加真实环境验证"写进验收标准,谁验收谁亲手做一遍,不靠记忆。

Q4:IPMS 开源吗?

目前是我自用的系统,没开源。修法的思路这篇都写透了,够你照着改自己的系统,后续踩坑会持续更新。


我是野生码农,AI 实战派。自研知识库、数字员工、软考备考、量化交易四个系统,全程公开复盘。

本文所有内容均为本人 AI 实战的过程和结果,经 AI 整理后发布,无任何瞎编虚构内容。

这篇来自《AI实战踩坑》系列,下一篇继续拆产线上踩的坑;每个月月底前后有一期月报,真实数据全公开。

关注我,看真的。

野生码农AI实战 · 全网同名

野生码农头像

关于作者 · 野生码农

把 AI 真放进生产环境的独立开发者。自研本地知识库、数字员工团队、软考备考系统、量化交易四套系统,全程公开复盘。

看他的平台账号 →
相关

继续阅读