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>
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
1 archivos · +38 −0
- docs/23-plan-rehasheo.md +38 −0
diff --git a/docs/23-plan-rehasheo.md b/docs/23-plan-rehasheo.md
index 17757eed..b281f932 100644
--- a/docs/23-plan-rehasheo.md
+++ b/docs/23-plan-rehasheo.md
@@ -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.