From 5df1f86a0aa639d1ad7c4f6a0f0a7e46050ebf93 Mon Sep 17 00:00:00 2001 From: Sergio Date: Fri, 18 Sep 2026 20:54:42 +0000 Subject: [PATCH] =?UTF-8?q?la=20sesi=C3=B3n=20extra=20mor=C3=ADa=20por=20u?= =?UTF-8?q?n=20BYTE=200x01=20donde=20deb=C3=ADa=20ir=20la=20retroreferenci?= =?UTF-8?q?a=20del=20sed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- scripts/servidor/claude-caja.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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"