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 1572Shell 203Rust 109Markdown 993728 Definitions

⎇ 928d5eb119a399f636254f407d9b372be55887d6 recipes/puriy-costura.toml TOML · 76 lines · 5.5 KB History raw

atuq: un vídeo se abre en el reproductor de la distro, no en una pestaña 928d5eb11 · Sergio ·

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