tawasuyu

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 1430Shell 145Markdown 87Rust 852973 Sutichaykuna

fix(espeak-ng): la cadena de audio son TRES saltos y un `.a` que corta la propagación

Con `-lpulse` resuelto, el cargador cayó un nivel más abajo:

    Error relocating /usr/lib/pulseaudio/libpulsecommon-17.0.so: sf_command: symbol not found

`libpulse` carga `libpulsecommon`, que declara `NEEDED libsndfile.so.1` (medido con readelf). El
sandbox sólo monta lo DECLARADO, así que había que nombrarla acá aunque espeak-ng no la mencione
jamás.

⇒ La cadena completa, que es lo que hay que tener en la cabeza para este corpus:

    espeak-ng → libpcaudio.a → libpulse.so → libpulsecommon.so → libsndfile.so.1

**Tres saltos, y el `.a` del medio es el que rompe la propagación automática**: un archivo estático
no declara `NEEDED`, así que ni el enlazador ni el cargador pueden descubrir lo que hay detrás. Con
`.so` en toda la cadena esto se habría resuelto solo. Es la tercera cara del mismo asunto en esta
receta —`-l` de pulse/alsa a mano, y ahora las deps de runtime de pulseaudio— y las tres salen de
que el eslabón del medio sea estático.

Entran `libsndfile` y las de runtime de pulseaudio (`glib`, `libffi`, `pcre2`) por el mismo motivo.

⚠ Y una nota de proceso: sembré esta versión al worker ANTES de commitearla para probarla, que es
exactamente lo que el guardián `deriva_de_la_siembra` de `cosecha-cron.sh` existe para denunciar —
la granja construyendo algo que no está en ningún commit. Lo corrijo con este commit en vez de
dejarlo pasar: si el ciclo del cron hubiera entrado en medio, habría revertido la receta y el build
habría usado la vieja sin avisar.

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

3d6b40223556116246fc0d7aff647d956f51a188 · ruwaq Sergio · (2 p'unchaw ñawpaq) · tayta 8904c9062 · kay commitpi sach'ata qhaway

Semántico sayk'uy

Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.

1 qillqakuna · +12 −1

diff --git a/recipes/espeak-ng.toml b/recipes/espeak-ng.toml
index bd5d3016..ebbd8614 100644
--- a/recipes/espeak-ng.toml
+++ b/recipes/espeak-ng.toml
@@ -114,4 +114,15 @@ echo "espeak-ng: binario + libespeak-ng.so + $d fichero(s) de datos · $v famili
 # ⚠ `binutils` está acá por los GUARDIANES, no por el build: aportan `readelf` y `strings`, y sin
 # ellos el control de audio fallaría por falta de herramienta en vez de por el defecto que busca —
 # un guardián que se cae solo acusa a la receta de algo que no hizo.
-build = ["cmake", "samurai", "pkgconf", "pcaudiolib", "sonic", "pulseaudio", "alsa-lib", "binutils"]
+# ⚠ **`libsndfile` NO es dep de espeak-ng: es dep de la cadena que pcaudiolib arrastra.** Con
+# `-lpulse` resuelto, el cargador cayó un nivel más abajo:
+#     Error relocating /usr/lib/pulseaudio/libpulsecommon-17.0.so: sf_command: symbol not found
+# `libpulse` carga `libpulsecommon`, que declara `NEEDED libsndfile.so.1` (medido con readelf). Como
+# el sandbox sólo monta lo declarado, había que declararla acá aunque espeak-ng no la nombre nunca.
+# ⇒ La cadena completa, que es lo que hay que tener en la cabeza para este corpus:
+#     espeak-ng → libpcaudio.a → libpulse.so → libpulsecommon.so → libsndfile.so.1
+# Tres saltos, y el `.a` del medio corta la propagación automática porque un `.a` no declara
+# NEEDED. Se declaran también las deps de runtime de pulseaudio (`glib`, `libffi`, `pcre2`) por el
+# mismo motivo.
+build = ["cmake", "samurai", "pkgconf", "pcaudiolib", "sonic", "pulseaudio", "alsa-lib",
+         "libsndfile", "glib", "libffi", "pcre2", "binutils"]