Skip to content

ci(ui-merge): register Lint UI and Build & E2E UI in REQUIRED_CONTEXTS - #25857

Merged
os-zhuang merged 1 commit into
mainfrom
claude/project-thread-n7du7e
Oct 26, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/project-thread-n7du7e

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Tesla · project thread
Fixes #25853

Clause-②: no
Metadata-protocol: none

Part of #25752 (cutover step 6, the repo half). Part of #25677.

Tier H. The registry's own exclusivity rule (statesTheSet) forces the AGENTS.md merge-queue sentence to name the registry exactly, so this PR touches AGENTS.md and .claude/**. check-governed-merges --test reads GOVERNED, landing tier H(人合). Draft; the seat lands.

What changed

Both new contexts' jobs keep the same if: the cutover gave them; when a PR does not touch ui/ they conclude skipped, which satisfies a required check. Assertions 1–9 hold for both rows (same workflow as Test Core / Build Core, no matrix, no continue-on-error, merge_group: present, unfiltered pull_request:).

Not added, per the card: Type Check UI (waits for bill item 49) and Test UI (ruled out at the sitting, item 30 B).

Verification (head aaf6226)

  • node scripts/check-required-contexts.mjs → exit 0: 7 required context name(s) pinned across 3 workflow(s); 6 instruction surface(s) scanned.
  • node scripts/check-required-contexts.mjs --self-test → exit 0, 174 assertions.
  • NODE_OPTIONS=--use-env-proxy node scripts/check-required-contexts.mjs --verify-required-set on the branch:
required-set sweep: 7 live required context(s) on main, 0 registered-but-not-required, 0 required-but-unpinned.
  read 1 ruleset(s); 1 active and covering the default branch; strict_required_status_checks_policy: false
    • ruleset main (id 12119582, Repository-sourced — objectstack-ai/objectstack)
    required: TypeScript Type Check
    required: Test Core
    required: Build Core
    required: Lint & Repo Gates
    required: Governed Surface Queue Guard
    required: Lint UI
    required: Build & E2E UI

  ✅  the live required set and this registry agree in both directions.
  • Derived gates (node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack): 44 commands, all exit 0 on aaf6226 after pnpm install --frozen-lockfile and pnpm --filter '@objectstack/lint...' build; --ran reconciles 44 derived, 44 run, 0 NOT-MEASURED, 0 UNRUN.
  • Other registry readers checked: check-aggregator-roster.mjs keeps its own aggregator subset and neither new job aggregates (needs: filter only), so no roster row is owed. check-governed-merges, check-governed-queue-guard and ci-failure.mjs mention the registry in prose only; their self-tests are in the derived list above.
  • Changeset: none. Every path is repo-root tooling or instruction text and ships in no package (skip-changeset declared with the PR).

维护者速读(草稿)

改了什么: 把你在割接当晚加进 main 规则集的两个必过检查 Lint UI、Build & E2E UI,登记进仓库里的必过检查注册表;同时把 AGENTS.md 和 pm-dispatch 读数表里“五个必过检查”的那句话改成七个,名单逐字对上。

为什么改: 注册表的作用是:有人改了 CI 里这两个 job 的名字,门禁会立刻变红,而不是让所有 PR 永远卡在“等待检查”。没登记之前,这两个检查只在设置里存在、仓库里没有任何东西守着它们的名字。

风险与代价(含回滚): 只改登记和说明文字,不改任何 CI job 本身,不影响构建结果。回滚即 revert 本 PR;不需要动规则集设置。

席位意见:

你要做的: 审阅后批准合并(os-zhuang 审批即可)。规则集那一半你已经做完,无需再动设置。


Generated by Claude Code

…TEXTS

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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CB8WDTpTbuW2XrEyjKHVo
@os-zhuang
os-zhuang marked this pull request as ready for review October 26, 2026 01:04
@os-zhuang
os-zhuang enabled auto-merge October 26, 2026 01:04
@os-tesla
os-tesla requested a review from os-zhuang October 26, 2026 01:05
@os-tesla
os-tesla disabled auto-merge October 26, 2026 01:06
@os-zhuang
os-zhuang added this pull request to the merge queue Oct 26, 2026
Merged via the queue into main with commit 3fca599 Oct 26, 2026
52 checks passed
@os-zhuang
os-zhuang deleted the claude/project-thread-n7du7e branch October 26, 2026 01:49
@github-actions

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 40255236454 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

