feat(hydrate): hidratación dinámica real con patchelf (LinkMode::Dynamic)

Deja de ser un error "pendiente": hydrate(.., DynamicSpec{interpreter,rpath})
detecta ELF por magic, copia los que necesitan parcheo (no hardlink: patchelf
mutaría el store) y aplica --set-interpreter/--set-rpath atómicamente
(copy→patch→rename); no-ELF y spec vacío siguen hardlinkeando. ensure_patchelf
falla limpio antes de tocar el FHS si falta la herramienta. HydrateReport.patched
cuenta los reescritos. Callers (bus/cli/bootstrap/e2e) pasan None=estático.
4 tests nuevos (incl. camino de error sin patchelf y real gated). Doc §4.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sergio
2026-06-14 03:23:12 +00:00
co-authored by Claude Opus 4.8
parent 8a5e75344a
commit f6b337f6cb
7 changed files with 225 additions and 24 deletions
+1
View File
@@ -280,6 +280,7 @@ fn dispatch(
&artifact_dir,
Path::new(&target),
hammer_core::LinkMode::Static,
None,
) {
Ok(r) => r,
Err(e) => {