gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 188Rust 55Shell 30Markdown 281211 Definiciones

plan: el paso 6, hecho — busybox fuera de las imágenes

`busybox → perfiles: NINGUNO`. Queda escrito por qué la dep era redundante (el
sandbox monta el rootfs Alpine entero y ése ya trae busybox), la medición que lo
probó (zlib-ng sin la dep sella igual), y el tropiezo del cambio mecánico: el
regex pegó en una línea de comentario en jq y linux, y la comprobación que hay
que hacer siempre en un cambio masivo sobre ficheros con prosa es `git diff`
mirando que ningún comentario se haya movido.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

e67425eafc8379565c5dcb7f6ffba918fb426f0c · por Sergio · (hace 1 mes) · padre c98429ed5 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

1 archivos · +43 −0

diff --git a/docs/plan-botar-busybox.md b/docs/plan-botar-busybox.md
index 399bd885..f7d3769b 100644
--- a/docs/plan-botar-busybox.md
+++ b/docs/plan-botar-busybox.md
@@ -1574,3 +1574,46 @@ credencial, no un compilador.
 que el grafo reportaba `never` sobre artefactos que sí existen. Se trajo a mano —es lo mismo que
 hace la cosecha, sin tocar el lock— y con él aparecen los 26 sellados que no están en el disco de
 esta máquina pero sí en el del worker.
+
+---
+
+# Paso 6 — busybox sale de las build-deps, y con eso de las IMÁGENES (2026-09-22)
+
+> **`busybox → perfiles: NINGUNO`.** Era el paso que de verdad lo saca del producto.
+
+`busybox` **nunca estuvo declarado en `targets.toml`** (cero menciones): llegaba a los 7 perfiles
+por la **clausura**, porque 24 recetas lo pedían en `[deps] build`. Quitarlo de ahí lo saca de todas
+las imágenes sin escribir una línea de userland.
+
+## La dep era redundante, y se midió antes de tocar las 24
+
+El sandbox monta el **rootfs Alpine completo** (`.dev-fs/alpine`) como base read-only
+(`takana-build/src/sandbox.rs:4`), y ese rootfs **ya trae su propio busybox**: el shell y los
+coreutils del build salen de ahí. La dep sólo añadía el busybox de takana encima.
+
+| comprobación | resultado |
+|---|---|
+| `zlib-ng` sin la dep | ✅ sella igual (`b3:f2439671`) |
+| recetas que MENCIONAN busybox en sus fases | **ninguna** de las 23 |
+| las 4 que lo nombran (`e2fsprogs kbd vim networkmanager`) | lo hacen en **comentarios** |
+
+## El tropiezo del cambio mecánico
+
+Dos recetas se resistieron: `jq` y `linux`. El regex con `count=1` pegó en una línea de
+**comentario** que también dice `build = [` —las dos documentan sus deps en prosa— y, como ahí no
+había busybox, la sustitución no cambiaba nada y el fichero no se escribía. El efecto fue dejar
+intacta la dep real de más abajo. Arregladas a mano, y verificado con `git diff` que **ningún
+comentario quedó alterado** en las otras 22: un cambio masivo sobre ficheros con prosa necesita esa
+comprobación, no basta con que el resultado parezca correcto.
+
+## Lo que queda de busybox
+
+Ya no está en ninguna imagen. Lo que sigue es el **frente C**, que es ADR y toca la evidencia de
+reproducibilidad:
+
+- `STAGE1_COMPONENTS` (`takana-bootstrap/src/lib.rs:172`) — es 1 de los 4 del self-host
+- `ATTEST_PATHS` (`:465`) — `bin/busybox` está atestado
+- dos cards con `exec "/bin/busybox"`: la consola (`:240`) y sshd (`:429`)
+
+Y los **47 applets** del censo, que ya no viajan en ninguna imagen pero siguen siendo el inventario
+de lo que el producto tendría que proveer por otra vía el día que el frente C se cierre.