Vista generada de dec-0100: Locks pre-M0 de la fundación de Axon
docs/decisions/dec-0100-locks-pre-m0-axon-foundation.mdVista generada desde
docs/decisions/dec-0100-locks-pre-m0-axon-foundation.md. No se edita a mano:bun run docs:genla regenera ybun run docs:checkfalla si difiere. El estado aquí es el del model: si discrepa con otra página, manda el model.
| Campo | Valor |
|---|---|
| Estado | LOCKED |
| Fecha | 2026-07-17 |
| Fichero | docs/decisions/dec-0100-locks-pre-m0-axon-foundation.md |
Enmienda a: dec-0099
Por qué importa (del frontmatter del ADR):
Cierra los 6 abiertos que PLAN.md §Abierto mandaba decidir ANTES de arrancar M0. Sin estos locks, M0 no puede empezar; con ellos, el carril de dec-0099 queda ejecutable. Enmienda el alcance de dec-0099: la cadena de publishes de MC entra como prerequisito nominado.
Nodos del roadmap que lo citan en refs: ninguno.
Páginas de la documentación que lo citan: Roadmap, tickets y axon (implementado), Empezar a contribuir (implementado), Evidencia y verificación adversarial (implementado)
Leído de docs/decisions/dec-0100-locks-pre-m0-axon-foundation.md, el fichero canónico.
dec-0099 (pausa de Styx) dejó 6 abiertos en docs/governance/axon-cli/PLAN.md
§Abierto con la instrucción "decidir antes de arrancar M0". Esta decisión los cierra todos.docs/governance/axon-cli/ARCHITECTURE.md §Locks (filas L9–L14
apuntan aquí).@mks-mc/core PRIMERO (salida 1)El vendor de task-sync (src/vendor/mks-mc/, 2382 LOC, byte-idéntico a MC desde 97c1d73
2026-04-12) se resuelve por la salida limpia de VENDORED.md:9-14: publicar @mks-mc/core
(lo que arrastra @mks-mc/utils y @mks2508/hyperdiff-*), borrar el vendor y depender del
paquete real.
waxin, literal: "publicar core primero, habrá que hacer setup de sibling dispatch en más
sitios en ese repo" — el repo de mks-mission-control necesita su .siblings.toml para
dispatchar el trabajo de publicación.
Amend (misma noche): el scope
@mks-mcno existía como org npm y «mc» no es nombre final de producto → org lockeadamks-agenticslab(AskUserQuestion, nota de waxin). Los paquetes pasan a@mks-agenticslab/mc-utils/mc-core/ (luego)task-sync. El recon verificó además que hyperdiff-* ya estaba publicado — la cadena real es de 2 paquetes.
⚠️ Esto ENMIENDA dec-0099 §Alcance (ver sección Enmienda abajo).
Rechazadas: (2) publicar con vendor inlined — era la recomendación de axon por no meter trabajo de MC en el parón; waxin prefiere la salida limpia y asume el coste. (3) reescribir el motor — 2382 LOC funcionales tiradas, viola simplicidad.
axon, paquetes @mks2508/axon-core + @mks2508/axonaxon/ ← repo nuevo propio (L1 revertido)
├─ packages/core/ @mks2508/axon-core (model/ session/ git/ tw/)
├─ packages/cli/ @mks2508/axon (bin: axon)
└─ (futuro) packages/… si hace falta, sin repo nuevoMonorepo Bun workspaces mínimo. El scope @mks2508 ya publica (no-throw, better-logger,
mks-ui) — cero fricción npm. CLI = consumidor separado del core (L5 intacto).
axon-core → task-syncaxon-core importa @mks-agentics/task-sync publicado (como ya decía PLAN M0). Los hooks se
quedan en task-sync y NO conocen el model: su contrato con el roadmap es el UDA string
(claude_roadmap_item_id, que ya existe y se propaga). Si un hook necesitara validar contra el
DAG: llama a la CLI o lee un índice generado (JSON) — nunca importa la librería.
0 ciclo por construcción. Rechazadas: invertida (serializa M0 contra sí mismo) y paquete puente (abstracción single-use).
35d44d8Timeline verificado por git log (no por prosa):
35d44d8 feat(governance): gates de track/plugin-seams y track/ui ← ANTES
a55d5f3 docs(governance): dec-0099 pausa Styx ← DESPUÉSLos gates que L7 exigía ("o la CLI indexaría el vacío") ya estaban declarados antes de
lockear la pausa, como meta-trabajo de governance. La «contradicción viva L7 vs L8» que
README/ARCHITECTURE/PLAN documentaban tenía la premisa fáctica rota. L8 procede: axon-core
es el paso 1.
track/domain-media sigue sin gate (tercer track in_progress, bloquea 4 nodos — briefing
hallazgo 3). Anotado, no se toca: es producto (pausado), y axon status lo gritará por
diseño (garantía anti-mentira: «⚠ SIN GATE»).
axon init = bootstrap de REPOCrea la instancia de gobernanza en un repo: .claude/axon.config.json (template) + dirs espejo
authoritative: true) + wiring de guards (axon check). El bootstrap de
sesión no lo necesita: el agente axon-v2 (personalidad) + axon status (la foto) ya son eso.
Hace portable el modelo v2 a repos nuevos (mks-mc y agentics lo van a querer).Verificación de esta sesión (el claim de waxin era verificable y se verificó ANTES de lockear):
| Claim | Evidencia |
|---|---|
| "saqué otra versión el 16" | ✅ 42f306e (2026-07-16) "ship v2.0 with staging controls + push safety + setup wizard" + 81db32b v2.1.0 "agent-first polish" — repo local nodejs/gemini-commit-wizard |
| "ya funcionando" | ⚠️ v2.1.0 solo local: npm latest = 1.3.0 (2026-04-06) — el registry sigue sirviendo la versión que auto-stageaba + pusheaba |
| "ya no hace auto-stage/push" | ⚠️ claim de commit message, sin smoke (r31: el mensaje no es evidencia del comportamiento) |
Lock: (1) smoke adversarial en repo dummy (¿stagea solo lo pedido? ¿pushea sin prompt? →
debe ser NO; verificador ≠ implementador) → (2) npm publish 2.1.0 (dejar latest=1.3.0
publicada es deuda con blast radius) → (3) reactivar en styx para commits asistidos
manuales. axon-core NO lleva commit/ en M0 — la integración (envolver como
axon commit o no) se decide post-M1, con la CLI real delante.
dec-0099 excluía nominalmente "el split de Mission Control" y "cualquier «ya que estamos»
sobre los 3 repos". L9 mete en el carril un subconjunto acotado de trabajo de MC: publicar
@mks-mc/core + @mks-mc/utils + @mks2508/hyperdiff-* y borrar el vendor de task-sync.
.siblings.toml de MC para dispatcharla.mks-git-client), su gate 4, y todo lo demás de la lista
de dec-0099 §Alcance.dec-0098 con r28 §3: excepción nominada, no agujero genérico.Consecuencia en el carril: M0 gana una lane previa/paralela. model/ + session/ + git/
no dependen de tw y pueden arrancar YA; la lane tw/ espera a
cadena MC publicada → task-sync publicado. El detalle vive en PLAN.md §M0.
TaskUpdate(completed) no propaga.task-management (miente en 4 puntos — FINDINGS §3e).track/domain-media (producto; al volver de la pausa).