Skip to content

catalog: workspace-home shell re-home (sidebar, search bar, global queries, files tabs, unified home list)#5129

Draft
nl0 wants to merge 15 commits into
masterfrom
dx-shell-rehome
Draft

catalog: workspace-home shell re-home (sidebar, search bar, global queries, files tabs, unified home list)#5129
nl0 wants to merge 15 commits into
masterfrom
dx-shell-rehome

Conversation

@nl0

@nl0 nl0 commented Jul 21, 2026

Copy link
Copy Markdown
Member

The shell/IA slice of the dx rework, split out of #5086 so the re-home that touches every screen can be reviewed and shipped on its own; #5086 now stacks on this branch carrying only the flag-gated Data Products remainder.

What's in

  • Workspace sidebar (containers/Sidebar) — persistent global nav: identity, Volumes/Search/Queries/Bookmarks, active-section indication, Ask Qurator, admin entry.
  • Always-on search bar (Layout/ContentBar) — replaces the top bar; on /search the bar IS the query input (binds the search model's URL state).
  • Global Queries (containers/Queries, moved from Bucket/Queries) — root-level /queries with Athena · ElasticSearch tabs; bucket Queries tab removed; legacy routes redirect. Includes the Athena workgroup-probe race fix (transient-retry + backoff, bounded concurrency, in-flight dedup — 3 new tests).
  • Files tab family — bucket tabs renamed/ordered Overview · Files · Packages · Workflows.
  • Unified home volume list (website/…/Buckets, BucketGrid, BucketList) — one dense list with text filter and list ↔ cards toggle; OPEN landing adopts the same component (old grid deleted).
  • Assorted polish riding the rework (uniform card heights, carded queries panels, empty-state fixes, aria labels, relative timestamps).

What's deliberately out (stays on the stacked DP slice, #5086)

  • All data-products code — zero references on this branch (audited: 0 grep hits in the diff).
  • All GraphQL/codegen changes (model/graphql/*, *.generated.ts, *.graphql) — untouched vs master.
  • The Search injectable-link seam (Hit/CellValue/Entries/Table/links.ts) — only consumer is the DP Packages tab; reverted whole.
  • Admin feature-flag generalization + Data Products toggle.
  • The dispatch-only deploy-workflow variant (dev-stack plumbing, not for master).

Note for review: two additive seams with no consumer on this branch ride along (JsonDisplay noS3Links, Markdown loader processLink override) — kept to minimize churn; the DP slice consumes both.

Gates

  • typecheck clean · vitest 1137 passed + 1 skipped, 0 failures · lint clean
  • Independent adversarial verification: diff algebra both directions vs master...dx-dp-browse (nothing invented, nothing lost), byte-identity sweep on all non-mixed files, mixed-file surgery review.

Spec-side twin: quiltdata/quilt-specs#22.

🤖 Generated with Claude Code

…eries, files tabs, unified home list)

Persistent workspace sidebar and always-on search bar; global /queries
re-home (workspace-scoped Athena/ES consoles with legacy bucket-query
redirects); Files tab family and reworked bucket tab order; unified home
volume list (buckets only) with list/card toggle, text filter, and tag
shortcuts; OPEN-landing unification; Athena race fix; and
bookmarks/layout/assistant chrome changes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@codecov

codecov Bot commented Jul 21, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 39.04899% with 423 lines in your changes missing coverage. Please review.
✅ Project coverage is 50.48%. Comparing base (0738eef) to head (84b7550).
⚠️ Report is 4 commits behind head on master.

Files with missing lines Patch % Lines
catalog/app/containers/Sidebar/Sidebar.tsx 0.00% 62 Missing and 6 partials ⚠️
...log/app/components/SearchBar/Suggestions/model.tsx 0.00% 43 Missing and 14 partials ⚠️
catalog/app/components/Layout/ContentBar.tsx 0.00% 22 Missing and 5 partials ⚠️
catalog/app/containers/Home/Buckets/Buckets.jsx 65.21% 22 Missing and 2 partials ⚠️
...alog/app/containers/Home/BucketGrid/BucketList.tsx 0.00% 21 Missing and 2 partials ⚠️
catalog/app/containers/Bucket/Nav/Tabs.tsx 0.00% 22 Missing ⚠️
catalog/app/components/SearchBar/State.tsx 68.33% 17 Missing and 2 partials ⚠️
catalog/app/containers/Sidebar/AuthState.ts 0.00% 12 Missing and 5 partials ⚠️
catalog/app/containers/Sidebar/Subscription.ts 0.00% 17 Missing ⚠️
catalog/app/containers/Queries/ElasticSearch.tsx 0.00% 15 Missing and 1 partial ⚠️
... and 32 more
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #5129      +/-   ##
==========================================
+ Coverage   49.52%   50.48%   +0.95%     
==========================================
  Files         844      842       -2     
  Lines       34426    34241     -185     
  Branches     5830     5819      -11     
==========================================
+ Hits        17049    17286     +237     
+ Misses      15493    15119     -374     
+ Partials     1884     1836      -48     
Flag Coverage Δ
api-python 93.14% <ø> (ø)
catalog 26.47% <39.04%> (+1.28%) ⬆️
lambda 97.09% <ø> (ø)
py-shared 98.02% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

nl0 added a commit that referenced this pull request Jul 21, 2026
… tree unchanged — this branch already contains the shell work)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* dx-shell-rehome:
  catalog: workspace-home shell re-home (sidebar, search bar, global queries, files tabs, unified home list)
Removed (verified unreachable on dx-shell-rehome via import greps):
- website/components/Backgrounds/Backlight1.js + backlight1.png asset
- website/components/Bullet.jsx
- website/components/Videos/** (Videos.jsx, index.js, adornment.png)
- website/pages/OpenLanding/Showcase/** (Showcase.jsx, index.js)
- constants/style.js: websiteTheme export + its window.THEMES entry, and
  the now-orphaned websiteTypography local const it was the sole consumer of

Kept navTheme, websitePalette, appTheme. Retained website/theme.ts (the
WebsiteTheme type still consumed by BucketGrid/BucketList); updated its
stale comment to reference websitePalette/navTheme instead of websiteTheme.

Switched the two remaining websiteTheme consumers (both tests) to appTheme:
BucketGrid.spec.tsx and Landing/Buckets/Buckets.spec.tsx.

Gates: typecheck clean; vitest 1137 passed / 1 skipped / 0 failed;
lint:app clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@nl0

nl0 commented Jul 21, 2026

Copy link
Copy Markdown
Member Author

Added 6becc799: drops confirmed-dead website marketing code (Backlight1, Bullet, Videos/, OpenLanding/Showcase/ — relics of the old open.quiltdata landing, unreachable on this branch) and the unused websiteTheme export (+its orphaned typography block; the two specs that referenced it now use appTheme). 12 files, +5/−389. Gates re-verified independently: typecheck clean, 1137 passed + 1 skipped, lint clean, zero residual references. navTheme/websitePalette untouched (the rail consumes them — their retirement rides the post-design-settlement pass).

nl0 and others added 11 commits July 21, 2026 19:24
…structure; workspace-box variants in flight

Settled via impeccable live (operator accepts):
- nav: inset rounded rows (8px inset, 4px radius, 44px flush rows, 16px icon gap via $icon), focus-visible ring
- URI + Docs move to top-bar icon actions (ContentBar); Follow dropped; Resources section removed (FollowMenu deleted)
- version relocates under the logo, faint
- workspace area: rounded faint-fill box + logged-out sign-in placeholder (no layout jump on login)

Session scaffolding INCLUDED deliberately (Freeze wrapper + pending variant block 7c641af7,
workspace merge-vs-distinct exploration) — stripped at session end before undrafting.
app/index.html live-inject intentionally left uncommitted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…cepted)

Settled via live design session accepts + chat rulings (2026-07-21/22):
- split layout: WORKSPACE label outside a faint rounded box (top); identity box
  with Sign Out in a dropdown menu (bottom, hidden logged-out); version at the
  rail's foot, whisper-faint with hover reveal
- workspace row: current role only (no count), down-chevron + switchRole only
  when >1 roles; sign-in placeholder row when logged out (non-LOCAL)
- rail ground: midnight via navTheme.background.default; text 85% white,
  selected full-white + medium; washes one notch fainter across the rail
- amber indicator enters the chrome: 3px bracket on the selected nav item
  (doctrine ruling: one selection vocabulary product-wide)
- icon geometry: 20px icons, 34px icon column, 16px left inset, all rows
- 'Switch workspace' dialog title + matching error copy

Code-reviewed (3-lens workflow, 14 adversarially-verified findings): blocker
fixed (account menu portal now renders on appTheme, not the dark navTheme),
LOCAL-mode Sign Out guard restored, duplication consolidated (box/row style
bases, shared workspace row fragment, AccountMenu self-styles), stale comments
corrected. Accepted-by-ruling deviations recorded in the ledger: Web Midnight
as rail ground (tokenizes at contract rewrite), 0.35 resting version opacity,
11px overline, Footer text-token collateral (Footer is ruled dead).

Session scaffolding still in file (comment-marked, ledger-tracked, REMOVE
before merge): Freeze wrapper + authResolved gate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ruled via side-by-side trial (midnight-world vs indigo-world instances,
operator-accepted 2026-07-22): one dark says Quilt — rail ground, primary
actions, active fills all unify on midnight. Deep/hover step #100e28.
Followers: tertiary.main (was a duplicate of the old primary), ThemeEditor
fallback/placeholder/example strings, and the rail ground now reads
appTheme.palette.primary.main directly (single source; one less navTheme
consumer ahead of its planned deletion). Revert is a two-value flip.
DESIGN.md token names update at the contract rewrite; ledger is authoritative
until then.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t (impeccable session, operator-accepted)

Band commits to chrome: white, full-bleed to the rail edge (inset moves to
the content column), square, elevation 0 + divider hairline, 64px-registered
with the rail logo block. Field: white with a prominent 0.38 resting border,
faint search icon (0.38 -> 0.54 on focus), '/' keycap that hides while
typing; '/' and Cmd/Ctrl+K focus the bar globally. Conformance ride-alongs:
AA placeholder, 14px scale, dropdown to elevation 8, mono s3:// suggestions,
visible focus ring on the icon actions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…display

quilt.png is 153x58; the previous 32px height forced a 1.1x device-pixel
upscale on retina (blurry). 29px maps the mark 1:1 to device pixels on 2x
displays and to an exact 2:1 downscale on 1x. Header registration (64px
logo block) unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds the navigation slice (indicator amber, rail text/wash tokens) to
appPalette with proper createPalette augmentation. The rail no longer wraps
in navTheme: root colors read tokens, the amber indicator literal tokenizes,
the bookmarks Badge dot gets an explicit indicator-amber class (navTheme
primary was salmon; appTheme primary would vanish on the midnight ground).
FinalBoundary switches to appTheme with pinned midnight ground and legible
button colors. Rail renders identically (verified computed styles).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The re-homed shell left most of containers/NavBar orphaned. The live pieces
move to their consumer: AuthState/useAuthState, RoleSwitcher, and the
Subscription license-state hook (its Display banner was dead — the rail's
Unlicensed item is the live affordance) relocate into containers/Sidebar
with their gql documents. Bare pages get a minimal BareHeader (midnight
band, home mark, visible focus ring) replacing NavBar.Container, and the
auth screens render bare instead of mounting the full shell. The NavBar
directory (NavBar, NavMenu, Controls, BucketSelect, Collaborators) is
deleted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t begins

The last navTheme consumer (Footer) is removed per the footer-death ruling,
and navTheme, websitePalette, and websiteOverrides are deleted — the app has
one theme family again. Volume-list components (BucketGrid, Buckets) move
out of website/ into containers/Home (tertiary joins the palette typing;
website/theme.ts dies). /install redirects to the installation docs instead
of rendering the marketing page. The profile route un-gates from OPEN-only
(all modes, still auth-required) and sheds its marketing sections.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s, AA contrast

Version row renders in Roboto Mono (Mono Identity Rule) and becomes a real
keyboard-operable button with a visible focus ring; the rail's interactive
elements (logo, nav items, workspace and identity rows) get indicator-amber
:focus-visible outlines — MUI's default focus overlay was invisible on the
midnight ground. Role-switcher '(current)' hint raised from 2.7:1 to 4.6:1.
Stale 'Navbar link' admin label renamed. Orphaned marketing Contribute
component removed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
It became a keyboard tab stop in the conformance batch; a focusable element
at 2.6:1 is an invisible landing. 0.55 over white-85 on midnight ≈ 4.6:1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@nl0
nl0 force-pushed the dx-shell-rehome branch from 73877c7 to 123cf15 Compare July 23, 2026 11:49
nl0 and others added 2 commits July 23, 2026 14:39
…, one register)

Squares the written contract with the rulings that ran ahead of it (the
qhq-n7bz.23 ledger trail, now superseded). Frontmatter: primary becomes
Midnight Chassis #19163b (indigo retired), the palette.navigation slice
enters as tokens, Caption + Overline join the type ramp. Doctrine: the
Two-Registers Rule (which banned midnight in-app, contradicting the build)
becomes the One-Register Rule; the Indicator Rule extends into chrome (amber
bracket, one selection vocabulary); a Focus Ring Rule is named. Section 5
Navigation rewritten from the dead navTheme app-bar to the shipped rail +
chrome search band + bare header. The coral/cobalt website palette is
documented as retired. design.json sidecar regenerated to match.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The 'Volumes' umbrella was premature — it names buckets + data products, but
DP composition isn't on this branch. Revert the user-facing label (rail nav,
home heading, filter placeholder, empty state) and the internal bucketsActive
flag to 'Buckets'; it becomes 'Volumes' again when data products land.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant