# 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 = "2e99d21675de7aa3b60bf4d9d22fd4c8b76ffe0c" # ⚠ 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"]