Files
takana/docs/state/targets.toml
T
sergioandClaude Opus 5 1e786aaf42 🚪 cosmic: el BACKEND del portal sella (b3:7ad0f124) — cadena completa en la imagen
69 min. NEEDED: libgbm, libpipewire, libxkbcommon, libc. Instala el binario
en /usr/libexec, el .service de D-Bus con @libexecdir@ sustituido, el
cosmic.portal que declara las cinco interfaces
(Access/FileChooser/Screenshot/Settings/ScreenCast) y sus iconos.

clang18 se construyó en la granja y se cosechó al laptop (b3:62c6bfb5), pero
el backend NO se pudo construir allá: el worker no tiene la cola COSMIC
horneada —el snapshot golden es del 2026-07-15 y toda esta cola es
posterior— así que intentó reconstruir pipewire y murió buscando glib. Es la
regla de «rootfs laptop ≠ worker» pero con el STORE: lo que en el laptop es
cache-hit, en el worker es un build entero con sus propias deps.

Y destapó que la receta de pipewire NO lleva --wrap-mode=nodownload: ante
una dep faltante intenta bajarse un subproyecto de internet y, sin red, el
error que sale no es «te falta glib» sino «Unhandled python exception / This
is a Meson bug». Queda anotado como deuda.

--offline SIN --locked, y no es descuido: el sed del parche corre en la fase
compile, o sea DESPUÉS del cargo vendor, así que cargo ve el Cargo.toml
cambiado y con --locked se niega. Quitar una feature sólo puede ENCOGER el
conjunto de crates, así que lo que haga falta ya está vendorizado; la
hermeticidad la da --offline + el árbol vendorizado, no el --locked.

Dos raíces en el perfil y en la hidratación, porque son DOS procesos que se
encuentran por D-Bus en runtime y ningún [deps] los relaciona. Imagen en 83
recetas (eran 74).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 06:04:13 -04:00

