GTK3: decisión del usuario — NO entra; gnome-session, gsd y gdm quedan CERRADAS por escrito

Decidido el 2026-08-08. Las tres recetas dependen de GTK3 (gnome-settings-daemon además de
gtk+-x11-3.0) y quedan cerradas, **no «en deuda»**. La diferencia no es semántica: una deuda
invita a reintentarla en cada informe y en cada ciclo de granja; una decisión se respeta.

POR QUÉ ES RAZONABLE Y NO UNA RENDICIÓN:
· GNOME funciona sin esto — el camino vivo es mutter → gnome-shell arrancado por arje, y
  ninguno de los dos depende de gnome-session (su cierre es mutter+gjs+gobject-introspection+
  gnome-desktop).
· Traer GTK3 sería una torre de C muerta —y para waybar además gtkmm, sus bindings de C++—
  por un gestor de sesión y un login manager que este escritorio no necesita.
· La función está cubierta: la sesión la levanta arje y la barra de estado es `yambar`, C puro,
  sellado anoche en el frente wlr.
Se reabre si alguien trae GTK3 por otro motivo con peso propio (una app gráfica que lo exija).

EL MARCADOR VIVE EN LA RECETA, NO EN UNA LISTA APARTE. `build-farm.sh` salta las recetas cuya
cabecera dice «CERRADA POR DECISIÓN». Podría haber hecho un fichero de exclusiones, pero una
lista y una cabecera se desincronizan solas: así, quien lee el porqué y quien decide saltarla
miran EL MISMO TEXTO. Y el drenador lo dice en su salida, para que la decisión sea visible en
vez de silenciosa.

