fix(desktop): hold the launch logo until a surface commits ready content - #5571
Conversation
#5494 removed the pre-mount onboarding prefetch, so AppShell's first commit lands before any data resolves. The launch overlay dismissed on that commit (`#root > *`), then the shell rendered the `.maka-onboarding-loading` skeleton card while the snapshot pull waited on the Host boot gate — the logo and the skeleton were two loading surfaces over the same gap, and the user saw logo → skeleton → app. Collapse them into one: the overlay now fades only when a surface commits `data-maka-content-ready`. The shell sets it once the first snapshot settles (the exact boundary where the skeleton used to disappear), the WorkHub composer sets it at mount, and the handoff dialog and error surface set it immediately since they cannot wait on the data they gate. With the overlay covering the gap, the skeleton card is deleted along with its styles, prop, and smoke-diagnostic selector. The 8s wedged-bundle timeout is unchanged. Generated-by: Devin Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
jackwener
left a comment
There was a problem hiding this comment.
I reviewed 4024c13a770a0a802fd10ca480b1631471851f7d.
No P0–P2.
The launch overlay now fades only when a surface commits data-maka-content-ready. AppShell sets that once isOnboardingLoading clears; WorkHubRoot only mounts on the WorkHub surface, so it cannot dismiss the desktop logo early. The handoff attention dialog and the error surface mark ready immediately. The second skeleton (.maka-onboarding-loading) is gone. The 8s wedged-bundle timeout is unchanged.
Hosted test was still queued at this review. I approved on the code, not on that check.
简体中文
我审查了 4024c13a770a0a802fd10ca480b1631471851f7d。没有 P0–P2。
启动 overlay 等到表面写上 data-maka-content-ready 才褪。AppShell 在 onboarding 加载结束时写;WorkHub 只在自己的 surface 挂载,不会提前关掉桌面 logo。第二个 skeleton 删了。8 秒超时还在。本审查时 hosted test 仍在排队,是按代码批的。
Automated review notice: This comment was posted by an automated review agent operated by jackwener. It is not an independent human review and does not replace one.
The readiness attribute grew a ratcheted file by three tokens; the two `x ? true : undefined` inert props collapse to `x || undefined` for the same value domain, and the ledger is regenerated. Generated-by: Devin Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
chat-message-surface no longer imports Skeleton after the launch loading surface collapsed into the launch overlay. Generated-by: Devin Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Summary
#5494 removed the pre-mount onboarding prefetch, so AppShell's first commit now lands before any data resolves. The
.maka-preloadlogo dismissed on that commit (body:has(#root > *)), and the shell then rendered the.maka-onboarding-loadingskeleton card whileonboarding:getSnapshotwaited behind the Host boot gate — two loading surfaces over the same gap, visible as logo → skeleton card → app.Collapse them into one. The overlay now fades only when a surface commits
data-maka-content-ready:.appFramesets it onceisOnboardingLoadingclears — the exact boundary where the skeleton used to disappear (first snapshot settled, sessions found, or load-error fallback).With the overlay covering the gap,
.maka-onboarding-loadingis deleted along with its styles, prop, and smoke-diagnostic selector. The 8s wedged-bundle timeout is unchanged.notifyRendererReady's comments are corrected: its live job is the crash-recovery reload, not first paint.Refs #5494
Verification
Real Electron launch, CDP screencast on a fresh profile — BEFORE: the logo fades on first commit and a bare skeleton card sits in the chat area until the snapshot lands; AFTER: the logo holds until the settled hero is committed, then fades. The
.maka-onboarding-loadingcard never appears.BEFORE — logo dismisses on first commit, bare skeleton card shows:
launch-before.mp4
AFTER — logo holds until the settled hero commits:
launch-after.mp4
DOM timeline sampled every ~80ms confirms the ordering:
.appFramemounts at ~300ms with the overlay still at opacity 1;data-maka-content-readycommits with the hero at ~980ms; the overlay is hidden by ~1.1s.build:workspace-deps,build(renderer + main + overlay),typecheck— passnode --test dist/main/__tests__— 2770/2770, including a new contract test pinning the selector↔emitter pair and the skeleton's removalnpm run format,npm run lint— cleannpm test, Playwright e2e (no native-boundary behavior changed)AI use
Select exactly one:
Tool(s) and scope: Devin — diagnosis, implementation, regression test, and launch recordings.
Checklist
Does this PR entail a change in behavior?