Pedido del usuario: «el catálogo de todo lo que falta hasta decir la distro está publicable, y lo de más hasta la distro está completa. Y un tipo manual, todos los pasos que tengo que ir haciendo en las tres etapas que marcan esos dos codos.» SDD 20 = el inventario, medido contra el repo (grafo, no recuento a mano). SDD 21 = el manual de a pie, un comando por vez, marcando qué puede hacer el agente y qué es del usuario. LO QUE APARECIÓ AL MEDIR, y que no se sabía: · La deuda de construcción NO son 12+12+13+12 recetas: es UNA lista de 12 vista desde cuatro grafos (la cadena GUI de la cascada de mesa). Un solo arreglo —declarar python3 y cmake en `[deps]`, no engordar el rootfs del worker— las destraba todas. `base` y `cli` ya están al 100%, KDE cierra 162/162. · De WMs Wayland ligeros no hay NINGUNO: sólo `foot` y `mako`. Falta wlroots entero, los compositores y todos los accesorios (waybar, fuzzel, swaybg, grim, slurp, wl-clipboard). · De aplicaciones gráficas de terceros hay CERO. Ni visor de imágenes ni lector de PDF. · Firefox no es «una receta más»: su cadena de `*-sys` con C++ es justo la frontera que el techo MSRV del sandbox (1.96) no cruza. Antes de Firefox hay que subir el techo; empezar por la receta es empezar por el final. · El texto de la licencia va inyectado en `hammer pack`, NO en la fase install: las fases entran al ArtifactHash, así que hacerlo en la receta re-hashearía las 1141. Pack es aguas abajo y sale gratis. Misma lógica que hizo pagable el campo `license`. Dos correcciones al SDD 19, que escribí yo ayer y tenía mal: · «5 de 771 recetas declaran licencia» — falso por partida doble. El número real era 0 de 1141; los «5» eran falsos positivos de `grep license` (nombres de paquete, una línea de install, un comentario) y 771 son los nodos del grafo del corpus, no las recetas. · «El repo no declara licencia» — falso: hay LICENSE (MIT) en la raíz y en Cargo.toml. No lo miré antes de escribirlo. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
11 KiB
SDD 20 — El catálogo de lo que falta: hasta PUBLICABLE y hasta COMPLETA
Escrito 2026-08-07, a pedido del usuario: «el catálogo de todo lo que falta hasta decir la distro está publicable, y lo de más hasta la distro está completa».
Este documento es el inventario. El SDD 21 es el manual de a pie: qué tiene que hacer el usuario, en qué orden, en cada una de las tres etapas.
Todo lo de acá está medido contra el repo el 2026-08-07, no estimado de memoria. Donde hay un número, hay un comando que lo produjo.
Los dos codos, y por qué están donde están
- PUBLICABLE = un extraño puede descargarla, instalarla, usarla y actualizarla, y nosotros estamos en regla al dársela. No significa que tenga todo lo que uno querría.
- COMPLETA = tiene lo que una persona espera de un sistema de escritorio para su día a día, sin tener que salir a buscar nada fuera.
La distancia entre los dos codos es enorme y el orden importa: casi todo lo caro (navegador, ofimática) está DESPUÉS del primer codo, y casi todo lo bloqueante (legal, claves, actualización) está ANTES. La trampa clásica es invertirlos — pasarse meses con el navegador y descubrir el día del anuncio que no se puede publicar.
PARTE I — Hasta «la distro está PUBLICABLE»
I.1 Estado de construcción: esto ya está casi cerrado
Medido con docs/state/build-state*.json (el grafo, no recuento a mano):
| frente | nodos | sellados | en deuda |
|---|---|---|---|
| corpus | 771 | 759 | 12 |
| KDE | 968 | 952 | 12 |
| GNOME | 853 | 840 | 13 |
| COSMIC | 818 | 806 | 12 |
Los perfiles base (51 nodos) y cli (74 nodos) están al 100%, deuda 0. KDE cierra 162/162.
La deuda real es una sola lista de 12 recetas, compartida por todos los frentes (por eso el número se repite: es el mismo agujero visto desde cuatro grafos):
gtk4 libadwaita gtksourceview gtk4-hello adwaita-hello sourceview-hello
hammer-edit mirada-compositor mirada-greeter dwarves llimphi-counter wlr-randr
Es la cadena GUI de la cascada de mesa, y tiene una causa conocida y un bloqueo conocido:
No se pueden construir en el laptop por el zig-skew (rompe cairo), y fallan en el worker por su rootfs:
python OSErroren meson yfind_packageen cmake, porque el worker no trae python3 ni cmake. El arreglo correcto no es engordar el rootfs del worker sino declarar las herramientas en[deps]de cada receta. Ver la notarootfs-laptop-worker-divergen.
Esto es el primer trabajo técnico a hacer, y desbloquea las 12 de una vez.
I.2 🚨 Lo legal — bloqueante
Licencias: de 0 a 228 de 1141 hoy, faltan 913
El 2026-08-07 se midió: 0 de 1141 recetas declaraban licencia. (El informe previo decía «5 de
771»; los dos números estaban mal — los «5» eran falsos positivos de grep license: el paquete
addlicense, el paquete cargo-bundle-licenses, una línea de install y un comentario.)
Ese mismo día se hizo lo estructural:
- Campo
licenseen la receta, fuera dehash_inputs⇒ se puebla sobre recetas ya selladas sin mover un soloArtifactHash. Verificado en 40 recetas: 40 hashes idénticos, 0 cambiados. scripts/licencias.shmide de verdad (cuenta el campo, no la palabra) y siembra desde una tabla curada.- 228 sembradas: todo el toolchain, la base C, las gráficas, GNOME/GTK, Qt, KDE Frameworks y Plasma.
Falta: las 913 restantes, casi todas CLIs Go/Rust importados en masa. Buena noticia: ésas sí se
automatizan con evidencia real y sin red — Cargo.toml trae el campo license y los módulos Go
traen su LICENSE en el árbol. El cierre definitivo es capturarlo en la fase de fetch, que ya
descarga y extrae cada tarball.
⚠️ La regla que no se rompe: no se rellena a ojo. Declarar mal una licencia es peor que dejarla
vacía — convierte un hueco visible en una afirmación falsa. Concretamente se descartó el atajo
«k* = KDE ⇒ LGPL»: en este catálogo kail, kind, ko, kopia, krew, kustomize, kyverno
y toda la familia kube* son herramientas Go sin relación con KDE.
El texto de la licencia dentro del paquete
La GPL obliga a acompañar el binario del texto. Dónde se inyecta decide el precio: en la fase
install de la receta re-hashearía las 1141 (las fases SÍ entran al hash); en hammer pack es
gratis, porque pack es aguas abajo del ArtifactHash. Va en pack.
Espejo de fuentes — la obligación que más se malentiende
La GPL no pide «que el código exista en internet»: pide que quien recibe el binario pueda obtener de nosotros la fuente correspondiente. Hoy las recetas apuntan a URLs de terceros que se caen.
Acá estamos inusualmente bien parados: cada receta pinea tarball + sha256, así que el espejo es
mecánico y encima verificable. Pero tiene que existir antes de la primera descarga.
Marcas
Redistribuir Firefox con su nombre y logo exige cumplir la política de marca de Mozilla (por eso Debian tuvo Iceweasel). Decidir por adelantado: cumplir o rebrandear. No bloquea el primer lanzamiento si se sale sin navegador propio.
La licencia de hammer — ✅ ya está
LICENSE en la raíz y license = "MIT" en Cargo.toml. (El SDD 19 decía que faltaba; era falso.)
I.3 Infraestructura pública
- Espejo de paquetes e imágenes. Dimensionado real: el store son 128 G, pero el 79% es
información de depuración ⇒ separando
-debugen paquetes aparte el espejo baja a ~30 G. - Cadena de firma de release. Hoy hay firma de índice. Falta el nivel de arriba: clave raíz fuera de línea, claves de firma rotables y un procedimiento escrito para cuando se filtre una. Firma sin gestión de claves es teatro.
- Evidencia de reproducibilidad publicada. Es el diferenciador: publicar junto a cada imagen
los
ArtifactHashde toda su clausura, para que un tercero reconstruya y compare. Es lo que convierte «somos reproducibles» en un hecho comprobable por un extraño. - Respuesta a seguridad: un canal para reportes y —lo importante— la capacidad demostrada de empujar una actualización y que llegue. Ensayar el ciclo completo con un CVE de mentira.
I.4 Que se pueda instalar y usar
- Imagen instalable validada en METAL, no sólo en QEMU. Está a medio camino: el USB de KDE en
metal está en curso y falta re-quemarlo. Reglas ya pagadas caro: validar imágenes de
escritorio con pantalla, nunca sólo
-nographic;/dev/consolees el serial, así que cada capa debe escribir a/dev/tty0; y nunca quemar a un NVMe. - Matriz de hardware honesta: en qué se probó y en qué no. Vale más «probado en estas 3 máquinas» que «debería funcionar».
- Actualización en sitio probada de verdad: instalar N, actualizar a N+1, y que arranque. Y rollback, que con un store direccionado por contenido debería ser barato — es la ventaja natural de esta arquitectura y conviene que sea función de primera clase.
- Documentación mínima: instalar, gestionar paquetes, reportar un fallo.
- Sitio de descarga con sumas y firmas, y las instrucciones para verificarlas.
I.5 Lo que falta de sistema para que no se note pobre
Presente ya: networkmanager, pipewire, wireplumber, polkit, seatd, upower, tzdata,
fontconfig. Falta: cups (impresión), bluez (bluetooth), y tipografías/locales revisados.
PARTE II — De PUBLICABLE a «la distro está COMPLETA»
Acá está el trabajo grande, y conviene decir los tamaños en voz alta.
II.1 WMs Wayland ligeros — barato, alto retorno
Medido: no hay ninguno. De toda la familia sólo existen foot (terminal) y mako
(notificaciones). Falta la base entera:
wlrootsprimero: es la biblioteca de la que cuelgan casi todos.- Compositores:
sway,labwc,river,niri. - La barra y los accesorios, sin los cuales un WM no se usa:
waybar,fuzzel/wofi,swaybg,swayidle,swaylock,grim,slurp,wl-clipboard.
Son baratos comparados con los escritorios completos: no hay una torre de C debajo. Es la mejor relación esfuerzo/resultado que queda en el proyecto.
II.2 Aplicaciones gráficas de terceros — medido: cero
No hay ni una. Por coste creciente:
- Barato (y es lo que hace que la distro se sienta usable): visor de imágenes (
imv), lector PDF (zathura), reproductor (mpv), gestor de archivos, editor de texto gráfico, emulador de terminal adicional (alacritty,kitty). - Caro: LibreOffice.
- El más caro de todo el catálogo: un navegador. Firefox es Rust + C++ + su propio sistema de
build, y arrastra cbindgen, nasm, nodejs y una cadena de
*-syscon C++ — que es justo la frontera que el techo MSRV del sandbox (1.96) no cruza todavía. Presupuestarlo como un frente propio, no como «una receta más».
II.3 Deuda técnica de fondo que conviene cerrar antes de crecer
- Las 16 recetas con
compiler = "gcc"(contadas parseando TOML;grepcuenta comentarios). Las 12 de Rust son un solo problema: falta el unwinder de libgcc. - No-determinismo en 92 paquetes, todos por rutas
/srcincrustadas en secciones.debug_*. El arreglo (-ffile-prefix-mapglobal) re-hashea ~720 recetas: decisión de arquitectura, no remiendo. - La carrera del árbol de fuentes (ADR 0012), pendiente y sin decidir: dos builds de la misma dependencia se pisan. Aviso registrado: un lock sólo en la extracción parece correcto y NO lo es.
- El multi-init: los inits del catálogo compiten con arje-zero, no se apilan.
II.4 Sostenibilidad — lo que decide si sobrevive al primer mes
Versionado y cadencia escritos; reconstrucción desde cero en una máquina limpia, cronometrada — la prueba de que el proyecto no depende de un laptop concreto, que es exactamente la preocupación que originó el respaldo del 2026-08-07.
PARTE III — El resumen ejecutivo
Para PUBLICABLE falta, en una línea cada uno:
- Arreglar el entorno del worker → caen las 12 recetas en deuda.
- Terminar las licencias (913) e inyectar el texto en
hammer pack. - Montar el espejo de fuentes.
- Clave raíz fuera de línea y procedimiento de rotación.
- Imagen validada en metal (re-quemar el USB).
- Actualización N→N+1 probada, con rollback.
- Espejo de paquetes (~30 G separando
-debug), sitio, sumas y firmas. cupsybluez.- Documentación mínima y un canal de reportes.
Se puede publicar SIN: navegador propio, ofimática, y el reconstructor independiente. Son objetivos, no requisitos.
Para COMPLETA falta, además: wlroots + los WMs ligeros y sus accesorios, el juego de aplicaciones
gráficas, LibreOffice, el navegador, y cerrar la deuda de fondo (gcc, determinismo .debug_,
ADR 0012).