Altinity / Altinity/altinity-sql-browser
refactor(shell): a live sidebar drag leaves the docked inspector's width stale
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 8
- Forks
- 2
- Avg merge
- 1h 34m
- Merged PRs (30d)
- 6
Description
Surfaced by ChatGPT review pass 2 of PR #596 (#586, phase 1 of #593), verified against the code.
Deliberately not fixed in #586 — see "Why deferred".
What
#586 made the docked inspector's displayed width dock-aware: its ceiling reserves
CENTRE_MIN_PX for the centre surface plus reservedPx = state.sidebarPx + 2 * HANDLE_PX
(src/ui/app-shell.ts:174). The re-clamp (app.dom.reclampInspectorWidth) runs at three moments:
- shell construction (
app-shell.ts:252), - inspector unfold (called from
showInInspector), window resize.
A live left-sidebar drag is not one of them. dragCtx.apply (src/ui/app-shell.ts:182-186)
handles the 'col' axis by setting sidebar.style.width only:
apply: (axis, value) => {
if (axis === 'col') sidebar.style.width = value + 'px';
else if (axis === 'rightInspector') inspectorHost.style.width = value + 'px';
else schemaPane.style.height = value + '%';
},
So while both panels are visible, widening the sidebar silently invalidates the reservation the
inspector's width was chosen against.
Reproduction
At a 1280px viewport:
- Open Cell, Rows or Reference and size the inspector to 600px (default sidebar 248px →
reservedPx262 → centre ≈ 418px). - Drag
.col-resizeto the sidebar's maximum 420px (dragValue'sclamp(ev.clientX, 180, 420),
src/ui/splitters.ts:108) →reservedPxbecomes 434. - The inspector stays 600px, so the centre falls to ≈ 246px — below
CENTRE_MIN_PX(320) — and
stays there until an unrelatedwindow resizeor a fold/unfold happens to re-clamp it.
Why the existing tests miss it
Both new tests avoid the live transition:
- the e2e sidebar test closes the inspector, changes the sidebar, then reopens it (so the unfold
hook does the work); - the unit test changes
state.sidebarPxwhile the inspector is folded.
Neither drags the sidebar while the inspector is open, which is the only path that exposes this.
Why deferred
It is a small, self-contained fix, but it shares a root cause with the centre-minimum policy
question (filed separately): both are about what the shell does when the row's three columns
cannot all keep their minima. Fixing the re-clamp alone would keep the centre at
CENTRE_MIN_PX only while that is feasible, so the two are best resolved together. It is also
not a regression — pre-#586 the surface was a position: fixed overlay that the sidebar's width
did not interact with at all.
Acceptance
- The
'col'apply path re-clamps the displayed inspector width, without mutating the
savedrightInspectorPxpreference (the same displayed-vs-preferred split #586 established). - A real-browser test drags
.col-resizewhile the inspector stays open and asserts the
centre againstCENTRE_MIN_PX. happy-dom evaluates no CSS layout, so a unit test cannot
stand in for this. -
npm test,npm run check:types,npm run check:arch,npm run buildpass.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in src/ui/app-shell.ts around dragCtx.apply and the existing inspector reclamp logic, then inspect src/ui/splitters.ts and the existing sidebar tests. Run the relevant browser test first and add coverage for dragging .col-resize while the inspector remains open. Done means the centre respects CENTRE_MIN_PX, the saved rightInspectorPx preference is unchanged, and all listed npm checks pass.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- frontend, testing-qa
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 55/100