# 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](../02-build-lab.md), [SDD 09](../09-trust-model.md)). - **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 []` 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.