Commit Graph
1157 Commits
Author SHA1 Message Date
Sergio 5b7b7fa59b estado: cosecha granja 2026-09-07T13:02:16Z — avance del árbol KDE 2026-09-07 13:02:16 +00:00
Sergio 3996f67d4d estado: cosecha granja 2026-09-07T12:32:07Z — avance del árbol KDE 2026-09-07 12:32:07 +00:00
Sergio fe95998675 SDD 26: el firefox con PGO reproduce bit a bit — unidad 3.a cerrada
verificar-repro.sh: REPRODUCEN 1, DERIVA 0, NO-DETERMINISMO 0.

Era el riesgo real de esta unidad, no el rendimiento. El perfil es no
determinista por naturaleza; congelarlo como fuente pineada era el ARGUMENTO de
por qué el build seguiría siendo reproducible, y esto es la MEDICIÓN. Si
-fprofile-use hubiera metido cualquier decisión dependiente del orden o del
timing, habríamos cambiado velocidad por el invariante del proyecto.
2026-09-07 12:03:52 +00:00
Sergio a77373bc21 estado: cosecha granja 2026-09-07T12:02:00Z — avance del árbol KDE 2026-09-07 12:02:00 +00:00
Sergio 2010918252 estado: cosecha granja 2026-09-07T11:32:07Z — avance del árbol KDE 2026-09-07 11:32:07 +00:00
Sergio 024ebc52d2 SDD 26 §3.quinquies: el PGO encendido y los tres muros que el plan no tenía
El §3.ter daba dos muros —el display y el no-determinismo del perfil— y los dos
eran ciertos. Aparecieron tres más, ninguno visible sin construir:

  1. libclang_rt.profile.a no existía: el lab trae clang pero NINGUNA runtime de
     compiler-rt. El instrumentado murió en el minuto 38:56.
  2. Los sandboxes de Firefox matan la corrida de perfilado con signal 11: el
     proceso que renderiza no nace, 0 GET, y el .profraw que queda es el del
     padre arrancando. Un perfil de nada, con todo en verde.
  3. El worker no puede bajar del mirror: tiene mirror-env.sh pero no la clave.

Y queda escrito cómo se verificó que el PGO llegó, que NO pudo ser como RLBox.
Ahí el artefacto delata la jaula (símbolos w2c_*, cero -> 634). Acá el
discriminante análogo —las secciones .text.hot que clang emite al particionar
por temperatura— NO SIRVE: con lld y ThinLTO el enlazador las fusiona y dan cero
con PGO y sin él. La evidencia válida está un nivel bajo el configure: 189
invocaciones del compilador con -fprofile-use, llvm-profdata encontrado, cero
avisos de perfil que no cuadra, y libxul creciendo 1,7 MB.

