Commit Graph
100 Commits
Author SHA1 Message Date
sergio 370e7b7a20 Etapa G: limpia cola go-12 — parquea batch gráfico C a hold-nongo + difiere syncthing
- mesa/wayland/wayland-protocols/libdrm/seatd/samurai/meson + patches: batch C de gráficos previo
  que jamás se mandó al worker, arrastrado en incoming/. Parqueado en tandas/hold-nongo/.
- syncthing: build especial (genera la GUI embebida 'auto.Assets' vía go generate/build.go) ⇒
  diferida a staged-fallidos con el motivo. Quedan 18 go-12 limpias en la cola.
2026-06-26 23:51:05 -04:00
sergioandClaude Opus 4.8 00339b625e Etapa G: cola del stack gráfico Mesa (iris) para el escritorio tawasuyu
Importa de Alpine aports (con parches musl) las recetas del stack que el greeter
real de mirada necesita en el rootfs de producto: libdrm 2.4.134, wayland 1.25.0,
wayland-protocols 1.48, seatd, mesa 26.1.1, + build-tools meson 1.11.1 y samurai
(ninja). Quedan en recipes/incoming/ como puntos de partida: traen los parches
musl de Alpine pero usan helpers de abuild — falta adaptarlas a fases hammer
(meson/samurai directos, link=dynamic), como elfutils.

docs/14-mesa-stack.md fija el plan: iris-only ⇒ SIN LLVM/Vulkan/X11 (el driver
gallium iris no necesita LLVM), lo que recorta clang/llvm/libclc/spirv/bindgen.
DAG de build (hojas→raíz) + estado por receta + el lado tawasuyu (recetas Cargo
arje-splash/net-bring-up estáticas ya construibles; mirada-greeter dinámico,
bloqueado por mesa). Contraparte de la seed arje-tawasuyu del monorepo.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 23:41:34 -04:00
sergio 3b23463ac1 Etapa G: detect_go_main ve el main bajo header de comentario de bloque
cmd/helm/helm.go arranca con un header Apache /* ... */ cuyas líneas internas no llevan '*';
el filtro por-línea ingenuo de is_main_go cortaba en 'Copyright ...' y daba 'no es main' ⇒
detect_go_main no hallaba cmd/helm y caía a '.' (raíz sin .go → 'no Go files in /src'). Ahora
rastrea el estado dentro/fuera de bloque /* */. Afecta a cualquier .go con header de bloque.
Test: detect_go_main_sees_main_under_block_comment_header.
2026-06-26 23:38:47 -04:00
sergio 06ba417336 Etapa G: granja Go pesada — watchdog no purga modcache con vendor activo + syncthing main en cmd/
go-12 (terraform/k8s) destapó la race: con árboles de deps de varios GB en paralelo, el disco
cruza DISK_HIGH y el watchdog corría 'go clean -modcache' a mitad de los 'go mod vendor' en vuelo
(.partial: no such file) ⇒ 5 recetas no convergían. Ahora difiere la purga del modcache si hay un
vendor de host activo (la purga de work/sources ya libera lo grueso y es segura). syncthing: main
real en ./cmd/syncthing (la raíz tiene build-constraints que excluyen todo).
2026-06-26 23:32:12 -04:00
sergio 5fb24e0deb Etapa G: corrige misimport helm (mtytel/synth → helm/helm k8s v4.2.1) 2026-06-26 23:26:03 -04:00
sergio 9af81626e9 Etapa G: manda go-12 al VPS (terraform/infra/k8s: opentofu/helm/packer/rclone/syncthing/...) 2026-06-26 23:19:35 -04:00
sergio f2e5aede14 Etapa G: cosecha go-11 (19) — recon/projectdiscovery (alterx/asnmap/cdncheck/tlsx/uncover/...) 2026-06-26 23:18:03 -04:00
sergio f068627e98 Etapa G: manda go-11 al VPS (recon/projectdiscovery) 2026-06-26 22:51:41 -04:00
sergio a5d2442211 Etapa G: cosecha go-10 (16) — config-lang/k8s-dev/recon 2026-06-26 22:51:31 -04:00
sergio ca121b5961 Etapa G: manda go-10 al VPS (jsonnet/cue/ytt/kpt/recon) 2026-06-26 22:36:48 -04:00
sergio 681ca509a0 Etapa G: cosecha go-9 (16) — linters/dev-tools Go 2026-06-26 22:36:36 -04:00
sergio ea4efdc8b6 Etapa G: manda go-9 al VPS (linters/dev-tools: shfmt/vale/goawk/gotestsum/...) 2026-06-26 22:26:52 -04:00
sergio ce126dd5ee Etapa G: cosecha go-8 (13, repo 444->457) — k8s grandes (cilium-cli/istioctl/gitea) 2026-06-26 22:26:44 -04:00
sergio 89a8678238 Etapa G: fuel-go-8 al VPS (devops/cloud/policy: opa/conftest/k0s/talosctl/...) 2026-06-26 20:18:35 -04:00
sergioandClaude Opus 4.8 cd0a52d18b Etapa G: cosecha go-7 (9, repo 435->444) — caddy/hugo/doctl/hcloud/earthly/...
Incluye binarios Go grandes (caddy web server, hugo SSG) que construyen OK.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 20:13:42 -04:00
sergioandClaude Opus 4.8 0cad0a7694 Etapa G: cosecha go-6 (16, repo 419->435) + manda go-7 al VPS
go-6: terraform-docs/tflint/tfsec/s5cmd/nerdctl/amass/infracost/kail/... yield
16/19, disco estable 65% con el watchdog nuevo (load bajo de 23 a 0.76).
go-7 (11): hcloud/doctl/flyctl/dagger/earthly/apko/scorecard/sake/... a la cola.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 17:46:23 -04:00
sergioandClaude Opus 4.8 64f4a20072 granja: watchdog purga caches Go cuando disco >=82%
El 'go mod vendor' acumula GOMODCACHE (~/go/pkg/mod) sin tope: una tanda Go
grande lo llevo a 31G y lleno el disco de 80G -> I/O-wait disparo el load a 23
(cuello real, no CPU/RAM). El watchdog ahora purga 'go clean -modcache/-cache'
cuando el disco supera DISK_HIGH% (def 82). El vendor/ local de cada receta ya
tiene lo necesario; si pisa un vendor en curso, esa receta reintenta.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 17:36:05 -04:00
sergio 7883bbf804 Etapa G: fuel-go-6 al VPS — infra/recon (terraform-docs/tflint/tfsec/s5cmd/nerdctl/amass/...) 2026-06-26 17:27:41 -04:00
sergioandClaude Opus 4.8 11783a468a Etapa G: cosecha go-5 del VPS — 25 tools (repo 394->419)
delve/gopls/staticcheck/gofumpt/buf/sqlc/goose/atlas/dolt/restic/kopia/
nats-server/charm/pop/wishlist/headscale/rqlite/nsq/dbmate/... yield 25/27.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 17:25:15 -04:00
sergioandClaude Opus 4.8 d7e5d206b5 Etapa G: manda reserva go-5 al VPS (27) + archiva 22 fallidos
Cosechados 61, archiva los 22 que fallan a tandas/staged-fallidos/, manda la
reserva premasticada go-5 (delve/gopls/staticcheck/buf/sqlc/atlas/dolt/restic/
kopia/nats-server/charm/headscale/...). Disco VPS limpiado 90->79%.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 16:09:35 -04:00
sergioandClaude Opus 4.8 25fc85db90 Etapa G: cosecha del VPS 4-cores — 61 tools (repo 333->394)
Mayor cosecha de la sesion. Mayoria Go (fuel-go-2/3/4 + restos fuel-6+7):
age/argocd/cosign/trivy/trufflehog/k9s/kubectx/nuclei/vhs/soft-serve/
golangci-lint/goreleaser/ffuf/katana/gitleaks/sops/step-cli/helmfile/
gomplate/dasel/lf/sttr/usql/vegeta/bombardier/... + tokio-console (Rust).
yield VPS 61/83. Corpus FIRMADO = 394.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 16:08:50 -04:00
sergioandClaude Opus 4.8 de04469458 Etapa G: fuel-go-5 premasticado — buffer reserva (~28 Go) en recipes/ready/
Reserva lista para el proximo envio cuando el VPS baje la cola: delve/gopls/
staticcheck/gofumpt/buf/sqlc/goose/atlas/dolt/restic/kopia/nats-server/charm/
pop/wishlist/headscale/rqlite/... (import 29/32). Premasticado = import+pin
local, build en el VPS.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 14:57:31 -04:00
sergioandClaude Opus 4.8 9c99a78276 Etapa G: premasticado Go (fuel-go-3/4) — buffer de 40 al VPS de 4 cores
Premasticado (import+pin local, build en el VPS): 40 CLI Go k8s/devops/charm/
security: argocd/cosign/crane/trivy/trufflehog/vhs/soft-serve/k3d/kind/
kustomize/golangci-lint/goreleaser/air/stern/kubectx/helmfile/gomplate/...
Cola del VPS ahora ~83. Aprendizaje: Rust cola-larga de crates.io NO esta en
nixpkgs (0/7); Go es la veta (en nixpkgs, 100% yield). import-batch: usar -f
<file>, no args sueltos (zsh no splitea).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 14:55:23 -04:00
sergioandClaude Opus 4.8 465adc1374 Etapa G: fuel-go-2 + restos fuel-6+7 — recarga el VPS de 4 cores
Estrena el VPS repotenciado (CCX23, 4 cores/16GB, disco saneado 94->54%).
Cola 43: 28 Go nuevas (import 31/32 automatico is_go; age/sops/k9s/ffuf/
nuclei/gitleaks/dasel/vegeta/frp/chisel/lf/sttr/usql/subfinder/katana/...)
+ 15 restos Rust de fuel-6+7 (oxipng/grass/tokio-console/cargo-c/...).
syft/grype/gf a hold (vinieron de alpine, sin plantilla Go).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 14:29:20 -04:00
sergioandClaude Opus 4.8 b097782d1b Etapa G: cosecha fuel-go-1 — 21 CLI Go (repo 312->333), 100% yield
Primera cosecha Go a escala con el frente automatizado: import automatico ->
VPS construye 21/21 en paralelo (go cache-hit, sin race) -> cosecha trust-free
(of_tree identico cross-machine, p.ej. duf b3:1dbbedde laptop=VPS).

