Files
sergio ea079a0b23 feat(badu): app demo — cuaderno con grafo de enlaces y gravedad
CLI que siembra un cuaderno (cocina/jardín/oficina), imprime el grafo
de wiki-links (forward/backlinks, huérfanas, colgantes) y los
clústeres por gravedad semántica + vecinos + layout 2D.
cargo run -p badu.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 16:43:42 +00:00

44 lines
2.0 KiB
Markdown

# 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). Demo CLI en
`apps/badu` (`cargo run -p badu`): cuaderno sembrado con grafo de
enlaces + clústeres por gravedad. **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.