Es evidencia de BUILD y no de ARTEFACTO, y conviene decirlo así en vez de
presentarla como si fuera lo mismo.
2026-09-07 11:16:13 +00:00
Sergio bf6e5ce5cb estado: cosecha granja 2026-09-07T11:01:55Z — avance del árbol KDE 2026-09-07 11:01:55 +00:00
Sergio d55bc6514e estado: cosecha granja 2026-09-07T10:31:56Z — avance del árbol KDE 2026-09-07 10:31:56 +00:00
Sergio 53180fa56b estado: cosecha granja 2026-09-07T10:02:29Z — avance del árbol KDE 2026-09-07 10:02:29 +00:00
Sergio 3928eebad2 estado: cosecha granja 2026-09-07T09:01:51Z — avance del árbol KDE 2026-09-07 09:01:51 +00:00
Sergio df37509623 estado: cosecha granja 2026-09-07T08:32:02Z — avance del árbol KDE 2026-09-07 08:32:02 +00:00
Sergio 24f96a34de estado: cosecha granja 2026-09-07T08:01:50Z — avance del árbol KDE 2026-09-07 08:01:50 +00:00
Sergio baba1cb7e7 estado: cosecha granja 2026-09-07T07:32:04Z — avance del árbol KDE 2026-09-07 07:32:04 +00:00
Sergio eaacc465a0 estado: cosecha granja 2026-09-07T07:01:48Z — avance del árbol KDE 2026-09-07 07:01:48 +00:00
Sergio 1a647885ee estado: cosecha granja 2026-09-07T06:32:04Z — avance del árbol KDE 2026-09-07 06:32:04 +00:00
Sergio d3c15f1033 estado: cosecha granja 2026-09-07T06:02:25Z — avance del árbol KDE 2026-09-07 06:02:25 +00:00
Sergio 6ddfad72d4 estado: cosecha granja 2026-09-07T05:32:16Z — avance del árbol KDE 2026-09-07 05:32:16 +00:00
Sergio 27603a735a estado: cosecha granja 2026-09-07T05:02:08Z — avance del árbol KDE 2026-09-07 05:02:08 +00:00
Sergio d4f9726b92 estado: cosecha granja 2026-09-07T04:32:06Z — avance del árbol KDE 2026-09-07 04:32:06 +00:00
Sergio d51c8c477f estado: cosecha granja 2026-09-07T03:32:08Z — avance del árbol KDE 2026-09-07 03:32:08 +00:00
Sergio 2840d3dcae estado: cosecha granja 2026-09-07T03:02:14Z — avance del árbol KDE 2026-09-07 03:02:15 +00:00
Sergio 22f4358ce7 estado: cosecha granja 2026-09-07T02:32:08Z — avance del árbol KDE 2026-09-07 02:32:08 +00:00
Sergio df913e2ff2 estado: cosecha granja 2026-09-07T02:02:07Z — avance del árbol KDE 2026-09-07 02:02:07 +00:00
Sergio cbcc6c2c40 estado: cosecha granja 2026-09-07T01:31:55Z — avance del árbol KDE 2026-09-07 01:31:55 +00:00
SergioandClaude Opus 5 570aa1ae5b SDD 26 §6.10: me equivoqué — las tres «baratas» no lo son, y libnotify está a medias en sway
Ayer escribí que tres de los siete huecos eran «promoción y no autoría» porque
libsecret, libcanberra y vulkan-loader ya tienen receta sellada en colas
incoming. Fui a declararlas en los perfiles y lo comprobé antes: en los TRES
casos falta la otra mitad.

    vulkan-loader   las TRES mesa construyen con -Dvulkan-drivers= VACÍO
                    -> un cargador sin un solo ICD no es WebGPU
    libsecret       no hay receta de gnome-keyring ni de ningún servicio de
                    secretos -> firefox hablaría a org.freedesktop.secrets y no
                    habría nadie
    libcanberra     no hay receta de sound-theme-freedesktop -> carga y no suena

Declararlas habría subido el número de paquetes de la imagen sin encender una
sola función, que es la peor clase de verde. Una librería es MEDIA función; la
otra mitad es quien la atiende.

La misma vara sobre libnotify, que sí declaré ayer, medida perfil por perfil:
plasma-workspace en kde, gnome-shell en gnome, cosmic-notifications en cosmic —
completa en tres— y NADIE en sway. Ahí queda a medias y ahora está escrito cuál
es.

Y una trampa anotada para quien vaya a cerrarla: el nombre `mako` YA ESTÁ OCUPADO
en el corpus por el motor de plantillas de Python que usa Mesa para su codegen.
No es el daemon de wlroots. Escribir recipes/mako.toml para el daemon pisaría una
receta viva de la cadena de mesa — la colisión de homónimos que la memoria del
proyecto ya tiene anotada. Me lo comí yo: fui a ver si `mako` estaba sellado, dijo
que sí, y por poco lo cuento como «el daemon ya está».

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UgNtJEFetMYbXax5dVUjZZ
2026-09-07 01:13:12 +00:00
SergioandClaude Opus 5 07b9b31454 targets: libnotify en los cuatro escritorios que llevan atuq
Sin esta línea la receta queda sellada y en NINGUNA imagen — la lección de `foot`
que este mismo fichero tiene escrita cuatro renglones más arriba de `atuq`, y que
la clausura no puede ver porque mide lo declarado.

