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 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 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. 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.