gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 815Rust 56Shell 37Markdown 291229 Definiciones

Etapa F dogfood: `scripts/build-repo.sh` — poblar el corpus como repo de release firmado

Convierte la maquinaria de paquetería en la cadena de suministro real: cada receta del corpus
se vuelve un .swm, el repo es el catálogo firmado, install lo reproduce localmente.

- scripts/build-repo.sh: packea recipes/*.toml al repo, anclando expected_hash con `pack --build`
  (cache-hit si el artefacto ya está sellado; fallback a pack sin ancla por timeout/fallo), y
  firma el release (clave efímera o KEY=). Env: REPO/STORE/KEY/DISTRO/BUILD_TIMEOUT.
- /dist/ gitignoreado (el repo es artefacto reproducible desde el script).
- Validado: poblado de 34 paquetes (31 con expected_hash anclado), release firmado. install
  ripgrep desde el repo FIRMADO en modo --require-signed → release trusted → reproduce
  b3:9e6079fd (casa el ancla del catálogo) → hidrata → rg 14.1.1 corre. Cadena completa.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

cb8c49736c55abb3431e5e194b0baf840d2e8965 · por sergio · (hace 4 meses) · padre f94ef0113 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

2 archivos · +59 −0

diff --git a/.gitignore b/.gitignore
index 791f529f..da572db0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@ Cargo.lock.orig
 /var/
 /.dev-fs/
 /work/
+/dist/
 *.swm.local
 
 # editor / OS
diff --git a/scripts/build-repo.sh b/scripts/build-repo.sh
new file mode 100755
index 00000000..069375b7
--- /dev/null
+++ b/scripts/build-repo.sh
@@ -0,0 +1,58 @@
+#!/bin/sh
+# build-repo.sh — Etapa F (dogfood): puebla un REPO DE PAQUETES hammer desde el corpus
+# `recipes/*.toml` y firma el release. Convierte la maquinaria de paquetería en la cadena de
+# suministro real de la distro: cada receta se vuelve un `.swm` (mutación sobre fuente), el repo
+# es el catálogo firmado, y `hammer install <nombre> --repo <dir|url>` lo reproduce localmente.
+#
+# Para cada receta intenta ANCLAR el `expected_hash` con `pack --build` (instantáneo si el
+# artefacto ya está sellado en el store — cache-hit; ver hammer-build::build). Si construir desde
+# cero excede el timeout (o falla), cae a `pack` sin ancla: la entrada del catálogo igual existe y
+# el `source_patch` sigue siendo reproducible, sólo sin hash del autor contra el que comparar.
+#
+# Env:
+#   REPO=<dir>     destino del repo (default ./dist/repo)
+#   STORE=<dir>    store con artefactos cacheados (default ./store)
+#   KEY=<file>     clave privada ed25519 para firmar el release (default: genera una efímera)
+#   DISTRO=<ver>   distro_version de la base de los paquetes (default dev)
+#   BUILD_TIMEOUT  segundos máx por `pack --build` antes de caer a pack sin ancla (default 90)
+set -eu
+
+REPO="${REPO:-$(pwd)/dist/repo}"
+STORE="${STORE:-./store}"
+DISTRO="${DISTRO:-dev}"
+BUILD_TIMEOUT="${BUILD_TIMEOUT:-90}"
+HAMMER="cargo run -q -p hammer-cli --"
+
+rm -rf "$REPO"
+mkdir -p "$REPO"
+
+# Clave de firma del release: la pasada por KEY, o una efímera en el dir del repo.
+KEYDIR="$(dirname "$REPO")/keys"
+if [ -z "${KEY:-}" ]; then
+  mkdir -p "$KEYDIR"
+  if [ ! -f "$KEYDIR/release.ed25519" ]; then
+    $HAMMER keygen release --out "$KEYDIR" >/dev/null
+  fi
+  KEY="$KEYDIR/release.ed25519"
+  echo "firmando el release con clave efímera $KEY"
+fi
+
+anchored=0; plain=0; failed=""
+for r in recipes/*.toml; do
+  name=$(basename "$r" .toml)
+  if timeout "$BUILD_TIMEOUT" $HAMMER --store "$STORE" pack "$r" \
+        --repo "$REPO" --distro-version "$DISTRO" --build >/dev/null 2>&1; then
+    anchored=$((anchored + 1))
+  elif $HAMMER pack "$r" --repo "$REPO" --distro-version "$DISTRO" >/dev/null 2>&1; then
+    plain=$((plain + 1))
+  else
+    failed="$failed $name"
+  fi
+done
+
+$HAMMER repo sign --repo "$REPO" --key "$KEY"
+echo
+$HAMMER repo list --repo "$REPO"
+echo
+echo "poblado: $anchored con expected_hash anclado, $plain sin ancla.${failed:+ FALLARON:$failed}"
+echo "repo en $REPO (firmado). probá: hammer install <nombre> --repo $REPO --trust $KEYDIR --require-signed"