Va en los cuatro perfiles que ya llevan el navegador (kde, gnome, cosmic, sway) y
NO en base/cli/mirada, que no lo llevan. Verificado parseando el TOML y no
leyéndolo: libnotify=1 en esos cuatro, 0 en los otros tres.

Medición al lado, con el vigía de sonames antes y después:

    kde     306 -> 307 nodos    2083 -> 2086 sonames    0 sin proveedor
    gnome   190 -> 191           657 ->  660            0
    cosmic  161 -> 162           498 ->  501            0
    sway    201 -> 202           509 ->  512            0
    mirada   41 ->  41           231 ->  231            0   (no lleva atuq)

+1 nodo exacto por perfil, que es lo que se agregó, y el que no lo lleva no se
movió. Si hubiera arrastrado algo sin querer, el delta no sería 1.

Y una comprobación que el mapa de §6.10 no da y que es la que decide si el
`dlopen` va a funcionar: que resuelvan las deps de la PROPIA librería. Un dlopen
falla en silencio igual si libnotify está pero su gdk-pixbuf no. Se lo pregunté
al loader musl, no a mí:

    ld-musl --list /usr/lib/libnotify.so.4
      libgdk_pixbuf-2.0.so.0 => /usr/lib/...   libgobject-2.0.so.0 => /usr/lib/...
      libglib-2.0.so.0       => /usr/lib/...   libgio-2.0.so.0     => /usr/lib/...
      libc.so                => /lib/ld-musl-x86_64.so.1

Toda la cadena cae dentro del rootfs salvo libc.so, que es la excepción del lab
ya documentada.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UgNtJEFetMYbXax5dVUjZZ
2026-09-07 01:09:53 +00:00
Sergio 01fab80611 estado: cosecha granja 2026-09-07T01:03:07Z — avance del árbol KDE 2026-09-07 01:03:08 +00:00
SergioandClaude Opus 5 6886b1541c libnotify: el primer hueco que el mapa del §6.10 encontró Y cerró
`libxul.so` lleva la cadena `libnotify.so.4` adentro y la abre por dlopen cuando
una página pide permiso para notificar. Nadie en el corpus la proveía, así que la
función quedaba apagada SIN UN SOLO MENSAJE: el navegador arranca, la web pide
notificaciones, y no pasa nada. No lo veía ninguna herramienta porque no hay
NEEDED en ningún ELF — es el tercer escalón, y sobrevivió a vigia-sonames con los
cinco perfiles en CERO.

Receta nueva, 0.8.8, SÓLO en variante compartida y eso no es un olvido: a un
`dlopen("libnotify.so.4")` una `.a` no le sirve de nada, así que una receta
estática sería un artefacto que nadie puede consumir.

Dos cosas que la receta se comió y quedan escritas:

1. `libpng-shared` hace falta porque las deps de hammer NO son transitivas: el
   `.pc` de gdk-pixbuf-2.0 declara `Requires: libpng` y el meson muere con un
   mensaje que nombra a gdk-pixbuf —que sí está— en vez de a lo que falta.
2. El guardián informaba «18 bytes» y parecía una librería vacía: `stat -c%s` no
   sigue el symlink, y `libnotify.so.4` apunta a `libnotify.so.4.0.0`. El
   artefacto estaba bien y el MENSAJE mentía. Con `-L` son 162.928 bytes. Se
   arregla el mensaje porque es lo que alguien va a leer a las tres de la mañana,
   y de paso el guardián exige el fichero real, no sólo el nombre.

⚠ Y lo que NO arregla, escrito en la receta para que nadie lea de más: libnotify
no trae daemon, manda org.freedesktop.Notifications por D-Bus. Tenerla resuelve
la mitad —que firefox la encuentre—; la otra mitad es que en la imagen haya
alguien escuchando ese nombre.

Verificado con el propio mapa: `--dlopen` pasa de 25 huecos a 24 y libnotify.so.4
desaparece; el soname viejo `.so.1` se reclasifica de «hueco» a «ruido», que es lo
que ahora es. El guardián normal sigue en CERO con un soname más pedido (66).

