fix(app): every left-nav section changes the main area (0388) - #617
Merged
Conversation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: xNet Test <test@xnet.dev>
The AI chat surface was a `kind: 'panel'` entry in the legacy SURFACES list.
The 0353 unified-nav rewrite kept only lens/route/node sections and made the
bottom island render the tree unconditionally, so every panel surface lost its
entry point — AiChatPanel stayed registered and fully functional with no way in.
Worse, the dock's compact Assistant handed off via setActiveSurface('ai'), which
under unified nav opened nothing and cleared the input: every question typed
into the dock since 0353 was silently discarded.
- add /ai, rendering AiChatPanel in the main area (capped measure)
- add the AI section, so it obeys the one rule this nav is held to:
every primary row changes the main area
- AiChatPanel takes an optional initialPrompt
- the dock now navigates to /ai?q=<question> instead of dropping it
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: xNet Test <test@xnet.dev>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: xNet Test <test@xnet.dev>
Five of eleven sections were kind: 'lens' and only re-filtered the sidebar — in a vertical list of otherwise-navigating rows, a click indistinguishable from a broken button. Two of them (People, Views) had lost real destinations in the 0353 rewrite: /crm and /data still render and were unreachable. A lens is now a destination as well as a filter: - SidebarLens gains `route`; useActivateSection navigates on every branch - people -> /crm and views -> /data recover their pre-0353 surfaces - '/' renders the active projection (Everything / All Documents / Chats), with chats built from the same sidebar sources the tree uses - active state derives from the route, so exactly one row is ever lit and the sidebar can't claim Views while the main area shows Meetings - a route that one lens owns restores that lens on load (/crm -> people) - the startup-surface redirect fires once per session, so navigating to '/' on purpose no longer bounces back out - Analytics is absent unless VITE_TELEMETRY_DASHBOARD is set, rather than present and always dead-ending - Companion, Experiments and Import stop being URL-only - dead route:/today and route:/crm icon keys removed sections.test.ts guards the rule: every section resolves to a destination, and exactly one section is active at any location. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: xNet Test <test@xnet.dev>
SavedView had only Tier-2 auto-generator coverage, and the landing demo profile runs with includeAuto: false — so the Views section of the left nav read "Nothing here yet." in every demo and every fresh workspace. Adds a Tier-1 saved-views seeder (descriptors built with defineSavedViewDescriptor, so they validate like user-authored views) and puts its domain in the landing profile. A test asserts the demo profile covers the schemas the nav has sections for. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: xNet Test <test@xnet.dev>
…388) Unit tests cover the resolution logic; this covers what they can't — that clicking the real row in the real shell repaints the main region. Wired into the required editor-ux lane as its own chromium-only step, since the mobile shell renders no sections. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: xNet Test <test@xnet.dev>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: xNet Test <test@xnet.dev>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: xNet Test <test@xnet.dev>
Contributor
🖼️ UI changes in this PRScreensInteractionsAuto-captured by CI · run. Informational — not a blocking check. |
Three CI failures, all mine: - prettier: two files unformatted - devtools typecheck: mapping defineNodeQueryAST over a heterogeneous schema array collapsed the generic to a union it can't accept, so each descriptor is now built at its own call site - editor-ux: the home heading now names the active lens, and the default lens is All, so six specs waiting on /all documents/i as their shell- neutral readiness gate timed out. The gate matches either heading. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: xNet Test <test@xnet.dev>
Contributor
|
Preview removed for PR #617. |
The electron-parity gate requires every top-level web route to be either COVERED or WAIVED. /ai is waived for the same reason as companion: the desktop renderer has no AI surface wired. home-lens.tsx was never a route — it is the home surface's lens projections — so it moves to components/HomeLens.tsx rather than being waived as a route it isn't. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: xNet Test <test@xnet.dev>
The file-attachments work (#614) added BlobService raw-blob / thumbnail / transfer methods and the BlobTransferQueue class without regenerating the public API report, so the api-report gate was red on main. This records that surface. Purely additive — no exports removed. Not part of 0388; folded in here to unblock the required typecheck lane (the drift pre-existed on main and blocks any PR). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: xNet Test <test@xnet.dev>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.







Implements exploration 0388.
The report
Accurate, and not a rendering bug. Five of eleven sections were
kind: 'lens', and the lens branch ofuseActivateSectioncalledsetActiveLens(...)and returned — nonavigate().activeLensIdwas read only inside the sidebar; nothing in the main region ever subscribed to it.Two of those five were regressions from the 0353 nav rewrite: People used to be a route to
/crm, and Views' natural home/datalost its entry. Both routes still rendered fine — they were simply unreachable from the nav.Two further findings while auditing:
kind: 'panel'surface class lost its entry point in 0353. AI was the casualty with no successor.setActiveSurface('ai')and cleared the input. Under unified nav nothing readsactiveSurface, so every question typed into the dock since 0353 was silently destroyed.The rule
Every primary nav row changes the main area. No exceptions.
A lens is now a destination as well as a filter —
SidebarLenscarries aroute, so the mapping lives with the lens instead of in a switch./, which renders that projection/crm— restored/data— restored/ai— restoredVITE_TELEMETRY_DASHBOARDis setActive state now derives from the route, so exactly one row is ever lit — the old predicate could light none (a non-pinned lens) or leave the sidebar claiming "Views" while the main area showed Meetings. A route owned by one lens restores that lens on load, so reloading
/crmcomes back with People selected.Two supporting fixes: the 0166 startup-surface redirect now fires once per session (otherwise clicking Docs would bounce straight back out of
/), andSavedViewgets a Tier-1 seeder — it had only Tier-2 coverage, which the demo profile skips, so Views read "Nothing here yet." on first contact.Verification
apps/web/src/workbench/sidebar/sections.test.ts— 12 tests; fails if a section is added without a destination, or if any location lights more than one rowtests/e2e/src/left-nav.spec.ts— 5 tests clicking every section in the real shell, wired into the requirededitor-uxlane as a chromium-only step (the mobile shell renders no sections)pnpm lint0 errors?demo=1workspace, Analytics absent, reload on/crmrestores the People lens,/finance→ Docs returns home without strandingKnown-adjacent, deliberately out of scope
/tasksstill renders its ownVIEWS / PROJECTSnav inside the main area — the second-nav pattern 0353 set out to remove. Tracked as a follow-up rather than smuggled into this change.MobileShellrenders no sections at all, so none of this reaches mobile; noted as an open question in the exploration.🤖 Generated with Claude Code