Etapa F paquetería #1: hammer pack — receta del corpus → paquete .swm (source_patch)
Cierra la dirección forward que faltaba (SDD 06 §6 la marcaba "para más adelante"): una receta que el sistema ya sabe construir se vuelve un paquete distribuible y reproducible-desde-fuente, inversa de `hammer apply`. - hammer-core: `Swm::from_recipe(recipe, target_bin, patch_text, expected, distro)` (constructor puro: el caller lee los patches). `SwmBuild` gana `phases`+`zig_version` y `SourcePatch` gana `strip_components` (Option/skip ⇒ .swm viejos parsean igual) para reproducir con fidelidad el corpus real (22/34 recetas usan phases, 8 usan zig 0.13). - hammer-build/swm_bridge: la dirección inversa (source_patch→Recipe→build) ahora traslada phases/zig_version/strip_components a la receta efímera ⇒ apply rehace idéntico. - hammer-cli: `hammer pack <recipe> [--target-bin] [--out] [--expected|--build] [--sign]`. Concatena los patches inline; avisa si la receta declara deps (el source_patch aún no las modela = pieza posterior). `export` también enriquece su source_patch. - Validado en host: ripgrep (git+patch+install custom), openssl (tarball+zig 0.13+phases), coreutils (multicall), findutils firmado → swm-verify "trusted". Tests core+bridge verde. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+11
-2
@@ -126,5 +126,14 @@ CLI:
|
||||
con `--base-ref`, la compatibilidad de base.
|
||||
- `hammer export --journal DIR > out.swm` — lee el diario y emite un `.swm` con un
|
||||
`file_drop` por archivo modificado (estado final actual; los `Delete` se omiten). El
|
||||
receptor reproduce byte-a-byte; la provenance vía `source_patch` queda para más adelante
|
||||
(necesita un mapa artefacto→receta).
|
||||
receptor reproduce byte-a-byte. (Cuando el diario tiene provenance de receta, `export`
|
||||
emite `source_patch` en vez de `file_drop` — el mapa artefacto→receta ya existe.)
|
||||
- `hammer pack <recipe.toml>` — **dirección forward (Etapa F):** empaqueta una receta del
|
||||
corpus como un `.swm` de un único `source_patch`. Vuelve una receta que el sistema ya sabe
|
||||
construir un paquete distribuible y reproducible-desde-fuente; es la inversa de `apply`.
|
||||
`--target-bin` fija el ancla de sanity (default `/usr/bin/<name>`); `--expected b3:…` o
|
||||
`--build` sellan el `expected_hash` (ancla "verificar, no confiar"); `--sign KEY` lo firma.
|
||||
El `source_patch` traslada con fidelidad `build.{phases,zig_version,flags}` y, en tarball,
|
||||
`strip_components`; los patches de la receta viajan inline (concatenados). **Aún no modela
|
||||
`deps`** (resolución entre paquetes = pieza posterior): si la receta declara build/runtime
|
||||
deps, `pack` lo advierte y el receptor debe tenerlas ya en su store para reproducir.
|
||||
|
||||
Reference in New Issue
Block a user