From 1c6074e02f3a575c81db8a7b775d0ab59c07d021 Mon Sep 17 00:00:00 2001 From: Nicholai Date: Sun, 22 Feb 2026 02:41:54 -0700 Subject: [PATCH] 2026-02-22T09-41-54_auto_memory/memories.db-wal, memory/2026-02-22-umap-per --- .daemon/logs/signet-2026-02-22.log | 11 +++++++++++ ...2-22-umap-performance-refactoring-setup.md | 13 +++++++++++++ memory/memories.db-wal | Bin 4124152 -> 4124152 bytes 3 files changed, 24 insertions(+) create mode 100644 memory/2026-02-22-umap-performance-refactoring-setup.md diff --git a/.daemon/logs/signet-2026-02-22.log b/.daemon/logs/signet-2026-02-22.log index 6094c6017..e4bf441a3 100644 --- a/.daemon/logs/signet-2026-02-22.log +++ b/.daemon/logs/signet-2026-02-22.log @@ -1619,3 +1619,14 @@ {"timestamp":"2026-02-22T09:41:35.012Z","level":"info","category":"git","message":"Auto-committed","data":{"message":"2026-02-22T09-41-34_auto_memory/memories.db-wal, memory/2026-02-22-dashboar","filesChanged":8}} {"timestamp":"2026-02-22T09:41:37.327Z","level":"info","category":"pipeline","message":"Extraction job completed","data":{"jobId":"b90cc1b0-02b7-47db-85f0-4aa073725d8a","memoryId":"069ed1f3-02bd-4086-b3a2-1787742a67d2","facts":10,"entities":12,"proposals":10,"writeMode":"phase-c","added":10,"deduped":0,"skippedLowConfidence":0,"blockedDestructive":0,"entitiesInserted":20,"entitiesUpdated":4,"relationsInserted":12,"relationsUpdated":0,"mentionsLinked":20}} {"timestamp":"2026-02-22T09:41:37.327Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} +{"timestamp":"2026-02-22T09:41:42.382Z","level":"info","category":"git","message":"Auto-committed","data":{"message":"2026-02-22T09-41-42_auto_memory/memories.db-wal","filesChanged":1}} +{"timestamp":"2026-02-22T09:41:44.818Z","level":"info","category":"summary-worker","message":"Wrote session summary","data":{"path":"/home/nicholai/.agents/memory/2026-02-22-umap-performance-refactoring-setup.md"}} +{"timestamp":"2026-02-22T09:41:44.822Z","level":"info","category":"summary-worker","message":"Inserted session facts","data":{"total":7,"saved":7,"deduplicated":0}} +{"timestamp":"2026-02-22T09:41:44.823Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} +{"timestamp":"2026-02-22T09:41:44.823Z","level":"info","category":"watcher","message":"File added","data":{"path":"/home/nicholai/.agents/memory/2026-02-22-umap-performance-refactoring-setup.md"}} +{"timestamp":"2026-02-22T09:41:44.839Z","level":"info","category":"memory","message":"Memory saved","data":{"id":"57e30b00-102c-473d-9b5a-e612ed129c5f","type":"rule","pinned":false,"embedded":true}} +{"timestamp":"2026-02-22T09:41:44.839Z","level":"info","category":"watcher","message":"Ingested memory file","data":{"path":"/home/nicholai/.agents/memory/2026-02-22-umap-performance-refactoring-setup.md","chunks":1,"sections":1,"filename":"2026-02-22-umap-performance-refactoring-setup"}} +{"timestamp":"2026-02-22T09:41:45.332Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} +{"timestamp":"2026-02-22T09:41:49.766Z","level":"info","category":"hooks","message":"Session start hook","data":{"harness":"claude-code","project":"/home/nicholai/signet/signetai"}} +{"timestamp":"2026-02-22T09:41:49.768Z","level":"info","category":"hooks","message":"Session start completed","data":{"memoryCount":18,"durationMs":2}} +{"timestamp":"2026-02-22T09:41:49.770Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} diff --git a/memory/2026-02-22-umap-performance-refactoring-setup.md b/memory/2026-02-22-umap-performance-refactoring-setup.md new file mode 100644 index 000000000..05349e0f6 --- /dev/null +++ b/memory/2026-02-22-umap-performance-refactoring-setup.md @@ -0,0 +1,13 @@ +# 2026-02-22 Session Notes + +## UMAP Performance Refactoring Setup + +Backend-worker agent was assigned four core tasks for the umap-perf team: creating a database migration for UMAP caching, building a server-side projection module, adding an API endpoint, and implementing cache invalidation hooks. + +Task #1 was claimed and read: a new migration (010-umap-cache.ts) must create a umap_cache table with dimensions (INTEGER), embedding_count (INTEGER), payload (TEXT), and created_at (TEXT) columns. The migration should follow the existing pattern from 009-summary-jobs.ts and be registered in packages/core/src/migrations/index.ts. + +The refactoring moves UMAP projection computation from client-side (dashboard) to server-side (daemon), pre-computing 2D/3D coordinates that the dashboard fetches via API instead of calculating them locally. This requires understanding the db-accessor pattern with getDbAccessor().withReadDb() and withWriteDb() methods, along with blob-to-vector conversions used elsewhere in daemon.ts. + +Planned endpoint location: immediately after /api/embeddings/status in daemon.ts. Cache invalidation hooks must be added to syncVecInsert, syncVecDeleteBySourceId, syncVecDeleteBySourceExceptHash, and syncVecDeleteByEmbeddingIds in db-helpers.ts. + +Dependency chain: tasks #1-4 must complete before dashboard changes (#5-6), which then unblock the final build/typecheck (#7). \ No newline at end of file diff --git a/memory/memories.db-wal b/memory/memories.db-wal index 80324f778d6a49dfb216b737dcacca954608f74d..4215a8c1221f12bf05f8d51fca54d1719199b8ba 100644 GIT binary patch delta 57571 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 delta 7599 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