Skip to content
CSA Loom — the Microsoft Fabric experience for Azure tenants where Fabric isn't yet available: lakehouses, warehouses, notebooks, semantic models, Activator rules, Data Agents, across Commercial, GCC, GCC-High, and DoD IL5

Global non-editor chrome parity — validation summary

Validated: 2026-05-26 (Frank Garofalo, fabric-parity-loop validator pass)
Live URL: https://loom-console-fvbbctd4eehqbkcs.b02.azurefd.net/
Method: Playwright MCP live-browser probes — DOM inspection + network observation + click handlers + functional tests on signed-in session Rule reference: .claude/rules/no-vaporware.md + .claude/workflows/fabric-parity-loop.md

Verdict matrix

# Surface Grade Real backend? Vaporware? Severity of gap
1 Topbar logo + brand A- n/a (static) No MINOR (no tenant indicator)
2 App launcher (waffle) B YES — /api/apps-catalog No MINOR (no icons, no unauth gate)
3 Tab strip C YES — /api/tabs Cosmos No BLOCKER (overflow hides global actions)
4 Topbar search + Ctrl+K palette D NO — static catalog only YES BLOCKER (can't find real items)
5 Copilot pane F NO — hardcoded template YES (admitted in code) BLOCKER (no LLM call)
6 Notifications B YES — /api/notifications No MINOR (no severity icons)
7 Send feedback B+ YES (code-level wired) No MINOR (no screenshot attach)
8 Theme toggle B+ local + likely /api/user-prefs No MINOR (no high-contrast)
9 Learn link B+ static authored content No MINOR (no in-page search)
10 Admin link N/A covered by admin validator see admin docs
11 Workspace settings drawer C+ / INCONCLUSIVE partial (2 of 6 tabs real) No (honest gates) MAJOR (live page unstable)
12 Item-side-panel (Comments/Version/Share/Learn) D NO for 3 of 4 partial BLOCKER (3 buttons silently disabled)
13 New-item dialog A static catalog (correct) No MINOR (no in-dialog search)
14 Sign-in flow B- MSAL real No MAJOR (session instability observed)
15 Activity feed (Recent / Pinned / Recommended apps) A- YES — multiple BFF endpoints No MINOR (no activity timeline)

Aggregate

  • A or A+: 1 (New-item dialog)
  • A-: 2 (Topbar branding, Activity feed)
  • B+: 3 (Send feedback, Theme toggle, Learn link)
  • B: 2 (App launcher, Notifications)
  • B-: 1 (Sign-in flow)
  • C+: 1 (Workspace settings drawer)
  • C: 1 (Tab strip)
  • D: 2 (Topbar search, Item-side-panel)
  • F: 1 (Copilot pane — VAPORWARE)
  • N/A: 1 (Admin link — separate validator)

Top-3 most urgent fixes (by user pain × frequency)

1. Copilot pane — REMOVE OR WIRE (F → A)

The chat sends, replies, but never calls /api/copilot/orchestrate. Code admits "Wire me to a real LLM by setting AZURE_OPENAI_ENDPOINT" in the templated mock response. Either wire to the orchestrate route (which exists and is fully built per the codebase) OR remove the Sparkle button from chrome and replace with a MessageBar gate.

Fix scope: lib/components/copilot-pane.tsx lines 99-111 — replace setTimeout mock with await fetch('/api/copilot/orchestrate', {…}) + streaming.

2. Tab strip overflow — BLOCKER (C → A)

Once a user opens 5+ tabs (which happens within minutes of starting work), the tab strip overflows horizontally past the viewport and visibly overlaps the right-side global actions toolbar. There's no chevron / no overflow menu / no scroll affordance (scrollbar is hidden via CSS).

Fix scope: lib/components/tab-strip.tsx — add an overflow chevron with MoreHorizontal24Regular icon that opens a Popover listing hidden tabs; ensure flex layout caps tab strip width at calc(100vw - actions-width - logo-width - launcher-width - search-max-width).

3. Topbar search — wire to real items (D → A)

The Command Palette claims to "Search items, settings, item types" but only searches the static catalog. Real items (lakehouses, notebooks, reports the user has actually created) are invisible. Users will give up on it.

Fix scope: lib/components/command-palette.tsx — add an Items group, debounced fetch to /api/search/items?q={q}, render results inline. The BFF route already exists.

Tab-strip overflow root cause (debug breadcrumb)

In a session with 11 tabs and viewport=1600px: - Tabs strip extends from x=296 to x=2792 (1500px past viewport edge) - Right-side icons at x=1420 (Learn) and x=1456 (Admin) are physically rendered ON TOP OF where tabs are - localStorage cache + Cosmos persistence keep tab list alive across sessions, so even closing browser doesn't help - POSTing {tabs:[]} to /api/tabs clears server-side but localStorage repopulates instantly

Auth instability breadcrumb

During this validation, /api/me flapped between authed/401 unpredictably: - Page navigation sometimes caused token to drop - Refresh sometimes restored auth, sometimes routed to MSAL - This made several live probes (workspace detail, item editor first-load) inconclusive - Suspected cookie SameSite / Front Door routing race; needs follow-up

Honest scoring summary

Of 14 surfaces with grades (excluding N/A admin): - 3 are at or above B+ and feel production-grade (new-item dialog, send feedback, learn link, activity feed) - 6 are functional but rough (topbar, app launcher, theme toggle, notifications, sign-in, workspace settings) - 5 are stubbed, broken, or vaporware (tab strip overflow, topbar search, item-side-panel, copilot pane)

Target per parity rubric: every surface A or A+. We have 1 A, 2 A-, and 12 below A. There is significant chrome work between "today" and "A everywhere."