Commit Graph
219 Commits
Author SHA1 Message Date
sergioandClaude Opus 5 56d4de5fb0 estado: grafo wlr tras la tanda de 30 hojas — los tres perfiles cierran al 100%
base 51/51 · cli 74/74 · escritorio-sway 121/121. Cosecha verificada: cero artefactos en el
worker que el hub no tenga.

De la tanda: 25 de 30 selladas. Los 5 fallos, ninguno causado por el split:
· cargo-audit, cargo-hack, git-absorb — 'spawn cargo vendor': el grafo las clasifica como clase
  `c` porque declaran compiler=gcc para sus deps de C, pero por dentro son Cargo. Filtrar por la
  clase del grafo NO basta.
· hammerd — git privado por SSH (HUB-ONLY, como las de tawasuyu).
· coreutils — 'you should not run configure as root'. Esto NO lo causó el split: es DERIVA. La
  receta llevaba tiempo sin poder construirse en el lab actual y nadie lo sabía porque su
  artefacto viejo seguía en el store. Es exactamente lo que la campaña destapa.

⚠ Y de ahí sale un riesgo que conviene nombrar: cada receta que deja de reconstruir convierte su
artefacto viejo en un REHÉN — store-gc no puede podarlo (es el único ejemplar) y nadie puede
regenerarlo. Hoy son ~12 G inmovilizados, y crecen con cada receta que se rompe en silencio.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-08 11:47:37 -04:00
sergio 5ed64aa44a estado: cosecha granja 2026-08-08T15:16:41Z — avance del árbol KDE 2026-08-08 11:16:41 -04:00
sergioandClaude Opus 5 15e34cb257 dbus: una flag ausente bloqueaba TRES perfiles — --wrap-mode=nodownload
`base`, `cli` y `escritorio-sway` bajaron a 50/51, 73/74 y 120/121 después de la cascada del
split, y los tres fallaban por LA MISMA receta: dbus.

EL ERROR NO MENCIONABA LA RED POR NINGÚN LADO:
    meson.build:372:11: ERROR: Unhandled python exception
Y arriba, enterrado entre reintentos:
    <urlopen error unknown url type: https>
    WARNING: failed to download with error: name 'ssl' is not defined
dbus declara subproyectos con `.wrap` y meson intenta DESCARGARLOS. En el sandbox no hay red y
python no trae ssl ⇒ «Unhandled python exception», que se lee como un bug de meson y es
simplemente que no hay salida a internet. Y no debe haberla: el build es hermético a propósito.

`--wrap-mode=nodownload` obliga a usar las deps del sistema (nuestros artefactos, vía
pkg-config) y deja los wraps inertes. Mismo caso que `wl-clipboard` anoche.

⇒ base 51/51 · cli 74/74 · escritorio-sway 121/121. Los tres cierran otra vez.

ESTADO DE LA REPARACIÓN DE LA CASCADA: de las 54 que quedaron sin artefacto, 42 reconstruidas.
Las 12 restantes son EXACTAMENTE las que ya estaban en deuda antes de la campaña:
  · 6 el muro del PIC (gtk4 y su cadena estática — duplicado superado de la dinámica de GNOME);
  · 3 HUB-ONLY (mirada-*, llimphi-counter: git privado / commit en ceros);
  · dwarves (libdw/musl), y adwaita-hello (error 39 = la carrera del ADR 0012).
