Commit Graph
849 Commits
Author SHA1 Message Date
Sergio 2c8a82859f estado: cosecha granja 2026-09-02T15:02:27Z — avance del árbol KDE 2026-09-02 15:02:27 +00:00
SergioandClaude Opus 5 12c30ec9f9 gnome: la terna no es deuda, es alcance — a .deferred/ con el mapa corregido
gdm, gnome-session y gnome-settings-daemon salen de la cola y quedan aparcadas
en `recipes/incoming-gnome/.deferred/`, que es el mecanismo que el repo ya usa
(precedente: incoming-kde/.deferred/libXft.toml). El glob del worker es
TOP-LEVEL y el del grafo también, así que dejan de molerse cada ciclo y dejan de
contarse como deuda que nadie va a pagar. `targets.toml` ya no las lista desde
el 2026-08-07 («APARCADAS POR DISEÑO»); esto alinea el árbol con esa decisión.

Y el mapa que llevaban estaba mal en las dos direcciones:

1. «La terna GTK3» es un nombre engañoso: **GTK3 no es el muro**. GTK3 tiene
   backend Wayland y se construye con -Dx11_backend=false. Autorarlo no habría
   destrabado ninguna de las tres. Lo que bloquea de verdad:
     - g-s-d 48.1: gtk+-x11-3.0 / x11 / xfixes INCONDICIONALES => imposible en
       Wayland-only, no «pendiente».
     - gnome-session 48.0: dependency('libsystemd', required: true) en meson:124
       es una comprobación de pkg-config EN BUILD. arje-logind-compat no la
       satisface y es a propósito — su receta explica que GNOME consulta login1
       en RUNTIME por D-Bus y que no hace falta la C-ABI sd-login. Único camino:
       parchear ese required a false, que es una decisión, no un arreglo.
     - gdm: cuelga de gnome-session, y con mirada-greeter probablemente sobra.

2. La lista «FRONTERA» estaba VIEJA: ya existen libX11, libXfixes, xorgproto,
   libXau/Xcursor/Xdmcp/Xext/Xi/Xrender/Xtst, libxcb (casi todas por KDE) y
   polkit, upower, geocode-glib, libgweather. Cuatro de las ocho líneas de g-s-d
   habían dejado de ser ciertas. Faltan de verdad: gtk3, libnotify y una
   variante libcanberra-gtk3.

Verificado contra el TARBALL (sha256 = el del pin), no contra el comentario.

incoming-gnome queda en 79 recetas, sellado=79 deuda=0 nunca=0.
Gate --check OK, grafo CIERRA, escritorio-gnome sigue 119/119.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LykB7vw38b4Ck1Zij15RQ4
2026-09-02 14:46:37 +00:00
Sergio 28611dabf0 estado: cosecha granja 2026-09-02T14:32:36Z — avance del árbol KDE 2026-09-02 14:32:36 +00:00
SergioandClaude Opus 5 c29a4fcb9e gnome: retirar 8 copias de cola que sellan igual que el corpus
`fontconfig-shared`, `freetype-shared`, `libjpeg-turbo-shared`, `libpng-shared`,
`libtiff-shared`, `libxml2-shared`, `libyaml-shared` y `zlib-shared` existían a
la vez en `incoming-gnome/` y en `recipes/`, y las ocho daban el MISMO
ArtifactHash que su gemela del corpus. Como la resolución de deps cae al padre
cuando no hay hermano, quitarlas deja a las consumidoras resolviendo contra
`recipes/` y con el mismo hash.

Medido, no supuesto: se hashearon las 1144 recetas antes y las 1136 después, y
de las 1136 supervivientes **0 cambiaron de hash**. No hay rebuild.

Lo que NO se toca, y conviene que quede dicho porque se parece:

- Las variantes de la ISLA DINÁMICA (glib, gtk4, gdk-pixbuf, pango, harfbuzz,
  graphene, libadwaita, json-glib, libusb, libxcvt, pipewire, pulseaudio,
  wireplumber, xdg-desktop-portal): mismo nombre, hash DISTINTO. Son sombras a
  propósito — la introspección de GNOME exige .so reales.
