sdd-es 2.0.0 → 2.6.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 +29 -29
- package/.claude/settings.local.json +10 -0
- package/.claude-plugin/marketplace.json +10 -7
- package/.claude-plugin/plugin.json +59 -37
- package/.gitignore +20 -0
- package/.mcp.json +8 -0
- package/LICENSE +21 -0
- package/README.md +77 -40
- package/agents/architecture-designer.md +211 -0
- package/agents/arquitecto.md +16 -1
- package/agents/asesor-datos.md +15 -1
- package/agents/critico.md +37 -1
- package/agents/desarrollador-backend.md +3 -1
- package/agents/desarrollador-frontend.md +11 -16
- package/agents/disenador-api.md +13 -1
- package/agents/documentador.md +3 -1
- package/agents/investigador.md +3 -1
- package/agents/operaciones.md +3 -1
- package/agents/product-designer.md +268 -0
- package/agents/revisor.md +25 -1
- package/agents/seguridad.md +5 -1
- package/agents/tester.md +3 -1
- package/claude-hooks/agent-memory.js +288 -0
- package/claude-hooks/pre-tool-guard.js +61 -9
- package/cli/index.js +1 -2
- package/commands/sdd.adr.md +196 -0
- package/commands/sdd.analizar.md +23 -2
- package/commands/sdd.ayuda.md +13 -0
- package/commands/sdd.compliance.md +521 -0
- package/commands/sdd.configurar.md +34 -1
- package/commands/sdd.constitucion.md +198 -23
- package/commands/sdd.construir.md +210 -0
- package/commands/sdd.crear-mcp.md +2 -0
- package/commands/sdd.defect-report.md +134 -0
- package/commands/sdd.descubrir.md +19 -0
- package/commands/sdd.dise/303/261ar.md +188 -0
- package/commands/sdd.estado.md +120 -3
- package/commands/sdd.exportar.md +344 -0
- package/commands/sdd.implementar.md +272 -52
- package/commands/sdd.interpretar.md +239 -0
- package/commands/sdd.md +93 -4
- package/commands/sdd.optimizar-memoria.md +47 -0
- package/commands/sdd.optimizar.md +164 -0
- package/commands/sdd.planificar.md +64 -0
- package/commands/sdd.retro.md +74 -0
- package/commands/sdd.verificar.md +81 -0
- package/configuracion-ejemplo/.claude/CLAUDE.md +106 -0
- package/configuracion-ejemplo/sdd.config.yaml +10 -0
- package/craft/accessibility-baseline.md +216 -0
- package/craft/anti-ai-slop.md +158 -0
- package/craft/color.md +160 -0
- package/craft/typography.md +121 -0
- package/design-systems/bold-brutalist/DESIGN.md +239 -0
- package/design-systems/editorial-minimal/DESIGN.md +205 -0
- package/design-systems/neutral-modern/DESIGN.md +227 -0
- package/design-systems/vibrant-consumer/DESIGN.md +257 -0
- package/design-systems/warm-editorial/DESIGN.md +221 -0
- package/docs/AGENTES.md +4 -1
- package/docs/CASO-COMPLETO.md +206 -0
- package/docs/EJEMPLOS.md +61 -185
- package/docs/FABRICA.md +163 -115
- package/docs/INICIO-RAPIDO.md +27 -79
- package/docs/MEMORIA-Y-OBSERVABILIDAD.md +239 -0
- package/docs/MODELOS.md +3 -0
- package/docs/QUE-PASA-SI-FALLA.md +404 -0
- package/docs/README.md +43 -0
- package/docs/RELACION-CON-CLAUDE-CODE.md +38 -0
- package/docs/SEGURIDAD-PARA-NOTECNICOS.md +280 -0
- package/package.json +15 -10
- package/plantillas/job-story-mejorar-prompt.md +107 -0
- package/presets/enterprise.yaml +6 -0
- package/presets/lean.yaml +4 -0
- package/presets/startup.yaml +6 -0
- package/skills/adr-indexer/SKILL.md +181 -0
- package/skills/cache-audit/SKILL.md +163 -0
- package/skills/critica-diseno/SKILL.md +193 -0
- package/skills/descubrir-idea/SKILL.md +133 -0
- package/skills/effort-router/SKILL.md +128 -0
- package/skills/elegir-direccion/SKILL.md +184 -0
- package/skills/github-connect/IMPLEMENTATION-CHECKLIST.md +297 -0
- package/skills/github-connect/INDEX.md +223 -0
- package/skills/github-connect/INTEGRATION.md +361 -0
- package/skills/github-connect/QUICK-START.md +168 -0
- package/skills/github-connect/README.md +414 -0
- package/skills/github-connect/RESUMEN_IMPLEMENTACION.txt +374 -0
- package/skills/github-connect/SKILL.md +343 -0
- package/skills/github-connect/STRUCTURE.txt +252 -0
- package/skills/github-connect/example-config.yaml +41 -0
- package/skills/github-connect/github-connect.sh +419 -0
- package/skills/interpretar-idea/SKILL.md +254 -0
- package/skills/mejorar-prompt/SKILL.md +237 -0
- package/skills/memory-compactor/SKILL.md +68 -0
- package/skills/modo-guiado/SKILL.md +12 -2
- package/skills/mutation-detector/SKILL.md +134 -0
- package/skills/observabilidad-consumo/SKILL.md +164 -0
- package/skills/token-budget/SKILL.md +177 -0
- package/skills/vercel-deploy/00-START-HERE.txt +364 -0
- package/skills/vercel-deploy/CHECKLIST.md +205 -0
- package/skills/vercel-deploy/EXEC-SUMMARY.txt +322 -0
- package/skills/vercel-deploy/FLOW.txt +334 -0
- package/skills/vercel-deploy/INDEX.md +276 -0
- package/skills/vercel-deploy/INTEGRATION.md +328 -0
- package/skills/vercel-deploy/MANIFEST.md +310 -0
- package/skills/vercel-deploy/README.md +65 -0
- package/skills/vercel-deploy/SKILL.md +356 -0
- package/skills/vercel-deploy/deploy.sh +298 -0
- package/skills/vercel-deploy/estado.json.example +205 -0
- package/skills/vercel-deploy/skill.yaml +323 -0
- package/skills/vercel-deploy/vercel-deploy.sh +216 -0
- package/skills/wireframe-mvp/SKILL.md +157 -0
- package/docs/EJEMPLO-PRACTICA.md +0 -383
- package/mcp-figma/README.md +0 -158
- package/mcp-figma/package.json +0 -7
- package/mcp-figma/src/component-generator.js +0 -162
- package/mcp-figma/src/design-system-analyzer.js +0 -247
- package/mcp-figma/src/figma-client.js +0 -75
- package/mcp-figma/src/index.js +0 -114
- package/mcp-figma/src/mcp.js +0 -97
- package/mcp-figma/src/style-mapper.js +0 -85
- /package/skills/{compresion-tokens.md → compresion-tokens/SKILL.md} +0 -0
- /package/skills/{constitucion-constraint.md → constitucion-constraint/SKILL.md} +0 -0
- /package/skills/{deteccion-stack.md → deteccion-stack/SKILL.md} +0 -0
- /package/skills/{enrutador-agentes.md → enrutador-agentes/SKILL.md} +0 -0
- /package/skills/{gestion-estado.md → gestion-estado/SKILL.md} +0 -0
- /package/skills/{indexador.md → indexador/SKILL.md} +0 -0
- /package/skills/{validacion-spec.md → validacion-spec/SKILL.md} +0 -0
- /package/skills/{verificador-implementacion.md → verificador-implementacion/SKILL.md} +0 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "vercel-deploy",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"execution": {
|
|
5
|
+
"timestamp_start": "2026-06-13T14:25:30Z",
|
|
6
|
+
"timestamp_end": "2026-06-13T14:30:15Z",
|
|
7
|
+
"duration_seconds": 285,
|
|
8
|
+
"status": "SUCCESS",
|
|
9
|
+
"exit_code": 0
|
|
10
|
+
},
|
|
11
|
+
"ultimo_despliegue": {
|
|
12
|
+
"timestamp": "2026-06-13T14:30:00Z",
|
|
13
|
+
"url": "https://mi-proyecto.vercel.app",
|
|
14
|
+
"status": "OK",
|
|
15
|
+
"health_check": "200 OK",
|
|
16
|
+
"framework": "nextjs",
|
|
17
|
+
"environment": "production"
|
|
18
|
+
},
|
|
19
|
+
"pre_checks": {
|
|
20
|
+
"vercel_token": {
|
|
21
|
+
"status": "OK",
|
|
22
|
+
"message": "Token presente y válido"
|
|
23
|
+
},
|
|
24
|
+
"branch_clean": {
|
|
25
|
+
"status": "OK",
|
|
26
|
+
"message": "Sin cambios sin stagear"
|
|
27
|
+
},
|
|
28
|
+
"secrets_scan": {
|
|
29
|
+
"status": "OK",
|
|
30
|
+
"message": "No secretos detectados"
|
|
31
|
+
},
|
|
32
|
+
"tests": {
|
|
33
|
+
"status": "OK",
|
|
34
|
+
"message": "Tests pasando (42/42)",
|
|
35
|
+
"exit_code": 0
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"build": {
|
|
39
|
+
"status": "OK",
|
|
40
|
+
"command": "npm run build",
|
|
41
|
+
"duration_seconds": 120,
|
|
42
|
+
"output": {
|
|
43
|
+
"lines": 45,
|
|
44
|
+
"first_line": "Linting source files...",
|
|
45
|
+
"last_line": "✓ Build complete"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"deploy": {
|
|
49
|
+
"status": "OK",
|
|
50
|
+
"platform": "vercel",
|
|
51
|
+
"deployment_id": "dpl_abc123def456ghi789",
|
|
52
|
+
"url": "https://mi-proyecto.vercel.app",
|
|
53
|
+
"production_url": "https://mi-proyecto.vercel.app",
|
|
54
|
+
"console_url": "https://vercel.com/dashboard/deployments/dpl_abc123def456ghi789",
|
|
55
|
+
"duration_seconds": 85,
|
|
56
|
+
"regions": ["iad1", "sfo1"]
|
|
57
|
+
},
|
|
58
|
+
"health_check": {
|
|
59
|
+
"status": "OK",
|
|
60
|
+
"attempts": 1,
|
|
61
|
+
"max_attempts": 3,
|
|
62
|
+
"http_code": "200",
|
|
63
|
+
"response_time_ms": 145,
|
|
64
|
+
"checks": [
|
|
65
|
+
{
|
|
66
|
+
"attempt": 1,
|
|
67
|
+
"timestamp": "2026-06-13T14:30:10Z",
|
|
68
|
+
"http_code": "200",
|
|
69
|
+
"response_time_ms": 145,
|
|
70
|
+
"status": "OK"
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
"rollback": {
|
|
75
|
+
"status": "NOT_NEEDED",
|
|
76
|
+
"previous_deployment": "dpl_xyz789abc456def123",
|
|
77
|
+
"previous_url": "https://mi-proyecto-prev.vercel.app"
|
|
78
|
+
},
|
|
79
|
+
"configuration": {
|
|
80
|
+
"vercel_json": {
|
|
81
|
+
"buildCommand": "npm run build",
|
|
82
|
+
"outputDirectory": ".next",
|
|
83
|
+
"framework": "nextjs",
|
|
84
|
+
"auto_generated": false
|
|
85
|
+
},
|
|
86
|
+
"environment_vars": {
|
|
87
|
+
"NODE_ENV": "production",
|
|
88
|
+
"VERCEL_ENV": "production"
|
|
89
|
+
},
|
|
90
|
+
"secrets_detected": 0
|
|
91
|
+
},
|
|
92
|
+
"files_generated": {
|
|
93
|
+
".sdd/estado.json": {
|
|
94
|
+
"size_bytes": 2845,
|
|
95
|
+
"timestamp": "2026-06-13T14:30:15Z"
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"next_steps": [
|
|
99
|
+
"Comparte URL con testers: https://mi-proyecto.vercel.app",
|
|
100
|
+
"Monitorea por anomalías (15 minutos)",
|
|
101
|
+
"Ejecuta /sdd.snapshot para actualizar estado del producto",
|
|
102
|
+
"En caso de issues: /sdd.revertir para rollback manual"
|
|
103
|
+
],
|
|
104
|
+
"metrics": {
|
|
105
|
+
"total_duration_seconds": 285,
|
|
106
|
+
"build_duration_seconds": 120,
|
|
107
|
+
"deploy_duration_seconds": 85,
|
|
108
|
+
"health_check_duration_seconds": 5,
|
|
109
|
+
"files_deployed": 342,
|
|
110
|
+
"uncompressed_size_mb": 45.2,
|
|
111
|
+
"compressed_size_mb": 8.7
|
|
112
|
+
},
|
|
113
|
+
"network": {
|
|
114
|
+
"git_commits_deployed": 3,
|
|
115
|
+
"last_commit_hash": "abc123def456",
|
|
116
|
+
"last_commit_message": "Add new feature: user dashboard",
|
|
117
|
+
"branch_deployed": "main",
|
|
118
|
+
"tag_created": "v1.2.3"
|
|
119
|
+
},
|
|
120
|
+
"notifications": {
|
|
121
|
+
"slack": {
|
|
122
|
+
"status": "SENT",
|
|
123
|
+
"channel": "#deployments",
|
|
124
|
+
"message_ts": "1686751815.000100"
|
|
125
|
+
},
|
|
126
|
+
"email": {
|
|
127
|
+
"status": "QUEUED",
|
|
128
|
+
"recipients": ["dev-team@company.com"],
|
|
129
|
+
"subject": "Deployment successful: v1.2.3 → production"
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
"compliance": {
|
|
133
|
+
"security_scan": {
|
|
134
|
+
"status": "OK",
|
|
135
|
+
"vulnerabilities_found": 0,
|
|
136
|
+
"scanner": "npm audit"
|
|
137
|
+
},
|
|
138
|
+
"code_quality": {
|
|
139
|
+
"status": "OK",
|
|
140
|
+
"linting_errors": 0,
|
|
141
|
+
"warnings": 2,
|
|
142
|
+
"tool": "eslint"
|
|
143
|
+
},
|
|
144
|
+
"performance": {
|
|
145
|
+
"lighthouse_score": 98,
|
|
146
|
+
"first_contentful_paint_ms": 850,
|
|
147
|
+
"largest_contentful_paint_ms": 1200
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"audit_trail": [
|
|
151
|
+
{
|
|
152
|
+
"timestamp": "2026-06-13T14:25:30Z",
|
|
153
|
+
"action": "PRE_CHECKS_START",
|
|
154
|
+
"actor": "user@company.com",
|
|
155
|
+
"result": "OK"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"timestamp": "2026-06-13T14:27:45Z",
|
|
159
|
+
"action": "BUILD_START",
|
|
160
|
+
"actor": "vercel-cli",
|
|
161
|
+
"result": "OK"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"timestamp": "2026-06-13T14:29:15Z",
|
|
165
|
+
"action": "DEPLOY_START",
|
|
166
|
+
"actor": "vercel-api",
|
|
167
|
+
"result": "OK"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"timestamp": "2026-06-13T14:30:10Z",
|
|
171
|
+
"action": "HEALTH_CHECK",
|
|
172
|
+
"actor": "curl",
|
|
173
|
+
"result": "OK"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"timestamp": "2026-06-13T14:30:15Z",
|
|
177
|
+
"action": "COMPLETE",
|
|
178
|
+
"actor": "system",
|
|
179
|
+
"result": "SUCCESS"
|
|
180
|
+
}
|
|
181
|
+
],
|
|
182
|
+
"error_history": [],
|
|
183
|
+
"previous_deployments": [
|
|
184
|
+
{
|
|
185
|
+
"timestamp": "2026-06-12T10:15:00Z",
|
|
186
|
+
"url": "https://mi-proyecto-v1-2-2.vercel.app",
|
|
187
|
+
"status": "SUCCESS",
|
|
188
|
+
"deployment_id": "dpl_xyz789abc456def123"
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"timestamp": "2026-06-11T16:45:30Z",
|
|
192
|
+
"url": "https://mi-proyecto-v1-2-1.vercel.app",
|
|
193
|
+
"status": "SUCCESS",
|
|
194
|
+
"deployment_id": "dpl_prev123abc789def456"
|
|
195
|
+
}
|
|
196
|
+
],
|
|
197
|
+
"environment_info": {
|
|
198
|
+
"vercel_cli_version": "28.16.4",
|
|
199
|
+
"node_version": "18.16.0",
|
|
200
|
+
"npm_version": "9.6.2",
|
|
201
|
+
"git_version": "2.40.0",
|
|
202
|
+
"os": "Linux ubuntu-latest",
|
|
203
|
+
"arch": "x64"
|
|
204
|
+
}
|
|
205
|
+
}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
---
|
|
2
|
+
# Metadatos del skill: vercel-deploy
|
|
3
|
+
# Sistema: SDD (Software Deployment Dashboard)
|
|
4
|
+
|
|
5
|
+
metadata:
|
|
6
|
+
id: vercel-deploy
|
|
7
|
+
name: "Despliegue Automático en Vercel"
|
|
8
|
+
version: 1.0.0
|
|
9
|
+
author: "SDD Framework"
|
|
10
|
+
last_updated: 2026-06-13
|
|
11
|
+
status: production
|
|
12
|
+
|
|
13
|
+
description:
|
|
14
|
+
short: "Despliega automáticamente a Vercel con pre-checks, health checks y rollback automático"
|
|
15
|
+
long: |
|
|
16
|
+
Cierra el ciclo idea→producción sin salir del flujo.
|
|
17
|
+
Diferenciador vs Bolt/v0: verificación independiente PRE-deploy, no post-deploy.
|
|
18
|
+
|
|
19
|
+
Flujo sincrónico bloqueante con 6 pasos:
|
|
20
|
+
1. Pre-checks (valida VERCEL_TOKEN, rama limpia, sin secretos, tests verdes)
|
|
21
|
+
2. Auto-generar vercel.json (detecta framework automáticamente)
|
|
22
|
+
3. Build y deploy (npm run build + vercel deploy --prod)
|
|
23
|
+
4. Health check (retry 3x con backoff)
|
|
24
|
+
5. Rollback automático (si health check falla)
|
|
25
|
+
6. Registrar resultado (.sdd/estado.json)
|
|
26
|
+
|
|
27
|
+
tags:
|
|
28
|
+
- deployment
|
|
29
|
+
- vercel
|
|
30
|
+
- ci-cd
|
|
31
|
+
- production
|
|
32
|
+
- automation
|
|
33
|
+
- devops
|
|
34
|
+
|
|
35
|
+
requirements:
|
|
36
|
+
tools:
|
|
37
|
+
- name: Bash
|
|
38
|
+
version: "4+"
|
|
39
|
+
- name: vercel-cli
|
|
40
|
+
version: "latest"
|
|
41
|
+
install: "npm install -g vercel"
|
|
42
|
+
- name: git
|
|
43
|
+
version: "2+"
|
|
44
|
+
- name: npm
|
|
45
|
+
version: "8+"
|
|
46
|
+
- name: curl
|
|
47
|
+
version: "7+"
|
|
48
|
+
|
|
49
|
+
environment:
|
|
50
|
+
required:
|
|
51
|
+
- VERCEL_TOKEN
|
|
52
|
+
description: "Token de autenticación en Vercel"
|
|
53
|
+
generate_at: "https://vercel.com/account/tokens"
|
|
54
|
+
optional:
|
|
55
|
+
- VERCEL_PROJECT_ID
|
|
56
|
+
description: "ID del proyecto si ya existe en Vercel"
|
|
57
|
+
source: "Vercel Dashboard > Settings > General"
|
|
58
|
+
|
|
59
|
+
inputs:
|
|
60
|
+
framework:
|
|
61
|
+
type: enum
|
|
62
|
+
values: [auto, nextjs, react, vue, astro, python, flask, fastapi]
|
|
63
|
+
default: auto
|
|
64
|
+
description: "Framework detectado automáticamente si es 'auto'"
|
|
65
|
+
|
|
66
|
+
environment:
|
|
67
|
+
type: enum
|
|
68
|
+
values: [staging, production]
|
|
69
|
+
default: production
|
|
70
|
+
description: "Entorno a desplegar"
|
|
71
|
+
|
|
72
|
+
retry_count:
|
|
73
|
+
type: integer
|
|
74
|
+
default: 3
|
|
75
|
+
description: "Número de reintentos para health check"
|
|
76
|
+
|
|
77
|
+
retry_delay:
|
|
78
|
+
type: integer
|
|
79
|
+
default: 5
|
|
80
|
+
description: "Segundos entre reintentos (backoff)"
|
|
81
|
+
|
|
82
|
+
outputs:
|
|
83
|
+
deploy_url:
|
|
84
|
+
type: string
|
|
85
|
+
description: "URL de la aplicación desplegada"
|
|
86
|
+
example: "https://mi-proyecto.vercel.app"
|
|
87
|
+
|
|
88
|
+
health_check_status:
|
|
89
|
+
type: enum
|
|
90
|
+
values: [OK, FAILED]
|
|
91
|
+
description: "Estado del health check"
|
|
92
|
+
|
|
93
|
+
deployment_timestamp:
|
|
94
|
+
type: string
|
|
95
|
+
format: "ISO 8601"
|
|
96
|
+
description: "Timestamp del despliegue"
|
|
97
|
+
example: "2026-06-13T14:30:00Z"
|
|
98
|
+
|
|
99
|
+
stato_file:
|
|
100
|
+
type: string
|
|
101
|
+
description: "Ruta al archivo de estado"
|
|
102
|
+
value: ".sdd/estado.json"
|
|
103
|
+
|
|
104
|
+
flow:
|
|
105
|
+
steps:
|
|
106
|
+
- id: "paso-1-prechecks"
|
|
107
|
+
name: "Pre-checks"
|
|
108
|
+
description: "Valida VERCEL_TOKEN, rama limpia, sin secretos, tests verdes"
|
|
109
|
+
blocking: true
|
|
110
|
+
timeout_seconds: 60
|
|
111
|
+
|
|
112
|
+
- id: "paso-2-config"
|
|
113
|
+
name: "Configuración"
|
|
114
|
+
description: "Detecta framework y auto-genera vercel.json"
|
|
115
|
+
blocking: false
|
|
116
|
+
timeout_seconds: 30
|
|
117
|
+
|
|
118
|
+
- id: "paso-3-deploy"
|
|
119
|
+
name: "Deploy"
|
|
120
|
+
description: "Build local y envío a Vercel"
|
|
121
|
+
blocking: true
|
|
122
|
+
timeout_seconds: 900 # 15 minutos
|
|
123
|
+
|
|
124
|
+
- id: "paso-4-health"
|
|
125
|
+
name: "Health Check"
|
|
126
|
+
description: "Verificación de que la URL responde (HTTP 200)"
|
|
127
|
+
blocking: true
|
|
128
|
+
timeout_seconds: 60
|
|
129
|
+
retries:
|
|
130
|
+
count: 3
|
|
131
|
+
delay_seconds: 5
|
|
132
|
+
strategy: exponential_backoff
|
|
133
|
+
|
|
134
|
+
- id: "paso-5-rollback"
|
|
135
|
+
name: "Rollback"
|
|
136
|
+
description: "Revertir a deploy anterior si health check falla"
|
|
137
|
+
blocking: true
|
|
138
|
+
timeout_seconds: 300
|
|
139
|
+
condition: "health_check_failed"
|
|
140
|
+
|
|
141
|
+
- id: "paso-6-log"
|
|
142
|
+
name: "Registrar"
|
|
143
|
+
description: "Guardar metadatos en .sdd/estado.json"
|
|
144
|
+
blocking: false
|
|
145
|
+
timeout_seconds: 10
|
|
146
|
+
|
|
147
|
+
invocation:
|
|
148
|
+
automatic:
|
|
149
|
+
trigger: "sdd.implementar-paso-5"
|
|
150
|
+
condition: "deploy.plataforma == 'vercel'"
|
|
151
|
+
gate: "user_confirmation" # Requiere confirmación humana
|
|
152
|
+
|
|
153
|
+
manual:
|
|
154
|
+
commands:
|
|
155
|
+
- "/sdd.desplegar"
|
|
156
|
+
- "/sdd.desplegar --environment staging"
|
|
157
|
+
- "/sdd.desplegar --environment production"
|
|
158
|
+
|
|
159
|
+
error_handling:
|
|
160
|
+
- error_code: "VERCEL_TOKEN_MISSING"
|
|
161
|
+
http_code: 401
|
|
162
|
+
message: "VERCEL_TOKEN no configurado"
|
|
163
|
+
action: "user_must_set_token"
|
|
164
|
+
|
|
165
|
+
- error_code: "TESTS_FAILING"
|
|
166
|
+
http_code: 422
|
|
167
|
+
message: "Tests fallando"
|
|
168
|
+
action: "user_must_fix_tests"
|
|
169
|
+
|
|
170
|
+
- error_code: "HEALTH_CHECK_FAILED"
|
|
171
|
+
http_code: 502
|
|
172
|
+
message: "Health check falló después de reintentos"
|
|
173
|
+
action: "automatic_rollback"
|
|
174
|
+
|
|
175
|
+
- error_code: "BUILD_FAILED"
|
|
176
|
+
http_code: 422
|
|
177
|
+
message: "Build local falló"
|
|
178
|
+
action: "user_must_fix_code"
|
|
179
|
+
|
|
180
|
+
- error_code: "UNCOMMITTED_CHANGES"
|
|
181
|
+
http_code: 422
|
|
182
|
+
message: "Cambios sin stagear"
|
|
183
|
+
action: "user_must_commit"
|
|
184
|
+
|
|
185
|
+
- error_code: "SECRETS_FOUND"
|
|
186
|
+
http_code: 422
|
|
187
|
+
message: "Secretos detectados en código"
|
|
188
|
+
action: "user_must_move_secrets"
|
|
189
|
+
|
|
190
|
+
atomic: true
|
|
191
|
+
idempotent: true
|
|
192
|
+
supports_rollback: true
|
|
193
|
+
|
|
194
|
+
documentation:
|
|
195
|
+
files:
|
|
196
|
+
- path: "./SKILL.md"
|
|
197
|
+
type: "spec"
|
|
198
|
+
primary: true
|
|
199
|
+
- path: "./README.md"
|
|
200
|
+
type: "quickstart"
|
|
201
|
+
- path: "./CHECKLIST.md"
|
|
202
|
+
type: "prerequisites"
|
|
203
|
+
- path: "./INTEGRATION.md"
|
|
204
|
+
type: "integration"
|
|
205
|
+
- path: "./deploy.sh"
|
|
206
|
+
type: "executable"
|
|
207
|
+
- path: "./INDEX.md"
|
|
208
|
+
type: "navigation"
|
|
209
|
+
|
|
210
|
+
examples:
|
|
211
|
+
- name: "Despliegue simple"
|
|
212
|
+
commands:
|
|
213
|
+
- "export VERCEL_TOKEN='vercel_xxx_abc123...'"
|
|
214
|
+
- "/sdd.desplegar"
|
|
215
|
+
|
|
216
|
+
- name: "Despliegue a staging"
|
|
217
|
+
commands:
|
|
218
|
+
- "export VERCEL_TOKEN='vercel_xxx_abc123...'"
|
|
219
|
+
- "/sdd.desplegar --environment staging"
|
|
220
|
+
|
|
221
|
+
- name: "Despliegue manual con script"
|
|
222
|
+
commands:
|
|
223
|
+
- "bash ./skills/vercel-deploy/deploy.sh"
|
|
224
|
+
|
|
225
|
+
post_deployment:
|
|
226
|
+
actions:
|
|
227
|
+
- "/sdd.snapshot"
|
|
228
|
+
description: "Actualizar estado del producto"
|
|
229
|
+
- "/sdd.canary"
|
|
230
|
+
description: "Monitorear por 15 minutos"
|
|
231
|
+
- "/sdd.revertir"
|
|
232
|
+
description: "Rollback manual si es necesario"
|
|
233
|
+
|
|
234
|
+
monitoring:
|
|
235
|
+
state_file: ".sdd/estado.json"
|
|
236
|
+
logs_location: "~/.sdd/logs/vercel-deploy/"
|
|
237
|
+
dashboard_link: "https://vercel.com/dashboard"
|
|
238
|
+
|
|
239
|
+
security:
|
|
240
|
+
secrets_detected: true
|
|
241
|
+
secrets_patterns:
|
|
242
|
+
- "VERCEL_TOKEN"
|
|
243
|
+
- "API_KEY"
|
|
244
|
+
- "SECRET"
|
|
245
|
+
- "password"
|
|
246
|
+
token_exposure: "never"
|
|
247
|
+
git_safe: true
|
|
248
|
+
|
|
249
|
+
performance:
|
|
250
|
+
typical_duration_seconds: 240 # 4 minutos
|
|
251
|
+
max_duration_seconds: 1800 # 30 minutos
|
|
252
|
+
parallelizable: false
|
|
253
|
+
|
|
254
|
+
ci_cd_integrations:
|
|
255
|
+
- name: "GitHub Actions"
|
|
256
|
+
supported: true
|
|
257
|
+
docs: "https://vercel.com/docs/concepts/git/vercel-for-github"
|
|
258
|
+
|
|
259
|
+
- name: "GitLab CI"
|
|
260
|
+
supported: true
|
|
261
|
+
docs: "https://vercel.com/docs/concepts/git/vercel-for-gitlab"
|
|
262
|
+
|
|
263
|
+
- name: "Jenkins"
|
|
264
|
+
supported: true
|
|
265
|
+
example: "vercel deploy --prod --token=$VERCEL_TOKEN"
|
|
266
|
+
|
|
267
|
+
frameworks_supported:
|
|
268
|
+
- next.js
|
|
269
|
+
- React
|
|
270
|
+
- Vue
|
|
271
|
+
- Astro
|
|
272
|
+
- Python (Flask, FastAPI)
|
|
273
|
+
- Node.js
|
|
274
|
+
- Express
|
|
275
|
+
- Nuxt
|
|
276
|
+
- SvelteKit
|
|
277
|
+
|
|
278
|
+
pricing:
|
|
279
|
+
skill_cost: "free"
|
|
280
|
+
vercel_cost: "see https://vercel.com/pricing"
|
|
281
|
+
|
|
282
|
+
changelog:
|
|
283
|
+
- version: "1.0.0"
|
|
284
|
+
date: "2026-06-13"
|
|
285
|
+
changes:
|
|
286
|
+
- "Initial release"
|
|
287
|
+
- "6-step deployment flow"
|
|
288
|
+
- "Automatic health checks"
|
|
289
|
+
- "Atomic rollback support"
|
|
290
|
+
- "Framework auto-detection"
|
|
291
|
+
|
|
292
|
+
maintainers:
|
|
293
|
+
- "SDD Team"
|
|
294
|
+
- "DevOps"
|
|
295
|
+
|
|
296
|
+
license: "MIT"
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
# Uso en YAML de proyectos
|
|
301
|
+
|
|
302
|
+
```yaml
|
|
303
|
+
# En tu sdd.implementar.md o configuración:
|
|
304
|
+
deploy:
|
|
305
|
+
plataforma: vercel
|
|
306
|
+
framework: auto # O específico: nextjs, react, vue, etc.
|
|
307
|
+
environment: production
|
|
308
|
+
skill: vercel-deploy
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
# Invocación desde CLI
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
# Automática (con gate de confirmación)
|
|
315
|
+
/sdd.implementar
|
|
316
|
+
|
|
317
|
+
# Manual
|
|
318
|
+
/sdd.desplegar
|
|
319
|
+
/sdd.desplegar --environment staging
|
|
320
|
+
|
|
321
|
+
# Directamente (si se expone como skill)
|
|
322
|
+
/vercel-deploy
|
|
323
|
+
```
|