fix(memory): empty-bank graph placeholder no longer locks up the dashboard#845
Open
thinmintdev wants to merge 3 commits into
Open
fix(memory): empty-bank graph placeholder no longer locks up the dashboard#845thinmintdev wants to merge 3 commits into
thinmintdev wants to merge 3 commits into
Conversation
…board Selecting a bank with no graph data (or any empty search/filter result) made the whole Memory dashboard unclickable — it "locked up." Root cause was CSS, not JS: the `.mem-graph-empty` placeholder carried `position:absolute; inset:0`, a leftover from when it overlaid the old `position:relative` `.mem-graph-stage`. The A/B/C graph overhaul moved the placeholder into `.mg-host`, which is `position:static`, so the absolute box resolved its containing block to the viewport: it rendered full-page (transparent) and intercepted every pointer event, while `.mg-host` collapsed to height:0. Verified live against the empty `private__claude-dev` bank on CT105: the empty box measured 0,0 1266x812 and elementFromPoint over the bank picker / direction switch returned the overlay, not the controls. Fix: - `.mem-graph-empty` is now in-flow (min-height instead of absolute inset:0), so it occupies the stage area without escaping or collapsing the host. - `.mg-host` gets position:relative so any future absolute stage child is contained to the graph area (defense-in-depth). Tests: - new e2e spec memory-graph-empty-v3 selects the empty bank and asserts the placeholder does not overlap the toolbar and controls stay hit-testable (fails without the fix, passes with it). - added an `empty` bank to the forced-mock dataset; updated the bank-count assertion (5 -> 6 banks). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Problem
In the Memory tab, selecting a bank with no graph data (or any empty search/filter result) made the entire dashboard unclickable — it appeared to "lock up." Reported: "interacting with the memory map while a bank with no data is selected causes the browser to lock up. Search, graph view etc — whenever it's empty it locks."
Root cause (CSS, not a JS infinite loop)
The
.mem-graph-emptyplaceholder carriedposition: absolute; inset: 0— a leftover from when it overlaid the oldposition: relative.mem-graph-stage. The A/B/C graph overhaul (#752) moved the placeholder into.mg-host, which isposition: static. With no positioned ancestor, the absolute box resolved its containing block to the viewport: it rendered full-page and transparent, intercepting every pointer event, while.mg-hostcollapsed toheight: 0.Verified live against the empty
private__claude-devbank on CT105 (Playwright): the empty box measured{0,0, 1266×812}andelementFromPointover the bank picker and direction switch returned the overlay, not the controls. Injecting the fix CSS restored hit-testing and clicks immediately.Fix
.mem-graph-emptyis now in-flow (min-heightinstead ofabsolute; inset:0) — it fills the stage area without escaping or collapsing the host..mg-hostgetsposition: relativeso any future absolute stage child stays contained to the graph area (defense-in-depth).Tests
memory-graph-empty-v3selects the empty bank and asserts the placeholder does not overlap the toolbar and controls stay hit-testable. Fails without the fix, passes with it.emptybank to the forced-mock dataset (the empty path had zero coverage — that's why this slipped through); updated the bank-count assertion (5 → 6).Deploy note
CT105 runtime is currently on another session's branch (
fix/npu-flm-alias-routing, diverged) — do not deploy this over that in-progress work. Deploy once CT105 is back onmain.Follow-ups (not in this PR)
GraphEgo'sonCenter → setEgoCenter → ego refetch → defaultCenterchain can refetch-loop on large banks if the slice's highest-degree node differs from the requested center.🤖 Generated with Claude Code