Skip to content

ci(ui-coverage): run objectui's coverage lane nightly from the root, thresholds unchanged - #26003

Merged
os-zhuang merged 2 commits into
mainfrom
claude/project-thread-46zigd
Oct 26, 2026
Merged

os-zhuang merged 2 commits into
mainfrom
claude/project-thread-46zigd

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Elon · project thread

Part of #25924 (item 2 of the card's Recommendation: the coverage lane on a schedule, thresholds unchanged). Part of #25677 (roster row 7 of #25697, "Test (coverage shard n/8) · Test (coverage)": kept, follow-up port).

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么: 新增根 workflow ui-coverage-nightly.yml(名为 UI Coverage),把 objectui 的覆盖率车道(8 个分片 + 1 个合并任务)搬回根目录,只在每晚 06:13 UTC 定时跑,也可以手动触发。阈值不变(lines 40、functions 33、branches 30、statements 40),仍由合并任务在完整报告上检查。
  • 为什么: 卡上说的「每次 push 都跑」在合并后的仓库里已经不成立:ui/ 合并时这条车道没有移植,ui/.github/ 里那份 GitHub 不会执行,所以从合并那天起这四个阈值没有任何地方在检查。现在按卡的建议以定时方式补回,不回到每次 push。
  • 谁会发现红: scheduled-full-run-card.yml 现在也监听 UI Coverage,定时运行红了就开或刷新一张卡 nightly full run: red on main (UI Coverage)。
  • 不变的: 不进必需检查,不进发版门(RELEASE_GATE_WORKFLOWS 仍只有 CI 和 Lint & Type Check),PR 和合并队列都不跑它。
  • 代价: 覆盖率掉到阈值以下要到第二天早上才报出来(卡上已接受);每晚约 8×22 分钟 runner。
  • 卡上的另一项(install 重试)没有在本 PR 里做,原因见下文,交席位定。
  • 受管面: .github/workflows/**,Tier H,需要 GOVERNED_APPROVERS 批准。

What changed

File Change
.github/workflows/ui-coverage-nightly.yml New. ui-coverage (Test UI (coverage shard n/8), 8 shards, 40 min): install, the seven-package build ci.yml's ui jobs use, then pnpm --dir ui run test:coverage with --reporter=blob --reporter=default --reporter=github-actions --shard=n/8 --testTimeout=60000 and the thresholds zeroed on the legs; uploads ui/.vitest-reports/*. ui-coverage-report (Test UI (coverage)): refuses a partial blob set, merges with --merge-reports (where the configured thresholds are enforced), publishes ui/coverage/, prints the shard headroom (report-only) and states whether the gate ran. Triggers: schedule 13 6 * * * and workflow_dispatch. Caches are restore-only (Build UI Deps' turbo seed, the pnpm store).
.github/workflows/scheduled-full-run-card.yml Watches UI Coverage too.
scripts/ci/scheduled-full-run.mjs CARD_CADENCES['UI Coverage'] = 'nightly' (the nightly wording already existed). Self-test +4 cases: the nightly identity, the nightly body, the workflow's single daily cron, and the watcher list and the cadence map naming the same workflows. Battery floor 42 → 46.
ui/scripts/__tests__/coverage-shard-width.test.ts, coverage-shard-reporter-readability.test.ts Restored from before #25879 (they retired with the lane), now reading the new file through helpers/root-ci.ts.
ui/scripts/__tests__/shard-headroom.test.ts The coverage half of the retired wiring pin comes back against ui-coverage-report; the test-aggregate half stays retired (no root job).
ui/scripts/__tests__/helpers/root-ci.ts, ui/scripts/shard-headroom.mjs UI_COVERAGE (file + job keys); header prose.

Measurements

  • The coverage lane's trigger on the merged repo: no root workflow runs test:coverage for ui/ (grep -rn 'test:coverage' .github/workflows/ → only coverage-nightly.yml, which is spec's). objectui's test-coverage / coverage-report jobs exist only in ui/.github/workflows/ci.yml, which GitHub does not run. The ui coverage thresholds have had no reader since the cutover.
  • Readers checked before adding the lane: required contexts (branch ruleset and classic protection: none of the new names, and none is added); RELEASE_GATE_WORKFLOWS (unchanged); check-ci-filter-parity (reads ci.yml only, which this PR does not touch); the aggregator roster (no ci.yml aggregator involved); merge-queue-triage.yml (workflows: [CI], unchanged). The one reader added is the red-run card filer.
  • Install retry (card item 4), not done here: the card's landing spot scripts/ci-setup-pnpm.sh is now ui/scripts/ci-setup-pnpm.sh, and no workflow GitHub runs calls it (only ui/.github/workflows/*); it also never ran the install, only Corepack. The root's pnpm acquisition (.github/actions/setup-pnpm) already retries. pnpm install --frozen-lockfile is spelled at ~40 sites in 25 root workflows. Actions API, failed runs created since 2026-10-19 (632 runs): exactly 1 job failed at an install step, run 39316437234 Type Check · debt ledger, node-gyp headers download ECONNRESET from nodejs.org. The choice of landing (a shared install action at every site, an inline retry, or no change) goes to the devx seat on the card.

Verification

🤖 Generated with Claude Code

https://claude.ai/code/session_01WKpunbiE8c9w2i9FsEvQas

…thresholds unchanged

The ui/ cutover did not port objectui's coverage lane (roster row 7 of #25697,
"kept, follow-up port"), and the nested ui/.github copy runs nowhere, so the
ui coverage thresholds (lines 40, functions 33, branches 30, statements 40)
have been evaluated by nothing since the cutover. objectui ran the lane on every
push and hourly: 8 legs of ~22 min, about 31 % of its CI minutes (#25924).

It comes back as .github/workflows/ui-coverage-nightly.yml (`UI Coverage`), on
schedule (06:13 UTC) plus workflow_dispatch only: eight blob-reporting shards,
then one merge job that refuses a partial set, enforces the configured
thresholds over the merged map, publishes the report and states whether the
gate ran. Not a merge gate and not a release gate.

scheduled-full-run-card.yml now also watches `UI Coverage`, with a `nightly`
cadence in CARD_CADENCES, so a red night files or refreshes one card; the
self-test pins the identity, the nightly body, the workflow's single daily
cron and that the watcher list and the cadence map name the same workflows.

The three ui pins that retired with the lane come back against the new file
through helpers/root-ci.ts: the width said once, the shard reporter set, and
the headroom reading's matrix and cap.

Part of #25924

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WKpunbiE8c9w2i9FsEvQas
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 26, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对

Verdict: ACCEPT at head 565a1e5c40ff2ec9bfeefebbe0c84e97ed0ad01f. This is Tier H: check-governed-merges --pr 26003 reports 2 of 8 paths governed (.github/workflows/**). It lands after a GOVERNED_APPROVERS approval (hotlong / os-zhuang requested), and then the seat flips it.

The premise moved, and the change follows the measured reading

Seat's own reading at the head (detached worktree)

  • node scripts/ci/scheduled-full-run.mjs --self-test gives self-test OK. The battery floor goes from 42 to 46, and the new checks cover four things:
    • the nightly identity's title and marker;
    • no other cadence in a nightly body;
    • the workflow declares exactly one daily cron under the name CARD_CADENCES holds;
    • the watcher list equals the CARD_CADENCES keys.

Gates at head 565a1e5

  • 54 success, 12 skipped, 0 failing.

Item 4 (pnpm install retry): not pursued, closed on measurement


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 26, 2026 15:08
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 26, 2026 15:08
@os-zhuang
os-zhuang added this pull request to the merge queue Oct 26, 2026
Merged via the queue into main with commit b97fe92 Oct 26, 2026
67 checks passed
@os-zhuang
os-zhuang deleted the claude/project-thread-46zigd branch October 26, 2026 15:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd size/l skip-changeset PR has no user-facing published change; bypasses the changeset gate tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants