Files
hammer/docs/adr/0006-pinned-commits.md
sergioandClaude Opus 4.8 8bf1623044 Scaffold inicial: workspace Rust + SDDs completos
Arranque del proyecto hammer (distro AI-nativa: laboratorio funcional en el
sótano, terminal mutable clásica arriba, integración de IA programadora).

- Workspace Rust (compila, tests verdes): hammer-core, hammer-build,
  hammer-cli (bin `hammer`), hammerd.
- SDDs 00-10 + 6 ADRs en docs/ con toda la arquitectura.
- Esqueletos navegables mapeados a las fases del roadmap; Fase 0/1 listas
  para implementar el sandbox real.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 19:06:04 +00:00

1.6 KiB

ADR 0006 — Commits fijados, no HEAD vivo

  • Estado: aceptada
  • Fecha: 2026-06-06

Contexto

La idea original habla de "repositorios vivos" apuntando al HEAD de los upstreams. Romántico, pero HEAD se rompe a diario y destruye el determinismo que justifica todo el laboratorio funcional. Sin entrada estable no hay hash estable, no hay caché fiable, y no hay .swm verificable.

Decisión

El lab compila siempre contra commits fijados (un lockfile, pins.toml). "Repositorio vivo" significa rastreo automatizado del upstream con snapshots fijados, no HEAD ciego.

Razones

  • Reproducibilidad: entrada idéntica ⇒ hash idéntico ⇒ salida idéntica (SDD 02, SDD 09).
  • Avance ordenado del grafo: al subir un pin, sólo cambian ese nodo y sus dependientes; sabes exactamente qué commit causó qué fallo.
  • .swm verificable: dos máquinas con el mismo pin+patch producen el mismo binario; eso es lo que permite "verificar, no confiar".

Mecanismo de "vivo"

  • pins.toml mapea nombre → commit por upstream.
  • hammer update [<pkg>] consulta el upstream, propone subir el pin al nuevo commit, y reconstruye sólo lo afectado. El humano (o la IA) decide cuándo avanzar.
  • Análogo al flake.lock de Nix, pero imperativo y bajo tu control.

Consecuencias

  • No hay sorpresas por HEAD cambiando bajo tus pies.
  • Mantener los pins al día es una acción explícita (deseable: lo controlas tú/la IA).
  • El pin (commit) forma parte del artifact_hash; cambiarlo invalida la caché de ese nodo.