Primer eslabón ejecutable del bootstrap from-scratch (SDD 11). Stage 0 ingiere un
toolchain semilla pinned al store sin compilarlo:
- SeedSpec{kind,version,url,sha256}. seed_hash() deriva el ArtifactHash de la
identidad pinned (clase+versión+sha256), no de rutas del host ni del url → el
mismo tarball desde otro espejo produce el mismo artefacto.
- stage0(seed, store): descarga (curl, file:// offline-ok), verifica sha256
ANTES de extraer, untar y seal en el store. Idempotente si ya está sellado;
un sha erróneo no sella nada.
- Reusa el lab: hammer_build::download (+ nuevo verify_sha256 público), Store::seal.
Staging bajo el root del store para que el rename de seal sea atómico.
ADR 0008 fija la decisión (3 stages, zig semilla primaria, musl-cross-make
escotilla, ingerir-no-compilar el Stage 0). Renumerado a 0008 porque el 0007 lo
tomó la decisión de adoptar arje como init; SDD 11 y refs alineados con arje
(init supervisado que entrega el CRASHED real, ADR 0007).
4 unit tests (hash por identidad, ingest+seal+readonly, idempotencia, rechazo de
sha) sin red (file://). Workspace 218 verde.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
37 lines
2.3 KiB
Markdown
37 lines
2.3 KiB
Markdown
# Documentación de diseño de hammer
|
|
|
|
Estos documentos son la fuente de verdad del diseño. El código los implementa; cuando haya
|
|
discrepancia, o se corrige el código o se actualiza el SDD con un commit que explique por qué.
|
|
|
|
## Software Design Documents (SDD)
|
|
|
|
| # | Documento | Qué cubre |
|
|
|---|---|---|
|
|
| 00 | [Visión y filosofía](00-vision.md) | Por qué existe, qué problema resuelve, la actitud de ingeniería |
|
|
| 01 | [Arquitectura general](01-architecture.md) | El modelo de dos mundos, componentes, flujo de datos |
|
|
| 02 | [El laboratorio de build](02-build-lab.md) | Sandbox, `zig cc`, recetas, CAS, grafo de dependencias |
|
|
| 03 | [Hidratación y store](03-hydration.md) | Store content-addressed, hardlinks a FHS, patchelf, rollback |
|
|
| 04 | [Overlay de experimentación](04-overlay.md) | overlayfs en caliente, try/commit/discard |
|
|
| 05 | [Diario de mutaciones](05-journal.md) | fanotify, log append-only, config-sin-ser-declarativa |
|
|
| 06 | [Formato `.swm`](06-swm-format.md) | Manifiesto de mutación compartible, esquema, firma |
|
|
| 07 | [Bus de init y de agente](07-agent-bus.md) | `/run/init.control`, `/run/agent.sock`, protocolo |
|
|
| 08 | [Integración de la IA](08-ai-integration.md) | El bucle agéntico, seguridad, intención → `.swm` |
|
|
| 09 | [Modelo de confianza](09-trust-model.md) | Reproducibilidad, verificar-no-confiar, log de transparencia |
|
|
| 10 | [Roadmap](10-roadmap.md) | Fases, MVP, primer entregable |
|
|
| 11 | [Bootstrap from-scratch](11-bootstrap.md) | Track posterior: Stage 0/1/2, auto-alojamiento, semilla pinned |
|
|
|
|
## Architecture Decision Records (ADR)
|
|
|
|
Decisiones tomadas, con su contexto y consecuencias. Ver [`adr/`](adr/).
|
|
|
|
| # | Decisión |
|
|
|---|---|
|
|
| 0001 | [Rust para el tooling y daemons](adr/0001-rust-for-tooling.md) |
|
|
| 0002 | [Validar sobre Alpine antes de la distro propia](adr/0002-alpine-first.md) |
|
|
| 0003 | [`zig cc` como compilador por defecto del lab](adr/0003-zig-cc-builder.md) |
|
|
| 0004 | [No escribir nuestro propio Nix](adr/0004-no-custom-nix.md) |
|
|
| 0005 | [Hidratación por hardlinks](adr/0005-hardlink-hydration.md) |
|
|
| 0006 | [Commits fijados, no HEAD vivo](adr/0006-pinned-commits.md) |
|
|
| 0007 | [`arje` como init propio del track posterior](adr/0007-arje-como-init-propio.md) |
|
|
| 0008 | [Bootstrap en 3 stages, `zig` como semilla](adr/0008-bootstrap-stages.md) |
|