chezmoi/dive/duf/fx/fzf/gdu/glow/gobuster/gojq/go-task/grpcurl/gum/hey/jid/
lazydocker/lazygit/mage/mods/pet/skate/yq-go. Todos Go estaticos.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 13:31:26 -04:00
sergioandClaude Opus 4.8 0629d79cde Etapa G: fuel-go-1 — primera tanda Go con importador automatizado
22 CLI Go importadas 21/22 con plantilla Go automatica (deps.build=[go], sin
phases): chezmoi/dive/duf/fx/fzf/gdu/glow/go-task/gobuster/gojq/grpcurl/gum/
hey/jid/lazydocker/lazygit/mage/mods/pet/skate/yq-go. Smoke local: jid+fx OK.
Restos de fuel-6+7 a hold (retomar del store). glab descartado (vino de Alpine).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 12:45:19 -04:00
sergioandClaude Opus 4.8 5877363f5b Etapa G frente Go: AUTOMATIZADO end-to-end (BuildSys::Go + importador)
Cierra la fragilidad manual del patron Go (path del main por receta). Ahora
importar Go es tan automatico como Rust: import -> pin -> build, sin tocar nada.

- lib.rs: BuildSys::Go (go.mod, prioritario sobre configure/make auxiliares que
  traen muchos proyectos Go). resolve_phases deriva el compile generico:
  'go install -trimpath -ldflags=-buildid=' del paquete main. install='true'
  (go install ya deja en GOBIN=/out/usr/bin).
- detect_go_main(): detecta el dir del main por FILESYSTEM (no compila, evita
  contaminarse con mains de ejemplo rotos en docs/scripts que rompen go list).
  Heuristica raiz > cmd/<x> > menor profundidad; excluye vendor/docs/test/etc.
  go install nombra el binario solo (cmd/mlr->mlr, raiz->modulo).
- nix_import.rs + nix-import.sh: detecta is_go (vendorHash de buildGoModule),
  emite deps.build=['go'] sin phases (BuildSys::Go las deriva).
- tests: go_mod_wins_over_configure, detect_go_main_picks_cmd_over_docs.

Validado end-to-end: miller (cmd/mlr->mlr, esquiva docs rotos), amfora (raiz),
duf (import->pin->build 100% automatico, binario estatico que corre).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 12:34:27 -04:00
sergioandClaude Opus 4.8 8237635256 Etapa G: cosecha fuel-6+7 — 13 CLI-Rust (repo 299->312)
fuel-6: cargo-bundle-licenses/taskwarrior-tui/tenere/termsnap/the-way
fuel-7 (sistematico): cargo-ndk/cargo-sbom/espflash/grcov/maturin/
parallel-disk-usage/xwin/zizmor. El metodo crates.io entrego binarios reales.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 12:18:18 -04:00
sergio b06bdd4251 Etapa G: fuel-7 .patch acompañante a la cola 2026-06-26 11:36:39 -04:00
sergioandClaude Opus 4.8 e23814d24a Etapa G: fuel-7 — fuel SISTEMATICO desde crates.io (import 16/27)
Primer fuel no-nombrado-a-mano: top de command-line-utilities por recent-
downloads, filtrado a binarios CLI puro-Rust. Descubrio binarios que no
estaban en el radar: oxipng/grass/grcov/maturin/espflash/tokio-console/
zizmor/parallel-disk-usage/cargo-c/cargo-ndk/cargo-sbom/xwin/duckscript/
mandown/mkpasswd/release-plz. Rompe la saturacion del catalogo nombrado.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 11:36:26 -04:00
sergioandClaude Opus 4.8 bee5884544 Etapa G: fuel-6 — recarga del VPS (cola larga, corpus saturado)
import 12/15 nix: cargo-bundle-licenses/cargo-chef/gpg-tui/menyoki/riff/
smassh/taskwarrior-tui/tenere/termsnap/the-way/thokr/wiki-tui. Saca los 4
de fuel-5 que fallan (projectable/qrtool/rwalk/wthrr) a staged.

Nota: corpus saturado (494 nombres vistos); de 50 CLI-Rust mainstream solo
6 eran nuevas. Escalar mas exige enfoque sistematico (categorias crates.io).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 10:59:30 -04:00
sergioandClaude Opus 4.8 4fbf84c2c7 Etapa G: cosecha fuel-5 del VPS — 7 CLI-Rust (repo 292->299)
aichat/caligula/cotp/diskus/otree/pls/russ. Build-yield VPS 7/11; quedan
staged 4 (projectable/qrtool/rwalk fallan, wthrr misimport).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 10:45:53 -04:00
sergioandClaude Opus 4.8 74d5ab0b78 Etapa G frente Go: 10 recetas Go al corpus (repo 282->292) + fix GOWORK
Aplica el patron de amfora a la escoria Go. Build-yield 11/13:
- raiz: croc/gron/jump/gtrash/walk/qrcp (go build .)
- main en ./cmd/<x>: cheat/dnsx/dyff + miller (binario mlr)
Todos estaticos y corren (mlr 6.18.1, croc v10.4.4, cheat 4.5.0, ...).

fetch.rs: vendor_go_deps ahora setea GOWORK=off (go mod vendor aborta en
modo workspace si el arbol trae go.work).

