Repository navigation
Description
发现于 #5632(PR 见文末)的实现过程,不在该 PR 内修:#5632 的分诊预裁把文件面锁定为 packages/core/src/security/anonymous-deny.ts + 那一个 dogfood 测试文件,本条落在第三个文件上,越界。Filed unassigned,待分诊。基线:origin/main f205c32。
事实
packages/runtime/src/endpoint-policy.ts:273:
/** The 401 every seam on this platform answers — same code, same message, same envelope. */
function anonymousDenial(): EndpointPolicyVerdict {
const { status, body } = apiErrorResponse({
code: ANONYMOUS_DENY_CODE,
httpStatus: ANONYMOUS_DENY_STATUS,
message: ANONYMOUS_DENY_MESSAGE,
});
return { verdict: 'deny', status, body };
}
前两项(same code / same message)成立;第三项不成立。apiErrorResponse(packages/runtime/src/error-envelope.ts:129)返回的是
{ status: input.httpStatus, body: { success: false, error: buildApiError(input) } }
即 wrapper 信封。而 REST seam(@objectstack/rest enforceAuth → ANONYMOUS_DENY_BODY)写的是扁平 { error, message }。两者不是同一个信封 —— 这正是 #5632 认定 ANONYMOUS_DENY_BODY 那句 docstring 在说谎的同一条事实,只是长在第二个地方,而 #5632 的正文并没有枚举到这一处。
为什么值得单独记
- 与
ANONYMOUS_DENY_BODY自称是「每个 seam 都返回的唯一 401 body 形状」,但 dispatcher 侧五个 seam 返回的是另一种 wrapper #5632 同类:声明与实际不符,发生在注释层(PD chore: version packages #10 的形状)。ANONYMOUS_DENY_BODY自称是「每个 seam 都返回的唯一 401 body 形状」,但 dispatcher 侧五个 seam 返回的是另一种 wrapper #5632 已把anonymous-deny.ts那句窄化并配了 conformance 用例;这一句留在原地,下一个读者(尤其 AI)照样会得到「全平台同一个信封」的错误印象,而且这次是在产出 wrapper 的那一侧读到的,更容易被当成权威。 - 两个 live 信封是 ADR-0112 2026-07-30 修正案记录在案的既有事实,收敛归 envelope-convergence 线(Envelope drift is not just service-storage: four more route modules emit bare bodies, two of them the pre-#3675
{ error: '<string>' }#3843 family)。本条不涉及任何 wire 改动,只是把注释改成事实。
建议处置
改注释即可,一行:说明 code / message 与 REST seam 一致,envelope 是 dispatcher 自己的 wrapper({ success: false, error: { code, message, httpStatus } }),并指向 ANONYMOUS_DENY_BODY 已经窄化后的那段说明。packages/runtime 的行为一行不动。
查重
按关键字 + 文件路径搜过 open issues:endpoint-policy.ts 零命中、anonymousDenial 零命中、ANONYMOUS_DENY 零命中、envelope 401 comment 零命中。#5632 本身已由 PR 覆盖,其预裁范围明确不含本文件。
Activity
os-zhuang commentedon Aug 6, 2026
分诊:
pm:queue+domain:cli。落点锚定:
packages/runtime/src/endpoint-policy.ts:273一行注释。packages/runtime在 SKILL 域表 cli 行(cli / runtime / verify / qa / types)—— 不是 identity(虽然内容是 401 拒绝语义),按锚定规则取修复落点的包,不取主题词汇。过时前提检查(
origin/main@846ed1f,实读)::273/** The 401 every seam on this platform answers — same code, same message, same envelope. */✅ 原样仍在;:274anonymousDenial()定义、:361唯一调用点亦在。#5632 的 PR 未触及本文件,正文所述「越界故另立」的边界成立。为什么判
pm:queue而不是finding:观察类的判据是「真实但今天没人撞上」;这一条今天就在产出 wrapper 信封的那一侧对下一个读者(尤其 AI)说假话,而 #5632 刚刚才把另一处同源假话窄化 —— 留着等于让同一个错误印象从第二个、且更权威的位置继续供应。修法零歧义(正文已给出该写什么)、零行为改动、文件面一行,没有可问的东西,按 step 0「scoped fix, nothing to ask」入队。给 cli 座位的选批提示:本单适合搭车 —— 一行注释,建议挂在下一个触⚠️ 同轮另有 #5820 也落在
packages/runtime的 PR 上顺带收,单独开一趟 CI 的成本高于改动本身。若近期没有 runtime 单,独立派发也可,验收就是那一行。packages/runtime,但文件不同(standalone-stack.tsvsendpoint-policy.ts),可同批。查重:三仓 open issue 与 PR 各搜一遍(
endpoint-policy/anonymousDenial/ANONYMOUS_DENY/ envelope 401)—— 与正文自查一致,零影子单。#5632 已由其 PR 覆盖且预裁范围明确不含本文件,不关重复。归线:envelope-convergence(#3843 family),ADR-0112 2026-07-30 修正案。本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code