targets: barrido de perfiles y servicios — la WiFi faltaba, y tres escritorios no arrancaban nada

── BARRIDO 1: las hojas selladas sin perfil ────────────────────────────────────────────────────
Método, para que se pueda repetir: cruzar el campo `perfiles` de los cinco build-state*.json con
`dependientes_total`. De 905 nodos, 631 sin perfil; de ésos, **620 son HOJAS** (nadie depende de
ellas, o sea que ninguna clausura las puede alcanzar) y 11 llegan por la clausura de otra.

Las 620 se parten en dos por una marca objetiva, la cabecera del importador:
  · **529** dicen «PUNTO DE PARTIDA, no final» — volcado crudo de import-nix/import-alpine
    (328 Go + 195 Rust + 6 C). Nadie las curó nunca para una imagen.
  · **91** están trabajadas a mano. Ésas son las que se triaron una por una.

Lo que salió de ese triaje, y lo que se declara:

**`base` += `wpa_supplicant` — la imagen NO PODÍA ASOCIARSE A UN WiFi.** dhcpcd resuelve la IP de
un cable; el handshake WPA2 de 4 vías lo hace un supplicant en userspace y busybox no lo trae. La
receta existía desde el frente de metal —su cabecera dice «para asociar el WiFi del medio live al
AP»— y estaba en CERO perfiles. Es la figura de `foot` y esta vez el precio era quedarse sin red.

**`cli` += nano, tig, patch, socat, pigz, miller, dwarves.** El criterio va escrito en el fichero
porque meter las 620 habría sido peor que no mirar: entra lo que un usuario de esta capa ESPERA
encontrar y hoy no está. El resto queda en el catálogo, que NO es lo mismo que la imagen.

**`escritorio-sway` += wlr-randr**: no había con qué cambiar la resolución ni rotar una pantalla.

── BARRIDO 2: el «enable» ──────────────────────────────────────────────────────────────────────
De los cuatro escritorios **sólo GNOME tenía lista `servicios`**. Los otros tres salían con sus
demonios instalados y NINGUNO arrancado, y la métrica de clausura daba N/N igual — `paquetes` dice
qué se instala, `servicios` dice qué se levanta, y sin la segunda la imagen está a medias sin que
nada falle.

Escritas las tres que faltaban, computando la lista (no a ojo): se cruzaron los `[[service]]` de
las 11 recetas que los declaran contra el campo `perfiles` de los cinco grafos — la CLAUSURA, no
las raíces, porque la mitad de los demonios llegan como dep. Y GNOME sumó `cupsd`+`bluetoothd`,
que nacieron ayer.

⚠ El cruce destapó tres ausencias que NO se arreglan acá y quedan escritas en el fichero:
  · KDE y sway tienen `pipewire` y **no tienen `wireplumber`**: sin gestor de sesión los nodos
    existen y nadie los conecta.
  · COSMIC **no tiene `upowerd`** y dibuja un indicador de batería.
  · KDE y sway no tienen `logind-compat`.