Diferidas 2 (casos especiales): csvtk (go.mod en subdir, el vendor no corre
en /src) y git-town (go.work multimodulo -> inconsistent vendoring; necesita
go work vendor, no go mod vendor).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 05:06:21 -04:00
sergioandClaude Opus 4.8 4291b2adeb Etapa G frente Go: vendoring integrado en fetch — amfora construye, repro
Cierra el muro del frente Go (vendoring) replicando el patron de Rust:
vendorear in-situ en el fetch (host, con red), no tarball-al-mirror.

- fetch.rs: vendor_go_deps() analoga a vendor_cargo_deps — corre go mod vendor
  en el host si hay go.mod; el sandbox compila offline con -mod=vendor.
- lib.rs: engancha vendor_go_deps tras los patches cuando el arbol trae go.mod
  (sin BuildSys::Go; el compile lo fija la receta en build.phases).
- bootstrap-devfs.sh: instala el toolchain go del host (1.26.4, estatico) en
  .dev-fs/tools/go + symlink en ~/.cargo/bin (PATH del worker via .cargo/env).
- amfora: PRIMERA receta Go del corpus. Build end-to-end validado (repo+commit
  -> fetch vendorea -> sandbox offline -> binario estatico que corre, Amfora
  v1.11.0). REPRODUCIBLE bit-a-bit: dos stores independientes dan of_tree
  b3:9ec1d5fe (trimpath + buildid= en el compile). Promovida al repo (282).

Quedan 12 recetas Go en tandas/staged-2026-06-26/ (cheat/dnsx/croc/dyff/csvtk/
git-town/miller/jump/gron/qrcp/walk/gtrash): mecanico, copiar el patron de
amfora ajustando el nombre del binario.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 04:34:56 -04:00
sergioandClaude Opus 4.8 1670ebf933 Etapa G: frente Go — toolchain go.toml + patron de build de-riskeado
Las 13 recetas Go de la escoria (amfora/cheat/dnsx/croc/dyff/csvtk/git-town/
miller/jump/gron/qrcp/walk/gtrash) esperaban un toolchain Go. Lo construyo:

- recipes/go.toml: empaqueta el tarball binario oficial go1.26.4 (estatico ⇒
  corre en el sandbox musl), reubica GOROOT a /usr/lib/go, expone go/gofmt.
  Sella y se materializa como overlay via deps.build=["go"]. Pragmatico
  (como Alpine/nix); bootstrap-desde-fuente queda como frente futuro (cf mrustc).
- DE-RISK end-to-end: amfora compila OFFLINE con  +  ⇒ binario estatico que corre (Amfora v1.11.0).
- amfora.toml: plantilla de referencia del patron Go (phases compile correctas).

Muro restante (mecanico, sin incognitas): el source de hammer es repo+commit
sin vendor/; el build offline no baja modulos. Falta que el importador (con red)
corra  y empaquete el source-vendoreado, igual que Rust vendorea
crates. Eso destraba las 13 de una.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 03:45:37 -04:00
sergioandClaude Opus 4.8 08fdec3bbf Etapa G: fuel-5 — recarga la cola del VPS (parado 14h sin producir)
La cola previa (115) se agoto/enveneno: ultimo seal 2026-06-25T16:42,
~63 recetas fallan por deps no importadas (go/libconfuse/protoc/liblzma)
o C-heavy (libbpf). Diagnostico: el VPS giraba en falso re-confirmando
cache-hits ya cosechados.

- archiva la escoria de incoming/ (71 .toml + 38 .patch) a tandas/staged-2026-06-26/
- fuel-5: 18 candidatos CLI-Rust puro (anti-C); import 11/18 por nix, 10 pineados
  (aichat caligula cotp diskus otree pls projectable qrtool russ rwalk wthrr)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 03:27:38 -04:00
sergioandClaude Opus 4.8 5e9ffeea52 Etapa G: cosecha — promueve bob-nvim + republica 7 construidas-sin-firmar (repo 275→281)
Drenaje del desfase store->repo firmado: bob-nvim (incoming, unico
cache-hit real de los 72 staged) + du-dust/libgcrypt/libnl/libxml2/
linux-metal/nushell/wpa_supplicant (ya en recipes/, selladas pero sin
.swm publicado). El store del VPS ya estaba 100% en el laptop: no habia
backlog de cosecha, el gap real era store<->repo local.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 02:41:02 -04:00
sergio f75e256d08 Etapa G: git diferido en serio — diagnóstico afinado (muro en libgit.a)
Aislado: NO es curl/regex/-pie/libs externas (gcc -static -no-pie -lpcre2-8 -lz
linkea OK). El muro es libgit.a (objetos propios de git) con relocación
incompatible con -static -no-pie. Pase dedicado: V=1 + readelf -r del .o ofensor,
o -static-pie. Se puede; es iteración cara.
2026-06-26 00:48:38 -04:00
sergioandClaude Opus 4.8 9e344c2c6c Etapa G: git diferido con diagnóstico — compila, muro en static-link de helpers
git compila entero (REG_STARTEND/regex y -pie resueltos) pero el link -static de
git-http-backend/daemon/git-% falla 'ld: failed to set dynamic section sizes'
(no es curl ni regex; hipótesis CET/.note.gnu.property + PIC mixto de las libs).
El más duro de la cola C, como gmp en las libs. Próximo: V=1 + -fcf-protection.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 00:30:18 -04:00
sergioandClaude Opus 4.8 19fd683ccf Etapa G: cola C — socat + pigz estáticos (corpus 281→283)
socat 1.8.1.2 (openssl+readline+ncurses), pigz 2.8 (zlib). static-musl, -no-pie.
5 clásicos C ya del unlock: tmux/tig/wget/socat/pigz.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 22:59:55 -04:00
sergioandClaude Opus 4.8 0cb9094852 Etapa G: cola C — tig + wget estáticos (corpus 279→281)
tig 2.6.1 (ncurses+pcre2; -Wno-int-conversion por gcc15), wget 1.25.0
(openssl+zlib+pcre2). Ambos static-musl verificados (sin INTERP).

GOTCHAS de la cola C (reusables):
- NO pasar LDFLAGS=-L/usr/lib pelado: clobbea el LDFLAGS=-static del lab →
  binario dinámico. Usar LDFLAGS="-static -L/usr/lib".
- nuestra zlib.a es non-PIC ⇒ linkear contra ella en un PIE falla
  (R_X86_64_32S vs zcalloc) ⇒ agregar -no-pie (estático no-pie es válido).
  [fix sistémico opcional: rebuildar zlib con -fPIC para toda la cola C]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 22:06:01 -04:00
sergioandClaude Opus 4.8 a1cca429bf Etapa G: abre la cola C — tmux (corpus 278→279), valida libs base
tmux 3.6b linkea libevent + ncurses hammer-built, estático (-static -lncursesw
-levent_core). Primer consumidor de la cola C que valida el unlock de las 20
libs base. + import c-cola-1 (14 clásicos C: tig/wget/rsync/git/mc/gnupg/…).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 21:11:50 -04:00
sergioandClaude Opus 4.8 e143b4af27 Etapa G: 9na cosecha del VPS — 12 promovidos (corpus 266→278)
Cosechado tras cerrar imagen↔repo. Ecosistema typst (tinymist LSP, typstyle,
trunk, wasm-pack) + dotfiles (dotter, tuckr) + viddy/tomlq/wstunnel/rust-script/
pixi (ahora entero) + when (script Perl). 11 ELF static-musl + when (Perl).
El VPS siguió moliendo autónomo durante toda la sesión imagen↔repo.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 18:45:43 -04:00
sergioandClaude Opus 4.8 404bfc4970 imagen↔repo: end-to-end — producto booteable con userland del repo firmado
scripts/product-image-from-repo.sh cierra el lazo Etapa F+G entero:
base product-rootfs (arje-zero PID1 + musl/busybox) → hidrata userland rico vía
`hammer install --require-signed` del repo firmado → imagen GRUB auto-booteable →
boot en QEMU + handshake SSH que CORRE los tools del repo.

