From 8cf9a87dd2ee1210b9b5e66ae86a0253c9c2a515 Mon Sep 17 00:00:00 2001 From: sergio Date: Wed, 29 Jul 2026 06:52:15 -0400 Subject: [PATCH] =?UTF-8?q?arje-logind-compat:=20repineado=20al=20fix=20(b?= =?UTF-8?q?3:5e4b8e04)=20=E2=80=94=20la=20cadena=20vuelve=20a=20ser=20repr?= =?UTF-8?q?oducible?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- recipes/arje-logind-compat.toml | 8 +++++++- scripts/gnome/qemu-desktop-image.sh | 6 ++++-- 2 files changed, 11 insertions(+), 3 deletions(-) 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