Skip to content

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

Closed

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

  1. added
    pm:queueReady for the PM dispatch loop
    domain:cliRetired 2026-10-22, alias of domain:server (cli surface); in-flight cards keep it until they land
    on Aug 6, 2026
  2. os-zhuang commented on Aug 6, 2026

    @os-zhuang
    ContributorAuthor

    分诊: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. */ ✅ 原样仍在;:274 anonymousDenial() 定义、:361 唯一调用点亦在。#5632 的 PR 未触及本文件,正文所述「越界故另立」的边界成立。

    为什么判 pm:queue 而不是 finding:观察类的判据是「真实但今天没人撞上」;这一条今天就在产出 wrapper 信封的那一侧对下一个读者(尤其 AI)说假话,而 #5632 刚刚才把另一处同源假话窄化 —— 留着等于让同一个错误印象从第二个、且更权威的位置继续供应。修法零歧义(正文已给出该写什么)、零行为改动、文件面一行,没有可问的东西,按 step 0「scoped fix, nothing to ask」入队。

    给 cli 座位的选批提示:本单适合搭车 —— 一行注释,建议挂在下一个触 packages/runtime 的 PR 上顺带收,单独开一趟 CI 的成本高于改动本身。若近期没有 runtime 单,独立派发也可,验收就是那一行。⚠️ 同轮另有 #5820 也落在 packages/runtime,但文件不同(standalone-stack.ts vs endpoint-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

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:cliRetired 2026-10-22, alias of domain:server (cli surface); in-flight cards keep it until they landpm:queueReady for the PM dispatch loop

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions