diff --git a/recipes/puriy-costura.toml b/recipes/puriy-costura.toml new file mode 100644 index 00000000..6eefb5b6 --- /dev/null +++ b/recipes/puriy-costura.toml @@ -0,0 +1,76 @@ +# puriy-costura — «la costura» del SDD 26 §7: el proceso nativo LARGO al que le habla la extensión +# de `atuq` por native messaging, y que del otro lado habla con la suite. +# +# ══ POR QUÉ ESTA RECETA EXISTE, Y POR QUÉ EL BINARIO NO ES DE TAKANA ═══════════════════════════ +# Todo lo del §6 que no es CSS —transparencia de scripts, descargas al CAS, archivo con RAG, +# torrent, foco— pasa por UN solo mecanismo, y que sea uno y no siete es la decisión de fondo: cada +# función es un VERBO de este host y no un proyecto nuevo. El binario vive en tawasuyu porque es +# SUITE, no build system; takana lo construye, lo mete en la clausura y le deja el manifiesto de +# native messaging en su sitio. Acá no se decide nada de allá: el nombre del crate se decidió en +# tawasuyu con su regla 10 puesta (2026-09-09). +# +# ══ EL COMMIT PINEADO TRAE EL LOCK, Y ESO COSTÓ DOS COMMITS ═══════════════════════════════════ +# `ebe41e96` = `9958224a0` (los dos crates) + el `Cargo.lock` cerrado. Sin lock al día `cargo vendor +# --locked` muere con «cannot update the lock file», que NO nombra al crate culpable; y sin +# `--locked` la resolución puede cambiar sola entre builds, que es lo que rompe la reproducibilidad +# del artefacto. Mismo cuidado que `arje-packager.toml`. +# +# ⚠ Y la trampa que costó el primer intento, porque va a volver: **un `Cargo.lock` regenerado en el +# clon compartido de tawasuyu NO describe su `main`** — ese árbol tiene cientos de ficheros en vuelo +# de otras sesiones, así que el lock sale describiendo el escritorio de todos. El primer commit del +# lock quedó a una línea de cerrar (`tempfile` en `nahual-iconos`, que lo declara en +# `[dev-dependencies]`). Si hay que publicar un lock de allá, se genera en un árbol LIMPIO del commit +# (`git archive | tar -x`, que además no toca el `.git` compartido) y se verifica que el diff +# contra HEAD sea sólo lo que uno agregó. +# +# ══ `--bin` NO ES REDUNDANTE ══════════════════════════════════════════════════════════════════ +# `puriy-costura` tiene lib + bin (la lib es lo que los tests ejercitan por el cable de verdad), y el +# root del monorepo es un manifiesto VIRTUAL: `-p` elige el paquete y `--bin` hace falta porque +# `cargo rustc -- ` exige un target único. Sin él el build muere con un error que habla de +# targets ambiguos y no menciona esta receta. +# +# ══ QUÉ LE FALTA PARA QUE ATUQ LO USE ═════════════════════════════════════════════════════════ +# El manifiesto en `/usr/lib/mozilla/native-messaging-hosts/` (medido en el §7.bis: NO va en el +# appdir, sale de un `/usr/lib/mozilla` COMPILADO en Gecko) y la extensión que lo llame, que es la +# unidad 6. Un manifiesto que apunte a un binario ausente, o que declare una extensión que no +# existe, es un fallo silencioso: el navegador arranca igual y la función simplemente no está. Por +# eso el manifiesto NO se agrega desde acá «para tenerlo listo». + +name = "puriy-costura" +version = "0.1.0" +# Lo que declara el propio crate en tawasuyu (`[workspace.package]`), no una simplificación. +license = "MIT OR Apache-2.0" + +[source] +repo = "gitea@git.tawasuyu.net:tawasuyu/tawasuyu.git" +commit = "ebe41e9683f8d53c988061dd8e46eb74c2057490" +# ⚠ 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" }`. +# Un patch POR RUTA no necesita `.cargo-checksum.json`, y de hecho **upstream no lo commitea**. Pero +# `cargo vendor` convierte su directorio de salida en un DIRECTORIO DE REEMPLAZO DE FUENTE, donde +# cada crate SÍ tiene que traer checksum — así que si se vendorea sobre `vendor/`, el smithay +# parcheado pasa a estar sujeto a una regla que nunca cumplió. +# +# El síntoma no menciona nada de esto: 1 de 1699 crates sin `.cargo-checksum.json`, y un error que +# habla de `taffy` y de una «replaced source». Anotado porque la explicación fácil —«cargo vendor +# BORRÓ el checksum»— es falsa y se comprobó: `git ls-tree` dice que ese fichero nunca existió. +# +# `cargo_vendor_dir` NO entra en el ArtifactHash (`hash_inputs` usa `git:`, compiler, target +# y link), así que ponerlo no re-hashea nada. Las otras cinco recetas que construyen desde este +# monorepo (arje-zero, arje-polkit-compat, arje-logind-compat, libelogind, y mise por el mismo motivo +# en otro repo) ya lo llevan. +# +# ⚠ Y el precio, medido: el vendoreo es del WORKSPACE ENTERO, no de este crate. Son **2,4 G** en +# `.hammer-cargo-vendor` y 1699 crates —`axum`, `aws-lc-sys`, `av1-grain`— para un host que usa +# quince. Es el mismo precio que ya pagan las otras cinco; no es de esta receta, pero conviene +# saberlo antes de construirla en una máquina con el disco al 94%. +cargo_vendor_dir = ".hammer-cargo-vendor" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +# Estático musl: lo lanza el navegador, así que no puede depender de encontrar un loader ni un +# `libstdc++` que en este corpus ya nos costó una noche (ver el `[deps] runtime` de atuq). +link = "static" +flags = ["-p", "puriy-costura", "--bin", "puriy-costura"]