@damenor/agent-docs 0.1.1 → 0.4.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.
- package/README.md +65 -29
- package/dist/index.js +3834 -217
- package/package.json +14 -11
- package/templates/modules/agents/.agents/agents/doc-designer.md +39 -37
- package/templates/modules/agents/.agents/agents/doc-maintainer.md +35 -35
- package/templates/modules/agents/.agents/agents/doc-reviewer.md +55 -46
- package/templates/modules/agents/.agents/agents/doc-writer.md +34 -33
- package/templates/modules/agents/.agents/agents/reviewer.md +114 -100
- package/templates/modules/agents/.agents/skills/doc-design/SKILL.md +176 -174
- package/templates/modules/agents/.agents/skills/doc-design/references/design-system-format.md +241 -247
- package/templates/modules/agents/.agents/skills/doc-maintain/SKILL.md +205 -195
- package/templates/modules/agents/.agents/skills/doc-maintain/references/triggers.md +171 -165
- package/templates/modules/agents/.agents/skills/doc-review/SKILL.md +245 -240
- package/templates/modules/agents/.agents/skills/doc-review/references/health-checklist.md +115 -112
- package/templates/modules/agents/.agents/skills/doc-scaffold/SKILL.md +164 -157
- package/templates/modules/agents/.agents/skills/doc-scaffold/references/diataxis-quick-ref.md +110 -110
- package/templates/modules/agents/.agents/skills/doc-write/SKILL.md +240 -212
- package/templates/modules/agents/.agents/skills/doc-write/references/adr-format.md +99 -93
- package/templates/modules/agents/.agents/skills/doc-write/references/diataxis-patterns.md +221 -200
- package/templates/base/AGENTS.md +0 -177
- package/templates/base/CHANGELOG.md +0 -86
- package/templates/base/README.md +0 -110
- package/templates/base/docs/CONTEXT.md +0 -111
- package/templates/base/docs/README.md +0 -131
- package/templates/base/docs/adr/TEMPLATE.md +0 -83
- package/templates/modules/design/docs/DESIGN.md +0 -253
- package/templates/modules/explanation/docs/explanation/agent-flow.md +0 -15
- package/templates/modules/explanation/docs/explanation/architecture.md +0 -138
- package/templates/modules/guides/docs/guides/deployment.md +0 -189
- package/templates/modules/guides/docs/guides/runbooks/TEMPLATE.md +0 -86
- package/templates/modules/guides/docs/guides/troubleshooting.md +0 -65
- package/templates/modules/operations/docs/operations/README.md +0 -115
- package/templates/modules/product/docs/product/overview.md +0 -90
- package/templates/modules/product/docs/roadmap.md +0 -80
- package/templates/modules/reference/docs/reference/api.md +0 -131
- package/templates/modules/reference/docs/reference/code-style.md +0 -275
- package/templates/modules/reference/docs/reference/configuration.md +0 -117
- package/templates/modules/reference/docs/reference/infrastructure.md +0 -191
- package/templates/modules/tutorials/docs/tutorials/environment-setup.md +0 -212
- package/templates/modules/tutorials/docs/tutorials/first-task.md +0 -246
- package/templates/modules/tutorials/docs/tutorials/quick-start.md +0 -146
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
created: "2025-01-01"
|
|
3
|
-
status: active
|
|
4
|
-
type: adr-template
|
|
5
|
-
tags: [adr, plantilla, decisiones, arquitectura]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# ADR: [Título de la decisión]
|
|
9
|
-
|
|
10
|
-
**Número**: `[NNNN]` (asignar al crear el archivo, ej. `0002`)
|
|
11
|
-
**Fecha**: `[YYYY-MM-DD]`
|
|
12
|
-
**Estado**: [Propuesto | Aceptado | Deprecado | Reemplazado por ADR-NNNN]
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Contexto
|
|
17
|
-
|
|
18
|
-
[1-3 oraciones que describen la situación que motivó la decisión. Qué problema se intenta resolver. Qué restricciones existían.]
|
|
19
|
-
|
|
20
|
-
## Decisión
|
|
21
|
-
|
|
22
|
-
[1-3 oraciones describiendo la decisión tomada. Ser específico: qué se eligió y qué se descartó.]
|
|
23
|
-
|
|
24
|
-
## Por qué
|
|
25
|
-
|
|
26
|
-
[La justificación. Por qué esta opción y no otra. Qué criterio se usó para elegir (performance, mantenibilidad, costo, tiempo, etc.).]
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## Opciones consideradas *(opcional)*
|
|
31
|
-
|
|
32
|
-
| Opción | Pros | Contras |
|
|
33
|
-
|--------|------|---------|
|
|
34
|
-
| **[Opción A]** (elegida) | [Beneficios principales] | [Desventajas aceptadas] |
|
|
35
|
-
| **[Opción B]** | [Beneficios] | [Por qué se descartó] |
|
|
36
|
-
| **[Opción C]** | [Beneficios] | [Por qué se descartó] |
|
|
37
|
-
|
|
38
|
-
## Consecuencias *(opcional)*
|
|
39
|
-
|
|
40
|
-
**Positivas**:
|
|
41
|
-
- [Beneficio esperado de la decisión.]
|
|
42
|
-
|
|
43
|
-
**Negativas**:
|
|
44
|
-
- [Trade-off aceptado.]
|
|
45
|
-
|
|
46
|
-
**Riesgos**:
|
|
47
|
-
- [Qué podría salir mal y cómo se mitiga.]
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## Cuándo escribir un ADR
|
|
52
|
-
|
|
53
|
-
Escribir un ADR cuando la decisión cumple **al menos 2 de estos 3 criterios**:
|
|
54
|
-
|
|
55
|
-
1. **Irreversible**: Costaría mucho tiempo o dinero revertirla. No es un "probamos y si no funciona cambiamos".
|
|
56
|
-
2. **Sorprendente**: Alguien nuevo en el equipo preguntaría "¿por qué hicimos esto?". No es la opción obvia.
|
|
57
|
-
3. **Trade-off**: Hay al menos dos opciones válidas con pros y contras reales. No era claro desde el inicio.
|
|
58
|
-
|
|
59
|
-
Si la decisión es trivial, obvia, o fácilmente reversible — **no escribir un ADR**. Un comentario en el código es suficiente.
|
|
60
|
-
|
|
61
|
-
### Ejemplos de cuándo SÍ escribir un ADR
|
|
62
|
-
|
|
63
|
-
- "Usamos PostgreSQL en lugar de MongoDB para los datos de usuarios."
|
|
64
|
-
- "Elegimos autenticación con JWT en lugar de sesiones."
|
|
65
|
-
- "Usamos colas (RabbitMQ) para procesamiento asíncrono de pagos."
|
|
66
|
-
|
|
67
|
-
### Ejemplos de cuándo NO escribir un ADR
|
|
68
|
-
|
|
69
|
-
- "Usamos ESLint para linting." (Obvio, sin trade-off)
|
|
70
|
-
- "Nombramos las branches como `feature/xxx`." (Convención, no decisión de arquitectura)
|
|
71
|
-
- "Elegimos el color azul para el botón principal." (Fácilmente reversible)
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## Formato del nombre de archivo
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
docs/adr/NNNN-titulo-en-kebab-case.md
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
- `NNNN`: Número secuencial (0001, 0002, 0003...).
|
|
82
|
-
- El título debe ser descriptivo de la decisión, no del problema.
|
|
83
|
-
- Ejemplo: `0002-use-postgresql-over-mongodb.md`
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
created: "2025-01-01"
|
|
3
|
-
status: active
|
|
4
|
-
type: design-system
|
|
5
|
-
tags: [diseño, ui, componentes, colores, tipografía, design-system]
|
|
6
|
-
version: "1.0.0"
|
|
7
|
-
name: "[Nombre del Design System]"
|
|
8
|
-
description: "Sistema de diseño visual para {{PROJECT_NAME}}"
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Design System — {{PROJECT_NAME}}
|
|
12
|
-
|
|
13
|
-
```yaml
|
|
14
|
-
# ⚠️ VALORES DE EJEMPLO — NO SON LOS TOKENS DEL PROYECTO
|
|
15
|
-
# Los valores abajo son ilustrativos (basados en paleta Tailwind).
|
|
16
|
-
# Reemplazar con los tokens reales del proyecto.
|
|
17
|
-
# Para extraer tokens automáticamente del código, usar la skill `doc-design`.
|
|
18
|
-
|
|
19
|
-
colors:
|
|
20
|
-
primary:
|
|
21
|
-
50: "#eff6ff" # Fondo claro
|
|
22
|
-
100: "#dbeafe" # Hover sutil
|
|
23
|
-
500: "#3b82f6" # Color principal
|
|
24
|
-
600: "#2563eb" # Hover
|
|
25
|
-
700: "#1d4ed8" # Activo / Pressed
|
|
26
|
-
900: "#1e3a5f" # Texto sobre claro
|
|
27
|
-
secondary:
|
|
28
|
-
50: "#f8fafc"
|
|
29
|
-
500: "#64748b"
|
|
30
|
-
700: "#334155"
|
|
31
|
-
900: "#0f172a"
|
|
32
|
-
semantic:
|
|
33
|
-
success: "#22c55e"
|
|
34
|
-
warning: "#f59e0b"
|
|
35
|
-
error: "#ef4444"
|
|
36
|
-
info: "#3b82f6"
|
|
37
|
-
neutral:
|
|
38
|
-
white: "#ffffff"
|
|
39
|
-
gray-100: "#f1f5f9"
|
|
40
|
-
gray-300: "#cbd5e1"
|
|
41
|
-
gray-500: "#64748b"
|
|
42
|
-
gray-700: "#334155"
|
|
43
|
-
black: "#0f172a"
|
|
44
|
-
brand:
|
|
45
|
-
corporate: "#[COLOR_PRINCIPAL]"
|
|
46
|
-
accent: "#[COLOR_SECUNDARIO]"
|
|
47
|
-
|
|
48
|
-
typography:
|
|
49
|
-
fontFamily:
|
|
50
|
-
base: "[Nombre de fuente], sans-serif"
|
|
51
|
-
heading: "[Nombre de fuente], sans-serif"
|
|
52
|
-
mono: "[Nombre de fuente monoespaciada], monospace"
|
|
53
|
-
fontSize:
|
|
54
|
-
xs: "0.75rem" # 12px
|
|
55
|
-
sm: "0.875rem" # 14px
|
|
56
|
-
base: "1rem" # 16px
|
|
57
|
-
lg: "1.125rem" # 18px
|
|
58
|
-
xl: "1.25rem" # 20px
|
|
59
|
-
2xl: "1.5rem" # 24px
|
|
60
|
-
3xl: "1.875rem" # 30px
|
|
61
|
-
4xl: "2.25rem" # 36px
|
|
62
|
-
fontWeight:
|
|
63
|
-
regular: "400"
|
|
64
|
-
medium: "500"
|
|
65
|
-
semibold: "600"
|
|
66
|
-
bold: "700"
|
|
67
|
-
lineHeight:
|
|
68
|
-
tight: "1.25"
|
|
69
|
-
base: "1.5"
|
|
70
|
-
relaxed: "1.75"
|
|
71
|
-
|
|
72
|
-
rounded:
|
|
73
|
-
none: "0"
|
|
74
|
-
sm: "0.25rem"
|
|
75
|
-
md: "0.375rem"
|
|
76
|
-
lg: "0.5rem"
|
|
77
|
-
xl: "0.75rem"
|
|
78
|
-
full: "9999px"
|
|
79
|
-
|
|
80
|
-
spacing:
|
|
81
|
-
unit: "0.25rem" # Base: 4px
|
|
82
|
-
scale: [0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24]
|
|
83
|
-
|
|
84
|
-
components:
|
|
85
|
-
button:
|
|
86
|
-
variants: [primary, secondary, ghost, danger]
|
|
87
|
-
sizes: [sm, md, lg]
|
|
88
|
-
borderRadius: "md"
|
|
89
|
-
input:
|
|
90
|
-
variants: [default, error, disabled]
|
|
91
|
-
borderRadius: "md"
|
|
92
|
-
height: "2.5rem"
|
|
93
|
-
card:
|
|
94
|
-
borderRadius: "lg"
|
|
95
|
-
shadow: "0 1px 3px rgba(0,0,0,0.1)"
|
|
96
|
-
padding: "1.5rem"
|
|
97
|
-
modal:
|
|
98
|
-
borderRadius: "xl"
|
|
99
|
-
maxWidth: "32rem"
|
|
100
|
-
overlay: "rgba(0,0,0,0.5)"
|
|
101
|
-
table:
|
|
102
|
-
headerBg: "gray-100"
|
|
103
|
-
rowHover: "gray-50"
|
|
104
|
-
borderColor: "gray-300"
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
## Visión general
|
|
110
|
-
|
|
111
|
-
Este documento es la fuente de verdad para las decisiones visuales del proyecto. Todo cambio de UI debe consultar este archivo primero. Si el cambio requiere un nuevo token o componente, actualizar este archivo antes de implementar.
|
|
112
|
-
|
|
113
|
-
Los tokens de diseño viven aquí. Los componentes se implementan en código y **referencian** estos tokens.
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
## Colores
|
|
118
|
-
|
|
119
|
-
### Paleta principal
|
|
120
|
-
|
|
121
|
-
| Token | Valor | Uso |
|
|
122
|
-
|-------|-------|-----|
|
|
123
|
-
| `primary-500` | `#[valor]` | Botones principales, links activos, elementos de acción |
|
|
124
|
-
| `primary-700` | `#[valor]` | Botones en estado hover/active |
|
|
125
|
-
| `secondary-500` | `#[valor]` | Elementos secundarios, iconos, texto complementario |
|
|
126
|
-
|
|
127
|
-
### Colores semánticos
|
|
128
|
-
|
|
129
|
-
| Token | Valor | Cuándo usarlo |
|
|
130
|
-
|-------|-------|---------------|
|
|
131
|
-
| `success` | `#[valor]` | Operaciones exitosas, confirmaciones, estados positivos |
|
|
132
|
-
| `warning` | `#[valor]` | Advertencias, datos que requieren atención sin ser error |
|
|
133
|
-
| `error` | `#[valor]` | Errores, validaciones fallidas, operaciones fallidas |
|
|
134
|
-
| `info` | `#[valor]` | Información contextual, tooltips, ayuda |
|
|
135
|
-
|
|
136
|
-
### Reglas de contraste
|
|
137
|
-
|
|
138
|
-
- Todo texto sobre fondos de color debe cumplir con **WCAG 2.1 nivel AA** (ratio mínimo 4.5:1 para texto normal, 3:1 para texto grande).
|
|
139
|
-
- Verificar contraste con [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/).
|
|
140
|
-
- Nunca usar `gray-300` como color de texto sobre fondo blanco.
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
## Tipografía
|
|
145
|
-
|
|
146
|
-
### Jerarquía
|
|
147
|
-
|
|
148
|
-
| Elemento | Tamaño | Peso | Line-height | Uso |
|
|
149
|
-
|----------|--------|------|-------------|-----|
|
|
150
|
-
| H1 | `2.25rem` (36px) | Bold (700) | Tight (1.25) | Título de página. Una sola vez por página. |
|
|
151
|
-
| H2 | `1.5rem` (24px) | Semibold (600) | Tight (1.25) | Título de sección. |
|
|
152
|
-
| H3 | `1.25rem` (20px) | Semibold (600) | Base (1.5) | Título de subsección o card. |
|
|
153
|
-
| H4 | `1.125rem` (18px) | Medium (500) | Base (1.5) | Títulos menores. |
|
|
154
|
-
| Body | `1rem` (16px) | Regular (400) | Base (1.5) | Texto de párrafo. |
|
|
155
|
-
| Small | `0.875rem` (14px) | Regular (400) | Base (1.5) | Texto secundario, labels, helpers. |
|
|
156
|
-
| Caption | `0.75rem` (12px) | Regular (400) | Base (1.5) | Notas legales, timestamps, metadatos. |
|
|
157
|
-
|
|
158
|
-
### Reglas
|
|
159
|
-
|
|
160
|
-
- Máximo **3 niveles de headings** por página (H1 → H2 → H3).
|
|
161
|
-
- No usar H1 más de una vez por vista.
|
|
162
|
-
- Texto siempre en `base` (16px) como mínimo. No usar `xs` para texto funcional.
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
## Layout y espaciado
|
|
167
|
-
|
|
168
|
-
### Grid
|
|
169
|
-
|
|
170
|
-
- Grid base de **4px**. Todo espaciado debe ser múltiplo de 4.
|
|
171
|
-
- Container máximo: `1280px` centrado.
|
|
172
|
-
- Padding lateral del container: `1.5rem` en mobile, `2rem` en desktop.
|
|
173
|
-
|
|
174
|
-
### Breakpoints
|
|
175
|
-
|
|
176
|
-
| Nombre | Ancho | Dispositivo |
|
|
177
|
-
|--------|-------|-------------|
|
|
178
|
-
| `sm` | `640px` | Mobile horizontal |
|
|
179
|
-
| `md` | `768px` | Tablet vertical |
|
|
180
|
-
| `lg` | `1024px` | Tablet horizontal / laptop |
|
|
181
|
-
| `xl` | `1280px` | Desktop |
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
## Elevación (Shadows)
|
|
186
|
-
|
|
187
|
-
| Nivel | Sombra | Uso |
|
|
188
|
-
|-------|--------|-----|
|
|
189
|
-
| `none` | `none` | Elementos flat, backgrounds |
|
|
190
|
-
| `sm` | `0 1px 2px rgba(0,0,0,0.05)` | Cards en reposo |
|
|
191
|
-
| `md` | `0 4px 6px rgba(0,0,0,0.1)` | Cards con hover, dropdowns |
|
|
192
|
-
| `lg` | `0 10px 15px rgba(0,0,0,0.1)` | Modales, popovers |
|
|
193
|
-
| `xl` | `0 20px 25px rgba(0,0,0,0.15)` | Elementos flotantes destacados |
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
## Componentes
|
|
198
|
-
|
|
199
|
-
### Botones
|
|
200
|
-
|
|
201
|
-
| Variante | Fondo | Texto | Borde |
|
|
202
|
-
|----------|-------|-------|-------|
|
|
203
|
-
| **Primary** | `primary-500` | `white` | Ninguno |
|
|
204
|
-
| **Secondary** | `white` | `gray-700` | `gray-300` |
|
|
205
|
-
| **Ghost** | Transparente | `gray-700` | Ninguno |
|
|
206
|
-
| **Danger** | `error` | `white` | Ninguno |
|
|
207
|
-
|
|
208
|
-
| Tamaño | Height | Padding horizontal | Font size |
|
|
209
|
-
|--------|--------|-------------------|-----------|
|
|
210
|
-
| `sm` | `2rem` | `0.75rem` | `sm` |
|
|
211
|
-
| `md` | `2.5rem` | `1rem` | `base` |
|
|
212
|
-
| `lg` | `3rem` | `1.5rem` | `lg` |
|
|
213
|
-
|
|
214
|
-
### Inputs
|
|
215
|
-
|
|
216
|
-
- Altura: `2.5rem`
|
|
217
|
-
- Border: `1px solid gray-300`
|
|
218
|
-
- Border focus: `2px solid primary-500`
|
|
219
|
-
- Border error: `2px solid error`
|
|
220
|
-
- Placeholder: `gray-500`
|
|
221
|
-
- Mensaje de error debajo del input en color `error`, tamaño `sm`.
|
|
222
|
-
|
|
223
|
-
### Cards
|
|
224
|
-
|
|
225
|
-
- Border radius: `lg`
|
|
226
|
-
- Sombra: `sm` en reposo, `md` en hover
|
|
227
|
-
- Padding interno: `1.5rem`
|
|
228
|
-
- Separación entre cards: `1rem`
|
|
229
|
-
|
|
230
|
-
---
|
|
231
|
-
|
|
232
|
-
## Comportamiento responsive
|
|
233
|
-
|
|
234
|
-
Principio: **Mobile first**. Se diseña para mobile y se escala hacia desktop.
|
|
235
|
-
|
|
236
|
-
1. En mobile (< 768px): una sola columna, navegación colapsada, cards apiladas.
|
|
237
|
-
2. En tablet (768px - 1024px): dos columnas donde aplique, sidebar colapsable.
|
|
238
|
-
3. En desktop (> 1024px): layout completo con sidebar expandida.
|
|
239
|
-
|
|
240
|
-
Regla: ningún elemento debe quedar fuera de viewport o requerir scroll horizontal en ningún breakpoint.
|
|
241
|
-
|
|
242
|
-
---
|
|
243
|
-
|
|
244
|
-
## Cómo actualizar este archivo
|
|
245
|
-
|
|
246
|
-
Cuando se añada o cambie un elemento visual:
|
|
247
|
-
|
|
248
|
-
1. Actualizar el token en el bloque YAML de arriba.
|
|
249
|
-
2. Actualizar la tabla en la sección correspondiente.
|
|
250
|
-
3. Verificar que los componentes que usan ese token sigan teniendo contraste adecuado.
|
|
251
|
-
4. Si el cambio es significativo, crear un ADR explicando el motivo.
|
|
252
|
-
|
|
253
|
-
Para gestión integral del design system, usar la skill `doc-design`.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
created: "2026-05-07"
|
|
3
|
-
updated: "2026-05-07"
|
|
4
|
-
status: deprecated
|
|
5
|
-
type: redirect
|
|
6
|
-
tags: [flujo, diagrama, agentes]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# ⚠️ Este archivo ha sido fusionado
|
|
10
|
-
|
|
11
|
-
Todo el contenido de diagramas de flujo, estructura de agentes y flujos de decisión se ha consolidado en:
|
|
12
|
-
|
|
13
|
-
→ **[`docs/internal/agent-guide.md`](../internal/agent-guide.md)**
|
|
14
|
-
|
|
15
|
-
Este archivo se mantiene como redirect para no romper enlaces existentes.
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
created: "2026-05-07"
|
|
3
|
-
updated: "2026-05-07"
|
|
4
|
-
status: active
|
|
5
|
-
type: explanation
|
|
6
|
-
tags: [architecture, system-design, explanation]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Arquitectura del Sistema
|
|
10
|
-
|
|
11
|
-
> **Propósito**: Este documento explica la arquitectura del sistema — no *cómo* usarlo, sino *por qué* está diseñado así. Para detalles de implementación, consulta el código fuente. Para decisiones concretas, consulta los ADRs en `docs/adr/`.
|
|
12
|
-
|
|
13
|
-
## Visión General
|
|
14
|
-
|
|
15
|
-
[Breve descripción del sistema: qué hace, quién lo usa, cómo se relaciona con otros sistemas]
|
|
16
|
-
|
|
17
|
-
```mermaid
|
|
18
|
-
flowchart TD
|
|
19
|
-
Client["🌐 Cliente<br/>(Browser / App / API Consumer)"]
|
|
20
|
-
CDN["CDN / Load Balancer"]
|
|
21
|
-
FE["Frontend<br/>[Framework]<br/>SSR/SPA · Routing · State"]
|
|
22
|
-
BE["API / Backend<br/>[Framework]<br/>REST API · Auth · Business logic"]
|
|
23
|
-
DB["🗄️ Base de datos<br/>[PostgreSQL]"]
|
|
24
|
-
Cache["⚡ Cache<br/>[Redis/etc]"]
|
|
25
|
-
|
|
26
|
-
Client --> CDN
|
|
27
|
-
CDN --> FE
|
|
28
|
-
CDN --> BE
|
|
29
|
-
BE --> DB
|
|
30
|
-
BE --> Cache
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## Componentes Principales
|
|
34
|
-
|
|
35
|
-
### Frontend
|
|
36
|
-
|
|
37
|
-
- **Framework**: [Ej: React 18 / Next.js 14 / Vue 3]
|
|
38
|
-
- **Renderizado**: [SSR / SSG / SPA / Híbrido]
|
|
39
|
-
- **Estado**: [Local state / Context / Zustand / Redux]
|
|
40
|
-
- **Routing**: [Client-side / Server-side / File-based]
|
|
41
|
-
- **Estilos**: [Tailwind / CSS Modules / Styled Components]
|
|
42
|
-
|
|
43
|
-
> Ver ADRs relevantes en `docs/adr/` para entender por qué se eligió cada tecnología.
|
|
44
|
-
|
|
45
|
-
### Backend / API
|
|
46
|
-
|
|
47
|
-
- **Framework**: [Ej: Express / Fastify / NestJS / Hono]
|
|
48
|
-
- **Arquitectura**: [Monolito / Microservicios / Serverless]
|
|
49
|
-
- **Autenticación**: [JWT / Session / OAuth / API Keys]
|
|
50
|
-
- **Validación**: [Zod / Joi / class-validator]
|
|
51
|
-
|
|
52
|
-
### Base de Datos
|
|
53
|
-
|
|
54
|
-
- **Tipo**: [Relacional / NoSQL / Híbrido]
|
|
55
|
-
- **Motor**: [PostgreSQL / MySQL / MongoDB]
|
|
56
|
-
- **ORM**: [Prisma / TypeORM / Sequelize / Drizzle]
|
|
57
|
-
- **Migraciones**: [Gestionadas por el ORM / Manuales]
|
|
58
|
-
|
|
59
|
-
## Flujos Principales
|
|
60
|
-
|
|
61
|
-
### Flujo de Autenticación
|
|
62
|
-
|
|
63
|
-
```mermaid
|
|
64
|
-
sequenceDiagram
|
|
65
|
-
participant U as Usuario
|
|
66
|
-
participant FE as Frontend
|
|
67
|
-
participant BE as Backend
|
|
68
|
-
participant DB as Base de datos
|
|
69
|
-
|
|
70
|
-
U->>FE: Login (email + password)
|
|
71
|
-
FE->>BE: POST /auth/login
|
|
72
|
-
BE->>DB: Verificar credenciales
|
|
73
|
-
DB-->>BE: Usuario válido
|
|
74
|
-
BE-->>FE: JWT + Refresh Token
|
|
75
|
-
FE->>FE: Almacenar tokens
|
|
76
|
-
U->>FE: Acción protegida
|
|
77
|
-
FE->>BE: Request + Bearer token
|
|
78
|
-
BE->>BE: Verificar JWT
|
|
79
|
-
BE-->>FE: Respuesta
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Flujo de Datos Principal
|
|
83
|
-
|
|
84
|
-
```mermaid
|
|
85
|
-
sequenceDiagram
|
|
86
|
-
participant U as Usuario
|
|
87
|
-
participant FE as Frontend
|
|
88
|
-
participant BE as Backend
|
|
89
|
-
participant DB as Base de datos
|
|
90
|
-
|
|
91
|
-
U->>FE: Acción en UI
|
|
92
|
-
FE->>BE: API Request
|
|
93
|
-
BE->>BE: Validación + Lógica
|
|
94
|
-
BE->>DB: Read/Write
|
|
95
|
-
DB-->>BE: Resultado
|
|
96
|
-
BE-->>FE: Respuesta JSON
|
|
97
|
-
FE->>FE: Actualizar UI
|
|
98
|
-
FE-->>U: Vista actualizada
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
## Decisiones Arquitectónicas Clave
|
|
102
|
-
|
|
103
|
-
Las decisiones técnicas importantes están documentadas como ADRs en `docs/adr/`. Aquí un resumen:
|
|
104
|
-
|
|
105
|
-
| Decisión | ADR | Resumen |
|
|
106
|
-
|----------|-----|---------|
|
|
107
|
-
| [Ej: Base de datos] | `0002-*` | [Por qué se eligió] |
|
|
108
|
-
| [Ej: Framework frontend] | `0003-*` | [Por qué se eligió] |
|
|
109
|
-
| [Ej: Autenticación] | `0004-*` | [Por qué se eligió] |
|
|
110
|
-
|
|
111
|
-
> **Nota**: Para criterios de cuándo crear un ADR, ver [`docs/adr/TEMPLATE.md`](../adr/TEMPLATE.md).
|
|
112
|
-
|
|
113
|
-
## Límites del Sistema
|
|
114
|
-
|
|
115
|
-
### Qué NO hace este sistema
|
|
116
|
-
|
|
117
|
-
- [Limitación 1]
|
|
118
|
-
- [Limitación 2]
|
|
119
|
-
|
|
120
|
-
### Escalabilidad
|
|
121
|
-
|
|
122
|
-
- **Horizontal**: [Cómo escala el backend]
|
|
123
|
-
- **Vertical**: [Límites de recursos]
|
|
124
|
-
- **BD**: [Estrategia de escalado de datos]
|
|
125
|
-
|
|
126
|
-
## Dependencias Externas
|
|
127
|
-
|
|
128
|
-
| Servicio | Propósito | Alternativa si cae |
|
|
129
|
-
|----------|-----------|-------------------|
|
|
130
|
-
| [Servicio 1] | [Qué hace] | [Plan B] |
|
|
131
|
-
| [Servicio 2] | [Qué hace] | [Plan B] |
|
|
132
|
-
|
|
133
|
-
## Diagramas Relacionados
|
|
134
|
-
|
|
135
|
-
- Ver [`docs/internal/agent-guide.md`](../internal/agent-guide.md) para diagramas de flujo de agentes
|
|
136
|
-
- Ver `docs/guides/runbooks/` para procedimientos operativos
|
|
137
|
-
- Ver `docs/reference/infrastructure.md` para detalles de entornos
|
|
138
|
-
- Ver `docs/reference/api.md` para la referencia de la API
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
created: "2025-01-01"
|
|
3
|
-
status: active
|
|
4
|
-
type: guide
|
|
5
|
-
tags: [guía, deployment, deploy, producción, staging]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Guía de Deployment
|
|
9
|
-
|
|
10
|
-
Instrucciones paso a paso para hacer deploy de la aplicación a cada entorno.
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Entornos
|
|
15
|
-
|
|
16
|
-
| Entorno | Propósito | URL | Branch | Auto-deploy |
|
|
17
|
-
|---------|-----------|-----|--------|-------------|
|
|
18
|
-
| **Development** | Desarrollo local | `http://localhost:3000` | Cualquiera | N/A |
|
|
19
|
-
| **Staging** | QA y validación antes de producción | `https://staging.[dominio]` | `develop` o `main` | Sí (push a branch) |
|
|
20
|
-
| **Production** | Usuarios finales | `https://[dominio]` | `main` | Sí (tag / release) |
|
|
21
|
-
|
|
22
|
-
Ver detalles de infraestructura en [`docs/reference/infrastructure.md`](../reference/infrastructure.md).
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Prerrequisitos
|
|
27
|
-
|
|
28
|
-
- Acceso al repositorio con permisos de push a `main`.
|
|
29
|
-
- Acceso a la plataforma de CI/CD (ej. {{TECH_STACK}}, Vercel, AWS Console).
|
|
30
|
-
- Variables de entorno configuradas para el entorno destino (ver [`configuration.md`](../reference/configuration.md)).
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## Deploy a Staging
|
|
35
|
-
|
|
36
|
-
Staging se actualiza automáticamente al hacer push a `[develop / main]`. Si necesitas deploy manual:
|
|
37
|
-
|
|
38
|
-
### Opción A: Deploy automático (recomendado)
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
# Hacer push a la branch que triggera staging
|
|
42
|
-
git push origin [develop / main]
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Verificar en la plataforma de CI/CD que el pipeline pasó correctamente.
|
|
46
|
-
|
|
47
|
-
### Opción B: Deploy manual
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
# 1. Construir la aplicación
|
|
51
|
-
[npm run build]
|
|
52
|
-
|
|
53
|
-
# 2. Deploy manual (según plataforma)
|
|
54
|
-
[comando de deploy específico — ej. vercel --prod, aws deploy push, etc.]
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### Verificación post-deploy
|
|
58
|
-
|
|
59
|
-
Después de que el deploy termine:
|
|
60
|
-
|
|
61
|
-
1. Abrir `https://staging.[dominio]` y verificar que la versión es la correcta.
|
|
62
|
-
2. Ejecutar smoke tests manuales:
|
|
63
|
-
- [ ] Login funciona
|
|
64
|
-
- [ ] Página principal carga
|
|
65
|
-
- [ ] [Flujo principal del negocio] funciona end-to-end
|
|
66
|
-
3. Verificar que no hay errores en consola (browser) ni en logs (servidor).
|
|
67
|
-
4. Verificar que la versión/metadata es correcta (footer, health check, etc.).
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## Deploy a Producción
|
|
72
|
-
|
|
73
|
-
**Importante**: Los deploys a producción se hacen desde `main` **únicamente**. Nunca desde branches de feature.
|
|
74
|
-
|
|
75
|
-
### Pre-deploy checklist
|
|
76
|
-
|
|
77
|
-
Antes de hacer deploy a producción, verificar:
|
|
78
|
-
|
|
79
|
-
- [ ] Todos los tests pasan en CI (último build verde).
|
|
80
|
-
- [ ] Staging fue validado por QA/producto.
|
|
81
|
-
- [ ] No hay migraciones de base de datos pendientes (o están preparadas).
|
|
82
|
-
- [ ] Las variables de entorno de producción están actualizadas.
|
|
83
|
-
- [ ] El CHANGELOG está actualizado.
|
|
84
|
-
- [ ] Se comunicó al equipo el horario del deploy (si aplica).
|
|
85
|
-
|
|
86
|
-
### Proceso
|
|
87
|
-
|
|
88
|
-
#### Opción A: Deploy automático via tag
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
# 1. Crear un tag de release
|
|
92
|
-
git tag -a v[VERSIÓN] -m "Release v[VERSIÓN]"
|
|
93
|
-
|
|
94
|
-
# 2. Pushear el tag
|
|
95
|
-
git push origin v[VERSIÓN]
|
|
96
|
-
|
|
97
|
-
# 3. El pipeline de CI/CD detecta el tag y hace deploy automático
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
#### Opción B: Deploy manual
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
# 1. Asegurarse de estar en main y actualizado
|
|
104
|
-
git checkout main
|
|
105
|
-
git pull origin main
|
|
106
|
-
|
|
107
|
-
# 2. Construir
|
|
108
|
-
[npm run build]
|
|
109
|
-
|
|
110
|
-
# 3. Deploy
|
|
111
|
-
[comando de deploy a producción]
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
### Post-deploy
|
|
115
|
-
|
|
116
|
-
Inmediatamente después del deploy:
|
|
117
|
-
|
|
118
|
-
1. **Verificar la URL de producción**: abrir `https://[dominio]` y confirmar que la versión es la nueva.
|
|
119
|
-
2. **Smoke tests rápidos**:
|
|
120
|
-
- [ ] Página principal carga
|
|
121
|
-
- [ ] Login funciona
|
|
122
|
-
- [ ] [Flujo principal] funciona
|
|
123
|
-
3. **Monitorear logs** durante los primeros 15 minutos:
|
|
124
|
-
- Verificar que no hay errores inusuales.
|
|
125
|
-
- Verificar que el tráfico se ve normal.
|
|
126
|
-
4. **Actualizar CHANGELOG**: mover los cambios de "Sin publicar" a la sección de la versión.
|
|
127
|
-
5. **Comunicar**: notificar al equipo que el deploy fue exitoso (Slack / Teams / email).
|
|
128
|
-
|
|
129
|
-
### Rollback
|
|
130
|
-
|
|
131
|
-
Si algo sale mal después del deploy:
|
|
132
|
-
|
|
133
|
-
```bash
|
|
134
|
-
# 1. Identificar la versión anterior (la que funcionaba)
|
|
135
|
-
git log --oneline -5
|
|
136
|
-
|
|
137
|
-
# 2. Re-deployear la versión anterior
|
|
138
|
-
git checkout v[VERSIÓN_ANTERIOR]
|
|
139
|
-
[comando de deploy a producción]
|
|
140
|
-
|
|
141
|
-
# 3. Alternativa: revertir el merge commit
|
|
142
|
-
git revert -m 1 [HASH_DEL_MERGE]
|
|
143
|
-
git push origin main
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## Migraciones de base de datos
|
|
149
|
-
|
|
150
|
-
Las migraciones se ejecutan como parte del pipeline de deploy, pero si necesitaras ejecutarlas manualmente:
|
|
151
|
-
|
|
152
|
-
```bash
|
|
153
|
-
# Ver el estado de las migraciones
|
|
154
|
-
[comando de status — ej. npm run db:status]
|
|
155
|
-
|
|
156
|
-
# Ejecutar migraciones pendientes
|
|
157
|
-
[comando de migración — ej. npm run db:migrate]
|
|
158
|
-
|
|
159
|
-
# Rollback de la última migración (solo en emergencias)
|
|
160
|
-
[comando de rollback — ej. npm run db:rollback]
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
**Regla**: Las migraciones deben ser **siempre hacia adelante** (additive). No modificar columnas existentes en breaking ways. Crear nuevas columnas y migrar datos gradualmente.
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## Variables de entorno por entorno
|
|
168
|
-
|
|
169
|
-
| Variable | Development | Staging | Production |
|
|
170
|
-
|----------|-------------|---------|------------|
|
|
171
|
-
| `APP_ENV` | `development` | `staging` | `production` |
|
|
172
|
-
| `DATABASE_URL` | Local | Staging DB | Production DB |
|
|
173
|
-
| `API_KEY_[SERVICIO]` | Key de testing | Key de staging | Key de producción |
|
|
174
|
-
| `LOG_LEVEL` | `debug` | `info` | `warn` |
|
|
175
|
-
|
|
176
|
-
Ver la referencia completa en [`configuration.md`](../reference/configuration.md).
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## Troubleshooting de deploys
|
|
181
|
-
|
|
182
|
-
| Problema | Causa probable | Solución |
|
|
183
|
-
|----------|---------------|----------|
|
|
184
|
-
| Build falla en CI pero pasa local | Diferencia de versiones de Node/npm | Verificar que `.nvmrc` o `engines` en `package.json` coincida con CI |
|
|
185
|
-
| Deploy exitoso pero página en blanco | Variables de entorno faltantes | Verificar todas las vars requeridas en el entorno |
|
|
186
|
-
| Migración falla | Cambio breaking en schema | Ejecutar rollback y corregir la migración |
|
|
187
|
-
| Timeout en deploy | Recursos insuficientes | Verificar logs del CI/CD y recursos del servidor |
|
|
188
|
-
|
|
189
|
-
Más soluciones en [`troubleshooting.md`](troubleshooting.md).
|