Repository navigation
Give the split workspace's loading states the two-bar sheet, with no ground header - #536
Conversation
|
Review: Changes needed The visual work holds up. Measured with throttled frame strips (4 Mbps, 150 ms latency) and with the session, chunk and socket held one at a time. From the in-shell skeleton, through the mounted workspace, to the loaded document, nothing moves at 1440 with Chat open (0 px differ), 1440 with Chat closed, 1100, compact 680, 390 desktop-width or the 390 phone. Only content fills in. The pulse is calm (1.5 s alternate to The blockers are the budget and CI.
CI: format/lint/types/tests pass, e2e pass, chopin CLI (both) pass, container fail (budget). |
b1d1fc1 to
5b8c338
Compare
…ground header The desktop document route now paints a workspace skeleton while its code loads: the sheet with its 40px title bar and views bar, the Chat column at its stored width and choice, and the document lines where the mounted editor's preface draws them. It takes the workspace's own layout classes, so the loaded workspace lands on the same geometry; compact keeps its header and tab row. The mounted workspace keeps the lines until the document first arrives on every device, not only phones, instead of an empty editor. The empty workspace and workspace notices no longer reserve the old ground header row in split: their sheet rises to the top margin and clears the floating sidebar trigger as an expanded document does. useWorkspaceLayout, the Chat pane bounds and the stored Chat choice move to small modules so the skeleton can be in the initial bundle without pulling the workspace chunk in; the initial JavaScript budget grows 2 KB raw. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The reviewed dynamic owners in workspace.tsx (SurfaceToggle feedback, Chat pane presence) keep the same data flow; the file only lost the layout hook and Chat pane bounds, which moved to workspace-layout.ts and workspace-sizing.ts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, to main The skeleton no longer needs them in the initial bundle, so the moves to workspace-layout.ts and workspace-sizing.ts, the 2 KB raw budget raise and the design-contract renewal for workspace.tsx all go back. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A container query picks split or compact at the 700px frame workspaceSizing uses, and Chat's width is clamped in CSS from the saved width the skeleton reads, so the skeleton ships as static markup and semantic classes. The notice does the same for its header row. It has equal 8px gutters in compact, and in split it takes the panel radius and raised shadow of the document sheet. The empty workspace is now a notice. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…label Before /api/session the sidebar has not taken its width, so the skeleton would jump when it arrives; the ground stays blank with a status instead. A child route opens as a card over its parent, so it keeps the plain label. The geometry test now holds the session too, and covers the sidebar trigger with Chat open and closed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…essing it in compact Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4ed9e14 to
6ea48ae
Compare
Follow-up from #507. The split workspace has no ground header any more, but its loading and empty states still drew the old layout, so first paint jumped when the real workspace arrived.
What changes
phone-skeleton.css, so it fits the initial bundle:workspaceSizinguses;min(max(250px, 100% - 450px), max(250px, saved));/api/sessionthe ground stays blank and only a status is announced, because the sidebar has not yet taken its width.Bundle
The budget is not raised. The workspace layout hook and sizing helpers stay in the workspace chunk, as on main.
--target buildThe PR adds 967 B raw and 107 B gzip. In Docker that leaves 333 B raw and 28 B gzip of headroom.
The skeleton reads the saved Chat choice and width from
localStoragein the component, not from a boot script inindex.html. A boot-time value would go stale after Chat is resized in-session, and later document opens also show this skeleton.Verification
e2e/workspace-skeleton.e2e.tsholds the session, then the workspace chunk, then the WebSocket.I ran these specs locally against a fake-GitHub server: 6 passed. I also scanned the split/compact threshold: skeleton and workspace switch together between 723 and 724px.
bun run typesandbun run cipass.🤖 Generated with Claude Code