feat(ns-mem): graph layer — semantic walk, belief versioning, PageRank #4

Merged
Jairodaniel-17 merged 3 commits from ns-mem into main 2026-04-16 20:49:54 +00:00
Jairodaniel-17 commented 2026-04-16 20:38:04 +00:00 (Migrated from github.com)

Summary

  • Semantic walk BFS: reemplaza el recall plano (K-NN directo) con BFS guiado por coseno sobre un grafo de memorias tipado. Seeds del K-NN → expansión por aristas con factor por tipo → corte si similitud < 0.65 → ranking por coseno × edge_factor × (1 + PageRank).
  • memory_edges: tabla SQLite con aristas tipadas (supports, contradicts, supersedes, triggered_by, related_to). Se crean automáticamente en consolidación (TriggeredBy) y en upsert_fact sobre fact existente (Supersedes).
  • memory_history: tabla append-only que versiona cada belief antes de ser sobreescrita.
  • PageRank centralidad: 15 iteraciones sobre aristas positivas, normalizado [0,1], almacenado en memory_records.centrality_score.

Archivos clave

Archivo Cambio
src/memory/graph.rs nuevoGraphService: edge CRUD, semantic_walk, compute_centrality, belief history
src/memory/graph_api.rs nuevo — 5 métodos públicos en MemoryService
src/sqlite/memory_schema.rs 2 tablas nuevas + columna centrality_score
src/memory/retrieval.rs recall() reemplazado con semantic walk 3-step
src/memory/ingest.rs upsert_fact versiona beliefs antes de overwrite
src/memory/consolidator.rs auto-crea TriggeredBy edge en cada consolidación
src/config.rs 5 parámetros nuevos (memory_walk_*, memory_centrality_*)
tests/ns_mem_graph.rs nuevo — 7 tests de integración

Endpoints nuevos

POST  /v1/memory/{ns}/edges
GET   /v1/memory/{ns}/edges/{memory_id}
POST  /v1/memory/{ns}/edges/{edge_id}/delete
GET   /v1/memory/{ns}/beliefs/{fact_key}/history
POST  /v1/memory/{ns}/graph/centrality

Test plan

  • cargo fmt --all -- --check — limpio
  • cargo clippy --all-targets --all-features -- -D warnings — 0 errores
  • cargo test — 99/99 passing
  • test_edge_crud — crear/leer/eliminar aristas via API
  • test_triggered_by_on_consolidation — arista auto-creada en consolidación
  • test_supersedes_on_upsert — arista Supersedes al sobreescribir fact
  • test_belief_history_endpoint — historial de versiones
  • test_centrality_hub_nodes — nodos hub reciben mayor score
  • test_semantic_walk_expands — BFS expande más allá de seeds iniciales
  • test_semantic_walk_skips_archived — records Archived excluidos

🤖 Generated with Claude Code

## Summary - **Semantic walk BFS**: reemplaza el recall plano (K-NN directo) con BFS guiado por coseno sobre un grafo de memorias tipado. Seeds del K-NN → expansión por aristas con factor por tipo → corte si similitud < 0.65 → ranking por `coseno × edge_factor × (1 + PageRank)`. - **`memory_edges`**: tabla SQLite con aristas tipadas (`supports`, `contradicts`, `supersedes`, `triggered_by`, `related_to`). Se crean automáticamente en consolidación (`TriggeredBy`) y en `upsert_fact` sobre fact existente (`Supersedes`). - **`memory_history`**: tabla append-only que versiona cada belief antes de ser sobreescrita. - **PageRank centralidad**: 15 iteraciones sobre aristas positivas, normalizado `[0,1]`, almacenado en `memory_records.centrality_score`. ## Archivos clave | Archivo | Cambio | |---------|--------| | `src/memory/graph.rs` | **nuevo** — `GraphService`: edge CRUD, `semantic_walk`, `compute_centrality`, belief history | | `src/memory/graph_api.rs` | **nuevo** — 5 métodos públicos en `MemoryService` | | `src/sqlite/memory_schema.rs` | 2 tablas nuevas + columna `centrality_score` | | `src/memory/retrieval.rs` | `recall()` reemplazado con semantic walk 3-step | | `src/memory/ingest.rs` | `upsert_fact` versiona beliefs antes de overwrite | | `src/memory/consolidator.rs` | auto-crea `TriggeredBy` edge en cada consolidación | | `src/config.rs` | 5 parámetros nuevos (`memory_walk_*`, `memory_centrality_*`) | | `tests/ns_mem_graph.rs` | **nuevo** — 7 tests de integración | ## Endpoints nuevos ``` POST /v1/memory/{ns}/edges GET /v1/memory/{ns}/edges/{memory_id} POST /v1/memory/{ns}/edges/{edge_id}/delete GET /v1/memory/{ns}/beliefs/{fact_key}/history POST /v1/memory/{ns}/graph/centrality ``` ## Test plan - [x] `cargo fmt --all -- --check` — limpio - [x] `cargo clippy --all-targets --all-features -- -D warnings` — 0 errores - [x] `cargo test` — 99/99 passing - [x] `test_edge_crud` — crear/leer/eliminar aristas via API - [x] `test_triggered_by_on_consolidation` — arista auto-creada en consolidación - [x] `test_supersedes_on_upsert` — arista Supersedes al sobreescribir fact - [x] `test_belief_history_endpoint` — historial de versiones - [x] `test_centrality_hub_nodes` — nodos hub reciben mayor score - [x] `test_semantic_walk_expands` — BFS expande más allá de seeds iniciales - [x] `test_semantic_walk_skips_archived` — records Archived excluidos 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No description provided.