Queda pendiente la membresía de perfil en `docs/state/targets.toml`, que es
catálogo compartido y no lo toco sin decidirlo.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UgNtJEFetMYbXax5dVUjZZ
2026-09-07 00:51:56 +00:00
SergioandClaude Opus 5 7a81b6480c atuq §6.10: el tercer escalón — qué NO puede hacer el navegador, y por qué
hammer-9f nombró el punto ciego que ni su vigía ni mi guardián podían cubrir:
una librería que sólo aparece como CADENA LITERAL dentro de un dlopen(). No hay
NEEDED en ningún ELF, así que ningún auditor de readelf la encuentra. La
jerarquía queda:

    NEEDED del ejecutable          -> lo vemos los dos
    NEEDED de un .so dlopeado      -> lo vemos los dos
    dlopen("libfoo.so.1") literal  -> NO LO VE NINGUNO

Y un navegador vive de eso. Firefox sondea ffmpeg, VA-API, vulkan y libnotify
por nombre, y cuando no están NO FALLA: apaga la función y sigue. No hay línea
roja; hay una función que nadie ofrece y nadie reclama. Es la forma que ya costó
caro con OBS y su dlopen("libGL.so.1").

`--dlopen` busca esas cadenas y las cruza contra el rootfs. Es un HEURÍSTICO y se
declara como tal —una cadena no prueba un dlopen y su ausencia no prueba que no
lo haya—, así que no falla nunca: imprime un mapa triado. Lo afirmable es lo
contrario, que es lo útil: si la cadena está y el fichero no, esa función no
existe en esta imagen.

De 85 cadenas, 47 sin proveedor. Siete son huecos de verdad:

    códecs del sistema (H.264/AAC)  sin receta de ffmpeg — el más caro
    notificaciones web              sin receta
    llavero (libsecret)             RECETA YA EXISTE en incoming-gnome
    sonidos (libcanberra)           receta en incoming-kde
    WebGPU (vulkan-loader)          receta en incoming-kde
    vídeo por hardware (VA-API)     sin receta
    lectura en voz alta             sin receta

Tres de los siete son promoción, no autoría. Ocho son decisiones ya tomadas
(libGL por Wayland-only sin GLX; libcurl porque sólo lo usa el pingsender de
telemetría) y siete son ruido de musl o sonames viejos. El triaje va en una tabla
del propio script, no escondido en un `if`, porque es criterio y no medición: ahí
se puede discutir.

Sin triar: 0. Si aparece una cadena nueva, el informe la marca «SIN TRIAR» en vez
de tragársela.

Lo que esto cambia de fondo: hasta hoy la pregunta era «¿arranca?» y la respuesta
era sí. La que faltaba era «¿y qué NO puede hacer?», que ninguna métrica del repo
respondía porque todas miran presencia y ésta mira ausencia declarada por el
propio binario.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UgNtJEFetMYbXax5dVUjZZ
2026-09-07 00:43:29 +00:00
Sergio c6d749134e estado: cosecha granja 2026-09-07T00:33:28Z — avance del árbol KDE 2026-09-07 00:33:28 +00:00
Sergio 7be49a2133 estado: cosecha granja 2026-09-07T00:03:26Z — avance del árbol KDE 2026-09-07 00:03:26 +00:00
SergioandClaude Opus 5 26a0dd31c7 SDD 26: restauradas §2.ter–§2.sexies, que mi commit anterior borró sin querer
Al reescribir el §6.8 corté el texto entre «lo que NO está probado» y `## 7`, y
entre medio no había sólo eso: vivían ahí §2.ter (el modo `[source] dir`),
§2.quater (los tres fallos que destapó abrirlo en pantalla), §2.quinquies (los
tres mecanismos de la v0.3) y §2.sexies (lo que quedó probado y con qué). Ciento
veinte líneas de método pagado con horas.

Recuperadas de HEAD~1 y comprobadas byte a byte con `diff` contra el original, no
a ojo.

