Skip to content

把两个未接线的门禁接到 CI:check-issue-citations(diff 域裁决进 lint.yml 阻塞 + --census 进 half-state-patrol 只报告)与 check:merged-result(lint.yml 一条步骤) #18224

Description

@claude

scripts/check-issue-citations.mjs(PR #18223 交付)接到 CI 上 —— 两个入口、两条车道、两种相反的姿态

domain:devx 执行席(座位贴 #6023)在复核 PR #18223(卡 #17512)时立。那个门禁已经写好并自检通过,但今天没有任何东西调用它:.github/workflows/** 出了接卡 dev 的文件面(本席对该面的 auto_merge 恒 HTTP 422),dev 正确地停手并把问题写进了 open_questions,而不是自己去改 workflow。

⚠️ priority:domain: 故意留空 —— 分诊的活,不是本席的。

⭐ 席位裁定:两个入口都要装,理由是两半的正确姿态相反

入口 姿态 为什么
diff 域裁决 lint.ymlLint & Repo Gates 一个 step 阻塞 它是关于本 diff的事实,小、确定、且是唯一能阻止 2,785 变成 3,000 的东西。该 job 已带 GITHUB_TOKEN
--census half-state-patrol.yml(定时) 只报告,⛔ 不阻塞 它的读数会在树不动时自己变 —— 见下面那条实测。

只装一个就只交付一半;两个装进同一条车道,必然有一个姿态是错的。


⬆ 追加(2026-09-16):第三个入口 —— check:merged-result,同文件、同姿态、同一堵墙

入口 姿态 为什么
check:merged-result 自检 lint.ymlLint & Repo Gates 一个 step 阻塞 快、无凭据依赖、无外部网络;node scripts/check-merged-result.mjs --self-test 是脚本自带的,⛔ 不是本卡新写的判据。

来源:PR #18338(卡 #16287,merged-result 预算探针)。它在 package.json 注册了 check:merged-result,而零个 workflow 调它 —— 该卡的认领面同样排除了 .github/workflows/**,dev 遵守围栏并把问题写进 open_questions,⭐ 与 #18223 的 dev 做了同一件对的事。

本席实测(两通道,各带发火对照,读数取自 origin/main 与 PR head 8401623b1,取数记在 #16287 的 ACCEPT 评论里):

① 37 个 .github/workflows/*.yml 里 'check:merged-result'    0
   同一批文件的发火对照 'check:nul-bytes'                      5
② PR head 的 package.json 注册                              1  (:73)
③ manifest 里别的 script 把它捞回去(聚合键)                   0

为什么并到本卡而不另立一张:同车道、同一个文件(lint.yml)、同一堵 422 的墙。两张卡改同一个文件的相邻两行,是在制造一次必然的冲突。

接线是门禁加强,不是削弱 ⇒ 不碰人工地板,席位可裁。⛔ 但合并仍然只能人工(本卡第 4 条验收)。

⭐ 验收同第 2 条:两个方向都要量 —— 让 --self-test 失败的树必须红,复位必须绿。

⚠️ 更正一条本卡正文里的数字:正文写「160 个键、12 个孤儿」。本席今天在 origin/main 重量为 162 个键、13 个孤儿(新增 check:issue-citations),#18338 落地后是 14。更正已交叉记到 #18225。⛔ 这不改变本卡的任何裁定。


⭐⭐ 让 census 必须「不阻塞」的那条读数,我自己重测过

#17512 当初用紧邻号全部可解析来证明 #16785 是「密集序列里的一个洞」而非权限假象。四天之后,那个对照自己塌了一大半(本席 2026-09-14 实测,同 token 同一轮):

#16783  404      ← 2026-09-10 测得可解析
#16784  200
#16786  404      ← 同上
#16787  404      ← 同上
发火对照 #16099 #16737 #17444 #17242 #15809 #17512 → 全 200

四天内三个号消失,而本仓没有任何改动。 一个全树阻塞的裁决会在树静止不动时因为第三方删了一个 issue 而变红。

⭐ 还有一层值得记下:对照会过期。卡的结论(#16785 是个洞)依然成立,但它当初给出的理由已经不成立了 —— 那一带现在大部分都是洞,「密集序列」这个前提没了。

⛔ 一处我必须更正 dev 报告里的事实,因为它是 option D 的论据

报告写:「a census of the manifest's 160 check:* keys found every one of them named by a workflow — there is no precedent here for an unwired gate」。

这条是假的。 本席三通道实测(全部取自 origin/main,带发火与暗对照):

根 manifest 的 check:* 键                 160
没有被任何 workflow 文件点名的              12
…且没有被任何其他 manifest 脚本点名(真孤儿) 12
发火对照 'check:nul-bytes' 在 workflow 里   True(出现在 3 个 workflow)
暗对照   'check:zznotreal'                  False

有 12 个先例。 ⚠️ 但这不使 option D 变对,只是把拒绝 D 的理由换成正确的那条:本卡要修的损害是「没有任何东西扫那些面」,而一个没人调用的门禁什么都不扫。那 12 个孤儿不是可效仿的样板 —— 它们本身是缺陷,已另立 #18225

验收(⛔ 不规定实现)

  1. 两个入口都装,姿态按上表。⛔ 不许把 census 装成阻塞的。
  2. 两个方向都要量:装完之后,一个新增不可解析引用的 PR 必须红;去掉之后必须绿。PR feat(scripts): resolve the repo's issue-number citations against the board it names #18223 已经在门禁侧做过这组消融(带磁盘证据:标记计数 0→1、blob f318190d3bd2007413,复位后 blob 相等且 git diff HEAD 空),接线之后要在 CI 侧再做一次
  3. --census 那条要报到哪里、多久一次、+159 requests/run 的代价谁付,明写下来。
  4. ⛔ 本卡触 .github/workflows/**本席的 auto_merge 对它恒 HTTP 422,只能人工合并(同 PR ci(timings): give the test-timing parser self-test teeth in lint.yml, not continue-on-error in ci.yml #18096)。接卡者请在 PR 里点名这一条,别指望席位入队。

Blocks

#17512 —— 那张卡的损害陈述是「没有任何东西扫这些面」,在本卡落地之前它不算修完。所以 PR #18223 用的是 Part of #17512 而不是闭合关键字,这是席位批准的,⛔ 不是疏漏。

Refs:PR #18223 · #17512 · #18225 · #18096(同一堵 422 的墙)

domain:devx 执行席 · 座位贴 #6023 · 读数取自 origin/main


Generated by Claude Code

Activity

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

Metadata

Metadata

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions