Repository navigation
Adapt tablet navigation to the measured workspace - #288
Conversation
|
Review: Looks good (with follow-ups) Checked in headless Chromium against this branch (fake GitHub, 375 to 1440). Measured (fresh profile, split mode)
Findings
Recommendation on collapsing Chat at 1024-1197 |
|
Adopted the review recommendation. Chat stays open; the inline Projects sidebar now appears only at 1198px and up (derived as full Chat + document measure + gutter + sidebar minimum), below that the drawer is used. From 888 to 947px Chat narrows toward its 304px minimum so the document keeps 560px. Chat is stored only after an explicit toggle, under a new key. Focus moves to the document when a resize hides the focused control. The PR body has the width-to-layout table and new screenshots. CI: e2e and container pass. "format, lint, types, tests" fails only on the design-contract hashes for |
# Conflicts: # e2e/responsive-workspace.e2e.ts
- Without a Planner the composer reads "Message the room" (#294), so the archive and reconnect specs from #280 and #297 look for that placeholder. - Use the renamed sidebar and Add project labels from #283 and #286, scoping Add project to the Projects sidebar now that the empty state shares it. - Archived documents say "Archived" in the header (#280). - A touch tablet opens with the sidebar collapsed (#288); the tap spec opens it first and checks focus only when the sidebar is not an overlay. - A Planner-addressed message renders without its @chopin mention. Assistant-model: Claude Opus 5.5 Assistant-workflow: inline Assistant-verification: playwright e2e passed: affected specs, 116 + 24 passed after fixes Co-authored-by: Alex Lavaee <lavaman131@github.com>
|
PR babysitter could not rebase this branch cleanly onto main. The branch is unchanged. Please resolve the rebase conflict locally; automation will try again after the branch changes. |
This comment has been minimized.
This comment has been minimized.
|
PR babysitter could not rebase this branch cleanly onto main. The branch is unchanged. Please resolve the rebase conflict locally; automation will try again after the branch changes. |
|
CI babysitter rechecked the current failed I did not queue a commit from this runner because
|
|
PR babysitter could not rebase this branch cleanly onto main. The branch is unchanged. Please resolve the rebase conflict locally; automation will try again after the branch changes. |
|
PR babysitter could not rebase this branch cleanly onto main. The branch is unchanged. Please resolve the rebase conflict locally; automation will try again after the branch changes. |
|
@copilot < 888 is too large as the breakpoint. make it 728 |
Lowered the compact breakpoint to 728px and updated the boundary/unit/E2E expectations. Commit: |
0524873 to
63b0bbb
Compare
63b0bbb to
3e0b752
Compare
3e0b752 to
f4a18b7
Compare
Projects uses a drawer below 1198px. The workspace retains main’s measured 700px frame boundary, 450px document floor, and flexible Chat resizing.
Chat opens by default until a person makes an explicit choice. The new storage key ignores legacy values, which could not distinguish automatic closures from manual choices. Older manual closes must be chosen again to save a fresh preference. Child documents inherit the parent’s preference without saving their own; resizing recovers focus from hidden controls. Integration retains current connection status, Count motion, and shared dismissal.
CI corrections preserve the safe-area header assertion at the new navigation breakpoint and keep the touch-row test’s original persistent-rail setup above 1198px, suppressing delegated navigation as intended. A long description card exposed fractional rounding in offsetHeight; measuring the real browser bounds preserves its strict 8px viewport margin.
Local checks/types, 534 web tests before the final tooltip adjustment, 47 focused tests, and both failing browser regressions pass. All 59 navigation/workspace/activity and 11 child-document browser cases pass. The added child-chrome fixture uses the new explicit-choice key; the old-key rejection fixture stays unchanged. Published head
f4a18b74awaits all three required GitHub checks. A temporary local config excludes another session’s occupied fake-MCP port; normal required CI retains the full harness.Original proposal and historical viewport-layout screenshots
Why
At 768×1024 the workspace used the split layout with Chat taking about half the width, leaving a ~380px document, narrower than on a phone. The compact layout only began below 500px, and the inline Projects sidebar appeared at 1024px even when that left the document at ~386px. Chat is central, so Chat should not be what yields.
What changed
min(chatWidth, max(304px, 100vw - 584px))).NAVIGATION_INLINE_MINis derived as full-width Chat + document measure + gutter + sidebar minimum = 1198px. Below that the existing drawer is used. The two matching media queries innavigation.cssmoved from 1024/1023 to 1198/1197.chopin:pane:chat:choice), because the old key held an auto-writtentruefor everyone.body.workspace-measure.tsso navigation does not pull the workspace model into the initial bundle (the build enforces a JavaScript budget).Screenshots
Before (left, main) / after (right).
768×1024:

900×1000:

1024×768:

1180×820:

At 1280 and 1440 the layout is unchanged from main.
Testing
bun test apps/web/srcpasses (467);bun run typespasses;bun run buildis under the JavaScript budget.Notes for review
Needs a design-contract review
bun run cifails only onapps/web/src/workspace.tsx(dynamic-owner exceptions inscripts/design-contract/exceptions/dynamic-web.json): line numbers shifted becauseCHAT_PANEmoved out and hook code changed. No class names changed; the Chat pane's inlinewidthstyle now uses amin()expression. New file sha256:d8b33bd03b8a9793fc520f69f5785ce4f171444bb97b18997a5246f95f15d49e.🤖 Generated with Claude Code