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 604Rust 56Shell 36Markdown 281227 Definiciones

wasi-libcxx: un bash-ism rompía el /bin/sh propio — ahora POSIX

La fase `install` hacía `mv -v "$t" "${t/unknown-/}"` para convertir
wasm32-unknown-wasip1 en wasm32-wasip1. `${var/patrón/}` —sustituir una
subcadena INTERNA— NO es POSIX: es extensión de bash, y el ash de busybox la
tolera por cortesía.

El banco diferencial del plan de botar busybox la encontró como **la ÚNICA
divergencia** de `simi` (nuestro /bin/sh en Rust) contra el ash, sobre 1339
casos de los que 1329 son fases REALES de recetas del corpus: esta fase, rc 0
contra 2.

Y simi tiene razón: implementa las diez expansiones POSIX (${v} :- := :? :+
${#v} # ## % %%) y no las de bash (${v/a/b} ${v:1:2} ${!v} ${v^^}). Lo
verifiqué una por una.

Con dos valores conocidos, nombrar el destino es más claro que el bucle y
además es POSIX — el bucle no iteraba sobre nada variable.

Resultado medido tras el cambio:
    simi   DIVERGE=0   avisos(stderr)=0   1.5 ms/caso (ash: 1.5)

⇒ El bloqueante de la campaña («sin sh POSIX no se bota busybox en ningún
frente») queda sin su última objeción medible.

⚠ Esto rearma wasi-libcxx, wasi-sdk y la cadena de Gecko (firefox,
firefox-instrumentado, atuq). Se hace AHORA a propósito porque esos cuatro ya
estaban pendientes por el cambio de bluez5 y el worker no tenía ninguno en
vuelo: el coste añadido son wasi-libcxx y wasi-sdk, no Gecko.

32a88f202a2b615558d5e252104733180cc79041 · por Sergio · (hace 22 h) · padre 7c487c12f · ver el árbol en este commit

Delta semántico

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

1 archivos · +15 −3

diff --git a/recipes/wasi-libcxx.toml b/recipes/wasi-libcxx.toml
index d90acf31..1e002761 100644
--- a/recipes/wasi-libcxx.toml
+++ b/recipes/wasi-libcxx.toml
@@ -158,9 +158,21 @@ S=/out/usr/share/wasi-sysroot
 # renombre libc++ quedaría instalada al lado del sitio donde se la busca: presente en el artefacto e
 # invisible para el compilador, que es el modo de fallo más caro de todos.
 cd "$S/lib"
-for t in wasm32-unknown-wasip1 wasm32-unknown-wasip1-threads; do
-  [ -d "$t" ] && mv -v "$t" "${t/unknown-/}"
-done
+# ⚠ **ESTO ERA UN BASH-ISM Y ROMPÍA EL `/bin/sh` PROPIO** (arreglado 2026-10-22). Antes decía:
+#     for t in wasm32-unknown-wasip1 wasm32-unknown-wasip1-threads; do
+#       [ -d "$t" ] && mv -v "$t" "${t/unknown-/}"
+# `${var/patrón/}` —sustituir una subcadena INTERNA— **no es POSIX**: es extensión de bash, y el
+# ash de busybox la tolera por cortesía. El banco diferencial del plan de botar busybox
+# (`scripts/sh-banco-diferencial.py`, 1339 casos, 1329 de ellos fases REALES de recetas) la encontró
+# como **la ÚNICA divergencia** de `simi` —nuestro `/bin/sh` en Rust— contra el ash: esta fase, rc 0
+# contra 2. Y `simi` tiene razón: implementa las diez expansiones POSIX (`:-` `:=` `:?` `:+` `#`
+# `##` `%` `%%` `${#v}` `${v}`) y no las de bash (`${v/a/b}` `${v:1:2}` `${!v}` `${v^^}`).
+#
+# ⇒ Con dos valores conocidos, nombrar el destino es más claro QUE el bucle y además es POSIX. No se
+# pierde nada: el bucle no iteraba sobre nada variable.
+[ -d wasm32-unknown-wasip1 ]         && mv -v wasm32-unknown-wasip1         wasm32-wasip1
+[ -d wasm32-unknown-wasip1-threads ] && mv -v wasm32-unknown-wasip1-threads wasm32-wasip1-threads
+:
 cd /src
 
 # ⚠ UN DIRECTORIO VACÍO QUE SÍ IMPORTA — y por eso está en su propia línea con su propio párrafo.