From 3ff1823e388a005f4421decefec80533758c6a72 Mon Sep 17 00:00:00 2001 From: sergio Date: Sun, 5 Jul 2026 06:20:07 -0400 Subject: [PATCH] =?UTF-8?q?docs:=20SDD=2015=20=C2=A7H3c=20hecho=20?= =?UTF-8?q?=E2=80=94=20el=20linker=20de=20contenido=20(grano=20intra-funci?= =?UTF-8?q?=C3=B3n=20por=20hash,=20Merkle-DAG=20de=20c=C3=B3digo)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- docs/15-frontier-ai-native.md | 44 +++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/docs/15-frontier-ai-native.md b/docs/15-frontier-ai-native.md index 5f2a36a7..ec860015 100644 --- a/docs/15-frontier-ai-native.md +++ b/docs/15-frontier-ai-native.md @@ -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:"`), 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.