VALIDADO e2e: booteó, arje-zero PID1, hammerd+netup+sshd, y por SSH corrieron
bat 0.26.1 / fd 10.4.2 / jq 1.8.1 / eza — userland farmeado, servido desde el
repo firmado, no del bootstrap hardcodeado. 240 bins en /usr/bin (base+repo).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 16:58:43 -04:00
sergioandClaude Opus 4.8 d41f1705e6 imagen↔repo: install hidrata userland del repo firmado + 2 fixes de path
Cierra el lazo Etapa F+G: el userland del producto se arma vía `hammer install
--repo --prefix --require-signed` desde el repo firmado, no del bootstrap
hardcodeado. scripts/product-userland-from-repo.sh hidrata un set curado (13+
tools validados estáticos del repo).

Dos bugs reales del path install/pack encontrados+arreglados:
1. pack derivaba target_bin=/usr/bin/{name}; para paquetes con binario≠nombre
   (ripgrep→rg, repgrep→rgr) quedaba mal y el sanity-check de install fallaba.
   Ahora pack lo deriva del flag `--bin <X>` de la receta Cargo.
2. La reproducción del source_patch derivaba el NOMBRE de la receta del
   target_bin ⇒ "rg" ≠ "ripgrep" del corpus ⇒ no cache-hit ⇒ rebuild + dup en
   el store (find_by_hash ambiguo). build_source_patch/run_apply ahora reciben
   el nombre del paquete (install/bootstrap lo pasan; apply=None) ⇒ cache-hit
   del artefacto del corpus, sin duplicar.

(El "EACCES" inicial era sólo --store ausente: DEFAULT_STORE=/store root-only.)
hammer-build 49/49 tests ok; ripgrep install validado e2e (rg hidratado).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 16:54:39 -04:00
sergioandClaude Opus 4.8 813d965d5c Etapa G: 6 libs C base — libevent/libgpg-error/libgcrypt/libuv/json-c/freetype (corpus 260→266)
libevent 2.1.12 (async/red), libgpg-error+libgcrypt (cripto), libuv 1.52
(async; necesitó ./autogen.sh, el dist tarball no trae configure), json-c 0.18
(CMAKE — el rootfs tiene cmake), freetype 2.14 (fuentes, vs zlib+libpng con el
fix CPPFLAGS/LDFLAGS). Set de libs base ya cubre 20+ deps de cola C/-sys.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 12:23:01 -04:00
sergioandClaude Opus 4.8 7d36e12edf Etapa G: fuel-4 — buffer de cola para el VPS tras recuperar conexión
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 10:52:14 -04:00
sergio 75cb4d5132 Etapa G: revierte pixi del corpus — artefacto incompleto (rsync cortado a mano)
El pkill del rsync dejó el store/<hash>-pixi parcial (sin binario); build-farm
hizo cache-hit por presencia del dir y lo promovió. Vuelve a incoming para
re-cosecharlo completo. rustcat/sshs/tere quedan (estáticos, íntegros).
2026-06-25 10:44:10 -04:00
sergioandClaude Opus 4.8 9e5f0abab0 Etapa G: 8va cosecha del VPS — pixi/rustcat/sshs/tere (corpus 257→261)
Cosechado tras recuperar conexion (terremoto corto el ISP local). El VPS siguio
moliendo autonomo durante el corte. pixi (entornos), rustcat (nc), sshs, tere.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 10:43:19 -04:00
sergioandClaude Opus 4.8 ec37eab065 Etapa G: 7ma cosecha del VPS — heh/mdbook-mermaid/mdbook-toc/prek (corpus 253→257)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 15:03:37 -04:00
sergioandClaude Opus 4.8 498ea7fe84 Etapa G: 6ta cosecha del VPS — brush/cargo-criterion/features-manager/wizard (corpus 249→253)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 14:51:58 -04:00
sergioandClaude Opus 4.8 d10b51ea0a Etapa G: libs C base libssh2 + libpng + libyaml (corpus 246→249)
libssh2 1.11.1 (libssh2.a, crypto openssl), libpng 1.6.58 (libpng16.a vs zlib),
libyaml 0.2.5 (libyaml.a). GOTCHA: libpng usa AC_CHECK_LIB link-test para zlib
(no pkg-config) ⇒ requiere CPPFLAGS=-I/usr/include LDFLAGS=-L/usr/lib explícitos.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 14:12:50 -04:00
sergioandClaude Opus 4.8 5ec0d61b65 Etapa G: libs C de compresión/cripto — zstd+xz+bzip2+libsodium (corpus 242→246)
zstd 1.5.7 (libzstd.a — zstd-sys en montones de crates), xz 5.8.3 (liblzma.a),
bzip2 1.0.8 (libbz2.a), libsodium 1.0.22 (libsodium.a). Compresión/cripto =
deps de muchísima cola C + crates -sys. compiler=gcc, estáticas.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 14:07:10 -04:00
sergioandClaude Opus 4.8 5d83e6e313 Etapa G: fuel-3 — recarga de cola del VPS (+18 pineadas, incl typst/mdbook)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 12:52:15 -04:00
sergioandClaude Opus 4.8 173ff0308c Etapa G: 5ta cosecha del worker VPS — irust/rep-grep/sendme/shellharden (corpus 238→242)
irust (REPL Rust), rep-grep, sendme (iroh transfer), shellharden. Estáticos.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 12:47:42 -04:00
sergioandClaude Opus 4.8 f5e639a3ff Etapa G: libs C base libffi + sqlite + readline (corpus 235→238)
libffi 3.5.2 (libffi.a), sqlite 3.53.2 (libsqlite3.a, FTS3/4/5+rtree+threadsafe),
readline 8.3 (libreadline.a+libhistory.a, vs ncurses/libtinfo del corpus).
Alto unlock: sqlite destraba atuin y la cola DB; libffi el mundo python/-sys.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 12:46:35 -04:00
sergioandClaude Opus 4.8 c057d6a02b Etapa G: hurl des-diferido — validación del track de libs C (corpus 234→235)
hurl 8.0.1 estaba diferido por necesitar libcurl+libxml2+openssl. Con las 3
libs base ahora en el corpus, curl-sys/libxml las materializan y hurl construye
estático. Prueba de que el track de libs base abre los tools bloqueados.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 09:23:28 -04:00
sergioandClaude Opus 4.8 9c8d106fd0 Etapa G: libs C base expat + curl al corpus (232→234)
expat 2.8.1 (libexpat.a) + curl 8.20.0 (libcurl.a, TLS openssl + zlib del corpus).
El patrón configure-split + deps openssl/zlib materializadas funcionó limpio.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 09:05:58 -04:00
sergioandClaude Opus 4.8 c00492174c Etapa G: 4ta cosecha del worker VPS — 7 promovidos (corpus 225→232)
angle-grinder, cargo-auditable, cargo-fuzz, cargo-supply-chain, cargo-temp,
evcxr (REPL Rust), fblog. Construidos en el VPS, estáticos. Total cosechado
del VPS esta sesión: 24 tools.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 08:41:12 -04:00
sergioandClaude Opus 4.8 30ad3e57bf Etapa G: libs C base pcre2 + libxml2 al corpus (223→225)
Track de libs fundacionales (pivote tras gmp). Ambas static-musl, gcc:
- pcre2 10.47 → libpcre2-8.a + libpcre2-posix.a (regex; dep de pcre2-sys, grep-variants)
- libxml2 2.13.9 → libxml2.a (XML/HTML; dep de mucha cola C + crates -sys)

