Skip to content

finding(e2e): the boot-continuity probe cannot fail for any gate that decides after a session exists #6569

Description

@claude

Found while implementing #6507 (PR #6565). Recording the measurement, not proposing an implementation.

What is missing

e2e/console-boot-indicator.spec.ts carries the campaign's acceptance bar: after React's first commit, the viewport centre must never stop being covered. It catches the objectui#6378 defect on the three gates #6506 converted, and it passes on a signed-OUT boot.

It cannot be made to fail for any gate that decides after a session exists.#6507 converted seven such gates. Per-site scenarios were built for them and they do not bind.

The measurement

Environment: production apps/console bundle, vite preview, Playwright driving the pre-installed Chromium 141.0.7390.37 at PLAYWRIGHT_BROWSERS_PATH=/opt/pw-browsers via executablePath. The harness runs; the acceptance spec passes 4/4.

Signed-in mock scenarios were built for RequireAiSurface (a runtime serving no agent) and AppContent's no-accessible-app bounce. Both drive cleanly, reach their destinations, and pass. Then:

  • Ablated the fix — replaced all seven RedirectWithSplash elements with a bare Navigate in source, rebuilt. packages/app-shell/dist/console/ConsoleShell.js and AppContent.js confirmed rebuilt; 508 console dist assets fresh. Both scenarios still passed.
  • Added 20x CPU throttling (Emulation.setCPUThrottlingRate), since objectui#6378 measured its window on a throttled profile. Both scenarios still passed.

So the scenarios were deleted rather than committed: an assertion that cannot fail is not coverage.

The diagnosis

Not a missing browser, and not a missing endpoint. The probe treats the pre-React #boot-splash as covering — correctly, it is on screen. On these mocked boots the redirect chain resolves before that indicator is torn down, so at the moment the gate decides there is no blank for the sampler to land in.

A per-site gate that CAN fail therefore needs the window reproduced with the indicator already gone: a slower boot to the decision point, or a fixture that tears the indicator down on React's first commit the way a real cold load does, or a probe that starts sampling from a later anchor.

What is NOT established

  • Whether the window is unreachable in principle on these boots, or only under this fixture's timing. One fixture, two sites.
  • Any rate. Each scenario was run a handful of times, not sampled.
  • Whether the same is true for the other five converted gates; two of them (RootRedirect, AuthenticatedRoute) are not mounted by apps/console at any session state and cannot be reached by this bundle at all.

Reusable material

The endpoint set for a signed-in mock boot was read off a real boot rather than guessed: /api/v1/auth/get-session, /auth/config, /auth/organization/list, /auth/me/localization, /api/v1/ai/agents, /api/v1/meta/{app,object,view,page,report,dashboard,_drafts}, /api/v1/discovery, /api/v1/runtime/config, /api/v1/i18n/{locales,translations}, /api/v1/data/sys_*, /api/v1/approvals/requests.

Standing coverage for the seven gates meanwhile is at the DOM level, and it does bind — 7 of 12 red under the same ablation with all five control cases green: packages/app-shell/src/console/__tests__/bootRedirectCoverage.test.tsx and AppContent.bootRedirectCoverage.test.tsx.


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions