El pin viejo (`e19bb0e5`) era ANCESTRO del commit que agrego los verbos de la boveda, asi que `atuq` mandaba `vault.match` y el host contestaba «verbo desconocido»; la extension lo lee como «no hay boveda», borra la insignia y se calla. Navegador sin la funcion y ficheros en orden — el fallo mas caro de encontrar que tiene este cable (SDD 26 §7.quinquies). Estaba bloqueado por algo que no era de takana: el `Cargo.lock` de tawasuyu no cerraba para este crate. Publicado alla como `23a292863`, regenerado en un arbol LIMPIO del commit: 215 lineas, todas de contabilidad de deps por ruta, **cero `checksum` y cero `source` movidos** — ninguna version de registry se toco. Y el lock publicado resulto ser BYTE A BYTE el que la otra sesion ya tenia en su arbol sin commitear, asi que no compite con su trabajo: es el suyo. Commiteado alla con un indice TEMPORAL (`GIT_INDEX_FILE` + `commit-tree`) porque ese fichero estaba en vuelo en el clon compartido y `git commit -- Cargo.lock` se habria llevado el arbol pisando lo que el otro agente tuviera stageado (regla 2 de CLAUDE.md, el segundo aviso). ⚠ El artefacto todavia NO esta: el vendoreo son 2,4 G y el disco del hub esta al 99% (lo llena `tawasuyu/target`, que no es mio para podar), asi que se construye en el worker. Hasta que vuelva, los guardianes que usan el host quedan en rojo por ausencia del artefacto, no por rotura.
90 lines
6.6 KiB
TOML
90 lines
6.6 KiB
TOML
# 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 <sha> | 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ó.
|
|
#
|
|
# ══ POR QUÉ EL PIN SUBIÓ A `23a292863` (2026-09-16) ═══════════════════════════════════════════
|
|
# El pin anterior (`e19bb0e5`) era ANCESTRO del commit que agregó los verbos de la bóveda, así que
|
|
# `atuq` mandaba `vault.match` y este host contestaba «verbo desconocido»: la extensión lo lee como
|
|
# «no hay bóveda», borra la insignia y se calla. Navegador sin la función, ficheros en orden — el
|
|
# fallo más caro de encontrar que tiene este cable (SDD 26 §7.quinquies). Lo vigila
|
|
# `scripts/vigia-atuq-verbos.py`, que corre en un segundo sin construir nada.
|
|
#
|
|
# Subirlo estuvo BLOQUEADO tres semanas por algo que no era de takana: el `Cargo.lock` de tawasuyu no
|
|
# cerraba para este crate —listaba once deps y el manifiesto ya pedía las cuatro de `pacha-boveda`—,
|
|
# y `cargo vendor --locked` moría sin nombrar al culpable. Desbloqueado publicando el lock cerrado
|
|
# allá (`23a292863`), regenerado en un árbol limpio: 215 líneas, TODAS de contabilidad de deps por
|
|
# ruta, cero `checksum` y cero `source` movidos.
|
|
#
|
|
# ══ `--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 -- <flags>` 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 = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
|
|
commit = "23a292863f53b355c5c02d6185904f2c33d8ab42"
|
|
# ⚠ 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:<commit>`, 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"]
|