FIX CLAVE de comportamiento del lab (causa de los fallos previos, gmp incluido):
el lab tiene fases configure Y compile SEPARADAS; si configure se deja vacío, la
heurística inyecta su propio ./configure minimal (defaults → python/probe) que
corre ANTES y aborta. Solución: definir [build.phases].configure explícito.
libxml2 con --without-python/lzma/zlib; configure-phase split lo desbloqueó.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 08:39:54 -04:00
sergioandClaude Opus 4.8 4617c4173a Etapa G: gmp diferido con diagnóstico (configure probe falla link bajo gcc15)
Primera lib C del track base. El probe de configure de gmp no linkea su conftest
(undefined reference to main) bajo gcc 15.2/C23 + el sandbox; el patch Alpine no
alcanza. Track de libs base confirma ser el trabajo no-trivial (no cores).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 08:30:46 -04:00
sergioandClaude Opus 4.8 d0ad93c7c5 Etapa G: fuel-2 — recarga de cola del worker VPS (+26 pineadas)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 06:42:42 -04:00
sergioandClaude Opus 4.8 d3c93d0b7c Etapa G: 3ra cosecha del worker VPS — hwatch/kbs2/natls (corpus 220→223)
17 tools nuevas construidas en el VPS Hetzner esta sesión, todas estáticas.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 06:34:59 -04:00
sergioandClaude Opus 4.8 aeef6fe7e4 Etapa G: 2da cosecha del worker VPS — 9 promovidos (corpus 211→220)
Construidos en el VPS Hetzner, cosechados al hub (rsync store↓ + cache-hit):
atac (API TUI), cargo-mutants, cargo-readme, cargo-semver-checks, cargo-sort,
ddh (dup finder), fcp (cp rápido), git-igitt (git TUI), git-quick-stats.
8 ELF static-musl + git-quick-stats (script bash, portable). El laptop no
compiló nada de esto.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 06:23:12 -04:00
sergioandClaude Opus 4.8 b61815a602 Etapa G: worker auto-escala JOBS a nproc (resize del VPS sin tocar config)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 06:11:30 -04:00
sergioandClaude Opus 4.8 d1e4daccff Etapa G: PRIMERA cosecha del worker VPS — 5 promovidos (corpus 206→211)
cargo-careful, cargo-cyclonedx, cargo-feature, cargo-flamegraph, cargo-insta:
construidos ÍNTEGRAMENTE en el VPS Hetzner, cosechados al hub (rsync store↓ +
build-farm cache-hit → promote + firma). El laptop NO compiló nada de esto.
Todos ELF static-musl. Pipeline distribuido trustless validado end-to-end.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 05:40:46 -04:00
sergioandClaude Opus 4.8 7b7cf0a996 Etapa G: cosecha cli-rust-10 — 11 promovidos estáticos (corpus 195→206)
Granja laptop sobre cli-rust-10: build-yield 11/18, todos ELF static-musl:
cargo-component, cargo-dist, cargo-llvm-cov, cargo-make, cocogitto, committed,
dotenv-linter, git-branchless, jujutsu (jj), netscanner, systemctl-tui.
7 staged (cargo-release/convco/dnspeep/feroxbuster/git-stack/git-trim/selene).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 05:05:03 -04:00
sergioandClaude Opus 4.8 5486dbab6f Etapa G: fuel-1 — cola profunda para el worker VPS (incoming +48 pineadas)
import-batch fuel-1 (95 candidatos): yield 65/95, dedup vs corpus/deferred →
~57 nuevas pineadas a incoming/. Empujadas al worker Hetzner (rsync aditivo);
69 recetas en su cola = ~1 día de molienda a 2 cores sin idle.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 04:50:03 -04:00
sergioandClaude Opus 4.8 f9a60ed469 Etapa G: fixes del kit de granja distribuida (validados en VPS Hetzner real)
Tres frentes que aparecieron al provisionar un CCX13 (Ubuntu 24.04) de verdad:
- bootstrap-devfs §3b: el loader musl-256-keys ahora DETECTA la versión del
  rootfs (apk db) en vez de hardcodear 1.2.5. Alpine edge avanzó a musl 1.2.6 ⇒
  un loader 1.2.5 vs coreutils 1.2.6 da `renameat2: symbol not found` → chmod
  roto en el sandbox → el wrapper zig-cc no queda +x → EACCES. case con sha de
  1.2.5 y 1.2.6, die si aparece una nueva.
- vps-setup §2b: compila bubblewrap 0.11.2 si el de la distro no soporta
  --overlay-src (Ubuntu 24.04 trae 0.9.0 sin overlayfs; el sandbox lo necesita).
- farm-sync: excluye /.scratch (44G de fuentes mrustc/rustc) + *.png/content*
  del rsync al worker (casi copia 44G de más).

Smoke test en el VPS: builds compilan código real (pasan cc/chmod), rustc 2
cores al 93%, RAM holgada. Worker funcional.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 04:35:57 -04:00
sergioandClaude Opus 4.8 d949d10dcd Etapa G: kit de granja distribuida (worker VPS hub-and-spoke)
Paraleliza el build a un/varios VPS sin exponer gitea ni la clave de firma.
Modelo: el laptop es el HUB (firma + gitea); el worker sólo construye la cola
incoming/ y sella al store local (PROMOTE=0). Reproducibilidad bit-a-bit +
content-addressing ⇒ el store del worker es byte-idéntico, se rsync-ea de vuelta
y el hash valida solo (no hay que confiar en el VPS).

- vps-setup.sh: provisiona Debian/Ubuntu (deps, userns p/bwrap, swap 16G,
  rustup, build hammer, bootstrap-devfs rootfs Alpine edge, systemd unit).
- farm-worker-loop.sh: loop autónomo 24/7, PROMOTE=0, watchdog de disco
  integrado; muele lo que haya sin esperar al hub.
- hammer-farm.service: systemd, JOBS=2 (CCX13 = 2 vCPU dedicado), Nice/idle-io.
- farm-sync.sh (hub): rsync código+cola arriba, store sellado abajo,
  promote+firma+commit+push. Acceso único laptop->VPS por SSH.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 03:50:43 -04:00
sergioandClaude Opus 4.8 97118483d0 Etapa G: triage cli-rust-9 — 5 wins de los fallos (corpus 190→195)
Recuperados de los 16 fallos de la tanda nocturna con fixes documentados:
- rink 0.9, cargo-udeps: openssl-sys "Could not find OpenSSL" → dep openssl
  (dispara OPENSSL_DIR/OPENSSL_NO_VENDOR; el lab linkea la openssl del corpus).
- cargo-cache 0.8.3: git2/libgit2-sys C vendored → compiler=gcc + deps openssl/zlib.
- gptman 1.1: el bin requería la feature `cli` → flags --features cli.
- amp: faltaba -lz → dep zlib (en corpus).
Todos ELF static-musl verificados (`file ... statically`).

Diferidos a .deferred (frontera): tabiew (polars compila >1h a codegen-units=1,
construible pero lentísimo), websocat (E0119 trait impls), zee (E0080 const-eval),
+ misimports amber/flamegraph(Perl)/yj(Go)/ncdu(Zig), cargo-spellcheck (hunspell
C++), sfz (open64 glibc≠musl), tickrs (Cargo.lock), cargo-license (crates.io 403).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 01:32:30 -04:00
sergioandClaude Opus 4.8 71e43c5e42 Etapa G: tanda nocturna cli-rust-9 — 20 promovidos estáticos (corpus 170→190)
Granja nocturna JOBS=4 + watchdog de disco (drena work/sources no-activas
cada 3 min ⇒ disco acotado, no se llenó). import 38/45 → 36 a cola →
build-yield 20/36. Todos ELF static-musl que corren:
bingrep 0.12, cargo-deb 3.7, cargo-llvm-lines 0.4, cargo-modules 0.26,
cargo-wipe, cargo-zigbuild 0.22, cpc 3.0, csview 1.3, dufs 0.46,
fastmod 0.4, git-graph 0.7, jql 8.0, kibi 0.3, ox 0.7, ruplacer 0.10,
rustic 0.11, simple-http-server 0.8, ttyper 1.6, xan 0.59, zenith 0.15.

