rate-my-server · 面向 API、worker 与数据管道的上线审查
跑通了,什么也没证明。
一切顺利的时候你的后端是好的。现在让它扛住重试、两个请求同时进来、依赖挂掉、重启,以及真实用户。五条证据通道各管各的,谁也顶替不了谁。
问题清单
BLOCKER · F-001一个租户能读到另一个租户的报告。私密数据到了不该到的人手里。
HIGH · F-003重复投递的 webhook 会把同一笔额度加两次。这个副作用上没有持久化的唯一性约束。
待验证
UNKNOWN · U-001备份是有,但从来没有真的恢复过一次。能不能恢复回来,没人证明过。
证据通道
范围
它到底审什么。
只审有产品后果的东西。风格偏好和时髦架构不算问题。
谁能看谁的东西:登录、对象归属、角色策略、一个租户会不会读到另一个租户的数据、密钥与隐私边界。
请求、任务、流、批处理答应了什么就得做到什么,包括「报告成功」是不是真的成功。
同一件事只做一次:事务、重试不会重复执行、唯一性、顺序、确认、重放与对账。
压力上来不连环崩:超时、重试预算、依赖挂了怎么办、限流、队列上限、过载时怎么挡回去。
关机、重启、上线、迁移、回滚、监控、备份、恢复,以及出事之后怎么办。
跨组件的完整旅程:请求 → 提交/outbox → 队列 → worker → 外部副作用。
装与不装
装上它之后,有什么变化。
一个称职的 agent 本来就会读你的后端代码,也会有意见。下面这些是只有装了它才会出现的行为。
两家客户用同一套系统。
没装它
它读一眼登录检查的代码,看到有,就说边界没问题。
装了它
它复现出登录成 Alpha 的人凭一个 ID 就读到了 Beta 的报告,原因是查询忘了按客户过滤;还留了一次正常读取做对照。
请求超时了,用户那边点了重试。
没装它
它建议你「加上幂等」作为最佳实践。
装了它
它复现出这一单其实已经做成、只是回话超时,然后展示重试把同一件事又做了第二次。
发版重启,正好有任务在跑。
没装它
没人问过那个任务会怎样:测试全绿、主路径健康,就当可以上生产了。
装了它
它复现出关机时一个正在跑的任务没退出来,一直卡在 processing 状态;再看启动恢复接不接得住这个状态,但不宣称任何它没亲眼看到的数据丢失。
别家跳过的一步
那修复本身,谁来审?
多数审查列完问题就结束了。要是接着动手修,先想清楚补丁是什么。它是项目里最新写的代码,为了赶紧关掉问题才写出来。它没有自己的测试,也没人读过。
修复的人不能给自己打分。
得换一个人来看。
一份 diff 不等于修好了。
每条问题都带一个验收测试。另一个人重现出原来的故障,又看着它不再发生,
这条才算 verified-fixed。
补丁本身也要被审。
复测的人还会把改动本身当成新代码,再审一遍。修复自己带出来的毛病算新问题、新编号, 没解决之前这一批不算完。
什么时候停,看证据不看清单。
它只在三种情况下停:全部验过、遇到一个它说得出名字的阻碍、或者你明说剩下的风险你认了。最后这种会记成「你认了」,不会被悄悄写成「修好了」。
这个网站本身就是这么审的。第一轮问题修完之后,独立复测在那批补丁里又找出两个缺陷:一份公开可读的旧备份,和一个焦点进不了正文的跳转链接。两个都是修复过程带出来的,重跑原来的验收测试一个也发现不了。
怎么跑
开审之前,先问你两个设置。
它不会默默替你选最严的那档,也不会默默选最松的。
服务类型
按这个服务真正掌管什么来选
审查程度
从松到严五档:快速体检(默认,只查最要紧的几项)、严格审查(给小范围试用的标准)、 上线门禁(公开发布的标准)、真实收米档(要碰真钱或敏感数据)、生死档(受监管或者出事就致命)。
分数不能把硬闸门平均掉。
有些问题不管总分多好看都拦住发布。你说「这个我认了」,它也不会因此变成通过。
从快速体检起步。
它是默认档,因为完整档要贵好几倍。它查得少,但会告诉你哪些没查。
五个 skill
各审一层,共用一套证据合同。
每一个都是独立插件。只装你正要上线的那一层。
安装
一条命令,或者插件市场。
一个客户端选一种装法就行。第一遍只读,什么都不改;能碰什么,仍然由你自己的沙箱和授权弹窗说了算。
npx skills add AmsonntagChow/rate-my-server --skill rate-my-server
/plugin marketplace add AmsonntagChow/rate-my-server
codex plugin marketplace add AmsonntagChow/rate-my-server && codex plugin add rate-my-server@amsonntagchow-rate-my-server