sdd-es 2.0.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/.claude/settings.json +51 -0
- package/.claude-plugin/marketplace.json +31 -0
- package/.claude-plugin/plugin.json +97 -0
- package/README.md +332 -0
- package/agents/arquitecto.md +148 -0
- package/agents/asesor-datos.md +163 -0
- package/agents/critico.md +142 -0
- package/agents/desarrollador-backend.md +242 -0
- package/agents/desarrollador-frontend.md +120 -0
- package/agents/disenador-api.md +108 -0
- package/agents/documentador.md +177 -0
- package/agents/investigador.md +174 -0
- package/agents/operaciones.md +105 -0
- package/agents/revisor.md +153 -0
- package/agents/seguridad.md +216 -0
- package/agents/tester.md +286 -0
- package/claude-hooks/post-write-conventions.js +412 -0
- package/claude-hooks/pre-tool-guard.js +159 -0
- package/cli/index.js +401 -0
- package/commands/sdd.aclarar.md +200 -0
- package/commands/sdd.analizar.md +241 -0
- package/commands/sdd.ayuda.md +227 -0
- package/commands/sdd.canary.md +60 -0
- package/commands/sdd.checklist.md +174 -0
- package/commands/sdd.comprimir.md +166 -0
- package/commands/sdd.configurar.md +195 -0
- package/commands/sdd.constitucion.md +343 -0
- package/commands/sdd.crear-app.md +168 -0
- package/commands/sdd.crear-mcp.md +174 -0
- package/commands/sdd.descubrir.md +269 -0
- package/commands/sdd.desplegar.md +155 -0
- package/commands/sdd.especificar.md +302 -0
- package/commands/sdd.estado.md +124 -0
- package/commands/sdd.glosario.md +108 -0
- package/commands/sdd.implementar.md +377 -0
- package/commands/sdd.importar.md +91 -0
- package/commands/sdd.mapear.md +120 -0
- package/commands/sdd.md +119 -0
- package/commands/sdd.planificar.md +372 -0
- package/commands/sdd.qa.md +108 -0
- package/commands/sdd.release.md +253 -0
- package/commands/sdd.retro.md +82 -0
- package/commands/sdd.snapshot.md +122 -0
- package/commands/sdd.tareas.md +300 -0
- package/commands/sdd.verificar.md +239 -0
- package/configuracion-ejemplo/hooks-ejemplo/antes_cada_tarea.sh +18 -0
- package/configuracion-ejemplo/hooks-ejemplo/antes_implementar.sh +45 -0
- package/configuracion-ejemplo/hooks-ejemplo/despues_especificar.sh +14 -0
- package/configuracion-ejemplo/hooks-ejemplo/despues_implementar.sh +36 -0
- package/configuracion-ejemplo/hooks-ejemplo/despues_planificar.sh +19 -0
- package/configuracion-ejemplo/hooks-ejemplo/guardia-seguridad.sh +367 -0
- package/configuracion-ejemplo/sdd.config.yaml +310 -0
- package/docs/AGENTES.md +74 -0
- package/docs/COMPRESION.md +155 -0
- package/docs/EJEMPLO-PRACTICA.md +383 -0
- package/docs/EJEMPLOS.md +212 -0
- package/docs/FABRICA.md +185 -0
- package/docs/FILOSOFIA.md +61 -0
- package/docs/FLUJO.md +149 -0
- package/docs/INICIO-RAPIDO.md +116 -0
- package/docs/MAPAS.md +113 -0
- package/docs/MODELOS.md +103 -0
- package/docs/PERSONALIZACION.md +152 -0
- package/instalar.ps1 +39 -0
- package/instalar.sh +22 -0
- package/mcp-figma/README.md +158 -0
- package/mcp-figma/package.json +7 -0
- package/mcp-figma/src/component-generator.js +162 -0
- package/mcp-figma/src/design-system-analyzer.js +247 -0
- package/mcp-figma/src/figma-client.js +75 -0
- package/mcp-figma/src/index.js +114 -0
- package/mcp-figma/src/mcp.js +97 -0
- package/mcp-figma/src/style-mapper.js +85 -0
- package/package.json +50 -0
- package/plantillas/analisis.md +57 -0
- package/plantillas/checklist-especificacion.md +66 -0
- package/plantillas/constitucion.md +104 -0
- package/plantillas/decision-arquitectura.md +39 -0
- package/plantillas/dependencias-mapa.md +89 -0
- package/plantillas/especificacion.md +108 -0
- package/plantillas/estructura-mapa.md +40 -0
- package/plantillas/glosario.md +22 -0
- package/plantillas/index-especificaciones.md +15 -0
- package/plantillas/mcp-server.md +147 -0
- package/plantillas/plan.md +152 -0
- package/plantillas/simbolos-mapa.md +57 -0
- package/plantillas/snapshot.md +54 -0
- package/plantillas/tareas.md +72 -0
- package/presets/enterprise.yaml +69 -0
- package/presets/lean.yaml +63 -0
- package/presets/startup.yaml +67 -0
- package/skills/compresion-tokens.md +264 -0
- package/skills/constitucion-constraint.md +78 -0
- package/skills/deteccion-stack.md +175 -0
- package/skills/enrutador-agentes.md +69 -0
- package/skills/gestion-estado.md +114 -0
- package/skills/indexador.md +199 -0
- package/skills/modo-guiado/SKILL.md +78 -0
- package/skills/orquestacion-ptc/SKILL.md +96 -0
- package/skills/validacion-spec.md +52 -0
- package/skills/verificador-implementacion.md +71 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
generado_por: /sdd.mapear
|
|
3
|
+
fecha: [FECHA]
|
|
4
|
+
proyecto: [NOMBRE_PROYECTO]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Mapa de Estructura del Proyecto
|
|
8
|
+
|
|
9
|
+
Árbol de directorios con descripción de cada archivo. Generado automáticamente por `/sdd.mapear`.
|
|
10
|
+
|
|
11
|
+
## Estructura
|
|
12
|
+
|
|
13
|
+
[ÁRBOL AQUÍ]
|
|
14
|
+
|
|
15
|
+
## Cómo se generó
|
|
16
|
+
|
|
17
|
+
- Comando: `/sdd.mapear`
|
|
18
|
+
- Lenguajes detectados: [LISTA]
|
|
19
|
+
- Archivos indexados: [N]
|
|
20
|
+
- Última actualización: [FECHA Y HORA]
|
|
21
|
+
|
|
22
|
+
## Editabilidad
|
|
23
|
+
|
|
24
|
+
Este archivo se regenera con `/sdd.mapear`. Para editar descripciones:
|
|
25
|
+
|
|
26
|
+
1. Edita la descripción directamente en este archivo
|
|
27
|
+
2. La próxima ejecución de `/sdd.mapear` respetará tus cambios
|
|
28
|
+
3. Backup automático en `estructura-mapa.md.backup`
|
|
29
|
+
|
|
30
|
+
## Para ignorar directorios
|
|
31
|
+
|
|
32
|
+
Edita `.sdd/.mapeoignore` (sintaxis como `.gitignore`):
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
node_modules/
|
|
36
|
+
dist/
|
|
37
|
+
.git/
|
|
38
|
+
vendor/
|
|
39
|
+
__pycache__/
|
|
40
|
+
```
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Glosario del Dominio
|
|
2
|
+
|
|
3
|
+
> Términos del dominio del proyecto. Una definición precisa por término.
|
|
4
|
+
> Editar con: `/sdd.glosario`
|
|
5
|
+
|
|
6
|
+
## Términos
|
|
7
|
+
|
|
8
|
+
### [Término]
|
|
9
|
+
|
|
10
|
+
**Definición:** [una frase precisa]
|
|
11
|
+
**Categoría:** [negocio | técnico | usuario | proceso]
|
|
12
|
+
**Sinónimos a evitar:**
|
|
13
|
+
- ~~[sinónimo]~~ (usar "[Término]")
|
|
14
|
+
|
|
15
|
+
**Ejemplos:**
|
|
16
|
+
- [ejemplo 1]
|
|
17
|
+
- [ejemplo 2]
|
|
18
|
+
|
|
19
|
+
**Referenciado en:**
|
|
20
|
+
- [SPEC_ID_1], [SPEC_ID_2]
|
|
21
|
+
|
|
22
|
+
**Última actualización:** [FECHA]
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Índice de Especificaciones
|
|
2
|
+
|
|
3
|
+
> Registro de todas las especificaciones del proyecto, ordenado cronológicamente.
|
|
4
|
+
|
|
5
|
+
## Estadísticas
|
|
6
|
+
- Total: [N]
|
|
7
|
+
- Completadas: [N]
|
|
8
|
+
- En progreso: [N]
|
|
9
|
+
- En borrador: [N]
|
|
10
|
+
|
|
11
|
+
## Especificaciones
|
|
12
|
+
|
|
13
|
+
| ID | Título | Estado | Tamaño | Spec | Plan | Tareas | Verif | Fecha |
|
|
14
|
+
|----|--------|--------|--------|------|------|--------|-------|-------|
|
|
15
|
+
| [SPEC_ID] | [título] | [estado] | [tam] | ✅ | ✅ | ✅ | ✅ | [fecha] |
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Plantilla: Servidor MCP
|
|
2
|
+
|
|
3
|
+
Esqueleto base para el generador `/sdd.crear-mcp`. El agente `desarrollador-backend` rellena los `TODO` con el código real de cada tool.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## `package.json`
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"name": "mcp-NOMBRE",
|
|
12
|
+
"version": "1.0.0",
|
|
13
|
+
"description": "DESCRIPCION_UNA_LINEA",
|
|
14
|
+
"type": "module",
|
|
15
|
+
"bin": {
|
|
16
|
+
"mcp-NOMBRE": "./src/index.js"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"start": "node src/index.js",
|
|
20
|
+
"test": "node --test tests/*.test.js"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
24
|
+
"zod": "^3.22.0"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=18.0.0"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## `src/index.js`
|
|
35
|
+
|
|
36
|
+
```javascript
|
|
37
|
+
#!/usr/bin/env node
|
|
38
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
39
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
40
|
+
import { z } from "zod";
|
|
41
|
+
|
|
42
|
+
const server = new McpServer({
|
|
43
|
+
name: "mcp-NOMBRE",
|
|
44
|
+
version: "1.0.0",
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// ── TOOL 1 ──────────────────────────────────────────────────────────────────
|
|
48
|
+
// TODO: reemplazar con la tool real (una por CA)
|
|
49
|
+
server.tool(
|
|
50
|
+
"nombre_tool_1",
|
|
51
|
+
"Descripción para el modelo: cuándo usar esta tool y qué hace",
|
|
52
|
+
{
|
|
53
|
+
// Parámetros de entrada (Zod schema)
|
|
54
|
+
entrada: z.string().describe("qué es este parámetro")
|
|
55
|
+
},
|
|
56
|
+
async ({ entrada }) => {
|
|
57
|
+
// TODO: lógica de la tool
|
|
58
|
+
const resultado = `procesado: ${entrada}`;
|
|
59
|
+
return {
|
|
60
|
+
content: [{ type: "text", text: resultado }]
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
// ── TOOL 2 (copiar bloque de arriba por cada CA adicional) ──────────────────
|
|
66
|
+
// server.tool("nombre_tool_2", ...)
|
|
67
|
+
|
|
68
|
+
// ── ARRANQUE ─────────────────────────────────────────────────────────────────
|
|
69
|
+
const transport = new StdioServerTransport();
|
|
70
|
+
await server.connect(transport);
|
|
71
|
+
// El servidor queda escuchando por stdin — no imprimir nada a stdout aquí
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## `.env.example`
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Variables de entorno requeridas por este MCP
|
|
80
|
+
# Copia este archivo como .env y rellena los valores
|
|
81
|
+
|
|
82
|
+
# TODO: añadir las variables que necesite la tool (API keys, rutas, etc.)
|
|
83
|
+
# EJEMPLO_API_KEY=tu_clave_aqui
|
|
84
|
+
# EJEMPLO_BASE_URL=https://api.ejemplo.com
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## `README.md` (estructura que genera `/sdd.crear-mcp`)
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
# mcp-NOMBRE
|
|
93
|
+
|
|
94
|
+
DESCRIPCION_UNA_LINEA
|
|
95
|
+
|
|
96
|
+
## Qué hace
|
|
97
|
+
|
|
98
|
+
| Tool | Qué hace | Parámetros |
|
|
99
|
+
|------|----------|-----------|
|
|
100
|
+
| nombre_tool_1 | [descripción] | `entrada` (texto) |
|
|
101
|
+
|
|
102
|
+
## Instalación en Claude Code
|
|
103
|
+
|
|
104
|
+
1. Clona o descarga este proyecto.
|
|
105
|
+
2. Ejecuta en tu terminal:
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
claude mcp add NOMBRE -- node "/ruta/a/mcp-NOMBRE/src/index.js"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
3. Reinicia Claude Code.
|
|
112
|
+
|
|
113
|
+
## Variables de entorno
|
|
114
|
+
|
|
115
|
+
Copia `.env.example` como `.env` y rellena los valores antes de instalar.
|
|
116
|
+
|
|
117
|
+
## Uso
|
|
118
|
+
|
|
119
|
+
Dile a Claude: "[ejemplo de frase en lenguaje natural que activa la tool]"
|
|
120
|
+
|
|
121
|
+
## Requisitos
|
|
122
|
+
|
|
123
|
+
- Node.js 18 o superior
|
|
124
|
+
- Claude Code
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## `tests/mcp.test.js` (estructura base)
|
|
130
|
+
|
|
131
|
+
```javascript
|
|
132
|
+
import { test } from "node:test";
|
|
133
|
+
import assert from "node:assert/strict";
|
|
134
|
+
|
|
135
|
+
// Prueba de integración mínima: el módulo carga sin errores de sintaxis
|
|
136
|
+
test("src/index.js carga sin errores", async () => {
|
|
137
|
+
// Verificar que el archivo existe y tiene contenido
|
|
138
|
+
const { readFileSync } = await import("node:fs");
|
|
139
|
+
const src = readFileSync("src/index.js", "utf8");
|
|
140
|
+
assert.ok(src.includes("McpServer"), "debe importar McpServer");
|
|
141
|
+
assert.ok(src.includes("server.tool("), "debe declarar al menos una tool");
|
|
142
|
+
assert.ok(src.includes("StdioServerTransport"), "debe usar stdio transport");
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// TODO: añadir un test por tool que simule la entrada y verifique la salida
|
|
146
|
+
// test("nombre_tool_1: procesa entrada correctamente", async () => { ... })
|
|
147
|
+
```
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
spec_id: [SPEC_ID]
|
|
3
|
+
plan_id: [SPEC_ID]-plan
|
|
4
|
+
estado: pendiente_aprobacion # pendiente_aprobacion | aprobado | obsoleto
|
|
5
|
+
creado: [FECHA]
|
|
6
|
+
constitucion_version: [X.Y.Z]
|
|
7
|
+
agentes_participantes: []
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Plan Técnico: [TITULO_SPEC]
|
|
11
|
+
|
|
12
|
+
## 1. Resumen Ejecutivo
|
|
13
|
+
|
|
14
|
+
[3-5 frases. Qué se va a construir técnicamente, con qué tecnología, en qué archivos principales.]
|
|
15
|
+
|
|
16
|
+
## 2. Verificación de Constitución (Constitution Check)
|
|
17
|
+
|
|
18
|
+
| Principio | Cumple | Justificación |
|
|
19
|
+
|-----------|--------|--------------|
|
|
20
|
+
| Principio I | ✅/❌/⚠️ | [explicación] |
|
|
21
|
+
| Principio II | ✅ | [explicación] |
|
|
22
|
+
|
|
23
|
+
> Si hay ❌ o ⚠️: documentar en sección "Complejidad Justificada" o detener el plan.
|
|
24
|
+
|
|
25
|
+
## 3. Enfoque Técnico
|
|
26
|
+
|
|
27
|
+
[2-4 párrafos del enfoque elegido y por qué.]
|
|
28
|
+
|
|
29
|
+
## 4. Decisiones Técnicas
|
|
30
|
+
|
|
31
|
+
| # | Decisión | Opción elegida | Alternativas descartadas | Razón |
|
|
32
|
+
|---|----------|---------------|--------------------------|-------|
|
|
33
|
+
| 1 | [decisión] | [opción] | [otras] | [razón concreta] |
|
|
34
|
+
|
|
35
|
+
> Decisiones no triviales también se documentan como ADR en `.sdd/arquitectura/`.
|
|
36
|
+
|
|
37
|
+
## 5. Estructura de Carpetas Afectada
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
[Diagrama de árbol mostrando dónde van los archivos nuevos]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 6. Archivos Afectados
|
|
44
|
+
|
|
45
|
+
| Acción | Ruta | Propósito | Agente responsable |
|
|
46
|
+
|--------|------|-----------|--------------------|
|
|
47
|
+
| CREAR | `ruta/archivo.ext` | [qué hace] | desarrollador-backend |
|
|
48
|
+
| MODIFICAR | `ruta/existente.ext` | [qué cambia] | desarrollador-backend |
|
|
49
|
+
| ELIMINAR | `ruta/obsoleto.ext` | [por qué] | — |
|
|
50
|
+
|
|
51
|
+
## 7. Modelo de Datos
|
|
52
|
+
|
|
53
|
+
### Entidades nuevas
|
|
54
|
+
```[lenguaje]
|
|
55
|
+
// Tipos / interfaces / schemas
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Cambios en entidades existentes
|
|
59
|
+
[Migraciones requeridas]
|
|
60
|
+
|
|
61
|
+
### Queries críticas
|
|
62
|
+
[SQL/NoSQL queries importantes con justificación de índices]
|
|
63
|
+
|
|
64
|
+
## 8. Contratos de API
|
|
65
|
+
|
|
66
|
+
### Endpoints / Operaciones nuevas
|
|
67
|
+
```yaml
|
|
68
|
+
# OpenAPI / GraphQL schema / proto / etc
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Cambios en endpoints existentes
|
|
72
|
+
[Breaking? Si sí, plan de migración]
|
|
73
|
+
|
|
74
|
+
### Eventos / Mensajes (si aplica)
|
|
75
|
+
[Topics, formatos, idempotencia]
|
|
76
|
+
|
|
77
|
+
## 9. Estrategia de Tests
|
|
78
|
+
|
|
79
|
+
### Tests unitarios
|
|
80
|
+
- Qué unidades se testean
|
|
81
|
+
- Mocks necesarios
|
|
82
|
+
|
|
83
|
+
### Tests de integración
|
|
84
|
+
- Qué integraciones se prueban
|
|
85
|
+
|
|
86
|
+
### Tests E2E (si aplica)
|
|
87
|
+
- Flujos críticos a cubrir
|
|
88
|
+
|
|
89
|
+
## 10. Dependencias Nuevas
|
|
90
|
+
|
|
91
|
+
| Paquete | Versión | Justificación | Alternativas |
|
|
92
|
+
|---------|---------|--------------|-------------|
|
|
93
|
+
| [paquete] | [versión] | [por qué] | [otras] |
|
|
94
|
+
|
|
95
|
+
## 11. Riesgos Técnicos
|
|
96
|
+
|
|
97
|
+
| # | Riesgo | Probabilidad | Impacto | Mitigación |
|
|
98
|
+
|---|--------|--------------|---------|-----------|
|
|
99
|
+
| 1 | [riesgo] | A/M/B | A/M/B | [acción] |
|
|
100
|
+
|
|
101
|
+
## 12. Plan de Implementación en Fases
|
|
102
|
+
|
|
103
|
+
### Fase A: Fundamentos
|
|
104
|
+
[Tipos, interfaces, schemas, migraciones]
|
|
105
|
+
|
|
106
|
+
### Fase B: Tests primero (si TDD)
|
|
107
|
+
|
|
108
|
+
### Fase C: Capa de datos
|
|
109
|
+
|
|
110
|
+
### Fase D: Lógica de negocio
|
|
111
|
+
|
|
112
|
+
### Fase E: Interfaz / API
|
|
113
|
+
|
|
114
|
+
### Fase F: UI (si aplica)
|
|
115
|
+
|
|
116
|
+
### Fase G: Integración
|
|
117
|
+
|
|
118
|
+
### Fase H: Verificación
|
|
119
|
+
|
|
120
|
+
## 13. Cambios Breaking
|
|
121
|
+
|
|
122
|
+
[Lista de cambios que rompen compatibilidad. Vacío si ninguno.]
|
|
123
|
+
|
|
124
|
+
## 14. Métricas y Observabilidad
|
|
125
|
+
|
|
126
|
+
[Qué loguear / métricas a exponer / alarmas]
|
|
127
|
+
|
|
128
|
+
## 15. Complejidad Justificada
|
|
129
|
+
|
|
130
|
+
[Solo si hay desviaciones de la constitución que se justifican.]
|
|
131
|
+
|
|
132
|
+
## 16. Estimación
|
|
133
|
+
|
|
134
|
+
- Complejidad global: [Baja / Media / Alta]
|
|
135
|
+
- Tareas estimadas: [N]
|
|
136
|
+
|
|
137
|
+
## 17. Aportes por Agente
|
|
138
|
+
|
|
139
|
+
### Arquitecto
|
|
140
|
+
[Decisiones de alto nivel]
|
|
141
|
+
|
|
142
|
+
### Diseñador de API
|
|
143
|
+
[Diseño de contratos]
|
|
144
|
+
|
|
145
|
+
### Asesor de datos
|
|
146
|
+
[Decisiones de BD]
|
|
147
|
+
|
|
148
|
+
### Crítico
|
|
149
|
+
[Riesgos identificados]
|
|
150
|
+
|
|
151
|
+
### Seguridad
|
|
152
|
+
[Consideraciones]
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
generado_por: /sdd.mapear
|
|
3
|
+
fecha: [FECHA]
|
|
4
|
+
proyecto: [NOMBRE_PROYECTO]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Mapa de Símbolos Públicos
|
|
8
|
+
|
|
9
|
+
Funciones, clases, tipos e interfaces exportadas por cada archivo.
|
|
10
|
+
|
|
11
|
+
Generado automáticamente por `/sdd.mapear`.
|
|
12
|
+
|
|
13
|
+
## Convención
|
|
14
|
+
|
|
15
|
+
- **fn** = función
|
|
16
|
+
- **class** = clase
|
|
17
|
+
- **type** = tipo TypeScript
|
|
18
|
+
- **interface** = interfaz TypeScript
|
|
19
|
+
- **enum** = enumeración
|
|
20
|
+
- **const** = constante exportada
|
|
21
|
+
|
|
22
|
+
## Archivos
|
|
23
|
+
|
|
24
|
+
[SÍMBOLOS POR ARCHIVO AQUÍ]
|
|
25
|
+
|
|
26
|
+
Ejemplo:
|
|
27
|
+
|
|
28
|
+
```markdown
|
|
29
|
+
## src/auth/login.service.ts
|
|
30
|
+
|
|
31
|
+
- **fn** autenticarUsuario(email: string, password: string): Promise<Session>
|
|
32
|
+
Autentica usuario con email y password. Lanza InvalidCredentialsError si fallan.
|
|
33
|
+
|
|
34
|
+
- **fn** cerrarSesion(sessionId: string): Promise<void>
|
|
35
|
+
Cierra sesión borrando el token.
|
|
36
|
+
|
|
37
|
+
- **type** AuthResult
|
|
38
|
+
```typescript
|
|
39
|
+
{ session: Session, user: User }
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## src/users/user.service.ts
|
|
43
|
+
|
|
44
|
+
- **fn** crearUsuario(datos: CreateUserDTO): Promise<User>
|
|
45
|
+
Crea nuevo usuario. Valida email único.
|
|
46
|
+
|
|
47
|
+
- **fn** obtenerPorId(id: string): Promise<User>
|
|
48
|
+
Obtiene usuario por ID. Lanza UserNotFoundError si no existe.
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Cómo usarlo
|
|
52
|
+
|
|
53
|
+
Durante `/sdd.implementar`, antes de modificar archivo X:
|
|
54
|
+
|
|
55
|
+
1. Claude consulta este mapa: ¿qué exporta X?
|
|
56
|
+
2. Si necesita más detalle, lee el archivo
|
|
57
|
+
3. Típicamente el mapa le alcanza
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# SNAPSHOT del Producto: [NOMBRE_PROYECTO]
|
|
2
|
+
|
|
3
|
+
> Última actualización: [FECHA]
|
|
4
|
+
> Versión de constitución: v[X.Y.Z]
|
|
5
|
+
> Última spec aplicada: [SPEC_ID]
|
|
6
|
+
|
|
7
|
+
## ¿Qué es este producto?
|
|
8
|
+
|
|
9
|
+
[2-4 frases ejecutivas]
|
|
10
|
+
|
|
11
|
+
## ¿Para quién?
|
|
12
|
+
|
|
13
|
+
[Actores/usuarios con su necesidad]
|
|
14
|
+
|
|
15
|
+
## Funcionalidades Activas
|
|
16
|
+
|
|
17
|
+
### [Categoría 1]
|
|
18
|
+
- ✅ **[Funcionalidad]** — [descripción]. *Spec: [ID]*
|
|
19
|
+
|
|
20
|
+
### [Categoría 2]
|
|
21
|
+
- ✅ **[...]**
|
|
22
|
+
|
|
23
|
+
## Arquitectura de Alto Nivel
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
┌────────┐ ┌────────┐ ┌──────┐
|
|
27
|
+
│Frontend│───>│Backend │───>│ BD │
|
|
28
|
+
└────────┘ └────────┘ └──────┘
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Integraciones
|
|
32
|
+
|
|
33
|
+
| Sistema | Propósito | Estado |
|
|
34
|
+
|---------|-----------|--------|
|
|
35
|
+
|
|
36
|
+
## Datos manejados
|
|
37
|
+
|
|
38
|
+
[Tipos de datos principales]
|
|
39
|
+
|
|
40
|
+
## Términos del dominio (resumen)
|
|
41
|
+
> Glosario completo: `.sdd/dominio/glosario.md`
|
|
42
|
+
|
|
43
|
+
## Especificaciones aplicadas (últimas 10)
|
|
44
|
+
|
|
45
|
+
| ID | Título | Fecha |
|
|
46
|
+
|----|--------|-------|
|
|
47
|
+
|
|
48
|
+
## Roadmap
|
|
49
|
+
|
|
50
|
+
[Specs en borrador o pendientes]
|
|
51
|
+
|
|
52
|
+
## Métricas del producto
|
|
53
|
+
|
|
54
|
+
[Si la constitución establece métricas]
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
spec_id: [SPEC_ID]
|
|
3
|
+
total_tareas: 0
|
|
4
|
+
estado: pendiente
|
|
5
|
+
generado: [FECHA]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Tareas: [TITULO_SPEC]
|
|
9
|
+
|
|
10
|
+
## Progreso
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
[░░░░░░░░░░░░░░░░░░░░] 0% (0/[N])
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
| Total | Pendientes | En progreso | Completadas | Bloqueadas |
|
|
17
|
+
|-------|------------|-------------|-------------|------------|
|
|
18
|
+
| [N] | [N] | 0 | 0 | 0 |
|
|
19
|
+
|
|
20
|
+
## Leyenda de estados
|
|
21
|
+
- ⬜ pendiente
|
|
22
|
+
- 🔧 en_progreso
|
|
23
|
+
- ✅ completada
|
|
24
|
+
- ❌ bloqueada
|
|
25
|
+
- ⏭️ omitida
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## T001 — [Nombre descriptivo]
|
|
30
|
+
|
|
31
|
+
**Fase:** A (Fundamentos)
|
|
32
|
+
**Agente:** [agente]
|
|
33
|
+
**Modelo:** [modelo] (según config)
|
|
34
|
+
**Archivos:** `ruta/nuevo.ext` (CREAR)
|
|
35
|
+
**Depende de:** —
|
|
36
|
+
**Estado:** ⬜ pendiente
|
|
37
|
+
**Tiempo estimado:** S/M/L
|
|
38
|
+
|
|
39
|
+
### Qué hacer
|
|
40
|
+
[Descripción específica e inequívoca]
|
|
41
|
+
|
|
42
|
+
### Contexto
|
|
43
|
+
- CA cubierto: CA-001-01
|
|
44
|
+
- Decisión técnica: #1 del plan
|
|
45
|
+
|
|
46
|
+
### Criterio de verificación
|
|
47
|
+
```bash
|
|
48
|
+
[comando o assertion concreta]
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Notas
|
|
52
|
+
[Patrones a seguir, decisiones tomadas]
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Matriz de Cobertura de CAs
|
|
57
|
+
|
|
58
|
+
| CA | Tareas que lo cubren |
|
|
59
|
+
|----|----------------------|
|
|
60
|
+
| CA-001-01 | T001, T003 |
|
|
61
|
+
|
|
62
|
+
## Diagrama de Dependencias
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
T001 ──> T003 ──> T005
|
|
66
|
+
T002 ──> T004
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Historial de Cambios
|
|
70
|
+
|
|
71
|
+
| Tarea | Anterior | Nuevo | Fecha | Notas |
|
|
72
|
+
|-------|----------|-------|-------|-------|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# ============================================================
|
|
2
|
+
# PRESET: enterprise
|
|
3
|
+
# Para: equipos grandes, compliance, auditoría, producto crítico.
|
|
4
|
+
# Filosofía: proceso completo. Nada llega a prod sin revisión.
|
|
5
|
+
# ============================================================
|
|
6
|
+
|
|
7
|
+
preset:
|
|
8
|
+
nombre: enterprise
|
|
9
|
+
descripcion: "Equipo grande o producto crítico. Proceso completo con auditoría."
|
|
10
|
+
casos_de_uso:
|
|
11
|
+
- "Equipo de 8+ desarrolladores"
|
|
12
|
+
- "Producto con datos sensibles (fintech, healthtech, legaltech)"
|
|
13
|
+
- "Compliance requerido (SOC2, ISO 27001, HIPAA, GDPR)"
|
|
14
|
+
- "Sistema que no puede fallar (infraestructura crítica)"
|
|
15
|
+
|
|
16
|
+
agentes:
|
|
17
|
+
arquitecto:
|
|
18
|
+
activo: true
|
|
19
|
+
modelo: opus
|
|
20
|
+
disenador-api:
|
|
21
|
+
activo: true
|
|
22
|
+
modelo: sonnet
|
|
23
|
+
asesor-datos:
|
|
24
|
+
activo: true
|
|
25
|
+
modelo: opus
|
|
26
|
+
desarrollador-backend:
|
|
27
|
+
activo: true
|
|
28
|
+
modelo: sonnet
|
|
29
|
+
desarrollador-frontend:
|
|
30
|
+
activo: true
|
|
31
|
+
modelo: sonnet
|
|
32
|
+
operaciones:
|
|
33
|
+
activo: true
|
|
34
|
+
modelo: sonnet
|
|
35
|
+
tester:
|
|
36
|
+
activo: true
|
|
37
|
+
modelo: sonnet
|
|
38
|
+
revisor:
|
|
39
|
+
activo: true
|
|
40
|
+
modelo: opus # revisión profunda siempre
|
|
41
|
+
critico:
|
|
42
|
+
activo: true
|
|
43
|
+
modelo: opus # análisis de riesgos en todo
|
|
44
|
+
seguridad:
|
|
45
|
+
activo: true
|
|
46
|
+
modelo: opus # auditoría en cada cambio sensible
|
|
47
|
+
documentador:
|
|
48
|
+
activo: true # docs formales requeridas
|
|
49
|
+
modelo: sonnet
|
|
50
|
+
investigador:
|
|
51
|
+
activo: true
|
|
52
|
+
modelo: sonnet
|
|
53
|
+
|
|
54
|
+
comportamiento:
|
|
55
|
+
deteccion_tamano_automatica: true
|
|
56
|
+
ruta_rapida_micro: false # incluso cambios micro pasan por el flujo
|
|
57
|
+
numeracion_especificaciones: "ambos" # fecha + secuencial para trazabilidad
|
|
58
|
+
requerir_aprobacion_plan: true
|
|
59
|
+
requerir_aprobacion_tareas: true # aprobación explícita del plan de tareas
|
|
60
|
+
flujo_minimo: false
|
|
61
|
+
requiere_analizar: true # /sdd.analizar obligatorio antes de implementar
|
|
62
|
+
requiere_verificar: true # /sdd.verificar obligatorio al final
|
|
63
|
+
|
|
64
|
+
calidad:
|
|
65
|
+
cobertura_tests_minima: 85
|
|
66
|
+
permitir_warnings_lint: false
|
|
67
|
+
permitir_codigo_comentado: false
|
|
68
|
+
longitud_funcion_maxima: 40 # funciones más cortas, más legibles
|
|
69
|
+
longitud_archivo_maxima: 300
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# ============================================================
|
|
2
|
+
# PRESET: lean
|
|
3
|
+
# Para: proyectos personales, prototipos, indie hackers,
|
|
4
|
+
# MVPs con un desarrollador.
|
|
5
|
+
# Filosofía: velocidad > proceso. Sin fricción innecesaria.
|
|
6
|
+
# ============================================================
|
|
7
|
+
|
|
8
|
+
preset:
|
|
9
|
+
nombre: lean
|
|
10
|
+
descripcion: "Proyecto personal o prototipo. Velocidad máxima, proceso mínimo."
|
|
11
|
+
casos_de_uso:
|
|
12
|
+
- "Side project / indie hacker"
|
|
13
|
+
- "Prototipo para validar idea"
|
|
14
|
+
- "Proyecto de aprendizaje"
|
|
15
|
+
- "MVP con un solo desarrollador"
|
|
16
|
+
|
|
17
|
+
# Solo los agentes esenciales
|
|
18
|
+
agentes:
|
|
19
|
+
arquitecto:
|
|
20
|
+
activo: true
|
|
21
|
+
modelo: sonnet # sonnet en lugar de opus — decisiones más simples
|
|
22
|
+
disenador-api:
|
|
23
|
+
activo: true
|
|
24
|
+
modelo: sonnet
|
|
25
|
+
asesor-datos:
|
|
26
|
+
activo: true
|
|
27
|
+
modelo: sonnet # sonnet OK para BDs simples
|
|
28
|
+
desarrollador-backend:
|
|
29
|
+
activo: true
|
|
30
|
+
modelo: sonnet
|
|
31
|
+
desarrollador-frontend:
|
|
32
|
+
activo: true
|
|
33
|
+
modelo: sonnet
|
|
34
|
+
operaciones:
|
|
35
|
+
activo: false # configura el CI tú mismo
|
|
36
|
+
tester:
|
|
37
|
+
activo: true
|
|
38
|
+
modelo: sonnet
|
|
39
|
+
revisor:
|
|
40
|
+
activo: false # sin revisión formal — tú eres el revisor
|
|
41
|
+
critico:
|
|
42
|
+
activo: false # sin análisis de riesgos formal
|
|
43
|
+
seguridad:
|
|
44
|
+
activo: false # revisión básica en tu cabeza
|
|
45
|
+
documentador:
|
|
46
|
+
activo: false
|
|
47
|
+
investigador:
|
|
48
|
+
activo: false # no hay equipo que necesite el contexto documentado
|
|
49
|
+
|
|
50
|
+
comportamiento:
|
|
51
|
+
deteccion_tamano_automatica: true
|
|
52
|
+
ruta_rapida_micro: true
|
|
53
|
+
numeracion_especificaciones: "secuencial"
|
|
54
|
+
requerir_aprobacion_plan: false # no pide confirmación — avanza solo
|
|
55
|
+
requerir_aprobacion_tareas: false
|
|
56
|
+
flujo_minimo: true # salta /sdd.analizar por defecto
|
|
57
|
+
|
|
58
|
+
calidad:
|
|
59
|
+
cobertura_tests_minima: 60 # umbral relajado
|
|
60
|
+
permitir_warnings_lint: true # no bloquea por warnings
|
|
61
|
+
permitir_codigo_comentado: true
|
|
62
|
+
longitud_funcion_maxima: 80 # más flexible
|
|
63
|
+
longitud_archivo_maxima: 600
|