docs: SDD 15 §H2a hecho — auditoría de determinismo wasm de wawa

El subconjunto puro ya existe (ejecutar_dinamico/_v2, linker vacío); H2a lo
sella con un contrato de clave de caché + hash-de-entorno. Deliverable en
tawasuyu/03_ukupacha/wawa/SDD-determinismo.md. Desbloquea H2b (prototipo de
memoización local blake3(módulo)⊕blake3(entrada)→salida).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-03 01:11:21 -04:00
co-authored by Claude Opus 4.8
parent 6ac6438c00
commit 7a708aa282
+8 -1
View File
@@ -101,10 +101,17 @@ capacidad expuesta (tiempo, random, I/O) filtre no-determinismo a la salida hash
spike de wawa, no de hammer.
**Tickets (spike, no fase):**
- **H2a** — Auditar determinismo del runtime wasm de wawa: enumerar toda fuente de no-determinismo
- **H2a** — Auditar determinismo del runtime wasm de wawa: enumerar toda fuente de no-determinismo
alcanzable por una app (`wawa-kernel/src/wasm/`), y definir el subconjunto "puro" (módulo +
entrada explícita, sin syscalls no deterministas). Salida: un doc `wawa/SDD` §determinismo con
el veredicto honesto (qué es puro, qué no).
**Hecho (2026-07-03):** `tawasuyu/03_ukupacha/wawa/SDD-determinismo.md`. Veredicto: el subconjunto
puro **ya existe** en el código (`ejecutar_dinamico`/`_v2`, `wasm/mod.rs:335,430` — linker VACÍO +
reloj virtual + fuel/memoria fijos + wasmi 1.0 sin simd). H2a no era construirlo sino **sellarlo**:
contrato de clave `blake3(módulo)⊕blake3(entrada)⊕E` con `E` = hash-de-entorno (pin wasmi/features/
fuel/mem/ABI); único vector residual acotado = payload de NaN vía `reinterpret` (sólo cross-build,
irrelevante para H2b local). La superficie de capacidades (`env/*.rs`) reintroduce no-determinismo
o efectos ⇒ NO memoizable; sólo la vía linker-vacío lo es.
- **H2b** — Prototipo de `blake3(módulo)+blake3(entrada) → blake3(salida)` como caché local
(un `LwwMap` de `shared/crdt`), sin malla todavía. Test: misma entrada ⇒ hit; recompute ⇒
byte-idéntico (o el determinismo está roto y H2a mintió).