# 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`.