Con esto la granja deja de quemar CPU en tres recetas que nadie va a arreglar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-07 23:31:08 -04:00
co-authored by Claude Opus 5
parent deee75eca5
commit d70098ade5
4 changed files with 68 additions and 1 deletions
+19
View File
@@ -18,6 +18,25 @@
# ⇒ No reintentar estas tres esperando que cambie algo. Se destraban el día que entre GTK3 (y para # ⇒ No reintentar estas tres esperando que cambie algo. Se destraban el día que entre GTK3 (y para
# gnome-settings-daemon, también X11), no antes. Es una decisión de alcance, no un fallo. # gnome-settings-daemon, también X11), no antes. Es una decisión de alcance, no un fallo.
#
# ═══════════════════════════════════════════════════════════════════════════════════════════════
# ⛔ CERRADA POR DECISIÓN, 2026-08-08. NO REINTENTAR.
# ═══════════════════════════════════════════════════════════════════════════════════════════════
# El usuario decidió NO traer GTK3 al catálogo. Esta receta depende de él (ver el diagnóstico de
# abajo) ⇒ queda cerrada, no «en deuda». La diferencia importa: una deuda invita a reintentarla en
# cada informe; una decisión se respeta.
#
# POR QUÉ ES RAZONABLE, y no una rendición:
# · GNOME funciona sin esto. El camino vivo es mutter → gnome-shell, arrancado por arje; ninguno
# de los dos depende de gnome-session (su cierre es mutter+gjs+gobject-introspection+gnome-desktop).
# · Traer GTK3 sería una torre de C muerta —y para waybar, además, gtkmm, o sea sus bindings de
# C++— por un gestor de sesión y un login manager que este escritorio no necesita.
# · La función que aportaban está cubierta: la sesión la levanta arje, y la barra de estado es
# `yambar` en el frente wlr, que es C puro y ya está sellado.
#
# SE REABRE SI, Y SÓLO SI, alguien trae GTK3 por otro motivo con peso propio (una aplicación
# gráfica de terceros que lo exija). Entonces esto sale gratis; hoy no.
name = "gdm" name = "gdm"
version = "48.0" version = "48.0"
license = "GPL-2.0-or-later" license = "GPL-2.0-or-later"
+19
View File
@@ -9,6 +9,25 @@
# ⛔ APARCADA: el diagnóstico completo está más abajo, junto a `[deps]` (GTK3 **y** libsystemd, los # ⛔ APARCADA: el diagnóstico completo está más abajo, junto a `[deps]` (GTK3 **y** libsystemd, los
# dos incondicionales). Lo confirmado el 2026-08-07 no lo cambia; sólo añade que la granja seguía # dos incondicionales). Lo confirmado el 2026-08-07 no lo cambia; sólo añade que la granja seguía
# reintentándola, que es un problema de COLA, no de receta. # reintentándola, que es un problema de COLA, no de receta.
#
# ═══════════════════════════════════════════════════════════════════════════════════════════════
# ⛔ CERRADA POR DECISIÓN, 2026-08-08. NO REINTENTAR.
# ═══════════════════════════════════════════════════════════════════════════════════════════════
# El usuario decidió NO traer GTK3 al catálogo. Esta receta depende de él (ver el diagnóstico de
# abajo) ⇒ queda cerrada, no «en deuda». La diferencia importa: una deuda invita a reintentarla en
# cada informe; una decisión se respeta.
#
# POR QUÉ ES RAZONABLE, y no una rendición:
# · GNOME funciona sin esto. El camino vivo es mutter → gnome-shell, arrancado por arje; ninguno
# de los dos depende de gnome-session (su cierre es mutter+gjs+gobject-introspection+gnome-desktop).
# · Traer GTK3 sería una torre de C muerta —y para waybar, además, gtkmm, o sea sus bindings de
# C++— por un gestor de sesión y un login manager que este escritorio no necesita.
# · La función que aportaban está cubierta: la sesión la levanta arje, y la barra de estado es
# `yambar` en el frente wlr, que es C puro y ya está sellado.
#
# SE REABRE SI, Y SÓLO SI, alguien trae GTK3 por otro motivo con peso propio (una aplicación
# gráfica de terceros que lo exija). Entonces esto sale gratis; hoy no.
name = "gnome-session" name = "gnome-session"
version = "48.0" version = "48.0"
license = "GPL-2.0-or-later" license = "GPL-2.0-or-later"
@@ -30,6 +30,25 @@
# ⇒ No reintentar estas tres esperando que cambie algo. Se destraban el día que entre GTK3 (y para # ⇒ No reintentar estas tres esperando que cambie algo. Se destraban el día que entre GTK3 (y para
# gnome-settings-daemon, también X11), no antes. Es una decisión de alcance, no un fallo. # gnome-settings-daemon, también X11), no antes. Es una decisión de alcance, no un fallo.
#
# ═══════════════════════════════════════════════════════════════════════════════════════════════
# ⛔ CERRADA POR DECISIÓN, 2026-08-08. NO REINTENTAR.
# ═══════════════════════════════════════════════════════════════════════════════════════════════
# El usuario decidió NO traer GTK3 al catálogo. Esta receta depende de él (ver el diagnóstico de
# abajo) ⇒ queda cerrada, no «en deuda». La diferencia importa: una deuda invita a reintentarla en
# cada informe; una decisión se respeta.
#
# POR QUÉ ES RAZONABLE, y no una rendición:
# · GNOME funciona sin esto. El camino vivo es mutter → gnome-shell, arrancado por arje; ninguno
# de los dos depende de gnome-session (su cierre es mutter+gjs+gobject-introspection+gnome-desktop).
# · Traer GTK3 sería una torre de C muerta —y para waybar, además, gtkmm, o sea sus bindings de
# C++— por un gestor de sesión y un login manager que este escritorio no necesita.
# · La función que aportaban está cubierta: la sesión la levanta arje, y la barra de estado es
# `yambar` en el frente wlr, que es C puro y ya está sellado.
#
# SE REABRE SI, Y SÓLO SI, alguien trae GTK3 por otro motivo con peso propio (una aplicación
# gráfica de terceros que lo exija). Entonces esto sale gratis; hoy no.
name = "gnome-settings-daemon" name = "gnome-settings-daemon"
version = "48.1" version = "48.1"
license = "GPL-2.0-or-later" license = "GPL-2.0-or-later"
+11 -1
View File
@@ -48,19 +48,29 @@ queue=$(ls "$QUEUE"/*.toml 2>/dev/null || true)
# hash vigente de una receta está ahí, el hub ya la tiene y el worker se la salta. # hash vigente de una receta está ahí, el hub ya la tiene y el worker se la salta.
SELLADOS="${SELLADOS:-work/farm-sellados.txt}" SELLADOS="${SELLADOS:-work/farm-sellados.txt}"
if [ -s "$SELLADOS" ]; then if [ -s "$SELLADOS" ]; then
saltadas=0; filtrada="" saltadas=0; cerradas=0; filtrada=""
for f in $queue; do for f in $queue; do
# ⚠ EL NOMBRE DEL ARTEFACTO ES EL CAMPO `name` DE LA RECETA, NO EL DEL FICHERO. Son distintos en # ⚠ EL NOMBRE DEL ARTEFACTO ES EL CAMPO `name` DE LA RECETA, NO EL DEL FICHERO. Son distintos en
# 17 recetas del catálogo — el arquetipo es `recipes/incoming-kde/qtbase.toml`, cuyo `name` es # 17 recetas del catálogo — el arquetipo es `recipes/incoming-kde/qtbase.toml`, cuyo `name` es
# `qt6-qtbase`, y el artefacto en el store se llama `<hash>-qt6-qtbase`. Usar el basename daba # `qt6-qtbase`, y el artefacto en el store se llama `<hash>-qt6-qtbase`. Usar el basename daba
# «no sellada» para las 17 y las habría mandado a reconstruir: exactamente el desperdicio que # «no sellada» para las 17 y las habría mandado a reconstruir: exactamente el desperdicio que
# este filtro existe para evitar. (Lo tenía mal en la primera versión de este bloque.) # este filtro existe para evitar. (Lo tenía mal en la primera versión de este bloque.)
# ── RECETAS CERRADAS POR DECISIÓN: el marcador vive EN LA RECETA ─────────────────────────────
# Una receta puede estar sin sellar porque falta trabajo (deuda) o porque se decidió NO hacerla
# (alcance). La diferencia importa: la deuda invita a reintentar en cada ciclo; la decisión hay
# que respetarla, o la granja quema CPU para siempre en algo que nadie va a arreglar.
# El marcador va en la CABECERA DE LA RECETA, no en una lista aparte, justo para que no puedan
# desincronizarse: quien lee el porqué y quien decide saltarla miran el mismo texto.
if grep -q "CERRADA POR DECISIÓN" "$f" 2>/dev/null; then
cerradas=$((cerradas+1)); continue
fi
n=$(awk -F'"' '/^name[[:space:]]*=/{print $2; exit}' "$f") n=$(awk -F'"' '/^name[[:space:]]*=/{print $2; exit}' "$f")
[ -n "$n" ] || n=$(basename "$f" .toml) [ -n "$n" ] || n=$(basename "$f" .toml)
H=$("$HAMMER" --store "$STORE" hash "$f" 2>/dev/null | tail -1 | sed 's/^b3://') H=$("$HAMMER" --store "$STORE" hash "$f" 2>/dev/null | tail -1 | sed 's/^b3://')
if [ -n "$H" ] && grep -qx "$H-$n" "$SELLADOS"; then saltadas=$((saltadas+1)); continue; fi if [ -n "$H" ] && grep -qx "$H-$n" "$SELLADOS"; then saltadas=$((saltadas+1)); continue; fi
filtrada="$filtrada $f" filtrada="$filtrada $f"
done done
[ "$cerradas" -gt 0 ] && echo " ($cerradas CERRADAS por decisión — ver la cabecera de cada receta)"
[ "$saltadas" -gt 0 ] && echo " (saltadas $saltadas ya selladas en el hub — ver la nota del sync unidireccional)" [ "$saltadas" -gt 0 ] && echo " (saltadas $saltadas ya selladas en el hub — ver la nota del sync unidireccional)"
queue="$filtrada" queue="$filtrada"
[ -n "$(echo $queue)" ] || { echo "nada que hacer en $QUEUE: todo sellado en el hub"; exit 0; } [ -n "$(echo $queue)" ] || { echo "nada que hacer en $QUEUE: todo sellado en el hub"; exit 0; }