发现于 #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 的正文并没有枚举到这一处。
为什么值得单独记
建议处置
改注释即可,一行:说明 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 覆盖,其预裁范围明确不含本文件。
关联:#5632、ADR-0112(2026-07-30 修正案 / #4007)、#3843、PR #5631。
发现于 #5632(PR 见文末)的实现过程,不在该 PR 内修:#5632 的分诊预裁把文件面锁定为
packages/core/src/security/anonymous-deny.ts+ 那一个 dogfood 测试文件,本条落在第三个文件上,越界。Filed unassigned,待分诊。基线:origin/mainf205c32。事实
packages/runtime/src/endpoint-policy.ts:273:前两项(same code / same message)成立;第三项不成立。
apiErrorResponse(packages/runtime/src/error-envelope.ts:129)返回的是即 wrapper 信封。而 REST seam(
@objectstack/restenforceAuth→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 的那一侧读到的,更容易被当成权威。{ 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 覆盖,其预裁范围明确不含本文件。关联:#5632、ADR-0112(2026-07-30 修正案 / #4007)、#3843、PR #5631。