docs: SDD 15 §H3c hecho — el linker de contenido (grano intra-función por hash, Merkle-DAG de código)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -203,10 +203,38 @@ proyecto, no una fase.
|
||||
hash; compartir *resultados* es seguro por reproducción — juntos, la foto completa de «el hash es
|
||||
el espacio de nombres común».
|
||||
|
||||
**Frontera honesta.** No prometer "una distro donde paquete = función = proceso": H3b demostró
|
||||
que el **núcleo** del modelo (definir por hash, nombres como metadata, actualizar sin romper,
|
||||
componer por hash) se sostiene sobre wasm, no que el grano fino intra-función o el colapso total
|
||||
lo hagan. Es la idea más disruptiva; su núcleo ya está verde, su ambición máxima sigue abierta.
|
||||
- **H3c** ✅ — (exploratorio) **El grano intra-función: el linker de contenido** (2026-07-05,
|
||||
`wawa-memo/src/enlace.rs` + `tests/h3c.rs`, 10 tests; 40 verdes en el crate). H3b dejó las
|
||||
definiciones *opacas*: una función wasm no podía llamar a otra — la composición vivía sólo en el
|
||||
árbol (`Termino::Componer`), fuera del bytecode. H3c mete la dependencia **dentro**: una
|
||||
definición importa a otra **por hash** (`import "base" "h:<blake3-hex>"`), y el linker la
|
||||
satisface únicamente con los bytes de la `Base` que hashean exacto a ese `Id` — el contrato de
|
||||
`Termino::Ref`, ahora intra-bytecode. Consecuencias verificadas:
|
||||
**(1) el Merkle-DAG de código** — el hash del callee está embebido en el bytecode del caller ⇒
|
||||
la identidad del caller pinnea transitivamente el DAG entero; la dependencia ENTRA a la
|
||||
identidad; **(2) actualizar no rompe, transitivamente** — «actualizar g» = def nueva + rebind;
|
||||
toda f que embebía `h(g_v1)` sigue llamando los bytes exactos de siempre (v1/v2 coexisten);
|
||||
**(3) los ciclos son imposibles por criptografía**, no por disciplina — un ciclo exigiría un
|
||||
hash que depende del hash que lo contiene (invertir BLAKE3); el DAG es DAG por construcción,
|
||||
idéntico a Unison; **(4) la memoización subsume el DAG** — la clave del compuesto
|
||||
(`blake3(bytecode) ⊕ entrada ⊕ E`) ya cubre sus deps; un cierre INCOMPLETO jamás se cachea (el
|
||||
colgante es un hecho de la base local, no del bytecode — cachearlo envenenaría réplicas);
|
||||
`E` distingue el linker (`vacio` vs `base-v1`) para que los espacios de claves no colisionen;
|
||||
**(5) los paquetes de malla llevan el cierre transitivo** — retener/alterar una dep profunda
|
||||
(a dos aristas del árbol) tumba la ingesta con `RefColgante`, y la portabilidad del compuesto
|
||||
hereda el veredicto más conservador de su DAG (`clasificar_cierre`). Política honesta: cada
|
||||
subllamada corre en instancia fresca con fuel completo (pin en `E`); el presupuesto compuesto
|
||||
no está acotado globalmente — suficiente para el *modelo*, no para un sandbox de producción.
|
||||
Con H3c, de las dos ambiciones abiertas de H3 queda demostrado el **grano intra-función** (en
|
||||
su forma wasm: función llama función por hash); lo aún abierto es el **colapso total**
|
||||
paquete = función = proceso (el lado "proceso" = replay del MonotonicLog, plan OS-CRDT).
|
||||
|
||||
**Frontera honesta.** No prometer "una distro donde paquete = función = proceso": H3b+H3c
|
||||
demostraron el núcleo del modelo (definir por hash, nombres como metadata, actualizar sin romper
|
||||
— ahora también transitivo —, componer por hash *fuera y dentro* del bytecode) sobre wasm, no el
|
||||
colapso total ni el grano sub-función (el AST interno de una función sigue siendo opaco: el átomo
|
||||
es la función-módulo, no la expresión). Es la idea más disruptiva; su núcleo ya está verde, su
|
||||
ambición máxima sigue abierta.
|
||||
|
||||
---
|
||||
|
||||
@@ -218,6 +246,7 @@ H2a (auditar determinismo wasm) ──► gate de todo H2 (spike wawa)
|
||||
└► H2b (caché local) ──► H2c (caché de malla) [sólo si H2a da verde]
|
||||
H3a (design-doc) ──► registrar la visión, barato
|
||||
└► H3b ✅ (experimento wasm-por-función) [sobre H2 puro: núcleo Unison verde]
|
||||
└► H3c ✅ (linker de contenido: imports por hash, Merkle-DAG intra-función)
|
||||
```
|
||||
|
||||
Recomendación: **H1 primero** (empuja la frontera que ya tenemos, sin apuestas). **H2a** en
|
||||
@@ -231,6 +260,7 @@ no construir. H2c y H3b son futuro condicionado a verdes previos.
|
||||
- **No reclama verificación formal del sistema.** H1 estratifica evidencia y la reporta;
|
||||
"verificado bajo supuestos", no "invulnerable".
|
||||
- **No promete memoización de malla sin determinismo probado** (H2a es el gate).
|
||||
- **No promete el colapso Unison.** H3b (✅) demostró que su *núcleo* (definir por hash, nombres
|
||||
como metadata, actualizar sin romper, componer por hash) se sostiene sobre wasm; el colapso
|
||||
total (paquete = función = proceso, grano intra-función) sigue siendo ambición, no promesa.
|
||||
- **No promete el colapso Unison.** H3b (✅) demostró el *núcleo* (definir por hash, nombres
|
||||
como metadata, actualizar sin romper, componer por hash) y H3c (✅) el *grano intra-función*
|
||||
(función llama función por hash: el Merkle-DAG de código); el colapso total
|
||||
(paquete = función = proceso, grano sub-función) sigue siendo ambición, no promesa.
|
||||
|
||||
Reference in New Issue
Block a user