🧮 cosmic: trazarle la yupana — el frente existía en el store y el ábaco no lo veía

Faltaba la mitad del método.  SÍ cruzaba incoming-cosmic (lo usé
antes de tocar libdisplay-info, pipewire y glib), pero la campaña no estaba en el
KHIPU: build-state.py sólo conocía --kde y --gnome, y targets.toml no declaraba
perfil.

Y eso no era cosmético. Antes de este commit,  decía
21 dependientes transitivos y dos imágenes; ahora dice 31 y TRES —
escritorio-cosmic entre ellas, con incoming-cosmic=10 en el reparto por cola. O
sea que el próximo que tocara libinput, libudev-zero o mesa habría MEDIDO DE
MENOS, que es exactamente el punto ciego que la metodología existe para cerrar.

Tres piezas:
- build-state.py --cosmic (y su build-state-cosmic.json).
- perfil.escritorio-cosmic en targets.toml, con las raíces que cosmic-session
  levanta MÁS los datos que ningún [deps] alcanza (iconos, xkb, fuentes, bash,
  dbus). Primera medición: 54/61 listo, faltan 7.
- el LATIDO lo regenera, por la misma razón por la que se le agregó GNOME en su
  momento: un frente que el cron no regenera envejece en silencio, y un grafo
  viejo miente con la misma cara que uno fresco.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-03 13:44:18 -04:00
co-authored by Claude Opus 5
parent fbf2498432
commit 570fd3747e
4 changed files with 14229 additions and 4 deletions
+10 -2
View File
@@ -56,8 +56,16 @@ KDE = "--kde" in sys.argv
# Enciende la CAPA GRAFO del yupana-gnome: sin esto el perfil escritorio-gnome se saltaba (cola no
# cargada) y `yupana keystones/drenar --perfil escritorio-gnome` no reckonaban. Sale a su JSON aparte.
GNOME = "--gnome" in sys.argv
EXTRA_QUEUES = (["recipes/incoming-kde"] if KDE else []) + (["recipes/incoming-gnome"] if GNOME else [])
_var = "-kde" if KDE else "-gnome" if GNOME else ""
# `--cosmic`: lo mismo para `recipes/incoming-cosmic/` (COSMIC de System76, 4º escritorio). Sin esto
# la campaña entera es INVISIBLE para el khipu: el latido regenera build-state{,-kde,-gnome}.json cada
# media hora y COSMIC no aparecería en ninguno, así que el avance no quedaría en el registro versionado
# que es `git log docs/state/`. Y —lo que importa más— `yupana radio` sobre una receta compartida
# (libinput, libxkbcommon, libudev-zero…) no reportaría la imagen COSMIC entre las afectadas, o sea que
# el próximo que la toque MEDIRÍA DE MENOS.
COSMIC = "--cosmic" in sys.argv
EXTRA_QUEUES = (["recipes/incoming-kde"] if KDE else []) + (["recipes/incoming-gnome"] if GNOME else []) \
+ (["recipes/incoming-cosmic"] if COSMIC else [])
_var = "-kde" if KDE else "-gnome" if GNOME else "-cosmic" if COSMIC else ""
OUT = ROOT / f"docs/state/build-state{_var}.json"
# Clase de la receta — sólo para colorear/agrupar la vista; heurística por contenido, no dato duro.
+5 -2
View File
@@ -5,7 +5,7 @@
# 1. SIEMBRA (sube): rsync de código + recetas laptop→worker (el laptop es canónico; si autoré
# recetas nuevas —p.ej. openrc— el worker las empieza a moler sin que yo intervenga).
# 2. RECOGE (baja): rsync del store sellado worker→laptop (CAS ⇒ merge seguro, sin conflicto).
# 3. Regenera el GRAFO DE ESTADO (build-state.json + build-state-kde.json) desde el store ya
# 3. Regenera el GRAFO DE ESTADO (build-state{,-kde,-gnome,-cosmic}.json) desde el store ya
# cosechado, y commitea SÓLO esos ficheros firmes. El `git log` de docs/state/ ES el avance
# que el humano ve y sigue (huecos, fallos, qué se selló entre dos ciclos).
#
@@ -134,6 +134,9 @@ if [ -x "$HAMMER" ]; then
# días (gobject-introspection, toda la onda 2). Un grafo viejo miente con la misma cara que uno
# fresco — por eso lo regenera el latido y no la mano.
scripts/build-state.py --gnome >/dev/null 2>&1 && echo " build-state-gnome.json ✓" || echo " ⚠ build-state.py --gnome falló"
# COSMIC (2026-08-03), por la MISMA razón por la que se agregó GNOME arriba: un frente que no
# regenera el latido envejece en silencio, y un grafo viejo miente con la misma cara que uno fresco.
scripts/build-state.py --cosmic >/dev/null 2>&1 && echo " build-state-cosmic.json ✓" || echo " ⚠ build-state.py --cosmic falló"
# Cola DERIVADA del grafo (P4): el orden de masticado por imagen, en ondas topológicas. No lanza
# ningún build — sólo deja escrito qué conviene moler primero, para que la cola deje de ser una
# lista escrita a mano. Barato (lee JSON, no hashea).
@@ -145,7 +148,7 @@ fi
# 4. Commitear SÓLO el estado firme (el avance que el humano sigue). Recetas nuevas que YO autoré se
# commitean aparte, a mano, para no meter autoría a medias en un commit de cron.
if [ "${NO_COMMIT:-}" != "1" ]; then
git add docs/state/build-state.json docs/state/build-state-kde.json docs/state/build-state-gnome.json docs/state/drenaje.json 2>/dev/null || true
git add docs/state/build-state.json docs/state/build-state-kde.json docs/state/build-state-gnome.json docs/state/build-state-cosmic.json docs/state/drenaje.json 2>/dev/null || true
if ! git diff --cached --quiet 2>/dev/null; then
git commit -q -m "estado: cosecha granja $(ts) — avance del árbol KDE" 2>/dev/null \
&& { git push -q origin main 2>/dev/null && echo "==> estado commiteado+pusheado" \