gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1346Shell 97Rust 63Markdown 571650 Definitions

triaje: los 170 candidatos de frontera clasificados, y la cadena se ejerce entera

Evidencia dura primero: NINGUNO de los 170 bloquea un build. Toda receta que
pide uno de estos ya está sellada al menos una vez ⇒ hammer construye sin
ninguno. Eso descarta empíricamente "hueco de build" para los 170 y deja sólo
la pregunta de runtime.

VEREDICTOS
  provisto  11 — no faltan: ya los da otra receta con otro nombre. nixpkgs parte
                 en varios paquetes lo que acá es uno solo. Verificado contra el
                 store: wayland-scanner→wayland, mesa-libgbm→mesa (nuestros tres
                 mesa producen libgbm.so.1), libxcb-*→xcb-util-*, poppler-qt6→
                 poppler, gmp-with-cxx→gmp, uname→coreutils.
  nix-ismo   5 — andamiaje de nixpkgs (env wrappers, helpers del stdenv, glibc
                 asomando por su libc).
  opcional 150 — software real que nixpkgs habilita y hammer no necesita, con el
                 porqué agrupado: systemd (usamos arje-zero), X11 heredado (el
                 escritorio es Wayland), Vulkan/shaders, audio/multimedia,
                 conectores de BD, tooling de docs/tests, bindings Python de Qt,
                 paquetería ajena (tenemos .swm).
  hueco      4 — gaps de RUNTIME, no de build: shared-mime-info (sin base MIME
                 no hay tipos de fichero), xwayland (ninguna app X11 corre),
                 polkit-qt-1 (sin diálogos de autorización), qqc2-breeze-style
                 (los controles QML caen a un estilo genérico).

CORRIGE UN ERROR MÍO DE P3: dije que mesa-libgbm/libglvnd eran "el muro de
GBM/EGL". Falso — libgbm ya lo produce nuestro mesa. El muro era softpipe vs
llvmpipe, no un paquete ausente.

CUARTO VEREDICTO NUEVO (`provisto`) con su propio lazo: sale a alias-triaje.txt
y seed-graph.py lo carga en MAPA ⇒ esos 11 nombres dejan de contarse como hueco
para siempre. Junto con nixismos-triaje.txt, el sembrador aprende de su triaje.

Y LA CADENA SE EJERCE ENTERA POR PRIMERA VEZ: los 4 huecos entraron como raíces
de escritorio-kde → nacieron 4 nodos `wanted` (raíces 11, sin receta 4; el grafo
sigue cerrando, --check exit 0) → seed-graph los sembró (42 aristas conocidas,
21 candidatos nuevos de frontera) → drenar.py los ordena marcándolos [semilla],
que es la regla de la fuente única a la vista. qqc2-breeze-style no cae en la
onda 1 porque sus deps SEMBRADAS la traban (kcodecs, kirigami…): el andamio
funcionando como se diseñó.

De paso: qtbase se selló mientras corría esto ⇒ la onda 1 de KDE se abrió de 1 a
13 recetas. El cuello de botella que reportó P4 ya está destrabado.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

9b67268a6507c692abbeb41932485c003ad1b330 · by sergio · (3 months ago) · parent ec28a9b39 · browse the tree at this commit

Semantic delta · 3

scripts/triaje.py

9 files · +1125 −761

diff --git a/docs/state/alias-triaje.txt b/docs/state/alias-triaje.txt
new file mode 100644
index 00000000..7c8dea58
--- /dev/null
+++ b/docs/state/alias-triaje.txt
@@ -0,0 +1,14 @@
+# alias-triaje.txt — DERIVADO de frontera-triaje.toml por scripts/triaje.py --aplicar.
+# `<nombre-en-nixpkgs> <receta-de-hammer-que-lo-provee>`. Lo lee seed-graph.py como MAPA:
+# nixpkgs parte en varios paquetes lo que acá es uno solo.
+gmp-with-cxx gmp
+libxcb-cursor xcb-util-cursor
+libxcb-image xcb-util-image
+libxcb-keysyms xcb-util-keysyms
+libxcb-render-util xcb-util-renderutil
+libxcb-util xcb-util
+libxcb-wm xcb-util-wm
+mesa-libgbm mesa
+poppler-qt6 poppler
+uname coreutils
+wayland-scanner wayland
diff --git a/docs/state/build-state-kde.json b/docs/state/build-state-kde.json
index 4134897c..84a8aca5 100644
--- a/docs/state/build-state-kde.json
+++ b/docs/state/build-state-kde.json
@@ -2,32 +2,35 @@
  "schema": "hammer-build-state/1",
  "totals": {
   "recipes": 961,
-  "nodes": 961,
-  "sealed": 831,
-  "debt": 128,
-  "never": 2
+  "nodes": 965,
+  "sealed": 837,
+  "debt": 122,
+  "never": 2,
+  "wanted": 4
  },
  "by_class": {
   "c": 331,
   "go": 362,
   "gui": 36,
   "kernel": 6,
-  "rust": 226
+  "rust": 226,
+  "wanted": 4
  },
  "debt_by_class": {
-  "c": 119,
-  "gui": 10,
+  "c": 115,
+  "gui": 8,
   "rust": 1
  },
  "by_queue": {
   "corpus": {
-   "sealed": 744,
-   "debt": 10,
+   "sealed": 746,
+   "debt": 8,
    "never": 2
   },
   "incoming-kde": {
-   "sealed": 87,
-   "debt": 118
+   "sealed": 91,
+   "debt": 114,
+   "wanted": 4
   }
  },
  "by_profile": {
@@ -42,10 +45,11 @@
    "sealed": 74
   },
   "escritorio-kde": {
-   "raices": 7,
-   "clausura": 162,
-   "debt": 77,
-   "sealed": 85
+   "raices": 11,
+   "clausura": 166,
+   "debt": 73,
+   "sealed": 89,
+   "wanted": 4
   },
   "escritorio-mirada": {
    "raices": 14,
@@ -597,8 +601,6 @@
    "hash": "b3:b6cd757c897ca6405b7809864ca349e1110ce8bcfa4f2db38914b7678baf3869",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "kconfig",
     "kcrash",
@@ -751,10 +753,7 @@
    "queue": "incoming-kde",
    "hash": "b3:f50c26ef9fc7555edd5160d7d087346fef2e2369fd7f4e5e252c820ba6183eae",
    "state": "debt",
-   "blocked_by": [
-    "qtbase",
-    "qttools"
-   ],
+   "blocked_by": [],
    "unblocks": 31,
    "perfiles": [
     "escritorio-kde"
@@ -1137,9 +1136,7 @@
    "hash": "b3:288e91f1e6032321173a4318517def2cbc515ded9b0a6487fe2e0fe26485f37b",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative",
-    "qtsvg",
     "frameworkintegration",
     "kdecoration",
     "libplasma",
@@ -1205,9 +1202,7 @@
    "queue": "incoming-kde",
    "hash": "b3:4b114196570afca85c35140c299e3d3e4dc34488c88f17e9ca1273a193d48656",
    "state": "debt",
-   "blocked_by": [
-    "qtbase"
-   ],
+   "blocked_by": [],
    "unblocks": 0,
    "perfiles": []
   },
@@ -2325,7 +2320,7 @@
    "hash": "b3:834132e74489384df3f263e9eba37da186628fb01aa23280348e6159eb151074",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 119,
+   "unblocks": 115,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -2812,7 +2807,7 @@
    "hash": "b3:f38c5ee3622b80a5632b8d863adfee2e34312ff7757251d3faa830499439c3a8",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 110,
+   "unblocks": 108,
    "perfiles": [
     "base",
     "cli",
@@ -3187,8 +3182,6 @@
    "hash": "b3:d99394b84391970e6c39a2d529d45f726669946b58c660275fbde623fcc09e5b",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "qt5compat",
     "kcmutils",
@@ -3690,7 +3683,7 @@
    "hash": "b3:e6990b3e555f0c54b085cb6e49672ac38f6d8700b4a8afe7688c69962a5fa542",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 13,
+   "unblocks": 11,
    "perfiles": [
     "base",
     "cli",
@@ -3801,10 +3794,10 @@
    ],
    "cls": "gui",
    "queue": "corpus",
-   "hash": "b3:0b2c1d9742a5ef9136461a4c8c7161e49f4760f18a88da24e2cc518ea6136532",
-   "state": "debt",
+   "hash": "b3:806b3f7ea179e0d866b6650b854d89506c5e77a4fb48026aab2de95bb9996ecc",
+   "state": "sealed",
    "blocked_by": [],
-   "unblocks": 1,
+   "unblocks": 0,
    "perfiles": []
   },
   "fclones": {
@@ -3989,8 +3982,6 @@
    "hash": "b3:b08a36f55eb1244d0118e631e387ba03c29c307522243acf2f05602d2ac9f378",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "kio",
     "ki18n",
@@ -4112,7 +4103,7 @@
    "hash": "b3:b6957a16be9a666c0698855a55a63ac98ea3e473a250705af5cc4029f0674814",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 12,
+   "unblocks": 10,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -4168,11 +4159,9 @@
    ],
    "cls": "gui",
    "queue": "corpus",
-   "hash": "b3:1c0c61d6303bcb64914ab6e79217b016693732bd3c0efaaa67c341c68cd388ce",
-   "state": "debt",
-   "blocked_by": [
-    "fcft"
-   ],
+   "hash": "b3:4c5c1af08bb2d9e65e389d6c22313c333977f7c80d17337e0d40bcd857b88dc2",
+   "state": "sealed",
+   "blocked_by": [],
    "unblocks": 0,
    "perfiles": []
   },
@@ -4276,7 +4265,6 @@
    "hash": "b3:cefb2c6f9c27443b4ba02157b5645b88c81909c2bae3439254557f2c70b226e3",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative",
     "kconfig",
     "kconfigwidgets",
@@ -4329,7 +4317,7 @@
    "hash": "b3:26df6ca03d8e528d1d2865aabf19217128571e01a05fd9b008625e3558fec8e4",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 12,
+   "unblocks": 10,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -6114,10 +6102,7 @@
    "hash": "b3:cbccbdd4103099ad2461a0c8b114dae1ff1bf82247dc8eeafb415df9ddd1b38e",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtsvg",
     "qtwayland",
-    "qttools",
     "qtdeclarative",
     "phonon",
     "kio",
@@ -6285,7 +6270,7 @@
    "hash": "b3:05322806ed0f6aafc6737d47b8a741e66e78216c43be478e338661fad9b90e9d",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 6,
