Files
takana/recipes/puriy-costura.toml
T
Sergio 0ca88fdcd5 atuq §6.3.ter: preguntarle al archivo por lo que DECÍA, no por las palabras exactas
El muro no era un daemon ni un LLM — y el propio comentario de la extensión lo decía mal, copiando
lo que hace willay-rag. Medido: para ordenar por parecido no hace falta ningún LLM (eso es un
coseno) y el «daemon de embeddings» resultó ser el mismo llama-server que ya levanta el chat, con
otro modelo. La corrección quedó escrita donde estaba la afirmación.

Del lado de la suite (tawasuyu 22527f7d1 y b4ecffea8): el protocolo de llama-server salió a
`shared/foreign-llama` (regla 4 — vivía dentro de puriy-costura y ya tenía dos consumidores), el
`Provider` es `rimay-verbo-llama` (regla 10 — la familia verbo YA es la abstracción de embeddings, y
éste es su primer backend sin nube ni descargas), y el índice es `rimay-verbo-index::VectorIndex`.

Acá: la receta del modelo (multilingual-e5-small, MIT), que se pinea en fp32 y la receta CUANTIZA a
Q8_0 con nuestro llama-quantize — así la procedencia es de quien declara la licencia, la imagen se
lleva 126 MB en vez de 476, y la transformación es nuestra y verificable. Más el guardián y la
extensión, que ahora expone `archive.ask` al lado del `archive.search` literal: son dos preguntas
distintas y conviven.

⚠ El guardián está escrito pero NO corrió todavía: `ia-modelo-embeddings` quedó en la cola del flock
detrás del build de otro agente. Lo medido hasta acá es el modelo a mano (384 dimensiones, el pasaje
correcto gana con y sin los prefijos de e5) y 45 tests en tawasuyu. La línea del SDD que lo dice se
borra cuando dé verde.
2026-09-12 01:32:12 +00:00

77 lines
5.5 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ó.
#
# ══ `--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 = "gitea@git.tawasuyu.net:tawasuyu/tawasuyu.git"
commit = "b4ecffea828a7514e7d397253715c83c1b9b5255"
# ⚠ 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"]