You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Migration umbrella if approved: #578 (right inspector is Phase 3)
Coordinate with: #487 so both docked sides share one centre-width policy, shell ownership model, focus behavior, and resize lifecycle.
Goal
Replace the current collection of unrelated desktop right-side overlays and panes with one foldable, shell-owned right inspector for contextual content:
cell detail;
rows/detail viewer content;
function, aggregate-function, data-type, and other Reference documentation;
future contextual diagnostic/detail tools that belong in the same right-side surface.
On desktop, the inspector is docked beside the Query/Dashboard surface, consumes normal layout width, and pushes the centre surface left. It never covers the editor or Dashboard with a backdrop.
Mobile keeps its existing mobile/full-screen/modal presentation where needed and is not redesigned by this issue.
Status and architecture dependency
Do not begin the full inspector implementation before #577 records the application UI-shell decision.
This issue defines the product, domain, validity, accessibility, and integration contracts. It does not prescribe a vanilla renderer, Preact component tree, generic focus coordinator, hook, or global focus manager.
Final desktop shell geometry
The application header remains full width above the shell.
The exact API may change under #577/#578, but the ownership boundary remains:
Shell owns
the single inspector host;
fold/open geometry;
active-tool selection;
tool selector chrome;
width preference and resize separator;
interaction with left navigation and the centre minimum;
high-level teardown on workspace replacement and sign-out.
Tool controllers own
typed payloads;
content/domain rendering state;
result or catalog validity;
async generation tokens;
tool-specific back stacks, embedded viewers, and actions;
initiator metadata used for safe focus restoration.
Feature call sites request a tool through the shell-facing API. They must not append independent desktop panels/backdrops or write shell widths.
The selected rendering architecture must give each inspector subtree one owner. Do not leave parallel vanilla and Preact inspector implementations active behind different triggers.
Tool navigation
When more than one valid tool has session content, show compact accessible tabs or an equivalent selector:
Cell | Rows | Reference
Rules:
only tools with live/available content appear;
opening a tool unfolds and activates it;
a new Cell request replaces the Cell payload rather than adding another Cell tab;
a new Reference target replaces the current target while preserving Reference’s own valid back stack semantics;
switching tools does not destroy valid inactive tool state;
closing one tool activates the most recently used valid remaining tool;
if no valid tool remains, fold the inspector;
the fold chevron remains panel-level chrome, not a tool tab.
Cell tool
clicking a supported result cell opens/unfolds Cell;
preserve formatting, copy, and structured-value rendering;
bind validity to a stable result-generation token plus tab/query identity;
result replacement, rerun, tab closure, workspace switch, or sign-out invalidates stale Cell state;
stale asynchronous formatting/render work cannot repaint a newer payload;
no desktop backdrop or focus trap;
opening Cell does not unnecessarily steal editor selection;
folding/reopening preserves Cell only while its origin remains valid.
A stale cell must never appear as though it belongs to the current result.
Rows/detail tool
migrate passive rows/detail consumers that currently share cell-drawer chrome;
preserve table/detail rendering, paging, copy, and result semantics;
bind validity to the originating result generation;
result replacement, tab closure, workspace switch, or sign-out invalidates it;
one Rows tool instance exists per shell and a new request replaces its payload;
keep truly modal decisions modal; move only passive inspection content into the inspector.
Reference tool
Preserve the existing mature behavior:
loading, found, missing, unavailable, and Retry states;
related/alias navigation and disambiguation;
bounded back stack;
safe Markdown rendering;
embedded code-viewer lifecycle;
stale lookup generation protection;
catalog capability semantics;
contextual opening from F1, hover, completion, schema references, and future Reference actions.
Reference validity differs from result-bound tools:
Query-tab switching does not invalidate it;
Query/Dashboard switching may preserve it;
workspace changes preserve it only when connection/catalog identity and target remain valid;
connection change, catalog invalidation, or sign-out closes it and destroys embedded viewers;
Reference back-stack state remains owned by the Reference controller, not by the shell.
Width and preference migration
Suggested bounds remain subject to real-browser validation:
Final clamping must account for viewport width, #487 left-navigation presentation, active centre surface, and the useful centre minimum.
A temporary viewport clamp must not destroy the saved preferred inspector width.
Replace separate browser preferences:
cellDrawerPx
docPanePx
with:
rightInspectorPx
Compatibility read order:
valid rightInspectorPx;
valid docPanePx;
valid cellDrawerPx;
default.
Write only rightInspectorPx after migration. Width is a browser preference and must not enter workspace storage, portable bundles, or share links. Fold state and active payload are session state.
The left-edge separator must support pointer and keyboard resizing and integrate with the shell geometry selected by #577. Do not use arbitrary delayed resize events.
Surface, workspace, and teardown behavior
Query -> Dashboard
preserve valid Reference;
invalidate or hide Cell/Rows according to result ownership;
never destroy Query merely to show/hide the inspector;
reflow Dashboard when the inspector opens, folds, or resizes.
Dashboard -> Query
preserve valid Reference;
restore Cell/Rows only if the same originating result is still valid;
reflow CodeMirror/results through normal layout hooks.
Workspace switch
invalidate all result-bound tools;
clear initiators belonging to the old workspace/shell;
preserve Reference only when explicitly safe;
stale callbacks from the previous workspace cannot repaint the inspector.
Sign-out/auth loss
invalidate every tool;
destroy embedded viewers and listeners;
cancel active resize and pending structural transition work;
remove/fold inspector content before Login;
late callbacks cannot remount it.
Focus and Escape contract
The desktop inspector is non-modal.
focus moves normally between inspector, editor, and results;
there is no focus trap;
Escape while focus is inside the inspector folds it and is consumed through the existing shortcut/overlay contract so it does not also cancel a query;
Escape outside retains existing global semantics;
chevron folding restores the most recent connected, still-valid initiator when appropriate;
tool switching moves focus only for keyboard navigation or when accessibility requires it;
the chevron, tabs, and separator remain keyboard reachable with visible focus;
stale transition work must not steal a newer user focus;
workspace/sign-out teardown must never restore an initiator from an invalid shell.
The implementation is selected by #577. It may use component lifecycle, a hook, a tiny scheduler plus feature policy, or a small service. Preact does not replace the product-specific destination and validity policy.
Accessibility
Inspector host:
role="complementary"
aria-label="Details and reference"
Tool selector:
proper tabs/tablist semantics when tabs are used;
active state is announced;
unavailable tools are absent rather than disabled placeholders.
Depends on: #425
Architecture dependency: #577
Migration umbrella if approved: #578 (right inspector is Phase 3)
Coordinate with: #487 so both docked sides share one centre-width policy, shell ownership model, focus behavior, and resize lifecycle.
Goal
Replace the current collection of unrelated desktop right-side overlays and panes with one foldable, shell-owned right inspector for contextual content:
On desktop, the inspector is docked beside the Query/Dashboard surface, consumes normal layout width, and pushes the centre surface left. It never covers the editor or Dashboard with a backdrop.
Mobile keeps its existing mobile/full-screen/modal presentation where needed and is not redesigned by this issue.
Status and architecture dependency
Do not begin the full inspector implementation before #577 records the application UI-shell decision.
This issue defines the product, domain, validity, accessibility, and integration contracts. It does not prescribe a vanilla renderer, Preact component tree, generic focus coordinator, hook, or global focus manager.
Final desktop shell geometry
The application header remains full width above the shell.
On desktop:
Fold control
Use one narrow vertical chevron attached to the inspector’s left boundary.
Requirements:
Xcontrols where the panel-level fold control replaces them;Open details panelorClose details panel.Tool registry and ownership
Use a narrow typed registry, initially:
Conceptual shell-facing operations:
The exact API may change under #577/#578, but the ownership boundary remains:
Shell owns
Tool controllers own
Feature call sites request a tool through the shell-facing API. They must not append independent desktop panels/backdrops or write shell widths.
The selected rendering architecture must give each inspector subtree one owner. Do not leave parallel vanilla and Preact inspector implementations active behind different triggers.
Tool navigation
When more than one valid tool has session content, show compact accessible tabs or an equivalent selector:
Rules:
Cell tool
A stale cell must never appear as though it belongs to the current result.
Rows/detail tool
Reference tool
Preserve the existing mature behavior:
Reference validity differs from result-bound tools:
Width and preference migration
Suggested bounds remain subject to real-browser validation:
Final clamping must account for viewport width, #487 left-navigation presentation, active centre surface, and the useful centre minimum.
A temporary viewport clamp must not destroy the saved preferred inspector width.
Replace separate browser preferences:
with:
Compatibility read order:
rightInspectorPx;docPanePx;cellDrawerPx;Write only
rightInspectorPxafter migration. Width is a browser preference and must not enter workspace storage, portable bundles, or share links. Fold state and active payload are session state.The left-edge separator must support pointer and keyboard resizing and integrate with the shell geometry selected by #577. Do not use arbitrary delayed resize events.
Surface, workspace, and teardown behavior
Query -> Dashboard
Dashboard -> Query
Workspace switch
Sign-out/auth loss
Focus and Escape contract
The desktop inspector is non-modal.
The implementation is selected by #577. It may use component lifecycle, a hook, a tiny scheduler plus feature policy, or a small service. Preact does not replace the product-specific destination and validity policy.
Accessibility
Inspector host:
Tool selector:
Resize separator:
Keys:
Chevron direction, visible state, and accessible label remain synchronized.
Mobile
At the existing mobile breakpoint:
Main-surface reflow
Opening, folding, tool replacement, or resizing must correctly reflow:
Presentation changes must not cancel a running query or Dashboard execution.
Implementation sequence
After #577 establishes the shell architecture:
Tests
Shell and fold state
Tool selection and validity
Width and migration
rightInspectorPxrestores and clamps;docPanePx, thencellDrawerPx;Focus, accessibility, and reflow
Acceptance criteria
Non-goals
Related