d0a175a90a
badu-core: modelo Note + NoteStore (etiquetas, búsqueda) + grafo de wiki-links [[...]] derivado del cuerpo (forward/backlinks, huérfanas, enlaces colgantes; resolución case-insensitive). badu-gravity: SemanticField sobre vectores semánticos — afinidad coseno, vecinos más cercanos, clústeres por umbral (union-find) y layout 2D dirigido por fuerzas (notas afines se atraen, todas se repelen; determinista, sin RNG). 29 tests. Cero red, #![forbid(unsafe_code)]. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1.9 KiB
1.9 KiB
modules/badu/ — Toma de notas con gravedad semántica
Propósito. Notas como texto enlazado: cada nota tiene título,
etiquetas y wiki-links [[...]]; el conjunto forma un grafo navegable.
Sobre ese grafo, una capa de gravedad semántica agrupa y posiciona las
notas por afinidad de significado.
Crates
| crate | tipo | rol |
|---|---|---|
badu-core |
lib | Note + NoteStore (etiquetas, búsqueda) + grafo de wiki-links (forward/backlinks, huérfanas, colgantes) |
badu-gravity |
lib | SemanticField: afinidad coseno, vecinos, clústeres por umbral y layout 2D dirigido por fuerzas |
Modelo
Note ([[links]] en el cuerpo) ──► NoteStore ──► grafo de enlaces
│ │
vector semántico (verbo) ──► SemanticField ──► clústeres + layout 2D
- Enlaces: el grafo se deriva del cuerpo, no se guarda aparte.
[[cocina]]y[[Cocina]]resuelven a la misma nota. - Gravedad: las notas afines se atraen, todas se repelen — un layout force-directed determinista (posiciones iniciales fijas, sin RNG).
- Clústeres: union-find sobre las afinidades que superan un umbral.
Dependencias
core← sóloserde.gravity←badu-core+serde.gravityrecibe los vectores ya calculados — no se acopla averbo; el frontend embebe las notas con unverbo::Providery los inyecta.- Ambos
#![forbid(unsafe_code)]y deterministas.
Estado
core + gravity implementados y verdes (29 tests). Pendiente: las
4 lentes visuales (lista, grafo, gravedad espacial, línea de tiempo),
los «Susurros» (sugerencias vía verbo) y el frontend GPUI —
separabilidad UI estricta, el núcleo ya es agnóstico.