arje-logind-compat: repineado al fix (b3:5e4b8e04) — la cadena vuelve a ser reproducible
Los dos arreglos de arje-logind-compat (sesión eager + object path de Session
escapado como systemd) están commiteados y pusheados en tawasuyu, así que la
imagen ya NO corre un binario compilado a mano: corre el artefacto sellado, y se
verificó que da EXACTAMENTE el mismo resultado (mismo `Added virtual monitor
Meta-0` → `Using Wayland display name 'wayland-0'` → mismo muro en el typelib de
AccountsService).
El pin va a la rama selfhost, no a main: esa rama existe para que hammer pueda
construir con --locked de forma hermética (el monorepo gitignora el Cargo.lock).
Estaba MUY atrás — el artefacto viejo ni siquiera tenía el objeto Session que
mutter necesita —, así que se le mergeó main y se regeneró el Cargo.lock, que con
main al día había quedado viejo y habría hecho fallar el --locked.
Y ahí apareció una colisión ya conocida pero no aplicada acá: el monorepo COMMITEA
su propio `vendor/` (`[patch.crates-io] smithay = { path = "vendor/smithay" }`, la
copia parcheada que mirada usa para el tearing) y `cargo vendor` de hammer escribe
en `vendor/` por defecto, pisándolo. El build moría con
`failed to read /src/vendor/smithay/.cargo-checksum.json`. Se resuelve con el
campo que ya existía para esto: cargo_vendor_dir = ".hammer-cargo-vendor".
De paso, el script de imagen elige el artefacto por `hammer hash` sobre la receta
—el que corresponde a la receta de HOY— en vez de por el más reciente del store:
con dos artefactos del mismo paquete conviviendo, la fecha no dice cuál es el
vigente. Mismo criterio que hydrate-gnome.sh.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
2 qillqakuna · +11 −3
diff --git a/recipes/arje-logind-compat.toml b/recipes/arje-logind-compat.toml
index 4a427e6e..1c3567ad 100644
--- a/recipes/arje-logind-compat.toml
+++ b/recipes/arje-logind-compat.toml
@@ -29,7 +29,13 @@ version = "0.0.1"
[source]
# El `commit` es el identificador inmutable (la URL es sólo locator, no entra al hash).
repo = "gitea@git.tawasuyu.net:tawasuyu/tawasuyu.git"
-commit = "06184e43a8b3179e41905dc56ba07ec569df1ebb"
+commit = "e65e943ef8f6fa77ea9b8565f5d73d9f511ab0df"
+# El monorepo COMMITEA su propio `vendor/` — `[patch.crates-io] smithay = { path = "vendor/smithay" }`,
+# una copia parcheada de smithay que mirada necesita para el tearing. `cargo vendor` de hammer escribe
+# en `vendor/` por defecto y lo pisaba: el build moría con
+# `failed to read /src/vendor/smithay/.cargo-checksum.json` al resolver la dep git de taffy. Se
+# vendorea a un subdir aparte. Ver [[hammer-cargo-vendor-clobbers-project-vendor]].
+cargo_vendor_dir = ".hammer-cargo-vendor"
[build]
compiler = "zig-cc"
diff --git a/scripts/gnome/qemu-desktop-image.sh b/scripts/gnome/qemu-desktop-image.sh
index ce440c4d..ef1d717a 100755
--- a/scripts/gnome/qemu-desktop-image.sh
+++ b/scripts/gnome/qemu-desktop-image.sh
@@ -88,14 +88,16 @@ echo "==> inyectando arje-logind-compat (el login1 del fractal)"
# LEYENDO /run/systemd/{sessions,users,seats}. Pero alguien tiene que ESCRIBIR esos ficheros, y ese
# alguien es arje-logind-compat, el daemon D-Bus que se hace pasar por org.freedesktop.login1.
# libelogind entra solo (es dep de mutter); el daemon no, porque nadie lo declara como dep de build.
-# ALC_BIN permite inyectar un binario RECIÉN COMPILADO en vez del artefacto sellado. Es para probar
+# El artefacto se elige por `hammer hash` sobre la receta —el que corresponde a la receta de HOY—, no
+# por el más reciente del store: con dos artefactos del mismo paquete conviviendo, la fecha no dice
+# cuál es el vigente. ALC_BIN permite inyectar un binario RECIÉN COMPILADO en vez del artefacto sellado. Es para probar
# un cambio en arje-compat antes de commitear/pushear tawasuyu y re-sellar la receta (la receta pina
# un commit, así que sin push no hay artefacto nuevo). Lo que se pruebe así NO es reproducible: es
# andamio de iteración, y el camino de producción sigue siendo el artefacto del store.
if [ -n "${ALC_BIN:-}" ] && [ -x "$ALC_BIN" ]; then
install -Dm755 "$ALC_BIN" "$MERGED"/usr/bin/arje-logind-compat
echo " ⚠ binario LOCAL (no sellado): $ALC_BIN"
-elif ALC="${ALC:-$(ls -dt store/*-arje-logind-compat 2>/dev/null | head -1)}"; [ -n "$ALC" ] && [ -d "$ALC" ]; then
+elif ALC="${ALC:-store/$(./target/release/hammer --store store hash recipes/arje-logind-compat.toml 2>/dev/null | tail -1 | sed 's/^b3://')-arje-logind-compat}"; [ -d "$ALC" ]; then
install -Dm755 "$ALC"/usr/bin/arje-logind-compat "$MERGED"/usr/bin/arje-logind-compat
echo " ✓ $(basename "$ALC" | cut -c1-12)"
else