Repository navigation
Commit edecd44
test(showcase): the boot-splash wait sees both English lines and the data-boot-splash marker (#23030)
Fixes #22992
Clause-②: no
Dispatched by the `domain:devx` seat 1 PM (claim comment 6122220922 on
#22992); implementing session
`https://claude.ai/code/session_012yK1ddAdAqfzwigRHZq3r2`.
## What changes
`examples/app-showcase/e2e/showcase-smoke.spec.ts` keyed the boot splash
on `/Initializing application/i`, in two places: the render wait and the
deadline assertion. objectui `54159d3` (objectstack-ai/objectui#12203)
changes that line to "Opening your console…". It also shows the line in
the browser's language, and leaves it out until that language's
catalogue lands. So the first `.objectui-sha` bump past that commit
would turn every surface check into a silent pass.
A surface now counts as still on the splash when EITHER holds:
- **Marker half.** `[data-boot-splash]` is in the page (a
`page.locator(...).count()`). From objectui `54159d3` on, the splash
root carries this attribute in every state (loading, `message`, error).
It is the only language-independent sign.
- **Line half.** The main element's text matches `/Initializing
application|Opening your console/i`. Today's pin `088e0f70` has no
marker, so this is the half that holds there.
Both uses follow:
- **The wait.** It reads the marker count, then the text, and returns
only when the text is non-empty, the count is 0, and the line does not
match. The marker is read first, so a splash that leaves between the two
reads errs toward "not yet".
- **The deadline assertion.** It asserts both from the wait's last
sample: the marker count is 0, with the message "never got past the boot
splash ([data-boot-splash] still in the page)", and the text does not
match the line.
`docs/qa/platform-checklist/areas/platform-core.json`, item
`platform-core.nav-surfaces-render`:
- The acceptance clause and the boot-splash negative now name the marker
and both English lines, the same as the spec.
- `revision` 5 → 6, with a history entry. No gate pins the clause text.
`check-platform-checklist.mjs` only requires `revision` to equal the
last history entry, and the ablation below shows it reads this item.
⛔ No `.objectui-sha` bump and no objectui edit.
## Both halves, proven on today's pin without the bump
**No regression on `088e0f70`.** I read both objectui commits in a
scratch bare clone:
- `git grep data-boot-splash` at `088e0f70`: exit 1. Control at
`54159d3`: exit 0, with hits in `LoadingScreen.tsx` and
`e2e/smoke.spec.ts`.
- `git grep -i 'Opening your console'` at `088e0f70`: exit 1. The same
grep over this repository at HEAD: exit 1.
- `en.ts` `console.initializing` reads `Initializing application…` at
`088e0f70` and `Opening your console…` at `54159d3`.
So on today's pin the marker half never fires, and the new alternative
matches no text the pinned console or the showcase can draw. For an en
run, the predicate reduces to the old one.
**String level.** I took the regex literal out of the committed file
(HEAD) and the pre-fix file:
| sample | new | old |
|---|---|---|
| `088e0f70` en: "Initializing application…" | match | match |
| `54159d3` en: "Opening your console…" | match | miss |
| `54159d3` zh: 「正在打开你的控制台…」 | miss | miss |
| `54159d3` line absent: product name only | miss | miss |
| a rendered surface | miss | miss |
The two misses on splash rows are why the marker half exists.
**The real spec against static fixtures.** I ran the committed spec
file, unmodified, under a scratch Playwright config:
- The target was a static HTTP server, one port per fixture.
- No globalSetup, no storageState, no backend.
- Surface `Capability Map` only, Chromium `/opt/pw-browsers/chromium`.
Each fixture is a main element holding one shape the console can be in.
| fixture | HEAD `8706217be` | pre-fix (`9432bac07` blob, byte-identical
copy) |
|---|---|---|
| rendered content | pass (0.5 s) | pass |
| `088e0f70` splash, "Initializing application…", no marker | **fail**,
line assertion | fail, line assertion |
| "Opening your console…", no marker | **fail**, line assertion | **pass
(0.6 s): silent pass** |
| `54159d3` splash, en line + marker | **fail**, marker assertion |
**pass (0.5 s): silent pass** |
| `54159d3` splash, zh line + marker | **fail**, marker assertion |
**pass (0.6 s): silent pass** |
| `54159d3` splash, empty line + marker | **fail**, marker assertion |
**pass (0.5 s): silent pass** |
| old-line splash, replaced by content at 2 s | pass (2.4 s) | pass (2.4
s) |
| marker splash (empty line), replaced by content at 2 s | pass (2.3 s):
waited past it | pass (**0.4 s**): returned on the splash |
HEAD: 5 failed, 3 passed. Pre-fix: 1 failed, 7 passed. The failing HEAD
rows each fail at the 25 s budget with the message named in the table.
## Ablations
Each ablation was one in-tree mutation of the committed file through
`scripts/ablation-replace.mjs`, in WRAP mode. Each time the anchor hit
once, the blob changed, an on-disk count was printed before the run, and
the file was restored to the HEAD blob `cf29f0737` with an empty `git
diff HEAD`.
- **Marker half off.** The `count()` read was replaced by `splashMarkers
= 0;`. 3 failed, 5 passed:
- the zh and empty-line `54159d3` splashes pass silently (0.26 s / 0.30
s);
- the marker-then-content fixture returns on the splash (0.34 s);
- the en `54159d3` splash is still caught, by the line.
- **Line half off: the marker alone.** `BOOT_SPLASH_LINE` was replaced
by a never-matching `/(?!)/`. 3 failed, 5 passed:
- **the `088e0f70` splash passes silently (0.66 s);**
- the old-line-then-content fixture returns on the splash (0.48 s).
This is the measured reason the marker never goes in alone on this pin.
- **Checklist revision.** `revision` 6 → 5 on
`platform-core.nav-surfaces-render`. `check-platform-checklist.mjs` goes
from 8 problems to 9, and the new one names this item: "revision (5)
must equal the last history entry's revision (6)".
## Not measured
**The 49-surface e2e on today's pin: NOT MEASURED.** This container has
no vendored console: `packages/console/dist` is absent, and so is
`.cache/objectui-*`. Producing one means `scripts/build-console.sh`: a
clone, install and turbo build of objectui's console closure at
`088e0f70`. That comes on top of the showcase closure build, on a shared
4-core box with a ~10-minute foreground cap. The nightly /
`workflow_dispatch` `Showcase Smoke` workflow is the run that measures
it. The equivalence argument above stands in for it on today's pin.
## Tests and gates
All at HEAD `8706217be`.
- `pnpm turbo run build --filter='@objectstack/example-showcase^...'
--concurrency=2`: 60/60 tasks, exit 0.
- `pnpm --filter @objectstack/example-showcase run typecheck`: exit 0.
`tsc --listFiles` includes `e2e/showcase-smoke.spec.ts` (count 1).
- `pnpm --filter @objectstack/example-showcase exec vitest run
--maxWorkers=2`: 33 files, 408 passed, 1 skipped. vitest excludes
`e2e/**`, so this suite cannot see the change; it was run as the
package's own suite.
- ESLint (`--no-inline-config --format json`) on the 2 changed files:
- the spec: 0 errors, 0 warnings;
- `platform-core.json`: ignored, because the config's `files` globs
cover JS/TS extensions only.
This narrowing is a measurement, not a skip. The config enables no
type-aware linting (the printed config has no `parserOptions.project`).
The spec's 4 rules read only the file's own AST, and the config's only
disk reads are two ignore baselines this diff does not touch. So the
diff cannot move the verdict on any file it does not touch. The
repo-wide scan is CI's.
- Gates: the 42 commands `node scripts/pm/dispatch-gates.mjs --commands
--repo objectstack-ai/objectstack` derives from this diff, the same list
as the dispatch. Run after the closure build, each with its exit
captured before any pipe:
- **41 exit 0.**
- **`pnpm check:platform-checklist` exits 1.** Its 8 problems are
byte-identical to a run at the base `9432bac07`; see the acceptance
notes.
- `check:dual-build-cjs-loads` answered PREREQUISITE NOT MET on a first
pass, because eight packages outside the showcase closure had no
`dist/`. I built them (a turbo cache hit), re-ran it, and it measured:
exit 0, 107 entries.
- `dispatch-gates --ran`: "42 derived, 42 run, 0 NOT-MEASURED, 0 UNRUN",
exit 0.
## Changeset
None: `skip-changeset`. `examples/app-showcase` is a private package,
and `docs/qa/` ships in no package.
## Acceptance notes
- The `Opening your console` alternative covers no objectui commit that
the marker does not also cover. `54159d3` is a single-parent squash that
brought the new line and the marker together. Its parent `ddc2d8e3` has
neither: both greps exit 1. The control at the same commit,
"Initializing application" in `en.ts`, exits 0. The alternative is kept
as triage graded it, as the required half; on any real pin it is
redundant with the marker, never harmful.
- On today's pin a non-`en` run's splash reads 「正在初始化应用程序…」 (zh at
`088e0f70`), and no English pattern matches it. The smoke runs
Playwright's `Desktop Chrome` device at its default locale, so CI does
not reach this. It closes with the bump, through the marker.
- `pnpm check:platform-checklist` is red on `main` at `9432bac07`, with
8 problems in `access-security.json`, `attachments-storage.json` and
`search.json`: absent symbol anchors, and one floor loss. Its output is
byte-identical on the base and on this branch, and this diff adds
nothing to it. The gate is not in per-PR CI (maintainer decision,
`lint.yml` NOTE). Its reporting channel is
`.github/workflows/platform-checklist-watchdog.yml`.
---
_Generated by [Claude
Code](https://claude.ai/code/session_012yK1ddAdAqfzwigRHZq3r2)_
Co-authored-by: Claude <noreply@anthropic.com>1 parent 8f5354b commit edecd44
2 files changed
Lines changed: 42 additions & 12 deletions
File tree
- docs/qa/platform-checklist/areas
- examples/app-showcase/e2e
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
250 | 250 | | |
251 | 251 | | |
252 | 252 | | |
253 | | - | |
| 253 | + | |
254 | 254 | | |
255 | 255 | | |
256 | 256 | | |
| |||
271 | 271 | | |
272 | 272 | | |
273 | 273 | | |
274 | | - | |
| 274 | + | |
275 | 275 | | |
276 | 276 | | |
277 | 277 | | |
| |||
297 | 297 | | |
298 | 298 | | |
299 | 299 | | |
300 | | - | |
| 300 | + | |
301 | 301 | | |
302 | 302 | | |
303 | 303 | | |
| |||
319 | 319 | | |
320 | 320 | | |
321 | 321 | | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
322 | 328 | | |
323 | 329 | | |
324 | 330 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
85 | 85 | | |
86 | 86 | | |
87 | 87 | | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
94 | 109 | | |
95 | | - | |
| 110 | + | |
| 111 | + | |
96 | 112 | | |
97 | 113 | | |
98 | 114 | | |
| |||
149 | 165 | | |
150 | 166 | | |
151 | 167 | | |
| 168 | + | |
| 169 | + | |
152 | 170 | | |
| 171 | + | |
153 | 172 | | |
| 173 | + | |
154 | 174 | | |
155 | | - | |
| 175 | + | |
156 | 176 | | |
157 | 177 | | |
158 | 178 | | |
| |||
181 | 201 | | |
182 | 202 | | |
183 | 203 | | |
184 | | - | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
185 | 209 | | |
186 | 210 | | |
187 | 211 | | |
| |||
0 commit comments