diff --git a/apps/dashboard/src/lib/observatory/overlays/RescueVerdict.svelte b/apps/dashboard/src/lib/observatory/overlays/RescueVerdict.svelte index 489c3e7..aca3c96 100644 --- a/apps/dashboard/src/lib/observatory/overlays/RescueVerdict.svelte +++ b/apps/dashboard/src/lib/observatory/overlays/RescueVerdict.svelte @@ -28,7 +28,12 @@ let { frame = 0, verdict, - fadeWindow = [600, 615, 645, 660], + // Hold the verdict on screen for the REST of the loop, not a ~1s flash. + // Fade in over 600→620, hold fully readable through the field's decay to + // rest, then fade out just before the seamless wrap (705→719, back to 0 + // at 719 so the loop seam stays clean). This is the demo money-card: the + // viewer needs seconds to read "root cause found", not a blink. + fadeWindow = [600, 620, 705, 719], tone = 'triumph' }: Props = $props(); diff --git a/apps/dashboard/src/routes/(app)/observatory/+page.svelte b/apps/dashboard/src/routes/(app)/observatory/+page.svelte index 0f50505..78dc362 100644 --- a/apps/dashboard/src/routes/(app)/observatory/+page.svelte +++ b/apps/dashboard/src/routes/(app)/observatory/+page.svelte @@ -62,10 +62,15 @@ loading = true; error = ''; try { + // Pull the DENSE real subgraph (the well-connected hotspot), not the + // newest-memory neighborhood — 'recent' centers on a lonely fresh node + // (~12 nodes), while 'connected' surfaces the populous, edge-rich field + // (~150 real memories, thousands of edges) so the Observatory reads as + // a living brain doing real work, not a sparse placeholder. const data = await api.graph({ - max_nodes: 300, + max_nodes: 200, depth: 3, - sort: 'recent' + sort: 'connected' }); graphData = data; nodeCount = data.nodeCount;