From aaf6226292a92d8c8263abad46682c8feb687573 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 26 Oct 2026 00:42:29 +0000 Subject: [PATCH] ci(ui-merge): register `Lint UI` and `Build & E2E UI` in REQUIRED_CONTEXTS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The maintainer added both contexts to the `main` ruleset at the cutover sitting (2026-10-26 00:25Z, 「加上了」); this is the repo half the registry prescribes. The two instruction surfaces that state the required set (AGENTS.md's merge-queue sentence and the pm-dispatch readings ledger) follow, line-neutral, five → seven. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_012CB8WDTpTbuW2XrEyjKHVo --- .../references/platform-readings.md | 6 ++-- AGENTS.md | 8 ++--- scripts/check-required-contexts.mjs | 29 +++++++++++++++++-- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/.claude/skills/pm-dispatch/references/platform-readings.md b/.claude/skills/pm-dispatch/references/platform-readings.md index 0b5a30b8582..6f29235e250 100644 --- a/.claude/skills/pm-dispatch/references/platform-readings.md +++ b/.claude/skills/pm-dispatch/references/platform-readings.md @@ -387,9 +387,9 @@ - 本车道强制多是过宽的回忆:`dispatch-gates.mjs --tier PATH` 逐路径现推,路径线是下限非放行。 - 该脚本只答自己那棵树:姊妹仓路径回 absent from this tree,姊妹仓的档位与条款②只能手推。 - `os-verify-lock.sh` 只住 objectstack:objectui 无它,跑本仓副本读的是容器级锁,非该仓深度。 -- required checks 的名单是每仓事实,objectstack 五个: - `TypeScript Type Check` · `Lint & Repo Gates` · `Test Core` · - `Build Core` · `Governed Surface Queue Guard`。 +- required checks 的名单是每仓事实,objectstack 七个: + `TypeScript Type Check` · `Lint & Repo Gates` · `Test Core` · `Build Core` · + `Governed Surface Queue Guard` · `Lint UI` · `Build & E2E UI`。 - ⭐ 本表的 `mustName` 声明 `statesTheSet` ⇒ 必须逐字等于注册表,加注册行不跟改本表即红。 - ⇒ 门绿即名单逐字齐全的读数;⛔ 但数量词未钉:实测 七→六 照绿,只能手跟改。 - ⛔ 聚合命令同样不作判定:`check:type-check-debt` 可在包级 typecheck 绿时红。 diff --git a/AGENTS.md b/AGENTS.md index 236b9f88845..2abd3a5f717 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -523,11 +523,11 @@ Even inside your own worktree, operate defensively: yet"; `in_progress` is not a pass. Arming a red PR does not queue it, it hides it: every poll then misreads "not on `main` yet" as "queued". Always read *two* things: the queue branch **and** `origin/main`. And **the queue enforces only the required - set** — five contexts block: `Lint & Repo Gates` (all `check:*` gates), - `TypeScript Type Check`, `Test Core`, `Build Core` and `Governed Surface Queue Guard`. A - check outside those five is advisory and rides through, and an advisory red that lands rides + set** — seven contexts block: `Lint & Repo Gates` (all `check:*` gates), `TypeScript Type Check`, + `Test Core`, `Build Core`, `Governed Surface Queue Guard`, `Lint UI` and `Build & E2E UI`. A + check outside those seven is advisory and rides through, and an advisory red that lands rides `main`'s merge ref into every later PR until stanched. A required context is matched by - check-run name, so a rename detaches its gate silently — treat those five names as contract. + check-run name, so a rename detaches its gate silently — treat those seven names as contract. **Two speeds** (ruling record 6120820653): PR and queue runs carry the fast set, 10 minutes of wall per queue entry; `main`'s hourly and push runs carry the full battery — dogfood, e2e, `Temporal Conformance (live PG + MySQL)` — read by the publish lane before diff --git a/scripts/check-required-contexts.mjs b/scripts/check-required-contexts.mjs index 8ab8b34dcc1..d05b928d1a9 100644 --- a/scripts/check-required-contexts.mjs +++ b/scripts/check-required-contexts.mjs @@ -443,6 +443,24 @@ export const REQUIRED_CONTEXTS = [ 'read back live in the ruleset sweep of 2026-09-10 that carries the director ruling enrolling this row (#15233)', carries: 'the governed-surface refusal — the `merge_group` leg that refuses a governed diff carrying no ruled approval', }, + { + workflow: 'ci.yml', + job: 'lint-ui', + context: 'Lint UI', + authorized: + '#25752 step 6, maintainer ruling 2026-10-26T00:25Z in the director thread, verbatim 「加上了」 — ' + + 'added to the `main` ruleset the same minute; this row is the repo half (#25853)', + carries: 'the ESLint + repo-gate family of the `ui/` workspace', + }, + { + workflow: 'ci.yml', + job: 'build-e2e-ui', + context: 'Build & E2E UI', + authorized: + '#25752 step 6, maintainer ruling 2026-10-26T00:25Z in the director thread, verbatim 「加上了」 — ' + + 'added to the `main` ruleset the same minute; this row is the repo half (#25853)', + carries: 'the Console build from `ui/apps/console` and its Playwright e2e', + }, ]; /** @@ -556,8 +574,9 @@ export const INSTRUCTION_SURFACES = [ // 6→7 by #17798 — the same misclassification, one enrolment later and // with every gate green, which is what put the exclusivity rule below in // the judge. Then 7→5 by #22998 (two-speed CI: the dogfood and temporal - // contexts moved to the full battery). The full set is pinned here so the - // corrected sentence cannot rot back — a rename in ANY of the five + // contexts moved to the full battery). Then 5→7 by #25853 (the `ui/` + // import's `Lint UI` and `Build & E2E UI`). The full set is pinned here so + // the corrected sentence cannot rot back — a rename in ANY of the seven // reddens this gate instead. file: 'AGENTS.md', statesTheSet: true, @@ -567,6 +586,8 @@ export const INSTRUCTION_SURFACES = [ 'Test Core', 'Build Core', 'Governed Surface Queue Guard', + 'Lint UI', + 'Build & E2E UI', ], }, { @@ -595,6 +616,8 @@ export const INSTRUCTION_SURFACES = [ // equal to the registry by the exclusivity rule in // judgeInstructionSurfaces — that makes the seat's copy non-optional. 'Governed Surface Queue Guard', + 'Lint UI', + 'Build & E2E UI', ], }, { @@ -617,7 +640,7 @@ export const INSTRUCTION_SURFACES = [ * of the six surfaces have one; `AGENTS.md` does not, because a repo-root FILE * has no separator to be found by — so an AGENTS.md card derived this gate not * at all, while that surface is the one carrying `mustName` for every - * required context (widened 2→6 by #9677, 6→7 by #17798, 7→5 by #22998). Editing the merge-queue + * required context (widened 2→6 by #9677, 6→7 by #17798, 7→5 by #22998, 5→7 by #25853). Editing the merge-queue * paragraph there is precisely how this gate goes red, and it was reachable * only by judgment. *