Blocked-by: —
背景
#14310 的裁决是「4xx may stay quiet; 5xx never」,PR #14654 按字面实现:每个 5xx 信封在唯一漏斗 logServerFault 记一条 error 级日志。dev 实测到一个可达后果:没有安装 service-messaging 的部署上,GET /api/v1/notifications 应答声明式 501 NOT_IMPLEMENTED,而 Studio 会轮询它 —— 于是每次轮询都打一行 error。这条日志通道是本卡刚建立的,让它逐请求叫狼可能把它训练成运维会忽略的噪音。
选项
- A(已发货):字面执行,每个 5xx 都记。零发明,与裁决一致;代价是声明式 501/503 在轮询路由上的逐请求噪音。
- B:排除「声明式能力缺席」(NOT_IMPLEMENTED / SERVICE_UNAVAILABLE 回答的是配置事实而非故障),其余一律响亮。
packages/rest 已有先例:isExpectedRouteError 把 502/503 当正常生命周期结果。需要一个两扇门共读的「声明式缺席」定义。 - C:声明式缺席按 route 每进程只记一次(去重),保留信号、压掉体量。
四维分析
- 实际业务需求:噪音可达但未在真实部署上量到(dev 只证明了路径存在);今天没有用户被它伤到。有拉动的是 A 已经修掉的 P1(500 零日志)。
- 项目长远合理性(≥50%):B 是原则上的终态 —— 「这个部署没装可选服务」是配置事实不是故障,逐轮询叫狼的通道最终退化回沉默;但 B 需要一个两扇门(REST / 派发器)共读的谓词,在修复中途发明它正是本仓反复付费修的「逐门分叉」。
- 防 AI 犯错:中性;若做 B,谓词必须住在
@objectstack/types 与 logServerFault 同家,⛔ 不在任一门里各写一份。 - 创业阶段不扩散:无拉动不新增第二个谓词;A 先落地,B/C 等到噪音被观测到再做。
推荐
维持 A 落地(PR #14654),本卡挂 needs-user-decision 等维护者裁 B 或 C 的时机;若裁 B,作为独立卡派发,谓词落在 types 包与漏斗同家并带两扇门的一致性 pin。
Source: os-dev report on #14310 (open question 1).
Generated by Claude Code
Blocked-by: —
背景
#14310 的裁决是「4xx may stay quiet; 5xx never」,PR #14654 按字面实现:每个 5xx 信封在唯一漏斗
logServerFault记一条 error 级日志。dev 实测到一个可达后果:没有安装service-messaging的部署上,GET /api/v1/notifications应答声明式 501 NOT_IMPLEMENTED,而 Studio 会轮询它 —— 于是每次轮询都打一行 error。这条日志通道是本卡刚建立的,让它逐请求叫狼可能把它训练成运维会忽略的噪音。选项
packages/rest已有先例:isExpectedRouteError把 502/503 当正常生命周期结果。需要一个两扇门共读的「声明式缺席」定义。四维分析
@objectstack/types与logServerFault同家,⛔ 不在任一门里各写一份。推荐
维持 A 落地(PR #14654),本卡挂
needs-user-decision等维护者裁 B 或 C 的时机;若裁 B,作为独立卡派发,谓词落在 types 包与漏斗同家并带两扇门的一致性 pin。Source: os-dev report on #14310 (open question 1).
Generated by Claude Code