O sea que la campaña no dejó deuda nueva.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-08 10:58:05 -04:00
sergio d55e7c6e61 estado: cosecha granja 2026-08-08T14:44:57Z — avance del árbol KDE 2026-08-08 10:44:57 -04:00
sergio a920b7aa3d estado: cosecha granja 2026-08-08T14:12:32Z — avance del árbol KDE 2026-08-08 10:12:32 -04:00
sergio 57ebfcaf19 estado: cosecha granja 2026-08-08T13:41:25Z — avance del árbol KDE 2026-08-08 09:41:25 -04:00
sergio 75a572ea71 estado: cosecha granja 2026-08-08T13:10:01Z — avance del árbol KDE 2026-08-08 09:10:01 -04:00
sergio 693938bed2 estado: cosecha granja 2026-08-08T12:38:32Z — avance del árbol KDE 2026-08-08 08:38:32 -04:00
sergio ca83c2ae6e estado: cosecha granja 2026-08-08T05:24:30Z — avance del árbol KDE 2026-08-08 01:24:30 -04:00
sergio 0e6d84361b estado: cosecha granja 2026-08-08T04:51:57Z — avance del árbol KDE 2026-08-08 00:51:57 -04:00
sergio f8a2ead7e4 estado: cosecha granja 2026-08-08T04:20:33Z — avance del árbol KDE 2026-08-08 00:20:33 -04:00
sergio 8e8a2f80ee estado: cosecha granja 2026-08-08T03:48:05Z — avance del árbol KDE 2026-08-07 23:48:05 -04:00
sergio 8325a706b2 estado: cosecha granja 2026-08-08T02:14:09Z — avance del árbol KDE 2026-08-07 22:14:09 -04:00
sergioandClaude Opus 5 55dd36d97a perfil escritorio-sway: 121/121 CERRADO — la cuarta imagen de escritorio, y la más barata
Declarado en targets.toml y verificado con el grafo: **121 nodos, 121 sellados, falta 0**. Es
una imagen construible hoy, no una intención.

Nueve raíces (sway, yambar, fuzzel, swaybg, swaylock, swayidle, grim, slurp, wl-clipboard) más
`hereda = ["cli"]`, porque un WM sin userland debajo no se usa: hacen falta la terminal y las
herramientas. `foot` no se lista porque ya entra por la clausura de `cli`. El resto de la
imagen —wlroots, mesa, wayland, libinput, seatd, cairo, pango, fcft…— lo calcula el grafo
siguiendo las aristas: escribir la clausura a mano es justo lo que targets.toml existe para
evitar.

LA COMPARACIÓN QUE VALE: KDE y GNOME fueron campañas de semanas porque debajo tienen una torre
de C (Qt entero, GTK, la cascada de mesa). Esto es una decena de binarios pequeños sobre
wlroots y salió en una noche. Ya estaba escrito en el SDD 20 como hipótesis —«los WMs ligeros
son la mejor relación esfuerzo/resultado que queda»—; ahora está medido.

`--wlr` en build-state.py, con su flag propio por la misma razón que COSMIC: sin él el frente
es INVISIBLE para el khipu, y `yupana radio` sobre una receta compartida (wayland, libinput,
pixman, mesa, libxkbcommon…) no reportaría la imagen sway entre las afectadas — o sea que el
próximo que toque una de ésas mediría de menos y creería que no rompe nada.