Comprobado: tomllib parsea, y los ocho perfiles resuelven con scripts/targets.py.
This commit is contained in:
Sergio
2026-09-13 01:06:01 +00:00
parent a9991194bc
commit 9ac4e1727f
+100
View File
@@ -57,6 +57,18 @@ paquetes = [
# porque los 8 ficheros eran headers y `libzstd.a`. Ampliar la canónica re-hashearía a sus 13
# consumidores (mesa entre ellos), así que va como variante. Ver SDD 28 §6.13.
"zstd-cli",
# ── LA CAPACIDAD QUE FALTABA: WiFi (2026-09-13, barrido de perfiles) ─────────────────────────
# La imagen NO podía asociarse a una red inalámbrica. `dhcpcd`, ahí arriba, resuelve la IP de un
# cable; el handshake WPA2 de 4 vías lo hace un supplicant en userspace, y busybox NO lo trae.
# La receta existía desde el frente de metal —su cabecera dice literalmente «para asociar el WiFi
# del medio live al AP»— y no estaba declarada en NINGÚN perfil: sellada, reproducible, y en cero
# imágenes. Es la figura de `foot` otra vez, y esta vez el precio era quedarse sin red.
# Va en `base` por el mismo argumento que `dhcpcd`: es la capa que convierte «la máquina arrancó»
# en «la máquina tiene red», y un portátil sin WiFi es una máquina sin red aunque el resto esté.
# ⚠ Son TRES binarios (`wpa_supplicant`, `wpa_cli`, `wpa_passphrase`) y nada más. NO trae gestor
# de red: `networkmanager` existe SÓLO en `incoming-kde`, así que GNOME, COSMIC y sway no lo
# alcanzan (cola hermana). Eso es una decisión aparte, escrita en el plan del barrido.
"wpa_supplicant",
]
[perfil.cli]
@@ -100,6 +112,18 @@ paquetes = [
# herramientas de quien CONSTRUYE con la distro, no de quien la usa: `sccache` ya estaba sellada
# y sin perfil, `mold` es de hoy. Van acá y no en `base` porque un servidor pelado no las quiere.
"sccache", "mold",
# ── BARRIDO DE PERFILES (2026-09-13): selladas hace meses y en ninguna imagen ────────────────
# Criterio para entrar acá, y está escrito porque el barrido encontró 620 hojas sin perfil y
# meterlas todas habría sido peor que no mirar: entra lo que un usuario de esta capa ESPERA
# encontrar y hoy no está. Lo demás queda en el catálogo y se instala por nombre — ver
# `docs/plan-barrido-perfiles-y-servicios.md`, §la política.
"nano", # el editor que teclea quien no sabe salir de vim; `base` sólo trae vim
"tig", # git en TUI; el corpus tenía lazygit y gitui y ninguno declarado hasta hoy
"patch", # aplicar un diff a mano. Userland clásico que simplemente faltaba
"socat", # el destornillador de red: sockets, puertos, diagnóstico
"pigz", # gzip en paralelo
"miller", # `jq` para CSV/TSV — el hueco de datos tabulares
"dwarves", # `pahole`: inspeccionar el BTF/DWARF del kernel. Esta distro compila el suyo
]
[perfil.escritorio-mirada]
@@ -369,6 +393,31 @@ paquetes = [
"cups", "bluez",
]
# ── QUÉ ARRANCA (el «enable»; SDD 30 §3) ────────────────────────────────────────────────────────
# ⚠ ESTE PERFIL NO TENÍA ESTA LISTA HASTA EL 2026-09-13, y eso NO se leía como un hueco: se leía
# como un perfil completo. `paquetes` dice qué se INSTALA y `servicios` dice qué se LEVANTA; sin la
# segunda, la imagen salía con sus demonios instalados y **ninguno arrancado**, y la métrica de
# clausura daba N/N igual. De los cuatro escritorios sólo `escritorio-gnome` la tenía.
#
# Cada entrada es el `label` de un `[[service]]` declarado por una receta de la CLAUSURA de este
# perfil (no de sus raíces: la mitad viven en deps). La lista es exactamente lo que la clausura
# ofrece hoy — se computó cruzando los `[[service]]` del corpus y las cuatro colas contra el campo
# `perfiles` de los cinco `build-state*.json`, no a ojo.
#
# ⚠ Declarar NO es hacer funcionar. Los de `scope = "session"` salen con AVISO a propósito, como en
# GNOME: fuera de `mirada` nadie entrega Cards de sesión todavía. Un hueco escrito se ve.
#
# ⚠ DOS AUSENCIAS QUE ESTE CRUCE DESTAPÓ Y QUE NO SE ARREGLAN ACÁ:
# · **no hay `wireplumber`** en la clausura. `pipewire` sin gestor de sesión no encamina nada:
# los nodos existen y nadie los conecta. GNOME y COSMIC sí lo tienen; KDE y sway, no.
# · **no hay `logind-compat`**. KWin pide una sesión de logind para tomar el seat; acá la cubre
# `seatd`/el propio `plasma-workspace`, pero conviene saber que el servicio no está.
# Las dos son deuda del perfil, no de esta lista. Se escriben para que se vean.
servicios = [
"dbus-system", "upowerd", "cupsd", "bluetoothd",
"pipewire", "pipewire-pulse",
]
[perfil.escritorio-gnome]
descripcion = "escritorio GNOME (Wayland-nativo) desde fuente — 3er escritorio, X11 al tacho"
cola = "incoming-gnome"
@@ -672,6 +721,9 @@ paquetes = [
servicios = [
"dbus-system", "logind-compat", "polkit-compat", "accounts-daemon", "upowerd", "colord",
"pipewire", "pipewire-pulse", "wireplumber",
# 2026-09-13: los dos que nacieron con `cups` y `bluez`. Sin esta línea la imagen los traía
# instalados y apagados, que es la mitad inútil de tenerlos.
"cupsd", "bluetoothd",
]
[perfil.escritorio-cosmic]
@@ -884,6 +936,28 @@ paquetes = [
"cliphist",
]
# ── QUÉ ARRANCA (el «enable»; SDD 30 §3) ────────────────────────────────────────────────────────
# ⚠ ESTE PERFIL NO TENÍA ESTA LISTA HASTA EL 2026-09-13, y eso NO se leía como un hueco: se leía
# como un perfil completo. `paquetes` dice qué se INSTALA y `servicios` dice qué se LEVANTA; sin la
# segunda, la imagen salía con sus demonios instalados y **ninguno arrancado**, y la métrica de
# clausura daba N/N igual. De los cuatro escritorios sólo `escritorio-gnome` la tenía.
#
# Cada entrada es el `label` de un `[[service]]` declarado por una receta de la CLAUSURA de este
# perfil (no de sus raíces: la mitad viven en deps). La lista es exactamente lo que la clausura
# ofrece hoy — se computó cruzando los `[[service]]` del corpus y las cuatro colas contra el campo
# `perfiles` de los cinco `build-state*.json`, no a ojo.
#
# ⚠ Declarar NO es hacer funcionar. Los de `scope = "session"` salen con AVISO a propósito, como en
# GNOME: fuera de `mirada` nadie entrega Cards de sesión todavía. Un hueco escrito se ve.
#
# ⚠ AUSENCIA DESTAPADA POR EL CRUCE: **no hay `upowerd`**. COSMIC dibuja un indicador de batería y
# el demonio que lo alimenta no está en la clausura ⇒ en un portátil el applet no tiene datos.
# Deuda del perfil, no de esta lista.
servicios = [
"dbus-system", "logind-compat", "cupsd", "bluetoothd",
"pipewire", "pipewire-pulse", "wireplumber",
]
[perfil.escritorio-sway]
descripcion = "WM Wayland ligero: sway sobre wlroots propio, sin X11 y sin systemd"
cola = "incoming-wlr"
@@ -1078,6 +1152,32 @@ paquetes = [
# este perfil y en COSMIC: habla `wlr-data-control`, que KWin y mutter NO implementan (mismo
# muro que `wf-recorder`). Declararlo donde no funciona sería peor que no tenerlo.
"cliphist",
# `wlr-randr` (2026-09-13, barrido): sway no tenía CON QUÉ cambiar la resolución ni orientar una
# pantalla. `swaymsg output` sirve si el compositor está vivo y configurado; esto es la
# herramienta equivalente a xrandr para wlroots, y era otra hoja sellada sin perfil.
"wlr-randr",
]
# ── QUÉ ARRANCA (el «enable»; SDD 30 §3) ────────────────────────────────────────────────────────
# ⚠ ESTE PERFIL NO TENÍA ESTA LISTA HASTA EL 2026-09-13, y eso NO se leía como un hueco: se leía
# como un perfil completo. `paquetes` dice qué se INSTALA y `servicios` dice qué se LEVANTA; sin la
# segunda, la imagen salía con sus demonios instalados y **ninguno arrancado**, y la métrica de
# clausura daba N/N igual. De los cuatro escritorios sólo `escritorio-gnome` la tenía.
#
# Cada entrada es el `label` de un `[[service]]` declarado por una receta de la CLAUSURA de este
# perfil (no de sus raíces: la mitad viven en deps). La lista es exactamente lo que la clausura
# ofrece hoy — se computó cruzando los `[[service]]` del corpus y las cuatro colas contra el campo
# `perfiles` de los cinco `build-state*.json`, no a ojo.
#
# ⚠ Declarar NO es hacer funcionar. Los de `scope = "session"` salen con AVISO a propósito, como en
# GNOME: fuera de `mirada` nadie entrega Cards de sesión todavía. Un hueco escrito se ve.
#
# ⚠ MISMA AUSENCIA QUE KDE: **no hay `wireplumber`**. `pipewire` sin gestor de sesión no encamina
# nada. Y tampoco hay `upowerd` ni `logind-compat` — en un WM ligero eso es defendible (seatd hace
# el seat y `yambar` puede leer la batería de sysfs), pero es una decisión, no un hecho dado.
servicios = [
"dbus-system", "cupsd", "bluetoothd",
"pipewire", "pipewire-pulse",
]
[perfil.servidor]