fix(distro): el muro de fcitx5 se derribó — dejarlo anotado ya es falso
`fcitx5` figuraba en `MUROS` como `corpus-estatico-sin-pic`, con 7365 errores de PIC medidos. Era cierto hasta que el operador decidió publicar `libpng`/`freetype`/`fontconfig` con `--with-pic`. Con eso **fcitx5 SELLA**: `daemon + 17 addon(s) de fábrica`, y el hash que el worker selló (`b3:8af6dbe9…`) es idéntico al que el hub calculaba. Se quita del campo en el mismo movimiento, porque **un muro derribado que sigue anotado es la misma clase de mentira que un hueco falso**: manda a alguien a no intentar algo que ya funciona. Hoy ya cometí la versión simétrica —anuncié como pendiente el `.conf` de los emoji que fontconfig ya traía— y el antídoto es el mismo: el campo se mantiene al día o no sirve. fcitx5 pasa a `tiene-sin-viajar`, que es la verdad: construido y en ningún perfil, porque el marco sin un motor de idioma daría una barra de IME que no convierte nada. ⚠ Y DE PASO, UN HUECO DE MI MÉTODO EN LA CASCADA, que el latido destapó: calculé los dependientes del trío **desde un solo grafo** (`build-state-kde.json`). Cada cola tiene el suyo, así que `escritorio-sway` quedó con 8 recetas de `incoming-wlr` en deuda (dunst, fuzzel, grim, slurp, sway, swaybg, swaylock, yambar) y la clausura bajó a **8 de 10** en vez de volver a 10. Medido después sobre los CINCO grafos: cosmic 2 · gnome 2 · kde 2 · **wlr 10** · corpus 2. Las ocho ya están encoladas. La regla: **una cascada se mide sobre todos los grafos, no sobre el del frente en que uno está trabajando** — es el mismo aviso que `grafo-estado-build` ya daba («build-state cubre el catálogo canónico, NO las colas incoming-*») leído al revés. Estado de la campaña: 36 artefactos traídos al hub con `traer-artefactos.sh`, GC de 13,3 G de superados (el `/store` estaba al 91 %), y 10 recetas pendientes de las que 2 están compilando. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
2 archivos · +9 −20
- docs/state/distro-huecos.json +0 −2
- scripts/censo-distro.py +9 −18
diff --git a/docs/state/distro-huecos.json b/docs/state/distro-huecos.json
index fcab75d1..71cd7c07 100644
--- a/docs/state/distro-huecos.json
+++ b/docs/state/distro-huecos.json
@@ -45,8 +45,6 @@
"items": [
{
"estado": "tiene-sin-viajar",
- "muro": "corpus-estatico-sin-pic",
- "muro_porque": "MEDIDO el 2026-10-19 construyéndolo cinco veces. La receta está escrita, el configure pasa limpio y el compilador termina: muere al ENLAZAR, con **7365** errores `relocation … recompile with -fPIC`. fcitx5 produce OCHO bibliotecas compartidas (libFcitx5Utils/Core/Config + los addons classicui, clipboard, dbus, dbusfrontend, emoji) porque sus métodos de entrada se cargan con dlopen; y este corpus es ESTÁTICO-PRIMERO Y SIN PIC, así que un `.a` del catálogo no entra en un `.so`. Dos se resolvieron en el camino —`libuv` PIC-ificado (radio 1) y `ENABLE_LIBUUID=Off` por el fallback del kernel (util-linux es radio 79)— y el tercero no se puede esquivar: `libpng16.a` + `libfreetype.a` + `libfontconfig.a` los pide `libclassicui.so`, que ES la barra de candidatos, o sea la interfaz del IME. ⇒ NO falta una receta: falta decidir si el trío de fuentes se publica con `--with-pic`. Coste medido: **40 recetas en la unión de sus dependientes transitivos** (no 133: se solapan) y las CINCO imágenes de escritorio rearman. Es la misma decisión que el operador tomó en NEGATIVO para `libpng` el 2026-08-21 —«es estático por diseño; eso es arquitectura del corpus»—, pero el contexto cambió: allá era para salvar UN `.so` que no se quería; acá desbloquea una capacidad entera y a cualquier app futura que necesite enlazar desde un `.so`.",
"nombre": "fcitx5",
"parientes": []
},
diff --git a/scripts/censo-distro.py b/scripts/censo-distro.py
index 815daa2c..3ce96909 100755
--- a/scripts/censo-distro.py
+++ b/scripts/censo-distro.py
@@ -183,24 +183,15 @@ CUBIERTOS = {
# censo mentía por omisión al contarlas juntas. Sólo entran acá los muros MEDIDOS, con el dato que
# los prueba; lo demás se queda sin anotar, que es más honesto que adivinar.
MUROS = {
- 'fcitx5': ('corpus-estatico-sin-pic',
- "MEDIDO el 2026-10-19 construyéndolo cinco veces. La receta está escrita, el "
- "configure pasa limpio y el compilador termina: muere al ENLAZAR, con **7365** "
- "errores `relocation … recompile with -fPIC`. fcitx5 produce OCHO bibliotecas "
- "compartidas (libFcitx5Utils/Core/Config + los addons classicui, clipboard, dbus, "
- "dbusfrontend, emoji) porque sus métodos de entrada se cargan con dlopen; y este "
- "corpus es ESTÁTICO-PRIMERO Y SIN PIC, así que un `.a` del catálogo no entra en un "
- "`.so`. Dos se resolvieron en el camino —`libuv` PIC-ificado (radio 1) y "
- "`ENABLE_LIBUUID=Off` por el fallback del kernel (util-linux es radio 79)— y el "
- "tercero no se puede esquivar: `libpng16.a` + `libfreetype.a` + `libfontconfig.a` "
- "los pide `libclassicui.so`, que ES la barra de candidatos, o sea la interfaz del "
- "IME. ⇒ NO falta una receta: falta decidir si el trío de fuentes se publica con "
- "`--with-pic`. Coste medido: **40 recetas en la unión de sus dependientes "
- "transitivos** (no 133: se solapan) y las CINCO imágenes de escritorio rearman. Es "
- "la misma decisión que el operador tomó en NEGATIVO para `libpng` el 2026-08-21 "
- "—«es estático por diseño; eso es arquitectura del corpus»—, pero el contexto "
- "cambió: allá era para salvar UN `.so` que no se quería; acá desbloquea una "
- "capacidad entera y a cualquier app futura que necesite enlazar desde un `.so`."),
+ # ✅ `fcitx5` ESTUVO ACÁ Y SE FUE: el muro se derribó el 2026-10-19/20. Decía
+ # `corpus-estatico-sin-pic` con 7365 errores de PIC medidos, y era cierto — hasta que el
+ # operador decidió publicar `libpng`/`freetype`/`fontconfig` con `--with-pic` (40 recetas de
+ # cascada, las 5 imágenes de escritorio). Con eso **fcitx5 SELLA**: daemon + 17 addons, mismo
+ # hash en el hub y en el worker. Se quita de `MUROS` en el mismo movimiento, porque un muro
+ # derribado que sigue anotado es exactamente la clase de pendiente inventado que este fichero
+ # existe para no producir — y hoy ya me pasó con el `.conf` de los emoji.
+ # ⇒ fcitx5 pasa a `tiene-sin-viajar`, que es la verdad: construido y en ningún perfil, porque
+ # el marco sin un motor de idioma daría una barra de IME que no convierte nada.
'kitty': ('sin-opengl-de-escritorio',
"setup.py:804 hace pkg_config('gl', '--libs') y data-types.h:25 exige OpenGL >= 3.x "
"core. Medido en el store: NADIE publica `gl.pc` ni `libGL.so` — mesa da egl.pc, "