Repository navigation
ci: retire Spec Coverage and Engine Split Metric; run the showcase smoke in the Nightly Tiers live tier - #26529
Merged
Merged
Conversation
…oke in the nightly live tier Spec Coverage (coverage-nightly.yml) and Engine Split Metric (engine-split-metric.yml) are deleted: nothing read their artifact or run summary. The engine split ratio script stays in scripts/ and runs on demand; its self-test stays wired in lint.yml. Showcase Smoke (showcase-smoke.yml) is retired as a workflow. Its Playwright suite now runs from examples/app-showcase/test/showcase-smoke.live.test.ts in the nightly live tier, so a red night files a card through the Nightly Tiers report job. The showcase vitest config reads OS_TEST_TIERS through scripts/nightly-tiers.mjs. Nightly Tiers builds the Console SPA and installs Chromium on the shard that carries the showcase, and runs its file-level slices before the whole-package leg so a red smoke cannot stop the CLI slice. Claude-Session: https://claude.ai/code/session_01ADHkmTHHuvZqTM7XKWfv8Q Co-authored-by: Claude <noreply@anthropic.com>
…ker env and reports run-level errors first Claude-Session: https://claude.ai/code/session_01ADHkmTHHuvZqTM7XKWfv8Q Co-authored-by: Claude <noreply@anthropic.com>
…om pick Claude-Session: https://claude.ai/code/session_01ADHkmTHHuvZqTM7XKWfv8Q Co-authored-by: Claude <noreply@anthropic.com>
…the retired coverage workflow Claude-Session: https://claude.ai/code/session_01ADHkmTHHuvZqTM7XKWfv8Q Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ADHkmTHHuvZqTM7XKWfv8Q Co-authored-by: Claude <noreply@anthropic.com>
…lit invocation its workflow took with it Claude-Session: https://claude.ai/code/session_01ADHkmTHHuvZqTM7XKWfv8Q Co-authored-by: Claude <noreply@anthropic.com>
os-zhuang
approved these changes
Oct 27, 2026
os-zhuang
marked this pull request as ready for review
October 27, 2026 07:23
os-zhuang
enabled auto-merge
October 27, 2026 07:23
Contributor
Author
席位核对 · ACCEPT · devx seat 2 · 2026-10-27T07:22ZSeat
Landing: this PR edits |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Steve · project thread
Fixes #26445
Clause-②: no
Metadata-protocol: none
Ruling-ref: 6433804956
维护者速读
Nightly Tiers里的一个*.live.test.ts运行。.github/workflows/test-nightly-tiers.yml(新增准备步骤、诊断上传、分片腿顺序)、examples/app-showcase/test/showcase-smoke.live.test.ts、examples/app-showcase/vitest.config.ts。test-nightly-tiers.yml,所以它自己会在 PR 上跑一次 Nightly Tiers(分支上不写看板);看Nightly tiers (1/2)里 showcase 那一腿的53 passed。.github/workflows/**、scripts/pm/**),请批准后由席位落地。What changes
Retired (deleted):
.github/workflows/coverage-nightly.yml(Spec Coverage, nightly). Its only product was acoverage-reportartifact; nothing reads it.packages/spec'stest:coveragescript stays as an on-demand developer command (it is not acheck:*gate and no workflow calls it after this PR)..github/workflows/engine-split-metric.yml(Engine Split Metric, weekly, report-only). The ADR-0076 D7 metric script stays inscripts/, unwired from any schedule:scripts/check-engine-split-ratio.mjsruns on demand (its header now says so), and its--self-teststays wired inlint.yml, so the instrument stays correct while unrun. Keeping it means ADR-0076 still names a script that exists; its sentence naming the deleted workflow needs a one-line note, which is a separate governed PR (this one does not touchdocs/adr/**)..github/workflows/showcase-smoke.yml(Showcase Smoke, nightly).Showcase smoke moved under Nightly Tiers:
examples/app-showcase/test/showcase-smoke.live.test.ts. The*.live.test.*name puts it in the nightlylivetier (scripts/nightly-tiers.mjs), so no pull request or merge-queue run collects it. It does not restate any assertion: it runsplaywright testwith the package's ownplaywright.config.ts(all three specs undere2e/: the 49 nav surfaces, the ADR-0085 detail shapes, the bulk capability gate), streams thelistreporter to stdout for the stall guard, and passes only when Playwright's JSON report has no failing test, no run-level error, and at least one test ran. A red names each failing spec (file › title) and, for a whole-run red, says to read it as environment first.examples/app-showcase/vitest.config.tsreadsOS_TEST_TIERSthroughscripts/nightly-tiers.mjs(readTierMode,isNightlyTierFile, imported, not re-spelled): underqueuethe tier files are excluded by exact path and the default include is unchanged; undernightlythey are the include.turbo.json's@objectstack/example-showcase#testalready hashedOS_TEST_TIERS; it now also listsscripts/nightly-tiers.mjs(+.d.mts) as inputs, as@objectstack/cli#testdoes..github/workflows/test-nightly-tiers.yml:@objectstack/example-showcaseonly,pnpm console:buildandplaywright install --with-deps chromium(the two prerequisites the retired workflow had).continue-on-error, so a failed Console build cannot take the shard's CLI slice down with it; the smoke then fails as a whole-run red and the night still files a card.examples/app-showcase/test-results/,always(),if-no-files-found: ignore), replacing the retired workflow's two diagnostics uploads.for LEG in $SLICES __whole__), with a comment on why it differs from ci.yml here: the loop stops at the first red leg, and the cheap whole package (the smoke) must not stop the shard's slice of the CLI e2e tier.Pins and readers updated:
scripts/check-stall-guard-budget.mjs: self-test battery 10 registers one case per real (workflow, job) with a guarded step;coverage-nightly's job was one, so its floor goes 13 → 12 with a comment saying why.scripts/pm/dispatch-gates.self-test.mjs: the live-tree case that requiredscripts/check-engine-split-ratio.mjs --days 90in workflow text drops that key (same treatment ascheck-prerelease-pin-watch.mjs --verbosewhen its workflow left); the fixture row quoting it stays.docs/qa/platform-checklist/areas/platform-core.json: the showcase item'ssourcenames the live test andtest-nightly-tiers.ymlinstead of the deleted workflow.half-state-patrol.yml,shard-timings-refresh.ymlandexamples/app-showcase/playwright.config.ts.Readers grepped (file names, workflow names, job names, artifact names,
test:smoke,test:coverage):dependabot.yml, the required-context set, the aggregator roster,check:self-test-wiredandscripts/ci/scheduled-full-run.mjshold none of the three.scheduled-full-run.mjsuses'Spec Coverage'only as an example of a name outside its map, which stays true.Tests
Local, on this branch (worktree
objectstack-issue-26445), closure built withpnpm turbo run build --filter=@objectstack/example-showcase^...andpnpm console:build:OS_TEST_TIERS=nightly vitest runinexamples/app-showcase, Chromium from/opt/pw-browsers):53 passed (2.3m)from Playwright,Test Files 1 passed (1),Tests 1 passed (1), at0d08883a.scripts/ablation-replace.mjsinjected a failure into the Task Board surface only (anchor 1 → 0, blobcf29f07379cd→26b53aa6a54e). Result: Playwright52 passed, Task Board failed twice (with its retry), and the vitest test failed with1 of 53 showcase smoke test(s) failed, 0 run-level error(s)namingshowcase-smoke.spec.ts › surface renders cleanly: Task Board. Restored: blob equals HEAD,git diff HEADempty.NODE_ENV=test, which disarms the dev-admin seed, so global setup's sign-in got 401 (the wrapper now drops vitest's worker env); a randomly picked port that was busy madeserve --devshift one port up while Playwright waited on the original until its 180 s timeout (the wrapper now takes a port from the OS).pnpm --filter @objectstack/example-showcase test→Test Files 39 passed (39),Tests 484 passed (484)(the live file is not collected).pnpm --filter @objectstack/example-showcase typecheckexit 0.node scripts/nightly-tiers.mjs --check:@objectstack/example-showcase owns 1 nightly-tier file(s); vitest collects 39 under queue, 1 under nightly; CLI unchanged (512 / 85).OS_TEST_TIERS=bogusis refused by the config.--packages→partition-test-shards.mjs --shard k/2): shard 1 =@objectstack/cli 1/2+@objectstack/example-showcase(kept whole, "not the run's floor"), shard 2 =@objectstack/cli 2/2.nightly-tiers.mjs --self-testandpartition-test-shards.mjs --self-testexit 0.Acceptance notes
test-nightly-tiers.ymlis in its ownpull_requestpaths filter, so this PR runs Nightly Tiers on a hosted runner (branch runs never write to the board). That run is the first reading of the prepare step and the smoke under turbo's strict env..github/workflows/ci.ymlL810 still says "coverage-nightly workflow" in a comment. Left as dated readings:docs-deploy.yml(cron-hour survey "on the day this landed"),lint.ymlL1495 (a 2026-08-21 measurement),scripts/docs-audit/README.md,check-pnpm-acquisition.mjs,check-node-version.mjs,check-stall-guard-budget.mjs's "measured when this landed" line, anddispatch-gates.mjscomments that cite the old workflows as history..github/workflows/engine-split-metric.yml; a one-line note that the script now runs on demand.test:smoke(turbo) and the package'stest:smokestay:pnpm test:smokeis still how a person runs the suite by hand, and the QA checklist items cite it.Verification
Gate list derived with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackat the final head: 86 commands at57f8caa3, each run with its exit code captured before any pipe: 86 exit 0.dispatch-gates --ran: "86 derived famil(ies) accounted for — 86 run, 0 NOT-MEASURED (a DERIVED zero)". Two were red on the way and are fixed in this PR:check:stall-guard-budget(battery 10 floor, see above) andcheck:pm-dispatch-gates(1 of 1935 fast-tier cases, the engine split live key). The dispatch-gates slow tier (node scripts/pm/check-dispatch-gates.mjs --slow, push/schedule only in CI) also ran:✓ dispatch-gates self-test: 2200 cases pass, exit 0. After mergingorigin/main(2094edeb, which brought the shard-matrix reader intopartition-test-shards.mjs) the derivation is unchanged (86) and the overlapping gates were re-run:partition-test-shards.mjs --self-test,nightly-tiers.mjs --self-test,nightly-tiers.mjs --checkall exit 0, and the nightly partition is unchanged. Families CI runs (Lint & Repo Gates, TypeScript Type Check, Test Core, Build Core, the UI lanes, Nightly Tiers on this PR) are read from this PR's check-runs.Changeset: none.
skip-changeset— workflows, root scripts,turbo.jsonand the private@objectstack/example-showcasepublish nothing.Human Minimum
packages/specholds no runtime logic. (not touched)pnpm lintpasses (CI).main, one pull request.skip-changeset.packages/specnot touched.content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_01ADHkmTHHuvZqTM7XKWfv8Q
Generated by Claude Code