@trycore/spec-build-harness 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,53 @@
1
+ # Método ADD — iterar el diseño (Pasos 2–7) — referencia
2
+
3
+ ADD (Attribute-Driven Design, Len Bass) diseña por **rondas**. Cada ronda ejecuta 7 pasos sobre un
4
+ subconjunto priorizado de drivers del catálogo `0000`. Una ronda produce **un ADR** (a veces refactoriza
5
+ uno previo). Usa la plantilla `assets/adr-add.template.md` de esta skill —instalada junto a estas
6
+ references— (7 secciones = los 7 pasos, con su frontmatter `id/title/date/status/authors/tags/add`).
7
+
8
+ ## Los 7 pasos por iteración
9
+
10
+ 1. **Review inputs** — ya está en `0000-drivers-y-asrs.md`.
11
+ 2. **Establecer el objetivo de la iteración** — elige la fase/release y el subconjunto de drivers
12
+ (empieza por los ASRs críticos, cuadrante (A,A) de la matriz). → §1 del ADR.
13
+ 3. **Elegir el elemento a refinar** — sistema completo (primera ronda, top-down) o un módulo/servicio
14
+ interno (rondas posteriores). → §1 del ADR.
15
+ 4. **Elegir conceptos de diseño** — **tácticas** (Bass), **patrones**/estilos, componentes externos o
16
+ arquitecturas de referencia. Registra las **alternativas descartadas** y por qué. → §2 del ADR.
17
+ 5. **Instanciar** — convierte los conceptos en componentes/módulos reales con responsabilidades e
18
+ **interfaces/contratos**. → §3 del ADR.
19
+ 6. **Bocetar vistas y registrar la decisión** — al menos una vista (módulos, C&C o despliegue) en
20
+ `mermaid`, con la **decisión** y sus **trade-offs**. → §4 del ADR.
21
+ 7. **Analizar** (ATAM-lite) — cada driver con veredicto y evidencia; drivers no resueltos vuelven al
22
+ backlog. → §5 del ADR (delegado a `architecture-evaluator`; ver `atam-lite.md`).
23
+
24
+ ## Tácticas ↔ atributos (guía rápida, no exhaustiva)
25
+
26
+ | Atributo (QA) | Tácticas típicas (Bass) | Estilos/patrones que las agrupan |
27
+ |---|---|---|
28
+ | Disponibilidad | redundancia, detección (heartbeat/ping), recuperación (rollback, reintento con backoff) | activo-pasivo, health-check, circuit breaker |
29
+ | Rendimiento | gestión de recursos (índices, caché), gestión de demanda (paginación, rate-limit) | CQRS de lectura, caché-aside |
30
+ | Seguridad | resistir (authN/authZ, secretos fuera de código), detectar (auditoría), recuperar | RBAC central, gateway de seguridad, WORM/SIEM |
31
+ | Modificabilidad | encapsular, intermediario, restringir dependencias | capas, hexagonal/puertos-adaptadores, contrato OpenAPI como fuente |
32
+ | Integrabilidad | adaptador, orquestación, límite (bulkhead) | adaptadores por integración, anti-corruption layer |
33
+ | Escalabilidad | replicación, particionamiento, trabajo asíncrono | workers, colas, outbox |
34
+ | Integridad transaccional | transacción, compensación (saga), idempotencia | saga orquestada + outbox |
35
+
36
+ ## Estrategia de iteración
37
+
38
+ - **Ancho antes que profundo**: primera ronda decide el estilo estructural y el stack del **sistema
39
+ completo**; rondas posteriores refinan piezas (worker, motor de notificaciones, servicio de RBAC…).
40
+ - **Cimiento primero**: las decisiones fundacionales (identidad/authN, acceso a datos, arquitectura base,
41
+ design-system) van en las primeras iteraciones — son las que el DoR exigirá antes de abrir épicas de
42
+ negocio (`layer: foundational`).
43
+ - **Un ADR por decisión coherente**, no por archivo tocado. Si una decisión supersede a otra, marca la
44
+ vieja `superseded` y enlaza; no borres.
45
+ - **Stack como decisión trazada**: las elecciones de lenguaje/framework/BD/infra son ADRs con su §2
46
+ (alternativas descartadas). En la fase 5 se consolidan en `stack-allowlist.json`. Si el stack elegido
47
+ **diverge** del PRD §técnica, regístralo explícitamente como riesgo/restricción (no lo escondas).
48
+
49
+ ## Salida por ronda
50
+
51
+ 1. Escribe `docs/adr/000N-<slug>.md` desde la plantilla, con §1–§4 completas.
52
+ 2. Corre `architecture-evaluator` sobre el ADR → completa §5 y §6.
53
+ 3. Actualiza `_backlog-arquitectonico.md`: estado de cada driver, riesgos nuevos, fila de bitácora.
@@ -0,0 +1,44 @@
1
+ # ATAM-lite — evaluación de la arquitectura en papel (ADD Paso 7) — referencia
2
+
3
+ Análisis de cada ADR **antes de programar**, para descubrir riesgos y trade-offs. Es una versión ligera
4
+ de ATAM (Architecture Tradeoff Analysis Method): no se hace un taller formal con stakeholders, sino un
5
+ barrido adversarial delegado en el agente `architecture-evaluator` (read-only). Alimenta §5/§6 del ADR y
6
+ la sección de riesgos del backlog (estructura completa del backlog — tablero por driver, riesgos
7
+ abiertos, bitácora — en `assets/_backlog-arquitectonico.template.md` de esta skill).
8
+
9
+ ## Qué produce el evaluador, por ADR
10
+
11
+ - **Veredicto por driver**: para cada driver que el ADR dice satisfacer, ✅/⚠️/❌ con la **evidencia o
12
+ medida** que lo respalda (o la que falta). Un ⚠️/❌ es un riesgo, no un rechazo.
13
+ - **Puntos de sensibilidad**: propiedades del diseño donde una decisión afecta fuertemente a un atributo
14
+ (p.ej. "el tamaño del pool de conexiones determina QA-1 rendimiento de lectura").
15
+ - **Trade-offs**: puntos donde una decisión mejora un atributo y empeora otro (p.ej. "el backoff
16
+ 1s/3s/9s da robustez pero puede exceder el P99 ≤ 10 s de la integración externa").
17
+ - **Riesgos**: decisiones sin evidencia, drivers no cubiertos, supuestos sin validar. Cada uno con
18
+ driver, mitigación planificada e iteración.
19
+ - **Drivers no resueltos**: se devuelven explícitamente al backlog (estado `PENDIENTE`/`EN DISEÑO`).
20
+
21
+ ## Conceptos ATAM que se usan
22
+
23
+ - **Sensitivity point** — una decisión de la que depende crítica­mente una respuesta de calidad.
24
+ - **Tradeoff point** — un sensitivity point que afecta a más de un atributo en direcciones opuestas.
25
+ - **Risk** — una decisión (o su ausencia) que puede impedir alcanzar la medida de respuesta.
26
+ - **Non-risk** — una decisión que, analizada, se confirma segura para los drivers en juego.
27
+
28
+ ## Reglas del análisis
29
+
30
+ - **Adversarial y honesto**: el evaluador busca **refutar** que el ADR satisface sus drivers. Ante la
31
+ duda, marca riesgo, no lo omitas. Es más barato un riesgo en papel que un rediseño en código.
32
+ - **Medida, no opinión**: un driver solo se marca ✅ si hay una medida verificable o un plan de
33
+ verificación (k6, prueba de carga, matriz de RBAC, etc.). "Parece suficiente" es ⚠️.
34
+ - **No decide negocio**: si el riesgo se resuelve con una decisión de negocio (exponer o no un dato,
35
+ fijar o aplazar un objetivo de DR), lo marca como **trade-off de negocio** → sube a la revisión única
36
+ (fase 5), no lo resuelve el modelo.
37
+ - **Cierre trazable**: al mitigar un riesgo en una iteración posterior, se marca ✅ CERRADO en el backlog
38
+ con el ADR que lo cerró; no se borra la fila.
39
+
40
+ ## Cobertura (invariante del backlog)
41
+
42
+ Al cerrar la capa, **todo driver del 0000 debe tener estado ≥ ABORDADO** o un riesgo abierto explícito
43
+ que explique por qué no. Un driver crítico (A,A) en `PENDIENTE` sin riesgo declarado es un fallo de la
44
+ capa: no está lista para habilitar el build.
@@ -0,0 +1,39 @@
1
+ # Extracción de drivers / ASRs (ADD Paso 1) — referencia
2
+
3
+ Objetivo de la fase: producir `docs/adr/0000-drivers-y-asrs.md` **leyendo `docs/`** (solo lectura),
4
+ sobre la plantilla `assets/0000-drivers-y-asrs.template.md` de esta skill (frontmatter + §1–§7). Se
5
+ delega el barrido a `asr-extractor` (fan-out) y la sesión principal consolida. Un **ASR**
6
+ (Architecturally Significant Requirement) es un requisito que, si cambia, cambia la arquitectura.
7
+
8
+ ## De dónde sale cada bloque del 0000
9
+
10
+ | Bloque del 0000 | Fuente en `docs/` | Cómo derivarlo |
11
+ |---|---|---|
12
+ | **OE** (objetivos de negocio) | `01-prd/` §objetivos, `02-user-story-map/` | Copiar los objetivos específicos + su métrica/meta. Si el PRD no da métrica, proponerla y marcarla como *a validar*. |
13
+ | **UC** (funcionales significativos) | `03-backlog/epicas.md`, `04-historias/HU-*.md` | **Solo** los casos que moldean la arquitectura (integraciones externas, transaccionalidad, RBAC, asincronía, auditoría). No es el backlog completo. |
14
+ | **QA** (escenarios de calidad) | PRD §requisitos no funcionales, AC de las HUs, §técnica | Un escenario de **6 partes** por atributo (rendimiento, disponibilidad, seguridad, integrabilidad, modificabilidad, observabilidad, escalabilidad…). La **medida** debe ser cuantificable. |
15
+ | **CON** (restricciones) | PRD §técnica/§7, política de datos, identidad | Lo que **no** es negociable (stack impuesto, prohibiciones, headers, gates de CI). |
16
+ | **CRN** (concerns) | PRD riesgos, capacidades del equipo, costos | Preocupaciones que condicionan el diseño aunque no sean requisitos formales. |
17
+ | **Prioridad** | juicio + importancia del PRD | Par `(Importancia de negocio, Impacto arquitectónico)` en {A,M,B}. El cuadrante (A,A) son los **ASRs críticos**. |
18
+ | **Plan de iteraciones** | fases del PRD / líneas de release del story map | Una iteración por fase; lista los drivers que ataca cada una. |
19
+
20
+ ## Escenario QA de 6 partes (formato Bass)
21
+
22
+ Cada QA-N se escribe con exactamente estas seis partes:
23
+
24
+ - **Fuente** del estímulo (quién/qué lo genera)
25
+ - **Estímulo** (el evento)
26
+ - **Artefacto** (qué parte del sistema recibe el estímulo)
27
+ - **Entorno** (condiciones: normal, pico, degradado)
28
+ - **Respuesta** (qué hace el sistema)
29
+ - **Medida de respuesta** (cuantificable: P95 ≤ X ms, uptime ≥ X%, 0 incidentes…)
30
+
31
+ Sin medida cuantificable no es un ASR: es un deseo. Si el PRD no la da, **propón** una razonable y déjala
32
+ marcada para validación en la revisión (fase 5), no bloquees.
33
+
34
+ ## Reglas
35
+
36
+ - **Traza siempre**: cada UC/QA cita las HU/OE/§PRD de las que sale (columna Trazabilidad).
37
+ - **No inventes dominio**: si un atributo no tiene sustento en `docs/`, no lo agregues; si es un hueco
38
+ real (p.ej. el PRD no fija disponibilidad), decláralo como CRN o riesgo, no como QA fabricado.
39
+ - **Documento vivo**: en re-corridas, añade drivers nuevos de HUs/épicas nuevas; no borres los previos.