- Las copias entre COLAS (alsa-lib, hwdata, xkeyboard-config, libdisplay-info,
  lcms2, icu4c, lua, nasm, fuse3, libsndfile, libelogind, hicolor-icon-theme,
  dbus-shared): también dan el mismo hash, pero NO sobran. Cada cola necesita su
  propio hermano para cerrar su clausura; borrar la de una rompe esa cola. No es
  el caso de onda-2, donde la cola entera duplicaba a otra.

Y el criterio, otra vez: `pipewire` y `pulseaudio` son TEXTUALMENTE idénticas a
las de COSMIC y sellan distinto, porque sus deps resuelven distinto según la
cola. El fichero no dice la verdad; el hash sí.

Gate --check OK, grafo CIERRA, escritorio-gnome sigue 119/119. La cola queda en
82 recetas (79 selladas + la terna GTK3) y sus 5 parches, todos en uso.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LykB7vw38b4Ck1Zij15RQ4
2026-09-02 14:10:56 +00:00
Sergio 9ab5464a6b estado: cosecha granja 2026-09-02T14:03:32Z — avance del árbol KDE 2026-09-02 14:03:32 +00:00
Sergio 62899432f6 estado: cosecha granja 2026-09-02T13:33:10Z — avance del árbol KDE 2026-09-02 13:33:10 +00:00
Sergio a575e8ea9f estado: cosecha granja 2026-09-02T13:02:52Z — avance del árbol KDE 2026-09-02 13:02:52 +00:00
Sergio 0fc2ce3b0b estado: cosecha granja 2026-09-02T12:32:59Z — avance del árbol KDE 2026-09-02 12:32:59 +00:00
Sergio e647f05a54 estado: cosecha granja 2026-09-02T12:02:05Z — avance del árbol KDE 2026-09-02 12:02:05 +00:00
Sergio 1960cadcba estado: cosecha granja 2026-09-02T10:31:51Z — avance del árbol KDE 2026-09-02 10:31:51 +00:00
Sergio 4706c93434 estado: cosecha granja 2026-09-02T10:01:53Z — avance del árbol KDE 2026-09-02 10:01:53 +00:00
Sergio bfd58d4cf7 estado: cosecha granja 2026-09-02T09:32:15Z — avance del árbol KDE 2026-09-02 09:32:15 +00:00
Sergio a59e23bcc2 estado: cosecha granja 2026-09-02T09:02:32Z — avance del árbol KDE 2026-09-02 09:02:32 +00:00
Sergio 85c2ddf034 estado: cosecha granja 2026-09-02T08:31:54Z — avance del árbol KDE 2026-09-02 08:31:54 +00:00
Sergio 3027ab5e2c estado: cosecha granja 2026-09-02T08:02:09Z — avance del árbol KDE 2026-09-02 08:02:09 +00:00
Sergio 2c8cd351c6 estado: cosecha granja 2026-09-02T07:31:59Z — avance del árbol KDE 2026-09-02 07:32:00 +00:00
Sergio 8338edee8c estado: cosecha granja 2026-09-02T07:01:58Z — avance del árbol KDE 2026-09-02 07:01:58 +00:00
Sergio cbe07af0cf estado: cosecha granja 2026-09-02T06:31:57Z — avance del árbol KDE 2026-09-02 06:31:57 +00:00
Sergio 0fa2ae8bba estado: cosecha granja 2026-09-02T06:02:02Z — avance del árbol KDE 2026-09-02 06:02:02 +00:00
Sergio 04d174bf6c estado: cosecha granja 2026-09-02T05:31:53Z — avance del árbol KDE 2026-09-02 05:31:53 +00:00
Sergio d6bfa475e3 estado: cosecha granja 2026-09-02T04:31:55Z — avance del árbol KDE 2026-09-02 04:31:55 +00:00
Sergio ee1a658328 estado: cosecha granja 2026-09-02T04:01:56Z — avance del árbol KDE 2026-09-02 04:01:56 +00:00
Sergio a72190b169 estado: cosecha granja 2026-09-02T01:01:49Z — avance del árbol KDE 2026-09-02 01:01:49 +00:00
Sergio 56bf168cce estado: cosecha granja 2026-09-02T00:31:48Z — avance del árbol KDE 2026-09-02 00:31:49 +00:00
Sergio 9afe0bb9d4 estado: cosecha granja 2026-09-02T00:02:07Z — avance del árbol KDE 2026-09-02 00:02:07 +00:00
Sergio aee9e55c54 estado: cosecha granja 2026-09-01T23:33:01Z — avance del árbol KDE 2026-09-01 23:33:01 +00:00
Sergio 1d06fce140 estado: cosecha granja 2026-09-01T23:02:08Z — avance del árbol KDE 2026-09-01 23:02:08 +00:00
Sergio 987aad25af estado: cosecha granja 2026-09-01T22:31:51Z — avance del árbol KDE 2026-09-01 22:31:51 +00:00
Sergio aa55981ad2 estado: cosecha granja 2026-09-01T22:02:10Z — avance del árbol KDE 2026-09-01 22:02:10 +00:00
Sergio 683eaeb79b estado: cosecha granja 2026-09-01T21:31:51Z — avance del árbol KDE 2026-09-01 21:31:51 +00:00
Sergio e29a1f2ebc estado: cosecha granja 2026-09-01T21:01:49Z — avance del árbol KDE 2026-09-01 21:01:49 +00:00
Sergio a6ac3368ab estado: cosecha granja 2026-09-01T20:31:51Z — avance del árbol KDE 2026-09-01 20:31:51 +00:00
Sergio 17b6a284f7 estado: cosecha granja 2026-09-01T20:02:56Z — avance del árbol KDE 2026-09-01 20:02:56 +00:00
Sergio 0ae7e18a6a estado: cosecha granja 2026-09-01T19:32:25Z — avance del árbol KDE 2026-09-01 19:32:25 +00:00
SergioandClaude Opus 5 8b2ff3cfd4 digest: blake3 pelado, no length-prefijado — el mismo archivo tenía dos hex
Lo destapó escribir la contraparte del ADR 0014 para churay: churay direcciona sus blobs
con blake3(bytes) pelado y hammer iba a sellar el digest con of_inputs(&[bytes]), los dos
bajo el prefijo `b3:`. El mismo archivo con dos hex distintos, y un CAS compartido que no
falla ruidosamente: cada lado busca un nombre distinto para los mismos bytes.