La causa, que es la de siempre en este repo: usé un ANCLA («hasta el próximo
`## 7`») dando por hecho que el documento estaba en el orden en que yo lo
imaginaba. El §6.8 lo había insertado yo mismo antes del §2.ter hace unas horas,
así que el ancla saltaba por encima de cuatro secciones. Un ancla es una
etiqueta, no una propiedad del documento — la misma familia que la cabecera de
hunk que nombra la función anterior.

Lo que lo hizo visible en el mismo minuto fue mirar el `git show --stat`: 210
líneas cambiadas en un fichero donde yo había escrito 45. La regla 2 del
CLAUDE.md manda mirarlo para el ALCANCE del commit, pero sirve igual para el
tamaño del cambio.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UgNtJEFetMYbXax5dVUjZZ
2026-09-06 23:48:19 +00:00
SergioandClaude Opus 5 2e093f9cab atuq §6.8: probado que el paquete sale por el proxy del contenedor — y con control negativo
Era lo único que la v0.5 dejó sin probar, y las tres puertas que había
encontrado siguen cerradas: no hay flag de línea de comandos para el
userContextId, Marionette no toma `-remote-allow-system-access` en la jaula, y
`tabs.create({cookieStoreId})` exige el permiso `cookies` — que no se le da a la
extensión del proxy sólo para que pueda probarse a sí misma.

La cuarta puerta estaba abierta: el fichero de SESIÓN guarda el userContextId de
cada pestaña y Gecko lo restaura. Se fabrica a mano — `mozLz40\0` + tamaño + un
bloque LZ4, y un bloque de sólo literales es LZ4 válido: veinte líneas, sin
librería.

Y la medición no le pregunta nada al navegador: le pone dos oídos en la red y
mira a cuál llama. Dos pestañas piden la MISMA url, una sin contenedor y otra en
«Banco»:

    al destino (8099)  GET /directo   <- la de sin contenedor, directa
    al proxy   (9099)  \x05\x01\x00   <- saludo SOCKS5 de la de «Banco»

Ese saludo sólo aparece si Gecko decidió hablar con un proxy para esa petición, y
el único que se lo pudo indicar es proxy.onRequest mirando el cookieStoreId. La
pestaña sin contenedor no es decorativa: sin ella, «todo fue por el proxy» y «el
ruteo anda» se verían iguales.

CONTROL NEGATIVO, que es lo que este repo se exige desde hoy: con
`--negative-control` no se configura el proxy y se exige lo contrario — las dos
pestañas directas y nadie llamando al proxy. Corrido: pasa. La única diferencia
entre las dos corridas es una línea de configuración y el observable se da vuelta
entero. Sin ese modo, una prueba que se hubiera vuelto ciega se vería idéntica a
una que funciona.

Tres detalles sin los cuales la prueba mide un silencio y se lee como fallo:
restore_on_demand=false, allow_hijacking_localhost=true, y el
triggeringPrincipal_base64 en cada entrada de sesión.

El artefacto se resuelve por `hammer hash` y no por glob, que es la lección de
hammer-03 de esta madrugada: con dos artefactos de la misma receta en el store,
`ls | head -1` es una ruleta.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UgNtJEFetMYbXax5dVUjZZ
2026-09-06 23:47:08 +00:00
Sergio 7f912c1e22 estado: cosecha granja 2026-09-06T23:33:11Z — avance del árbol KDE 2026-09-06 23:33:11 +00:00
Sergio 391d60eb90 estado: cosecha granja 2026-09-06T23:03:02Z — avance del árbol KDE 2026-09-06 23:03:02 +00:00
Sergio 44b6032522 vigia-sonames: dos falsos positivos menos — los cinco perfiles en CERO
NO hacía falta una receta de perl. `libperl.so` está en el artefacto, son 9,6 MB
en usr/lib/perl5/5.40.2/x86_64-linux/CORE/, y el binario la encuentra por su
RUNPATH, que apunta justo ahí. El vigía no la veía porque perl la construye con
-Duseshrplib y NO le pone SONAME: el código sólo registraba el nombre del fichero
`if son:`. Un ELF compartido sin SONAME se resuelve POR NOMBRE DE FICHERO, y eso
es exactamente lo que había que indexar.

