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 815Rust 56Shell 37Markdown 291229 Definiciones

metal survey: encontrar el censo también con takana INSTALADO — lo destapó churay

`takana metal survey` buscaba `takana-install-partition.sh` junto al binario, en el directorio
actual y en el árbol del repo. Con el paquete recién copiado eso alcanza. Llamado desde una
cara gráfica que encontró `takana` en el PATH —que es como churay lo va a encontrar siempre—
el binario está en /usr/bin y el censo no está al lado: el censo moría con «no encuentro
takana-install-partition.sh». Se añaden /usr/libexec/takana, /usr/lib/takana y
/usr/share/takana.

El defecto sólo se ve desde el otro lado de la frontera, que es exactamente para lo que sirve
tener dos lados.

Y el ADR 0021 pasa a tener las DOS partes hechas: la cara está en tawasuyu
(`churay-core::metal` con 9 tests, la pestaña «Sistema en disco» de churay-llimphi, y
`churay-cli metal`). Tres cosas salieron distintas de lo que el ADR había anotado, y quedan
escritas con su motivo:

- no es un nodo del grafo sino una pestaña: un nodo con Scope::System habría entrado en el
  conjunto que recorre install_unit, y el instalador de apps habría intentado instalarlo como
  a una app.
- churay NO pasa --unattended: el botón autoriza el SALTO, no el formateo. El instalador
  vuelve a preguntar del otro lado, donde el disco ya está libre. Dos consentimientos para dos
  cosas distintas.
- la raíz viva se pinta ⚡ y no ✓, y desaparece si la máquina no puede saltar: sin kexec no hay
  forma de soltarla, y un ✓ igual al de una partición libre sería la peor forma de ofrecer la
  partición del sistema que la persona está usando en ese momento.

551a103e2dd119ec47b28d831074a214c8a080d2 · por Sergio · (hace 28 d) · padre 65253a0e7 · ver el árbol en este commit

Delta semántico · 1

crates/takana-cli/src/metal.rs

2 archivos · +45 −16

diff --git a/crates/takana-cli/src/metal.rs b/crates/takana-cli/src/metal.rs
index 4e1e42d3..ec15c2b1 100644
--- a/crates/takana-cli/src/metal.rs
+++ b/crates/takana-cli/src/metal.rs
@@ -146,6 +146,14 @@ fn candidatos(payload: Option<&Path>) -> Vec<PathBuf> {
         v.push(PathBuf::from("."));
         // El árbol del repo, para el que trabaja desde adentro.
         v.push(PathBuf::from("work/instalador-salida"));
+        // ⚠ Y las rutas de un takana INSTALADO. Sin esto, `takana metal survey` sólo funcionaba
+        // con el paquete recién copiado: llamado desde una cara gráfica que encontró `takana` en
+        // el `PATH` —que es exactamente como lo va a encontrar churay— el binario está en
+        // `/usr/bin` y el censo no está al lado, así que el censo moría con «no encuentro
+        // takana-install-partition.sh». Medido el 2026-09-23 desde `churay-cli metal`.
+        for d in ["/usr/libexec/takana", "/usr/lib/takana", "/usr/share/takana"] {
+            v.push(PathBuf::from(d));
+        }
     }
     v
 }
diff --git a/docs/adr/0021-dueno-del-verbo-de-instalar.md b/docs/adr/0021-dueno-del-verbo-de-instalar.md
index 96a0efa6..1107ef60 100644
--- a/docs/adr/0021-dueno-del-verbo-de-instalar.md
+++ b/docs/adr/0021-dueno-del-verbo-de-instalar.md
@@ -1,7 +1,8 @@
 # ADR 0021 — El dueño del verbo de instalar: takana pone el motor, churay pone la cara
 
-- **Estado:** PROPUESTO, con la **parte de takana IMPLEMENTADA y medida** (2026-09-23). Lo de churay
-  es entrega, no está hecho.
+- **Estado:** PROPUESTO, con **las dos partes IMPLEMENTADAS y medidas** (2026-09-23): el verbo
+  `takana metal` acá, y la cara en tawasuyu (`churay-core::metal`, la pestaña «Sistema en disco» y
+  `churay-cli metal`).
 - **Fecha:** 2026-09-23
 - **Contesta:** [SDD 28 §8](../28-servidor-de-produccion.md) («`churay` como instalador centralizado
   — la dirección, no la decisión»), que dejó tres preguntas anotadas para que se **decidieran** en