Con una sola entrada el length-prefijado no desambigua ninguna concatenación — sólo hace
que el nombre deje de ser verificable por un tercero con b3sum en la mano.

`ArtifactHash::of_bytes` YA EXISTÍA y ya era blake3 pelado: es la convención de of_file y
la del expected_hash de un .swm, así que of_inputs era además la pieza fuera de sitio
dentro del propio repo. of_inputs se queda para lo que fue escrito: hashear una LISTA.

Coste: una línea, porque ningún índice publicado lleva todavía el campo. Es el argumento
del ADR aplicado a sí mismo — decidir antes de que haya usuarios. La corrección queda en
el ADR, no reescrita en silencio.

Guardián: digest_es_blake3_pelado_y_no_length_prefijado, con vector fijo de b3sum y un
assert_ne contra of_inputs que nombra la consecuencia.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CK6HpSoHcN9M4GBpqRSusR
2026-09-01 19:10:07 +00:00
Sergio fbf402d51e estado: cosecha granja 2026-09-01T19:01:57Z — avance del árbol KDE 2026-09-01 19:01:57 +00:00
SergioandClaude Opus 5 48b3c5be3f ADR 0014: distribución multi-origen — el origen no necesita confianza
Se decide ahora, antes de tener usuarios, porque toca el formato del índice y el
comportamiento de clientes instalados en máquinas ajenas: después de la primera descarga
pública el cambio rompe a alguien o se arrastran dos formatos para siempre.

La decisión entera cuelga de una asimetría medida: ~51 G de cuerpo inmutable y verificable
por contenido, contra KB de raíz mutable que es lo único que necesita ser fresco y
auténtico. El cuerpo puede servirse desde cualquier host, incluso hostil ⇒ conseguir
espejos deja de ser un problema de infraestructura.

