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 1184Shell 70Rust 62Markdown 501503 Definitions

la sesión extra moría por un BYTE 0x01 donde debía ir la retroreferencia del sed

Abrir una segunda sesión fallaba con «Error: ninguna imagen empieza por "\u{1}" — traela con hammer
qorpa pull». El `\u{1}` no era un misterio: la línea que extrae el sha de la imagen tenía un `sed`
con `\1` de reemplazo, y el fichero terminó guardando el BYTE 0x01 literal en su lugar. O sea que
`qorpa create --base` recibía el carácter de control.

Se reemplaza por un `awk` que parte por comillas: no tiene retroreferencias ni nada que otra
herramienta pueda reinterpretar al escribir el fichero. Y si la extracción sale vacía, ahora corta
con un mensaje que nombra el fichero, en vez de pasarle basura a qorpa.

Comprobado: la segunda sesión se crea y arranca (claude-sergio-3, Claude 2.1.240) con la primera
todavía abierta.

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

5df1f86a0aa639d1ad7c4f6a0f0a7e46050ebf93 · by Sergio · (1 month ago) · parent 9b222a6aa · browse the tree at this commit

Semantic delta

No definition changed: this change is text, documentation or data.

1 files · +6 −1

diff --git a/scripts/servidor/claude-caja.sh b/scripts/servidor/claude-caja.sh
index 8d82f1e2..2807afa0 100755
--- a/scripts/servidor/claude-caja.sh
+++ b/scripts/servidor/claude-caja.sh
@@ -77,7 +77,12 @@ while ! _libre "$_inst"; do
 done
 if [ ! -d "$BASEDIR/$_inst" ]; then
   echo "claude: abro una sesión más ($_inst) — clonando la capa, ~1 s" >&2
-  _sha=$(sed -n 's/^base = "sha256:\(.*\)"//p' "$BASEDIR/$_base/instance.toml")
+  # ⚠ SIN RETROREFERENCIAS: acá había un `sed` con `\1` y el fichero terminó guardando el
+  # BYTE 0x01 en su lugar, así que el sha salía como el carácter de control y `qorpa create`
+  # moría con «ninguna imagen empieza por "\u{1}"». `awk` parte por comillas y no tiene
+  # nada que una herramienta pueda reinterpretar.
+  _sha=$(awk -F\" '/^base *=/ {sub(/^sha256:/,"",$2); print $2; exit}' "$BASEDIR/$_base/instance.toml")
+  [ -n "$_sha" ] || { echo "claude: no pude leer el sha de la imagen en $BASEDIR/$_base/instance.toml" >&2; exit 1; }
   takana qorpa create "$_inst" --base "$_sha" >/dev/null || { echo "claude: no pude crear $_inst" >&2; exit 1; }
   cp "$BASEDIR/$_base/instance.toml" "$BASEDIR/$_inst/instance.toml"
   rm -rf "$BASEDIR/$_inst/upper"