@trycore/spec-build-harness 0.8.1 → 0.8.3
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.
- package/.claude-plugin/plugin.json +5 -2
- package/GOVERNANCE.md +1 -1
- package/INSTALL.md +4 -4
- package/METODOLOGIA.md +50 -7
- package/README.md +8 -5
- package/VERSION +1 -1
- package/agents/build/architecture-evaluator.md +45 -0
- package/agents/build/asr-extractor.md +43 -0
- package/agents/build/dor-dod-gatekeeper.md +20 -0
- package/agents/build/stack-guardian.md +9 -0
- package/asset-types.json +75 -0
- package/commands/build/architect.md +66 -0
- package/docs/agents.md +32 -3
- package/docs/commands.md +9 -3
- package/docs/getting-started.md +1 -1
- package/docs/runtime/plan-migracion-harness-v0.9.md +84 -0
- package/docs/runtime/protocolo-cliente-runtime.md +116 -0
- package/package.json +2 -1
- package/skills/building-a-slice/references/dor.md +8 -0
- package/skills/building-a-slice/workflows/README.md +7 -1
- package/skills/building-a-slice/workflows/dor-fanout.workflow.js +98 -0
- package/skills/releasing-a-version/SKILL.md +5 -2
- package/skills/releasing-a-version/references/release-dod.md +1 -1
- package/skills/releasing-a-version/workflows/README.md +6 -1
- package/skills/releasing-a-version/workflows/release-gate.workflow.js +59 -4
- package/skills/setup-architecture/SKILL.md +94 -0
- package/skills/setup-architecture/assets/0000-drivers-y-asrs.template.md +101 -0
- package/skills/setup-architecture/assets/_backlog-arquitectonico.template.md +51 -0
- package/skills/setup-architecture/assets/adr-add.template.md +84 -0
- package/skills/setup-architecture/references/add-method.md +53 -0
- package/skills/setup-architecture/references/atam-lite.md +44 -0
- package/skills/setup-architecture/references/drivers-extraction.md +39 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: 0000
|
|
3
|
+
title: "Catálogo de Drivers Arquitectónicos y ASRs (entrada del método ADD)"
|
|
4
|
+
date: YYYY-MM-DD
|
|
5
|
+
status: living-document
|
|
6
|
+
authors:
|
|
7
|
+
- <Equipo Arquitectura>
|
|
8
|
+
tags:
|
|
9
|
+
- add
|
|
10
|
+
- drivers
|
|
11
|
+
- asr
|
|
12
|
+
- quality-attributes
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# ADR 0000 — Drivers Arquitectónicos y ASRs
|
|
16
|
+
|
|
17
|
+
> **Naturaleza:** No es un ADR de decisión, sino la **entrada de diseño** (Paso 1 del método ADD de Len
|
|
18
|
+
> Bass). Consolida propósito, requisitos funcionales primarios, escenarios de atributos de calidad
|
|
19
|
+
> priorizados, restricciones y concerns. Toda decisión en un ADR (0001+) debe trazar a uno o más drivers
|
|
20
|
+
> de este catálogo, y todo driver debe estar cubierto por al menos un ADR (ver
|
|
21
|
+
> [_backlog-arquitectonico.md](_backlog-arquitectonico.md)).
|
|
22
|
+
>
|
|
23
|
+
> **Cómo se genera:** la skill `setup-architecture` (`/build:architect`) lo **propone** leyendo `docs/`
|
|
24
|
+
> (PRD + user story map + `03-backlog/epicas.md` + `04-historias/HU-*.md`) — de solo lectura. Este es un
|
|
25
|
+
> **documento vivo**: cada re-corrida añade drivers nuevos que surjan de HUs/épicas nuevas.
|
|
26
|
+
|
|
27
|
+
## Cómo se usa este documento en ADD
|
|
28
|
+
|
|
29
|
+
ADD diseña por **rondas e iteraciones** de 7 pasos. Este catálogo alimenta los pasos 1 y 2:
|
|
30
|
+
|
|
31
|
+
- **Paso 1 — Review Inputs:** todo lo de este documento.
|
|
32
|
+
- **Paso 2 — Establish Iteration Goal:** cada iteración selecciona un subconjunto priorizado de estos
|
|
33
|
+
drivers (ver §6 Plan de iteraciones).
|
|
34
|
+
|
|
35
|
+
## Propósito de diseño
|
|
36
|
+
|
|
37
|
+
<Greenfield / brownfield; una línea sobre qué es el sistema y su enfoque de diseño (top-down desde el
|
|
38
|
+
sistema completo, o refinamiento de elementos internos).>
|
|
39
|
+
|
|
40
|
+
Fuente: [docs/01-prd/<prd>.md](../01-prd/<prd>.md) §<x>.
|
|
41
|
+
|
|
42
|
+
## 1. Objetivos de negocio (OE)
|
|
43
|
+
|
|
44
|
+
| ID | Objetivo | Métrica / Meta |
|
|
45
|
+
|----|----------|----------------|
|
|
46
|
+
| OE-01 | … | … |
|
|
47
|
+
|
|
48
|
+
## 2. Requisitos funcionales primarios (UC) — arquitecturalmente significativos
|
|
49
|
+
|
|
50
|
+
> Solo los casos de uso que **moldean** la arquitectura. No es el backlog completo.
|
|
51
|
+
|
|
52
|
+
| UC | Descripción | Trazabilidad |
|
|
53
|
+
|----|-------------|--------------|
|
|
54
|
+
| UC-1 | … | OE-…, HU-… |
|
|
55
|
+
|
|
56
|
+
## 3. Escenarios de atributos de calidad (QA) — formato de 6 partes
|
|
57
|
+
|
|
58
|
+
> Formato Bass: **Fuente del estímulo · Estímulo · Artefacto · Entorno · Respuesta · Medida de respuesta.**
|
|
59
|
+
> Cada escenario lleva prioridad `(Importancia de negocio, Impacto/Dificultad arquitectónica)` en escala
|
|
60
|
+
> {A=Alta, M=Media, B=Baja}. La **medida de respuesta** debe ser cuantificable (es lo que convierte un
|
|
61
|
+
> deseo en un ASR verificable).
|
|
62
|
+
|
|
63
|
+
### QA-1 — <Atributo> · prioridad (A, M)
|
|
64
|
+
- **Fuente:** …
|
|
65
|
+
- **Estímulo:** …
|
|
66
|
+
- **Artefacto:** …
|
|
67
|
+
- **Entorno:** …
|
|
68
|
+
- **Respuesta:** …
|
|
69
|
+
- **Medida:** … (traza a HU/AC/PRD)
|
|
70
|
+
|
|
71
|
+
## 4. Restricciones (CON)
|
|
72
|
+
|
|
73
|
+
| ID | Restricción | Origen |
|
|
74
|
+
|----|-------------|--------|
|
|
75
|
+
| CON-1 | … | … |
|
|
76
|
+
|
|
77
|
+
## 5. Concerns / preocupaciones del proyecto (CRN)
|
|
78
|
+
|
|
79
|
+
| ID | Concern | Implicación de diseño |
|
|
80
|
+
|----|---------|-----------------------|
|
|
81
|
+
| CRN-1 | … | … |
|
|
82
|
+
|
|
83
|
+
## 6. Plan de iteraciones (rondas ADD ↔ fases del PRD / líneas de release)
|
|
84
|
+
|
|
85
|
+
> Estrategia: iterar en el orden de las fases del PRD (o las líneas de release del Story Map). Cada
|
|
86
|
+
> iteración ejecuta los Pasos 2–7 de ADD sobre el subconjunto de drivers indicado.
|
|
87
|
+
|
|
88
|
+
| Iteración | Fase PRD / Release | Drivers seleccionados (Paso 2) | Elementos a refinar (Paso 3) | ADRs |
|
|
89
|
+
|-----------|--------------------|--------------------------------|------------------------------|------|
|
|
90
|
+
| **1** | … | … | … | … |
|
|
91
|
+
|
|
92
|
+
## 7. Matriz de priorización (Importancia de negocio × Impacto arquitectónico)
|
|
93
|
+
|
|
94
|
+
| | Impacto arq. ALTO | Impacto arq. MEDIO | Impacto arq. BAJO |
|
|
95
|
+
|---|---|---|---|
|
|
96
|
+
| **Negocio ALTO** | … | … | — |
|
|
97
|
+
| **Negocio MEDIO** | … | … | — |
|
|
98
|
+
|
|
99
|
+
> Los cuadrantes superiores (alta importancia × alto impacto) son los **ASRs críticos**: se atacan
|
|
100
|
+
> primero o se mitiga su riesgo lo antes posible (principio ADD de iterar hasta satisfacer los drivers
|
|
101
|
+
> críticos / mitigar el riesgo).
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Backlog Arquitectónico (ADD — Paso 7)
|
|
2
|
+
|
|
3
|
+
> Tablero de seguimiento del método ADD. Rastrea qué drivers/ASRs
|
|
4
|
+
> ([0000-drivers-y-asrs.md](0000-drivers-y-asrs.md)) han sido abordados por una decisión, cuáles están en
|
|
5
|
+
> progreso y cuáles pendientes. Equivale al Kanban arquitectónico que recomienda Len Bass para no perder
|
|
6
|
+
> de vista la cobertura entre iteraciones.
|
|
7
|
+
>
|
|
8
|
+
> **Este archivo es el estado de la capa de arquitectura.** Lo escribe la skill `setup-architecture`
|
|
9
|
+
> (`/build:architect`) y lo consumen los gates del arnés: el **DoR** verifica que los drivers
|
|
10
|
+
> arquitectónicamente significativos de una épica tengan un ADR con estado ≥ `ABORDADO` antes de abrir el
|
|
11
|
+
> slice; el gate **`stack_arch`** del Release Gate audita conformidad contra los ADRs referenciados aquí.
|
|
12
|
+
|
|
13
|
+
**Convención de estado:**
|
|
14
|
+
- `PENDIENTE` — driver sin decisión asociada.
|
|
15
|
+
- `EN DISEÑO` — iteración en curso.
|
|
16
|
+
- `ABORDADO` — existe ADR que lo cubre con análisis (Paso 7) registrado.
|
|
17
|
+
- `VERIFICADO` — el análisis confirma que la decisión satisface la medida de respuesta (idealmente
|
|
18
|
+
revisado por un par).
|
|
19
|
+
|
|
20
|
+
## Tablero por driver
|
|
21
|
+
|
|
22
|
+
> La columna **Trazabilidad** (EP/HU/§PRD de los que sale el driver, heredada del `0000`) es la que usa
|
|
23
|
+
> el DoR para el join épica↔driver: dado un `EP-XXX`, sus drivers son las filas cuya trazabilidad cita
|
|
24
|
+
> esa épica o alguna de sus HU.
|
|
25
|
+
|
|
26
|
+
| Driver | Tipo | Prioridad | Trazabilidad (EP/HU) | Iteración | ADR | Estado |
|
|
27
|
+
|--------|------|-----------|----------------------|-----------|-----|--------|
|
|
28
|
+
| UC-1 … | Funcional | (A,A) | EP-…, HU-… | 1 | 000N | PENDIENTE |
|
|
29
|
+
| QA-1 … | QA | (A,M) | HU-…, §PRD | 1 | 000N | PENDIENTE |
|
|
30
|
+
| CON-1 … | Restricción | — | §PRD | 1 | 000N | PENDIENTE |
|
|
31
|
+
| CRN-1 … | Concern | — | — | 1 | 000N | PENDIENTE |
|
|
32
|
+
|
|
33
|
+
## Riesgos arquitectónicos abiertos
|
|
34
|
+
|
|
35
|
+
> Salida del análisis ATAM-lite (Paso 6/7): puntos de sensibilidad, trade-offs y riesgos sin mitigar.
|
|
36
|
+
> Cada riesgo traza a su driver y a la mitigación planificada. Marcar ✅ CERRADO al resolver (no borrar:
|
|
37
|
+
> deja el rastro).
|
|
38
|
+
|
|
39
|
+
| Riesgo | Driver | Mitigación planificada | Iteración |
|
|
40
|
+
|--------|--------|------------------------|-----------|
|
|
41
|
+
| … | QA-… | … | … |
|
|
42
|
+
|
|
43
|
+
## Bitácora de iteraciones
|
|
44
|
+
|
|
45
|
+
> Una fila por ronda ADD. `Objetivo` = Paso 2; `Resultado` = Paso 7 (qué ADR se creó/refactorizó y qué
|
|
46
|
+
> quedó sin resolver). La fila de **Cierre** registra la promoción `proposed → accepted` tras la revisión
|
|
47
|
+
> humana.
|
|
48
|
+
|
|
49
|
+
| Iteración | Fecha | Objetivo (Paso 2) | Resultado (Paso 7) |
|
|
50
|
+
|-----------|-------|-------------------|--------------------|
|
|
51
|
+
| 1 | YYYY-MM-DD | … | … |
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: NNNN
|
|
3
|
+
title: "<Título de la decisión>"
|
|
4
|
+
date: YYYY-MM-DD
|
|
5
|
+
status: proposed # proposed | accepted | superseded | deprecated
|
|
6
|
+
authors:
|
|
7
|
+
- <Equipo / persona>
|
|
8
|
+
tags: []
|
|
9
|
+
add:
|
|
10
|
+
iteracion: <n>
|
|
11
|
+
fase_prd: "<Fase X>"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# ADR NNNN — <Título>
|
|
15
|
+
|
|
16
|
+
> Plantilla alineada al método **ADD** (Attribute-Driven Design, Len Bass — *Software Architecture in
|
|
17
|
+
> Practice*). Cada sección numerada corresponde a un paso del método. Las decisiones deben trazar a
|
|
18
|
+
> [0000-drivers-y-asrs.md](0000-drivers-y-asrs.md) y actualizar
|
|
19
|
+
> [_backlog-arquitectonico.md](_backlog-arquitectonico.md). Generada por la skill `setup-architecture`
|
|
20
|
+
> (`/build:architect`); un humano la promueve `proposed → accepted`.
|
|
21
|
+
|
|
22
|
+
## 1. Objetivo de la iteración y drivers seleccionados (Pasos 2–3)
|
|
23
|
+
|
|
24
|
+
- **Objetivo de la iteración:** <qué se busca resolver en esta ronda>.
|
|
25
|
+
- **Elemento(s) a refinar:** <sistema completo | servicio X | módulo Y>.
|
|
26
|
+
- **Drivers abordados:**
|
|
27
|
+
- Funcionales: UC-…
|
|
28
|
+
- Atributos de calidad: QA-… (con su medida de respuesta)
|
|
29
|
+
- Restricciones: CON-…
|
|
30
|
+
- Concerns: CRN-…
|
|
31
|
+
|
|
32
|
+
## 2. Conceptos de diseño elegidos (Paso 4)
|
|
33
|
+
|
|
34
|
+
> Patrones arquitectónicos, **tácticas** (sentido Bass), componentes externos o arquitecturas de
|
|
35
|
+
> referencia evaluados y elegidos para satisfacer los drivers. Registra las alternativas descartadas:
|
|
36
|
+
> ese es el valor del ADR.
|
|
37
|
+
|
|
38
|
+
| Driver | Concepto / Táctica | Alternativas descartadas | Razón |
|
|
39
|
+
|--------|--------------------|--------------------------|-------|
|
|
40
|
+
| QA-… | … | … | … |
|
|
41
|
+
|
|
42
|
+
## 3. Instanciación: responsabilidades e interfaces (Paso 5)
|
|
43
|
+
|
|
44
|
+
> Cómo se convierten los conceptos en estructuras reales: componentes/módulos, sus responsabilidades y
|
|
45
|
+
> los contratos (interfaces) por los que se comunican.
|
|
46
|
+
|
|
47
|
+
- **Elementos instanciados:** …
|
|
48
|
+
- **Responsabilidades:** …
|
|
49
|
+
- **Interfaces / contratos:** …
|
|
50
|
+
|
|
51
|
+
## 4. Vistas y registro de la decisión (Paso 6)
|
|
52
|
+
|
|
53
|
+
> Boceto de vista(s) estructural(es) — de módulos, de componentes-y-conectores o de asignación física —
|
|
54
|
+
> y el rationale + trade-offs.
|
|
55
|
+
|
|
56
|
+
```mermaid
|
|
57
|
+
%% vista estructural / de despliegue / de secuencia
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Decisión:** …
|
|
61
|
+
|
|
62
|
+
**Trade-offs aceptados:** …
|
|
63
|
+
|
|
64
|
+
## 5. Análisis del diseño (Paso 7)
|
|
65
|
+
|
|
66
|
+
> ¿La decisión satisface el objetivo de la iteración? Cada driver con veredicto y evidencia/medida.
|
|
67
|
+
|
|
68
|
+
| Driver | ¿Satisfecho? | Evidencia / medida | Riesgo residual |
|
|
69
|
+
|--------|--------------|--------------------|-----------------|
|
|
70
|
+
| QA-… | ✅/⚠️/❌ | … | … |
|
|
71
|
+
|
|
72
|
+
**Drivers no resueltos en esta iteración:** … (se devuelven al backlog arquitectónico).
|
|
73
|
+
|
|
74
|
+
## 6. Consecuencias
|
|
75
|
+
|
|
76
|
+
- Positivas: …
|
|
77
|
+
- Negativas / riesgos: …
|
|
78
|
+
- Operacionales: …
|
|
79
|
+
|
|
80
|
+
## 7. Trazabilidad
|
|
81
|
+
|
|
82
|
+
- Drivers: [0000-drivers-y-asrs.md](0000-drivers-y-asrs.md)
|
|
83
|
+
- PRD / HU / Flows: …
|
|
84
|
+
- Stack operacionalizado en: `.claude/config/stack-allowlist.json` (si esta ADR decide stack)
|
|
@@ -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íticamente 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.
|