feat(badu): toma de notas — núcleo + gravedad semántica
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>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# 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
|
||||
|
||||
```text
|
||||
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ólo `serde`. `gravity` ← `badu-core` + `serde`.
|
||||
- `gravity` recibe los vectores ya calculados — no se acopla a `verbo`;
|
||||
el frontend embebe las notas con un `verbo::Provider` y 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.
|
||||
Reference in New Issue
Block a user