@damenor/agent-docs 0.1.0

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.
Files changed (44) hide show
  1. package/README.md +115 -0
  2. package/dist/index.js +568 -0
  3. package/package.json +53 -0
  4. package/templates/base/AGENTS.md +177 -0
  5. package/templates/base/CHANGELOG.md +86 -0
  6. package/templates/base/README.md +110 -0
  7. package/templates/base/docs/CONTEXT.md +111 -0
  8. package/templates/base/docs/README.md +131 -0
  9. package/templates/base/docs/adr/TEMPLATE.md +83 -0
  10. package/templates/modules/agents/.agents/agents/doc-designer.md +56 -0
  11. package/templates/modules/agents/.agents/agents/doc-maintainer.md +54 -0
  12. package/templates/modules/agents/.agents/agents/doc-reviewer.md +80 -0
  13. package/templates/modules/agents/.agents/agents/doc-writer.md +66 -0
  14. package/templates/modules/agents/.agents/agents/reviewer.md +138 -0
  15. package/templates/modules/agents/.agents/skills/doc-design/SKILL.md +359 -0
  16. package/templates/modules/agents/.agents/skills/doc-design/references/design-system-format.md +550 -0
  17. package/templates/modules/agents/.agents/skills/doc-maintain/SKILL.md +345 -0
  18. package/templates/modules/agents/.agents/skills/doc-maintain/references/triggers.md +311 -0
  19. package/templates/modules/agents/.agents/skills/doc-review/SKILL.md +324 -0
  20. package/templates/modules/agents/.agents/skills/doc-review/references/health-checklist.md +290 -0
  21. package/templates/modules/agents/.agents/skills/doc-scaffold/SKILL.md +277 -0
  22. package/templates/modules/agents/.agents/skills/doc-scaffold/references/diataxis-quick-ref.md +149 -0
  23. package/templates/modules/agents/.agents/skills/doc-write/SKILL.md +414 -0
  24. package/templates/modules/agents/.agents/skills/doc-write/references/adr-format.md +194 -0
  25. package/templates/modules/agents/.agents/skills/doc-write/references/diataxis-patterns.md +351 -0
  26. package/templates/modules/ci/.github/workflows/docs-check.yml +94 -0
  27. package/templates/modules/design/docs/DESIGN.md +253 -0
  28. package/templates/modules/explanation/docs/explanation/agent-flow.md +15 -0
  29. package/templates/modules/explanation/docs/explanation/architecture.md +138 -0
  30. package/templates/modules/guides/docs/guides/deployment.md +189 -0
  31. package/templates/modules/guides/docs/guides/runbooks/TEMPLATE.md +86 -0
  32. package/templates/modules/guides/docs/guides/troubleshooting.md +65 -0
  33. package/templates/modules/operations/docs/operations/README.md +115 -0
  34. package/templates/modules/product/docs/product/overview.md +90 -0
  35. package/templates/modules/product/docs/roadmap.md +80 -0
  36. package/templates/modules/reference/docs/reference/api.md +131 -0
  37. package/templates/modules/reference/docs/reference/code-style.md +275 -0
  38. package/templates/modules/reference/docs/reference/configuration.md +117 -0
  39. package/templates/modules/reference/docs/reference/infrastructure.md +191 -0
  40. package/templates/modules/tutorials/docs/tutorials/environment-setup.md +212 -0
  41. package/templates/modules/tutorials/docs/tutorials/first-task.md +246 -0
  42. package/templates/modules/tutorials/docs/tutorials/quick-start.md +146 -0
  43. package/templates/shared/.editorconfig +20 -0
  44. package/templates/shared/.markdownlint.json +14 -0
