personal memory agent
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix knowledge graph clustering — nodes now spread to fill viewport

Two root causes: (1) container height:100% resolved to auto because
parent .workspace has no explicit height, collapsing the flex layout
to near-zero height; fixed with viewport-based calc. (2) Physics
parameters too conservative for 50-150 node graphs — increased
repulsion, spring length, spring constant, and stabilization iterations.
Added explicit fit() after stabilization for insurance.

Fixes support ticket #3.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+10 -5
+10 -5
apps/home/workspace.html
··· 1 - <div class="workspace-content" style="display:flex;flex-direction:column;height:100%;overflow:hidden;"> 1 + <div class="workspace-content" style="display:flex;flex-direction:column;height:calc(100vh - var(--facet-bar-height) - var(--app-bar-height) - 24px);overflow:hidden;"> 2 2 <!-- Filter controls --> 3 3 <div class="graph-controls" id="graph-controls" style="display:none;"> 4 4 <div class="graph-controls-row"> ··· 444 444 physics: { 445 445 solver: 'barnesHut', 446 446 barnesHut: { 447 - gravitationalConstant: -3000, 448 - springLength: 150, 449 - springConstant: 0.02, 447 + gravitationalConstant: -8000, 448 + springLength: 200, 449 + springConstant: 0.04, 450 450 damping: 0.09, 451 451 }, 452 - stabilization: { iterations: 100 }, 452 + stabilization: { iterations: 300 }, 453 453 }, 454 454 nodes: { 455 455 shape: 'dot', ··· 475 475 network.setData(visData); 476 476 } else { 477 477 network = new vis.Network(container, visData, options); 478 + 479 + // Fit graph to container after stabilization 480 + network.on('stabilizationIterationsDone', function() { 481 + network.fit({ animation: { duration: 300 } }); 482 + }); 478 483 479 484 // Click node → inspect 480 485 network.on('click', function(params) {