Ruled: 5773785605 · letter B · 2026-09-22T08:57Z — class-1 self-adjudication (summon #27, director seat); state pm:queue domain:skills
⏱️ 本卡所有读数取自同一动作:2026-09-17T22:46Z。承接 #18611:检查已经建好,但它在必过的那一处不跑。
一句话
PR #18814 给 scripts/check-sdui-manifest.mjs 加了 check 4(记录里的 objectuiPackagesVersion 必须等于被 pin 的 commit 所声明的版本)。但那条腿需要一个 objectui checkout,而必过的 lint job 没有 ⇒ 在每个 PR 上它只打印 NOT CHECKED。⇒ #18611 的缺陷只收了一半。
⭐ 仓库自己已经写明了这条腿该落在哪
⏱️ 下面这块读于 2026-09-17T22:46Z。
.github/workflows/lint.yml,「SDUI manifest is present, intact and fresh at the objectui pin」
这一步上方的注释,逐字:
「**Offline record checks only** (existence, shape, sha256 vs the provenance record,
record pin vs `.objectui-sha`): the regenerate-and-compare half **runs where a
regeneration can** … the same moment the lockstep step above forces the parser
parity re-verification, **with an objectui checkout guaranteed in hand**.」
⇒ 这一步**按设计就是离线的**;需要 checkout 的那一半**本来就该在别处**。
而那个「别处」已经存在,⛔ 不需要新增网络依赖
⏱️ 读于 2026-09-17T22:46Z。.github/workflows/ci.yml:2308 起的 console-build 作业,注释逐字:「The gate. Shallow-clones objectui at the pinned SHA, builds …」。⇒ 那个 clone 今天就在那里。在该作业里加一步 node scripts/check-sdui-manifest.mjs --require-objectui 即可让这条检查在 CI 里真的会红,而不引入任何新的网络往返。
为什么这值得单独一张卡,而不是「以后再说」
⭐ 本仓专门为幽灵门禁立卡:一条永远不在它被要求的地方运行的检查,和没有这条检查的区别只在纸面。#18611 收的正是这个形(字段被读但从不被判),⇒ 让它的修复停在 NOT CHECKED 上,是把同一个形往上挪了一层。
⚠️ 同时要公道地记下:已交付的那一半不是假的。bump-objectui.sh 在没有 ../objectui 时会拒绝,⇒ 能够引入陈旧版本记录的那个人,恰好就是手上有 checkout、会看到红灯的那个人。所以现状是诚实的(报告而非伪绿),只是不是强制。
建议(⛔ 非裁定 ruled B — see the Ruled: line)
⭐ 本席倾向 A,理由是上面那段 lint.yml 注释:它不是「哪个更方便」,而是照着这份文件已经写下的设计走。⛔ 由维护者定。 (ruled B — see the Ruled: line)
查重(MCP search_issues,含 closed)
母卡 #18611(open,PR #18814 已复核通过)是出处。#17735 是 needs-user-decision 的生产者机制卡,主题是 root manifest 与浏览器 dump 的对齐 —— 与本卡的「在哪里强制」不同。⇒ 无孪生。
出处
domain:spec seat 2(座位贴 #18549)复核 PR #18814 / 卡 #18611 时,dev 在 open_questions 里提出并推荐 A。本席独立复核了它依据的两个事实(lint.yml 的离线声明、ci.yml 已有的 clone),并补上了那段 lint.yml 注释作为更硬的理由。
Generated by Claude Code
Ruled: 5773785605 · letter B · 2026-09-22T08:57Z — class-1 self-adjudication (summon #27, director seat); state
pm:queuedomain:skills⏱️ 本卡所有读数取自同一动作:2026-09-17T22:46Z。承接 #18611:检查已经建好,但它在必过的那一处不跑。
一句话
PR #18814 给
scripts/check-sdui-manifest.mjs加了 check 4(记录里的objectuiPackagesVersion必须等于被 pin 的 commit 所声明的版本)。但那条腿需要一个 objectui checkout,而必过的 lint job 没有 ⇒ 在每个 PR 上它只打印 NOT CHECKED。⇒ #18611 的缺陷只收了一半。⭐ 仓库自己已经写明了这条腿该落在哪
⏱️ 下面这块读于 2026-09-17T22:46Z。
而那个「别处」已经存在,⛔ 不需要新增网络依赖
⏱️ 读于 2026-09-17T22:46Z。
.github/workflows/ci.yml:2308起的 console-build 作业,注释逐字:「The gate. Shallow-clones objectui at the pinned SHA, builds …」。⇒ 那个 clone 今天就在那里。在该作业里加一步node scripts/check-sdui-manifest.mjs --require-objectui即可让这条检查在 CI 里真的会红,而不引入任何新的网络往返。为什么这值得单独一张卡,而不是「以后再说」
⭐ 本仓专门为幽灵门禁立卡:一条永远不在它被要求的地方运行的检查,和没有这条检查的区别只在纸面。#18611 收的正是这个形(字段被读但从不被判),⇒ 让它的修复停在 NOT CHECKED 上,是把同一个形往上挪了一层。
bump-objectui.sh在没有../objectui时会拒绝,⇒ 能够引入陈旧版本记录的那个人,恰好就是手上有 checkout、会看到红灯的那个人。所以现状是诚实的(报告而非伪绿),只是不是强制。建议(
⛔ 非裁定ruled B — see the Ruled: line)--require-objectui。⭐ 一步、零新增网络、每个 PR 强制。check-sdui-manifest.mjssays it holds the artefact fresh at the objectui pin, but readsobjectuiPackagesVersiononly as a presence check — a pin ahead of the last release passes green while the artefact describes an older registry #18611 声明的文件面之外,所以那张卡不该顺手做。sdui.manifest.jsonand the browser dump differ on the fields the parity gate consumes (18 of 57 components;dataSourcemissing on 15 in the root artefact) — the gate's verdict set is identical under both today, which is the configuration in which the drift is least visible #17735 悬而未决的那件事 ⇒ 不该抢在那次裁定之前。⭐ 本席倾向 A,理由是上面那段 lint.yml 注释:它不是「哪个更方便」,而是照着这份文件已经写下的设计走。
⛔ 由维护者定。(ruled B — see the Ruled: line)查重(MCP
search_issues,含 closed)母卡 #18611(open,PR #18814 已复核通过)是出处。#17735 是
needs-user-decision的生产者机制卡,主题是 root manifest 与浏览器 dump 的对齐 —— 与本卡的「在哪里强制」不同。⇒ 无孪生。出处
domain:specseat 2(座位贴 #18549)复核 PR #18814 / 卡 #18611 时,dev 在open_questions里提出并推荐 A。本席独立复核了它依据的两个事实(lint.yml 的离线声明、ci.yml 已有的 clone),并补上了那段 lint.yml 注释作为更硬的理由。Generated by Claude Code