16 fallos quedan staged en incoming/ para triage (frontera de libs C /
imports rotos). Verificado `file ... statically linked` en los 20.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 00:31:08 -04:00
sergioandClaude Opus 4.8 9baa3fb85c Etapa G: tanda cli-rust-8 — 11 promovidos estáticos (corpus 159→170)
Granja JOBS=4 sobre cli-rust-8 (import 13/19): build-yield 10/13 +
cargo-hack re-arreglado. Todos ELF static-musl que corren:
ast-grep 0.43, boxxy 0.8.5, cargo-msrv 0.19.3, cargo-sweep 0.8,
comrak 0.52, genact 1.5.1, macchina 6.4, numbat 1.23, rage 0.11.2,
repgrep 0.16.1 (rgr), cargo-hack 0.6.45.

cargo-hack: de-Alpinizado a receta mínima (la fase compile custom con
`cargo auditable build` daba binario dinámico; el path default del lab
aplica crt-static + linker zig → estático). Verificado `file ... statically`.

Diferidos a .deferred (frontera de libs ausentes): hurl (libcurl+libxml2+
openssl-sys), termscp (Cargo.lock no carga bajo el vendor del lab).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 21:02:58 -04:00
sergioandClaude Opus 4.8 71bc228102 Etapa G: cosecha tanda CLI Rust — 5 promovidos estáticos (corpus 154→159)
Drenada la cola de 14 staged. 5 sellados+publicados al repo firmado, todos
ESTÁTICOS y ejecutan (versión correcta):
  - topgrade 17.6.1, git-absorb 0.9.0, cargo-audit 0.22.1, yazi 26.5.6, cargo-edit 0.13.11

Patrón común de de-Alpinización (estilo zellij): el lab NO trae `cargo auditable`
⇒ reescritas LIMPIAS sin él ni manpage/completions. Claves de la tanda:
  - SIN fase compile custom ⇒ path default del lab (aplica crt-static tras `cargo
    rustc --`, sólo el bin top, NO en RUSTFLAGS donde rompería los proc-macros) +
    linker zig-cc ⇒ binario estático. Las fases custom con `cargo build` salían
    DINÁMICAS (musl pie) y no corrían en el host — corregido.
  - compiler="gcc" donde hay deps-C de build-script (git2/openssl/ring/mlua-lua/
    jemalloc/onig): el CC=zig global rechaza el triple x86_64-alpine-linux-musl; el
    gueto gcc-musl los compila, linker sigue zig-cc. +deps zlib en git-absorb/cargo-audit.
  - cargo-edit: 4 bins (cargo-add/rm/upgrade/set-version, no hay bin `cargo-edit`);
    el path default (`cargo rustc -- flags`) exige un único target ⇒ fase custom que
    itera los 4 bins con crt-static por-bin.
  - yazi: dropeado el patch system-lua + dep lua5.5 ⇒ mlua vendorea su Lua.

Diferidos a incoming/.deferred (frontera dura, motivo documentado):
  - jless → libxcb (clipboard X11, dep real sin receta)
  - b3sum → proyecto anidado con Cargo.lock propio (el vendor del lab no lo alcanza)
  - dprint/mprocs → libclang.a/bindgen (clang-sys estático)
  - hck → libz-sys (-lz no hallado), kalker → gmp, dura → Cargo.lock stale,
    xcp → libfs i32/u64 musl, mdcat → #![deny(warnings)] en lib (path default no
    deja inyectar --cap-lints)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 17:49:50 -04:00
sergioandClaude Opus 4.8 3ebee950ab Etapa G: nu/nushell al corpus (153→154) — el giant más duro, sellado
nushell 0.104.1: uno de los paquetes más duros del ecosistema (openssl-sys + libgit2-sys +
libssh2-sys + libsqlite3-sys + mimalloc, todos sus C vendoreados). Fix clave: convertir la
receta del estilo abuild (fase compile custom, que NO monta el wrapper .hammer-zig-cc) al
build POR DEFECTO (flags=['--bin','nu']) ⇒ el wrapper traduce el target alpine→musl que zig
no conoce, y los -sys compilan. Dropea system-deps.patch (vendor todo). mise diferido
(.deferred: su build.rs busca git/archivo en build-time).

HALLAZGO GENERAL: recetas import-Alpine con fase abuild + C-deps fallan porque la fase custom
no monta el wrapper zig-cc. Fix = usar el build por defecto (sin fase compile).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 15:19:43 -04:00
sergioandClaude Opus 4.8 e4f682b87e Etapa G: zola al corpus (152→153) — el giant de tera/oxc/grass/ravif sella
Granja dedicada de giants (JOBS=3, RAM 31G): zola ✓ (no necesitaba fix, solo tiempo).
mise ✗ (su build.rs busca git/archivo faltante) y nu ✗ (openssl-sys: la fase abuild no
monta el wrapper zig-cc → zig recibe target alpine que no conoce) quedan para fix.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 14:55:08 -04:00
sergioandClaude Opus 4.8 adbf986133 Etapa G: cosecha tanda openssl/git2 — 4 promovidos (corpus 148→152)
Granja sobre incoming (giants apartados): monolith + tuc + cargo-generate + cargo-outdated
sellados y promovidos + repo re-firmado. Valida los fixes de hammer-build de esta sesión:
- monolith: openssl-sys vía OPENSSL_DIR.
- cargo-generate/cargo-outdated: cargo-tools COMPLETOS (git2+openssl) — libgit2-sys vendorea
  su libgit2 con cmake; openssl-sys usa la openssl del corpus. Frontera C-FFI destrabada.
- tuc: cargo build (sin auditable).
14 staged (aws-lc/lint/C-libs/mecánicos) + 3 giants en .deferred para tanda dedicada.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 13:34:38 -04:00
sergio 3520e12574 Etapa G: aparta giants (mise/zola/nu) a incoming/.deferred — bloqueaban el promote del farm 2026-06-23 13:20:14 -04:00
sergioandClaude Opus 4.8 897e355957 Etapa G: prep frontera git2 — cargo-audit/generate/outdated (openssl + libgit2 vendored)
Aplica el mismo patrón openssl a los cargo-* (dep 'openssl' ⇒ OPENSSL_DIR) y deja que
libgit2-sys vendoree su propio libgit2 con cmake (sin dep espuria). cargo-audit: además
'cargo auditable'→'cargo build', fix path '../target'→'target', dep 'openssl-dev>3'→'openssl'.
Quedan staged para la próxima granja (validar el vendoring de libgit2 con zig-cc/cmake).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 13:02:21 -04:00
sergioandClaude Opus 4.8 fd456ca9f0 Etapa G: destraba frontera openssl-sys (OPENSSL_DIR + fallback de deps al corpus)
Dos fixes en hammer-build que juntos destraban las recetas con C-FFI:
- Inyecta OPENSSL_DIR=/usr + OPENSSL_STATIC + OPENSSL_NO_VENDOR cuando la receta declara
  'openssl' como dep ⇒ openssl-sys usa la openssl hammer-built (estática/musl) en vez de
  buscar en el host y abortar.
- resolve_dep_path(): fallback al catálogo PADRE — una receta en recipes/incoming/ ahora ve
  las deps del corpus recipes/ sin duplicarlas (la granja construye desde incoming/).
Recetas: +dep openssl a monolith/mdcat/mise; tuc saca 'cargo auditable'→'cargo build'.
VALIDADO: monolith v2.10.1 sella (openssl-sys linkea contra la openssl del corpus).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 12:38:31 -04:00
sergioandClaude Opus 4.8 ff17454a47 Etapa metal: habilita DRM_I915 + firmware (panel TigerLake se apaga sin él)
Diagnóstico cerrado: el reboot-probe probó que el kernel está VIVO en el metal del
usuario (se reinicia solo); la pantalla negra es porque el panel TigerLake se apaga al
pasar el kernel y solo i915 (driver Intel real) lo reenciende — efifb/simpledrm/earlyprintk
escriben a un fb muerto (validado: nomodeset tampoco). Era un recorte de más (i915 venía
-d del kernel QEMU). Fix = lo que toda distro normal trae:
- linux-metal.toml: -e DRM_I915 -e DRM_FBDEV_EMULATION (saca -d DRM_I915).
- metal-firmware.sh: inyecta i915/tgl_* (DMC/GuC/HuC, 1.3M) en /lib/firmware/i915.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 11:54:49 -04:00
sergioandClaude Opus 4.8 5012549f85 Etapa metal: USB de bisección (initramfs tiny) + fix piso FAT32 de la ESP
- Diagnóstico metal: con systemd-boot, earlyprintk=efi NO imprime NADA del kernel
  (solo 'Loaded initrd MEDIA_GUID' + 'Measured initrd PCR 9' y cuelga) ⇒ el kernel
  no llega ni a su consola temprana: hang en ExitBootServices o el decompresor.
- metal-usb-sdboot.sh: piso de 48MiB a la ESP (FAT32 -F exige ~33MiB; con initramfs
  chico caía debajo y la firmware no leía el BOOTX64.EFI → 'Not Found').
- USB de bisección (work/hammer-tiny-usb.img, initramfs busybox 1.3MB): ✓ OVMF llega a
  /init. Si en el metal del usuario ARRANCA a shell ⇒ el cuelgue era el initrd 100MB;
  si TAMBIÉN cuelga ⇒ es el kernel/EBS (probar nokaslr/no5lvl).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 01:26:29 -04:00
sergioandClaude Opus 4.8 ce0cf8762e Etapa G: pre-carga cola para granja nocturna — cli-rust-7 (6 vía Alpine) → incoming 21
tandas/cli-rust-7.txt (24 nombres, yield 6/24: yazi/topgrade/kalker/git-absorb/jless/tuc;
el path nix dio 0 por el gotcha de sandbox, solo Alpine). Cola incoming=21 para drenar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 01:13:57 -04:00
sergioandClaude Opus 4.8 1dc5c16fbd Etapa metal: USB systemd-boot + kernel diagnóstico (esquiva quirk LoadOptions del firmware)
El boot por EFI-stub DIRECTO se cuelga en el firmware del usuario tras 'Measured initrd
PCR 9' (quirk EFI_LOAD_OPTION del firmware + initrd 100MB por la firmware). Pivote:
- scripts/metal-usb-sdboot.sh: arma work/hammer-metal-usb.img (disco GPT+ESP FAT32) con
  systemd-boot (binario del host, crutch de bringup) como BOOTX64.EFI + loader entry.
  systemd-boot provee el initrd por LoadFile2 (esquiva el parseo de cmdline del firmware)
  y permite EDITAR la cmdline en vivo (tecla 'e') ⇒ iterar sin recompilar 45min.
  ✓ VALIDADO OVMF: menú → 'Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID' → arje-zero PID1.
- linux-metal.toml: kernel diagnóstico — cmdline +earlyprintk=efi,keep +ignore_loglevel
  +efi=novamap (ve el boot en pantalla post-ExitBootServices) y -DEBUG_WX (saca el trace).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 00:33:46 -04:00
sergioandClaude Opus 4.8 30d8c95577 Etapa metal: ✓ VALIDADO boot UEFI por EFI-stub (ISO como disco USB) + nota Secure Boot
work/hammer-metal.iso (257M) bootea en OVMF por las dos vías como DISCO:
- virtio-disk y USB-storage(xhci): EFI-stub carga kernel+initrd de la ESP (GPT
  isohybrid), cmdline horneado aplica, usbhid/cfg80211 init, arje-zero PID1, SIN panic.
- El '-cdrom' falla (El Torito EFI se trunca >32MB) pero es IRRELEVANTE: un USB es disco
  ⇒ la firmware lee la ESP por GPT. Confirmado el escenario real del pendrive.