143 lines
8.8 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# targets.toml — el MANIFIESTO DE OBJETIVO: qué paquetes debe tener la distro.
#
# POR QUÉ EXISTE. `build-state.json` es el grafo de lo que EXISTE (768 recetas, cierra sin huérfanas).
# Lo que la distro DEBE tener no estaba en ningún lado: vivía en dos strings de shell de
# `product-userland-from-repo.sh`, otro de `mirada-usb.sh`, 55 listas planas en `tandas/` y una cola
# de 206 recetas KDE. Por eso "¿cuánto falta?" no tenía respuesta: el mapa cerraba perfecto, pero
# sólo cubría el territorio ya conquistado. Este fichero es el destino. (Plan: docs/plan-catalogo-objetivo.md)
#
# LA INVERSIÓN. `paquetes` lista sólo las RAÍCES — lo que un usuario pide POR NOMBRE. La clausura
# (las libs de las que cuelgan) la calcula el grafo siguiendo las aristas de deps, no la escribe un
# humano. Al revés de `tandas/base-system-3-libs.txt`, que enumera a mano miembros de la clausura.
#
# Un `perfil` = una imagen enviable. `hereda` compone (transitivo, sin ciclos). `cola` dice en qué
# árbol de recetas viven sus raíces: `corpus` = `recipes/`; otra cosa = `recipes/incoming-<x>/`, que
# `build-state.py` sólo carga con su flag (`--kde`) ⇒ los perfiles de una cola no cargada se saltan
# en vez de reportar raíces fantasma.
#
# Consumidores: `scripts/targets.py <perfil>` (expande a lista de nombres) y `scripts/build-state.py`
# (marca los nodos `wanted` y calcula la membresía de perfil de cada receta).
schema = "hammer-targets/1"
[perfil.base]
descripcion = "userland foundational C: la distro arranca y se usa (shell, VCS, privilegios, red, disco, TLS, proceso, editor, docs)"
# Lift verbatim de BASE_SYSTEM_PKGS (scripts/product-userland-from-repo.sh). De-Alpinizado y firmado,
# tandas base-system-1..3.
paquetes = [
"bash", "git", "sudo", "doas", "util-linux", "shadow", "kbd", "procps-ng",
"iproute2", "iputils", "dhcpcd", "e2fsprogs", "dosfstools", "parted", "rsync",
"sed", "tzdata", "vim", "dbus", "ca-certificates", "gnupg", "lsof", "strace",
"pciutils", "usbutils", "mandoc",
]
[perfil.cli]
descripcion = "la capa CLI moderna (Rust) encima de base — el userland real del producto"
hereda = ["base"]
# Lift verbatim de CLI_RUST_PKGS (scripts/product-userland-from-repo.sh).
paquetes = [
"bat", "fd", "ripgrep", "jq", "zoxide", "dust", "procs", "htop", "less", "tree",
"hyperfine", "delta", "eza", "sd", "tokei", "fzf", "skim", "git-cliff", "gitui",
"starship",
]
[perfil.escritorio-mirada]
descripcion = "rootfs slim del USB mirada: compositor Wayland propio sobre mesa software"
# Lift verbatim de PKGS (scripts/mirada-usb.sh). NO hereda base: es una imagen slim a propósito.
# El ORDEN importa (libs primero, binarios mirada al final) y se preserva.
paquetes = [
"mesa-swrast", "wayland", "libdrm", "seatd", "libinput", "libudev-zero",
"libxkbcommon", "pixman", "linux-pam", "mtdev", "libevdev",
"mirada-compositor", "mirada-greeter", "mirada-ctl",
]
[perfil.escritorio-kde]
descripcion = "escritorio KDE Plasma 6 desde fuente"
cola = "incoming-kde"
# Raíces del rootfs de metal (docs/HANDOFF-noche-kde-2026-07-14.md:135). El resto del escritorio
# —137 artefactos hidratados— es CLAUSURA de estas 7, no lista a mano.
paquetes = [
"plasma-workspace", "kwin", "kscreenlocker", "breeze", "frameworkintegration",
"qqc2-desktop-style", "plasma-integration",
# Huecos de RUNTIME confirmados por el triaje de la frontera (2026-07-22). Ninguno bloquea un
# build —todas las recetas que los piden ya están selladas— pero sin ellos el escritorio arranca
# roto: sin tipos de fichero, sin apps X11, sin diálogos de autorización y con los controles QML
# en un estilo genérico. Ver docs/state/frontera-triaje.toml para el porqué de cada uno.
"shared-mime-info", "xwayland", "polkit-qt-1", "qqc2-breeze-style",
]
[perfil.escritorio-gnome]
descripcion = "escritorio GNOME (Wayland-nativo) desde fuente — 3er escritorio, X11 al tacho"
cola = "incoming-gnome"
# Raíces de una sesión GNOME que bootea a un shell usable. El resto es CLAUSURA. Hoy son HUECOS
# (cero recetas en incoming-gnome): build-state SALTA este perfil hasta que su cola se cargue
# (--gnome), así que declararlo NO reporta raíces fantasma — sólo lo hace un objetivo de primera
# clase que el sistema conoce. La frontera de autoría se descubre con `seed-gnome.py` (bootstrap por
# metadata mientras no haya recetas); OJO: ese cierre SOBREESTIMA ~5-10× (ver docs/state/seed-gnome.json
# y la memoria frente-gnome). El palo largo / keystone es spidermonkey(mozjs) → gjs → gnome-shell.
paquetes = [
"mutter", "gnome-shell", "gjs", "gnome-session", "gnome-settings-daemon",
"gsettings-desktop-schemas", "gnome-desktop", "gdm", "xdg-desktop-portal-gnome",
]
[perfil.escritorio-cosmic]
descripcion = "escritorio COSMIC (System76, Rust sobre smithay/iced) desde fuente — 4º escritorio"
cola = "incoming-cosmic"
# Las raíces son EXACTAMENTE lo que `cosmic-session/src/main.rs` levanta, más el gestor mismo y los
# datos que ningún `[deps]` alcanza. El resto es CLAUSURA.
#
# ── POR QUÉ ESTE PERFIL NO ES BUROCRACIA ────────────────────────────────────────────────────────
# Sin él, `yupana radio` sobre cualquier receta COMPARTIDA —libinput, libxkbcommon, libudev-zero,
# mesa, wayland— devuelve «IMÁGENES afectadas: (ninguna declarada)» para COSMIC, y el próximo que las
# toque MIDE DE MENOS. La campaña existe en el store y en el runbook, pero el ábaco no la ve: el radio
# de un re-hash es justo lo que el perfil convierte en dato.
#
# Nota de nombres, que acá no coinciden y ya costó una vez: el repo `cosmic-workspaces-epoch` produce
# el binario `cosmic-workspaces`, y el AppID tampoco lleva el sufijo. Se lista por el nombre de la
# RECETA, que es el del repo.
paquetes = [
"cosmic-comp", "cosmic-session", "cosmic-settings-daemon",
"cosmic-panel", "cosmic-launcher", "cosmic-app-library", "cosmic-workspaces-epoch",
"cosmic-notifications", "cosmic-osd", "cosmic-bg", "cosmic-idle",
# Los applets del panel. No es un componente que la sesión lance: lo spawnea el PANEL, por AppID,
# y sin ellos arranca y no se dibuja. Un binario multiplexor con veinte symlinks.
"cosmic-applets",
# El MOTOR del lanzador, de otro repo y fuera del pin `epoch-N`: `cosmic-launcher` sólo dibuja y
# lanza a `pop-launcher` como proceso hijo por PATH. Sin él, `Super` no abre nada.
"pop-launcher",
# Y el `qalc` al que el plugin `calc` le pasa la expresión: tercer nivel de hijo por PATH. Es la
# primera raíz del perfil que existe para que una TECLA dé un resultado, no para que algo enlace.
"libqalculate",
# La primera APLICACIÓN con ventana del catálogo, y la primera entrada de la biblioteca que no es
# `NoDisplay`. Hasta acá el perfil listaba escritorio; desde acá lista también lo que se abre.
"cosmic-term",
# La segunda: el gestor de ficheros. Sin `gvfs` (no hay glib compartida) ⇒ navegación local sí,
# montajes remotos no.
"cosmic-files",
# La tercera: el panel de control. Habla con los daemons por zbus, así que NO arrastra
# NetworkManager/udisks/accountsservice — sólo libdrm y dav1d sobre el juego fijo.
"cosmic-settings",
# La cuarta: el editor de texto, y la más barata de las cuatro — su árbol ya estaba compilado (usa
# `cosmic-files` como crate, igual que la terminal). Su binario enlaza SÓLO `libxkbcommon` y
# `libc.so`: dos NEEDED, el mínimo de todos los clientes de la suite.
"cosmic-edit",
# La quinta: la tienda. Con el backend `pkgar` —el único de los cuatro que no pide ni una torre de
# C (flatpak) ni un demonio ausente (packagekit)— NAVEGA el catálogo instalado leyendo el AppStream
# del sistema, pero NO instala: nada está cableado al `.swm` de hammer.
"cosmic-store",
# La sexta: la captura de pantalla. Cero C —el único `[deps] build = []` de la campaña— pero HOY
# NO FUNCIONA: todo su trabajo es `Screenshot::request()` contra `org.freedesktop.portal.Desktop`,
# y en la imagen no hay portal. Se lista igual para que el hueco sea visible.
"cosmic-screenshot",
# La CADENA DEL PORTAL, dos raíces porque son dos procesos que se encuentran por D-Bus en runtime:
# el frontend registra `org.freedesktop.portal.Desktop` y enruta al backend, que implementa
# Access/FileChooser/Screenshot/Settings/ScreenCast. Sin ellos no hay captura, ni selector de
# ficheros de portal, ni compartir pantalla.
"xdg-desktop-portal", "xdg-desktop-portal-cosmic",
# Datos, no binarios: el tema de iconos (y el hicolor del que hereda), las tablas de xkb y una
# tipografía. Ninguno es dep de build de nadie y sin ellos el escritorio arranca roto — sin puntero,
# sin teclado o con tofu.
"cosmic-icons", "hicolor-icon-theme", "xkeyboard-config", "dejavu-fonts",
# Lo que `start-cosmic` ejecuta y ningún `[deps]` pide: bash de verdad y el bus de sesión.
"bash", "dbus",
]