H4c: superficies OBSERVADAS — colisión de fichero en install sin declarar slots (SDD 15 §H4)
La misma subida de H1 (prometer -> verificar), ahora sobre topología: la superficie más común de un paquete es el conjunto de paths que escribe, y esos paths ya están declarados en el .swm (target_bin + file_drop.path), conocidos ANTES de hidratar. - compat::output_paths(swm) lee esos paths; compat::path_collisions(db, name, paths) detecta cuáles ya posee OTRO paquete instalado (reusa InstalledDb.files + owner_of, cero declaración nueva). Reinstalar el mismo paquete sobre sus propios paths NO colisiona (upgrade). - Gate en `install` corre el chequeo observado JUNTO al declarado (H4b): pisar el fichero de otro paquete = caso logo a nivel de fichero (elección) -> aborta salvo --force-slots. - Verificado e2e REAL (tests/compat_gate.rs, shell-ea al binario hammer): dos paquetes escriben /share/logo.png; el 2do aborta con "COLISIÓN de fichero" sin escribir nada; con --force-slots la elección se respeta y el fichero se escribe. Un paquete SIN declarar slots ya participa del gate por lo que de verdad toca. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -320,8 +320,25 @@ La definición dura de compatibilidad de una config `C` contra mi estado `E`:
|
||||
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.
|
||||
(que ya está).
|
||||
- **H4c** ✅ — **Superficies OBSERVADAS: "no prometas, observá".** H4b confía en que el AUTOR
|
||||
declare `slots`; la misma subida que hizo H1 (de *prometer* a *verificar*) aplica acá: la
|
||||
superficie más común y observable de un paquete es **el conjunto de paths que escribe**, y
|
||||
esos paths YA están declarados en el `.swm` (`target_bin` de cada source_patch, `path` de
|
||||
cada file_drop) — se conocen **antes de hidratar**, así que el gate aborta sin tocar nada.
|
||||
- `compat::output_paths(swm)` lee esos paths; `compat::path_collisions(db, name, paths)`
|
||||
detecta cuáles ya posee **otro** paquete instalado (reusa `InstalledDb.files` + el nuevo
|
||||
`owner_of` — cero declaración nueva en la receta). Reinstalar el mismo paquete sobre sus
|
||||
propios paths NO colisiona (es upgrade).
|
||||
- `hammer install` corre este chequeo **junto** al declarado: pisar el fichero de otro
|
||||
paquete es el caso *logo* a nivel de fichero (elección) ⇒ aborta salvo `--force-slots`.
|
||||
- **Verificado e2e real** (`tests/compat_gate.rs`, shell-ea al binario `hammer`): dos paquetes
|
||||
escriben `/share/logo.png`; el segundo aborta con "COLISIÓN de fichero" **y no escribe nada**;
|
||||
con `--force-slots` la elección se respeta y el fichero se escribe.
|
||||
Con H4c, un paquete **sin declarar slots** ya participa del gate por lo que de verdad toca.
|
||||
Lo que queda abierto es **derivar la otra mitad** (los `requires` observados: de qué depende
|
||||
el paquete) y subir el grano del path-slot a superficies más ricas (un módulo wasm de wawa,
|
||||
un componente), además del **colapso** con el lado proceso.
|
||||
|
||||
**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
|
||||
@@ -382,7 +399,8 @@ H3a (design-doc) ──► registrar la visión, barato
|
||||
└► H3c ✅ (linker de contenido: imports por hash, Merkle-DAG intra-función)
|
||||
└► H4a ✅ (config = conjunto de slots por hash: compatible/completa/segura)
|
||||
└► H4b ✅ (slots en la receta/.swm real + gate en `hammer install`)
|
||||
└► [proceso] replay del MonotonicLog ──► plan OS-CRDT (otro agente)
|
||||
└► H4c ✅ (superficies OBSERVADAS: colisión de fichero, sin declarar slots)
|
||||
└► [proceso] replay del MonotonicLog ──► plan OS-CRDT (otro agente)
|
||||
```
|
||||
|
||||
Recomendación: **H1 primero** (empuja la frontera que ya tenemos, sin apuestas). **H2a** en
|
||||
|
||||
Reference in New Issue
Block a user