Queda lo que no puede decidir el grafo: probarlo en QEMU CON PANTALLA. La regla ya pagada cara
es que las imágenes de escritorio no se validan con `-nographic`, porque el compositor puede
«arrancar» en los logs y no pintar nada.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-07 22:01:24 -04:00
sergio dd8baa7560 estado: cosecha granja 2026-08-08T01:43:22Z — avance del árbol KDE 2026-08-07 21:43:22 -04:00
sergio 142a8774a6 estado: cosecha granja 2026-08-08T01:12:13Z — avance del árbol KDE 2026-08-07 21:12:13 -04:00
sergio a287091d2a estado: cosecha granja 2026-08-08T00:40:56Z — avance del árbol KDE 2026-08-07 20:40:56 -04:00
sergio bca7164b4e estado: cosecha granja 2026-08-07T22:36:14Z — avance del árbol KDE 2026-08-07 18:36:14 -04:00
sergio 6060b9bbcd estado: cosecha granja 2026-08-07T16:49:23Z — avance del árbol KDE 2026-08-07 12:49:23 -04:00
sergio 809b154586 estado: cosecha granja 2026-08-07T12:15:14Z — avance del árbol KDE 2026-08-07 08:15:14 -04:00
sergio dd0926df24 estado: cosecha granja 2026-08-07T11:32:45Z — avance del árbol KDE 2026-08-07 07:32:45 -04:00
sergio 6f215a12dd estado: cosecha granja 2026-08-07T04:14:38Z — avance del árbol KDE 2026-08-07 00:14:38 -04:00
sergio cd62c82a0c estado: cosecha granja 2026-08-07T03:30:03Z — avance del árbol KDE 2026-08-06 23:30:03 -04:00
sergio db58515226 estado: cosecha granja 2026-08-07T02:57:00Z — avance del árbol KDE 2026-08-06 22:57:00 -04:00
sergio 494e8fe4bb estado: cosecha granja 2026-08-07T02:24:51Z — avance del árbol KDE 2026-08-06 22:24:51 -04:00
sergio 02cc25542d estado: cosecha granja 2026-08-07T01:52:21Z — avance del árbol KDE 2026-08-06 21:52:21 -04:00
sergio 42d465e490 estado: cosecha granja 2026-08-07T01:19:32Z — avance del árbol KDE 2026-08-06 21:19:32 -04:00
sergio a86eb63244 estado: cosecha granja 2026-08-07T00:46:50Z — avance del árbol KDE 2026-08-06 20:46:50 -04:00
sergio 3605bf63b2 estado: cosecha granja 2026-08-07T00:12:22Z — avance del árbol KDE 2026-08-06 20:12:22 -04:00
sergio 63c28ae6e6 estado: cosecha granja 2026-08-06T20:11:33Z — avance del árbol KDE 2026-08-06 16:11:33 -04:00
sergio 55ce763e36 estado: cosecha granja 2026-08-06T19:10:27Z — avance del árbol KDE 2026-08-06 15:10:27 -04:00
sergio ba84fecb26 estado: cosecha granja 2026-08-06T18:10:01Z — avance del árbol KDE 2026-08-06 14:10:01 -04:00
sergio c4a8c09022 estado: cosecha granja 2026-08-06T17:09:27Z — avance del árbol KDE 2026-08-06 13:09:27 -04:00
sergio c5e6edc73e estado: cosecha granja 2026-08-06T16:39:08Z — avance del árbol KDE 2026-08-06 12:39:09 -04:00
sergio c18988f1d5 estado: cosecha granja 2026-08-06T16:07:52Z — avance del árbol KDE 2026-08-06 12:07:52 -04:00
sergio 6e07646c96 estado: cosecha granja 2026-08-06T15:37:22Z — avance del árbol KDE 2026-08-06 11:37:22 -04:00
sergio c8b0093aa8 estado: cosecha granja 2026-08-05T22:00:09Z — avance del árbol KDE 2026-08-05 18:00:09 -04:00
sergio 50242906de estado: cosecha granja 2026-08-05T21:18:06Z — avance del árbol KDE 2026-08-05 17:18:07 -04:00
sergio dcaed2b066 estado: cosecha granja 2026-08-05T15:00:09Z — avance del árbol KDE 2026-08-05 11:00:09 -04:00
sergioandClaude Opus 5 8d10bccf34 🔇 wireplumber: construido, corriendo… y NO era el bloqueo
b3:b8f3baf0, selló a la primera. Arranca desde cosmic-start ("wireplumber OK (pid
192) — hay gestor de sesión"), se conecta al grafo (dos clientes en wpctl status) y
wpctl pasa a mostrar una sección Video que antes no existía.

Y el Start de ScreenCast SIGUE sin Response a los 60s. Mismo resultado exacto.

LA HIPÓTESIS QUEDA MATADA POR MEDICIÓN. "Falta el gestor de sesión que mueva el nodo
de Paused a Streaming" era mía y era razonable; no era cierta. Queda escrita junto a
su refutación porque una hipótesis descartada CON EVIDENCIA vale más que una lista de
sospechosos: acota el próximo paso a lo que queda, que es el backend mismo.

El dato nuevo, que es por dónde seguir: con wireplumber corriendo, `wpctl status`
lista `Video → Streams` VACÍO durante el handshake. O sea que el nodo
`cosmic-screencast` que SÍ existe en `pw-cli ls Node` no llega a wireplumber como
stream gestionado. Próximo movimiento: RUST_LOG=trace sobre screencast_thread, no
otra dep.

── por qué receta propia y no la de GNOME ──────────────────────────────────────
La de incoming-gnome funciona pero NEEDea libglib/libgobject/libpipewire de la ISLA
DINÁMICA de GNOME: traerla metería una segunda glib y una segunda pipewire en la
imagen. De 19 deps, 14 dan hash idéntico; las que divergen divergen a propósito —
sobre todo `pipewire`, que acá apunta a la de COSMIC (338d1d8c), la que el escritorio
realmente ARRANCA. Un gestor de sesión contra otra pipewire que la que corre no
gestiona nada.

El cambio de fondo es glib → glib-shared. COSMIC usa la glib ESTÁTICA del corpus, que
le alcanza al portal porque es un ejecutable. Acá no: wireplumber produce un .so y 17
módulos, y libglib-2.0.a tiene 44.275 reubicaciones R_X86_64_32/32S ⇒ no es PIC. La
regla del frente GNOME (readelf -r ANTES de gastar el build) ahorró uno.

