feat(nouser): persistencia sled write-through del MonadDb
MonadDb ahora soporta backend dual: - MonadDb::new() → memoria pura (default, back-compat). - MonadDb::open(path) → sled-backed con cache en memoria. Carga contenido existente al abrir; cada insert_* hace write-through (cache + sled). Diseño: - 2 trees sled: files y monads. - Wire format: serde_json (ergonomía + inspectability con sled-cli; los manifests son chicos, JSON gana sobre postcard aquí). - Reads SIEMPRE desde la cache — sled se consulta sólo al abrir. - replace_monads() purga el tree de sled antes de escribir. Bin nouser: nueva env var NOUSER_DB_PATH. Si está set, persiste; si no, in-memory: $ NOUSER_DB_PATH=/tmp/monads.sled nouser scan crates/core scan: 102 archivos, 5 mónadas $ ls /tmp/monads.sled blobs conf Tests nuevos en db.rs: - persistence_roundtrip — escribe, cierra, reabre, datos están. - replace_monads_purges_persistent_tree — replace limpia tree. 24 tests en nouser-core (era 22, +2). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,37 @@ ratio/diff ver `git show <sha>`.
|
||||
|
||||
## 2026-05-08
|
||||
|
||||
### feat(nouser): persistencia sled write-through del MonadDb
|
||||
`MonadDb` ahora soporta backend dual:
|
||||
|
||||
- `MonadDb::new()` → memoria pura (default, back-compat).
|
||||
- `MonadDb::open(path)` → sled-backed con cache en memoria. Carga
|
||||
contenido existente al abrir; cada `insert_*` hace write-through
|
||||
(cache + sled).
|
||||
|
||||
Diseño:
|
||||
- 2 trees sled: `files` y `monads`.
|
||||
- Wire format: serde_json (ergonomía + inspectability con sled-cli;
|
||||
los manifests son chicos, JSON gana sobre postcard aquí).
|
||||
- Reads SIEMPRE desde la cache — sled se consulta sólo al abrir.
|
||||
- `replace_monads()` purga el tree de sled antes de escribir.
|
||||
|
||||
Bin nouser: nueva env var `NOUSER_DB_PATH`. Si está set, persiste
|
||||
en esa ruta; si no, in-memory:
|
||||
|
||||
$ NOUSER_DB_PATH=/tmp/monads.sled nouser scan crates/core
|
||||
scan: 102 archivos en crates/core, 5 mónadas
|
||||
$ ls /tmp/monads.sled
|
||||
blobs conf
|
||||
$ NOUSER_DB_PATH=/tmp/monads.sled nouser scan crates/core
|
||||
# segunda corrida re-escribe la DB con el nuevo scan
|
||||
|
||||
Tests nuevos en db.rs:
|
||||
- `persistence_roundtrip` — escribe, cierra, reabre, datos están.
|
||||
- `replace_monads_purges_persistent_tree` — replace limpia el tree.
|
||||
|
||||
24 tests en nouser-core (era 22, +2).
|
||||
|
||||
### feat(sidecar): Phase B-3 — SidecarPool consolida en un runtime
|
||||
Antes: cada `spawn(card)` creaba un thread + tokio runtime propio.
|
||||
Para módulos que publican muchas sesiones (nouser daemon con 50+
|
||||
|
||||
Reference in New Issue
Block a user