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>
This commit is contained in:
Sergio
2026-09-18 20:54:42 +00:00
co-authored by Claude Opus 5
parent 9b222a6aa3
commit 5df1f86a0a
+6 -1
View File
@@ -77,7 +77,12 @@ while ! _libre "$_inst"; do
done done
if [ ! -d "$BASEDIR/$_inst" ]; then if [ ! -d "$BASEDIR/$_inst" ]; then
echo "claude: abro una sesión más ($_inst) — clonando la capa, ~1 s" >&2 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; } 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" cp "$BASEDIR/$_base/instance.toml" "$BASEDIR/$_inst/instance.toml"
rm -rf "$BASEDIR/$_inst/upper" rm -rf "$BASEDIR/$_inst/upper"