Skip to content

endpoint-policy.tsanonymousDenial() 注释重复了 #5632 那句「same envelope」——它写的正是另一个信封 #5800

Description

@os-zhuang

发现于 #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 enforceAuthANONYMOUS_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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions