Repository navigation
Commit 65b4920
test(ui): run the kept Console live specs nightly; delete the stale and duplicated ones (#27294)
<!-- claude-projects-attribution: {"github_login":"os-warren"} -->
_Requested by **Warren** · [project
thread](https://claude.ai/code/project/chan_01U5RdnAAmkSQmZbqh6FtqZ8?thread=cmsg_01U5RdnAAmkSQmZbqh6FtqZ8MogRN1CAWpndKB1euF4K8n)_
Fixes #25914
Clause-②: no
Metadata-protocol: none
## 维护者速读
- 改了什么:18 个不在任何 CI 里跑的 Console live spec 逐个实跑;15 个绿的进 Nightly Tiers(一个
vitest 包装 + `ui/package.json` 一行脚本),删掉 2 个过时的红 spec 和 1 个与 showcase 夜间
smoke 重复的 spec,并改正引用它们的检查单条目。
- 为什么改:裁决 Q3 B:过时的删,其余接入 Nightly Tiers,红了由该 job 的 report 步骤自动建卡;MSW
那条空测试已被 #26032 删除,这里顺手去掉它留下的 MSW 报错豁免。
- 风险与回滚:只动测试和检查单,不改产品代码,也不碰 4 个必跑 spec 和 `Live E2E UI` job;夜间 showcase
分片多约 5 分钟;回滚即 revert 本 PR。
- 先看:`examples/app-showcase/test/console-live-specs.live.test.ts`,以及下面的逐
spec 表。
- 两分钟验证:`pnpm --dir ui run test:e2e:live:nightly --list`,预期列出 15 个文件、25
个用例。
- 需要你做的:无,席位落地。
## What changes
Each of the 18 live specs outside `test:e2e:live:ci` was run alone
against the workspace showcase backend
(`ui/e2e/live/ci/start-backend.sh`, the boot the required job uses) at
`origin/main` `1e8e5296`. Both reds were run a second time and failed
the same way.
| Spec | Result | Outcome |
|:--|:--|:--|
| `cascading-options` | 2 passed | kept, nightly |
| `declared-sharing-rules-reach-13091` | 1 passed | kept, nightly |
| `detail-related-list` | failed: `waitForURL(/record/)` timeout |
deleted, stale |
| `field-conditional-rules` | 1 passed | kept, nightly |
| `form-view-subforms` | 1 passed | kept, nightly |
| `grid-conditional-rules` | 1 passed | kept, nightly |
| `grid-file-upload` | 1 passed | kept, nightly |
| `grid-parent-rules` | 1 passed | kept, nightly |
| `inline-edit-polish-2572` | 1 passed | kept, nightly |
| `list-row-action-cel` | 1 passed | kept, nightly |
| `record-history-display` | 1 passed | kept, nightly |
| `required-when-submit` | 1 passed | kept, nightly |
| `showcase-smoke` | 29 passed (104 s) | deleted, duplicate |
| `studio-editor` | 2 passed | kept, nightly |
| `studio-object-designer` | 4 passed | kept, nightly |
| `studio-record-page` | failed: `blocks.length` 0 | deleted, stale |
| `summary-rollup` | 2 passed | kept, nightly |
| `user-filters` | 5 passed | kept, nightly |
- **Wiring (route A, amendment 6470826683), not Tier H.**
- `ui/package.json` gains one script, `test:e2e:live:nightly`, that
lists the 15 kept specs.
- `examples/app-showcase/test/console-live-specs.live.test.ts` is a
`*.live.test.ts` file, so Nightly Tiers already selects it in the
showcase shard, which builds the Console and installs Chromium. Its
report step files a card on red.
- The wrapper follows `showcase-smoke.live.test.ts`:
- It boots the backend with `start-backend.sh`.
- It builds the Console with `VITE_BASE_PATH=/` into a scratch dir and
serves it with `vite preview` plus `DEV_PROXY_TARGET`. The specs `goto`
root `/apps/...`, which neither the default `./` base nor the
`/_console` copy serves.
- It runs the script with a JSON reporter and fails, naming every
failing spec, unless all of them passed.
- It stops the preview and the backend by PID in `finally`.
- No `.github/workflows/**` edit, and `ci.yml` and `ui/.github/**` are
untouched.
- **`showcase-smoke` is a duplicate.**
`examples/app-showcase/e2e/showcase-smoke.spec.ts` already runs nightly
through `showcase-smoke.live.test.ts`.
- Every one of the deleted spec's 29 surface paths is in the kept spec,
which has 49 (`comm -23` of the two path lists is empty; one label
changed from "Settings (preference)" to "Settings" on the same path).
- The kept spec makes each of the deleted spec's four assertions: no
uncaught page error, no leaked "no actions configured" placeholder,
non-empty main content, and a chart SVG with width and height above 0.
It is stricter on two: it requires a chart width above 200, and it
refuses a surface that is still on the boot splash.
- **`studio-record-page` is stale.** It expects a record page created in
Studio to come back with regions copied from the default layout. Today a
new record page is created slotted with no copied regions, by design, so
`blocks.length` is 0.
- **`detail-related-list` is stale.** It expects a row click to navigate
to `/record/`. Today the row's name link opens the record drawer, by
design. The related-list behaviours it also touched are pinned by unit
tests: `deriveRelatedLists.test.ts`, `buildDefaultPageSchema.test.ts`
and `RelatedList.columnIdentityAccessor.test.tsx`.
- **The MSW clause.** The vacuous MSW test in
`ui/e2e/console-rendering.spec.ts` was already deleted by #26032, so
that part of the premise no longer holds. What was left was four ignore
entries (`mockServiceWorker`, `MSW`, `Mock Service Worker`, `[MSW]`)
that still excused MSW console errors. They are removed: the Console
ships no mock service worker, so an MSW error is now a real error. No
`msw` declaration and no `public/mockServiceWorker.js` are left in the
tree.
- **Platform checklist.** Every line that cited a deleted spec was
repointed or dropped. Each item gets a revision bump and a `history`
entry dated 2026-10-28, with ref #25914.
| Item | Revision | Line | Edit |
|:--|:--|:--|:--|
| `platform-core.metadata-authoring-roundtrip` | 6→7 |
acceptance[2].verify | now says the PUT is hand-driven, with no live
spec pinning it |
| `platform-core.metadata-authoring-roundtrip` | 6→7 | automated.ref |
the studio-record-page half is dropped |
| `records-forms.related-list-server-pagination` | 9→10 | verify
parenthetical | dropped |
| `records-forms.related-list-server-pagination` | 9→10 | ref | the
detail-related-list sentence is dropped |
| `records-forms.related-list-server-pagination` | 9→10 | live browser
legs | acceptance[2] joins them |
| `records-forms.related-list-server-pagination` | 9→10 | history |
cites the three unit pins above |
| `studio-authoring.record-page-roundtrip` | 9→10 | verify parenthetical
| dropped |
| `studio-authoring.record-page-roundtrip` | 9→10 | ref | keeps only
`studio-editor`, now nightly, which covers none of acceptance[0], [2] or
[3] |
| `studio-authoring.record-page-roundtrip` | 9→10 | source line |
dropped |
| `studio-authoring.custom-page-render-and-blocks` | 1→2 | knownGaps /
source | repointed to
`examples/app-showcase/e2e/showcase-smoke.spec.ts`; that nightly smoke
includes the pages named |
| `studio-authoring.page-variables-and-actions` | 1→2 | knownGaps /
source | same repoint |
| `studio-authoring.custom-page-source-tiers` | 4→5 | knownGaps / source
| same repoint |
- **Out of scope, flagged for the ledger owner.** `platform-core`
acceptance[2] and `studio-authoring.record-page-roundtrip` acceptance[0]
still ask for regions "seeded from the default layout". That now holds
only for `full` pages. The two history entries say so; the acceptance
text is left as it is.
## Why
Ruling Q3 B (6435339772): the stale specs are deleted and the rest are
wired into Nightly Tiers, so a red files a card. The other clauses of
the card are already closed:
- Q1 A and ruling D were landed by the devx lane (#27167, #27212 via
#27154).
- The MSW test went in #26032.
This PR closes the last one, hence `Fixes`.
## Verification
- The 18-spec measurement held the verify lock for 4m45s with `VERDICT
command-exit 0`. The per-spec results are in the table above.
- The wrapper ran end to end: `OS_TEST_TIERS=nightly pnpm --filter
@objectstack/example-showcase exec vitest run
test/console-live-specs.live.test.ts` gave Playwright 25 passed (1.7
min) and vitest 1 passed. It held the lock for 4m27s with VERDICT 0.
- `ui/e2e/console-rendering.spec.ts` ran in Chromium against a
`/console/` build: 3 passed.
- `node scripts/pm/dispatch-gates.mjs --commands` derived 55 commands at
the merge of `origin/main` `0d45c0e7`. To those I added:
- `pnpm --filter @objectstack/example-showcase typecheck`
- `node scripts/nightly-tiers.mjs --check`
- `node scripts/check-platform-checklist.mjs --changed-from origin/main`
All 58 exited 0. `dispatch-gates --ran`: "55 derived famil(ies)
accounted for — 55 run, 0 NOT-MEASURED".
`check:dts-closure` and `check:dual-build-cjs-loads` exited 1 and 3 on
the first pass for the same reason. Both read built output this worktree
had not built: console `plugin.d.ts`, and the `dist` of 7 packages this
diff does not touch. Each exited 0 after the build of those packages
(`build:plugin` for the console, then `turbo run build`).
- `dispatch-gates --tier`: "no path-derived mandate: the surface hits
none of the 4 declared glob(s)". Changed lines: 514 (+275 / -239), under
the 800 cap.
- This is test and CI only, so it ships no changeset (`skip-changeset`).
## Human Minimum
- [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic.
(No `packages/spec` change.)
- [x] 2. Every name I added uses the casing for its kind.
- [x] 3. No formatter ran; `pnpm lint` passes. (The root eslint, run
over the two changed TypeScript files, exits 0.)
- [x] 4. One issue, one branch off an up-to-date `main`, one pull
request.
- [x] 5. A change that publishes carries a changeset, and both
declaration lines are filled in here and in the changeset. (Nothing
publishes: `skip-changeset`.)
- [x] 6. `packages/spec` touched: its generated artifacts are
regenerated and committed. (Not touched.)
- [x] 7. No hand edits to `content/docs/references/`,
`packages/*/CHANGELOG.md` or `content/docs/releases/`.
- [x] 8. Title, body and comments are in English. (Except the `维护者速读`
block the dispatch order asks for.)
- [x] The *Before Submitting* list in CONTRIBUTING.md is done.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01JQwxbXq8B9svQTRonMmTRf
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 0e205fe commit 65b4920
9 files changed
Lines changed: 275 additions & 239 deletions
File tree
- docs/qa/platform-checklist/areas
- examples/app-showcase/test
- ui
- e2e
- live
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
483 | 483 | | |
484 | 484 | | |
485 | 485 | | |
486 | | - | |
| 486 | + | |
487 | 487 | | |
488 | 488 | | |
489 | 489 | | |
| |||
519 | 519 | | |
520 | 520 | | |
521 | 521 | | |
522 | | - | |
| 522 | + | |
523 | 523 | | |
524 | 524 | | |
525 | 525 | | |
| |||
549 | 549 | | |
550 | 550 | | |
551 | 551 | | |
552 | | - | |
| 552 | + | |
553 | 553 | | |
554 | 554 | | |
555 | 555 | | |
| |||
563 | 563 | | |
564 | 564 | | |
565 | 565 | | |
566 | | - | |
| 566 | + | |
| 567 | + | |
567 | 568 | | |
568 | 569 | | |
569 | 570 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1537 | 1537 | | |
1538 | 1538 | | |
1539 | 1539 | | |
1540 | | - | |
| 1540 | + | |
1541 | 1541 | | |
1542 | 1542 | | |
1543 | 1543 | | |
| |||
1584 | 1584 | | |
1585 | 1585 | | |
1586 | 1586 | | |
1587 | | - | |
| 1587 | + | |
1588 | 1588 | | |
1589 | 1589 | | |
1590 | 1590 | | |
| |||
1616 | 1616 | | |
1617 | 1617 | | |
1618 | 1618 | | |
1619 | | - | |
| 1619 | + | |
1620 | 1620 | | |
1621 | 1621 | | |
1622 | 1622 | | |
| |||
1679 | 1679 | | |
1680 | 1680 | | |
1681 | 1681 | | |
1682 | | - | |
| 1682 | + | |
| 1683 | + | |
1683 | 1684 | | |
1684 | 1685 | | |
1685 | 1686 | | |
| |||
0 commit comments