Como root (granja), tar preservaba el uid del tarball → el sandbox (userns) no podía chmod/escribir
esos ficheros → configure autotools fallaba (oniguruma: Permission denied creando Makefile). Extraer
como root sin preservar owner lo arregla para TODO tarball. oniguruma vuelve a configure plano.
Destraba proyectos Go cuyo módulo no está en la raíz (dolt→go, csvtk→subdir): vendor_go_deps corre en
el subdir, detect_build_system/detect_go_main operan ahí, y el compile hace 'cd <subdir>' primero.
Test go_subdir_compiles_in_subdir.
El kernel linux-generic 7.1.2 (b3:fded43c0…, nouveau KMS) está listo en el store. Faltan, de su frente:
mesa con nouveau/NVK (la actual es iris-only), firmware nouveau GSP en /lib/firmware, y el armado del
USB. mirada en NVIDIA necesita los tres además del kernel.
syncconfig re-activaba amdgpu pese a kconfig -d (DRM_AMD_DC default-y), y amdgpu_userq_fence.c hace
ICE sin mensaje con el gcc del gueto. Borro las líneas obj-$(CONFIG_DRM_AMDGPU)+= amd/ del Makefile
del drm: amd nunca se compila, garantizado. i915+radeon+nouveau intactos. amdgpu (AMD moderno) = v2.
Revierte el make-prepare separado (disparaba syncconfig que re-activaba amdgpu). Como linux-metal:
-d DRM_AMDGPU -d DRM_AMD_DC -d HSA_AMD antes de olddefconfig + bzImage directo. Single clean build.
El -j$(nproc) arrancaba a compilar antes de que prepare generara asm-generic/*.h + include/generated/*
→ cascada de 'fatal error: No such file'. prepare serie primero lo resuelve. amdgpu deshabilitado bien
(defconfig lo dejaba =y).
Un bzImage que bootea hardware variado (Intel/AMD/NVIDIA), no clavado a un laptop. GPU built-in las
3 familias + simpledrm fallback; squashfs+overlay (live USB); storage/USB/input/EFI/VFAT/ISO9660
amplios; monolítico (arje-zero PID1, sin módulos). NVIDIA: el kernel da KMS por nouveau, pero mirada
en NVIDIA necesita ADEMÁS firmware GSP en la imagen + mesa con nouveau/NVK (frente del otro agente).
linux.toml (6.16, baseline selfhost) y linux-metal NO se tocan.
Destraba la clase workspace (go-mockery/k3d/git-town/csvtk): con go.work, GOWORK=off + 'go mod
vendor' sólo vendoreaba el módulo raíz → 'inconsistent vendoring' en el build. Ahora si hay go.work
se usa 'go work vendor' (go 1.22+, vendor consistente de todo el workspace); el trigger y
detect_build_system también reconocen go.work (workspace sin go.mod raíz). Test detect_go_when_only_go_work.
Dropeados re-imports ya-en-corpus (rqlite/octosql/trufflehog/cosign/gptscript/cue), grype/syft
(Alpine NOGO, ya en hold-nongo) y dolt/kustomize (diferidos: multimódulo).
mirada-compositor sellado (store/d8fd9ca…): el compositor Wayland teselante sobre smithay 0.7,
que maneja DRM/GBM/EGL/libseat/libinput directo y hospeda a mirada-greeter como cliente.
Compila ~255 crates incl. smithay para musl; PIE dinámico.
Cierra la cadena de sesión gráfica de tawasuyu sobre hammer: Mesa(iris) + wayland + stack de
entrada + compositor + greeter, todo sellado.
smithay (default features) enlaza por -sys: drm-sys→libdrm, gbm-sys→mesa, libseat-sys→seatd,
input-sys→libinput, libudev-sys→libudev-zero, + xkbcommon→libxkbcommon y pixman (link directo).
Dos libs nuevas para cerrar el link:
- libxkbcommon 1.7.0 (meson, sin x11/wayland/docs/tools): smithay la enlaza, no sólo dlopen.
- pixman 0.44.2 (meson, sin tests/demos): composición CPU de smithay.
foreign-av NO enlaza ffmpeg (spawnea el binario en runtime) ⇒ no hizo falta construir ffmpeg.
NEEDED del binario: libgbm/libseat/libudev/libinput/libpixman-1/libxkbcommon + musl (libdrm/EGL/
wayland se dlopen-ean).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
La 1ª corrida promovió+FIRMÓ binarios equivocados que pasaban el smoke por solo 'correr':
katana/naabu→functional-test, gosec→gosecutil, buf→protoc-gen-buf-lint (detect_go_main eligió un
main helper). El gate ahora localiza el binario cuyo nombre == receta (o alias conocido tofu/mc/
nats/dlv/flux/ct/kubeseal/node_exporter/...); si instaló otro → a needs-review-weekend con el motivo,
NO se firma. Lección eksctl aplicada al gate.
- farm-worker-loop.sh: construye QUEUES='recipes/incoming recipes/incoming-go' (en serie por vuelta;
la cola Go aislada se muele 24/7 sin pisar el incoming/ del otro agente).
- scripts/farm/harvest-go.sh: cosecha determinista sin IA (cron del laptop). Baja el store sellado,
y por cada receta SELLADA (cache-hit bajo timeout, NO compila en el hub) hace SMOKE-TEST del binario
(existe + corre version/--help sin panic/segfault) antes de promover+firmar. Lo que falla el smoke va
a tandas/needs-review-weekend/ para el lunes. add explícito (nunca -A), push con reintento.
eksctl tiene cmd/eksctl (CLI) + cmd/schema (helper de codegen que panica); detect elegía
arbitrariamente y selló el binario equivocado (schema) — un fallo SILENCIOSO (sella OK pero envía
la herramienta incorrecta). Ahora, a igual clase, el dir cuyo file_name == recipe.name gana. Test
detect_go_main_prefers_cmd_matching_recipe_name. Lección: smoke-testear que el binario instalado es
el ESPERADO, no solo que selló.
mirada-compositor (smithay, default features) enlaza en build input-sys/libudev-sys/drm-sys/
gbm-sys/libseat-sys. drm/gbm/libseat ya están (libdrm/mesa/seatd). Faltaban:
- libudev-zero 1.0.4: libudev SIN udevd (lee /sys y /dev directo) — encaja con la filosofía
no-systemd de tawasuyu (arje es el init). Alternativa pesada: eudev.
- mtdev 1.1.6: multitouch. config.sub viejo no conoce *-musl ⇒ se reemplaza por el moderno del
sandbox (autoconf build-aux) antes de configurar.
- libevdev 1.13.4: wrapper de ioctls evdev.
- libinput 1.27.1 (meson): -Dlibwacom=false (sin tablets Wacom), sin debug-gui/tests/docs.
Los cuatro sellados. xkbcommon NO hace falta como build-dep (smithay usa xkbcommon-dl = dlopen);
sí en runtime.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
detect_go_main elegía cmd/schema entre los varios mains del repo. Con flags=./cmd/eksctl instala el
CLI real (eksctl version OK). Re-sellado + re-promovido al repo firmado.
mirada-greeter sellado (store/41fdd015…): el greeter/login de mirada (runtime Elm Llimphi
sobre winit + wgpu) compila ENTERO para musl — 314 crates incl. wgpu/winit/naga/smithay/
llimphi-* — y enlaza dinámico. Valida la cadena completa: stack gráfico (wayland+mesa) →
app GUI tawasuyu real.
Binario: PIE dinámico, DT_NEEDED = sólo libpam.so.0 + musl; EGL/GLES/GBM/wayland/iris se
dlopen-ean en runtime (wgpu/winit), así que el rootfs debe tenerlas (mesa+wayland ya selladas).
Dos blockers resueltos en el camino:
- atspi/accesskit (a11y, vía accesskit_winit): zbus-lockstep-macros #[validate] PANICA
(«File has no extension.») al escanear xml/ de atspi-common y hacer .extension().expect()
sobre el SUBDIR xml/schemas/ (lib.rs:147). Fix: fase compile custom (réplica de la fase
Cargo de hammer) que setea LOCKSTEP_XML_PATH a un dir con sólo los .xml.
- PAM: auth-core → pam/pam-sys hace bindgen sobre security/pam_appl.h ⇒ nueva receta
linux-pam 1.6.1 (libpam.so + headers; build limpio en musl con gcc de Alpine).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
vault (go-15) falló en 'go mod vendor' con '~/.cache/go-build/...: no such file': durante el compile
de telegraf el disco cruzó DISK_HIGH, el watchdog corrió 'go clean -cache', y el vendor de vault (que
usa esa cache) arrancó en la ventana siguiente sin ficheros. El guard anterior solo miraba 'go mod
vendor' activo en ese instante; ahora difiere la purga si hay cualquier 'hammer build' en vuelo.