分类:failure —— 按下面的日志分诊。

失败的 job(日志抽取,best effort):

  • Test UI (8/16) — 失败步骤: Run the ui tests (shard 8/16)

    × gives every workflow in .github/workflows/ a row in the inventory table — in both directions 47ms
    × never names a workflow file that does not exist 5ms
    × documents every job these four workflows define 2ms
    × names every first-party command the four jobs actually run 2ms
    × names no command outside the declared non-`run:` set 2ms
    × reads one section per workflow — a shrunken enumeration is a broken reader 3ms
    × finds commands on both sides — a silent parser would make every pin below vacuous 4ms
    × names every first-party command every workflow job actually runs 4ms
    × declares every command a section names that its workflow does not run 4ms
    × finds no pre-install gate reaching a package 12ms
    FAIL   unit  scripts/__tests__/check-pre-install-import-graph.test.ts > the real tree — every step objectui#6148 measured is still derived > finds no pre-install gate reaching a package
      ↳ 失败原因: AssertionError: a script this repository runs before `pnpm install` needs `node_modules` to load: expected [ Array(1) ] to deeply equal []
    FAIL   unit  scripts/__tests__/ci-cd-pipeline-doc.test.ts > ci-cd-pipeline.md — workflow inventory > gives every workflow in .github/workflows/ a row in the inventory table — in both directions
      ↳ 失败原因: AssertionError: the "Workflow Inventory" table has rows for workflows that are NOT in .github/workflows/:
    
  • Test UI (9/16) — 失败步骤: Run the ui tests (shard 9/16)

    × bounds the three jobs objectui#7270 found running under the 360-minute default 4ms
    × bounds the four jobs objectui#7956 derived a ceiling for 1ms
    FAIL   unit  scripts/__tests__/workflow-cache-save-bound.test.ts > every workflow cache save is bounded and non-fatal (objectui#7048) > bounds the three jobs objectui#7270 found running under the 360-
      ↳ 失败原因: AssertionError: changeset-release.yml must still define a `release:` job: expected undefined to be defined
    FAIL   unit  scripts/__tests__/workflow-cache-save-bound.test.ts > every workflow cache save is bounded and non-fatal (objectui#7048) > bounds the four jobs objectui#7956 derived a ceiling for
      ↳ 失败原因: AssertionError: changeset-release.yml must still define a `lane:` job: expected undefined to be defined
    

↳ 失败原因 是判读的关键:超时(Test timed out in … / Hook timed out in …)多半是负载/时序,不是本 PR 的回归;
断言(AssertionError: …)才指向真实的行为改变。两者的 FAIL 行长得一模一样,只有这一行能区分。

⚠️ 断言这一侧有一类例外,判据是断言在测什么,不是它是不是 AssertionError。 断言的对象是产品行为(一个值、一个形状、一次拒收)⇒ 照上面读:真实的行为改变,去查,⛔ 不要重排掉;
断言的对象是这次实验自身的有效性前提(跑完的耗时、负载下的先后、任何只在时间预算内才成立的条件)⇒ 它跟超时是同一类,同样对负载敏感,重排一次是合法的判别手段。
识别是机械的:断言的消息或它比较的值本身点名了一段时长、一个时间戳、一个耗时计数。实测过的一对 —— AssertionError: SecurityPlugin.init() ran: expected false to be true 测的是产品行为(真回归);
AssertionError: this run took over a second, so second-precision stamps could have differed too: expected 1006 to be less than 1000 测的是实验前提:它守护的那条不变式当时是绿的,同一个 head 原样重排一次即成功。
穿着 AssertionError 外衣的时间测量,仍然是时间测量。(⛔ 这只改「怎么读一次红」,不改「哪些测试可以重排」——后者由别处管。)

跨 PR 相同签名(24h,按失败测试文件聚合):

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 6 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 看上面的「跨 PR 相同签名」;已有汇总 issue ⇒ flaky/环境问题实锤,去那张 issue 上谈,修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

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

Labels

documentation Improvements or additions to documentation size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

3 participants