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 1389Shell 137Markdown 80Rust 802602 Definiciones

shuma entra al catálogo: el último vhost de gioser se DECLARA en vez de copiarse

Decisión del usuario: `/shuma/*` —lo único que todavía ata `sergio.gioser.net` a la máquina que se
borra— se construye desde el monorepo de tawasuyu, no se muda como binario.

Y no es una preferencia de estilo: el `shuma-gateway` que corre hoy en gioser es ELF **glibc**,
puesto a mano, y su **inodo está BORRADO del disco** — vive mientras el proceso no muera. El
`shuma-daemon` igual. Copiarlos sería mudar dos binarios que nadie puede reconstruir a una caja que
no tiene su cargador.

Dos recetas Cargo contra el monorepo, pinneadas a `23a292863` — **el mismo commit que ya usa
`puriy-costura`**, a propósito: el árbol de fuentes se comparte por `<dep>-<sha>`, así que dos pines
distintos son dos vendoreos de 2,4 G en vez de uno. Estáticas musl con zig-cc, que es lo que pide un
servicio que arranca el init de la caja.

Comprobado antes de encolar: los dos crates son miembros del workspace en ese commit, el
`Cargo.lock` está commiteado, `rust-version = 1.80` contra el 1.97.0 del lab, y reqwest va por
rustls (nada de openssl). `takana hash` da b3:107dfb54 (gateway) y b3:f9b92acc (daemon), ninguno
sellado todavía.

Van a `recipes/incoming/` —la cola que el worker muele, primera en QUEUES— y no a `recipes/`
canónico: se promueven cuando sellen, que es el orden documentado. Un fichero en `recipes/` a secas
NO lo muele nadie.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

fd96229ce2ee332e462541f2c7514b23f103fc10 · por Sergio · (hace 1 mes) · padre e2bb4f9b8 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

2 archivos · +60 −0

diff --git a/recipes/incoming/shuma-daemon.toml b/recipes/incoming/shuma-daemon.toml
new file mode 100644
index 00000000..f77d7263
--- /dev/null
+++ b/recipes/incoming/shuma-daemon.toml
@@ -0,0 +1,26 @@
+# shuma-daemon — el dueño de los Workspaces de shuma: sesiones PTY, paneles y el socket de admin
+# que consultan el gateway, el TUI y el shell. Es el que hace que `/shuma/*` sirva de algo.
+#
+# ── POR QUÉ ESTA RECETA (2026-09-16) ────────────────────────────────────────────────────────────
+# Va en par con `shuma-gateway`: el gateway sin daemon es un puente a ninguna parte. Los dos corren
+# hoy en gioser desde binarios puestos a mano —el del daemon, además, desde un **inodo borrado**— y
+# la mudanza los reconstruye en vez de copiarlos (SDD 28 §6.34).
+#
+# ⚠ **Lo que esta receta NO resuelve, y hay que decirlo acá**: en gioser el daemon corre como
+# `sergio`, no como root, y el payload `Native` de una tarjeta de arje **no tiene campo de usuario**
+# (SDD 29 §4.0 quinquies). Declararlo sin más lo pondría a correr como root, que no es «perder una
+# opción» sino cambiar el sistema. La bajada de privilegio se decide al escribir la tarjeta, no acá.
+name    = "shuma-daemon"
+version = "0.1.0"
+license = "MIT OR Apache-2.0"
+
+[source]
+repo   = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
+commit = "23a292863f53b355c5c02d6185904f2c33d8ab42"
+cargo_vendor_dir = ".hammer-cargo-vendor"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "static"
+flags    = ["-p", "shuma-daemon", "--bin", "shuma-daemon"]
diff --git a/recipes/incoming/shuma-gateway.toml b/recipes/incoming/shuma-gateway.toml
new file mode 100644
index 00000000..39f85cd1
--- /dev/null
+++ b/recipes/incoming/shuma-gateway.toml
@@ -0,0 +1,34 @@
+# shuma-gateway — el puente HTTP/JSON + WebSocket de shuma: lo que `sergio.gioser.net/shuma/*`
+# atraviesa para hablarle al daemon. Traduce JSON ↔ postcard y empalma WS ↔ ExecPty.
+#
+# ── POR QUÉ EXISTE ESTA RECETA (2026-09-16) ─────────────────────────────────────────────────────
+# Es el ÚLTIMO vhost atado a gioser (SDD 28 §6.34): de los 29 dominios del Caddyfile, `sergio` es el
+# único que todavía resuelve a la máquina que se borra, y lo que lo ata no es el sitio —su frontend
+# ya está copiado en la caja— sino esta consola. El binario que corre allá hoy es **glibc, puesto a
+# mano, y su inodo está BORRADO del disco**: vive sólo mientras el proceso no muera. Un servicio así
+# no se muda copiándolo; se DECLARA y se reconstruye, que es lo que decidió el usuario cuando se le
+# ofrecieron las tres salidas (jaula glibc / construirlo desde tawasuyu / que muera).
+#
+# ── EL PIN ──────────────────────────────────────────────────────────────────────────────────────
+# `23a292863` es el MISMO commit que ya usa `puriy-costura` (subido hoy). Compartir el pin no es
+# cosmético: el árbol de fuentes de una dep se comparte entre recetas (`work/sources/<dep>-<sha>`),
+# así que dos pines distintos del monorepo son dos árboles de 2,4 G vendoreados en vez de uno.
+name    = "shuma-gateway"
+version = "0.1.0"
+license = "MIT OR Apache-2.0"
+
+[source]
+repo   = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
+commit = "23a292863f53b355c5c02d6185904f2c33d8ab42"
+# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR
+# RUTA) y el `cargo vendor` de takana lo pisaría, con un error que habla de `taffy` y no de esto.
+# Ver [[takana-cargo-vendor-clobbers-project-vendor]] y el cabezal de `puriy-costura`.
+cargo_vendor_dir = ".hammer-cargo-vendor"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+# Estático musl: lo arranca el init de la caja y no puede depender de encontrar un cargador. Es
+# exactamente lo que le falta hoy al binario de gioser, que es ELF dinámico contra glibc.
+link     = "static"
+flags    = ["-p", "shuma-gateway", "--bin", "shuma-gateway"]