@@ -0,0 +1,414 @@
1
+ ---
2
+ name: doc-write
3
+ description: >
4
+ Escribe documentación siguiendo las convenciones Diátaxis + ADR + CONTEXT.
5
+ Clasifica contenido por tipo antes de escribir, genera ADRs cuando aplica,
6
+ y mantiene CONTEXT.md actualizado. Todo el contenido en español con términos
7
+ técnicos en inglés.
8
+ TRIGGER: Cuando el usuario dice "escribir doc", "documentar X", "crear ADR",
9
+ "actualizar CONTEXT", "nueva documentación", o se necesita crear/actualizar
10
+ cualquier archivo de documentación.
11
+ license: Apache-2.0
12
+ metadata:
13
+ author: damenordev
14
+ version: "1.0"
15
+ ---
16
+
17
+ # doc-write
18
+
19
+ ## Cuándo Usar
20
+
21
+ - **Crear documentación nueva**: Cualquier archivo de doc que se necesite generar
22
+ - **Actualizar documentación existente**: Modificar docs que están desactualizados
23
+ - **Escribir ADRs**: Documentar decisiones arquitectónicas significativas
24
+ - **Actualizar CONTEXT.md**: Agregar términos del dominio que surgieron
25
+ - **Actualizar docs/README.md**: Reflejar cambios en el mapa de documentación
26
+ - **Post-feature**: Después de implementar una feature que necesita documentación
27
+
28
+ ## Patrones Críticos
29
+
30
+ ### REGLA #1: Clasificar por Diátaxis ANTES de escribir
31
+
32
+ Siempre determinar el tipo ANTES de empezar a escribir:
33
+
34
+ ```
35
+ 1. ¿Qué necesita el lector?
36
+ ├── Aprender algo nuevo → Tutorial
37
+ ├── Resolver un problema → How-to
38
+ ├── Consultar información → Referencia
39
+ └── Entender el porqué → Explicación
40
+
41
+ 2. ¿Es una decisión arquitectónica? → ADR (revisar criterios)
42
+
43
+ 3. ¿Es un término del dominio? → CONTEXT.md
44
+ ```
45
+
46
+ ### REGLA #2: ADRs — Solo cuando los 3 criterios se cumplen
47
+
48
+ Un ADR se escribe SOLO cuando TODAS estas condiciones son verdaderas:
49
+
50
+ 1. **Difícil de revertir**: Cambiar esta decisión tendría costo alto (tiempo, dinero, datos)
51
+ 2. **Sorprendente**: Un recién llegado no esperaría esta decisión o necesitaría contexto
52
+ 3. **Trade-off real**: Hay alternativas válidas con pros/cons genuinos
53
+
54
+ **Si falla cualquier criterio, NO es un ADR.**
55
+
56
+ Ver [ADR Format](references/adr-format.md) para detalles completos.
57
+
58
+ ### REGLA #3: CONTEXT.md — Agregar términos cuando emergen
59
+
60
+ - Agregar términos nuevos cuando aparecen en código o conversaciones
61
+ - Marcar términos ambiguos con `⚠️ AMBIGUO`
62
+ - Mostrar relaciones entre términos (`→`, `←→`, `parte-de`)
63
+ - No repetir lo que ya está en referencia — solo términos del dominio
64
+
65
+ ### REGLA #4: Actualizar docs/README.md al agregar archivos
66
+
67
+ El mapa de documentación siempre debe reflejar la realidad:
68
+ - Agregar nuevas entradas cuando se crean archivos
69
+ - Marcar como obsoletas las entradas de archivos eliminados
70
+ - Actualizar descripciones si el contenido cambió significativamente
71
+
72
+ ### REGLA #5: Frontmatter YAML obligatorio
73
+
74
+ ```yaml
75
+ ---
76
+ created: "2026-05-07"
77
+ updated: "2026-05-07"
78
+ status: active | draft | stub | deprecated
79
+ type: tutorial | how-to | reference | explanation | adr | design | product
80
+ tags: [tag1, tag2, tag3]
81
+ ---
82
+ ```
83
+
84
+ Sin `owner`. Siempre incluir `updated` al modificar.
85
+
86
+ ### REGLA #6: Audiencia DUAL — humanos Y agentes IA
87
+
88
+ Escribir para:
89
+ - **Humanos**: Claridad, ejemplos, flujo lógico
90
+ - **Agentes IA**: Estructura consistente, términos definidos en CONTEXT.md, referencias cruzadas claras
91
+
92
+ ### REGLA #7: Contenido en español, términos técnicos en inglés
93
+
94
+ ```
95
+ ✅ "Para configurar el middleware de autenticación..."
96
+ ✅ "El endpoint /api/users retorna un array de objetos..."
97
+ ✅ "El componente Button acepta la prop `variant`..."
98
+ ```
99
+
100
+ ### REGLA #8: NUNCA crear contenido placeholder/TODO
101
+
102
+ ```
103
+ ❌ MAL: "TODO: agregar ejemplos" — mejor NO crear el archivo
104
+ ❌ MAL: "Contenido pendiente de redacción" — mejor NO crear el archivo
105
+ ✅ BIEN: Escribir contenido real y completo, o no crear el archivo
106
+ ```
107
+
108
+ ## Guías por Tipo
109
+
110
+ ### Tutorial
111
+
112
+ **Orientación**: Aprendizaje — el usuario aprende haciendo
113
+
114
+ **Estructura**:
115
+ ```markdown
116
+ ---
117
+ created: "..."
118
+ status: active
119
+ type: tutorial
120
+ tags: [...]
121
+ ---
122
+
123
+ # [Título descriptivo del objetivo de aprendizaje]
124
+
125
+ ## Qué vas a construir
126
+ [Descripción del resultado final — 2-3 líneas]
127
+
128
+ ## Prerequisitos
129
+ [Lista concreta de lo que se necesita antes de empezar]
130
+
131
+ ## Paso 1: [Acción concreta]
132
+ [Instrucciones + código]
133
+ ### ✅ Verificación
134
+ [Cómo confirmar que el paso funcionó]
135
+
136
+ ## Paso 2: [Acción concreta]
137
+ ...
138
+
139
+ ## Resumen
140
+ [Qué se aprendió, qué sigue]
141
+ ```
142
+
143
+ **Tono**: Didáctico, paciente. Un concepto a la vez. Verificar comprensión en cada paso.
144
+
145
+ **Longitud**: 500-2000 palabras. Si es más largo, dividir en tutoriales secuenciales.
146
+
147
+ **No incluir**: Explicaciones profundas del porqué (eso es explicación), referenciar otros docs.
148
+
149
+ ### How-to (Guía práctica)
150
+
151
+ **Orientación**: Resolver un problema — el usuario ya tiene conocimiento previo
152
+
153
+ **Estructura**:
154
+ ```markdown
155
+ ---
156
+ created: "..."
157
+ status: active
158
+ type: how-to
159
+ tags: [...]
160
+ ---
161
+
162
+ # Cómo [resolver problema específico]
163
+
164
+ ## Cuándo usar esto
165
+ [1-2 líneas describiendo el escenario]
166
+
167
+ ## Pasos
168
+ 1. [Acción directa con código]
169
+ 2. [Acción directa con código]
170
+ ...
171
+
172
+ ## Resultado esperado
173
+ [Qué debería verse/funcionar al final]
174
+ ```
175
+
176
+ **Tono**: Directo, sin rodeos. Asume que el lector conoce el sistema. No explicar conceptos básicos.
177
+
178
+ **Cuándo dividir**: Si tiene más de 10 pasos o cubre más de un problema, dividir en múltiples how-tos.
179
+
180
+ ### Referencia
181
+
182
+ **Orientación**: Información factual — el usuario busca un dato específico
183
+
184
+ **Estructura**:
185
+ ```markdown
186
+ ---
187
+ created: "..."
188
+ status: active
189
+ type: reference
190
+ tags: [...]
191
+ ---
192
+
193
+ # [Nombre de la API/sistema/interfaz]
194
+
195
+ ## [Sección principal — endpoints, métodos, props, etc.]
196
+
197
+ | Nombre | Tipo | Descripción | Default |
198
+ |--------|------|-------------|---------|
199
+ | ... | ... | ... | ... |
200
+
201
+ ## Ejemplos
202
+ [Código mínimo por cada caso de uso principal]
203
+ ```
204
+
205
+ **Tono**: Neutral, factual, sin narrativa. Tablas y listas sobre prosa.
206
+
207
+ **Qué incluir**: TODOS los parámetros, TODOS los valores posibles, TODOS los edge cases.
208
+
209
+ **Qué NO incluir**: Explicaciones de por qué, tutoriales de uso, narrativa.
210
+
211
+ ### Explicación
212
+
213
+ **Orientación**: Comprensión — el usuario quiere entender el porqué
214
+
215
+ **Estructura**:
216
+ ```markdown
217
+ ---
218
+ created: "..."
219
+ status: active
220
+ type: explanation
221
+ tags: [...]
222
+ ---
223
+
224
+ # [Tema que se explica]
225
+
226
+ ## Contexto
227
+ [Por qué existe esto, qué problema resuelve]
228
+
229
+ ## Cómo funciona
230
+ [Vista general sin entrar en código]
231
+
232
+ ## Alternativas consideradas
233
+ [Qué otras opciones existían y por qué se eligió esta]
234
+
235
+ ## Implicaciones
236
+ [Qué significa esta decisión para el futuro]
237
+ ```
238
+
239
+ **Tono**: Discursivo, analítico. Conectar con ADRs cuando aplique (`docs/adr/001-*.md`).
240
+
241
+ **Cuándo es necesaria**: Cuando un ADR necesita más contexto del que cabe en el formato mínimo, o cuando un concepto se referencia repetidamente en how-tos y tutoriales.
242
+
243
+ ## Guías de ADRs
244
+
245
+ ### Criterios estrictos (los 3 deben cumplirse)
246
+
247
+ 1. **Difícil de revertir**: El cambio tiene costo alto si se revierte
248
+ 2. **Sorprendente**: Alguien nuevo no lo esperaría o preguntaría "¿por qué?"
249
+ 3. **Trade-off real**: Hay alternativas genuinas con ventajas y desventajas
250
+
251
+ ### Qué califica como ADR
252
+
253
+ - Forma de la arquitectura (monolito vs microservicios, layered vs hexagonal)
254
+ - Patrones de integración (sync vs async, REST vs GraphQL vs gRPC)
255
+ - Lock-in tecnológico (base de datos, cloud provider, librería core)
256
+ - Decisiones de borde (qué va dentro vs fuera del servicio)
257
+ - Desviaciones deliberadas (cuando se rompe una convención a propósito)
258
+ - Restricciones invisibles (limitaciones no obvias del stack o del dominio)
259
+
260
+ ### Qué NO califica como ADR
261
+
262
+ - Elecciones obvias (usar Git, usar testing)
263
+ - Fácil de revertir (renombrar una variable, mover un archivo)
264
+ - Sin alternativas reales (no hay otra opción razonable)
265
+
266
+ ### Formato mínimo del ADR
267
+
268
+ ```markdown
269
+ ---
270
+ created: "2026-05-07"
271
+ updated: "2026-05-07"
272
+ status: proposed | accepted | deprecated | superseded
273
+ type: adr
274
+ tags: [arquitectura, decision]
275
+ ---
276
+
277
+ # ADR-001: [Título breve de la decisión]
278
+
279
+ [1-3 oraciones explicando la decisión, el porqué, y las alternativas consideradas.
280
+ No más de un párrafo. Si necesita más contexto, crear un explanation/ vinculado.]
281
+ ```
282
+
283
+ **Ejemplo real**:
284
+
285
+ ```markdown
286
+ # ADR-002: Usar PostgreSQL con Prisma ORM
287
+
288
+ Elegimos PostgreSQL + Prisma como capa de datos porque el proyecto necesita
289
+ relaciones complejas entre entidades y Prisma proporciona type-safety en
290
+ TypeScript. Se consideró MongoDB + Mongoose (rechazado por necesitar joins
291
+ frecuentes) y raw SQL (rechazado por perder type-safety).
292
+ ```
293
+
294
+ Ver [ADR Format](references/adr-format.md) para referencia completa.
295
+
296
+ ## Referencias Cruzadas
297
+
298
+ Usar wikilinks donde sea útil:
299
+
300
+ ```markdown
301
+ Ver [[CONTEXT]] para definiciones de términos del dominio.
302
+ Relacionado con [[ADR-001-event-sourcing]].
303
+ Para pasos prácticos, ver [[how-to/add-new-endpoint]].
304
+ ```
305
+
306
+ ## Proceso de Escritura
307
+
308
+ ```
309
+ 1. Identificar QUÉ se necesita documentar
310
+ 2. Clasificar por Diátaxis (tutorial/how-to/reference/explanation) o ADR
311
+ 3. Verificar que no existe ya un archivo para lo mismo
312
+ 4. Escribir con el formato y tono correspondiente al tipo
313
+ 5. Agregar frontmatter YAML
314
+ 6. Actualizar docs/README.md si es un archivo nuevo
315
+ 7. Actualizar docs/CONTEXT.md si hay términos nuevos
316
+ 8. Verificar que el contenido es real (no placeholder)
317
+ ```
318
+
319
+ ## Comandos
320
+
321
+ ### Verificación pre-escritura
322
+
323
+ ```
324
+ 1. ¿Ya existe un archivo para este contenido? → Buscar en docs/README.md
325
+ 2. ¿Es el tipo correcto? → Verificar con árbol de decisión Diátaxis
326
+ 3. ¿Hay términos del dominio nuevos? → Preparar entrada para CONTEXT.md
327
+ 4. ¿Necesita ADR? → Verificar los 3 criterios
328
+ ```
329
+
330
+ ### Verificación post-escritura
331
+
332
+ ```
333
+ 1. ¿Tiene frontmatter YAML? → status, type, tags, created
334
+ 2. ¿Está en la carpeta correcta? → tutorials/, how-to/, reference/, explanation/, docs/adr/
335
+ 3. ¿docs/README.md refleja el nuevo archivo? → Actualizar mapa
336
+ 4. ¿CONTEXT.md tiene los términos nuevos? → Agregar si aplica
337
+ 5. ¿El contenido es real? → Sin TODO, sin placeholder, sin secciones vacías
338
+ ```
339
+
340
+ ## Ejemplos Reales por Tipo
341
+
342
+ ### Tutorial — Ejemplo de output
343
+
344
+ ```markdown
345
+ ---
346
+ created: "2026-05-07"
347
+ updated: "2026-05-07"
348
+ status: active
349
+ type: tutorial
350
+ tags: [auth, jwt, onboarding]
351
+ ---
352
+
353
+ # Implementar autenticación JWT
354
+
355
+ ## Qué vas a construir
356
+ Un flujo completo de login/registro con JWT y refresh tokens.
357
+
358
+ ## Prerequisitos
359
+ - Proyecto corriendo localmente (ver [[tutorials/quick-start]])
360
+ - Conocimiento básico de HTTP headers
361
+
362
+ ## Paso 1: Instalar dependencias
363
+
364
+ ```bash
365
+ npm install jsonwebtoken bcryptjs
366
+ npm install -D @types/jsonwebtoken @types/bcryptjs
367
+ ```
368
+
369
+ ### ✅ Verificación
370
+ ```bash
371
+ npm ls jsonwebtoken
372
+ # → jsonwebtoken@9.0.2
373
+ ```
374
+
375
+ ## Paso 2: Crear el servicio de auth
376
+ ...[pasos con código real]
377
+
378
+ ## Resumen
379
+ Aprendiste a implementar JWT con refresh tokens.
380
+ Siguiente: [[guides/how-to-protect-routes]]
381
+ ```
382
+
383
+ ### How-to — Ejemplo de output
384
+
385
+ ```markdown
386
+ ---
387
+ created: "2026-05-07"
388
+ updated: "2026-05-07"
389
+ status: active
390
+ type: how-to
391
+ tags: [deployment, vercel, production]
392
+ ---
393
+
394
+ # Cómo hacer deploy a producción
395
+
396
+ ## Cuándo usar esto
397
+ Cuando una feature aprobada en staging está lista para producción.
398
+
399
+ ## Pasos
400
+ 1. Crear PR de `develop` a `main`
401
+ 2. Esperar que CI pase (lint + test + build)
402
+ 3. Merge con squash
403
+ 4. Vercel deploya automáticamente desde `main`
404
+ 5. Verificar en https://[dominio]
405
+
406
+ ## Rollback
407
+ Si algo falla: Vercel Dashboard → Deployments → "Promote to Production" en el deploy anterior
408
+ ```
409
+
410
+ ## Recursos
411
+
412
+ - [Diátaxis Patterns](references/diataxis-patterns.md) — Patrones detallados por tipo con ejemplos
413
+ - [ADR Format](references/adr-format.md) — Referencia completa del formato ADR
414
+ - Skills relacionados: `doc-scaffold` (inicializar docs), `doc-review` (auditar docs), `doc-maintain` (mantener docs sincronizados), `doc-design` (sistema de diseño)
@@ -0,0 +1,194 @@
1
+ ---
2
+ created: "2024-01-15"
3
+ status: active
4
+ type: reference
5
+ tags: [adr, decision, arquitectura, formato]
6
+ ---
7
+
8
+ # Formato ADR — Referencia Completa
9
+
10
+ ## Qué es un ADR
11
+
12
+ Un ADR (Architecture Decision Record) es un documento que captura una decisión arquitectónica importante, el contexto en que se tomó, y sus consecuencias. En este proyecto, los ADRs usan un **formato mínimo**: título + 1-3 oraciones.
13
+
14
+ ## Los 3 Criterios Obligatorios
15
+
16
+ Un ADR se escribe **SOLO** cuando **TODAS** estas condiciones son verdaderas:
17
+
18
+ ### 1. Difícil de revertir
19
+
20
+ La decisión tiene un costo alto si se revierte:
21
+ - Tiempo significativo de refactorización
22
+ - Migración de datos compleja o riesgosa
23
+ - Cambio que afecta múltiples equipos o servicios
24
+ - Contrato que compromete recursos a largo plazo
25
+
26
+ **No es difícil de revertir**: Renombrar una variable, mover un archivo, cambiar un color en CSS
27
+
28
+ ### 2. Sorprendente
29
+
30
+ Un recién llegado al proyecto no esperaría esta decisión o necesitaría contexto adicional para entenderla:
31
+ - "¿Por qué usan PostgreSQL y no MongoDB para esto?"
32
+ - "¿Por qué la auth está en un servicio separado?"
33
+ - "¿Por qué no usan el framework estándar del equipo?"
34
+
35
+ **No es sorprendente**: Usar Git, tener tests, usar Tailwind para CSS
36
+
37
+ ### 3. Trade-off real
38
+
39
+ Hay alternativas válidas con ventajas y desventajas genuinas:
40
+ - Opción A: Más rápido pero menos mantenible
41
+ - Opción B: Más caro pero más confiable
42
+ - Opción C: Estándar del equipo pero no ideal para este caso
43
+
44
+ **No es trade-off real**: No hay otra opción razonable, o la "alternativa" es claramente inferior
45
+
46
+ ## Plantilla
47
+
48
+ ```markdown
49
+ ---
50
+ created: "2024-01-15"
51
+ status: proposed | accepted | deprecated | superseded-by:ADR-NNN
52
+ type: adr
53
+ tags: [tag1, tag2]
54
+ ---
55
+
56
+ # ADR-NNN: [Título breve de la decisión]
57
+
58
+ [1-3 oraciones explicando:
59
+ - QUÉ se decidió
60
+ - POR QUÉ (la razón principal)
61
+ - QUÉ ALTERNATIVAS se consideraron brevemente]
62
+
63
+ <!-- Si se necesita más contexto, crear un archivo en explanation/ vinculado -->
64
+ ```
65
+
66
+ ## Qué Califica como ADR — Ejemplos
67
+
68
+ ### Sí califica
69
+
70
+ | Ejemplo | Difícil de revertir | Sorprendente | Trade-off real |
71
+ |---------|---------------------|--------------|----------------|
72
+ | Elegir monolito modular vs microservicios | Alta reescritura | Alguien esperaría microservicios | Escalabilidad vs complejidad |
73
+ | Usar event sourcing para auditoría | Cambio fundamental de arquitectura | No es el enfoque típico | Consistencia vs complejidad |
74
+ | Elegir PostgreSQL sobre MongoDB | Migración de datos + queries | Datos semi-estructurados en relacional | ACID vs flexibilidad |
75
+ | Implementar auth propia vs Auth0 | Cambio afecta todos los usuarios | Auth0 es el default del equipo | Control vs velocidad |
76
+ | Usar GraphQL en vez de REST | Cambio de contrato con clientes | REST es el estándar | Flexibilidad vs simplicidad |
77
+ | Separar servicio de notificaciones | Refactor multi-equipo | Parecería del mismo dominio | Escalabilidad vs latencia |
78
+ | No usar ORM, usar queries raw | Requiere reescribir capa de datos | El equipo usa ORM por defecto | Performance vs productividad |
79
+ | Usar CQRS para el módulo de reporting | Cambio en patrón de datos | Reporting directo es más simple | Performance de lectura vs complejidad |
80
+
81
+ ### No califica
82
+
83
+ | Ejemplo | Por qué no | Criterio que falla |
84
+ |---------|-----------|-------------------|
85
+ | Usar Git para control de versiones | Es el estándar de la industria | No es sorprendente |
86
+ | Agregar ESLint al proyecto | Se puede quitar en 5 minutos | No es difícil de revertir |
87
+ | Usar React para el frontend | Es la elección obvia del equipo | No es sorprendente, no hay trade-off |
88
+ | Nombrar variables en inglés | Es la convención del equipo | No hay trade-off real |
89
+ | Usar dotenv para variables de entorno | Es el estándar, fácil de cambiar | Falla los 3 criterios |
90
+ | Agregar prettier | Se quita con un commit | No es difícil de revertir |
91
+
92
+ ## Convención de Numeración
93
+
94
+ ```
95
+ ADR-001: Título de la primera decisión
96
+ ADR-002: Título de la segunda decisión
97
+ ADR-003: ...
98
+ ```
99
+
100
+ ### Reglas
101
+
102
+ - **Numeración secuencial**: ADR-001, ADR-002, ADR-003...
103
+ - **Sin gaps**: No saltar números. Si un ADR se descarta, se marca como `status: deprecated` pero el número no se reutiliza
104
+ - **Prefijo en archivo**: `docs/adr/001-titulo-kebab-case.md`
105
+ - **Título único**: El título debe ser descriptivo y no repetirse
106
+
107
+ ### Nombre de archivo
108
+
109
+ ```
110
+ docs/adr/
111
+ ├── TEMPLATE.md # Plantilla reutilizable
112
+ ├── 001-monolito-modular.md
113
+ ├── 002-postgresql-sobre-mongodb.md
114
+ ├── 003-event-sourcing-auditoria.md
115
+ └── 004-auth-propia-vs-auth0.md
116
+ ```
117
+
118
+ ## Ciclo de Vida
119
+
120
+ ### Estados de un ADR
121
+
122
+ ```
123
+ proposed → accepted → deprecated
124
+ ↘ superseded-by: ADR-NNN
125
+ ```
126
+
127
+ ### proposed
128
+
129
+ El ADR se está discutiendo. Aún no es la decisión final.
130
+
131
+ ```yaml
132
+ status: proposed
133
+ ```
134
+
135
+ ### accepted
136
+
137
+ La decisión fue tomada y se implementa.
138
+
139
+ ```yaml
140
+ status: accepted
141
+ ```
142
+
143
+ ### deprecated
144
+
145
+ La decisión ya no aplica pero se mantiene por historial.
146
+
147
+ ```yaml
148
+ status: deprecated
149
+ ```
150
+
151
+ ### superseded
152
+
153
+ Una decisión posterior reemplaza este ADR.
154
+
155
+ ```yaml
156
+ status: superseded-by:ADR-005
157
+ ```
158
+
159
+ En el ADR que reemplaza:
160
+ ```yaml
161
+ status: accepted
162
+ supersedes: ADR-003
163
+ ```
164
+
165
+ ## Cuándo Expandir un ADR
166
+
167
+ Si un ADR necesita más de 3 oraciones, crear un archivo en `explanation/` vinculado:
168
+
169
+ ```markdown
170
+ # ADR-003: Event sourcing para auditoría
171
+
172
+ Decidimos usar event sourcing para el módulo de auditoría porque los requisitos
173
+ regulatorios exigen un historial inmutable de cambios. Consideramos append-only
174
+ tables pero event sourcing provee mejor trazabilidad. Ver [[explanation/event-sourcing]]
175
+ para contexto detallado.
176
+ ```
177
+
178
+ En `explanation/event-sourcing.md`:
179
+ - Contexto regulatorio completo
180
+ - Alternativas evaluadas con pros/cons detallados
181
+ - Implicaciones para el equipo y la arquitectura
182
+ - Plan de implementación
183
+
184
+ ## Errores Comunes
185
+
186
+ | Error | Solución |
187
+ |-------|----------|
188
+ | Escribir ADRs para TODO | Solo escribir cuando los 3 criterios se cumplen |
189
+ | ADRs de 2 páginas | Formato mínimo: 1-3 oraciones. Expandir en explanation/ |
190
+ | Numeración inconsistente | Usar secuencial sin gaps |
191
+ | Olvidar actualizar estado | Cambiar `status` cuando la decisión cambia |
192
+ | No vincular con explicaciones | Agregar wikilinks a explanation/ cuando sea necesario |
193
+ | Repetir el mismo ADR | Buscar ADRs existentes antes de crear uno nuevo |
194
+ | ADR sin contexto de alternativas | Siempre mencionar qué alternativas se consideraron |