granja: el worker NO TIENE Rust ni Go — el 76% del catálogo sólo construye en el hub

Al lanzar COSMIC, sus 30 raíces fallaron de golpe con «spawn cargo vendor: No such file».
Medido:
    worker:  cargo AUSENTE · rustc AUSENTE · go AUSENTE
    hub:     cargo ✓ · rustc ✓ · go ✓

hammer invoca `cargo vendor` en el HOST, no dentro del sandbox — el vendoreo pasa ANTES de
entrar a la caja. El worker no trae toolchain de Rust ni Go ⇒ la granja no puede construir
NINGUNA receta Rust o Go: COSMIC entero, las 228 Rust del corpus y las 362 Go. **El 76% del
catálogo sólo puede construirse en el hub**, que es UNA SOLA MÁQUINA — justo lo que el respaldo
de ayer intentaba dejar de asumir.

ESTO EXPLICA HACIA ATRÁS todos los «no construyó» de esta campaña (amp, anew, apko, atlas, bom,
broot, cargo-audit, cargo-hack, git-absorb). Yo lo atribuí a «necesitan red para sus módulos» y
lo escribí así en el SDD 23 y en memoria. Era falso: **falta el binario**, no la red.

Y ARREGLARLO NO ROMPE LA HERMETICIDAD: cargo/go aquí son herramientas de FETCH, del mismo orden
que `git` para clonar — se usan para traer y fijar deps ANTES del build, no dentro del sandbox.
Instalarlos en la imagen golden no relaja el aislamiento; el build sigue ocurriendo en la caja
con el árbol ya vendoreado. Es lo contrario del caso «no engordar el rootfs del worker», que
habla del rootfs DEL SANDBOX.

⇒ Decisión de aprovisionamiento, no de arquitectura, y desbloquea tres cuartas partes del
catálogo para la granja.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-08 17:03:55 -04:00
co-authored by Claude Opus 5
parent 0f1f2e9ef6
commit dff8409660
+38
View File
@@ -313,3 +313,41 @@ El último merece subrayado: **ADR 0012 lleva meses «pendiente sin decidir» y
builds de la misma dep se pisan el árbol de `work/sources` y lo dejan a medias. Una campaña de
reconstrucción masiva es exactamente el escenario que lo dispara, así que decidirlo deja de ser
opcional si la etapa 4 va a correr en paralelo.
---
## 9. 🧱 EL BLOQUEANTE ESTRUCTURAL DE LA GRANJA: el worker no tiene Rust ni Go
Medido el 2026-08-08 al lanzar COSMIC:
```
worker: cargo AUSENTE · rustc AUSENTE · go AUSENTE
hub: cargo ✓ · rustc ✓ · go ✓ (~/.cargo/bin)
```
`hammer` invoca **`cargo vendor` en el HOST**, no dentro del sandbox hermético — el vendoreo pasa
antes de entrar a la caja. El worker no trae ningún toolchain de Rust ni Go, así que **la granja no
puede construir NINGUNA receta Rust o Go**:
- **COSMIC entero** (todos los `cosmic-*` son Rust) — de ahí que 30 raíces fallaran de golpe con
`spawn cargo vendor: No such file`;
- las **228 recetas Rust** y las **362 Go** del corpus.
O sea que **el 76% del catálogo sólo puede construirse en el hub**, que es una sola máquina — justo
lo que el respaldo del 2026-08-07 intentaba dejar de asumir.
### Lo que esto explica hacia atrás
Todos los «no construyó» de Go/Rust en el worker durante esta campaña —`amp`, `anew`, `apko`,
`atlas`, `bom`, `broot`, `cargo-audit`, `cargo-hack`, `git-absorb`— eran **la misma causa**, y yo la
atribuí primero a «necesitan red para sus módulos». La red no tenía nada que ver: **falta el
binario**.
### Y no rompe la hermeticidad arreglarlo
`cargo`/`go` aquí son **herramientas de FETCH**, del mismo orden que `git` para clonar un repo: se
usan para traer y fijar las deps ANTES del build, no dentro del sandbox. Instalarlos en la imagen
golden del worker no relaja el aislamiento del build — el build sigue ocurriendo en la caja con el
árbol ya vendoreado. Es exactamente lo contrario del caso «no engordar el rootfs del worker», que
habla del rootfs DEL SANDBOX.
**Es una decisión de aprovisionamiento, no de arquitectura**, y desbloquea tres cuartas partes del
catálogo para la granja.