You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
dispatch-gates: check:dispatcher-error-vocabulary is invisible to path derivation — a new error/notice code literal ships a green local union and a red CI (measured on the #12843 patch rounds) #12850
Recorded from the #12772 patch rounds (PR #12843), where this exact gap cost one CI round-trip.
scripts/pm/dispatch-gates.mjs scores check:dispatcher-error-vocabulary as effectively silent for any changed path — the gate self-computes its population over all of packages/, so no path-derived trigger ever names it in a dispatch prompt's gate list. A dev who introduces a new SCREAMING_SNAKE code literal (in #12843: a structural mirror of ConversionNotice carrying the literal code type, in packages/metadata-core) runs the derived union green locally and still goes red on CI's Lint & Repo Gates, because the vocabulary gate was never in the derived set.
Mechanizable closure suggested by the dev who hit it: a CONVENTION trigger in dispatch-gates — "the diff introduces a new SCREAMING_SNAKE string-literal type or const that looks like an error/notice code" ⇒ include check:dispatcher-error-vocabulary in the derived list. That is a content-shaped trigger rather than a path-shaped one, which dispatch-gates already does for other convention families.
For grading: the sibling divergence class from the same PR (CI's ~4GB tsc heap ceiling vs the container default making check:type-check-debt --re-measure OOM only on CI) was closed within the claim by running the re-measure under NODE_OPTIONS=--max-old-space-size=4096; whether that belongs in the gate's own harness (so every local run is CI-shaped) is a second, smaller mechanizable item the grader may fold in or split.
Activity
huangyiirene commentedon Aug 28, 2026
定级:
Task·tooling·domain:devx·pm:queue—— 并按卡的请求拆掉第二项分诊座位,session
session_01Aujz2zykf5LXt3T98gRsGe,每日全量轮。路由
落点
scripts/pm/dispatch-gates.mjs,与同文件的 #12411 / #12815 / #12410 / #12831 同锚 ⇒tooling+domain:devx,非受管面。卡把"合并还是拆分"交给了分诊,我拆
卡末尾写:"a second, smaller mechanizable item the grader may fold in or split"。⇒ 拆,已另立 #12854。
理由不是"两件事不相关"(它们同出一个 PR),而是它们的失败形状不同:
⇒ 一个是"没被叫到",一个是"叫到了但环境不同"。合成一个 PR 会让两条推理互相遮蔽,而它们各自都值得被单独找到。
范围钉死:CONVENTION 触发器
按卡给的方向:内容形状触发器而非路径触发器 —— diff 引入新的
SCREAMING_SNAKE字符串字面量类型或常量、且形似 error/notice code ⇒ 把check:dispatcher-error-vocabulary纳入派生清单。卡已指出 dispatch-gates 对其他 convention 家族已经这么做,所以这不是新机制。packages/),路径派生对它天然无效 —— 给它编一条路径前缀会制造一个看起来对但覆盖不全的触发器,比现状更糟。本卡的整个价值就在于承认它是内容形状的。证据强度
这不是推测:#12843 的 patch 轮实测付过一次 CI 往返,而且卡把机制说得很具体(在
packages/metadata-core引入ConversionNotice的结构性镜像,带字面量code类型 ⇒ 本地派生并集绿、CILint & Repo Gates红)。⇒ 有一次真实成本,不需要再论证值不值。Generated by Claude Code
huangyiirene commentedon Aug 28, 2026
⛔ 更正:拆出的卡是 #12856,不是我上一条评论写的 #12854。
我在创建之前就把编号写进了评论,而 issue 编号是服务端分配的 —— 中间有别的卡插了进来。⚠️ #12854 是另一张不相关的卡,上一条评论里那个引用会把读者引到错的地方,所以在这里更正而不是默默改掉。
拆分本身不变,理由也不变:#12856 承载"
check:type-check-debt --re-measure只在 CI 上 OOM,门的 harness 没有钉住堆上限"那一项;本卡只含 CONVENTION 触发器。Generated by Claude Code