# Constitution: [Nombre del Proyecto/Producto]

> **Propósito:** Documentar las reglas, restricciones y patrones que el equipo debe seguir. Esta es la "constitución" del proyecto. No la escribes tú como PM, pero debes conocerla y hacerla respetar.
> **Cuándo usarlo:** Al iniciar un proyecto nuevo, o cuando un equipo existente repite discusiones que ya deberían estar zanjadas.
> **Cómo usarlo:** Copia este archivo a la raíz del repo como `CONSTITUTION.md`, complétalo en una sesión con el equipo técnico y revísalo en la fecha programada — no más de 2 páginas.

## Metadatos

- **Versión:** 1.0
- **Última revisión:** [YYYY-MM-DD]
- **Próxima revisión programada:** [YYYY-MM-DD]
- **Dueño:** [Persona o rol accountable de la constitution]

---

## Stack Aprobado

> Lenguajes, frameworks y servicios que están permitidos. Cualquier tecnología fuera de esta lista requiere aprobación del equipo de arquitectura.

### Frontend

| Tecnología | Versión | ¿Obligatorio? | Notas |
|------------|---------|---------------|-------|
| [Framework/Librería] | [Versión] | Sí / No | [Contexto] |

### Backend

| Tecnología | Versión | ¿Obligatorio? | Notas |
|------------|---------|---------------|-------|
| [Lenguaje/Framework] | [Versión] | Sí / No | [Contexto] |

### Base de Datos

| Tecnología | Versión | Propósito |
|------------|---------|-----------|
| [BD Principal] | [Versión] | [Datos transaccionales] |
| [BD Secundaria] | [Versión] | [Cache / Analytics] |

### Infraestructura / Cloud

| Proveedor | Servicio | Propósito |
|-----------|----------|-----------|
| [GCP/AWS/Azure] | [Servicio] | [Propósito] |

---

## Reglas de Arquitectura

> Patrones que no se pueden romper sin una exención firmada por el equipo de arquitectura.

| ID | Regla | Justificación | ¿Excepción posible? |
|----|-------|---------------|---------------------|
| ARQ-001 | [Descripción de la regla] | [Por qué existe] | Sí / No / Bajo aprobación |
| ARQ-002 | [Descripción de la regla] | [Por qué existe] | Sí / No / Bajo aprobación |
| ARQ-003 | [Descripción de la regla] | [Por qué existe] | Sí / No / Bajo aprobación |

---

## Estándares de Calidad

> Umbrales mínimos que todo código debe cumplir.

### Cobertura de Tests

| Tipo | Cobertura mínima | Notas |
|------|------------------|-------|
| Unit tests | [X]% | [Condiciones o exclusiones] |
| Integration tests | [X]% | [Condiciones o exclusiones] |
| E2E tests | [X]% | [Condiciones o exclusiones] |

### Rendimiento

| Métrica | Límite | Condición |
|---------|--------|-----------|
| Tiempo de respuesta (p99) | [X]ms | [Endpoint o tipo de operación] |
| Tiempo de carga de página | [X]s | [Tipo de página] |
| Throughput máximo | [X] req/s | [Condición de hardware] |
| Uptime | [X]% | [Ventana de medición] |

### Accesibilidad

| Estándar | Nivel requerido | Herramienta de verificación |
|----------|-----------------|----------------------------|
| WCAG | [A / AA / AAA] | [Herramienta] |

---

## Reglas de Seguridad

> Límites que no se pueden cruzar sin aprobación del equipo de seguridad.

- [ ] No almacenar contraseñas en texto plano o con hash reversible
- [ ] No exponer API keys, tokens o secrets en código fuente
- [ ] No compartir datos de usuarios entre entornos (producción ↔ desarrollo)
- [ ] No loggear información personal identificable (PII) sin ofuscación
- [ ] Todas las APIs públicas deben tener rate limiting y autenticación
- [ ] Las dependencias deben escanearse por vulnerabilidades antes de cada release

---

## Proceso de Excepción

> Cómo pedir permiso para romper una regla de esta constitution.

1. Crear un ADR (Architecture Decision Record) documentando por qué la excepción es necesaria.
2. Enviar el ADR al dueño de la constitution para revisión.
3. Si la excepción es aprobada, actualizar este documento con la fecha de expiración de la excepción.
4. Las excepciones expiran automáticamente en 90 días a menos que se renueven explícitamente.

---

## Firmas

| Rol | Nombre | Fecha |
|-----|--------|-------|
| [Arquitecto] | [Nombre] | [YYYY-MM-DD] |
| [PM / Product Owner] | [Nombre] | [YYYY-MM-DD] |
| [Seguridad] | [Nombre] | [YYYY-MM-DD] |
