Skip to content

endpoint-policy.ts 的 anonymousDenial() 注释重复了 #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 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。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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