ratemy.sh

rate-my-server · 面向 API、worker 与数据管道的上线审查

跑通了,什么也没证明。

一切顺利的时候你的后端是好的。现在让它扛住重试、两个请求同时进来、依赖挂掉、重启,以及真实用户。五条证据通道各管各的,谁也顶替不了谁。

审计 · F-014 目标:real-money ref: sha256:8c41…7ae0

问题清单

BLOCKER · F-001一个租户能读到另一个租户的报告。私密数据到了不该到的人手里。

HIGH · F-003重复投递的 webhook 会把同一笔额度加两次。这个副作用上没有持久化的唯一性约束。

待验证

UNKNOWN · U-001备份是有,但从来没有真的恢复过一次。能不能恢复回来,没人证明过。

证据通道

deterministic-checksPASS
critical-path-runtimeFAIL
security-and-isolationFAIL
concurrency-failure-capacityUNVERIFIED
operations-and-recoveryUNVERIFIED (恢复未验证)
最高安全档位:local-smoke
阻断闸门:cross-tenant-exposure, duplicate-irreversible-effect
NOT READY
这份判决样张里,五条证据通道分别是:确定性检查(契约、schema 和不变量的断言过没过)、 关键路径实跑(核心请求连同失败、重试、取消真的走过一遍没有)、 安全与隔离(登录、越权、租户边界有没有被真的试过)、 并发失败与容量(重复、竞态、依赖挂掉、过载扛不扛得住)、 运维与恢复(上线、迁移、回滚、备份恢复出了事靠不靠得住)。最高安全档位是它敢放行到哪一步, 五档从松到严是 local-smoke、team-staging、public-production、real-money、critical-service。

范围

它到底审什么。

只审有产品后果的东西。风格偏好和时髦架构不算问题。

·

谁能看谁的东西:登录、对象归属、角色策略、一个租户会不会读到另一个租户的数据、密钥与隐私边界。

·

请求、任务、流、批处理答应了什么就得做到什么,包括「报告成功」是不是真的成功。

·

同一件事只做一次:事务、重试不会重复执行、唯一性、顺序、确认、重放与对账。

·

压力上来不连环崩:超时、重试预算、依赖挂了怎么办、限流、队列上限、过载时怎么挡回去。

·

关机、重启、上线、迁移、回滚、监控、备份、恢复,以及出事之后怎么办。

·

跨组件的完整旅程:请求 → 提交/outbox → 队列 → worker → 外部副作用。

装与不装

装上它之后,有什么变化。

一个称职的 agent 本来就会读你的后端代码,也会有意见。下面这些是只有装了它才会出现的行为。

两家客户用同一套系统。

没装它

它读一眼登录检查的代码,看到有,就说边界没问题。

装了它

它复现出登录成 Alpha 的人凭一个 ID 就读到了 Beta 的报告,原因是查询忘了按客户过滤;还留了一次正常读取做对照。

请求超时了,用户那边点了重试。

没装它

它建议你「加上幂等」作为最佳实践。

装了它

它复现出这一单其实已经做成、只是回话超时,然后展示重试把同一件事又做了第二次。

发版重启,正好有任务在跑。

没装它

没人问过那个任务会怎样:测试全绿、主路径健康,就当可以上生产了。

装了它

它复现出关机时一个正在跑的任务没退出来,一直卡在 processing 状态;再看启动恢复接不接得住这个状态,但不宣称任何它没亲眼看到的数据丢失。

别家跳过的一步

那修复本身,谁来审?

多数审查列完问题就结束了。要是接着动手修,先想清楚补丁是什么。它是项目里最新写的代码,为了赶紧关掉问题才写出来。它没有自己的测试,也没人读过。

1

修复的人不能给自己打分。

得换一个人来看。

2

一份 diff 不等于修好了。

每条问题都带一个验收测试。另一个人重现出原来的故障,又看着它不再发生, 这条才算 verified-fixed

3

补丁本身也要被审。

复测的人还会把改动本身当成新代码,再审一遍。修复自己带出来的毛病算新问题、新编号, 没解决之前这一批不算完。

4

什么时候停,看证据不看清单。

它只在三种情况下停:全部验过、遇到一个它说得出名字的阻碍、或者你明说剩下的风险你认了。最后这种会记成「你认了」,不会被悄悄写成「修好了」。

这个网站本身就是这么审的。第一轮问题修完之后,独立复测在那批补丁里又找出两个缺陷:一份公开可读的旧备份,和一个焦点进不了正文的跳转链接。两个都是修复过程带出来的,重跑原来的验收测试一个也发现不了。

怎么跑

开审之前,先问你两个设置。

它不会默默替你选最严的那档,也不会默默选最松的。

1

服务类型

按这个服务真正掌管什么来选

2

审查程度

从松到严五档:快速体检(默认,只查最要紧的几项)、严格审查(给小范围试用的标准)、 上线门禁(公开发布的标准)、真实收米档(要碰真钱或敏感数据)、生死档(受监管或者出事就致命)。

§

分数不能把硬闸门平均掉。

有些问题不管总分多好看都拦住发布。你说「这个我认了」,它也不会因此变成通过。

§

从快速体检起步。

它是默认档,因为完整档要贵好几倍。它查得少,但会告诉你哪些没查。

安装

一条命令,或者插件市场。

一个客户端选一种装法就行。第一遍只读,什么都不改;能碰什么,仍然由你自己的沙箱和授权弹窗说了算。

任意 Skills 客户端 · 推荐
npx skills add AmsonntagChow/rate-my-server --skill rate-my-server
Claude Code
/plugin marketplace add AmsonntagChow/rate-my-server
Codex
codex plugin marketplace add AmsonntagChow/rate-my-server && codex plugin add rate-my-server@amsonntagchow-rate-my-server