El otro falso positivo era el último «hueco» del informe:
usr/lib/go/src/debug/elf/testdata/libtiffxx.so_ — un ELF de MUESTRA que Go
shipea para los tests de su propio paquete debug/elf, pidiendo libc.so.6 (glibc)
en una distro musl. Un binario que nadie ejecuta. `testdata/` no es cierre.

Importa arreglar un falso positivo aunque «sólo» sea ruido: un vigía que grita
en falso enseña a ignorarlo, y así es como libstdc++.so.6 —que SÍ rompía el
navegador en los cuatro escritorios— estuvo en esta misma salida sin que nadie
la mirara.

    escritorio-mirada    41 nodos ·  231 sonames ·  0 sin proveedor
    escritorio-kde      306 nodos · 2083 sonames ·  0 sin proveedor
    escritorio-gnome    190 nodos ·  657 sonames ·  0 sin proveedor
    escritorio-cosmic   161 nodos ·  498 sonames ·  0 sin proveedor
    escritorio-sway     201 nodos ·  509 sonames ·  0 sin proveedor

PROBADO CON UNA ROTURA A PROPÓSITO, porque un vigía todo-verde se ve igual que
uno roto. Quitando `runtime = ["gcc-libs"]` de firefox SOLO no pasa nada —atuq
lo declara también y es raíz de los mismos perfiles, así que la librería entra
igual; el primer control estaba mal montado—. Quitándolo de las DOS, kde y
cosmic vuelven a reportar libstdc++.so.6 y libgcc_s.so.1 exactamente. Restaurado
después.
2026-09-06 23:00:59 +00:00
Sergio 841abef25f estado: cosecha granja 2026-09-06T22:32:57Z — avance del árbol KDE 2026-09-06 22:32:57 +00:00
Sergio 02facebe28 deps.runtime: que ALGUIEN las lea — de 29 huecos de soname a 6
Tres arreglos que son el mismo: un campo que nadie lee es un campo que miente.

1. yupana._deps() leía SÓLO `deps.build`. Como yupana es la base de todas las
   herramientas de grafo, una dep de EJECUCIÓN no existía para ninguna: ni el
   vigía de sonames, ni la membresía de perfiles, ni el rootfs hidratado.
   Medido: firefox declaraba `runtime = ["gcc-libs"]` y el cierre de las cuatro
   imágenes seguía sin libstdc++.so.6, así que el navegador no arrancaba y el
   vigía lo seguía reportando como hueco DESPUÉS de haberlo arreglado.
   `deps.runtime` está en el esquema de hammer desde siempre. La unión es la
   definición de cierre: para CORRER hacen falta las dos.

2. build-state.py, lo mismo y por lo mismo.

3. El vigía entra en el LATIDO y deja docs/state/sonames.txt. Existía desde
   antes y contesta la pregunta que el grafo no contesta —no «¿está sellado?»
   sino «¿arranca?»— pero NADIE LO CORRÍA: no estaba en cosecha-cron y no dejaba
   fichero de estado. Por eso libstdc++.so.6, que rompía el navegador en los
   CUATRO perfiles, estuvo en su salida sin que nadie lo leyera, y se
   redescubrió arrancando atuq a mano. Un vigía que hay que acordarse de invocar
   no se distingue de no tenerlo.

Y se BORRA scripts/audit-needed.sh, que escribí ayer sin ver que vigia-sonames.py
ya hacía exactamente esto, con la misma frase en la cabecera. Dos herramientas
que miden lo mismo divergen y la que nadie mira es la que miente; la que se
queda es la que ya existía, que además reporta POR PERFIL y encontró más cosas.

python3 declara sus cuatro deps de ejecución (readline/sqlite/lzma/bz2): son
módulos de la stdlib que se cargan por dlopen, así que no rompen el arranque
sino un `import` — un fallo que aparece lejos y no menciona a python.

