Skip to content

[CODE] 类闸:生产源里禁止拿「可被平台伪造的错误字符串」做控制流(枚举棘轮,新成员默认拒绝) #991

Closed as not planned

Description

@jinjunnn

这一类已实证发生三次

  • #918 → #940(http-<status> 铸造点按类收口)
  • #963 → #965(transient 判定改读结构化 status)
  • #970(artifact 下载的「取消」改读结构槽)

每一次都是同一个形态:控制流拿另一个仓决定的错误字符串比字面量,而那个字符串的内容由平台决定。逐实例修 = 对新成员默认放行。

事实基础(实测)

platform-error-code.ts 的 CLASSIFICATION_CODE = /^[a-z][a-z0-9_]{2,63}$/ 不含连字符 ⇒

  • 单词形本地铸造名 cancelled / network / disk / forbidden / unauthorized / retryable —— 平台可以发出同名分类码;
  • kebab-case 的 not-found / over-limit / sha256-mismatch —— 结构上不可被伪造。

今天被控制流读的只有 cancelled(#970 已修),但另外五个随时可能成为第四个实例。

扫描可行性(已实测)

正则 /\.error\s*[!=]==\s*"…"/ 在 packages/ui-mac 全包只 6 处命中,去掉 typeof 假阳后恰好 3 处 = #970 修的那三处。元判据(先证明扫描器抓得住已知的坏、放得过合法写法、对 NUL 内容不瞎)照 platform-error-code-gate.test.ts 的现成形状写。

为什么现在不做

  • #962 正在改咽喉本体(扩到嵌套信封),此刻加棘轮会连轮返工;
  • #968 正在做「源码文本锚不是闸门」的整类处置,新加同类闸需先对齐口径。

blocked-by #962, #968

AC

  1. 闸的边界落在咽喉而不是枚举清单上 —— 对新成员默认拒绝,不是「当前这几处都合规」;
  2. 元判据自检:合成正例必须命中、合法写法必须放行、枚举退化成空集必须红;
  3. 登记进 scripts/gate-files.tsv(精确条数)。

Refs #970, #965, #940

Activity

  1. jinjunnn commented on Sep 17, 2026

    @jinjunnn
    OwnerAuthor

    票面清理(2026-09-16):关闭 —— 过度工程,不适合当前项目。

    关闭理由:票要加一道全局扫描,禁止代码拿「平台可能伪造的错误字符串」来决定流程。这个毛病出现过三次,三次都已逐个修好;今天按票面给的扫描方式在桌面代码里再扫,生产代码零命中。它挡的是「将来可能出现的第四次」,而每次出现时都是一个可见的小 bug,修起来是单点改动。票里写的两个前置(#962、#968)虽已关闭,但不改变它是预防性机制的性质。

    依据:

    什么时候重开:出现第四个同形实例。那时先单点修;如果短期内再出现一次,再考虑加扫描。

    如判断有误,直接重开即可;重开时请在评论里说明新出现的情况。

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions