Commit Graph
307 Commits
Author SHA1 Message Date
sergio fb6cb05aab base-system: promover 17 esenciales a canónicas + repo firmado (713→730)
Los 17 que construyen de la tanda base-system-1 pasan de recipes/incoming-clib a recipes/
canónicas y al índice firmado (dist/repo, artefacto local): bash git sudo doas util-linux
rsync sed tzdata dbus dhcpcd iproute2 iputils dosfstools e2fsprogs parted vim ca-certificates.
Sólo foot queda staged (stack Wayland, diferido). Cierra el grueso del hueco 'userland
foundational' hacia la distro completa: shell real + VCS + privilegios + red + disco + TLS.
2026-07-10 23:09:03 -04:00
sergio bd9054ddb6 base-system: util-linux construye — mount/umount/blkid/fdisk estáticos
b3:d0d0ebaa (util-linux 2.42.2). De-Alpinizado (deps→linux-headers), fase configure explícita
--without-{python,systemd,udev,ncurses,...}. Bug real del lab parcheado: zig cc -mcpu=baseline
traduce a -mcpu= VACÍO en modo preprocesador (-dM -E -) que zig rechaza; sed filtra ese flag sólo
en tools/all_{errnos,syscalls}. Estáticos vía --enable-static-programs=blkid,fdisk,mount,umount;
lsblk/lscpu quedan musl-dinámicos (libtool ignora -static). Utilería base del sistema.
2026-07-10 23:06:14 -04:00
sergio a6747a18ce base-system: git construye — VCS real (git 2.54.0 estático)
b3:64b797d2. Reescribí las fases garabateadas (compile hacía _perl_config; install compilaba la
suite de tests) a make all/install limpios con NO_GETTEXT/TCLTK/PYTHON. deps zlib/openssl/curl/
pcre2. Gotchas: FUZZ_PROGRAMS= (oss-fuzz usa --allow-multiple-definition que ld.lld rechaza);
-fsanitize=undefined en compile+install IDÉNTICO (libz.a trae refs __ubsan_* + git relinkea si
GIT-CFLAGS difiere entre fases). El hueco más grande del userland, cerrado.
2026-07-10 22:59:41 -04:00
sergio f28d1bb50b base-system: parted construye — GNU parted 3.7 estático (GPT/MBR)
b3:3d7bb8a7. --disable-device-mapper (sin lvm2) --enable-static; make LDFLAGS=-all-static
(libtool ignora el -static del lab → binario musl-dinámico que segfaultea fuera del sandbox).
parted EXIGE libuuid (uuid_generate p/ GUIDs GPT) y util-linux está roto → horneé una libuuid
mínima (UUID v4 desde /dev/urandom) en la fase configure. Probado: mklabel gpt + mkpart reales.
TODO: reapuntar a la libuuid real de util-linux cuando ésta compile.
2026-07-10 22:59:08 -04:00
sergio e90846877b base-system: sudo construye — 1.9.17p2 (sudo/visudo/sudoreplay)
b3:d0b9752d. URL/sha256 arreglados (var abuild sin expandir); fase configure explícita;
--without-pam/sssd/skey + --with-secure-path. Clave del link: --disable-shared
--enable-static-sudoers --disable-log-{server,client} (sin eso ld.lld falla por símbolos
versionados sudo_*_v1 de libsudo_util). Install con INSTALL_OWNER= (setuid lo re-aplica la
hidratación). Con doas cubre el escalado de privilegios.
2026-07-10 22:52:14 -04:00
sergio 0cea5209de base-system: ca-certificates construye — 119 raíces TLS (HTTPS valida)
b3:c5a52051. Un solo cambio: [deps] build=[openssl]. La premisa era falsa: c_rehash es un binario
C (no el script perl) que sólo faltaba -lcrypto; perl SÍ está en la dev-fs (mk-ca-bundle.pl corre).
ca-certificates.crt con 119 certs + update-ca-certificates. Sin esto curl/wget HTTPS no validan.
2026-07-10 22:52:02 -04:00
sergio da2d6d6fa3 base-system: vim construye — VIM 9.2 consola estático (gcc gueto + no-pie)
b3:1fdc6fdd. Console-only (--disable-gui --without-x, sin intérpretes). Gotchas: zig-cc
miscompila vim → compiler=gcc (como nano/htop); ncurses del corpus es widec-only (--with-tlib=
ncursesw); termcap usa reubicaciones R_X86_64_32 sobre _nc_globals que no entran en static-PIE →
-fno-pie/-no-pie; vim_cv_* cacheadas para no colgar en musl estático; fase configure explícita.
2026-07-10 22:51:33 -04:00
sergio 7437049999 base-system: dbus construye — D-Bus 1.16.2 estático (meson)
b3:a569b6cb. Sólo necesita expat (quité glib/libsm/libx11/xmlto ausentes); patrón meson estático
(--prefer-static -Dsystemd=disabled -Dx11_autolaunch=disabled -Dtools=true). dbus-daemon/launch/
send/monitor. IPC de escritorio para el futuro stack gráfico.
2026-07-10 22:44:30 -04:00
sergio 6b7638d6ef base-system: doas construye — escalado de privilegios minimalista estático
b3:e2d2244d. configure --without-pam ya andaba (bison=yacc para parse.y); el fallo era el install
(chown root:root falla en el sandbox + doas.conf de aports ausente) → copia manual del binario.
2026-07-10 22:44:18 -04:00
sergio f5d65beeb7 base-system: tzdata construye — zoneinfo (598 zonas) desde eggert/tz git pineado
b3:6b4f0397. Raíz del fallo: el tarball IANA tzcode NO trae los datos de zona (y el combinado
es .tar.lz sin lzip acá). Cambié [source] a git github.com/eggert/tz @ tag 2026b (código+datos
juntos, commit fijo ADR 0006), quité los patches de posixtz (no lo construimos), fases = zic →
DESTDIR posix_only. Habilita la zona horaria real del instalador interactivo.
2026-07-10 22:44:18 -04:00
sergio e3d6e7e2cb base-system: iputils construye — ping/arping/tracepath (meson)
iputils 20250605 estático (b3:669520e9). Migré de la shell abuild al patrón meson estándar
(samurai=ninja + meson canónicos), docs off (BUILD_MANS=false) para no arrastrar docbook-xsl,
LTO off. libcap:yes.
2026-07-10 22:43:15 -04:00
sergio ffc0793c2e base-system: dhcpcd construye — cliente DHCP estático
dhcpcd 10.3.2 (b3:aaeda08e), INET/IPv6/DHCPv6/PRIVSEP. Sólo sobraba bsd-compat-headers
(dhcpcd trae su propio compat/) + una línea install de dhcpcd.initd de aports. Con iproute2
completa el bring-up de red del sistema.
2026-07-10 22:42:44 -04:00
sergio a002db40d7 base-system: e2fsprogs construye — mke2fs/e2fsck estáticos p/ el instalador
e2fsprogs 1.47.4 (b3:3cf73aea): mke2fs, e2fsck, mkfs.ext2/3/4. Quité fuse3, --disable-elf-shlibs
+ --enable-static + --disable-fuse2fs. Junto a dosfstools completa el herramental de disco real
que hoy el instalador cubre con busybox mke2fs.
2026-07-10 22:39:00 -04:00
sergio dfb9382c7a base-system: rsync construye — fase configure explícita + drop acl/attr/etc
rsync 3.4.4 estático (b3:40dbac6f). Gotcha: sin fase [build.phases] configure propia,
hammer autogenera su ./configure e ignora los --disable-* de la receta ⇒ hay que declararla.
Flags: --disable-{acl,xattr,xxhash,zstd,lz4,openssl} --with-included-{popt,zlib}. Quité las
build-deps ausentes y las líneas install de ficheros de servicio Alpine (rsyncd.initd/conf).
2026-07-10 22:38:47 -04:00
sergio 640079fddd base-system: bash construye — shell real (GNU bash 5.3 estático)
b3:a03c1ad5. Arreglé el tarball (URL con vars abuild sin expandir → bash-5.3.tar.gz
limpio + sha256), readline embebido (--without-installed-readline), quité --with-curses
(link estático) y las líneas install de bashrc/profile inexistentes. deps: ncurses+readline
+linux-headers. Primer shell POSIX completo del userland (hasta ahora sólo busybox sh).
2026-07-10 22:37:55 -04:00
sergio efcf396afb base-system: iproute2 construye — ip+ss estáticos, features de libs ausentes off
iproute2-7.1.0 (b3:f05e947f). Quité build-deps ausentes (iptables/libmnl/elfutils/
libcap/bash) y desactivé sus features (HAVE_MNL=n HAVE_ELF=n HAVE_CAP=n HAVE_SELINUX=n)
para el 'ip'/'ss' base de la red del sistema.
2026-07-10 22:36:47 -04:00
sergio 9547fb61f1 base-system: dosfstools construye — drop autoconf/automake/libtool espurios
mkfs.vfat/fsck.fat 4.2 estático (b3:6fdabec4) para la ESP del instalador. La receta
ya usaba ./configure directo; sólo sobraban las build-deps de regeneración autotools.
2026-07-10 22:35:51 -04:00
sergio ce01c65b21 base-system: sed construye (de-Alpinizado) — drop perl dep + LTO
Primer esencial del userland foundational que compila real: GNU sed 4.10 estático
musl (b3:f237dd4b), quitando el build-dep espurio 'perl' (sólo tests/docs de Alpine)
y el -flto=auto que zig-cc rechaza. Valida el patrón de de-Alpinización de la tanda
base-system-1 (imports Alpine punto-de-partida → recetas limpias).
2026-07-10 22:35:18 -04:00
sergioandClaude Opus 4.8 494d3fd615 granja: cargar cola base-system — 18 esenciales del userland foundational
Los huecos reales para una distro completa (el sistema ya está: bootstrap/
self-host/kernel/init/EFI/paquetería). Cola aislada en incoming-clib:
git rsync bash ca-certificates sudo doas util-linux sed tzdata e2fsprogs
dosfstools parted iproute2 iputils dhcpcd vim dbus foot. Import 18/18
(17 alpine + 1 nix), deps ya-canónicas podadas. Patches musl viajan.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 21:53:47 -04:00
sergioandClaude Opus 4.8 548f30b3ef linux-metal: cero-parpadeo — deferred-takeover + cmdline quiet (ADR 0010 paso 4)
CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y (fbcon no toca el framebuffer
hasta el primer output ⇒ pantalla negra desde la firmware hasta que mirada abre
el DRM). Cmdline horneada: quiet loglevel=3 vt.global_cursor_default=0, sin el
earlyprintk=efi,keep ignore_loglevel de bringup (forzaban salida y rompían el
deferred-takeover). Orden de consola: ttyS0 ÚLTIMO ⇒ /dev/console=serie ⇒ la
shell de arje-zero sale por serial, no pinta tty0 (pantalla). CONFIG_LOGO ya off.

Fix diagnosticado por captura de framebuffer en OVMF-GOP. Rebuild en curso.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 20:18:16 -04:00
sergioandClaude Opus 4.8 c82588ced8 mirada-usb: imagen USB de prueba de mirada en GPU ajena (NVIDIA)
- recipes/mesa-swrast.toml: mesa softpipe hammer-nativo (sin LLVM) para render software.
- scripts/mirada-usb.sh: ensambla rootfs (dev-fs musl + hydrate mirada/seatd/libinput/
  mesa + overlay Alpine llvmpipe/lavapipe/nouveau + XKB + PAM + init seatd+compositor) y
  empaqueta la USB con linux-generic vía systemd-boot.
- docs/mirada-usb-nvidia.md: uso + estado.

Validado en QEMU virtio-gpu: el COMPOSITOR arranca entero (libseat→card0→GBM+EGL+
GlesRenderer→[8/8]→escritorio, acepta clientes, dibuja la ventana del greeter). El
GREETER (Vello) exige shaders float16 que llvmpipe/lavapipe NO dan ⇒ su login sólo
pinta con GPU real (nouveau+firmware, v2).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 14:20:46 -04:00
sergioandClaude Opus 4.8 4aaefa53e4 granja: mise 2026.7.0 al catálogo firmado (713) — cierra el bug vendor-clobber
El fix cargo_vendor_dir (b580c5b) destrabó mise: selló (ELF estático funcional,
mise 2026.7.0) y se promovió. Sale del diferido; queda en recipes/mise.toml con
[source] cargo_vendor_dir=.hammer-cargo-vendor. README del diferido actualizado.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 12:18:32 -04:00
sergioandClaude Opus 4.8 5e8ff2348f granja: feroxbuster al catálogo firmado (712) — fix wrapper AR para Rust+sys-crate C
El default zig-cc exporta AR="zig ar" (con espacio); el crate `cc` lo ejecuta
como binario único y falla. Wrapper `.hammer-zig-ar` per-receta destraba el
sys-crate C. feroxbuster construye+sella; mise pasa openssl vía feature rustls
pero su bin final falla (giant aws-sdk/rattler, a diagnosticar). mdcat (openssl
transitivo) y jless (clipboard X11) diferidos a tandas/deferred-openssl-xcb/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 22:42:32 -04:00
sergioandClaude Opus 4.8 d9d891a64a granja: tanda VPS efímero 2026-07-06 — 7 promovidos al catálogo firmado (714)
dalfox/templ/errcheck/ineffassign/unconvert (Go) + dprint (Rust) + kyverno (Go),
construidos en un worker efímero hcloud, cosechados y firmados. Binarios musl-static
verificados: dalfox 3.1.2, templ v0.3.1020, dprint 0.55.1, ineffassign, y los
analizadores Go corren. feroxbuster/jless/mdcat/mise quedan staged (frontera *-sys:
openssl-sys/xcb desde fuente).

Fix farm-down: el promote final ahora recorre TODAS las colas del worker
(incoming/incoming-go/incoming-clib), no sólo recipes/incoming — los artefactos de
las otras colas se cosechaban pero no se firmaban.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 07:31:05 -04:00
sergioandClaude Opus 4.8 7891654810 granja: cola fresca para prueba VPS efímero — 11 recetas nuevas (dalfox/templ/errcheck/ineffassign/unconvert/kyverno Go + jless/dprint/mdcat/feroxbuster/mise Rust), purga cola stale ya-en-catálogo
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 06:46:39 -04:00
sergioandClaude Opus 4.8 c516f9a5ea Etapa G (go): promovida tanda go-2026-07-05b al catálogo firmado (anew/chartmuseum/fortio/goldilocks/kluctl/nancy/pint/sake/timetrace) + gotools nuevo
Cosecha del ciclo que sacó al VPS del idle. Build-yield 20/22 en incoming-go (fallan
dolt/migrate, quedan staged). El resto de las 'frescas' del refeed resultaron duplicados
ya catalogados (hugo/delve/glow/sops/dnsx/kubeseal/dbmate/jsonnet-bundler/opa/scaleway-cli
promovidos en tandas previas).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 08:16:19 -04:00
sergioandClaude Opus 4.8 a917149116 Etapa G (go): re-alimento incoming-go — 13 recetas frescas al VPS idle (hugo/delve/glow/opa/scaleway-cli/kubeseal/dolt/dbmate/migrate/sops/gotools/dnsx/jsonnet-bundler)
El worker VPS estaba idle (load 0.01): las 3 colas eran 100% cache-hit (tanda go-2026-07-05b
sellada, incoming/ del otro agente, incoming-clib 21/21). Cosecho 13 attrs Go nuevos verificados
por nix eval (los alias de las listas de refeed daban 'ninguna fuente' por no ser attrs reales).
Import 13/13 nix + pin tag→SHA + rsync dirigido a la cola aislada incoming-go/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 07:54:09 -04:00
sergioandClaude Fable 5 6e602707fd Etapa G (go): puredns diferido (go.mod 1.16 vs unsafe.Slice, clase gotop) — tanda 2026-07-05b queda 9/10 sellada
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 06:21:34 -04:00
sergioandClaude Fable 5 6c655642b6 Etapa G (go): re-cola kluctl (go build -o: main en ./cmd sellaba binario 'cmd') + tanda 2026-07-05b a mano (fortio/nancy/chartmuseum/sake/timetrace/anew/puredns/pint/goldilocks, tags por ls-remote) + werf diferido (gpgme como skopeo)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 05:57:09 -04:00
sergio b615adeaae Etapa G: cosecha-go finde (auto) — promovidos: bom crossplane-cli fabric-ai kn kubectl-neat oh-my-posh prometheus-blackbox-exporter prometheus-node-exporter timoni | review: kluctl(bin=cmd) 2026-07-05 05:55:34 -04:00
sergioandClaude Fable 5 3eda286806 Etapa G (go): +4 a la cola (kluctl/timoni/kubectl-neat/kn) — el corpus ya cubre 803 nombres, la cola larga adelgaza
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 05:43:27 -04:00
sergioandClaude Fable 5 f922450c62 Etapa G (go): bom flags=./cmd/bom (raíz = magefiles con build-tags que excluyen todo) + aws-vault/minikube diferidos (CGO: onepassword-sdk / libvirt)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 05:39:57 -04:00
sergioandClaude Fable 5 e4ef80b76e Etapa G (go): cosecha 20 + syft/traefik promovidos a mano (pack fallaba: patches no viajaban a recipes/ — fix en harvest-go) + pre-check por name interno del TOML (exporters) + re-cola crossplane-cli/fabric-ai/oh-my-posh con fixes (alias crossplane, ./cmd/fabric, -o oh-my-posh) + logs por-cola en build-farm
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 05:31:58 -04:00
sergio ec8bb17fd8 Etapa G: cosecha-go finde (auto) — promovidos: apko atlas crane flyctl go-migrate gomi grype jsonnet-bundler krew kubescape melange rekor-cli revive scorecard seaweedfs staticcheck step-ca tea trivy xq | review: crossplane-cli(bin=crossplane) fabric-ai(bin=code2context) oh-my-posh(bin=src) syft(pack) traefik(pack) 2026-07-05 05:27:49 -04:00
sergioandClaude Fable 5 5c4c2cd153 Etapa G (go): grype/traefik a vía Go auto (les faltaba deps.build=go, fases abuild llamaban go a ciegas) + dolt diferido (cgo→ICU externa, necesita receta icu4c)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 00:51:58 -04:00
sergioandClaude Fable 5 46a2d777d3 Etapa G (go): re-alimenta la granja — tanda 2026-07-05 (15 recetas: flyctl/kubescape/seaweedfs/melange/step-ca/scorecard/krew/…, 11 a mano por fetchgit-NAR + 4 import nix), aliases de gate (weed/migrate/jb/fabric/crank) y descarte flux=misimport DirectFB
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 00:47:09 -04:00
sergioandClaude Fable 5 3171dd59f9 Etapa G (go): triage cola envenenada del VPS — purga 25 (misimports/CGO/embed) + 10 fixes (subdir dolt-atlas-omp, crane ./cmd/crane, trivy GOEXPERIMENT=jsonv2, xq/tea/staticcheck/syft/apko a vía Go auto)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 00:35:40 -04:00
sergio ba1b91b225 Etapa G: cosecha-go finde (auto) — promovidos: ssh-vault talosctl | review: 2026-07-04 20:05:19 -04:00
sergio 83e41a2174 Etapa G: cosecha-go finde (auto) — promovidos: kubie skaffold | review: terrascan(smoke) 2026-07-04 08:05:32 -04:00
sergio 460a4bb7e3 Etapa G: cosecha-go finde (auto) — promovidos: gocron lego | review: flux(bin=fluxcomp) kics(bin=builder) 2026-07-04 07:35:16 -04:00
sergioandClaude Opus 4.8 d94544b34d Etapa G (go): re-alimenta la granja — tanda go-refeed (51 recetas) a incoming-go
Prioridad: el worker VPS nunca idle. Import de 108 candidatos Go nuevos (listas
fuel-go menos el corpus); 2 olas → 51 recetas importadas (yield ~47%), pusheadas
a la cola incoming-go del VPS. El worker las está moliendo (load ~17). Incluye
proyectos Go grandes (dolt/etcd/dagger/crane/gitlab-runner/forgejo) que vendorean
cientos de deps ⇒ builds largos. Crudas de nixpkgs (tag sin pin, algún misimport
Python que falla inocuo); la cosecha promueve sólo las que sellan + pasan smoke.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 07:33:19 -04:00
sergio 83219e17aa Etapa G: cosecha-go finde (auto) — promovidos: temporal-cli | review: 2026-07-04 07:12:09 -04:00
sergioandClaude Opus 4.8 0b04c90d5b Etapa G (go): re-encola temporal-cli con el main correcto + alias de cosecha
El repo temporalio/cli tiene 3 mains bajo cmd/ (gen-commands, gen-docs,
temporal); detect_go_main elegía gen-commands ⇒ binario equivocado, quedó
en needs-review. Fix: flags=["./cmd/temporal"] apunta al CLI real (verificado
vía API de GitHub en el commit fijado). El binario se llama `temporal`, así
que agrego el alias temporal-cli→temporal al gate de harvest-go.sh (mismo
patrón que opentofu→tofu). Vuelve a recipes/incoming-go para que el worker
lo selle y la cosecha lo promueva.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 06:53:25 -04:00
sergioandClaude Opus 4.8 49106ed4ca Etapa G (GUI): appstream — agrega openssl a build-deps (dep transitiva de libcurl.pc)
appstream (dep compartida de libadwaita + demos GTK) usa libcurl en su meson (meson.build:171)
y declaraba curl+zlib sin openssl; libcurl.pc trae Requires: zlib,openssl ⇒ sin openssl.pc en
el sandbox, appstream falla y bloquea toda la cadena aguas arriba. Raíz real del muro que se
veía como 'libadwaita openssl not found' (el que fallaba era appstream, dep de libadwaita).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 11:49:50 -04:00
sergioandClaude Opus 4.8 d283630ecf Etapa G (GUI): libadwaita/demos — agrega openssl a build-deps (dep transitiva de libcurl.pc)
Las 4 recetas que dependen de curl (libadwaita + adwaita-hello/hammer-edit/sourceview-hello)
declaraban curl+zlib pero no openssl; libcurl.pc trae Requires.private: openssl (y libcurl.pc
sin openssl.pc en el sandbox ⇒ meson falla 'Dependency lookup for libcurl failed: openssl not
found'). Mismo patrón que harfbuzz/fontconfig. openssl ya está en el catálogo (recipes/openssl.toml).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 11:38:19 -04:00
sergioandClaude Opus 4.8 eae22122f5 Etapa G (GUI): cairo — preserva cairo-script-interpreter.pc (fix de regresión)
El patch anterior desactivaba el subdir cairo-script ENTERO para esquivar el link de pixman de
los ejecutables csi-*, pero eso quitaba libcairoscript + cairo-script-interpreter.pc, que los
demos GTK (gtk4-hello/adwaita-hello/sourceview-hello/hammer-edit) piden por pkg-config. Ahora el
subdir se construye (librería estática + .pc) y solo los EJECUTABLES csi-* se envuelven en
if false. cairo-trace queda saltado (nada pide su .pc). Verificado: cairo-script-interpreter.pc
presente en el artefacto sellado.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 11:35:54 -04:00
sergioandClaude Opus 4.8 a3732fc964 Etapa G (GUI): harfbuzz — agrega libpng a build-deps (dep transitiva de freetype2.pc)
freetype se compila --with-png ⇒ freetype2.pc trae Requires: zlib, libpng. harfbuzz tenía
zlib pero no libpng ⇒ pkg-config no resolvía freetype2 y meson setup abortaba
('freetype2 required but not found'). Mismo patrón que fontconfig (80a9cac). Con cairo ya
construyendo (patch ctime_r), esto destraba harfbuzz→pango (ambos sellan).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 11:09:17 -04:00
sergioandClaude Opus 4.8 f6b31ea3dd Etapa G (GUI): cairo construye bajo zig — patch fuerza HAVE_CTIME_R + salta utils
El probe has_function('ctime_r') de meson corre sin prefix de header ⇒ prototipo desnudo
que bajo zig-cc/gcc+musl choca con el builtin y FALLA ⇒ cairo-ps-surface.c:105 define un
fallback static que colisiona con <time.h> (error duro, tanto zig como gcc; _GNU_SOURCE en
c_args no alcanza). El patch fuerza HAVE_CTIME_R=1 tras el loop. Segundo hunk: salta los
ejecutables util csi-*/cairo-trace, que no linkean libpixman-1.a bajo la estrategia
no_fallback de zig — son dev-tools, no la librería que pango/gtk4 consumen. Resultado:
cairo 1.18.4 sella desde fuente (store c7b8703f), destraba el rebuild de la cadena GUI que
el drift de fontconfig/freetype había forzado. Cierra la Opción A (inviable) con la B real.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 10:53:23 -04:00
sergioandClaude Opus 4.8 80a9cacd07 Etapa G (GUI): fontconfig — agrega libpng+zlib a build-deps (dep transitiva de freetype2.pc)
freetype se compila --with-png ⇒ freetype2.pc trae `Requires: libpng` (y libpng→zlib).
Sin esos .pc en el sandbox, pkg-config no resuelve freetype2 y ./configure aborta con
"freetype2 >= 21.0.15 not met". Reproducible sólo al rebuildear freetype canónica (antes
tapado por cache-hit). fontconfig vuelve a construir desde fuente.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 15:00:54 -04:00
sergioandClaude Opus 4.8 6a33b41931 Etapa G (GUI): rescata los 3 patches huérfanos de freetype canónica
recipes/freetype.toml referencia pcf-family-names/subpixel/table-validation-modules.patch
pero vivían solo en incoming-clib/ (patch-huérfano) ⇒ freetype no packeaba y bloqueaba
toda la cadena GUI (pango/gtk4/... dependen de freetype). Copiados a recipes/.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 14:37:51 -04:00