Resultado, con todo aplicado: 29 huecos -> 6, y los que quedan son otra clase.
`libperl.so` es empaquetado de la receta perl; `libc.so.6` lo pide el `go`
prebuilt y es un soname de GLIBC en una distro musl, que es un síntoma distinto.
Los dos quedan anotados en docs/state/sonames.txt, que ahora se regenera solo.
2026-09-06 22:28:17 +00:00
Sergio 54729e01e8 estado: cosecha granja 2026-09-06T22:02:09Z — avance del árbol KDE 2026-09-06 22:02:09 +00:00
Sergio 15639dd9a6 estado: cosecha granja 2026-09-06T21:31:39Z — avance del árbol KDE 2026-09-06 21:31:39 +00:00
Sergio 1ac1ed81bd estado: cosecha granja 2026-09-06T21:02:07Z — avance del árbol KDE 2026-09-06 21:02:08 +00:00
Sergio 387f4e9256 estado: cosecha granja 2026-09-06T20:33:04Z — avance del árbol KDE 2026-09-06 20:33:04 +00:00
Sergio 5b9777bdbd declarar gcc-libs como dep de EJECUCIÓN en las seis — y el navegador arranca
Las seis recetas que el audit daba por colgantes declaran ahora
`runtime = ["gcc-libs"]`. `deps.runtime` NO entra en el ArtifactHash —medido:
firefox sigue en b3:8116bdec, atuq en b3:f2960991, waterfox en b3:88b5a762—
así que esto NO reconstruye nada. Lo que cambia es la CLAUSURA, que es lo que se
hidrata en la imagen.

EVIDENCIA DE QUE ARREGLA EL FALLO REAL, no de que compila: `atuq` bajo sway
headless, sin GPU, renderizando about:buildconfig con sus tablas y la barra de
contenedores de la v0.5. Antes moría con decenas de «Error relocating:
_ZNKSt5ctypeIcE13_M_widen_initEv: symbol not found».
docs/evidencia/atuq-arranca-con-gcc-libs-2026-09-06.png

Y el audit se corrige, porque SUB-REPORTABA en dos formas:

  · Miraba sólo ejecutables y `head -12` por artefacto. El siguiente NEEDED que
    faltaba estaba en una LIBRERÍA (libmozsandbox.so pedía libnspr4.so), así que
    daba «6 recetas» cuando el artefacto de firefox declara 30 sonames. Ahora
    recorre TODOS los ELF.
  · No contaba lo que el propio artefacto TRAE. Firefox bundlea su nspr/nss y
    las encuentra por el LD_LIBRARY_PATH que fija su lanzador; contarlas como
    colgantes era un falso positivo.

Con las dos correcciones y gcc-libs en el store, el corpus baja de 25 artefactos
colgantes a TRES, y son otra cosa:

    sqlite-shared   libreadline.so.8
    python3         libreadline.so.8
    naabu           libdl.so.2 libpthread.so.0 libc.so.6

Los dos primeros piden una receta que falta (readline). El tercero pide sonames
de GLIBC, que en una distro musl es un síntoma distinto y merece su propia
mirada. Quedan anotados, no arreglados.
2026-09-06 20:09:10 +00:00
Sergio c5df480b36 estado: cosecha granja 2026-09-06T20:03:27Z — avance del árbol KDE 2026-09-06 20:03:27 +00:00
Sergio 4219d412ee estado: cosecha granja 2026-09-06T19:32:17Z — avance del árbol KDE 2026-09-06 19:32:17 +00:00
Sergio 04a5ff4be9 estado: cosecha granja 2026-09-06T19:03:28Z — avance del árbol KDE 2026-09-06 19:03:29 +00:00
Sergio c13410428e estado: cosecha granja 2026-09-06T18:32:26Z — avance del árbol KDE 2026-09-06 18:32:26 +00:00
Sergio 98d0ad49cc estado: cosecha granja 2026-09-06T18:02:12Z — avance del árbol KDE 2026-09-06 18:02:12 +00:00
Sergio 0aa0ab6e48 estado: cosecha granja 2026-09-06T17:02:08Z — avance del árbol KDE 2026-09-06 17:02:08 +00:00
Sergio b2df1fbac2 estado: cosecha granja 2026-09-06T16:32:26Z — avance del árbol KDE 2026-09-06 16:32:26 +00:00