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…
servidor: los 11 daemons de tawasuyu suben de pin — el del 16-sep estaba 221 commits atras
1# willay-crosscheck — el cruce de willay, que ESCUCHA en la red.
2#
3# ⚠ El paquete NO se llama como el binario: el crate es `willay-cruce` y el ejecutable
4# `willay-crosscheck`. Por eso van `-p` y `--bin`, que no son redundantes acá.
5# Medido en gioser: `--listen /ip4/0.0.0.0/tcp/4103 --label momento`. La etiqueta nombra a la
6# MÁQUINA, así que en la caja nueva no puede decir `momento` — se decide al escribir la Card.
7#
8# Receta Cargo contra el monorepo de tawasuyu, pinneada al MISMO commit que `shuma-*` y
9# `puriy-costura`: el árbol de fuentes se comparte por `<dep>-<sha>`, así que un pin distinto es otro
10# vendoreo de 2,4 G. Estática musl con zig-cc — la caja la arranca el init y no puede depender de
11# encontrar un cargador, que es justo lo que le falta al binario glibc de gioser.
12
13name = "willay-crosscheck"
14version = "0.1.0"
15license = "MIT OR Apache-2.0"
16
17[source]
18repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
19commit = "c7545339a8eb18d4908a325ea71729a5e7805937"
20# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR
21# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto.
22cargo_vendor_dir = ".hammer-cargo-vendor"
23
24[build]
25compiler = "zig-cc"
26target = "x86_64-linux-musl"
27link = "static"
28flags = ["-p", "willay-cruce", "--bin", "willay-crosscheck"]
29
30# ── EL SERVICIO (SDD 30) ────────────────────────────────────────────────────────────────────────
31# ⚠ `--label` NOMBRA A LA MÁQUINA. En gioser decía `momento`, y copiarlo tal cual habría puesto a la
32# caja nueva a identificarse con el nombre de la que se borra. Sale de `hostname`, que desde hoy la
33# caja tiene de verdad (§6.38: antes decía `(none)`) — y si algún día vuelve a no tenerlo, la guarda
34# lo dice en vez de anunciarse como «(none)» en la red.
35[[service]]
36label = "willay-crosscheck"
37id = "01M2EKDA00W1YCR055CHK00012"
38exec = "/bin/busybox"
39argv = ["sh", "-c", "h=$(hostname); case \"$h\" in \"\"|\"(none)\") echo 'willay-crosscheck: la máquina no tiene hostname y `--label` es como se anuncia en la red — arreglá /etc/hostname (hay una Card OneShot que lo aplica)' >&2; exit 78;; esac; test -s $HOME/.tejido/roster.postcard || { echo 'willay-crosscheck: no hay roster en $HOME/.tejido/roster.postcard — este servicio vive DENTRO de la red de tejido y sin padrón no tiene con quién cruzar. Llega con el INTERCAMBIO de tejido, no antes' >&2; exit 78; }; mkdir -p /run/willay; exec /usr/bin/willay-crosscheck --listen /ip4/0.0.0.0/tcp/4103 --label \"$h\""]
40envp = [["PATH", "/usr/bin:/bin"], ["HOME", "/var/lib/tejido"], ["XDG_RUNTIME_DIR", "/run/willay"], ["XDG_DATA_HOME", "/var/lib"]]
41networking = "full"
42cgroup = "arje.slice/willay-crosscheck"
43restart = { initial_ms = 1000, max_ms = 30000 }
44
45# ⚠ MEDIDO AL ARRANCARLO (2026-09-16): **no es independiente de `tejido`**. Corriendo la misma línea
46# a mano en la caja:
47#
48# Error: no hay roster en /root/.tejido/roster.postcard — emparejá primero (`tejido serve` / `tejido join`)
49#
50# O sea que `willay-crosscheck` vive DENTRO de la red de tejido y hereda su condición: **se enciende
51# en el mismo movimiento en que tejido se intercambia**, no antes y no en paralelo con el de gioser.
52# Por eso sale del `genesis` y queda sólo en `cards.d`, como `tejido`.
53
54# ⚠ EL ENTORNO NO SE ADIVINÓ: se leyó del proceso vivo en gioser (`/proc/<pid>/environ`), que lo
55# arrancaron así:
56#
57# sudo sh -c 'setsid nohup env XDG_RUNTIME_DIR=/run/willay XDG_DATA_HOME=/var/lib \
58# HOME=/home/sergio /usr/local/bin/willay-crosscheck --listen … --label momento …'
59#
60# O sea: **root, pero con `HOME` apuntando al home donde vive `~/.tejido`**. Acá esa identidad vive
61# en `/var/lib/tejido`, así que `HOME` va ahí — y por eso la guarda mira `$HOME/.tejido`, no una
62# ruta fija. Sin ese `HOME` el binario busca en `/root/.tejido`, que no existe ni acá ni allá: el
63# servicio arrancaría y no encontraría padrón, que es exactamente el fallo que se midió primero.