Cloudflare R2 como primer origen público por el egress a 0, pero es INSTANCIA, no
arquitectura: lo que se decide es que R2 sea una entrada más de una lista. No depender de un
servidorcito no se logra contratando un proveedor grande, sino pudiendo perder cualquiera
sin enterarse. Regla derivada: nunca menos de dos orígenes en dos proveedores.

Verificado de punta a punta con dos orígenes HTTP y un .swm con UN byte cambiado bajo el
mismo nombre: origen muerto ⇒ failover; origen manipulado ⇒ aborta y NO cae al bueno de
detrás. Sin ese segundo caso la lista sería un mecanismo para tapar espejos mentirosos.

Queda pendiente y anotado: el vigía sólo mira upstream, no nuestros orígenes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CK6HpSoHcN9M4GBpqRSusR
2026-09-01 18:45:10 +00:00
SergioandClaude Opus 5 a2c2c4d968 gnome onda-2: jubilar la cola — 22 recetas y 22 hashes identicos a incoming-gnome
El caso LIMPIO del mismo fenomeno que onda-1, sin ninguna de sus asperezas: las
22 recetas son byte a byte identicas a las de incoming-gnome Y las 22 dan el
MISMO ArtifactHash, o sea la misma direccion del store. Sin divergencias, sin
colision de nombre y sin un solo artefacto que podar al retirarla.

La comprobacion que decide NO es `diff` sino `hammer hash`: la resolucion de
deps es hermano->padre, asi que dos ficheros identicos en colas distintas pueden
sellar distinto. Aca coinciden los 22.

Se va tambien `cairo-ctime-r.patch`, verificado identico al de incoming-gnome, y
comprobado que ninguna receta de ninguna cola queda apuntando a un parche
inexistente.

El andamio ya no sostenia nada: el trabajo de la isla dinamica vive en
incoming-gnome, que es la cola que el perfil usa. Sale de QUEUES en el mismo
commit, por la simetrica de la regla que ese fichero documenta.

Gate --check OK, grafo CIERRA, escritorio-gnome sigue 119/119, corpus 786/787.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LykB7vw38b4Ck1Zij15RQ4
2026-09-01 18:35:53 +00:00
Sergio b2e92de2f3 estado: cosecha granja 2026-09-01T18:31:57Z — avance del árbol KDE 2026-09-01 18:31:57 +00:00
Sergio 5053723239 estado: cosecha granja 2026-09-01T18:02:02Z — avance del árbol KDE 2026-09-01 18:02:03 +00:00
SergioandClaude Opus 5 cf42cd9049 gnome onda-1: jubilar la cola entera — molia para nadie
Cierra la jubilacion empezada con gnome-desktop. Las 5 recetas que quedaban:

- glib, glib-introspected, gobject-introspection, py3-setuptools: byte a byte
  identicas a las de incoming-gnome Y con el MISMO ArtifactHash, o sea que
  sellaban en la misma direccion y entraban por cache-hit. Coste de build cero;
  coste real: un segundo sitio donde editar, que se separa en silencio.
- gsettings-desktop-schemas: la unica distinta, y es la version ANTERIOR al
  2026-07-28 (introspection=false + link=static). La vigente lo activo porque el
  gir de Meta de mutter incluye GDesktopEnums-3.0.gir, que sale de ahi, y sin el
  el g-ir-scanner corta en el ultimo target de mutter (721/722).

Lo caro no era el tiempo sino el NOMBRE: el gsettings viejo competia con el
bueno, dos artefactos homonimos con hash distinto en el store. Podado el
huerfano (0fb1703d, 155 KiB exclusivos) y anotado en el ledger anti-churn; los
otros cuatro artefactos siguen vigentes porque los produce incoming-gnome.

Y al jubilar gnome-desktop las dos hojas de la cola se habian quedado sin
consumidor: la cola se alimentaba a si misma y terminaba en el aire.

Sale tambien de QUEUES en farm-worker-loop.sh, por la simetrica de la regla que
ese fichero ya documenta dos veces: una cola ausente de la lista no da error,
da silencio — y una cola retirada que sigue en la lista, tambien.

