Skip to content

fix(memory): empty-bank graph placeholder no longer locks up the dashboard#845

Open
thinmintdev wants to merge 3 commits into
mainfrom
fix/memory-empty-overlay-lockup
Open

fix(memory): empty-bank graph placeholder no longer locks up the dashboard#845
thinmintdev wants to merge 3 commits into
mainfrom
fix/memory-empty-overlay-lockup

Conversation

@thinmintdev

Copy link
Copy Markdown
Contributor

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-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 (#752) moved the placeholder into .mg-host, which is position: 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-host collapsed to height: 0.

Verified live against the empty private__claude-dev bank on CT105 (Playwright): the empty box measured {0,0, 1266×812} and elementFromPoint over 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-empty is now in-flow (min-height instead of absolute; inset:0) — it fills the stage area without escaping or collapsing the host.
  • .mg-host gets position: relative so any future absolute stage child stays 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 (the empty path had zero coverage — that's why this slipped through); updated the bank-count assertion (5 → 6).
  • Full memory e2e suite green; production build clean.

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 on main.

Follow-ups (not in this PR)

  • Directions B/Structured & C/Ego gate their empty shell on the fact nodeCount even when entity data exists, so a fact-empty bank with entities shows "No graph data" instead of the co-occurrence matrix.
  • GraphEgo's onCenter → setEgoCenter → ego refetch → defaultCenter chain can refetch-loop on large banks if the slice's highest-degree node differs from the requested center.

🤖 Generated with Claude Code

thinmintdev and others added 2 commits June 15, 2026 04:06
…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>
@thinmintdev thinmintdev enabled auto-merge (squash) June 15, 2026 11:01
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