+   "unblocks": 4,
    "perfiles": []
   },
   "hcl2json": {
@@ -7171,8 +7156,6 @@
    "hash": "b3:320a574d339acf5b57ea04d6277c08ca8742979f2eaf620ac1efe1edbcd80cff",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "plasma-activities",
     "kcoreaddons",
@@ -7259,10 +7242,7 @@
    "queue": "incoming-kde",
    "hash": "b3:3425b6034496b5dd43a27eb387e9fb79cd4b27fd2400f9fe086ba88bb4673599",
    "state": "debt",
-   "blocked_by": [
-    "qtbase",
-    "qttools"
-   ],
+   "blocked_by": [],
    "unblocks": 43,
    "perfiles": [
     "escritorio-kde"
@@ -7367,8 +7347,6 @@
    "hash": "b3:4759c37d7ce97cceab9573101650e7f095b0a272f70bef21a151ba8322fc9d5a",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "qt5compat",
     "ktexteditor",
@@ -7440,8 +7418,6 @@
    "hash": "b3:e396d2ddce4074f5ece667486ec61196c6c119a739585150de1210dba678b6b8",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kcoreaddons"
    ],
    "unblocks": 26,
@@ -7515,8 +7491,6 @@
    "hash": "b3:f8c6d7ae16a39d01d4822dd149d995b2ed464ea789730f2a0b24f025260c591a",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kconfig",
     "kcoreaddons",
     "kwidgetsaddons",
@@ -7609,8 +7583,6 @@
    "hash": "b3:879e9c1a640a997946acf3621bfec0b3807b2abc06d1bf0990d178a729a08b74",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "kcoreaddons",
     "kconfig",
@@ -7703,8 +7675,6 @@
    "hash": "b3:6f4e881a0af67a9e4c940bda7eccf9779eca07160310c5fc91f519a6daa88271",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "kbookmarks",
     "kiconthemes",
@@ -7798,10 +7768,7 @@
    "hash": "b3:3923ddbc35f8001b3cde0479930425bc8318cd320d884f4e9c9529fda54c0ff5",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
-    "qtsvg",
     "kio",
     "kbookmarks",
     "kcompletion",
@@ -7853,10 +7820,7 @@
    "queue": "incoming-kde",
    "hash": "b3:ee2c6ea634282f8237ea323e76d86d95dd649b29901744dcebd6f185ce3de462",
    "state": "debt",
-   "blocked_by": [
-    "qtbase",
-    "qttools"
-   ],
+   "blocked_by": [],
    "unblocks": 49,
    "perfiles": [
     "escritorio-kde"
@@ -7892,8 +7856,6 @@
    "hash": "b3:e6069590628c280403909622370c6f5f26a6c437dc96b3270eeb430474b2acae",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "kconfig",
     "kguiaddons",
@@ -7934,8 +7896,6 @@
    "hash": "b3:a7df0a23efacf6978b1cf431482f01679c92655cd86a7c63a09704c94c1f5af2",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kconfig",
     "kwidgetsaddons",
     "kcoreaddons",
@@ -7972,8 +7932,6 @@
    "hash": "b3:12cd9f27c66dc38dfe8f94137453adaa9062261a54fb5ff785ac95d803bffb0b",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 62,
@@ -8014,8 +7972,6 @@
    "hash": "b3:3384430aef6d3223df32322556789a5b506b0a97879473b77800840973d09fd0",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kconfig",
     "kcodecs",
     "kguiaddons",
@@ -8056,8 +8012,6 @@
    "hash": "b3:538718254539f14bf329ead04943b82c2c1e739a8bd2c615017bf54624876de5",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 69,
@@ -8090,8 +8044,6 @@
    "hash": "b3:b1ff1f187f407f9b13e6891bcb2e8e1346cc51b3a1ede0e6aacdc4e59c3e4aa7",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kcoreaddons"
    ],
    "unblocks": 41,
@@ -8122,10 +8074,7 @@
    "queue": "incoming-kde",
    "hash": "b3:63575f0c5167e033973871cbfd8c676e3e82a4b0432ebda8fde536c6f1f7f0e9",
    "state": "debt",
-   "blocked_by": [
-    "qtbase",
-    "qttools"
-   ],
+   "blocked_by": [],
    "unblocks": 35,
    "perfiles": [
     "escritorio-kde"
@@ -8169,10 +8118,7 @@
    "hash": "b3:36a34b4dff2e07b9c2784920db816800af97b2fe435df917fba015e33ec4a1a1",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
-    "qtshadertools",
     "ki18n",
     "kconfig",
     "kguiaddons",
@@ -8218,8 +8164,6 @@
    "hash": "b3:8cbb1ac191dd9490eba55ac5a95fcdec3d8a052508feb8ffc8665b4df4a5c202",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "ki18n",
     "kcoreaddons",
     "kcodecs"
@@ -8262,8 +8206,6 @@
    "hash": "b3:8638eea712bf7938b5bcd3d3adb159e3549d5b3ad4022392447d2e22fac513ef",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kconfig",
     "kcoreaddons",
     "kcrash",
@@ -8350,8 +8292,6 @@
    "hash": "b3:29f227db64256202582b2763d47bd2cdeef80505b4850b0b3a9579a33aa102e6",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "kio",
     "kcmutils",
@@ -8411,10 +8351,7 @@
    "queue": "incoming-kde",
    "hash": "b3:eea65e82ead0e4b1b12aeeaec45dcaa92dcecfa289c8341b23ca22b0b4a0e46e",
    "state": "debt",
-   "blocked_by": [
-    "qtbase",
-    "qttools"
-   ],
+   "blocked_by": [],
    "unblocks": 14,
    "perfiles": [
     "escritorio-kde"
@@ -8454,8 +8391,6 @@
    "hash": "b3:005fc4fce4aa4fc0583b34cac12d6b9964886f808f58bd15cc0d5b28731901c3",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kcoreaddons",
     "ki18n",
     "kcodecs",
@@ -8541,8 +8476,6 @@
    "hash": "b3:64c1d2de166c0fa5424152117bffd195776c957fbddf65b980e37cfec951bc5a",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "qt5compat",
     "karchive",
@@ -8600,10 +8533,7 @@
    "queue": "incoming-kde",
    "hash": "b3:3f0668bdb53f4487afc54e2a2b437437ae43b7e7274d2a777b2abaf72a935746",
    "state": "debt",
-   "blocked_by": [
-    "qtbase",
-    "qttools"
-   ],
+   "blocked_by": [],
    "unblocks": 36,
    "perfiles": [
     "escritorio-kde"
@@ -8677,10 +8607,7 @@
    "hash": "b3:84c76fc91bd60c8b0bd5bfea95b64f1b6f10f73eca0d300f8463e5e2c4b17a44",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
-    "qtshadertools",
     "qtlanguageserver",
     "kconfig",
     "kcoreaddons",
@@ -8743,8 +8670,6 @@
    "hash": "b3:f415121f7ce23a3642b721cad1f6a6d23f3c0b873dded66008ac6ea7d82c4c75",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 47,
@@ -8779,9 +8704,7 @@
    "hash": "b3:0af75aeb914440c9aae534450ac5174b235b9f961da9d2fcd94290e525d58734",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtdeclarative",
-    "qttools"
+    "qtdeclarative"
    ],
    "unblocks": 5,
    "perfiles": [
@@ -8814,8 +8737,6 @@
    "hash": "b3:0d000207d573c20b72315bc9915031b3ae196ee94b5fdd6b139f18b339de973e",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 61,
@@ -8870,10 +8791,7 @@
    "hash": "b3:272d6f1edc8da63ab7f6c85c5eb00384189c1bb4f1c2e9928e9168a606dd2571",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
-    "qtsvg",
     "karchive",
     "ki18n",
     "kwidgetsaddons",
@@ -8922,8 +8840,6 @@
    "hash": "b3:427adae68216f4bf67101f546d3d14e5b25ab7aa8f7db1b3f97369645fa5ec77",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtwayland"
    ],
    "unblocks": 6,
@@ -9027,9 +8943,6 @@
    "hash": "b3:0c6f555332c649328312a5abee1d11ce65347e2f50ff51c003f8c872ebe2d9ab",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtsvg",
-    "qttools",
     "qtdeclarative",
     "kcmutils",
     "kdeclarative",
@@ -9135,10 +9048,7 @@
    "hash": "b3:27e32762094c8e396d6ce6c327a7a323531ede9f7d5c59606d16b848513dd769",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
-    "qtsvg",
     "kcoreaddons",
     "kcodecs",
     "kconfig",
@@ -9197,11 +9107,7 @@
    "hash": "b3:4b7327e09012415b11162bc0de893a4db67663a94e08aaf11ea9cffddbc9a55d",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
-    "qtdeclarative",
-    "qtsvg",
-    "qtshadertools"
+    "qtdeclarative"
    ],
    "unblocks": 34,
    "perfiles": [
@@ -9242,10 +9148,7 @@
    "hash": "b3:c95d0434ad0610c3a78f728cd9a237967eb9963a74273e3d8d3c7589f737ab51",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
-    "qtsvg",
     "kirigami",
     "kcoreaddons",
     "kconfig",
@@ -9282,8 +9185,6 @@
    "hash": "b3:f0f80c05ad778612ba576ce96b39ce57665d64043a2873f8d4341b0e25ba7e3e",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 15,
@@ -9314,10 +9215,7 @@
    "queue": "incoming-kde",
    "hash": "b3:764c05cfc850555cee9d5a2b5d183db5a317867a7a77166257ce502683250756",
    "state": "debt",
-   "blocked_by": [
-    "qtbase",
-    "qttools"
-   ],
+   "blocked_by": [],
    "unblocks": 40,
    "perfiles": [
     "escritorio-kde"
@@ -9367,8 +9265,6 @@
    "hash": "b3:2af451cecf7d2f294d7e8a30796a838257c1c1321b7b92e29c0395ef61e6415a",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kcoreaddons",
     "kwidgetsaddons",
     "kwindowsystem",
@@ -9468,9 +9364,6 @@
    "hash": "b3:8a663eef9706ca2af90fe3ab1a4faa36b309182fe4f5dbb66c8a14046ab710df",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtsvg",
-    "qttools",
     "qtdeclarative",
     "kdbusaddons",
     "kiconthemes",
@@ -9576,11 +9469,7 @@
    "hash": "b3:a76994a1ca933dc4af98bd6ccab20baafeb746a208a1578fbca1d1d32618e7d5",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
-    "qtsvg",
-    "qtshadertools",
     "karchive",
     "kconfig",
     "kcoreaddons",
@@ -9628,9 +9517,7 @@
    "hash": "b3:7afb85e71952b9fe1b7e3ea1b22564683225754ad928c3eaea6b8ec15613a329",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative",
-    "qttools",
     "qtpositioning",
     "kholidays",
     "ki18n",
@@ -9671,8 +9558,6 @@
    "hash": "b3:8eb13ffe23f4ce9981f6926a82f5f2578c299b63022ba42a445d418ea66c2fe7",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "kconfig",
     "kcoreaddons",
@@ -9753,8 +9638,6 @@
    "hash": "b3:baf68d16fde4eec68e6f0e12ac4f0df104f74b01ec57656ad3f474fb470eae92",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "qtmultimedia",
     "kcompletion",
@@ -9914,8 +9797,6 @@
    "hash": "b3:145ed3406b09f0549ad474f0a21335701fc5207c749eb5d88c5fa7894e0bdc92",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "qt5compat",
     "qtmultimedia",
@@ -10024,8 +9905,6 @@
    "hash": "b3:ebbb85f2947b4b21f4d52913d13b7abc19eac3ab93b8dd331e1244537b2def92",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "karchive",
     "ki18n",
@@ -10102,10 +9981,7 @@
    "hash": "b3:75a0c09a7ef00249064dec1c88897a3f3c1544f580410972a3a1e9ea5c7aa687",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
-    "qtsvg",
     "kio",
     "kbookmarks",
     "kcompletion",
@@ -10196,8 +10072,6 @@
    "hash": "b3:f20bce816bdaded8d6dcebbe5776e125dcf2094fb5be966d30bf03dd8d32cb4e",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtwayland",
     "qtdeclarative",
     "ki18n",
@@ -10230,10 +10104,7 @@
    "queue": "incoming-kde",
    "hash": "b3:b7120529cb35e97436fad19a14a84c1858ae69c3923a1f6350b91c806bd47073",
    "state": "debt",
-   "blocked_by": [
-    "qtbase",
-    "qttools"
-   ],
+   "blocked_by": [],
    "unblocks": 3,
    "perfiles": [
     "escritorio-kde"
@@ -10278,8 +10149,6 @@
    "hash": "b3:7e5a3b88ead87c1f2c8f28deeb2eb3454061b2bcf010f7018a701c50c87766e1",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kcoreaddons",
     "ki18n"
    ],
@@ -10315,10 +10184,7 @@
    "hash": "b3:e8dd70f87218d3c35da520ad3e90a8276d835872044e62d7c0b8c3cd3ff3aad2",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
-    "qtshadertools",
     "ki18n",
     "kcoreaddons"
    ],
@@ -10356,8 +10222,6 @@
    "hash": "b3:fd47ee35dd77496717e9d24d9394e77a4932392cabe7e895ff9fc1e8809b465a",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "kirigami",
     "kconfig",
@@ -10451,8 +10315,6 @@
    "hash": "b3:1a56f3867c9bd734ed40b8ea53f9df0573cb791f392cf07227e8a99c6cabe91d",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "knotifications",
     "kstatusnotifieritem",
@@ -10526,8 +10388,6 @@
    "hash": "b3:28bbbd6b278930a3710d28b8bcde65f264a80b89cfad536fc56f4cbe38b858b8",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "kconfig",
     "kcoreaddons",
@@ -10622,9 +10482,6 @@
    "hash": "b3:ce85569f0d915a2b8878d487b3642d2a0928dc5f58f081a221a587ef614b6b46",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtsvg",
-    "qttools",
     "qtdeclarative",
     "qtwayland",
     "kitemmodels",
@@ -10758,10 +10615,7 @@
    "hash": "b3:2b7baa13bbed433fe90ac5557539249917bad71b8c8beaaa4378af4aff96dd7a",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative",
-    "qtsvg",
-    "qttools",
     "layer-shell-qt",
     "libkscreen",
     "kcrash",
@@ -10838,8 +10692,6 @@
    "hash": "b3:8592b5f17786a6331c8ee197d5b9923ba78b1d7fdb4d8ad635a33a572aa0a598",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kconfig",
     "kcoreaddons",
     "ki18n",
@@ -10887,8 +10739,6 @@
    "hash": "b3:e4b4cc8a434acdc3d1a7c3fe695bb1245be31188092e1382f76182076c58c17b",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kwindowsystem",
     "kconfig",
     "kcoreaddons"
@@ -10937,11 +10787,7 @@
    "hash": "b3:f004e41e590c978c7038ba4bec9203dfce6af93b85ea374a053107c4b8a414de",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
-    "qtsvg",
-    "qtshadertools",
     "qtlanguageserver",
     "karchive",
     "kconfig",
@@ -11031,10 +10877,7 @@
    "hash": "b3:0e5a6003f224eb39a46dd442cc41cf38b445c6ed9fd6ae4472c6fa9df20c343d",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
-    "qtsvg",
     "kio",
     "kparts",
     "karchive",
@@ -11103,8 +10946,6 @@
    "hash": "b3:262415277de45bafa4dad7023735d420b5cd99048982cbd030ccf3df7706452d",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "sonnet",
     "kcompletion",
     "kconfig",
@@ -11429,8 +11270,6 @@
    "hash": "b3:bd9398102dee0bd32704c373ce45da7f30b5489860afac830097a4068bcda225",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "ki18n"
    ],
    "unblocks": 1,
@@ -11487,8 +11326,6 @@
    "hash": "b3:4244a3c7310f17fa81de06f475257c6a2180fa76f9b4f9e5366a995eb6bbbe43",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kconfig",
     "kwindowsystem",
     "kcoreaddons",
@@ -11578,8 +11415,6 @@
    "hash": "b3:1d1168edf187bc498998a97adef528f62a7d61c639a72058925c132d2fca0189",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "kwallet",
     "kcmutils",
@@ -11645,8 +11480,6 @@
    "hash": "b3:861fa8a83312c90f8a34b8dcc4b6ae55caca06904b446bd4a335883cc0227e16",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtwayland"
    ],
    "unblocks": 7,
@@ -11679,8 +11512,6 @@
    "hash": "b3:22d0c9661992179c4d45fb403027e0dcc67fe881983e7129c78548f0e75b90a5",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 51,
@@ -11801,11 +11632,8 @@
    "hash": "b3:edd0b6e14d5fd273ea17ea8fe02ceb1706f20a3a28c54423cb3870329552851e",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative",
-    "qtsvg",
     "qt5compat",
-    "qttools",
     "qtwayland",
     "kwayland",
     "kauth",
@@ -11900,8 +11728,6 @@
    "hash": "b3:dcda56e2498976ed772b5d4f6e1185ab49e46ab7b21ec4e317847eb28ef633b5",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 46,
@@ -11949,8 +11775,6 @@
    "hash": "b3:f649d406f91aa4593d3827d673a7a17e6e211a91da9bed1d9f057a1817c76891",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kglobalaccel",
     "kcoreaddons",
     "kitemviews",
@@ -12031,10 +11855,8 @@
    "hash": "b3:af7a569b38fef55e0359630d24871cfcd82586a3572695b403ff2be57ac99386",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative",
-    "qtwayland",
-    "qttools"
+    "qtwayland"
    ],
    "unblocks": 5,
    "perfiles": [
@@ -12288,7 +12110,7 @@
    "hash": "b3:6fa786e3df5d1d022b652315ecf56a63d947b6d0859ea0ef87356839694a910e",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 49,
+   "unblocks": 48,
    "perfiles": [
     "escritorio-kde",
     "escritorio-mirada"
@@ -12309,7 +12131,7 @@
    "hash": "b3:32ec484dc2f6d938516d02b4161085a4909fbd0901bd297d68bc975e2d616ea8",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 48,
+   "unblocks": 47,
    "perfiles": [
     "escritorio-kde",
     "escritorio-mirada"
@@ -12357,7 +12179,7 @@
    "hash": "b3:a24fb883a4122260e04499121c7ab74837168a68195f3a3a4dbe5a323c5d4e93",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 48,
+   "unblocks": 47,
    "perfiles": [
     "escritorio-kde",
     "escritorio-mirada"
@@ -12383,7 +12205,7 @@
    "hash": "b3:737d2c993a69836a3a6c58e201b24adfbbe8a5af9c3e7edd24b5f7b828e574a1",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 44,
+   "unblocks": 43,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -12408,7 +12230,7 @@
    "hash": "b3:a0d7aa3209f02feb311ed7aff6366ce7a375ca97f76c839e2500c91c2ed901b4",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 45,
+   "unblocks": 44,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -12435,7 +12257,7 @@
    "hash": "b3:5d1222f99d83574bb2a9d8dc30b2b80512b5521f54378c09375b621c2f8026fd",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 44,
+   "unblocks": 43,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -12460,7 +12282,7 @@
    "hash": "b3:777a89636f687387afe39c56407324e0f720b2c47ac97e6ca2452f52828abbbf",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 45,
+   "unblocks": 44,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -12663,7 +12485,7 @@
    "hash": "b3:62525e34e17993ad51369c816c96ef4ca812184998b31fe98dc1f3f0778b436b",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 121,
+   "unblocks": 118,
    "perfiles": [
     "escritorio-kde",
     "escritorio-mirada"
@@ -12740,7 +12562,7 @@
    "hash": "b3:2f6d62862c9978c79a5fc593625e110c6947475b8a6a600efa2c95b83033a6b1",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 15,
+   "unblocks": 14,
    "perfiles": [
     "escritorio-kde",
     "escritorio-mirada"
@@ -12903,8 +12725,6 @@
    "hash": "b3:077489d6aaf8e4e7e724dce8a8760c31289891afb9af3d6e52e0af9e05e3e84a",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtwayland",
     "kwayland",
     "kconfig",
@@ -12977,8 +12797,6 @@
    "hash": "b3:4d45686bae899c395a804334a4540d8d3e5ff4429c080edd891dc25ee6f74d77",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "kcoreaddons",
     "kconfig",
@@ -13161,11 +12979,7 @@
    "hash": "b3:34af89045b2df9072d404a2705494b4ff56c18fac5c0cdca9438838bd85e9db5",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
-    "qtsvg",
-    "qtshadertools",
     "qtlanguageserver",
     "kconfig",
     "kcoreaddons",
@@ -13219,7 +13033,7 @@
    "hash": "b3:f65887051274b7babcdd52f286ea5cdfe52e5ef8be2915bd0289990a076b987f",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 6,
+   "unblocks": 4,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -13525,7 +13339,7 @@
    "hash": "b3:b8775e5666194db606fbee24c595420a20d76687080dfb55979c60b70507907b",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 49,
+   "unblocks": 48,
    "perfiles": [
     "escritorio-kde",
     "escritorio-mirada"
@@ -13574,7 +13388,7 @@
    "hash": "b3:32fd9050bc28fc0d4b9e58e412527d9258d9a35cc2518f4968d50b3db79cdf0d",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 120,
+   "unblocks": 115,
    "perfiles": [
     "escritorio-kde",
     "escritorio-mirada"
@@ -13734,7 +13548,7 @@
    "hash": "b3:3aa094197e0cc25aed056d21176313bb7cf4280d62b59ef3373aada844c795ca",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 2,
+   "unblocks": 0,
    "perfiles": [
     "base",
     "cli",
@@ -14233,7 +14047,7 @@
    "hash": "b3:6d443d9fdc833adbd0736ad52b51befdaa44902091932cc2cf23211974d050ab",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 120,
+   "unblocks": 116,
    "perfiles": [
     "escritorio-kde",
     "escritorio-mirada"
@@ -14315,7 +14129,7 @@
    "hash": "b3:b45037ebba3fdbf0361ef0fcc61dee5c9795b08c1ea4a0231aafc7dc45bdaf85",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 4,
+   "unblocks": 2,
    "perfiles": [
     "base",
     "cli",
@@ -14443,7 +14257,7 @@
    ],
    "cls": "gui",
    "queue": "corpus",
-   "hash": "b3:94854efd082763691e05370dd22116d724137d942401b0a94f8991ebc1a0e604",
+   "hash": "b3:0776e4d72dd7cdda7c8f821e5536022ca486453c8fc280f25cd13ed1081c957c",
    "state": "debt",
    "blocked_by": [],
    "unblocks": 0,
@@ -14616,8 +14430,6 @@
    "hash": "b3:ab325acd6a3fcaa4ca35c067675e930e9a6f188f17f6e393f8624de355d18693",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 1,
@@ -14893,7 +14705,7 @@
    "hash": "b3:a3be97622d20cd8d831a25403e00eccb23f2585ed78670a4e12d6cbe519fb8ec",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 1,
+   "unblocks": 0,
    "perfiles": [
     "base",
     "cli"
@@ -15023,8 +14835,6 @@
    "hash": "b3:79eb03aa5c3f09c68d9eff5272032faa7140366f218eef012ca6a7e647802dfd",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 1,
@@ -15322,9 +15132,6 @@
    "hash": "b3:531dd83c000a5e69ef68534ca5eb47604c0cd1d8f6f2c03fee6444e312f8be69",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtsvg",
-    "qttools",
     "qtdeclarative",
     "poppler",
     "phonon",
@@ -15483,7 +15290,7 @@
    "hash": "b3:21ada3369d626500e40259c8e05b096457b4da33da750e50144f0c75ecdab836",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 22,
+   "unblocks": 21,
    "perfiles": [
     "base",
     "cli",
@@ -15772,7 +15579,7 @@
    "hash": "b3:06ad7580fd1d61db1822a5682dc0a9cef359329e4b4cf6bfa6c6dc507973f47d",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 5,
+   "unblocks": 4,
    "perfiles": [
     "base",
     "cli",
@@ -15922,8 +15729,6 @@
    "hash": "b3:c9ce5678bd469afe6c080867ad442bf2b890e26ba3f8219c72ef55d523af5715",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qt5compat"
    ],
    "unblocks": 2,
@@ -16036,7 +15841,7 @@
    "hash": "b3:b86203bd3076ae913fe38fc27e27b3a27de6746a8dc0f870891823093c884248",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 10,
+   "unblocks": 8,
    "perfiles": [
     "escritorio-kde",
     "escritorio-mirada"
@@ -16053,7 +15858,7 @@
    "hash": "b3:f0b5d0b1cb4321b3c61f24a871b9a58da3ebb7eb903af4015e35bd41a6465437",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 128,
+   "unblocks": 122,
    "perfiles": [
     "base",
     "cli",
@@ -16093,10 +15898,7 @@
    "hash": "b3:bff6cab8b543b80ee7ab671329760d1556fd2e4f0ec4f5f6c4f632a05a4d3d0a",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
-    "qtshadertools",
     "qtlanguageserver",
     "kconfig",
     "kcoreaddons",
@@ -16136,8 +15938,6 @@
    "hash": "b3:cdc18b11a90b3bfecd8b5a4a2e59c16fae8c4037d765a8b1fb7d4bdce2e37f2f",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "kconfig",
     "kcoreaddons",
     "plasma-activities",
@@ -16274,12 +16074,8 @@
    "hash": "b3:37cb7d1bb0f44848762c05cce5d79f0d555b92a26afc7c88e47a66c7bd2b4741",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative",
-    "qtsvg",
-    "qtshadertools",
     "qtwayland",
-    "qttools",
     "kded",
     "krunner",
     "ktexteditor",
@@ -16431,11 +16227,8 @@
    "hash": "b3:93afff1d2093daa9a97266a15c6fc5859a75b562b4ffc1026d90be757927b5b5",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative",
-    "qtsvg",
     "qtwayland",
-    "qttools",
     "frameworkintegration",
     "breeze",
     "kirigami",
@@ -16567,9 +16360,6 @@
    "hash": "b3:8c842ea595f1ad2b07ecca7b396f14ba0bdbc842bbeb39d7b01946c6070a6656",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtsvg",
-    "qttools",
     "qtdeclarative",
     "networkmanager-qt",
     "modemmanager-qt",
@@ -16703,9 +16493,6 @@
    "hash": "b3:e3d8fc7a156c2cac5032c301dd1ca0a97faee691e74111fdbbe29d183ef10c87",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtsvg",
-    "qttools",
     "qtdeclarative",
     "pulseaudio-qt",
     "libplasma",
@@ -16893,13 +16680,9 @@
    "hash": "b3:eb0ec7bfe1b99ed1b8494e8e2a929bcb351f0c07968d23689b22ddecbdb34a6e",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative",
-    "qtsvg",
-    "qtshadertools",
     "qtwayland",
     "qtpositioning",
-    "qttools",
     "qtlocation",
     "qcoro",
     "kded",
@@ -17053,10 +16836,7 @@
    "hash": "b3:14872a7867ed9022eb9abfc1002b1a07cea5f9efe6f806b0a5343d1fa82c51f4",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative",
-    "qtsvg",
-    "qttools",
     "kconfig",
     "kcoreaddons",
     "kguiaddons",
@@ -17157,6 +16937,22 @@
    "unblocks": 0,
    "perfiles": []
   },
+  "polkit-qt-1": {
+   "iname": "polkit-qt-1",
+   "version": null,
+   "link": null,
+   "compiler": null,
+   "deps": [],
+   "cls": "wanted",
+   "queue": "incoming-kde",
+   "hash": null,
+   "state": "wanted",
+   "blocked_by": [],
+   "unblocks": 0,
+   "perfiles": [
+    "escritorio-kde"
+   ]
+  },
   "pop": {
    "iname": "pop",
    "version": "0.2.1",
@@ -17235,10 +17031,7 @@
    "queue": "incoming-kde",
    "hash": "b3:1bfa47bf22278961c9efc1ffe85f77984e8ffc99e204c2297100f2b31ac45d7a",
    "state": "debt",
-   "blocked_by": [
-    "qtbase",
-    "qttools"
-   ],
+   "blocked_by": [],
    "unblocks": 1,
    "perfiles": []
   },
@@ -17333,9 +17126,6 @@
    "hash": "b3:5cf8e29c0759ce01534cc5e7fff9d50c92926baa9a94661efaed6ac5096a7e4c",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtsvg",
-    "qttools",
     "qtdeclarative",
     "qtwayland",
     "qcoro-shared",
@@ -17441,8 +17231,6 @@
    "hash": "b3:e5def789c8d488f3210a0b3e08a925c8b6ba5353456f03d081c550e86a346a74",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 3,
@@ -17479,8 +17267,6 @@
    "hash": "b3:429fad383f41b85d1419697005e439a550890d76b516fa0acdff196a846c7e5f",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative",
     "qtmultimedia"
    ],
@@ -17664,8 +17450,6 @@
    "hash": "b3:0cd8573e8f3047295f9615f191be52e7a5a3ccfbc637603b39bf4626c8d9a821",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 1,
@@ -17701,7 +17485,7 @@
    "hash": "b3:27889026076514935b53d486951792d08ed7fd5210b44e7f92979c03c96be665",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 122,
+   "unblocks": 116,
    "perfiles": [
     "base",
     "cli",
@@ -17730,9 +17514,7 @@
    "queue": "incoming-kde",
    "hash": "b3:2f9f3c1653782787b4ba4115ce8d79d3c59667461a736c5a2b0cfac1ecc7562d",
    "state": "debt",
-   "blocked_by": [
-    "qtbase"
-   ],
+   "blocked_by": [],
    "unblocks": 1,
    "perfiles": [
     "escritorio-kde"
@@ -17759,12 +17541,26 @@
    "queue": "incoming-kde",
    "hash": "b3:ea2779def4913448bb40fb8c8d5eb4af910755945f0a30de653dc62929b73f64",
    "state": "debt",
-   "blocked_by": [
-    "qtbase"
-   ],
+   "blocked_by": [],
    "unblocks": 2,
    "perfiles": []
   },
+  "qqc2-breeze-style": {
+   "iname": "qqc2-breeze-style",
+   "version": null,
+   "link": null,
+   "compiler": null,
+   "deps": [],
+   "cls": "wanted",
+   "queue": "incoming-kde",
+   "hash": null,
+   "state": "wanted",
+   "blocked_by": [],
+   "unblocks": 0,
+   "perfiles": [
+    "escritorio-kde"
+   ]
+  },
   "qqc2-desktop-style": {
    "iname": "qqc2-desktop-style",
    "version": "6.27.0",
@@ -17836,10 +17632,7 @@
    "hash": "b3:592f83d07135ac0e164fe14121b3032442fe550b22506fd6209adc5b815b43c1",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative",
-    "qtsvg",
-    "qttools",
     "frameworkintegration",
     "kirigami",
     "kconfig",
@@ -17953,9 +17746,7 @@
    "hash": "b3:536147296734bc0f73c54dd8e50629c002e1f7defd59e685be4737f8d8e23e63",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtdeclarative",
-    "qtshadertools"
+    "qtdeclarative"
    ],
    "unblocks": 9,
    "perfiles": [
@@ -18000,9 +17791,9 @@
    "cls": "c",
    "queue": "incoming-kde",
    "hash": "b3:a1d9c5b4ce582cde422441edb25990961d684aa4a25ec95580b88cd95c209873",
-   "state": "debt",
+   "state": "sealed",
    "blocked_by": [],
-   "unblocks": 117,
+   "unblocks": 114,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -18032,9 +17823,6 @@
    "hash": "b3:86dd2dbfcd4369851cd5605c885380060c5022db2270e792c04e08f037f0e1b5",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtshadertools",
-    "qtsvg",
     "qtlanguageserver"
    ],
    "unblocks": 88,
@@ -18064,10 +17852,7 @@
    "queue": "incoming-kde",
    "hash": "b3:f6f49ce358a7cc50bc6ffc45a59b7e4096e9dcebf5c865d8f1c9153d6287715c",
    "state": "debt",
-   "blocked_by": [
-    "qtbase",
-    "qttools"
-   ],
+   "blocked_by": [],
    "unblocks": 1,
    "perfiles": []
   },
@@ -18087,9 +17872,7 @@
    "queue": "incoming-kde",
    "hash": "b3:968b6bd1c548496495bc8767ab9ef8f5d60df0a14740bacad2e5280384fa5129",
    "state": "debt",
-   "blocked_by": [
-    "qtbase"
-   ],
+   "blocked_by": [],
    "unblocks": 5,
    "perfiles": [
     "escritorio-kde"
@@ -18119,10 +17902,8 @@
    "hash": "b3:16ba28955223ce688af98f4692ae1870c76761f2a94099ba53cde37d7f6d0b86",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative",
-    "qtpositioning",
-    "qtshadertools"
+    "qtpositioning"
    ],
    "unblocks": 1,
    "perfiles": [
@@ -18153,9 +17934,7 @@
    "hash": "b3:71393424ae9d2411bc1db1005a851e3638f62cf190c9da7438748b93e89f8f5b",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtdeclarative",
-    "qtshadertools"
+    "qtdeclarative"
    ],
    "unblocks": 9,
    "perfiles": [
@@ -18185,7 +17964,6 @@
    "hash": "b3:aa07346f65c84363b643446c76cea91b10362f7c7a8ce20de50fc98920ee242d",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative"
    ],
    "unblocks": 5,
@@ -18211,10 +17989,8 @@
    "cls": "c",
    "queue": "incoming-kde",
    "hash": "b3:82c6c4310f82da4ff1b3a3f4b1209d6d17008f2cf6705dacd14f54ff7280cd8d",
-   "state": "debt",
-   "blocked_by": [
-    "qtbase"
-   ],
+   "state": "sealed",
+   "blocked_by": [],
    "unblocks": 14,
    "perfiles": [
     "escritorio-kde"
@@ -18242,7 +18018,6 @@
    "hash": "b3:b3ad8f0bc46878bc52c0ce6db01dcabc528353924a1efec528c17830c2ef653b",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
     "qtdeclarative",
     "qtmultimedia"
    ],
@@ -18269,10 +18044,8 @@
    "cls": "c",
    "queue": "incoming-kde",
    "hash": "b3:5c142be671079aece1b1537b0c1b32bb22bfba7a356c1cc1023c576071d7c4d6",
-   "state": "debt",
-   "blocked_by": [
-    "qtbase"
-   ],
+   "state": "sealed",
+   "blocked_by": [],
    "unblocks": 30,
    "perfiles": [
     "escritorio-kde"
@@ -18298,10 +18071,8 @@
    "cls": "c",
    "queue": "incoming-kde",
    "hash": "b3:e83a3ed968ae54eedbb77f83e707f4195b2e411f4de3ca892be1c7919e0e2097",
-   "state": "debt",
-   "blocked_by": [
-    "qtbase"
-   ],
+   "state": "sealed",
+   "blocked_by": [],
    "unblocks": 101,
    "perfiles": [
     "escritorio-kde"
@@ -18341,9 +18112,7 @@
    "hash": "b3:f7722a353b13c315aa18dd51264e68502e7bf36d07140c9bdfa5b10e84cafa51",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtdeclarative",
-    "qtsvg"
+    "qtdeclarative"
    ],
    "unblocks": 14,
    "perfiles": [
@@ -18821,7 +18590,7 @@
    "hash": "b3:b8fca71dd92577d3a44ef01a7d5779d86473553199e0c24736438cdc846e5199",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 122,
+   "unblocks": 116,
    "perfiles": [
     "base",
     "cli",
@@ -19045,6 +18814,22 @@
     "cli"
    ]
   },
+  "shared-mime-info": {
+   "iname": "shared-mime-info",
+   "version": null,
+   "link": null,
+   "compiler": null,
+   "deps": [],
+   "cls": "wanted",
+   "queue": "incoming-kde",
+   "hash": null,
+   "state": "wanted",
+   "blocked_by": [],
+   "unblocks": 0,
+   "perfiles": [
+    "escritorio-kde"
+   ]
+  },
   "shellharden": {
    "iname": "shellharden",
    "version": "4.3.1",
@@ -19233,8 +19018,6 @@
    "hash": "b3:46cd7c373f690ff4f0c86741efb7585b9979fc534f5c5286d49f121a3e055153",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 39,
@@ -19267,8 +19050,6 @@
    "hash": "b3:07dae2e560aa2954c5f75d2dd24fcbd058d03dbcc050fe53685f31000b63bc2c",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 39,
@@ -19451,9 +19232,6 @@
    "hash": "b3:65579684f33c134043ca03ced0de190b8106f1a39ba53314ff299887cc0370f9",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtsvg",
-    "qttools",
     "qtdeclarative",
     "qtwayland",
     "layer-shell-qt",
@@ -19879,9 +19657,7 @@
    "hash": "b3:5de04269bdbad6a1620f4a414c524a1a6357e340719394db12e4510fb3f9e939",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtdeclarative",
-    "qttools"
+    "qtdeclarative"
    ],
    "unblocks": 4,
    "perfiles": [
@@ -19984,9 +19760,6 @@
    "hash": "b3:f867f497c8b9b634b370d9ec524b1249f45351b3260636a574984cff7c1a5852",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qtsvg",
-    "qttools",
     "qtdeclarative",
     "qtwayland",
     "plasma-activities",
@@ -20460,8 +20233,6 @@
    "hash": "b3:745678cafccebfcc427971a8a37d37328af387af7bd3fc9b50757f3437ead86b",
    "state": "debt",
    "blocked_by": [
-    "qtbase",
-    "qttools",
     "qtdeclarative"
    ],
    "unblocks": 2,
@@ -20560,7 +20331,7 @@
    "hash": "b3:944c6960c28ff0baf92aabfb2b64a6a013b4d51c7184b46d73fe62ff32cd5d3b",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 2,
+   "unblocks": 0,
    "perfiles": []
   },
   "tlsx": {
@@ -21003,7 +20774,7 @@
    "hash": "b3:e9711c1fde410d3bd23b9fa85a6be64dbd17ea9d7ee493b4a08a985428c0e9b4",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 2,
+   "unblocks": 0,
    "perfiles": []
   },
   "util-linux": {
@@ -21380,7 +21151,7 @@
    "hash": "b3:c4eb40ba21935bba70ab54338fe755e3dc8b41541d877a48be544dfe73bbfe7b",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 120,
+   "unblocks": 117,
    "perfiles": [
     "escritorio-kde",
     "escritorio-mirada"
@@ -21403,7 +21174,7 @@
    "hash": "b3:a2122760419cc44529d9be002613aa3c66dad2efc31cd706dadfb6d2e4cdbb59",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 25,
+   "unblocks": 23,
    "perfiles": [
     "escritorio-kde",
     "escritorio-mirada"
@@ -21641,7 +21412,7 @@
    "hash": "b3:ba08b2025cf4cda05f0409d09f746f767b292fd37e65774b612643b4e837418b",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 32,
+   "unblocks": 31,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -21668,7 +21439,7 @@
    "hash": "b3:e25ebf56ed895d51689bf1cd1f4165fe29dd079c05e869a13cf31a3e6120197f",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 7,
+   "unblocks": 6,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -21694,7 +21465,7 @@
    "hash": "b3:b32975eb590596eed9f01e617dc6a3b01ffdb5d8757f4510b1bc938ce1716062",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 31,
+   "unblocks": 30,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -21719,7 +21490,7 @@
    "hash": "b3:d389e75fc1c423e458691ae49fdd22879e6df560beeabf481bb43a6230209ed9",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 33,
+   "unblocks": 32,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -21744,7 +21515,7 @@
    "hash": "b3:eddc817a21457bb7a82ecfa47eaa11a3fbea4a16afe388970268153fe70fa090",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 31,
+   "unblocks": 30,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -21769,7 +21540,7 @@
    "hash": "b3:79031642038f499f3d2fe9dfb48c37c93762a719a2ef9bf1413c3872dc7aba7a",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 32,
+   "unblocks": 31,
    "perfiles": [
     "escritorio-kde"
    ]
@@ -21823,7 +21594,7 @@
    "hash": "b3:dcd130adf125e21d113af9747c3dfedb840ef30c78cbdaf17ad06205e1fa017b",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 49,
+   "unblocks": 48,
    "perfiles": [
     "escritorio-kde",
     "escritorio-mirada"
@@ -21903,12 +21674,28 @@
    "hash": "b3:446da5e3c8dac9ee12f34b332b7950b45472171480778b08bcf90defd742b3f8",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 1,
+   "unblocks": 0,
    "perfiles": [
     "escritorio-kde",
     "escritorio-mirada"
    ]
   },
+  "xwayland": {
+   "iname": "xwayland",
+   "version": null,
+   "link": null,
+   "compiler": null,
+   "deps": [],
+   "cls": "wanted",
+   "queue": "incoming-kde",
+   "hash": null,
+   "state": "wanted",
+   "blocked_by": [],
+   "unblocks": 0,
+   "perfiles": [
+    "escritorio-kde"
+   ]
+  },
   "xwin": {
    "iname": "xwin",
    "version": "0.7.0",
@@ -22091,7 +21878,7 @@
    "hash": "b3:28522f99f433496dbaacfa309f8e937d6526ac3c8db34b4a94b18e22656dcd33",
    "state": "sealed",
    "blocked_by": [],
-   "unblocks": 28,
+   "unblocks": 25,
    "perfiles": [
     "base",
     "cli",
diff --git a/docs/state/drenaje.json b/docs/state/drenaje.json
index caba0e96..2b09513d 100644
--- a/docs/state/drenaje.json
+++ b/docs/state/drenaje.json
@@ -22,34 +22,29 @@
   },
   "escritorio-kde": {
    "grafo": "docs/state/build-state-kde.json",
-   "nodos": 162,
+   "nodos": 166,
    "en_deuda": 77,
-   "ondas": 12,
-   "profundidad": 12,
+   "ondas": 11,
+   "profundidad": 11,
    "construibles_ya": [
-    "qtbase"
+    "kcodecs",
+    "karchive",
+    "kitemviews",
+    "kglobalaccel",
+    "kdbusaddons",
+    "attica",
+    "kdnssd",
+    "qtlanguageserver",
+    "kplotting",
+    "qcoro",
+    "polkit-qt-1",
+    "shared-mime-info",
+    "xwayland"
    ],
    "olas": [
     {
      "n": 1,
      "recetas": [
-      "qtbase"
-     ]
-    },
-    {
-     "n": 2,
-     "recetas": [
-      "qttools",
-      "qtsvg",
-      "qtshadertools",
-      "qtlanguageserver",
-      "qcoro"
-     ]
-    },
-    {
-     "n": 3,
-     "recetas": [
-      "qtdeclarative",
       "kcodecs",
       "karchive",
       "kitemviews",
@@ -57,11 +52,22 @@
       "kdbusaddons",
       "attica",
       "kdnssd",
-      "kplotting"
+      "qtlanguageserver",
+      "kplotting",
+      "qcoro",
+      "polkit-qt-1",
+      "shared-mime-info",
+      "xwayland"
      ]
     },
     {
-     "n": 4,
+     "n": 2,
+     "recetas": [
+      "qtdeclarative"
+     ]
+    },
+    {
+     "n": 3,
      "recetas": [
       "kcoreaddons",
       "kconfig",
@@ -83,7 +89,7 @@
      ]
     },
     {
-     "n": 5,
+     "n": 4,
      "recetas": [
       "kcolorscheme",
       "kcompletion",
@@ -106,7 +112,7 @@
      ]
     },
     {
-     "n": 6,
+     "n": 5,
      "recetas": [
       "kconfigwidgets",
       "kiconthemes",
@@ -122,20 +128,21 @@
      ]
     },
     {
-     "n": 7,
+     "n": 6,
      "recetas": [
       "kxmlgui",
-      "ksvg"
+      "ksvg",
+      "qqc2-breeze-style"
      ]
     },
     {
-     "n": 8,
+     "n": 7,
      "recetas": [
       "kio"
      ]
     },
     {
-     "n": 9,
+     "n": 8,
      "recetas": [
       "kparts",
       "kcmutils",
@@ -145,7 +152,7 @@
      ]
     },
     {
-     "n": 10,
+     "n": 9,
      "recetas": [
       "frameworkintegration",
       "ktexteditor",
@@ -154,7 +161,7 @@
      ]
     },
     {
-     "n": 11,
+     "n": 10,
      "recetas": [
       "plasma-workspace",
       "qqc2-desktop-style",
@@ -162,7 +169,7 @@
      ]
     },
     {
-     "n": 12,
+     "n": 11,
      "recetas": [
       "plasma-integration"
      ]
@@ -172,28 +179,22 @@
   "escritorio-mirada": {
    "grafo": "docs/state/build-state.json",
    "nodos": 31,
-   "en_deuda": 4,
-   "ondas": 2,
-   "profundidad": 2,
+   "en_deuda": 3,
+   "ondas": 1,
+   "profundidad": 1,
    "construibles_ya": [
-    "libinput",
     "mesa-swrast",
+    "mirada-compositor",
     "mirada-greeter"
    ],
    "olas": [
     {
      "n": 1,
      "recetas": [
-      "libinput",
       "mesa-swrast",
+      "mirada-compositor",
       "mirada-greeter"
      ]
-    },
-    {
-     "n": 2,
-     "recetas": [
-      "mirada-compositor"
-     ]
     }
    ]
   }
diff --git a/docs/state/frontera-triaje.toml b/docs/state/frontera-triaje.toml
index 76e20306..2f822421 100644
--- a/docs/state/frontera-triaje.toml
+++ b/docs/state/frontera-triaje.toml
@@ -4,1174 +4,1187 @@
 # pone un HUMANO editando este fichero. Sincronizar NO pisa lo ya decidido: sólo agrega
 # candidatos nuevos y marca `[ausente]` los que dejaron de aparecer.
 #
-# veredicto ∈ pendiente | hueco | opcional | nix-ismo
+# veredicto ∈ pendiente | hueco | opcional | nix-ismo | provisto
 #   hueco    — falta de verdad. Ponelo como raíz en docs/state/targets.toml ⇒ nace un nodo
 #              `wanted` en el grafo y entra al drenaje. (`triaje.py --aplicar` te da la línea.)
 #   opcional — dep que nixpkgs habilita y nosotros no queremos. Queda registrada para que no
 #              vuelva a preguntarse.
 #   nix-ismo — andamiaje de nixpkgs sin contraparte acá. `--aplicar` lo manda al descarte del
 #              sembrador ⇒ la próxima corrida sale más limpia.
+#   provisto — no falta: ya lo da otra receta con otro nombre. `provee = "<receta>"` dice cuál;
+#              `--aplicar` lo manda al sembrador como alias.
 #
 # `sugerencia` es una heurística con evidencia, NO un veredicto: abarata el juicio, no lo cierra.
 schema = "hammer-frontera-triaje/1"
 
 [candidato."SPIRV-LLVM-Translator"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mesa); mirá si es una feature opcional"
+porque = "Vulkan / compilación de shaders / dispatch GL: no habilitado (mesa se construye sin ellos)"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."acl"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["cli", "escritorio-kde"]
 piden = ["kio", "rsync"]
 
 [candidato."adns"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (gnupg); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli"]
 piden = ["gnupg"]
 
 [candidato."appstream-qt"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "formatos/paquetería ajenos; hammer tiene los suyos (.swm, Etapa F)"
 perfiles = ["escritorio-kde"]
 piden = ["frameworkintegration", "plasma-workspace"]
 
 [candidato."aspell"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (sonnet); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["sonnet"]
 
 [candidato."at-spi2-core"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."attr"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["kfilemetadata", "kio"]
 
 [candidato."audit"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli", "escritorio-kde", "escritorio-mirada"]
 piden = ["dbus", "linux-pam"]
 
 [candidato."aurorae"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kwin); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["kwin"]
 
 [candidato."autoconf"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (util-linux); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["cli", "escritorio-kde"]
 piden = ["util-linux"]
 
 [candidato."autoconf-archive"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (python3); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["cli", "escritorio-kde", "escritorio-mirada"]
 piden = ["python3"]
 
 [candidato."automake"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (util-linux); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["cli", "escritorio-kde"]
 piden = ["util-linux"]
 
 [candidato."avahi"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kdnssd); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["escritorio-kde"]
 piden = ["kdnssd"]
 
 [candidato."baloo"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (plasma-workspace); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["plasma-workspace"]
 
 [candidato."bluez-headers"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (python3); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["cli", "escritorio-kde", "escritorio-mirada"]
 piden = ["python3"]
 
 [candidato."check"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (parted); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["cli"]
 piden = ["parted"]
 
 [candidato."clang"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mesa); mirá si es una feature opcional"
+porque = "Vulkan / compilación de shaders / dispatch GL: no habilitado (mesa se construye sin ellos)"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."cmocka"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (shadow); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["cli"]
 piden = ["shadow"]
 
 [candidato."cups"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."db"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "conectores de base de datos: ninguna imagen los pide"
 perfiles = ["cli", "escritorio-kde", "escritorio-mirada"]
 piden = ["iproute2", "linux-pam"]
 
 [candidato."dejagnu"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (libffi); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["libffi"]
 
 [candidato."directx-headers"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mesa); mirá si es una feature opcional"
+porque = "Vulkan / compilación de shaders / dispatch GL: no habilitado (mesa se construye sin ellos)"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."docbook5"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (linux-pam); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["linux-pam"]
 
 [candidato."docutils"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (libdrm); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["libdrm"]
 
 [candidato."double-conversion"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."doxygen"]
-veredicto = "pendiente"
-porque = "lo piden 3 recetas"
+veredicto = "opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["libqalculate", "libxkbcommon", "wayland"]
 
 [candidato."ebook-tools"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kfilemetadata); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["kfilemetadata"]
 
 [candidato."ed"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (lsof); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["cli"]
 piden = ["lsof"]
 
 [candidato."editorconfig-core-c"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (ktexteditor); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde"]
 piden = ["ktexteditor"]
 
 [candidato."flatpak"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (plasma-workspace); mirá si es una feature opcional"
+porque = "formatos/paquetería ajenos; hammer tiene los suyos (.swm, Etapa F)"
 perfiles = ["escritorio-kde"]
 piden = ["plasma-workspace"]
 
 [candidato."flite"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtspeech); mirá si es una feature opcional"
+porque = "stack de audio/multimedia: decisión de producto pendiente, no un hueco de build"
 perfiles = ["escritorio-kde"]
 piden = ["qtspeech"]
 
 [candidato."fuse"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (e2fsprogs); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["cli"]
 piden = ["e2fsprogs"]
 
 [candidato."gdbm"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (python3); mirá si es una feature opcional"
+porque = "conectores de base de datos: ninguna imagen los pide"
 perfiles = ["cli", "escritorio-kde", "escritorio-mirada"]
 piden = ["python3"]
 
 [candidato."git-minimal"]
-veredicto = "pendiente"
+veredicto = "nix-ismo"
 sugerencia = "nix-ismo?"
-porque = "el nombre tiene forma de andamiaje de nixpkgs (env/minimal/wrapper)"
+porque = "variante de empaquetado de nix; hammer ya tiene la receta `git`"
 perfiles = ["cli"]
 piden = ["starship"]
 
 [candidato."glibc"]
-veredicto = "pendiente"
+veredicto = "nix-ismo"
 sugerencia = "nix-ismo?"
-porque = "el nombre tiene forma de andamiaje de nixpkgs (env/minimal/wrapper)"
+porque = "la libc de nixpkgs asomando por su stdenv; hammer es musl"
 perfiles = ["cli"]
 piden = ["go"]
 
 [candidato."glslang"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mesa); mirá si es una feature opcional"
+porque = "Vulkan / compilación de shaders / dispatch GL: no habilitado (mesa se construye sin ellos)"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."gmp-with-cxx"]
-veredicto = "pendiente"
+veredicto = "provisto"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mpfr); mirá si es una feature opcional"
+provee = "gmp"
+porque = "nixpkgs lo separa en un paquete propio; acá lo da la receta `gmp` (verificado en el store)"
 perfiles = ["escritorio-kde"]
 piden = ["mpfr"]
 
 [candidato."gnutls"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (gnupg); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli"]
 piden = ["gnupg"]
 
 [candidato."gpgmepp"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kwallet); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["kwallet"]
 
 [candidato."gpsd"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (plasma-workspace); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["plasma-workspace"]
 
 [candidato."graphviz"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (wayland); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["wayland"]
 
 [candidato."groff"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (sudo); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["cli"]
 piden = ["sudo"]
 
 [candidato."gst-libav"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtmultimedia); mirá si es una feature opcional"
+porque = "stack de audio/multimedia: decisión de producto pendiente, no un hueco de build"
 perfiles = ["escritorio-kde"]
 piden = ["qtmultimedia"]
 
 [candidato."gst-plugins-bad"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtmultimedia); mirá si es una feature opcional"
+porque = "stack de audio/multimedia: decisión de producto pendiente, no un hueco de build"
 perfiles = ["escritorio-kde"]
 piden = ["qtmultimedia"]
 
 [candidato."gst-plugins-base"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "stack de audio/multimedia: decisión de producto pendiente, no un hueco de build"
 perfiles = ["escritorio-kde"]
 piden = ["libcanberra", "qtmultimedia"]
 
 [candidato."gst-plugins-good"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtmultimedia); mirá si es una feature opcional"
+porque = "stack de audio/multimedia: decisión de producto pendiente, no un hueco de build"
 perfiles = ["escritorio-kde"]
 piden = ["qtmultimedia"]
 
 [candidato."gstreamer"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "stack de audio/multimedia: decisión de producto pendiente, no un hueco de build"
 perfiles = ["escritorio-kde"]
 piden = ["libcanberra", "qtmultimedia"]
 
 [candidato."gtk+3"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "X11 heredado: el escritorio es Wayland"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."help2man"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (flex); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["cli", "escritorio-kde", "escritorio-mirada"]
 piden = ["flex"]
 
 [candidato."hunspell"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (sonnet); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["sonnet"]
 
 [candidato."iptables"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (iproute2); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli"]
 piden = ["iproute2"]
 
 [candidato."jasper"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtsvg); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["qtsvg"]
 
 [candidato."jemalloc"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (fd); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["cli"]
 piden = ["fd"]
 
 [candidato."kdegraphics-mobipocket"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kfilemetadata); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["kfilemetadata"]
 
 [candidato."kdoctools"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "hueco?"
-porque = "lo piden 6 recetas de la imagen — difícil que sea accesorio"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["kded", "kio", "kpackage", "kservice", "kwallet", "kwin"]
 
 [candidato."kio-extras"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (plasma-workspace); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["plasma-workspace"]
 
 [candidato."kmod"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (pciutils); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["cli"]
 piden = ["pciutils"]
 
 [candidato."krb5"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (curl); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli"]
 piden = ["curl"]
 
 [candidato."kuserfeedback"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (plasma-workspace); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["plasma-workspace"]
 
 [candidato."libapparmor"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (dbus); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli", "escritorio-kde"]
 piden = ["dbus"]
 
 [candidato."libappimage"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kfilemetadata); mirá si es una feature opcional"
+porque = "formatos/paquetería ajenos; hammer tiene los suyos (.swm, Etapa F)"
 perfiles = ["escritorio-kde"]
 piden = ["kfilemetadata"]
 
 [candidato."libb2"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."libbpf"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (iproute2); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli"]
 piden = ["iproute2"]
 
 [candidato."libbsd"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (shadow); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["cli"]
 piden = ["shadow"]
 
 [candidato."libcap-ng"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli", "escritorio-kde"]
 piden = ["dbus", "util-linux"]
 
 [candidato."libclc"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mesa); mirá si es una feature opcional"
+porque = "Vulkan / compilación de shaders / dispatch GL: no habilitado (mesa se construye sin ellos)"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."libdatrie"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."libdmtx"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (prison); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["prison"]
 
 [candidato."libei"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kwin); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["kwin"]
 
 [candidato."libglvnd"]
-veredicto = "pendiente"
-porque = "lo piden 3 recetas"
+veredicto = "opcional"
+porque = "Vulkan / compilación de shaders / dispatch GL: no habilitado (mesa se construye sin ellos)"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["libepoxy", "mesa", "qtbase"]
 
 [candidato."libidn2"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli"]
 piden = ["curl", "iputils"]
 
 [candidato."libimobiledevice"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (solid); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["solid"]
 
 [candidato."libkexiv2"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (plasma-workspace); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["plasma-workspace"]
 
 [candidato."libmng"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtsvg); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["qtsvg"]
 
 [candidato."libmnl"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (iproute2); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["cli"]
 piden = ["iproute2"]
 
 [candidato."libpciaccess"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (libdrm); mirá si es una feature opcional"
+porque = "X11 heredado: el escritorio es Wayland"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["libdrm"]
 
 [candidato."libpq"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "conectores de base de datos: ninguna imagen los pide"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."libproxy"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."libpsl"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (curl); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli"]
 piden = ["curl"]
 
 [candidato."libpulseaudio"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "stack de audio/multimedia: decisión de producto pendiente, no un hueco de build"
 perfiles = ["escritorio-kde"]
 piden = ["libcanberra", "qtmultimedia"]
 
 [candidato."libqaccessibilityclient"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kwin); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["kwin"]
 
 [candidato."libsecret"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kwallet); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["escritorio-kde"]
 piden = ["kwallet"]
 
 [candidato."libselinux"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."libsepol"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."libthai"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."libunwind"]
-veredicto = "pendiente"
-porque = "lo piden 3 recetas"
+veredicto = "opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["cli", "escritorio-kde", "escritorio-mirada"]
 piden = ["mesa", "qtmultimedia", "strace"]
 
 [candidato."libva-minimal"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "nix-ismo?"
-porque = "el nombre tiene forma de andamiaje de nixpkgs (env/minimal/wrapper)"
+porque = "stack de audio/multimedia: decisión de producto pendiente, no un hueco de build"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."libwacom"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (libinput); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["libinput"]
 
 [candidato."libxcb-cursor"]
-veredicto = "pendiente"
+veredicto = "provisto"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+provee = "xcb-util-cursor"
+porque = "nixpkgs lo separa en un paquete propio; acá lo da la receta `xcb-util-cursor` (verificado en el store)"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."libxcb-image"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "provisto"
+provee = "xcb-util-image"
+porque = "nixpkgs lo separa en un paquete propio; acá lo da la receta `xcb-util-image` (verificado en el store)"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase", "xcb-util-cursor"]
 
 [candidato."libxcb-keysyms"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "provisto"
+provee = "xcb-util-keysyms"
+porque = "nixpkgs lo separa en un paquete propio; acá lo da la receta `xcb-util-keysyms` (verificado en el store)"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa", "qtbase"]
 
 [candidato."libxcb-render-util"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "provisto"
+provee = "xcb-util-renderutil"
+porque = "nixpkgs lo separa en un paquete propio; acá lo da la receta `xcb-util-renderutil` (verificado en el store)"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase", "xcb-util-cursor"]
 
 [candidato."libxcb-util"]
-veredicto = "pendiente"
+veredicto = "provisto"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+provee = "xcb-util"
+porque = "nixpkgs lo separa en un paquete propio; acá lo da la receta `xcb-util` (verificado en el store)"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."libxcb-wm"]
-veredicto = "pendiente"
+veredicto = "provisto"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+provee = "xcb-util-wm"
+porque = "nixpkgs lo separa en un paquete propio; acá lo da la receta `xcb-util-wm` (verificado en el store)"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."libxcomposite"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "X11 heredado: el escritorio es Wayland"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."libxcrypt"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "hueco?"
-porque = "lo piden 4 recetas de la imagen — difícil que sea accesorio"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli", "escritorio-kde", "escritorio-mirada"]
 piden = ["linux-pam", "perl", "shadow", "util-linux"]
 
 [candidato."libxft"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (plasma-workspace); mirá si es una feature opcional"
+porque = "X11 heredado: el escritorio es Wayland"
 perfiles = ["escritorio-kde"]
 piden = ["plasma-workspace"]
 
 [candidato."libxrandr"]
-veredicto = "pendiente"
-porque = "lo piden 3 recetas"
+veredicto = "opcional"
+porque = "X11 heredado: el escritorio es Wayland"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa", "qtmultimedia", "vulkan-loader"]
 
 [candidato."libxscrnsaver"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kidletime); mirá si es una feature opcional"
+porque = "X11 heredado: el escritorio es Wayland"
 perfiles = ["escritorio-kde"]
 piden = ["kidletime"]
 
 [candidato."libxshmfence"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mesa); mirá si es una feature opcional"
+porque = "X11 heredado: el escritorio es Wayland"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."libxxf86vm"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mesa); mirá si es una feature opcional"
+porque = "X11 heredado: el escritorio es Wayland"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."lksctp-tools"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."llvm"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mesa); mirá si es una feature opcional"
+porque = "Vulkan / compilación de shaders / dispatch GL: no habilitado (mesa se construye sin ellos)"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."lndir"]
-veredicto = "pendiente"
+veredicto = "nix-ismo"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "helper de nixpkgs para árboles de symlinks"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."lttng-ust"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."lua"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (libinput); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["libinput"]
 
 [candidato."lvm2"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (parted); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["cli"]
 piden = ["parted"]
 
 [candidato."mariadb-connector-c"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "conectores de base de datos: ninguna imagen los pide"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."mariadb-connector-odbc"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "conectores de base de datos: ninguna imagen los pide"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."md4c"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."mesa-libgbm"]
-veredicto = "pendiente"
-porque = "lo piden 3 recetas"
+veredicto = "provisto"
+provee = "mesa"
+porque = "nixpkgs lo separa en un paquete propio; acá lo da la receta `mesa` (verificado en el store)"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["kwin", "mesa", "qtbase"]
 
 [candidato."milou"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["kwin", "plasma-workspace"]
 
 [candidato."mpdecimal"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (python3); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["cli", "escritorio-kde", "escritorio-mirada"]
 piden = ["python3"]
 
 [candidato."nghttp2"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (curl); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli"]
 piden = ["curl"]
 
 [candidato."nghttp3"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (curl); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli"]
 piden = ["curl"]
 
 [candidato."ngtcp2"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (curl); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli"]
 piden = ["curl"]
 
 [candidato."openldap"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (gnupg); mirá si es una feature opcional"
+porque = "conectores de base de datos: ninguna imagen los pide"
 perfiles = ["cli"]
 piden = ["gnupg"]
 
 [candidato."orc"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtmultimedia); mirá si es una feature opcional"
+porque = "stack de audio/multimedia: decisión de producto pendiente, no un hueco de build"
 perfiles = ["escritorio-kde"]
 piden = ["qtmultimedia"]
 
 [candidato."oxygen-icons"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (frameworkintegration); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["frameworkintegration"]
 
 [candidato."packagekit-qt"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "formatos/paquetería ajenos; hammer tiene los suyos (.swm, Etapa F)"
 perfiles = ["escritorio-kde"]
 piden = ["frameworkintegration", "plasma-workspace"]
 
 [candidato."pandoc-cli"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (eza); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["cli"]
 piden = ["eza"]
 
 [candidato."plasma-nano"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (plasma-workspace); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["plasma-workspace"]
 
 [candidato."ply"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mesa); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."po4a"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (util-linux); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["cli", "escritorio-kde"]
 piden = ["util-linux"]
 
 [candidato."polkit-qt-1"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "hueco"
+porque = "sin él Plasma no puede pedir autorización: montar discos, cambiar ajustes del sistema"
 perfiles = ["escritorio-kde"]
 piden = ["kauth", "plasma-workspace"]
 
 [candidato."poppler-qt6"]
-veredicto = "pendiente"
+veredicto = "provisto"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kfilemetadata); mirá si es una feature opcional"
+provee = "poppler"
+porque = "nixpkgs lo separa en un paquete propio; acá lo da la receta `poppler` (verificado en el store)"
 perfiles = ["escritorio-kde"]
 piden = ["kfilemetadata"]
 
 [candidato."popt"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (rsync); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["cli"]
 piden = ["rsync"]
 
 [candidato."psqlodbc"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "conectores de base de datos: ninguna imagen los pide"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."pycparser"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mesa); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."pyside6"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "hueco?"
-porque = "lo piden 6 recetas de la imagen — difícil que sea accesorio"
+porque = "bindings Python de Qt: ninguna imagen los pide"
 perfiles = ["escritorio-kde"]
 piden = ["kcoreaddons", "kguiaddons", "knotifications", "kstatusnotifieritem", "kwidgetsaddons", "kxmlgui"]
 
 [candidato."python3-3.14.6-env"]
-veredicto = "pendiente"
+veredicto = "nix-ismo"
 sugerencia = "nix-ismo?"
-porque = "el nombre tiene forma de andamiaje de nixpkgs (env/minimal/wrapper)"
+porque = "wrapper de entorno de nix, no un paquete"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["kcoreaddons", "kguiaddons", "knotifications", "kstatusnotifieritem", "kwidgetsaddons", "kxmlgui", "libinput"]
 
 [candidato."pyyaml"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mesa); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."qca"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kwallet); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["kwallet"]
 
 [candidato."qqc2-breeze-style"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "hueco"
+porque = "el estilo QML que Plasma usa de verdad; sin él los controles caen a un estilo genérico"
 perfiles = ["escritorio-kde"]
 piden = ["kscreenlocker", "plasma-workspace"]
 
 [candidato."qtquick3d"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["kwin", "qtmultimedia"]
 
 [candidato."qtsensors"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kwin); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["kwin"]
 
 [candidato."qtserialport"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtpositioning); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["qtpositioning"]
 
 [candidato."qtvirtualkeyboard"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["kwin", "plasma-workspace"]
 
 [candidato."qtwebsockets"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qcoro); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["qcoro"]
 
 [candidato."remove-references-to"]
-veredicto = "pendiente"
+veredicto = "nix-ismo"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (jq); mirá si es una feature opcional"
+porque = "helper del stdenv de nixpkgs"
 perfiles = ["cli"]
 piden = ["jq"]
 
 [candidato."rhash"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (cmake); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["escritorio-kde"]
 piden = ["cmake"]
 
 [candidato."rust-bindgen"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mesa); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."rust-cbindgen"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (mesa); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["mesa"]
 
 [candidato."setxkbmap"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (libxkbcommon); mirá si es una feature opcional"
+porque = "X11 heredado: el escritorio es Wayland"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["libxkbcommon"]
 
 [candidato."shared-mime-info"]
-veredicto = "pendiente"
+veredicto = "hueco"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kcoreaddons); mirá si es una feature opcional"
+porque = "base de datos MIME: sin ella el escritorio no determina tipos de fichero (asociaciones, iconos, abrir-con). Gap de RUNTIME, no de build"
 perfiles = ["escritorio-kde"]
 piden = ["kcoreaddons"]
 
 [candidato."shiboken6"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "hueco?"
-porque = "lo piden 6 recetas de la imagen — difícil que sea accesorio"
+porque = "bindings Python de Qt: ninguna imagen los pide"
 perfiles = ["escritorio-kde"]
 piden = ["kcoreaddons", "kguiaddons", "knotifications", "kstatusnotifieritem", "kwidgetsaddons", "kxmlgui"]
 
 [candidato."speech-dispatcher"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtspeech); mirá si es una feature opcional"
+porque = "stack de audio/multimedia: decisión de producto pendiente, no un hueco de build"
 perfiles = ["escritorio-kde"]
 piden = ["qtspeech"]
 
 [candidato."spirv-tools"]
-veredicto = "pendiente"
-porque = "lo piden 3 recetas"
+veredicto = "opcional"
+porque = "Vulkan / compilación de shaders / dispatch GL: no habilitado (mesa se construye sin ellos)"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["kdeclarative", "mesa", "plasma-workspace"]
 
 [candidato."sqlite-connector-odbc"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "conectores de base de datos: ninguna imagen los pide"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."syndication"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (knewstuff); mirá si es una feature opcional"
+porque = "módulo opcional de Qt/KDE: el escritorio construye sin él — revisá si lo querés para un Plasma completo"
 perfiles = ["escritorio-kde"]
 piden = ["knewstuff"]
 
 [candidato."systemd"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "hammer usa arje-zero como PID1; ninguna imagen quiere systemd"
 perfiles = ["escritorio-kde"]
 piden = ["libcanberra", "qtbase"]
 
 [candidato."systemd-minimal"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "nix-ismo?"
-porque = "el nombre tiene forma de andamiaje de nixpkgs (env/minimal/wrapper)"
+porque = "hammer usa arje-zero como PID1; ninguna imagen quiere systemd"
 perfiles = ["cli", "escritorio-kde", "escritorio-mirada"]
 piden = ["dbus", "mako"]
 
 [candidato."systemd-minimal-libs"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "nix-ismo?"
-porque = "el nombre tiene forma de andamiaje de nixpkgs (env/minimal/wrapper)"
+porque = "hammer usa arje-zero como PID1; ninguna imagen quiere systemd"
 perfiles = ["cli", "escritorio-kde", "escritorio-mirada"]
 piden = ["dhcpcd", "htop", "libinput", "linux-pam", "mesa", "qtbase", "seatd", "util-linux"]
 
 [candidato."taglib"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kfilemetadata); mirá si es una feature opcional"
+porque = "stack de audio/multimedia: decisión de producto pendiente, no un hueco de build"
 perfiles = ["escritorio-kde"]
 piden = ["kfilemetadata"]
 
 [candidato."tcb"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (shadow); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli"]
 piden = ["shadow"]
 
 [candidato."texinfo"]
-veredicto = "pendiente"
-porque = "lo piden 3 recetas"
+veredicto = "opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["cli"]
 piden = ["e2fsprogs", "git", "gnupg"]
 
 [candidato."tinyxxd"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (dosfstools); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["cli"]
 piden = ["dosfstools"]
 
 [candidato."tpm2-tss"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (gnupg); mirá si es una feature opcional"
+porque = "red/seguridad opcional: nixpkgs la habilita por defecto, hammer construye sin ella"
 perfiles = ["cli"]
 piden = ["gnupg"]
 
 [candidato."uname"]
-veredicto = "pendiente"
+veredicto = "provisto"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (git); mirá si es una feature opcional"
+provee = "coreutils"
+porque = "nixpkgs lo separa en un paquete propio; acá lo da la receta `coreutils` (verificado en el store)"
 perfiles = ["cli"]
 piden = ["git"]
 
 [candidato."unixodbc"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (qtbase); mirá si es una feature opcional"
+porque = "conectores de base de datos: ninguna imagen los pide"
 perfiles = ["escritorio-kde"]
 piden = ["qtbase"]
 
 [candidato."v4l-utils"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (libdisplay-info); mirá si es una feature opcional"
+porque = "stack de audio/multimedia: decisión de producto pendiente, no un hueco de build"
 perfiles = ["escritorio-kde"]
 piden = ["libdisplay-info"]
 
 [candidato."valgrind"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["libdrm", "mesa"]
 
 [candidato."w3m"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (linux-pam); mirá si es una feature opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["linux-pam"]
 
 [candidato."wayland-scanner"]
-veredicto = "pendiente"
+veredicto = "provisto"
 sugerencia = "hueco?"
-porque = "lo piden 7 recetas de la imagen — difícil que sea accesorio"
+provee = "wayland"
+porque = "nixpkgs lo separa en un paquete propio; acá lo da la receta `wayland` (verificado en el store)"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["kscreenlocker", "libxkbcommon", "mako", "mesa", "qtbase", "wayland", "wayland-protocols"]
 
 [candidato."xclip"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (gitui); mirá si es una feature opcional"
+porque = "X11 heredado: el escritorio es Wayland"
 perfiles = ["cli"]
 piden = ["gitui"]
 
 [candidato."xkbcomp"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (libxkbcommon); mirá si es una feature opcional"
+porque = "X11 heredado: el escritorio es Wayland"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["libxkbcommon"]
 
 [candidato."xmlto"]
-veredicto = "pendiente"
-porque = "lo piden 2 recetas"
+veredicto = "opcional"
+porque = "tooling de docs/tests/build que nixpkgs usa y nuestras recetas no"
 perfiles = ["cli", "escritorio-kde", "escritorio-mirada"]
 piden = ["git", "wayland"]
 
 [candidato."xvfb"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (libxkbcommon); mirá si es una feature opcional"
+porque = "X11 heredado: el escritorio es Wayland"
 perfiles = ["escritorio-kde", "escritorio-mirada"]
 piden = ["libxkbcommon"]
 
 [candidato."xwayland"]
-veredicto = "pendiente"
+veredicto = "hueco"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (kwin); mirá si es una feature opcional"
+porque = "sin él NINGUNA app X11 corre en el escritorio Wayland. Gap de RUNTIME"
 perfiles = ["escritorio-kde"]
 piden = ["kwin"]
 
 [candidato."xxhash"]
-veredicto = "pendiente"
+veredicto = "opcional"
 sugerencia = "opcional?"
-porque = "lo pide una sola receta (rsync); mirá si es una feature opcional"
+porque = "nixpkgs la habilita; ninguna receta de hammer la necesitó para construir (todas las que la piden ya están selladas)"
 perfiles = ["cli"]
 piden = ["rsync"]
diff --git a/docs/state/nixismos-triaje.txt b/docs/state/nixismos-triaje.txt
index b2e726cc..8cc81007 100644
--- a/docs/state/nixismos-triaje.txt
+++ b/docs/state/nixismos-triaje.txt
@@ -1,2 +1,7 @@
 # nixismos-triaje.txt — DERIVADO de frontera-triaje.toml por scripts/triaje.py --aplicar.
 # Lo lee seed-graph.py y lo suma a su lista de descarte: el sembrador aprende de su triaje.
+git-minimal
+glibc
+lndir
+python3-3.14.6-env
+remove-references-to
diff --git a/docs/state/seed-edges.json b/docs/state/seed-edges.json
new file mode 100644
index 00000000..2beeaf06
--- /dev/null
+++ b/docs/state/seed-edges.json
@@ -0,0 +1,512 @@
+{
+ "schema": "hammer-seed-edges/1",
+ "fuente": "nixpkgs (metadata; NO se construye con nix — ADR 0004)",
+ "advertencia": "HIPÓTESIS, no verdad. Sólo válido para nodos SIN receta; con receta, manda la receta.",
+ "nodos": {
+  "polkit-qt-1": [
+   {
+    "dep": "cmake",
+    "clase": "conocida",
+    "origen_nix": "cmake",
+    "campo": "nbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "samurai",
+    "clase": "conocida",
+    "origen_nix": "ninja",
+    "campo": "nbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "wrap-qt6-apps-hook",
+    "clase": "nix-ismo",
+    "origen_nix": "wrap-qt6-apps-hook",
+    "campo": "nbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "kf6-move-outputs-hook",
+    "clase": "nix-ismo",
+    "origen_nix": "kf6-move-outputs-hook",
+    "campo": "nbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "qmllint-validate-hook",
+    "clase": "nix-ismo",
+    "origen_nix": "qmllint-validate-hook",
+    "campo": "nbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "pkgconf",
+    "clase": "conocida",
+    "origen_nix": "pkg-config-wrapper",
+    "campo": "nbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "",
+    "clase": "nix-ismo",
+    "origen_nix": "",
+    "campo": "nbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "qtbase",
+    "clase": "conocida",
+    "origen_nix": "qtbase",
+    "campo": "bi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "glib",
+    "clase": "conocida",
+    "origen_nix": "glib",
+    "campo": "bi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "polkit",
+    "clase": "frontera",
+    "origen_nix": "polkit",
+    "campo": "bi",
+    "ns": "kdePackages"
+   }
+  ],
+  "qqc2-breeze-style": [
+   {
+    "dep": "cmake",
+    "clase": "conocida",
+    "origen_nix": "cmake",
+    "campo": "nbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "samurai",
+    "clase": "conocida",
+    "origen_nix": "ninja",
+    "campo": "nbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "wrap-qt6-apps-hook",
+    "clase": "nix-ismo",
+    "origen_nix": "wrap-qt6-apps-hook",
+    "campo": "nbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "kf6-move-outputs-hook",
+    "clase": "nix-ismo",
+    "origen_nix": "kf6-move-outputs-hook",
+    "campo": "nbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "qmllint-validate-hook",
+    "clase": "nix-ismo",
+    "origen_nix": "qmllint-validate-hook",
+    "campo": "nbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "",
+    "clase": "nix-ismo",
+    "origen_nix": "",
+    "campo": "nbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "qtbase",
+    "clase": "conocida",
+    "origen_nix": "qtbase",
+    "campo": "bi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "extra-cmake-modules",
+    "clase": "conocida",
+    "origen_nix": "extra-cmake-modules",
+    "campo": "pbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "kcodecs",
+    "clase": "conocida",
+    "origen_nix": "kcodecs",
+    "campo": "pbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "kcolorscheme",
+    "clase": "conocida",
+    "origen_nix": "kcolorscheme",
+    "campo": "pbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "kconfig",
+    "clase": "conocida",
+    "origen_nix": "kconfig",
+    "campo": "pbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "kguiaddons",
+    "clase": "conocida",
+    "origen_nix": "kguiaddons",
+    "campo": "pbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "kiconthemes",
+    "clase": "conocida",
+    "origen_nix": "kiconthemes",
+    "campo": "pbi",
+    "ns": "kdePackages"
+   },
+   {
+    "dep": "kirigami",
+    "clase": "conocida",
+    "origen_nix": "kirigami-wrapped",
+    "campo": "pbi",
+    "ns": "kdePackages"
+   }
+  ],
+  "shared-mime-info": [
+   {
+    "dep": "meson",
+    "clase": "conocida",
+    "origen_nix": "meson",
+    "campo": "nbi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "samurai",
+    "clase": "conocida",
+    "origen_nix": "ninja",
+    "campo": "nbi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "pkgconf",
+    "clase": "conocida",
+    "origen_nix": "pkg-config-wrapper",
+    "campo": "nbi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "gettext-tiny",
+    "clase": "conocida",
+    "origen_nix": "gettext",
+    "campo": "nbi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libxml2",
+    "clase": "conocida",
+    "origen_nix": "libxml2",
+    "campo": "nbi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "glib",
+    "clase": "conocida",
+    "origen_nix": "glib",
+    "campo": "bi",
+    "ns": "top-level"
+   }
+  ],
+  "xwayland": [
+   {
+    "dep": "pkgconf",
+    "clase": "conocida",
+    "origen_nix": "pkg-config-wrapper",
+    "campo": "nbi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "meson",
+    "clase": "conocida",
+    "origen_nix": "meson",
+    "campo": "nbi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "samurai",
+    "clase": "conocida",
+    "origen_nix": "ninja",
+    "campo": "nbi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "wayland",
+    "clase": "conocida",
+    "origen_nix": "wayland-scanner",
+    "campo": "nbi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "dri-pkgconfig-stub",
+    "clase": "frontera",
+    "origen_nix": "dri-pkgconfig-stub",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "egl-wayland",
+    "clase": "frontera",
+    "origen_nix": "egl-wayland",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libdecor",
+    "clase": "frontera",
+    "origen_nix": "libdecor",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "mesa",
+    "clase": "conocida",
+    "origen_nix": "mesa-libgbm",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libepoxy",
+    "clase": "conocida",
+    "origen_nix": "libepoxy",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libei",
+    "clase": "frontera",
+    "origen_nix": "libei",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "font-util",
+    "clase": "frontera",
+    "origen_nix": "font-util",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libglvnd",
+    "clase": "frontera",
+    "origen_nix": "libglvnd",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "glu",
+    "clase": "frontera",
+    "origen_nix": "glu",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libX11",
+    "clase": "conocida",
+    "origen_nix": "libx11",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libXau",
+    "clase": "conocida",
+    "origen_nix": "libxau",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libxaw",
+    "clase": "frontera",
+    "origen_nix": "libxaw",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libXdmcp",
+    "clase": "conocida",
+    "origen_nix": "libxdmcp",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libXext",
+    "clase": "conocida",
+    "origen_nix": "libxext",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libXfixes",
+    "clase": "conocida",
+    "origen_nix": "libxfixes",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libxfont_2",
+    "clase": "frontera",
+    "origen_nix": "libxfont_2",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libxmu",
+    "clase": "frontera",
+    "origen_nix": "libxmu",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libxpm",
+    "clase": "frontera",
+    "origen_nix": "libxpm",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libXrender",
+    "clase": "conocida",
+    "origen_nix": "libxrender",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libxres",
+    "clase": "frontera",
+    "origen_nix": "libxres",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libxt",
+    "clase": "frontera",
+    "origen_nix": "libxt",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libdrm",
+    "clase": "conocida",
+    "origen_nix": "libdrm",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libxcb",
+    "clase": "conocida",
+    "origen_nix": "libxcb",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libxkbfile",
+    "clase": "frontera",
+    "origen_nix": "libxkbfile",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libxshmfence",
+    "clase": "frontera",
+    "origen_nix": "libxshmfence",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libxcvt",
+    "clase": "conocida",
+    "origen_nix": "libxcvt",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "mesa-gl-headers",
+    "clase": "frontera",
+    "origen_nix": "mesa-gl-headers",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "openssl",
+    "clase": "conocida",
+    "origen_nix": "openssl",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "pixman",
+    "clase": "conocida",
+    "origen_nix": "pixman",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "wayland-protocols",
+    "clase": "conocida",
+    "origen_nix": "wayland-protocols",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "xkbcomp",
+    "clase": "frontera",
+    "origen_nix": "xkbcomp",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "xorgproto",
+    "clase": "conocida",
+    "origen_nix": "xorgproto",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "xtrans",
+    "clase": "conocida",
+    "origen_nix": "xtrans",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "zlib",
+    "clase": "conocida",
+    "origen_nix": "zlib",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libtirpc",
+    "clase": "frontera",
+    "origen_nix": "libtirpc",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "systemd",
+    "clase": "frontera",
+    "origen_nix": "systemd",
+    "campo": "bi",
+    "ns": "top-level"
+   },
+   {
+    "dep": "libunwind",
+    "clase": "frontera",
+    "origen_nix": "libunwind",
+    "campo": "bi",
+    "ns": "top-level"
+   }
+  ]
+ }
+}
diff --git a/docs/state/targets.toml b/docs/state/targets.toml
index 598befe4..8e906ba6 100644
--- a/docs/state/targets.toml
+++ b/docs/state/targets.toml
@@ -58,4 +58,9 @@ cola = "incoming-kde"
 paquetes = [
   "plasma-workspace", "kwin", "kscreenlocker", "breeze", "frameworkintegration",
   "qqc2-desktop-style", "plasma-integration",
+  # Huecos de RUNTIME confirmados por el triaje de la frontera (2026-07-22). Ninguno bloquea un
+  # build —todas las recetas que los piden ya están selladas— pero sin ellos el escritorio arranca
+  # roto: sin tipos de fichero, sin apps X11, sin diálogos de autorización y con los controles QML
+  # en un estilo genérico. Ver docs/state/frontera-triaje.toml para el porqué de cada uno.
+  "shared-mime-info", "xwayland", "polkit-qt-1", "qqc2-breeze-style",
 ]
diff --git a/scripts/seed-graph.py b/scripts/seed-graph.py
index 2b480f2f..e2a0b06e 100755
--- a/scripts/seed-graph.py
+++ b/scripts/seed-graph.py
@@ -76,6 +76,15 @@ _TRIAJE = ROOT / "docs/state/nixismos-triaje.txt"
 if _TRIAJE.exists():
     NIXISMOS_EXACTOS |= {l.strip() for l in _TRIAJE.read_text().splitlines()
                          if l.strip() and not l.startswith("#")}
+# Y los `provisto`: nombres que nixpkgs separa en un paquete propio y acá los da otra receta
+# (`mesa-libgbm`→mesa). Entran al MAPA, así se resuelven como arista CONOCIDA en vez de hueco.
+_ALIAS = ROOT / "docs/state/alias-triaje.txt"
+if _ALIAS.exists():
+    for _l in _ALIAS.read_text().splitlines():
+        if _l.strip() and not _l.startswith("#"):
+            _p = _l.split()
+            if len(_p) == 2:
+                MAPA.setdefault(_p[0], _p[1])
 NIXISMOS_INFIJOS = ("-hook",)   # `cargo-build-hook.sh` no termina en `-hook`, lo contiene
 # Toolchains que provee el LAB (el rootfs del sandbox), no una receta: ninguna receta Rust declara
 # `rust` ni `cargo` en `[deps].build` — están vacías y el toolchain viene de abajo. Que nixpkgs los
diff --git a/scripts/triaje.py b/scripts/triaje.py
index 1720ed9b..e8236cfc 100755
--- a/scripts/triaje.py
+++ b/scripts/triaje.py
@@ -14,6 +14,9 @@
 #               Queda registrada para que deje de reaparecer como pregunta.
 #   nix-ismo  → andamiaje de nixpkgs sin contraparte acá ⇒ vuelve a `seed-graph.py` como descarte,
 #               así la próxima corrida es más limpia. El sembrador aprende de su propio triaje.
+#   provisto  → NO falta: ya lo da otra receta con otro nombre (nixpkgs parte en varios paquetes
+#               lo que acá es uno solo: `mesa-libgbm`→mesa, `libxcb-image`→xcb-util-image).
+#               Vuelve a `seed-graph.py` como ALIAS ⇒ deja de contarse como hueco para siempre.
 #
 # NO decide nada solo. `sugerencia` propone con evidencia mecánica (cuántas recetas lo piden, si el
 # nombre tiene forma de env/wrapper de nix), pero `veredicto` arranca en `pendiente` y sólo lo
@@ -29,7 +32,8 @@ ROOT = Path(__file__).resolve().parent.parent
 FRONTERA = ROOT / "docs/state/seed-frontera.json"
 TRIAJE = ROOT / "docs/state/frontera-triaje.toml"
 DESCARTE = ROOT / "docs/state/nixismos-triaje.txt"
-VEREDICTOS = ("pendiente", "hueco", "opcional", "nix-ismo")
+ALIAS = ROOT / "docs/state/alias-triaje.txt"
+VEREDICTOS = ("pendiente", "hueco", "opcional", "nix-ismo", "provisto")
 
 # Formas de nombre que en nixpkgs son andamiaje casi seguro. Sólo alimenta `sugerencia`, nunca
 # `veredicto`: una heurística no cierra un juicio, lo abarata.
@@ -61,13 +65,15 @@ def escribir(cands):
         "# pone un HUMANO editando este fichero. Sincronizar NO pisa lo ya decidido: sólo agrega",
         "# candidatos nuevos y marca `[ausente]` los que dejaron de aparecer.",
         "#",
-        "# veredicto ∈ pendiente | hueco | opcional | nix-ismo",
+        "# veredicto ∈ pendiente | hueco | opcional | nix-ismo | provisto",
         "#   hueco    — falta de verdad. Ponelo como raíz en docs/state/targets.toml ⇒ nace un nodo",
         "#              `wanted` en el grafo y entra al drenaje. (`triaje.py --aplicar` te da la línea.)",
         "#   opcional — dep que nixpkgs habilita y nosotros no queremos. Queda registrada para que no",
         "#              vuelva a preguntarse.",
         "#   nix-ismo — andamiaje de nixpkgs sin contraparte acá. `--aplicar` lo manda al descarte del",
         "#              sembrador ⇒ la próxima corrida sale más limpia.",
+        "#   provisto — no falta: ya lo da otra receta con otro nombre. `provee = \"<receta>\"` dice cuál;",
+        "#              `--aplicar` lo manda al sembrador como alias.",
         "#",
         "# `sugerencia` es una heurística con evidencia, NO un veredicto: abarata el juicio, no lo cierra.",
         'schema = "hammer-frontera-triaje/1"',
@@ -79,6 +85,8 @@ def escribir(cands):
         lineas.append(f'veredicto = "{c.get("veredicto", "pendiente")}"')
         if c.get("sugerencia"):
             lineas.append(f'sugerencia = "{c["sugerencia"]}"')
+        if c.get("provee"):
+            lineas.append(f'provee = "{c["provee"]}"')
         if c.get("porque"):
             lineas.append(f'porque = "{c["porque"]}"')
         lineas.append(f'perfiles = {json.dumps(sorted(c.get("perfiles", [])))}')
@@ -114,7 +122,8 @@ def sincronizar():
             nuevos += 1
         cands[dep] = dict(
             veredicto=anterior.get("veredicto", "pendiente"),  # NUNCA se pisa un juicio humano
-            sugerencia=sug, porque=porque,
+            provee=anterior.get("provee"), sugerencia=sug,
+            porque=anterior.get("porque") or porque,
             perfiles=e["perfiles"], piden=e["piden"])
     # Los que ya no aparecen no se borran: se marcan. Un candidato que desaparece puede ser progreso
     # (se escribió la receta) o un cambio de nixpkgs, y conviene verlo en el `git diff`.
@@ -165,6 +174,15 @@ def aplicar():
         + "\n".join(nixismos) + ("\n" if nixismos else ""))
     print(f"== {len(nixismos)} nix-ismos → {DESCARTE.relative_to(ROOT)} (los lee seed-graph.py)")
 
+    alias = {d: c["provee"] for d, c in cands.items()
+             if c.get("veredicto") == "provisto" and c.get("provee")}
+    ALIAS.write_text(
+        "# alias-triaje.txt — DERIVADO de frontera-triaje.toml por scripts/triaje.py --aplicar.\n"
+        "# `<nombre-en-nixpkgs> <receta-de-hammer-que-lo-provee>`. Lo lee seed-graph.py como MAPA:\n"
+        "# nixpkgs parte en varios paquetes lo que acá es uno solo.\n"
+        + "".join(f"{d} {r}\n" for d, r in sorted(alias.items())))
+    print(f"== {len(alias)} alias → {ALIAS.relative_to(ROOT)} (los lee seed-graph.py como MAPA)")
+
     huecos = {d: c for d, c in cands.items() if c.get("veredicto") == "hueco"}
     if not huecos:
         print("\n== 0 huecos confirmados: no hay raíces nuevas que agregar a targets.toml")