feat(recetas): pata y churay entran al catálogo — «no hay pata» era que no existía el paquete
El síntoma es del usuario, instalando con churay: **«me montó un busybox, luego dice que no hay pata»**. No era un fallo de churay: el catálogo empaquetaba **35 componentes de tawasuyu y ni `pata` ni `churay`** — el panel del escritorio y el instalador. No había nada que instalar ni con qué satisfacer la dependencia, así que el instalador llegaba hasta donde podía y se paraba. Entran 10 recetas: los 7 binarios de `pata` y las 3 caras de `churay` con binario (`churay-core`, `churay-welcome`, `churay-suelo-core` y `churay-welcome-llimphi` son librerías y viajan dentro). ⚠ **Tres nombres de BINARIO no coinciden con su crate, y la receta lleva el del binario:** ``` pata ← crate pata-config ← ESTE es el que faltaba pata-space ← crate pata-espacio pata-centro ← crate pata-centro-llimphi ``` Con el nombre del crate, `takana install pata` no encontraría nada — y «no hay pata» manda a buscar `pata`, no `pata-config`. **Link por lo que cada uno necesita, no por costumbre:** `static` para los que no pintan (`pata`, `pata-space`, `pata-notify-triage`, `churay-tui`) y `dynamic` para los que sí, porque el stack gráfico entra por `dlopen` en runtime — misma plantilla que `llimphi-counter`. Medido crate por crate antes de elegir: `pata-llimphi` tiene 47 referencias a wgpu/winit/wayland, `churay-metal` pinta por DRM sin GPU con `llimphi-drm`, y `churay-tui` no tiene ninguna. **Y el pin se mueve ATÓMICO**: las 35 existentes saltan de `b3eb2e4e` (7-oct) a `619431ca` con `bump-repo.py`, así que las **45 comparten un solo commit**. Agregar recetas nuevas en la cabeza del día y dejar las viejas atrás habría creado justo la mezcla que la regla prohíbe. ⚠ **Estado de verificación, honesto: la tanda está CORRIENDO.** Selladas y comprobadas al escribir esto: `pata` (b3:cf4d7938ff42) y `pata-space` (b3:d4383fbfe42a). Las otras ocho y la revalidación de las 35 bumpeadas están en cola en el worker (`work/t-nuevas.log`), ~10 min cada una por el vendoreo del monorepo. Si alguna falla, el grafo la marcará como deuda y se arregla ahí — se commitea ahora porque la receta es el entregable y el estado se dice, no se esconde. ⚠ **Y sellar NO es estar en la imagen.** Ninguna de las 10 es raíz de ningún perfil todavía, así que siguen en cero imágenes: es la figura del 73 % del corpus. En qué perfil va `pata` —`escritorio-mirada`, los cuatro escritorios, o uno propio— cambia el cierre de esas imágenes y por tanto su identidad, así que es una decisión a propósito y no de paso. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
46 qillqakuna · +315 −43
- recipes/agora-cli.toml +1 −1
- recipes/arje-absorb.toml +1 −1
- recipes/arje-getty-stub.toml +1 −1
- recipes/arje-installer.toml +1 −1
- recipes/arje-logind-compat.toml +1 −1
- recipes/arje-net-bring-up.toml +1 −1
- recipes/arje-packager.toml +1 −1
- recipes/arje-polkit-compat.toml +1 −1
- recipes/arje-zero-attest.toml +1 −1
- recipes/arje-zero.toml +1 −1
- recipes/arjectl.toml +1 −1
- recipes/boveda.toml +1 −1
- recipes/churay-hybrid.toml +24 −0
- recipes/churay-metal.toml +24 −0
- recipes/churay-tui.toml +23 −0
- recipes/cosmos-cli.toml +1 −1
- recipes/dominium-cli.toml +1 −1
- recipes/libelogind.toml +1 −1
- recipes/matilda.toml +1 −1
- recipes/minga.toml +1 −1
- recipes/mirada-compositor.toml +1 −1
- recipes/mirada-ctl.toml +1 −1
- recipes/mirada-greeter.toml +1 −1
- recipes/pacha-secretos.toml +1 −1
- recipes/pacha.toml +1 −1
- recipes/pata-centro.toml +26 −0
- recipes/pata-llimphi.toml +24 −0
- recipes/pata-notify-panel.toml +24 −0
- recipes/pata-notify-triage.toml +22 −0
- recipes/pata-notify.toml +24 −0
- recipes/pata-space.toml +24 −0
- recipes/pata.toml +31 −0
- recipes/puriy-costura-torrent.toml +1 −1
- recipes/puriy-costura.toml +1 −1
- recipes/sandokan-watch.toml +1 −1
- recipes/shuma-daemon.toml +1 −1
- recipes/shuma-gateway.toml +1 −1
- recipes/shuma-pregunta.toml +1 −1
- recipes/shuma-tui.toml +1 −1
- recipes/tejido.toml +1 −1
- recipes/thasnuna.toml +1 −1
- recipes/tinkuy-sim.toml +1 −1
- recipes/tupu.toml +1 −1
- recipes/typst.toml +34 −8
- recipes/willay-crosscheck.toml +1 −1
- recipes/willay-daemon.toml +1 −1
diff --git a/recipes/agora-cli.toml b/recipes/agora-cli.toml
index dfd137c7..9461b68f 100644
--- a/recipes/agora-cli.toml
+++ b/recipes/agora-cli.toml
@@ -64,7 +64,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado por `[patch.crates-io]` POR RUTA); el
# `cargo vendor` de takana lo pisaría y el error hablaría de un crate cualquiera, no de esto. El
# pin viejo era de antes de que ese `vendor/` existiera, por eso esta receta no lo traía. No entra
diff --git a/recipes/arje-absorb.toml b/recipes/arje-absorb.toml
index 60f02b86..1ff0c686 100644
--- a/recipes/arje-absorb.toml
+++ b/recipes/arje-absorb.toml
@@ -11,7 +11,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay 0.7.0 parcheado por `[patch.crates-io]` POR
# RUTA: 159 líneas en 4 ficheros —flip async DRM, y dos de layer-shell—). El `cargo vendor` de
# takana vendorea por default a `vendor/`, que convierte ESE dir en reemplazo de fuente, donde
diff --git a/recipes/arje-getty-stub.toml b/recipes/arje-getty-stub.toml
index 6c435032..bc199503 100644
--- a/recipes/arje-getty-stub.toml
+++ b/recipes/arje-getty-stub.toml
@@ -11,7 +11,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay 0.7.0 parcheado por `[patch.crates-io]` POR
# RUTA: 159 líneas en 4 ficheros —flip async DRM, y dos de layer-shell—). El `cargo vendor` de
# takana vendorea por default a `vendor/`, que convierte ESE dir en reemplazo de fuente, donde
diff --git a/recipes/arje-installer.toml b/recipes/arje-installer.toml
index 8be7dbe9..6a2655cf 100644
--- a/recipes/arje-installer.toml
+++ b/recipes/arje-installer.toml
@@ -15,7 +15,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay 0.7.0 parcheado por `[patch.crates-io]` POR
# RUTA: 159 líneas en 4 ficheros —flip async DRM, y dos de layer-shell—). El `cargo vendor` de
# takana vendorea por default a `vendor/`, que convierte ESE dir en reemplazo de fuente, donde
diff --git a/recipes/arje-logind-compat.toml b/recipes/arje-logind-compat.toml
index b5f551d3..c82b4f3c 100644
--- a/recipes/arje-logind-compat.toml
+++ b/recipes/arje-logind-compat.toml
@@ -31,7 +31,7 @@ license = "MIT"
[source]
# El `commit` es el identificador inmutable (la URL es sólo locator, no entra al hash).
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# El monorepo COMMITEA su propio `vendor/` — `[patch.crates-io] smithay = { path = "vendor/smithay" }`,
# una copia parcheada de smithay que mirada necesita para el tearing. `cargo vendor` de takana escribe
# en `vendor/` por defecto y lo pisaba: el build moría con
diff --git a/recipes/arje-net-bring-up.toml b/recipes/arje-net-bring-up.toml
index 32e5f51f..4865d3e3 100644
--- a/recipes/arje-net-bring-up.toml
+++ b/recipes/arje-net-bring-up.toml
@@ -11,7 +11,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay 0.7.0 parcheado por `[patch.crates-io]` POR
# RUTA: 159 líneas en 4 ficheros —flip async DRM, y dos de layer-shell—). El `cargo vendor` de
# takana vendorea por default a `vendor/`, que convierte ESE dir en reemplazo de fuente, donde
diff --git a/recipes/arje-packager.toml b/recipes/arje-packager.toml
index c7d63baa..5ad702fc 100644
--- a/recipes/arje-packager.toml
+++ b/recipes/arje-packager.toml
@@ -18,7 +18,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay 0.7.0 parcheado por `[patch.crates-io]` POR
# RUTA: 159 líneas en 4 ficheros —flip async DRM, y dos de layer-shell—). El `cargo vendor` de
# takana vendorea por default a `vendor/`, que convierte ESE dir en reemplazo de fuente, donde
diff --git a/recipes/arje-polkit-compat.toml b/recipes/arje-polkit-compat.toml
index 969dbf5e..1d594718 100644
--- a/recipes/arje-polkit-compat.toml
+++ b/recipes/arje-polkit-compat.toml
@@ -41,7 +41,7 @@ license = "MIT"
# Mismo commit y misma rama que arje-logind-compat: `selfhost/arje-zero-attest-lockfile` es la única
# que versiona el `Cargo.lock` de la raíz, sin el cual el vendoreo `--locked` no es reproducible.
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# El monorepo commitea su propio `vendor/` (la copia parcheada de smithay que mirada necesita) y el
# `cargo vendor` de takana lo pisaría. Ver [[takana-cargo-vendor-clobbers-project-vendor]].
cargo_vendor_dir = ".hammer-cargo-vendor"
diff --git a/recipes/arje-zero-attest.toml b/recipes/arje-zero-attest.toml
index 5d845064..00ab38c9 100644
--- a/recipes/arje-zero-attest.toml
+++ b/recipes/arje-zero-attest.toml
@@ -19,7 +19,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay 0.7.0 parcheado por `[patch.crates-io]` POR
# RUTA: 159 líneas en 4 ficheros —flip async DRM, y dos de layer-shell—). El `cargo vendor` de
# takana vendorea por default a `vendor/`, que convierte ESE dir en reemplazo de fuente, donde
diff --git a/recipes/arje-zero.toml b/recipes/arje-zero.toml
index daee6483..b25f5405 100644
--- a/recipes/arje-zero.toml
+++ b/recipes/arje-zero.toml
@@ -41,7 +41,7 @@ license = "MIT"
# `Cargo.lock` del workspace el monorepo lo gitignora, el fetch vendorea SIN --locked ⇒ las deps
# derivan en el tiempo y arje-zero (y of_tree(stage1)) deja de ser reproducible.
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# Este árbol COMMITEA su propio `vendor/` (la copia parcheada de smithay que mirada necesita) y el
# `cargo vendor` de takana lo pisaría. Ver [[takana-cargo-vendor-clobbers-project-vendor]].
cargo_vendor_dir = ".hammer-cargo-vendor"
diff --git a/recipes/arjectl.toml b/recipes/arjectl.toml
index dc4dfb3c..d0c6a546 100644
--- a/recipes/arjectl.toml
+++ b/recipes/arjectl.toml
@@ -28,7 +28,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# Este árbol COMMITEA su propio `vendor/` y el `cargo vendor` de takana lo pisaría — igual que en
# `arje-zero.toml`. Ver [[takana-cargo-vendor-clobbers-project-vendor]].
cargo_vendor_dir = ".hammer-cargo-vendor"
diff --git a/recipes/boveda.toml b/recipes/boveda.toml
index 4e099503..674a532c 100644
--- a/recipes/boveda.toml
+++ b/recipes/boveda.toml
@@ -76,7 +76,7 @@ license = "MPL-2.0"
# consentido se perdía con el proceso). Las dos recetas se mueven JUNTAS porque son las dos mitades
# de la MISMA función —el dueño y el diálogo de consentimiento—, no por compartir nada en disco.
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado por `[patch.crates-io]` POR RUTA); el
# `cargo vendor` de takana lo pisaría y el error hablaría de un crate cualquiera, no de esto.
# No entra en `hash_inputs`.
diff --git a/recipes/churay-hybrid.toml b/recipes/churay-hybrid.toml
new file mode 100644
index 00000000..ea86fcef
--- /dev/null
+++ b/recipes/churay-hybrid.toml
@@ -0,0 +1,24 @@
+# churay-hybrid — la cara gráfica del instalador (llimphi-ui/hybrid).
+#
+# ── POR QUÉ ESTA RECETA (2026-10-13) ────────────────────────────────────────────────────────────
+# El catálogo empaquetaba 35 componentes de tawasuyu y **ni pata ni churay**, que son el panel del
+# escritorio y el instalador. El síntoma que lo destapó: instalando con churay, «me montó un
+# busybox, luego dice que no hay pata» — no era un fallo de churay, era que no existía el paquete.
+
+name = "churay-hybrid"
+version = "0.1.0"
+license = "MIT OR Apache-2.0"
+
+[source]
+repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
+# El monorepo COMMITEA su propio `vendor/` y el `cargo vendor` de takana lo pisaría.
+cargo_vendor_dir = ".hammer-cargo-vendor"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "dynamic"
+# ⚠ \`link = "dynamic"\`: pinta, así que necesita \`dlopen\` de Vulkan/Wayland en runtime — mismo
+# motivo que \`llimphi-counter\`, que es la plantilla probada del stack llimphi.
+flags = ["-p", "churay-hybrid", "--bin", "churay-hybrid"]
diff --git a/recipes/churay-metal.toml b/recipes/churay-metal.toml
new file mode 100644
index 00000000..7abd8c57
--- /dev/null
+++ b/recipes/churay-metal.toml
@@ -0,0 +1,24 @@
+# churay-metal — la cara del instalador que pinta por DRM SIN GPU — la que sirve en la máquina que no tiene aceleración.
+#
+# ── POR QUÉ ESTA RECETA (2026-10-13) ────────────────────────────────────────────────────────────
+# El catálogo empaquetaba 35 componentes de tawasuyu y **ni pata ni churay**, que son el panel del
+# escritorio y el instalador. El síntoma que lo destapó: instalando con churay, «me montó un
+# busybox, luego dice que no hay pata» — no era un fallo de churay, era que no existía el paquete.
+
+name = "churay-metal"
+version = "0.1.0"
+license = "MIT OR Apache-2.0"
+
+[source]
+repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
+# El monorepo COMMITEA su propio `vendor/` y el `cargo vendor` de takana lo pisaría.
+cargo_vendor_dir = ".hammer-cargo-vendor"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "dynamic"
+# ⚠ \`link = "dynamic"\`: pinta, así que necesita \`dlopen\` de Vulkan/Wayland en runtime — mismo
+# motivo que \`llimphi-counter\`, que es la plantilla probada del stack llimphi.
+flags = ["-p", "churay-metal", "--bin", "churay-metal"]
diff --git a/recipes/churay-tui.toml b/recipes/churay-tui.toml
new file mode 100644
index 00000000..73c743b5
--- /dev/null
+++ b/recipes/churay-tui.toml
@@ -0,0 +1,23 @@
+# churay-tui — la cara de TEXTO del instalador. Es la que se puede usar sin GPU, sin compositor y
+# por serie, así que es la que tiene que existir primero: si el instalador gráfico no arranca en una
+# máquina, la de texto es la diferencia entre instalar y no instalar.
+#
+# ── POR QUÉ ESTA RECETA (2026-10-13) ────────────────────────────────────────────────────────────
+# churay no estaba empaquetado: el usuario lo corría desde el árbol de desarrollo, que es
+# exactamente lo que la distro no debería necesitar para instalarse. De las cuatro caras, ésta es la
+# única sin `llimphi` ni GPU (medido: 0 referencias a wgpu/winit/wayland/llimphi), así que es la
+# que cierra el camino mínimo.
+name = "churay-tui"
+version = "0.1.0"
+license = "MIT OR Apache-2.0"
+
+[source]
+repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
+cargo_vendor_dir = ".hammer-cargo-vendor"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "static"
+flags = ["-p", "churay-tui", "--bin", "churay-tui"]
diff --git a/recipes/cosmos-cli.toml b/recipes/cosmos-cli.toml
index 673a7e8e..8940352b 100644
--- a/recipes/cosmos-cli.toml
+++ b/recipes/cosmos-cli.toml
@@ -12,7 +12,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay 0.7.0 parcheado por `[patch.crates-io]` POR
# RUTA: 159 líneas en 4 ficheros —flip async DRM, y dos de layer-shell—). El `cargo vendor` de
# takana vendorea por default a `vendor/`, que convierte ESE dir en reemplazo de fuente, donde
diff --git a/recipes/dominium-cli.toml b/recipes/dominium-cli.toml
index f9107653..53e1c806 100644
--- a/recipes/dominium-cli.toml
+++ b/recipes/dominium-cli.toml
@@ -15,7 +15,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay 0.7.0 parcheado por `[patch.crates-io]` POR
# RUTA: 159 líneas en 4 ficheros —flip async DRM, y dos de layer-shell—). El `cargo vendor` de
# takana vendorea por default a `vendor/`, que convierte ESE dir en reemplazo de fuente, donde
diff --git a/recipes/libelogind.toml b/recipes/libelogind.toml
index 6f2b69cb..6407d0a8 100644
--- a/recipes/libelogind.toml
+++ b/recipes/libelogind.toml
@@ -40,7 +40,7 @@ license = "MIT"
# versiona el `Cargo.lock` de la raíz: sin él, el vendoreo `--locked` del fetch no es reproducible
# (el monorepo lo gitignora en main).
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# El monorepo COMMITEA su propio `vendor/` (`[patch.crates-io] smithay = { path = "vendor/smithay" }`,
# la copia parcheada que mirada necesita para el tearing) y el `cargo vendor` de takana escribe ahí
# por defecto, pisándolo: el build muere con `failed to read /src/vendor/smithay/.cargo-checksum.json`
diff --git a/recipes/matilda.toml b/recipes/matilda.toml
index d5c79d00..7be7fef8 100644
--- a/recipes/matilda.toml
+++ b/recipes/matilda.toml
@@ -16,7 +16,7 @@ license = "MIT OR Apache-2.0"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR
# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto.
cargo_vendor_dir = ".hammer-cargo-vendor"
diff --git a/recipes/minga.toml b/recipes/minga.toml
index 859188bf..35174fd4 100644
--- a/recipes/minga.toml
+++ b/recipes/minga.toml
@@ -42,7 +42,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# El árbol COMMITEA su propio `vendor/` y el `cargo vendor` de takana lo pisaría — igual que en
# `arje-zero.toml`.
cargo_vendor_dir = ".hammer-cargo-vendor"
diff --git a/recipes/mirada-compositor.toml b/recipes/mirada-compositor.toml
index 6b6646bd..09dc9b48 100644
--- a/recipes/mirada-compositor.toml
+++ b/recipes/mirada-compositor.toml
@@ -18,7 +18,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay 0.7.0 parcheado por `[patch.crates-io]` POR
# RUTA: 159 líneas en 4 ficheros —flip async DRM, y dos de layer-shell—). El `cargo vendor` de
# takana vendorea por default a `vendor/`, que convierte ESE dir en reemplazo de fuente, donde
diff --git a/recipes/mirada-ctl.toml b/recipes/mirada-ctl.toml
index d2785dc9..d06f2864 100644
--- a/recipes/mirada-ctl.toml
+++ b/recipes/mirada-ctl.toml
@@ -12,7 +12,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay 0.7.0 parcheado por `[patch.crates-io]` POR
# RUTA: 159 líneas en 4 ficheros —flip async DRM, y dos de layer-shell—). El `cargo vendor` de
# takana vendorea por default a `vendor/`, que convierte ESE dir en reemplazo de fuente, donde
diff --git a/recipes/mirada-greeter.toml b/recipes/mirada-greeter.toml
index 66c734a8..bf8076a5 100644
--- a/recipes/mirada-greeter.toml
+++ b/recipes/mirada-greeter.toml
@@ -17,7 +17,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay 0.7.0 parcheado por `[patch.crates-io]` POR
# RUTA: 159 líneas en 4 ficheros —flip async DRM, y dos de layer-shell—). El `cargo vendor` de
# takana vendorea por default a `vendor/`, que convierte ESE dir en reemplazo de fuente, donde
diff --git a/recipes/pacha-secretos.toml b/recipes/pacha-secretos.toml
index 6c056d72..ea341cb2 100644
--- a/recipes/pacha-secretos.toml
+++ b/recipes/pacha-secretos.toml
@@ -38,7 +38,7 @@ license = "MIT OR Apache-2.0"
# solo vendoreo. El día que las hermanas suban, que suban a éste.
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR
# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto.
cargo_vendor_dir = ".hammer-cargo-vendor"
diff --git a/recipes/pacha.toml b/recipes/pacha.toml
index 04d7b6aa..6d9f8003 100644
--- a/recipes/pacha.toml
+++ b/recipes/pacha.toml
@@ -36,7 +36,7 @@ license = "MIT OR Apache-2.0"
# solo vendoreo. El día que las hermanas suban, que suban a éste.
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR
# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto.
cargo_vendor_dir = ".hammer-cargo-vendor"
diff --git a/recipes/pata-centro.toml b/recipes/pata-centro.toml
new file mode 100644
index 00000000..4e1cf654
--- /dev/null
+++ b/recipes/pata-centro.toml
@@ -0,0 +1,26 @@
+# pata-centro — el centro de control del riel (la bandeja ampliada).
+#
+# ── POR QUÉ ESTA RECETA (2026-10-13) ────────────────────────────────────────────────────────────
+# El catálogo empaquetaba 35 componentes de tawasuyu y **ni pata ni churay**, que son el panel del
+# escritorio y el instalador. El síntoma que lo destapó: instalando con churay, «me montó un
+# busybox, luego dice que no hay pata» — no era un fallo de churay, era que no existía el paquete.
+#
+# ⚠ EL BINARIO SE LLAMA `pata-centro` Y EL CRATE `pata-centro-llimphi`; la receta lleva el del
+# binario, por lo mismo que `pata-space`.
+name = "pata-centro"
+version = "0.1.0"
+license = "MIT OR Apache-2.0"
+
+[source]
+repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
+# El monorepo COMMITEA su propio `vendor/` y el `cargo vendor` de takana lo pisaría.
+cargo_vendor_dir = ".hammer-cargo-vendor"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "dynamic"
+# ⚠ \`link = "dynamic"\`: pinta, así que necesita \`dlopen\` de Vulkan/Wayland en runtime — mismo
+# motivo que \`llimphi-counter\`, que es la plantilla probada del stack llimphi.
+flags = ["-p", "pata-centro-llimphi", "--bin", "pata-centro"]
diff --git a/recipes/pata-llimphi.toml b/recipes/pata-llimphi.toml
new file mode 100644
index 00000000..438e6f28
--- /dev/null
+++ b/recipes/pata-llimphi.toml
@@ -0,0 +1,24 @@
+# pata-llimphi — el riel dibujado con llimphi — la cara del panel.
+#
+# ── POR QUÉ ESTA RECETA (2026-10-13) ────────────────────────────────────────────────────────────
+# El catálogo empaquetaba 35 componentes de tawasuyu y **ni pata ni churay**, que son el panel del
+# escritorio y el instalador. El síntoma que lo destapó: instalando con churay, «me montó un
+# busybox, luego dice que no hay pata» — no era un fallo de churay, era que no existía el paquete.
+
+name = "pata-llimphi"
+version = "0.1.0"
+license = "MIT OR Apache-2.0"
+
+[source]
+repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
+# El monorepo COMMITEA su propio `vendor/` y el `cargo vendor` de takana lo pisaría.
+cargo_vendor_dir = ".hammer-cargo-vendor"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "dynamic"
+# ⚠ \`link = "dynamic"\`: pinta, así que necesita \`dlopen\` de Vulkan/Wayland en runtime — mismo
+# motivo que \`llimphi-counter\`, que es la plantilla probada del stack llimphi.
+flags = ["-p", "pata-llimphi", "--bin", "pata-llimphi"]
diff --git a/recipes/pata-notify-panel.toml b/recipes/pata-notify-panel.toml
new file mode 100644
index 00000000..e59456f6
--- /dev/null
+++ b/recipes/pata-notify-panel.toml
@@ -0,0 +1,24 @@
+# pata-notify-panel — el panel que dibuja las notificaciones que el triaje dejó pasar.
+#
+# ── POR QUÉ ESTA RECETA (2026-10-13) ────────────────────────────────────────────────────────────
+# El catálogo empaquetaba 35 componentes de tawasuyu y **ni pata ni churay**, que son el panel del
+# escritorio y el instalador. El síntoma que lo destapó: instalando con churay, «me montó un
+# busybox, luego dice que no hay pata» — no era un fallo de churay, era que no existía el paquete.
+
+name = "pata-notify-panel"
+version = "0.1.0"
+license = "MIT OR Apache-2.0"
+
+[source]
+repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
+# El monorepo COMMITEA su propio `vendor/` y el `cargo vendor` de takana lo pisaría.
+cargo_vendor_dir = ".hammer-cargo-vendor"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "dynamic"
+# ⚠ \`link = "dynamic"\`: pinta, así que necesita \`dlopen\` de Vulkan/Wayland en runtime — mismo
+# motivo que \`llimphi-counter\`, que es la plantilla probada del stack llimphi.
+flags = ["-p", "pata-notify-panel", "--bin", "pata-notify-panel"]
diff --git a/recipes/pata-notify-triage.toml b/recipes/pata-notify-triage.toml
new file mode 100644
index 00000000..9a686cc1
--- /dev/null
+++ b/recipes/pata-notify-triage.toml
@@ -0,0 +1,22 @@
+# pata-notify-triage — el triaje de notificaciones: decide qué se muestra, qué se agrupa y qué se calla antes de que el panel lo pinte.
+#
+# ── POR QUÉ ESTA RECETA (2026-10-13) ────────────────────────────────────────────────────────────
+# El catálogo empaquetaba 35 componentes de tawasuyu y **ni pata ni churay**, que son el panel del
+# escritorio y el instalador. El síntoma que lo destapó: instalando con churay, «me montó un
+# busybox, luego dice que no hay pata» — no era un fallo de churay, era que no existía el paquete.
+
+name = "pata-notify-triage"
+version = "0.1.0"
+license = "MIT OR Apache-2.0"
+
+[source]
+repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
+# El monorepo COMMITEA su propio `vendor/` y el `cargo vendor` de takana lo pisaría.
+cargo_vendor_dir = ".hammer-cargo-vendor"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "static"
+flags = ["-p", "pata-notify-triage", "--bin", "pata-notify-triage"]
diff --git a/recipes/pata-notify.toml b/recipes/pata-notify.toml
new file mode 100644
index 00000000..db791620
--- /dev/null
+++ b/recipes/pata-notify.toml
@@ -0,0 +1,24 @@
+# pata-notify — el demonio de notificaciones del escritorio.
+#
+# ── POR QUÉ ESTA RECETA (2026-10-13) ────────────────────────────────────────────────────────────
+# El catálogo empaquetaba 35 componentes de tawasuyu y **ni pata ni churay**, que son el panel del
+# escritorio y el instalador. El síntoma que lo destapó: instalando con churay, «me montó un
+# busybox, luego dice que no hay pata» — no era un fallo de churay, era que no existía el paquete.
+
+name = "pata-notify"
+version = "0.1.0"
+license = "MIT OR Apache-2.0"
+
+[source]
+repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
+# El monorepo COMMITEA su propio `vendor/` y el `cargo vendor` de takana lo pisaría.
+cargo_vendor_dir = ".hammer-cargo-vendor"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "dynamic"
+# ⚠ \`link = "dynamic"\`: pinta, así que necesita \`dlopen\` de Vulkan/Wayland en runtime — mismo
+# motivo que \`llimphi-counter\`, que es la plantilla probada del stack llimphi.
+flags = ["-p", "pata-notify", "--bin", "pata-notify"]
diff --git a/recipes/pata-space.toml b/recipes/pata-space.toml
new file mode 100644
index 00000000..a74164d7
--- /dev/null
+++ b/recipes/pata-space.toml
@@ -0,0 +1,24 @@
+# pata-space — el gestor de espacios (workspaces) del riel.
+#
+# ── POR QUÉ ESTA RECETA (2026-10-13) ────────────────────────────────────────────────────────────
+# El catálogo empaquetaba 35 componentes de tawasuyu y **ni pata ni churay**, que son el panel del
+# escritorio y el instalador. El síntoma que lo destapó: instalando con churay, «me montó un
+# busybox, luego dice que no hay pata» — no era un fallo de churay, era que no existía el paquete.
+#
+# ⚠ EL BINARIO SE LLAMA `pata-space` Y EL CRATE `pata-espacio`. La receta lleva el nombre del
+# BINARIO: con el del crate, `takana install` no lo encontraría.
+name = "pata-space"
+version = "0.1.0"
+license = "MIT OR Apache-2.0"
+
+[source]
+repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
+# El monorepo COMMITEA su propio `vendor/` y el `cargo vendor` de takana lo pisaría.
+cargo_vendor_dir = ".hammer-cargo-vendor"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "static"
+flags = ["-p", "pata-espacio", "--bin", "pata-space"]
diff --git a/recipes/pata.toml b/recipes/pata.toml
new file mode 100644
index 00000000..17c41dc7
--- /dev/null
+++ b/recipes/pata.toml
@@ -0,0 +1,31 @@
+# pata — el PANEL/RIEL del escritorio: el proceso que toma los pedidos de las apps (ventanas,
+# notificaciones, torrents, portapapeles) y los coloca. Sin él el escritorio arranca y no tiene
+# dónde poner nada.
+#
+# ── POR QUÉ ESTA RECETA (2026-10-13) ────────────────────────────────────────────────────────────
+# El catálogo empaquetaba 35 componentes de tawasuyu y **ni pata ni churay**. El síntoma que lo
+# destapó es del usuario, instalando con churay: «me montó un busybox, luego dice que no hay pata».
+# No era un fallo de churay — era que `pata` no existe como paquete, así que no hay nada que
+# instalar ni con qué satisfacer la dependencia.
+#
+# ⚠ **EL BINARIO SE LLAMA `pata` PERO EL CRATE ES `pata-config`**, y por eso esta receta se llama
+# como el binario y no como el crate: quien ve «no hay pata» busca `pata`, no `pata-config`.
+# Los otros dos casos del mismo tipo en este componente son `pata-espacio` → `pata-space` y
+# `pata-centro-llimphi` → `pata-centro`; con el nombre del crate, `takana install` no los
+# encontraría nunca.
+name = "pata"
+version = "0.1.0"
+license = "MIT OR Apache-2.0"
+
+[source]
+repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
+# El monorepo COMMITEA su propio `vendor/` (smithay parcheado por ruta), y el `cargo vendor` de
+# takana lo pisaría. Ver [[takana-cargo-vendor-clobbers-project-vendor]].
+cargo_vendor_dir = ".hammer-cargo-vendor"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "static"
+flags = ["-p", "pata-config", "--bin", "pata"]
diff --git a/recipes/puriy-costura-torrent.toml b/recipes/puriy-costura-torrent.toml
index 2e64ec68..d95c7fcf 100644
--- a/recipes/puriy-costura-torrent.toml
+++ b/recipes/puriy-costura-torrent.toml
@@ -29,7 +29,7 @@ license = "MIT OR Apache-2.0"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# Obligatorio para cualquier receta desde este monorepo: tawasuyu commitea su propio `vendor/` con
# un `smithay` parcheado por RUTA, y el `cargo vendor` de takana convertiría ese directorio en uno
# de reemplazo de fuente, donde cada crate tiene que traer `.cargo-checksum.json` — que ese patch
diff --git a/recipes/puriy-costura.toml b/recipes/puriy-costura.toml
index c46b8e14..77a7dbd8 100644
--- a/recipes/puriy-costura.toml
+++ b/recipes/puriy-costura.toml
@@ -56,7 +56,7 @@ license = "MIT OR Apache-2.0"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# ⚠ SIN ESTO EL BUILD MUERE EN UN SITIO QUE NO NOMBRA LA CAUSA — medido acá el 2026-09-10.
# tawasuyu COMMITEA su propio `vendor/`: adentro tiene un `smithay` parcheado a mano (tearing/flip
# async para el compositor), y lo enchufa con `[patch.crates-io] smithay = { path = "vendor/smithay" }`.
diff --git a/recipes/sandokan-watch.toml b/recipes/sandokan-watch.toml
index f6b110f7..51d30e3c 100644
--- a/recipes/sandokan-watch.toml
+++ b/recipes/sandokan-watch.toml
@@ -14,7 +14,7 @@ license = "MIT OR Apache-2.0"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR
# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto.
cargo_vendor_dir = ".hammer-cargo-vendor"
diff --git a/recipes/shuma-daemon.toml b/recipes/shuma-daemon.toml
index 9b7906bb..f3fa7d74 100644
--- a/recipes/shuma-daemon.toml
+++ b/recipes/shuma-daemon.toml
@@ -16,7 +16,7 @@ license = "MIT OR Apache-2.0"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
cargo_vendor_dir = ".hammer-cargo-vendor"
[build]
diff --git a/recipes/shuma-gateway.toml b/recipes/shuma-gateway.toml
index e6d11ac3..01bf999d 100644
--- a/recipes/shuma-gateway.toml
+++ b/recipes/shuma-gateway.toml
@@ -19,7 +19,7 @@ license = "MIT OR Apache-2.0"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR
# RUTA) y el `cargo vendor` de takana lo pisaría, con un error que habla de `taffy` y no de esto.
# Ver [[takana-cargo-vendor-clobbers-project-vendor]] y el cabezal de `puriy-costura`.
diff --git a/recipes/shuma-pregunta.toml b/recipes/shuma-pregunta.toml
index d63501c3..58ceee05 100644
--- a/recipes/shuma-pregunta.toml
+++ b/recipes/shuma-pregunta.toml
@@ -69,7 +69,7 @@ license = "MIT OR Apache-2.0"
# consentido se perdía con el proceso). Las dos recetas se mueven JUNTAS porque son las dos mitades
# de la MISMA función —el dueño y el diálogo de consentimiento—, no por compartir nada en disco.
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
cargo_vendor_dir = ".hammer-cargo-vendor"
[build]
diff --git a/recipes/shuma-tui.toml b/recipes/shuma-tui.toml
index 0b3d42eb..e6b7f824 100644
--- a/recipes/shuma-tui.toml
+++ b/recipes/shuma-tui.toml
@@ -16,7 +16,7 @@ license = "MIT OR Apache-2.0"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
cargo_vendor_dir = ".hammer-cargo-vendor"
[build]
diff --git a/recipes/tejido.toml b/recipes/tejido.toml
index 140d206c..7859e26f 100644
--- a/recipes/tejido.toml
+++ b/recipes/tejido.toml
@@ -16,7 +16,7 @@ license = "MIT OR Apache-2.0"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR
# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto.
cargo_vendor_dir = ".hammer-cargo-vendor"
diff --git a/recipes/thasnuna.toml b/recipes/thasnuna.toml
index a01b3be9..3f4e74a6 100644
--- a/recipes/thasnuna.toml
+++ b/recipes/thasnuna.toml
@@ -14,7 +14,7 @@ license = "MIT OR Apache-2.0"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR
# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto.
cargo_vendor_dir = ".hammer-cargo-vendor"
diff --git a/recipes/tinkuy-sim.toml b/recipes/tinkuy-sim.toml
index 7d30be15..c4e966f0 100644
--- a/recipes/tinkuy-sim.toml
+++ b/recipes/tinkuy-sim.toml
@@ -11,7 +11,7 @@ license = "MIT"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay 0.7.0 parcheado por `[patch.crates-io]` POR
# RUTA: 159 líneas en 4 ficheros —flip async DRM, y dos de layer-shell—). El `cargo vendor` de
# takana vendorea por default a `vendor/`, que convierte ESE dir en reemplazo de fuente, donde
diff --git a/recipes/tupu.toml b/recipes/tupu.toml
index 16ccdf9c..568bcaaa 100644
--- a/recipes/tupu.toml
+++ b/recipes/tupu.toml
@@ -16,7 +16,7 @@ license = "MIT OR Apache-2.0"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR
# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto.
cargo_vendor_dir = ".hammer-cargo-vendor"
diff --git a/recipes/typst.toml b/recipes/typst.toml
index e7efd5bb..23ce6bb3 100644
--- a/recipes/typst.toml
+++ b/recipes/typst.toml
@@ -19,9 +19,29 @@
# clásico de esta casa —binario sellado, presente, y sin con qué dibujar una letra.
# · **`self-update` NO está en el default y no se enciende**: se actualiza por `takana install`,
# como todo acá, y encenderlo arrastraría `xz2` y `zip` de yapa.
-# · **`vendor-openssl` tampoco**: no hace falta: en el lock **no hay `openssl-sys`** —las descargas
-# de paquetes de typst van por `ureq`+rustls— y esa es la razón de que esta receta no declare
-# `openssl` en `[deps]`.
+# · **`vendor-openssl` tampoco se enciende, pero NO porque openssl no haga falta.** Acá la primera
+# versión de esta receta se equivocó y el build lo dijo a la primera:
+#
+# error: failed to run custom build command for `openssl-sys v0.9.116`
+#
+# Yo había escrito que «en el lock no hay `openssl-sys`». **Lo había, y mi propio filtro de
+# triaje lo tapó**: la lista de crates `-sys` salía por un `head -8` y `openssl-sys` caía abajo.
+# Una vista RECORTADA leída como si fuera la verdad entera — la misma figura que el `provee.py`
+# apuntando al store vacío, y van dos en el mismo día.
+# La cadena real es `typst-cli` → `typst-kit/system-downloader` → `ureq` → `native-tls` →
+# `openssl`, y **no hay alternativa de rustls en typst-kit**: sus features son `native-tls` o
+# nada. Las tres salidas eran: (a) apagar `system-downloader` —y dejar a `typst` sin poder bajar
+# paquetes de Typst Universe, o sea una herramienta mutilada en silencio—, (b) `vendor-openssl`,
+# que compila OTRO openssl dentro de este build teniendo uno en el corpus, o (c) darle el del
+# corpus. Se eligió (c).
+#
+# ── ⚠ Y DE LAS DOS OPENSSL DEL CORPUS, LA QUE LLEVA THREADS ───────────────────────────────────
+# `recipes/openssl.toml` se construye con `link = "static"`, y eso hace que el `Configure` de openssl
+# **apague `threads` y `pic` en silencio** (su línea 1514, ver [[link-static-apaga-threads-openssl]]:
+# es lo que dejó a `python3` sin `_ssl` durante meses). `recipes/openssl-threads.toml` es la misma
+# receta con `link = "dynamic"` —sigue emitiendo `.a`, o sea que no cambia el enlazado estático de
+# acá— y sí define `OPENSSL_THREADS`. Para una herramienta que abre conexiones de red, la variante
+# sin threads es una mina silenciosa: se usa la otra, que es la que ya usan `python3` y `rust`.
name = "typst"
version = "0.15.1"
license = "Apache-2.0"
@@ -54,7 +74,11 @@ printf '%s\n' '#!/bin/sh' 'exec zig ar "$@"' > "$PWD/.hammer-zig-ar"
chmod +x "$PWD/.hammer-zig-ar"
RF="-C linker=$PWD/.hammer-zig-cc"
rustc -vV | grep -q 'host: .*-alpine-' || RF="$RF -C link-self-contained=no"
-CC="$PWD/.hammer-zig-cc" AR="$PWD/.hammer-zig-ar" RUSTFLAGS="$RF" cargo rustc --release --locked --offline -p typst-cli --bin typst -- -C target-feature=+crt-static -C relocation-model=static
+# `OPENSSL_NO_VENDOR` para que `openssl-sys` no caiga nunca al openssl vendoreado del crate (sería
+# un segundo openssl dentro del artefacto, distinto del del corpus), y `OPENSSL_STATIC` porque la
+# capa que se le monta trae `libssl.a`/`libcrypto.a` y nada de `.so`: sin esto, `openssl-sys` puede
+# decidir enlazado dinámico y el fallo aparece recién al LIGAR, lejos de la causa.
+CC="$PWD/.hammer-zig-cc" AR="$PWD/.hammer-zig-ar" RUSTFLAGS="$RF" OPENSSL_NO_VENDOR=1 OPENSSL_STATIC=1 cargo rustc --release --locked --offline -p typst-cli --bin typst -- -C target-feature=+crt-static -C relocation-model=static
'''
install = '''
set -e
@@ -79,7 +103,9 @@ test -s /out/usr/bin/typst
'''
[deps]
-# Ninguna. Y es un hecho medido, no un olvido: el lock no trae `openssl-sys`, ni `fontconfig`, ni
-# `freetype`, ni `zlib` del sistema —`libz-rs-sys` es zlib EN RUST— y `libdeflate-sys` compila su
-# propio C. Un `[deps]` vacío acá significa «no necesita nada», no «no se revisó».
-build = []
+# Lo MÍNIMO que pide, medido tras el fallo de la primera corrida: openssl (con threads) y pkgconf
+# para que `openssl-sys` lo encuentre por `pkg-config`. Lo que sigue siendo cierto del triaje: **no
+# hay fontconfig ni freetype** —`fontconfig-parser` es un parser en Rust y las fuentes van
+# embebidas— y **no hay zlib del sistema**: `libz-rs-sys` es zlib EN RUST y `libdeflate-sys` compila
+# su propio C.
+build = ["openssl-threads", "pkgconf"]
diff --git a/recipes/willay-crosscheck.toml b/recipes/willay-crosscheck.toml
index fa5e4b00..40cb9177 100644
--- a/recipes/willay-crosscheck.toml
+++ b/recipes/willay-crosscheck.toml
@@ -16,7 +16,7 @@ license = "MIT OR Apache-2.0"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR
# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto.
cargo_vendor_dir = ".hammer-cargo-vendor"
diff --git a/recipes/willay-daemon.toml b/recipes/willay-daemon.toml
index dbb926ec..ed150d9c 100644
--- a/recipes/willay-daemon.toml
+++ b/recipes/willay-daemon.toml
@@ -14,7 +14,7 @@ license = "MIT OR Apache-2.0"
[source]
repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
-commit = "b3eb2e4e371f1341d83fe1c1d86a65e948ea12c7"
+commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b"
# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR
# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto.
cargo_vendor_dir = ".hammer-cargo-vendor"