Fase 4 — formato .swm: verify, apply (config_edit/file_drop/source_patch) y export

- hammer-core::swm: verify_schema (invariantes por mutación) + verify_base con
  BaseRef/BaseCompat/PinDiff (distro_version + pins). FileDrop.content_b64 para
  .swm autocontenidos.
- hammer-core::apply: primitivas puras apply_config_edit (hunks -/+ con búsqueda
  exacta de bloque, ambiguo => error), apply_file_drop (base64 + verify BLAKE3),
  rebase_path para tests con prefix.
- hammer-build::swm_bridge: Mutation::SourcePatch -> Recipe sintética + patch
  inline materializado + build, con comparación opcional contra expected_hash.
- hammer-cli: nuevos subcomandos apply [--prefix --base-ref --skip-source-patch
  --state-root], swm-verify, export --journal --base-ref --since.
- Tests: 18 unit nuevos en hammer-core (apply + verify), 5 en swm_bridge,
  4 e2e en hammer-cli (roundtrip yaml -> apply bajo prefix reproduce los archivos).
- Roadmap y SDD 06 actualizados con lo cerrado y lo pendiente (URLs remotos,
  provenance en export vía mapa artefacto->receta, firma ed25519).
This commit is contained in:
Sergio
2026-06-09 15:19:33 +00:00
parent a87b16dd85
commit 09d50f9e60
13 changed files with 1529 additions and 15 deletions
Generated
+9
View File
@@ -79,6 +79,12 @@ version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
[[package]]
name = "base64"
version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "bitflags"
version = "2.13.0"
@@ -296,12 +302,14 @@ name = "hammer-cli"
version = "0.0.1"
dependencies = [
"anyhow",
"base64",
"clap",
"hammer-build",
"hammer-core",
"hammer-journal",
"hammer-overlay",
"serde_json",
"tempfile",
"tracing",
"tracing-subscriber",
]
@@ -311,6 +319,7 @@ name = "hammer-core"
version = "0.0.1"
dependencies = [
"anyhow",
"base64",
"blake3",
"serde",
"serde_json",