Y la salida no fue una campaña nueva sino una MEDICIÓN: incoming-kde/glib-shared
copiada a esta cola resuelve al MISMO hash (0584ce1f) y ya estaba sellada ⇒ cero
rebuild. Idem pcre2-shared, lua y libelogind. Las dos glib coexisten sin pisarse (.a
y .so son ficheros distintos) y el portal conserva sus 3 NEEDED.

escritorio-cosmic: 84 → 89 recetas, 0 faltantes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 10:54:54 -04:00
sergio 97bcf0673e estado: cosecha granja 2026-08-05T14:42:37Z — avance del árbol KDE 2026-08-05 10:42:37 -04:00
sergio 4984d6942d estado: cosecha granja 2026-08-05T14:30:05Z — avance del árbol KDE 2026-08-05 10:30:05 -04:00
sergioandClaude Opus 5 ee037912a9 🎥 ScreenCast: el stream SE CREA — nodo cosmic-screencast vivo en pipewire
La receta de la sonda (b3:af49d32d) y lo que midió. Es la única receta de la campaña
cuyo producto no es una pieza del escritorio sino un instrumento para medirlo: entra
a la imagen porque un handshake de portal sólo se puede ejercer DESDE la sesión, con
bus y compositor vivos, y sale ESTÁTICA (0 NEEDED) porque un instrumento no debe
depender de aquello que mide.

  [1/4] CreateSession  → Response 0, session_handle                    ✓
  [2/4] SelectSources  → Response 0                                   ✓
  [3/4] Start          → el backend ABRE "Share your screen", con
                         miniatura EN VIVO del framebuffer y el output
                         Virtual-1; se elige, se pulsa Share…
                         y NO llega Response en 60s                    ✗

El log del backend da la línea exacta:
  screencast_thread: state-changed 'Connecting' -> 'Paused'

Y `pw-cli ls Node` durante la espera da el veredicto INDEPENDIENTE:
  node.name = "cosmic-screencast"   media.class = "Video/Source"

EL NODO DE VIDEO EXISTE EN EL GRAFO DE PIPEWIRE. La cadena entera —cliente →
frontend → backend → compositor → demonio— funciona hasta crear y negociar el stream.
Lo único que no ocurre es el Response de vuelta tras quedar en `Paused`. Eso es un
lugar muy distinto del de esta mañana ("no hay demonio con quien negociar").

Sospecha para el próximo paso, y es HIPÓTESIS no medición: falta `wireplumber`. Sin
gestor de sesión nadie mueve el nodo de Paused a Streaming y el backend parece
esperarlo. Construirlo la confirma o la mata.

Gotchas que costaron corridas y quedan escritos:
 · matar el backend se lleva puesto al frontend (ambos pierden dueño del bus);
 · el lanzador busca por NOMBRE VISIBLE: `cosmic-term` no matchea, `Terminal` sí —
   escribir el nombre del binario abre otra app;
 · `| head -N` bufferiza y deja la terminal en blanco: parece colgada y está esperando;
 · pkg-config OMITE los -L de dirs "estándar" y zig cc cross NO los busca ⇒
   `-ldbus-1` pelado da "unable to find static system library", que suena a librería
   faltante cuando lo que falta es la ruta.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 10:28:14 -04:00
sergio b77cc68a91 estado: cosecha granja 2026-08-05T14:11:28Z — avance del árbol KDE 2026-08-05 10:11:29 -04:00
sergio d55a83e428 estado: cosecha granja 2026-08-05T10:14:35Z — avance del árbol KDE 2026-08-05 06:14:35 -04:00
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
sergio 3f3ae98a63 estado: cosecha granja 2026-08-05T09:14:09Z — avance del árbol KDE 2026-08-05 05:14:09 -04:00
sergio d08d61f698 estado: cosecha granja 2026-08-05T08:43:52Z — avance del árbol KDE 2026-08-05 04:43:52 -04:00
sergio 987d14b7af estado: cosecha granja 2026-08-05T08:12:53Z — avance del árbol KDE 2026-08-05 04:12:54 -04:00
sergio 71aeb36622 estado: cosecha granja 2026-08-05T04:05:55Z — avance del árbol KDE 2026-08-05 00:05:55 -04:00