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 1184Shell 70Rust 62Markdown 501503 Definiciones

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>

1670ebf93330f00cb1ac8871437a1ff0ed7835d0 · por sergio · (hace 3 meses) · padre 08fdec3bb · ver el árbol en este commit

Delta semántico

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

2 archivos · +49 −6

diff --git a/recipes/go.toml b/recipes/go.toml
new file mode 100644
index 00000000..23bfde49
--- /dev/null
+++ b/recipes/go.toml
@@ -0,0 +1,28 @@
+# go — toolchain Go como build-dep del corpus (Etapa G, frente Go).
+# Destraba las recetas Go importadas (amfora/cheat/dnsx/croc/dyff/csvtk/git-town/
+# miller/jump/gron/qrcp/walk/gtrash): declaran `deps.build = ["go"]` y hammer lo
+# materializa como capa overlay ⇒ /usr/bin/go visible en el sandbox.
+#
+# Pragmático (igual que Alpine/nix): empaqueta el tarball BINARIO oficial, no lo
+# bootstrapea desde fuente. El binario `go` es ESTÁTICO (statically linked, Go puro)
+# ⇒ corre en el rootfs musl sin glibc. Bootstrap-desde-fuente (go1.4→…) queda como
+# frente futuro, análogo a mrustc para Rust.
+name    = "go"
+version = "1.26.4"
+
+[source]
+tarball = "https://go.dev/dl/go1.26.4.linux-amd64.tar.gz"
+sha256  = "1153d3d50e0ac764b447adfe05c2bcf08e889d42a02e0fe0259bd47f6733ad7f"
+
+[build]
+compiler = "zig-cc"   # inerte: no se compila nada, solo se reubica el árbol
+target   = "x86_64-linux-musl"
+link     = "static"
+
+# El tarball extrae a `go/` (cwd del build). No hay nada que compilar: el toolchain
+# ya viene binario. Solo reubicamos el GOROOT a /usr/lib/go y exponemos go/gofmt.
+# El binario `go` resuelve GOROOT relativo a su ruta real ⇒ el symlink basta.
+[build.phases]
+configure = "true"
+compile   = "true"
+install   = "mkdir -p /out/usr/lib/go /out/usr/bin && cp -a . /out/usr/lib/go/ && ln -sf ../lib/go/bin/go /out/usr/bin/go && ln -sf ../lib/go/bin/gofmt /out/usr/bin/gofmt"
diff --git a/tandas/staged-2026-06-26/amfora.toml b/tandas/staged-2026-06-26/amfora.toml
index fb87c810..be0acf2a 100644
--- a/tandas/staged-2026-06-26/amfora.toml
+++ b/tandas/staged-2026-06-26/amfora.toml
@@ -1,7 +1,18 @@
-# Importada de nixpkgs por `hammer import-nix` (Etapa G). PUNTO DE PARTIDA, no final:
-# - el build usa el lab de hammer (zig-cc / musl estático), NO el stdenv de nix ⇒ revisá
-#   compiler/link/phases y adaptá hasta que compile.
-# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
+# amfora — PLANTILLA DE REFERENCIA del patrón Go (Etapa G, frente Go). DIFERIDA.
+#
+# Estado del frente (2026-06-26):
+#   ✅ toolchain: recipes/go.toml (1.26.4, binario estático, corre en el sandbox musl,
+#      se materializa como overlay vía deps.build=["go"] → /usr/bin/go visible).
+#   ✅ build offline DE-RISKED end-to-end: `go mod vendor` (con red) + `go build
+#      -mod=vendor GOPROXY=off` produce un binario ESTÁTICO que corre (Amfora v1.11.0).
+#   ⬜ FALTA: el source de hammer es repo+commit (checkout pelado, sin vendor/). El
+#      sandbox de build es OFFLINE (reproducibilidad) ⇒ `go build` no puede bajar
+#      módulos de proxy.golang.org. Igual que Rust vendorea crates, el frente Go
+#      necesita que el IMPORTADOR (con red) corra `go mod vendor` y empaquete el
+#      source-vendoreado como tarball content-addressed (source = tarball+sha en vez
+#      de repo+commit). Ahí esta receta construye con las phases de abajo tal cual.
+#
+# Cuando el vendor esté integrado, este es el patrón compile para cualquier tool Go:
 name    = "amfora"
 version = "1.11.0"
 
@@ -10,10 +21,14 @@ repo   = "https://github.com/makew0rld/amfora"
 commit = "4d9a5c56c88f7bec2938968182c88130b923fbba"
 
 [build]
-compiler = "zig-cc"
+compiler = "zig-cc"   # inerte (Go no usa zig); el toolchain real llega por deps.build
 target   = "x86_64-linux-musl"
 link     = "static"
-flags    = []
 
 [deps]
 build = ["go"]
+
+[build.phases]
+configure = "true"
+compile   = "export GOCACHE=/tmp/gocache GOPATH=/tmp/gopath GOTOOLCHAIN=local CGO_ENABLED=0 GOFLAGS=-mod=vendor GOPROXY=off; go build -o /out/usr/bin/amfora ."
+install   = "true"