fix: comprehensive audit fixes for dashboard and backend

Backend:
- Emit WebSocket events from REST delete/promote/demote handlers
- Emit DreamStarted/ConsolidationStarted from MCP tool dispatch
- Add path validation in backup_to() for defense-in-depth

Dashboard:
- Fix ConnectionDiscovered field names (source_id/target_id)
- Fix $effect → onMount in settings (prevents infinite loop)
- Fix $derived → $derived.by in RetentionCurve
- Fix field name mismatches in settings (nodesProcessed, etc.)
- Fix nested <button> → <span role="button"> in memories
- Fix unhandled Promise rejection in stats consolidation
- Add missing EVENT_TYPE_COLORS entries
- Add Three.js resource disposal and event listener cleanup
- Eliminate duplicate root page, redirect to /graph
- Update nav links and keyboard shortcuts to /graph

All 734+ tests passing, 22MB binary, zero build warnings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Sam Valladares 2026-02-22 15:50:47 -06:00
parent 22831af509
commit ec2af6e71b
220 changed files with 347 additions and 443 deletions

View file

@ -11,19 +11,20 @@
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="apple-touch-icon" href="/favicon.svg" />
<link rel="manifest" href="/manifest.json" />
<link href="/dashboard/_app/immutable/entry/start.BdzkYIOY.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/rHGvVkdq.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/DleE0ac1.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/DrTsYth1.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/DZf5toYK.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/entry/app.BBPt9AEJ.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/8PSwG_AU.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/wmwKEafM.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/BHs8FnOA.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/BolYP48w.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/D6XtQ4nY.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/D-x7U94i.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/M1z6VHZC.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/entry/start.DD7PRmnO.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/B-yQpXHS.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/DEYVqDYQ.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/Dr_bhyBn.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/BycUxjt3.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/entry/app.R5Nt9GQF.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/ZM2C7QQX.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/D5-kFxsM.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/Bzak7iHL.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/CpubbTHs.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/Cc4zGfaP.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/BbhZG17W.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/Dli8az1I.js" rel="modulepreload">
<link href="/dashboard/_app/immutable/chunks/DUZi1B8N.js" rel="modulepreload">
<title>Vestige</title>
</head>
@ -31,7 +32,7 @@
<div style="display: contents">
<script>
{
__sveltekit_1m0l582 = {
__sveltekit_7k5buk = {
base: "/dashboard",
assets: "/dashboard"
};
@ -39,8 +40,8 @@
const element = document.currentScript.parentElement;
Promise.all([
import("/dashboard/_app/immutable/entry/start.BdzkYIOY.js"),
import("/dashboard/_app/immutable/entry/app.BBPt9AEJ.js")
import("/dashboard/_app/immutable/entry/start.DD7PRmnO.js"),
import("/dashboard/_app/immutable/entry/app.R5Nt9GQF.js")
]).then(([kit, app]) => {
kit.start(app, element);
});