Files
brahman/crates/modules/semantic_dht/SDD.md
T
sergio e77a32f4d6 feat(minga): minga-vfs — proyecta el repo como filesystem FUSE
minga-vfs deja de ser un stub: monta el repositorio direccionado por
contenido como un filesystem FUSE de sólo lectura. roots/<hash> da el
código fuente reconstruido (formato normalizado) de cada raíz del MST;
cas/<hash> resuelve cualquier hash bajo demanda como S-expression.

Capas separadas: render (SemanticNode→texto, puro) + source (contrato
NodeSource, backends sled/memoria) + fs (único módulo con fuser).
Nuevo subcomando `minga mount <punto>`. Dep fuser 0.15 sin libfuse-dev
(default-features = false). 14 tests nuevos, sin regresión en minga-cli.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 13:23:44 +00:00

64 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# modules/semantic_dht/ (minga) — DHT semántico de código
**Propósito.** Indexador peer-to-peer de código fuente: parsea con
tree-sitter, normaliza identifiers (α-equivalence), produce embeddings
y los publica en un DHT. Búsqueda por similitud semántica cross-repo.
## Crates
| crate | tipo | rol |
| -------------- | ---- | ---------------------------------------------------------- |
| `minga-core` | lib | Parser + α-hashing (Rust/Py/TS/JS/Go) + scoring |
| `minga-store` | lib | Sled backend para índice local |
| `minga-p2p` | lib | Capa libp2p: kad + bootstrap + provider records |
| `minga-vfs` | lib | FUSE: monta el repo como filesystem de sólo lectura |
| `minga-cli` | bin | CLI: init, status, ingest, listen, sync, watch, mount |
## Dependencias
- `minga-core``tree-sitter`, `tree-sitter-rust`, `-python`, `-ts`,
`-js`, `-go`. Consumido por store/p2p/vfs/cli.
- `minga-p2p``protocol/brahman-net` (libp2p compartido).
- `minga-vfs``minga-store` (lee el `PersistentRepo`), `fuser`
(`default-features = false`: sin pkg-config/libfuse-dev en build),
`libc`.
## α-hashing
Normaliza nombres de variables/funciones a `α0..αN` para que dos
implementaciones idénticas con identifiers distintos colisionen en el
mismo hash. Cubre let-else, if-let, or-patterns, let-chains en Rust;
cierres en Py/TS/JS/Go.
## minga-vfs — proyección como filesystem
`minga mount <punto>` monta el repo direccionado por contenido como un
filesystem FUSE de sólo lectura. Layout:
```text
README explicación del propio montaje
roots/<hash> código fuente reconstruido (formato normalizado) de
cada raíz del MST — `ls roots/` las lista todas
cas/<hash> S-expression del subárbol de ese hash — el directorio
NO se enumera, pero `cat cas/<hash>` resuelve cualquier
hash conocido (el "blob por hash bajo demanda")
```
El render del fuente es **normalizado**, no byte-exacto: el AST
descartó whitespace y comentarios al ingerir, así que `roots/<hash>`
re-indenta por estructura de llaves. Python (cuya estructura vive en
la indentación) sale como secuencia de tokens.
Capas (separabilidad): `render` (SemanticNode → texto, puro) +
`source` (contrato `NodeSource`, backends sled/memoria) + `fs` (único
módulo acoplado a `fuser`).
## Estado
Pipeline core completo: indexa repos reales, sincroniza P2P, y se
monta como filesystem. 15 TODOs en core (más patterns para cada
lenguaje). `minga-vfs` implementado — el montaje del repo como
filesystem (paths virtuales → blobs por hash bajo demanda) ya
funciona. NO está relacionado con Mónadas (esas son de `akasha/`).
Ver `docs/changelog/minga.md`.