Gate --check OK, grafo CIERRA, escritorio-gnome sigue 119/119, corpus 786/787.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LykB7vw38b4Ck1Zij15RQ4
2026-09-01 17:52:42 +00:00
Sergio 78fc56b266 estado: cosecha granja 2026-09-01T17:32:03Z — avance del árbol KDE 2026-09-01 17:32:04 +00:00
Sergio a82b4ec0cc estado: cosecha granja 2026-09-01T17:02:43Z — avance del árbol KDE 2026-09-01 17:02:43 +00:00
SergioandClaude Opus 5 12c24a984a tasas: la 7ª sorpresa quedaba suelta del punto 6 de la lista
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ACUcwo9mZsE5ocYVE9npih
2026-09-01 17:00:19 +00:00
SergioandClaude Opus 5 9591e69b70 harkaq: el salto del check de arquitectura ya no se apoya en UB (SDD 25 T17)
`f[k++] = BPF_JUMP(..., I_KILL - k - 1 + 1)` leía y modificaba `k` en la misma
expresión, sin punto de secuencia: UB en C11. Andaba porque gcc y clang leen `k`
después del incremento y ese `+1` era la compensación exacta, pero si algún
compilador leyera antes el salto caería una instrucción más allá del final.

El índice se fija ahora en `I_ARCH` antes de usarlo. El código generado es
IDÉNTICO —mismo objdump del objeto a -O1 y a -O2, la única línea que difiere es
el nombre del fichero—, que es lo que prueba que es la misma cuenta escrita sin
UB y no un arreglo que además mueve el salto. Comprobado además que la jaula
sigue puesta: ptrace desde dentro da EPERM y un ejecutable fuera de la clausura
no arranca.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ACUcwo9mZsE5ocYVE9npih
2026-09-01 16:59:22 +00:00
SergioandClaude Opus 5 1df77985fa tasas: T19 — el sandbox apila una capa overlay por dep, y lo caro no es lo que parece
Nadie había medido qué cuesta el apilado de capas de `bwrap_args`. El 95% de las
recetas (1 108 de 1 171) construye con las deps APILADAS, hasta ~27.

Un lookup que FALLA cuesta +1 925 ns por capa (a 64 capas, 124 µs = 1 580 syscalls
nulas), pero se paga UNA VEZ POR RUTA: la dentry fusionada queda cacheada y el
montaje dura toda la fase. Un `cc -O2 -c` toca 381 rutas distintas que fallan ⇒
2,9 ms por fase a 24 capas, la misma décima de por ciento que la jaula de T17/T18.

⇒ `merge_deps_layer` no es una optimización de velocidad: sólo se pagaría sola a
partir de ~35 200 primeros fallos en una misma fase. Es el rodeo de un muro, y el
muro quedó bisecado al byte: `mount(2)` monta 41 capas (4 059 B de opciones) y
falla en 42 con un `ENOENT` que miente. El `mount(8)` de util-linux se rinde entre
8 y 12, así que bisecarlo desde la shell da un muro FALSO.

Consecuencias anotadas en sandbox.rs: no bajar el umbral «para que vaya más
rápido», y podar `.dmerge` es gratis en rendimiento. Y hay puerta medida: la API
de montaje nueva (`fsconfig lowerdir+`) monta las 64 capas que `mount(2)` rechaza.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ACUcwo9mZsE5ocYVE9npih
2026-09-01 16:56:12 +00:00
SergioandClaude Opus 5 b4a7235c59 estado: regenerar los 5 grafos tras jubilar gnome-desktop de onda-1
Ningun nodo cambia de estado y el gate `--check` sigue OK: lo unico que se
mueve es `dependientes_total` de sus deps, un dependiente menos cada una. Es
la yupana cruzando TODAS las colas, onda-1 incluida, aunque ningun grafo la
cargue como cola propia.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LykB7vw38b4Ck1Zij15RQ4
2026-09-01 16:36:30 +00:00
Sergio 67c49a77e0 estado: cosecha granja 2026-09-01T16:31:54Z — avance del árbol KDE 2026-09-01 16:31:54 +00:00
Sergio eaa04a12a5 estado: cosecha granja 2026-09-01T16:01:55Z — avance del árbol KDE 2026-09-01 16:01:55 +00:00
Sergio 95679adb6f estado: cosecha granja 2026-09-01T15:32:55Z — avance del árbol KDE 2026-09-01 15:32:55 +00:00