Falta solo el hardware: quemar y bootear (Secure Boot OFF).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 22:31:41 -04:00
sergioandClaude Opus 4.8 63d0871664 Etapa metal: banner de marca para el motd del live (icono martillo+# + wordmark)
scripts/hammer-banner.txt: icono ASCII cabeza-de-martillo rellena de '#' (el hash
content-addressed) + handle, wordmark 'hammer' (toilet pagga, estilo pixel-block que
rima con la cabeza de hashes) + acrónimo HAMMER + uso WiFi. metal-iso.sh lo copia a
/etc/motd ⇒ es lo primero que ves al loguear en consola. Reutilizable como base de
logo/wallpaper.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 22:09:40 -04:00
sergioandClaude Opus 4.8 b1e2eb95ce Etapa metal: arranque UEFI por EFI-stub directo (esquiva GRUB 2.14 roto)
La rama GRUB-EFI cuelga (bug GRUB 2.14 del host rolling, afecta a cualquier kernel).
Solución: bootear el kernel por su EFI-STUB directo, sin GRUB-EFI.

- linux-metal.toml: CONFIG_CMDLINE_BOOL=y + CMDLINE horneado
  ('console=tty0 ... initrd=/initramfs.cpio.gz rdinit=/init'). Sin FORCE ⇒ en BIOS
  GRUB sigue mandando su cmdline. Confirmado en fuente (libstub/file.c:50): el
  EFI-stub convierte '/'→'\' y efi_load_initrd cae a la carga por cmdline sin loader.
- iso-image.sh: modo EFI_STUB=1 ⇒ la ESP lleva el bzImage como \EFI\BOOT\BOOTX64.EFI
  + initramfs.cpio.gz en su raíz (FAT32). La firmware lanza el kernel directo.
- metal-iso.sh: pasa EFI=1 EFI_STUB=1 (híbrido: BIOS GRUB + UEFI EFI-stub).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 21:57:46 -04:00
sergioandClaude Opus 4.8 487d741f08 Etapa metal: ensamblador del ISO EFI (pieza 4) + hallazgo regresión EFI
- scripts/metal-iso.sh: arma work/hammer-metal.iso (kernel metal + firmware AX201
  + wpa_supplicant + wifi-connect), consola en pantalla (console=tty0).
- VALIDADO BIOS (QEMU): el kernel metal bootea, inicializan usbhid/i8042 (teclado),
  e1000/e1000e/igb, cfg80211+regulatory (stack WiFi), simpledrm/VGA console, y
  arje-zero arranca PID1. iwlwifi/nvme presentes (no bindean en QEMU sin hw real).
- HALLAZGO: la rama UEFI (OVMF) NO bootea el kernel — regresión pre-existente de
  GRUB 2.14 (host rolling): GRUB-EFI dice 'Booting' y el kernel queda mudo, con
  CUALQUIER kernel (el QEMU tmb falla; efi-boot-test FALLA UEFI / PASA BIOS).
  Fix propuesto: boot por EFI-stub directo (sin GRUB-EFI) — requiere kernel con
  CONFIG_CMDLINE embebido + ESP con bzImage como BOOTX64.EFI.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 21:45:28 -04:00
sergioandClaude Opus 4.8 3aec59ea41 Etapa metal: stack de red WiFi — libnl + wpa_supplicant (pieza 3)
- recipes/libnl.toml: netlink lib (libnl-3 + libnl-genl-3), estática, deps
  flex/bison/m4 (regenera parsers). Base nl80211 del kernel metal.
- recipes/wpa_supplicant.toml: supplicant WPA2 2.11, driver nl80211 sobre libnl,
  CONFIG_TLS=internal (sin dep openssl; suficiente WPA2-PSK). Compila a la 1ra con
  zig-cc/musl ⇒ wpa_supplicant/wpa_cli/wpa_passphrase ESTÁTICOS x86-64. udhcpc de
  busybox da el DHCP. (iw omitido: wpa_cli scanea.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 21:03:16 -04:00
sergioandClaude Opus 4.8 ac2835f4e7 Etapa metal: kernel-metal (drivers reales =y) + firmware AX201 + ESTADO.md
Pieza 1+2 de 'hammer en el metal' (laptop TigerLake, WiFi AX201):
- recipes/linux-metal.toml: variante del kernel con hardware real built-in
  (efifb/simpledrm, USB+HID, AHCI/NVMe, cfg80211+mac80211+iwlwifi/iwlmvm,
  e1000e/r8169, USB-CDC). Conserva los bits hammer (overlay/userns/fanotify/
  virtio) ⇒ sigue booteando en QEMU. MODULES=off (monolítico, sin modprobe).
  Deja linux.toml INTOCADO (su of_tree es load-bearing del selfhost).
- scripts/metal-firmware.sh: inyecta iwlwifi-QuZ-a0-hr-b0/cc-a0 + regulatory.db
  en /lib/firmware de un rootfs (descomprime .zst → .ucode plano). Blobs fijos
  (TODO pin a linux-firmware).
- ESTADO.md: resumen humano del proyecto.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 20:56:19 -04:00
sergioandClaude Opus 4.8 367b167991 Etapa G: cosecha cli-rust-6 (parcial) — 8 al corpus (137→145)
Granja cortada a tiempo (devuelvo la CPU); promoví manualmente los 8 sellados antes del corte:
cargo-binstall/cargo-bloat/cargo-deny/cargo-expand/cargo-machete/cobalt/fnm/ripsecrets. zola
quedó a medio compilar (no sellado) + el resto de cargo-* fallan por dep-C (openssl/git2) —
quedan staged para la próxima. build-yield parcial 8/22.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 17:53:58 -04:00
sergioandClaude Opus 4.8 d109af9022 Etapa G: pre-carga la cola — tanda cli-rust-6 importada (15/15, lista para la próxima granja)
Sin construir (no peleamos CPU ahora). import-batch 15/15 (nix=14, alpine=1) + pin 14 tag→SHA.
Herramientas cargo + dev CLIs: cargo-edit/deny/audit/expand/machete/bloat/outdated/generate/
binstall + mdcat/zola/cobalt/mise/fnm/ripsecrets. La próxima sesión arranca con build-farm.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 17:06:39 -04:00
sergioandClaude Opus 4.8 6bdbb17d48 Etapa G: cosecha cli-rust-5 — 15 al corpus (122→137) + tanda + cola
Granja JOBS=4 con scudo ya mitigado + toolchain 1.96: gitu/hgrep/igrep/kmon/kondo/mask/nomino/
oha/pik/ripgrep-all/rustscan/sad/serie/stylua/systeroid construyen+sellan+corren static-musl
(build-yield 15/23). pik confirma que sysinfo (antes MSRV 1.95) ya entra con 1.96. Incluye
tandas/cli-rust-5.txt (import 17/19) + dura/xcp staged (nuevos fallos: E0308/edición, triage).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 16:42:18 -04:00
sergioandClaude Opus 4.8 2032df4085 Etapa G: MITIGA scudo (alias libscudo→musl) → destraba trippy/jnv/presenterm (119→122)
El edge rust depende de scudo-malloc y los shims rustc/cargo lo linkean como primer NEEDED ⇒
scudo interpone malloc en todo el proceso y CRASHEA a rustc en ciertos proc-macros (corrupted
chunk header / SIGSEGV). No se puede apk-del (rust depende). Mitigación: aliasar
/usr/lib/libscudo.so → la libc musl ⇒ el NEEDED resuelve pero malloc cae a musl, sin scudo.
Los shims no usan símbolos scudo-específicos (sólo querían el override), seguro y reversible
(.orig-scudo). bootstrap-devfs.sh lo reproduce (paso 3a-bis).

Destrabados+promovidos: trippy (trip 0.13.0), jnv (0.7.1), presenterm (0.16.1) — antes
crasheaban rustc, ahora construyen+corren static-musl.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 16:01:37 -04:00
sergioandClaude Opus 4.8 5468010a08 Etapa G: b3sum reescrita Cargo-limpia (WIP, queda staged)
Quita el over-build de Alpine (cmake/ninja+TBB de la libblake3 C → deps samurai/onetbb
espurias). El bin b3sum vive en el miembro b3sum/ del workspace blake3; el lab inyecta
[workspace] vacío en el root ⇒ -p b3sum no resuelve + vendorea las deps del root. Queda
staged; re-importar de nix lo daría rooteado en el crate b3sum directamente.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 15:28:45 -04:00
sergioandClaude Opus 4.8 f7669073d3 Etapa G: cosecha cli-rust-4 — 11 al corpus (108→119)
Granja JOBS=4 sobre la cola recargada, toolchain 1.96: atuin/csvlens/dua/erdtree/fselect/
git-cliff/rip2/rnr/skim/television/vivid construyen+sellan static-musl y se promueven al repo
firmado. build-yield 11/20. Quedan staged 9: b3sum (recipe arreglada, retry), dprint (clang-sys
pide libclang.a estática), hck/nu (deferidos), jnv/monolith/mprocs/presenterm/trippy (triage).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 15:24:30 -04:00
sergioandClaude Opus 4.8 81ad23e8bb Etapa G: recarga la cola — tanda cli-rust-4 importada (18 staged para la granja)
import-batch sobre tandas/cli-rust-4.txt (20 entradas) → 18/20 (nix=17, alpine=1; fallaron
huniq/dua-cli por src no-clasificable). pin ancló 17 tag→SHA. Cola lista: atuin/television/
git-cliff/skim/dprint/trippy/mprocs/dua/erdtree/b3sum/vivid/monolith/presenterm/rip2/jnv/
csvlens/fselect/rnr (+ hck/nu staged previos). Techo MSRV ahora 1.96 ⇒ candidatos modernos entran.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 14:38:36 -04:00
sergioandClaude Opus 4.8 ae4daa44a5 Etapa G: ouch al corpus (107→108) — esquiva el frente C++ dropeando rar/bzip3
ouch construye+corre (0.8.0) con --no-default-features --features use_zlib,use_zstd_thin +
gueto gcc: mantiene gzip/zstd/bzip2/xz/zip/tar (deps C, gcc las compila), descarta unrar/bzip3
(deps C++: el link estático pide -lstdc++ y la libc++ de zig choca con los objetos g++). El
frente C++ general queda pendiente; ouch no lo necesita para los formatos comunes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 14:38:27 -04:00
sergioandClaude Opus 4.8 1868a2e303 Etapa G: biome al corpus (106→107) — toolchain JS/TS, cfg_select estabilizado en 1.96
biome (antes E0658 'cfg_select', macro nightly) construye+sella con 1.96. Cierra la tanda
desbloqueada por el bump: oxlint/ruff/zellij/uv/watchexec/biome = 6 al corpus.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 14:19:25 -04:00
sergioandClaude Opus 4.8 b73fcc2b70 Etapa G: watchexec al corpus (105→106) — el feature nightly se estabilizó en 1.96
watchexec (antes E0658 'debug_closure_helpers', feature nightly) construye+sella con 1.96:
la feature se estabilizó. b3:557bff16. Confirma que el bump destraba no sólo MSRV de deps
sino features de std antes nightly.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 13:44:50 -04:00