Skip to content

test(showcase): the boot-splash wait sees both English lines and the data-boot-splash marker - #23030

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-22992-showcase-boot-splash
Oct 12, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-22992-showcase-boot-splash

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

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

…data-boot-splash marker

The showcase smoke's render wait and its deadline assertion keyed the boot
splash on /Initializing application/i. objectui 54159d3 changes that line
to "Opening your console…", follows the browser's language, and leaves it
out until the 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 the language-independent
[data-boot-splash] marker is in the page OR main's text matches
/Initializing application|Opening your console/i. Both halves stay: today's
pin (088e0f70) has no marker, so the line is the half that holds there.

The platform-core.nav-surfaces-render checklist clause and negative name
the two lines and the marker the same way (revision 5 -> 6).

Claude-Session: https://claude.ai/code/session_012yK1ddAdAqfzwigRHZq3r2
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 12, 2026
@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 12, 2026 11:08
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 12, 2026 11:08
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 12, 2026
Merged via the queue into main with commit edecd44 Oct 12, 2026
38 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-22992-showcase-boot-splash branch October 12, 2026 11:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

2 participants