H4b: gate de compatibilidad de configs en la receta real + hammer install (SDD 15 §H4)
Sube el modelo de slots de wawa-memo (prototipo host) a hammer:
- Recipe + source_patch del .swm llevan bloque `slots` {claims, requires} (slot->b3:…),
FUERA de hash_inputs (topología ≠ identidad, no mueve el artifact_hash). Viaja intacto
por los dos sentidos del puente (Recipe->.swm->Recipe): test de round-trip.
- InstalledDb registra claims por paquete + system_state() -> slot->hash (el Estado del gate).
- hammer-core::compat::evaluar(estado, slots) -> Veredicto {Compatible, Colision, Incompatible}
(el álgebra probada en wawa-memo, sobre tipos de hammer).
- Gate en `hammer install`: antes de tocar nada evalúa el paquete contra el estado instalado.
Incompatible (requisito sin resolver, caso wayland) -> aborta; Colisión (caso logo) ->
aborta pidiendo elección salvo --force-slots; Compatible -> procede y registra los claims.
Plumbing propagado por los 5 sitios de Mutation::SourcePatch (from_recipe, swm_bridge,
export, bus, orchestrator). Tests: compat (4) + slots-no-en-hash/round-trip (2) +
system_state (1) + puente receta<->swm (1). Workspace compila y verde.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -303,14 +303,25 @@ La definición dura de compatibilidad de una config `C` contra mi estado `E`:
|
||||
chequeo de slots y ser inservible por **incompleta** (paquete manipulado ⇒ `RefColgante`)
|
||||
o **insegura** (resultado afirmado falso ⇒ recomputar lo rechaza) — las tres propiedades,
|
||||
un solo hash.
|
||||
- **H4b** — (siguiente) subir el modelo de slots de `wawa-memo` (host/std) a la **receta**
|
||||
real: que un `.swm`/receta declare `reclama`/`requiere` (fuera de `hash_inputs`, misma
|
||||
disciplina que la evidencia de H1 y la procedencia de H3a). El `Estado` instalado es la
|
||||
`InstalledDb` de Etapa F vista como `slot → Id`. Entonces `hammer install <config-de-malla>`
|
||||
corre `filtrar` contra el estado local antes de tocar nada. Frontera: definir el
|
||||
**espacio de slots** del sistema (qué es una "superficie": un fichero, un módulo wasm de
|
||||
wawa, un componente) — ahí está el trabajo de diseño real, no en el álgebra de
|
||||
compatibilidad (que ya está).
|
||||
- **H4b** ✅ — El modelo de slots **subido a la receta real de hammer** (no ya un prototipo
|
||||
host). Cambios:
|
||||
- `Recipe` (y el `source_patch` del `.swm`) llevan un bloque **`slots`** con `claims`/
|
||||
`requires` (`slot → b3:…`), **fuera de `hash_inputs`** — misma disciplina que la evidencia
|
||||
de H1: declara topología, no identidad ⇒ no mueve el `artifact_hash` (test que lo ancla).
|
||||
Viaja intacto por los dos sentidos del puente (`Recipe → .swm → Recipe`, test de round-trip).
|
||||
- `InstalledDb` (Etapa F) registra los `claims` por paquete y expone `system_state() →
|
||||
slot → hash`: el `Estado` que el gate consulta.
|
||||
- `hammer-core::compat::evaluar(estado, slots) → Veredicto` (el álgebra probada en `wawa-memo`,
|
||||
ahora sobre tipos de hammer).
|
||||
- **El gate en `hammer install`**: antes de reconstruir o hidratar nada, evalúa el paquete
|
||||
entrante contra el estado instalado. **Incompatible** (requisito sin resolver, caso wayland)
|
||||
⇒ aborta con un mensaje claro; **Colisión** (caso logo) ⇒ aborta pidiendo elección, salvo
|
||||
`--force-slots`; **Compatible** ⇒ procede y registra los `claims` (para que la PRÓXIMA
|
||||
instalación detecte la colisión). `hammer install --help` expone `--force-slots`.
|
||||
Frontera que queda: definir el **espacio de slots** del sistema (qué es una "superficie": un
|
||||
fichero, un módulo wasm de wawa, un componente) — ahí está el diseño real, no en el álgebra
|
||||
(que ya está). Hoy el productor de recetas declara los slots a mano; falta la **convención**
|
||||
y, más allá, **derivarlos** de lo que el paquete de verdad toca.
|
||||
|
||||
**Frontera honesta.** H4a demuestra el *álgebra* sobre hashes abstractos; lo que **no**
|
||||
resuelve es la **granularidad de los slots** — dos configs pueden no colisionar en el slot
|
||||
@@ -370,7 +381,7 @@ 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)
|
||||
└► H4a ✅ (config = conjunto de slots por hash: compatible/completa/segura)
|
||||
└► H4b (subir el modelo de slots a la receta/.swm real)
|
||||
└► H4b ✅ (slots en la receta/.swm real + gate en `hammer install`)
|
||||
└► [proceso] replay del MonotonicLog ──► plan OS-CRDT (otro agente)
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user