dec-0098

Vista generada de dec-0098: Amend r28 §3: excepción nominada para `track/offline-continuity`

ImplementadoSin versión del tren todavía· generada desde docs/decisions/dec-0098-amend-r28-anti-especulativo-offline-continuity.md
track/docsdec-0124track/docs:DC10

Vista generada desde docs/decisions/dec-0098-amend-r28-anti-especulativo-offline-continuity.md. No se edita a mano: bun run docs:gen la regenera y bun run docs:check falla si difiere. El estado aquí es el del model: si discrepa con otra página, manda el model.

CampoValor
EstadoLOCKED
Fecha2026-07-16
Ficherodocs/decisions/dec-0098-amend-r28-anti-especulativo-offline-continuity.md

Enmienda a: r28

Por qué importa (del frontmatter del ADR):

r28 §3 (anti-especulativo) está citado como invariante global en CLAUDE.md («Cada layer termina en un consumer/workload real (r28, principio anti-especulativo): no crees skeletons/empty layers sin responsabilidad concreta») y gobierna GUARD 7 check:consumer. Este amend abre UNA excepción nominada; no relaja el principio.

Nodos del roadmap que lo citan en refs: track/offline-continuity

Páginas de la documentación que lo citan: ninguna todavía.

Texto del ADR

Leído de docs/decisions/dec-0098-amend-r28-anti-especulativo-offline-continuity.md, el fichero canónico.

dec-0098 — Amend r28 §3: excepción nominada para track/offline-continuity

  • Fecha: 2026-07-16
  • Estado: LOCKED
  • Decisor: waxin (AskUserQuestion, PASO 8.3 de la migración Axon v2)
  • Amends: r28 §3 (principio transversal anti-especulativo)

Qué se decide

track/offline-continuity se crea como nodo del roadmap (status: queued) pese a no tener consumer real, como excepción consciente y nominada a r28 §3.

Por qué esto es una excepción y no una aplicación del principio

r28 §3 (docs/decisions/r28-parallelization-correction-pass-2026-06-21.md:74) dice, literal:

Toda foundation phase arranca solo cuando tiene un consumer real que la valida; nunca infra especulativa.

El nodo que se crea aquí no lo cumple, y el conflicto es explícito, no interpretativo:

  1. El propio TKT-051 se declara diferido por este ADR: su frontmatter dice Defer rationale: r28 §3 anti-speculative (skeleton sin consumer real), y sus constraints duros abren con DEFERRED per r28 §3.
  2. 2 de sus 3 triggers están sin cumplir: (a) r61 lockeado ✅; (b) continue-watching travel mode como vertical 1 con gate first-frame <50ms ❌ — no existe, track/web-player-v1 entero está queued; (c) ≥1 consumer real probado (≥100 sesiones staging o 1 sesión real documentada) ❌.
  3. El M0 del propio ticket ES crear la fase — o sea que crear el nodo ahora ejecuta el primer milestone de un ticket que se declara no-arrancable.
  4. El ticket contempla no crearla nunca: «Si F-PERFORMANCE (sub-F2 server-side) absorbe el scope, NO crear fase nueva — solo añadir sub-fase».

Alcance del amend (deliberadamente estrecho)

  • Aplica solo a track/offline-continuity. NO relaja r28 §3 para ningún otro nodo.
  • NO crea precedente de "track queued sin consumer" como patrón admisible. La siguiente vez que aparezca el caso, se vuelve a decidir; este dec no se cita como autoridad genérica.
  • check:consumer (GUARD 7, r28 anti-especulativo a nivel de símbolos) sigue vigente sin excepción: este amend cubre el nodo del roadmap, NO permite mergear código sin consumer.

Coste aceptado (registrado a propósito)

r28 §3 es de los invariantes más citados del repo. Agujerearlo por un ticket P2 diferido tiene un coste real de precedente, y waxin lo aceptó con el trade-off delante (AskUserQuestion PASO 8.3, opción «Crear las 2 + amend explícito a r28», elegida sobre la alternativa que respetaba r28 colgando TKT-051 de track/web-player-v1 —de donde su propio dependsOn dice que está gated—). La alternativa rechazada queda aquí escrita para que el coste sea auditable, no folclore oral.

Contraste: track/observability NO necesita este amend

track/observability se crea en el mismo paso pero no es una excepción: r60 §D6 lockea Styx Doctor como observer/recommender transversal, TKT-052 está desbloqueado (blockedBy: r60 D6 locked (DONE 2026-07-15)), es P1, y tiene gate concreto con entregables reales (doctor-svc per r17, probes builtin per r48 §3.1, contratos Arktype per r52). Tiene mandato lockeado y consumer.

Revisión

Si los triggers de TKT-051 no se cumplen antes de que track/web-player-v1 cierre W3, este dec y el nodo se revisan: o el nodo gana consumer, o se borra (DELETE > @deprecated).