feat(nouser): notify watcher — el sistema reacciona en tiempo real
El daemon monta notify::recommended_watcher recursivo sobre el dir escaneado. Cada Create/Modify de archivo regular dispara: embedding → filtro por centroid_model → ranking contra centroides → log con 🧲 / · según supere DEFAULT_ATTRACTION_THRESHOLD. $ nouser daemon /tmp/x & $ vim /tmp/x/src/nuevo.rs [watcher] 🧲 /tmp/x/src/nuevo.rs → x/src (0.7470) $ echo edit >> /tmp/x/docs/n1.md [watcher] 🧲 /tmp/x/docs/n1.md → x/docs (0.8169) Mecánica: - DB pasa a Arc<Mutex<MonadDb>> para sharing con thread watcher. - Watcher en thread dedicado nouser-watcher; reacciona sólo a Create/Modify, ignora Access/Metadata-only. - react_to_change(path, metadata, db) computa embedding, filtra por centroid_model, busca best attraction. - No re-publica al broker ni muta DB — sólo observa y narra. La invalidación selectiva (re-cluster + replace + diff publish) queda para futuro. Limitación conocida: notify emite múltiples eventos por edición (Create + Modify, etc.). Sin debounce el watcher reporta varias veces. Aceptable para demo; producción conviene debounce ~100ms por path. Esto cierra la Fase C del plan post-reporte: el sistema "se siente" vivo. Tocar un archivo en vim y ver inmediatamente la atracción calculada cumple el meta-mensaje "Mónada Viva". Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,40 @@ ratio/diff ver `git show <sha>`.
|
||||
|
||||
## 2026-05-09
|
||||
|
||||
### feat(nouser): notify watcher — el sistema reacciona en tiempo real
|
||||
El daemon ahora monta un `notify::recommended_watcher` recursivo
|
||||
sobre el directorio. Cada `Create`/`Modify` de archivo regular
|
||||
dispara: embedding del archivo, filtro por `centroid_model`, ranking
|
||||
contra centroides existentes, log con marker 🧲 / · según supere
|
||||
el umbral de atracción.
|
||||
|
||||
$ nouser daemon /tmp/x &
|
||||
# en otra terminal:
|
||||
$ vim /tmp/x/src/nuevo.rs
|
||||
# daemon log:
|
||||
[watcher] 🧲 /tmp/x/src/nuevo.rs → x/src (0.7470)
|
||||
|
||||
$ echo "edit" >> /tmp/x/docs/n1.md
|
||||
[watcher] 🧲 /tmp/x/docs/n1.md → x/docs (0.8169)
|
||||
|
||||
Mecánica:
|
||||
- DB pasa a `Arc<Mutex<MonadDb>>` para sharing con el thread del
|
||||
watcher.
|
||||
- Watcher en thread dedicado (`nouser-watcher`); reacciona sólo a
|
||||
Create/Modify, ignora Access/Metadata-only.
|
||||
- `react_to_change(path, metadata, db)` computa embedding,
|
||||
filtra por `centroid_model`, busca best attraction.
|
||||
- No re-publica al broker ni muta DB — sólo observa y narra. La
|
||||
invalidación selectiva (re-cluster + replace_monads + diff
|
||||
publish) queda como work futuro.
|
||||
|
||||
Limitación conocida: `notify` emite múltiples eventos por una sola
|
||||
edición (Create + Modify, etc.). Sin debounce, el watcher reporta
|
||||
varias veces. Aceptable para demo; production conviene debounce
|
||||
~100ms por path.
|
||||
|
||||
Tests: 7 (card) + 24 (core) verdes, 0 errores, 0 warnings.
|
||||
|
||||
### feat(nouser): hidratación del daemon vía sled + path_hint
|
||||
El daemon ya no recomputa ciegamente al arrancar. Si la DB tiene
|
||||
Mónadas previas con `centroid_model` válido, las publica instantáneo
|
||||
|
||||
Reference in New Issue
Block a user