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>
This commit is contained in:
@@ -11,14 +11,17 @@ y los publica en un DHT. Búsqueda por similitud semántica cross-repo.
|
||||
| `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 | Stub (2 LOC) — FUSE que proyecta el índice como filesystem |
|
||||
| `minga-cli` | bin | CLI: index, search, peers, bootstrap |
|
||||
| `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/cli.
|
||||
`-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
|
||||
|
||||
@@ -27,10 +30,34 @@ 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
|
||||
|
||||
LOC 5,091. Indexa repos reales. 15 TODOs en core (más patterns para
|
||||
cada lenguaje). `minga-vfs` aún no implementado — bloquea el montaje
|
||||
del repo como filesystem (paths virtuales → blobs por hash bajo
|
||||
demanda). NO está relacionado con Mónadas (esas son de `akasha/`).
|
||||
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`.
|
||||
|
||||
Reference in New Issue
Block a user