@@ -199,20 +200,40 @@ dos puertas no pueden divergir.
   física, no una carencia: el redimensionado vive **después** del salto, dentro del instalador, y
   todavía no está escrito.
 
-## Entrega a tawasuyu (churay)
+## La cara de churay — HECHA el 2026-09-23
 
-Lo que hace falta del otro lado, en orden, y nada de esto toca takana:
+Está implementada en tawasuyu: `churay-core::metal` (el envoltorio, con 9 tests), la pestaña
+**«Sistema en disco»** de `churay-llimphi`, y `churay-cli metal` para headless. Once claves en los
+tres idiomas. El binario `takana` que churay necesita es el estático del paquete del instalador;
+para el `survey` no hace falta ni store, ni rootfs, ni root.
 
-1. Un nodo `takana (sistema en metal)` en el grafo, con `Scope::System`, que **no** se instala como
-   los demás: al activarlo abre la pantalla del terreno.
-2. Esa pantalla se pinta con `takana metal survey --json`. Las particiones con `usable: false` se
-   muestran —el usuario tiene que ver su disco entero— pero no se pueden elegir, y se muestra su
-   `explicacion` tal cual: está escrita para leerse.
-3. El botón llama a `takana metal install --root PARTUUID=… [--esp PARTUUID=…] --unattended --yes`,
-   y **avisa antes de que la sesión gráfica muere en el salto**.
-4. Si `takana metal check` sale ≠ 0, la pantalla ofrece el USB en vez del salto, mostrando los
-   motivos que imprime, que ya están redactados para el usuario.
+**Tres cosas salieron distintas de lo que este ADR había anotado, y las tres a mejor:**
 
-El binario `takana` que churay necesita es el estático, el mismo que ya viaja en el paquete del
-instalador. churay no necesita el store, ni el rootfs, ni root para el `survey` — sólo para el
-`install`, que ya sabe pedirlo.
+1. **No es un nodo del grafo, es una pestaña.** Un nodo con `Scope::System` habría entrado en el
+   conjunto que `install_unit` recorre, y el instalador de apps habría intentado instalarlo como a
+   una app. La pestaña —al lado de «Actualizaciones»— no toca ningún flujo existente.
+2. **churay NO pasa `--unattended`.** El botón autoriza el **salto**, no el formateo: la máquina
+   salta al instalador en RAM y el instalador vuelve a mostrar el terreno y a preguntar en su propia
+   pantalla, donde ya no hay un sistema montado estorbando. Dos consentimientos para dos cosas
+   distintas, y el segundo se da en el sitio donde el disco ya está libre.
+3. **La raíz viva se pinta `⚡` y no `✓`, y desaparece si la máquina no puede saltar.** Sin `kexec`
+   no hay forma de soltarla; ofrecerla igual sería ofrecer algo que no se puede hacer. Un `✓`
+   idéntico al de una partición libre sería la peor forma de ofrecer la partición del sistema que
+   la persona está usando en ese momento.
+
+Y una que este ADR daba por resuelta y no lo estaba: **`takana metal survey` sólo encontraba el
+censo junto al binario**. Llamado desde churay —que encuentra `takana` en el `PATH`, que es como lo
+va a encontrar siempre— el binario está en `/usr/bin` y el censo no está al lado, así que el censo
+moría. Ahora se busca también en `/usr/libexec/takana`, `/usr/lib/takana` y `/usr/share/takana`.
+El defecto sólo se ve desde el otro lado de la frontera, que es para lo que sirve tener dos lados.
+
+### Lo que churay decide, y que no es reclasificar
+
+Leer el veredicto para pintarlo distinto **no** es recalcularlo. Las tres decisiones de la cara se
+equivocan del lado seguro y están en sus tests:
+
+| decisión | por qué |
+|---|---|
+| un veredicto **desconocido** no se ofrece, aunque venga `usable: true` | si takana publica uno nuevo y ese churay es viejo: perder una opción se nota; ofrecer la equivocada, no |
+| un JSON que no parsea es un **error**, no un censo vacío | un censo vacío se pinta como «esta máquina no tiene discos», que es la mentira tranquila |
+| lo que **no** se puede elegir se muestra igual, con su motivo | una lista que sólo trae lo elegible se lee como «acá no hay nada más», y el que no encuentra su partición no sabe si el instalador no la vio o decidió no ofrecerla |