@cristiancorreau/forge 2.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 (153) hide show
  1. package/CHANGELOG.md +228 -0
  2. package/LICENSE +191 -0
  3. package/README.md +156 -0
  4. package/assets/adapters/claude-code/commands/deploy-check.md +12 -0
  5. package/assets/adapters/claude-code/commands/new-feature.md +11 -0
  6. package/assets/adapters/claude-code/commands/plan.md +116 -0
  7. package/assets/adapters/claude-code/commands/review.md +219 -0
  8. package/assets/adapters/claude-code/commands/session-close.md +109 -0
  9. package/assets/adapters/claude-code/commands/session-start.md +59 -0
  10. package/assets/adapters/claude-code/commands/ship.md +133 -0
  11. package/assets/adapters/claude-code/commands/wiki-ingest.md +7 -0
  12. package/assets/adapters/claude-code/commands/wiki-lint.md +5 -0
  13. package/assets/adapters/claude-code/commands/wiki-query.md +7 -0
  14. package/assets/adapters/claude-code/commands/work.md +101 -0
  15. package/assets/adapters/claude-code/generate-claude-md.py +304 -0
  16. package/assets/adapters/codex/commands/plan.md +63 -0
  17. package/assets/adapters/codex/commands/review.md +53 -0
  18. package/assets/adapters/codex/commands/session-close.md +53 -0
  19. package/assets/adapters/codex/commands/session-start.md +49 -0
  20. package/assets/adapters/codex/commands/ship.md +53 -0
  21. package/assets/adapters/codex/commands/work.md +53 -0
  22. package/assets/adapters/codex/generate-codex-config.py +269 -0
  23. package/assets/adapters/codex/hooks/codex.yaml.tpl +43 -0
  24. package/assets/adapters/codex/hooks/forge-codex-finish.sh +158 -0
  25. package/assets/adapters/codex/hooks/forge-codex-start.sh +186 -0
  26. package/assets/adapters/kiro/generate-steering.py +367 -0
  27. package/assets/adapters/opencode/HOOKS.md +123 -0
  28. package/assets/adapters/opencode/commands/plan.md +119 -0
  29. package/assets/adapters/opencode/commands/review.md +164 -0
  30. package/assets/adapters/opencode/commands/session-close.md +111 -0
  31. package/assets/adapters/opencode/commands/session-start.md +62 -0
  32. package/assets/adapters/opencode/commands/ship.md +135 -0
  33. package/assets/adapters/opencode/commands/work.md +82 -0
  34. package/assets/adapters/opencode/generate-agents-md.py +262 -0
  35. package/assets/core/agents/backend-engineer.md +61 -0
  36. package/assets/core/agents/compliance-reviewer.md +83 -0
  37. package/assets/core/agents/docs-writer.md +77 -0
  38. package/assets/core/agents/frontend-engineer.md +70 -0
  39. package/assets/core/agents/orchestrator.md +104 -0
  40. package/assets/core/agents/security-auditor.md +54 -0
  41. package/assets/core/agents/test-engineer.md +57 -0
  42. package/assets/core/hooks/hooks-registry.yaml +48 -0
  43. package/assets/core/hooks/post-turn-check.sh +139 -0
  44. package/assets/core/hooks/pre-bash-check.py +202 -0
  45. package/assets/core/hooks/pre-edit-check.py +317 -0
  46. package/assets/core/hooks/session-start.sh +184 -0
  47. package/assets/core/schemas/project.schema.json +503 -0
  48. package/assets/core/skills/README.md +88 -0
  49. package/assets/core/skills/aitmpl-search/SKILL.md +74 -0
  50. package/assets/core/skills/browser-test/SKILL.md +177 -0
  51. package/assets/core/skills/db-migrate/SKILL.md +163 -0
  52. package/assets/core/skills/local2prod/SKILL.md +147 -0
  53. package/assets/core/skills/new-feature/SKILL.md +155 -0
  54. package/assets/core/skills/obsidian-sync/SKILL.md +152 -0
  55. package/assets/core/skills/phase-kickoff/SKILL.md +69 -0
  56. package/assets/core/skills/security-audit/SKILL.md +125 -0
  57. package/assets/core/skills/spec/SKILL.md +72 -0
  58. package/assets/core/skills/wiki-ingest/SKILL.md +183 -0
  59. package/assets/core/skills/wiki-lint/SKILL.md +109 -0
  60. package/assets/core/skills/wiki-query/SKILL.md +100 -0
  61. package/assets/core/templates/claude-md/architecture.rules +20 -0
  62. package/assets/core/templates/claude-md/global.md +30 -0
  63. package/assets/core/templates/claude-md/project.md +36 -0
  64. package/assets/core/templates/daily-note.md +38 -0
  65. package/assets/core/templates/spec-template.md +43 -0
  66. package/assets/core/workflows/sdd.md +69 -0
  67. package/assets/core/workflows/sprint.md +59 -0
  68. package/assets/forge.py +1265 -0
  69. package/assets/hooks/pre-commit +43 -0
  70. package/assets/manifest.json +274 -0
  71. package/assets/profiles/astro/README.md +24 -0
  72. package/assets/profiles/astro/agents/frontend-engineer.md +74 -0
  73. package/assets/profiles/django/agents/api-engineer.md +83 -0
  74. package/assets/profiles/expo/README.md +24 -0
  75. package/assets/profiles/expo/agents/mobile-engineer.md +69 -0
  76. package/assets/profiles/express/agents/api-engineer.md +60 -0
  77. package/assets/profiles/fastapi/README.md +32 -0
  78. package/assets/profiles/fastapi/agents/api-engineer.md +87 -0
  79. package/assets/profiles/go-gin/agents/api-engineer.md +98 -0
  80. package/assets/profiles/hono-drizzle/README.md +31 -0
  81. package/assets/profiles/hono-drizzle/agents/api-engineer.md +82 -0
  82. package/assets/profiles/laravel/README.md +32 -0
  83. package/assets/profiles/laravel/agents/api-engineer.md +114 -0
  84. package/assets/profiles/laravel/agents/fullstack-engineer.md +67 -0
  85. package/assets/profiles/laravel/agents/migration-specialist.md +420 -0
  86. package/assets/profiles/nestjs/agents/api-engineer.md +79 -0
  87. package/assets/profiles/nextjs-admin/README.md +32 -0
  88. package/assets/profiles/nextjs-admin/agents/admin-engineer.md +78 -0
  89. package/assets/profiles/playwright-crawler/agents/scanner-engineer.md +51 -0
  90. package/assets/profiles/rails/agents/fullstack-engineer.md +61 -0
  91. package/assets/profiles/sveltekit/agents/frontend-engineer.md +96 -0
  92. package/assets/profiles/vuenuxt/agents/frontend-engineer.md +82 -0
  93. package/assets/profiles/wordpress/README.md +30 -0
  94. package/assets/profiles/wordpress/agents/divi-engineer.md +273 -0
  95. package/assets/profiles/wordpress/agents/elementor-engineer.md +310 -0
  96. package/assets/profiles/wordpress/agents/wp-engineer.md +216 -0
  97. package/assets/requirements.txt +2 -0
  98. package/assets/scripts/aitmpl-search.py +808 -0
  99. package/assets/scripts/forge-add-opportunities.py +92 -0
  100. package/assets/scripts/forge-audit.py +1061 -0
  101. package/assets/scripts/forge-generate-all.py +283 -0
  102. package/assets/scripts/forge-init.py +900 -0
  103. package/assets/scripts/forge-migrate-project-yaml.py +397 -0
  104. package/assets/scripts/forge-scaffold-profile.py +181 -0
  105. package/assets/scripts/forge-teardown.py +193 -0
  106. package/assets/scripts/forge-validate-project-yaml.py +457 -0
  107. package/assets/scripts/forge-wizard.py +1003 -0
  108. package/assets/scripts/setup-codex.sh +229 -0
  109. package/assets/scripts/team-install.sh +147 -0
  110. package/assets/scripts/token-stats.py +201 -0
  111. package/assets/templates/modes/enterprise.yaml.tpl +114 -0
  112. package/assets/templates/modes/multi-runtime.yaml.tpl +89 -0
  113. package/assets/templates/modes/new-stack.yaml.tpl +101 -0
  114. package/assets/templates/modes/startup.yaml.tpl +74 -0
  115. package/assets/templates/project.yaml.tpl +185 -0
  116. package/assets/templates/wiki/concepts/_template.md +22 -0
  117. package/assets/templates/wiki/entities/_template.md +19 -0
  118. package/assets/templates/wiki/index.md +32 -0
  119. package/assets/templates/wiki/log.md +6 -0
  120. package/assets/templates/wiki/sources/_template.md +25 -0
  121. package/dist/cli.d.ts +3 -0
  122. package/dist/cli.d.ts.map +1 -0
  123. package/dist/cli.js +64 -0
  124. package/dist/cli.js.map +1 -0
  125. package/dist/commands/audit.d.ts +2 -0
  126. package/dist/commands/audit.d.ts.map +1 -0
  127. package/dist/commands/audit.js +21 -0
  128. package/dist/commands/audit.js.map +1 -0
  129. package/dist/commands/doctor.d.ts +2 -0
  130. package/dist/commands/doctor.d.ts.map +1 -0
  131. package/dist/commands/doctor.js +58 -0
  132. package/dist/commands/doctor.js.map +1 -0
  133. package/dist/commands/generate.d.ts +2 -0
  134. package/dist/commands/generate.d.ts.map +1 -0
  135. package/dist/commands/generate.js +27 -0
  136. package/dist/commands/generate.js.map +1 -0
  137. package/dist/commands/init.d.ts +2 -0
  138. package/dist/commands/init.d.ts.map +1 -0
  139. package/dist/commands/init.js +22 -0
  140. package/dist/commands/init.js.map +1 -0
  141. package/dist/commands/validate.d.ts +2 -0
  142. package/dist/commands/validate.d.ts.map +1 -0
  143. package/dist/commands/validate.js +20 -0
  144. package/dist/commands/validate.js.map +1 -0
  145. package/dist/lib/paths.d.ts +10 -0
  146. package/dist/lib/paths.d.ts.map +1 -0
  147. package/dist/lib/paths.js +49 -0
  148. package/dist/lib/paths.js.map +1 -0
  149. package/dist/lib/python.d.ts +4 -0
  150. package/dist/lib/python.d.ts.map +1 -0
  151. package/dist/lib/python.js +46 -0
  152. package/dist/lib/python.js.map +1 -0
  153. package/package.json +46 -0
@@ -0,0 +1,177 @@
1
+ # Skill: browser-test
2
+
3
+ Automatización de navegador para verificar UI en desarrollo, testear visualmente
4
+ flujos críticos y capturar evidencia. Usa `agent-browser` (CLI en Rust sobre CDP).
5
+
6
+ Triggers: /browser-test, "abrir en browser", "screenshot de", "verificar que
7
+ renderiza", "testear visualmente", "navegar a", "probar el flujo de", "ver cómo
8
+ se ve", "revisar esta URL", "capturar pantalla de", "test visual", "open <url>".
9
+
10
+ Prerequisito: `agent-browser` instalado globalmente.
11
+ Instalar: `npm i -g agent-browser && agent-browser install`
12
+ Verificar: `agent-browser --version`
13
+
14
+ ---
15
+
16
+ ## Cuándo usar este skill
17
+
18
+ - Verificar que una página renderiza correctamente antes de dar una tarea por terminada
19
+ - Testear visualmente flujos críticos (login, onboarding, formularios)
20
+ - Inspeccionar una URL que el usuario proporciona
21
+ - Capturar screenshots como evidencia de implementación o compliance
22
+ - Hacer diff visual entre dos versiones de una misma página
23
+ - Testear responsive en viewport mobile sin abrir DevTools manualmente
24
+ - Extraer contenido de una URL pública para investigación
25
+
26
+ ---
27
+
28
+ ## Flujo core
29
+
30
+ ```bash
31
+ # 1. Navegar y ver qué hay
32
+ agent-browser open <url>
33
+ agent-browser snapshot -i # accessibility tree — interactive elements only
34
+ # produce refs @e1, @e2... para interactuar
35
+
36
+ # 2. Interactuar con refs del snapshot
37
+ agent-browser click @e3
38
+ agent-browser fill @e4 "texto"
39
+ agent-browser snapshot -i # re-snapshot SIEMPRE después de un cambio de página
40
+
41
+ # 3. Capturar estado
42
+ agent-browser screenshot # guarda a /tmp auto-named
43
+ agent-browser screenshot page.png # o a un path específico
44
+ agent-browser close
45
+ ```
46
+
47
+ Los refs (`@e1`, `@e2`...) se vuelven stale al cambiar la página. Siempre
48
+ re-snapshot antes del siguiente ref interaction.
49
+
50
+ ---
51
+
52
+ ## Casos de uso frecuentes
53
+
54
+ ### Verificar que una ruta dev renderiza
55
+
56
+ ```bash
57
+ agent-browser open http://localhost:3000/ruta
58
+ agent-browser snapshot -i # leer si hay errores o elementos esperados
59
+ agent-browser screenshot check.png
60
+ agent-browser close
61
+ ```
62
+
63
+ ### Diff visual entre dos versiones
64
+
65
+ ```bash
66
+ # Tomar baseline antes del cambio
67
+ agent-browser open http://localhost:3000/pagina && agent-browser screenshot baseline.png
68
+
69
+ # Después del cambio
70
+ agent-browser open http://localhost:3000/pagina && agent-browser diff screenshot --baseline baseline.png
71
+ ```
72
+
73
+ ### Testear en mobile viewport
74
+
75
+ ```bash
76
+ agent-browser set device "iPhone 14"
77
+ agent-browser open <url>
78
+ agent-browser screenshot mobile.png
79
+ agent-browser close
80
+ ```
81
+
82
+ ### Extraer contenido de una URL
83
+
84
+ ```bash
85
+ agent-browser open <url>
86
+ agent-browser snapshot # árbol completo, sin filtro -i
87
+ agent-browser get text "#main" # extraer texto de un selector
88
+ agent-browser close
89
+ ```
90
+
91
+ ### Verificar web vitals
92
+
93
+ ```bash
94
+ agent-browser vitals <url> --json # LCP, CLS, TTFB, FCP, INP
95
+ ```
96
+
97
+ ### Inspeccionar network requests
98
+
99
+ ```bash
100
+ agent-browser open <url>
101
+ agent-browser wait --load networkidle
102
+ agent-browser network requests --type xhr,fetch --json # APIs llamadas
103
+ agent-browser network requests --method POST --json # solo POSTs
104
+ ```
105
+
106
+ ---
107
+
108
+ ## Selección de elementos
109
+
110
+ ```bash
111
+ # Por ref del snapshot (recomendado — determinístico)
112
+ agent-browser click @e2
113
+
114
+ # Por CSS selector
115
+ agent-browser click "#submit-btn"
116
+ agent-browser click ".card:first-child"
117
+
118
+ # Por semántica (más robusto que CSS en apps dinámicas)
119
+ agent-browser find role button click --name "Guardar"
120
+ agent-browser find label "Email" fill "test@test.com"
121
+ agent-browser find text "Aceptar todo" click
122
+ ```
123
+
124
+ ---
125
+
126
+ ## Captura de screenshots
127
+
128
+ ```bash
129
+ agent-browser screenshot # PNG a /tmp, auto-named
130
+ agent-browser screenshot ./shots/page.png # path específico
131
+ agent-browser screenshot --full # full page scroll
132
+ agent-browser screenshot --annotate # overlay con refs numerados
133
+ agent-browser pdf report.pdf # PDF de la página actual
134
+ ```
135
+
136
+ Con `--annotate`, los labels `[N]` corresponden a `@eN` — útil para debuggear
137
+ qué elemento es qué en páginas densas.
138
+
139
+ ---
140
+
141
+ ## Opciones útiles para testing local
142
+
143
+ ```bash
144
+ # Ignorar HTTPS self-signed (localhost con cert local)
145
+ agent-browser --ignore-https-errors open https://localhost:3000
146
+
147
+ # Dark/Light mode
148
+ agent-browser set media dark
149
+ agent-browser screenshot dark-mode.png
150
+
151
+ # Viewport custom
152
+ agent-browser set viewport 1440 900
153
+ agent-browser set viewport 375 812 # iPhone SE
154
+ ```
155
+
156
+ ---
157
+
158
+ ## Diagnóstico si algo falla
159
+
160
+ ```bash
161
+ agent-browser doctor --quick # verifica instalación de Chrome y daemon
162
+ agent-browser console # ver errores de JS en la página
163
+ agent-browser errors # uncaught exceptions
164
+ agent-browser --headed open <url> # abrir visible para debuggear manualmente
165
+ ```
166
+
167
+ Si el binario no está en PATH:
168
+ - Buscar con: `which agent-browser` o `npm root -g`
169
+ - Invocar con ruta completa mientras se resuelve el PATH
170
+
171
+ ---
172
+
173
+ ## Relación con otros skills
174
+
175
+ - `security-audit`: usar browser-test para verificar visualmente que no hay info sensible expuesta en la UI.
176
+ - `new-feature`: al terminar una feature con UI, correr browser-test para capturar screenshot de evidencia.
177
+ - No depende de otros skills (es standalone).
@@ -0,0 +1,163 @@
1
+ # Skill: db-migrate
2
+
3
+ Flujo seguro para ejecutar migraciones de base de datos. Compatible con Prisma, Drizzle,
4
+ ActiveRecord (Rails), Alembic (Python) y Goose (Go).
5
+
6
+ Triggers: /db-migrate, "migrar schema", "actualizar base de datos", "migrar BD",
7
+ "cambios en schema", "nueva migración".
8
+
9
+ ---
10
+
11
+ ## Cuándo usar este skill
12
+
13
+ - Al modificar el schema de la base de datos
14
+ - Antes y después de agregar modelos, columnas o índices
15
+ - Al resolver conflictos de migración entre branches
16
+
17
+ ---
18
+
19
+ ## Paso 1 — Determinar ambiente y ORM
20
+
21
+ El ORM está en `project.yaml` bajo `stack.database`. El ambiente determina el flujo:
22
+
23
+ | Ambiente | Objetivo |
24
+ |----------|---------|
25
+ | **Desarrollo local** | Iteración rápida, puede reiniciarse |
26
+ | **Staging** | Igual que producción, con datos de prueba |
27
+ | **Producción** | Sin pérdida de datos, con backup previo |
28
+
29
+ ---
30
+
31
+ ## Paso 2 — Validar antes de migrar (siempre)
32
+
33
+ ### Prisma
34
+ ```bash
35
+ npx prisma validate # verifica que el schema compila
36
+ npx tsc --noEmit # verifica que los tipos siguen siendo válidos
37
+ ```
38
+
39
+ ### Drizzle
40
+ ```bash
41
+ npx drizzle-kit check # detecta drift entre schema y BD
42
+ npx tsc --noEmit
43
+ ```
44
+
45
+ ### ActiveRecord (Rails)
46
+ ```bash
47
+ rails db:migrate:status # ver migraciones pendientes
48
+ ```
49
+
50
+ ### Alembic (Python)
51
+ ```bash
52
+ alembic check # compara heads con BD actual
53
+ ```
54
+
55
+ ### Goose (Go)
56
+ ```bash
57
+ goose status # ver migraciones pendientes
58
+ ```
59
+
60
+ ---
61
+
62
+ ## Paso 3 — Ejecutar migración
63
+
64
+ ### Desarrollo
65
+
66
+ **Prisma**
67
+ ```bash
68
+ npx prisma migrate dev --name <descripcion-snake-case>
69
+ # o para sync rápido sin historial:
70
+ npx prisma db push
71
+ ```
72
+
73
+ **Drizzle**
74
+ ```bash
75
+ npx drizzle-kit push # sync directo
76
+ # o con historial:
77
+ npx drizzle-kit generate && npx drizzle-kit migrate
78
+ ```
79
+
80
+ **Rails**
81
+ ```bash
82
+ rails db:migrate
83
+ ```
84
+
85
+ **Alembic**
86
+ ```bash
87
+ alembic revision --autogenerate -m "descripcion"
88
+ alembic upgrade head
89
+ ```
90
+
91
+ **Goose**
92
+ ```bash
93
+ goose create descripcion sql
94
+ goose up
95
+ ```
96
+
97
+ ---
98
+
99
+ ### Producción — pasos adicionales obligatorios
100
+
101
+ 1. **Backup ANTES de migrar**
102
+ ```bash
103
+ # PostgreSQL genérico:
104
+ pg_dump $DATABASE_URL > backup_$(date +%Y%m%d_%H%M%S).sql
105
+
106
+ # O usar el script del proyecto si existe (db:backup:prod)
107
+ ```
108
+
109
+ 2. **Verificar que la migración no es destructiva**
110
+ ```bash
111
+ # Leer el archivo SQL generado antes de aplicar
112
+ # Señales de peligro: DROP COLUMN, DROP TABLE, TRUNCATE, NOT NULL sin default
113
+ ```
114
+
115
+ 3. **Aplicar en producción**
116
+
117
+ **Prisma**: `npx prisma migrate deploy` (nunca `db push` en prod)
118
+
119
+ **Drizzle**: `npx drizzle-kit migrate` (el proyecto debe tener un script dedicado)
120
+
121
+ **Rails**: `RAILS_ENV=production rails db:migrate`
122
+
123
+ **Alembic**: `alembic upgrade head` (con DATABASE_URL de producción)
124
+
125
+ **Goose**: `goose -env production up`
126
+
127
+ ---
128
+
129
+ ## Paso 4 — Post-migración (siempre)
130
+
131
+ 1. **Regenerar cliente/tipos** (si aplica)
132
+ ```bash
133
+ npx prisma generate # Prisma
134
+ npx drizzle-kit generate # Drizzle (si usa tipos generados)
135
+ ```
136
+
137
+ 2. **Verificar que el build sigue pasando**
138
+ ```bash
139
+ # TypeScript: pnpm build / npm run build
140
+ # Python: mypy . / pytest
141
+ # Go: go build ./...
142
+ ```
143
+
144
+ 3. **Actualizar documentación** — si el proyecto tiene knowledge base (Obsidian, wiki), actualizar la sección de base de datos.
145
+
146
+ ---
147
+
148
+ ## Señales de alerta — STOP y consultar
149
+
150
+ ```
151
+ ✗ La migración contiene DROP COLUMN o DROP TABLE en producción sin backup confirmado
152
+ ✗ El ORM reporta "drift" entre schema y BD — investigar causa antes de continuar
153
+ ✗ npx prisma migrate reset o rails db:schema:load en producción → borra todo
154
+ ✗ --force-reset / --force en cualquier contexto productivo
155
+ ```
156
+
157
+ ---
158
+
159
+ ## Relación con otros skills
160
+
161
+ - `new-feature` lo invoca cuando la feature requiere cambios de schema.
162
+ - No depende de otros skills (es standalone).
163
+ - Si el proyecto usa Obsidian, actualizar vault después de migrar en producción.
@@ -0,0 +1,147 @@
1
+ # Skill: local2prod
2
+
3
+ Flujo completo de publicación a producción. Compatible con Vercel, Railway, Fly.io,
4
+ GitHub Actions y pipelines custom.
5
+
6
+ NUNCA dar una tarea por terminada sin que el deploy esté en estado READY/SUCCESS.
7
+
8
+ Triggers: /local2prod, "publicar", "deploy", "subir a producción", "push a prod",
9
+ "lanzar cambios", "ir a producción".
10
+
11
+ ---
12
+
13
+ ## Cuándo usar este skill
14
+
15
+ Al terminar una feature y querer desplegarla a producción.
16
+ El provider de deploy está en `project.yaml` bajo `deploy.provider`.
17
+
18
+ ---
19
+
20
+ ## Paso 1 — Commit
21
+
22
+ Si hay cambios sin commitear:
23
+
24
+ ```bash
25
+ git add <archivos relevantes> # preferir archivos específicos, no git add -A
26
+ git status # confirmar qué va al commit
27
+
28
+ git commit -m "tipo(scope): descripción en imperativo
29
+
30
+ Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
31
+ ```
32
+
33
+ Si ya hay un commit listo, ir directo al Paso 2.
34
+
35
+ ---
36
+
37
+ ## Paso 2 — Push
38
+
39
+ ```bash
40
+ git push origin <branch>
41
+ ```
42
+
43
+ En proyectos con trunk-based development, el push a `main` trigerea el deploy automáticamente.
44
+ En proyectos con PRs, el deploy se crea al mergear.
45
+
46
+ ---
47
+
48
+ ## Paso 3 — Esperar deploy READY
49
+
50
+ **Regla de polling — OBLIGATORIA**:
51
+ 1. Hacer UNA verificación, leer el resultado, reportar el estado.
52
+ 2. Si sigue en Building/Running: decirle al usuario el estado actual y esperar **~60 segundos** antes de la siguiente verificación.
53
+ 3. **NUNCA** encadenar verificaciones automáticamente sin pausa.
54
+ 4. Máximo 1 verificación por minuto.
55
+
56
+ ### Por provider
57
+
58
+ **Vercel** (leer provider config de project.yaml o env vars):
59
+ ```bash
60
+ vercel ls --scope <teamId> 2>&1 | head -8
61
+ # Columna Status: ● Building → esperar | ● Ready → OK | ✗ Error → ver logs
62
+ ```
63
+
64
+ **Railway**:
65
+ ```bash
66
+ railway status
67
+ # o: railway run --service <name> -- echo OK
68
+ ```
69
+
70
+ **Fly.io**:
71
+ ```bash
72
+ fly status --app <app-name>
73
+ # Buscar: Machines running
74
+ ```
75
+
76
+ **GitHub Actions**:
77
+ ```bash
78
+ gh run list --limit 3
79
+ gh run watch <run-id> # bloquea hasta que termine
80
+ ```
81
+
82
+ **Custom / otro**:
83
+ ```bash
84
+ # Usar el comando definido en project.yaml bajo deploy.check_command
85
+ ```
86
+
87
+ ### Si hay ERROR
88
+
89
+ ```bash
90
+ # Vercel:
91
+ vercel inspect <deployment-url> --logs 2>&1 | tail -40
92
+
93
+ # GitHub Actions:
94
+ gh run view <run-id> --log-failed
95
+
96
+ # Railway / Fly:
97
+ # Ver logs en el dashboard del provider
98
+ ```
99
+
100
+ 1. Identificar el error (build, typecheck, runtime)
101
+ 2. Corregir el código
102
+ 3. Volver al Paso 1
103
+
104
+ ---
105
+
106
+ ## Paso 4 — Verificar runtime logs
107
+
108
+ Una vez que el deploy está READY, verificar que no haya errores de runtime (500, crashes, errores de DB):
109
+
110
+ ```bash
111
+ # Vercel:
112
+ vercel logs <deployment-url> 2>&1 | tail -20
113
+
114
+ # Fly:
115
+ fly logs --app <app-name>
116
+
117
+ # Railway:
118
+ railway logs
119
+ ```
120
+
121
+ Si hay errores → corregir y repetir desde Paso 1.
122
+
123
+ ---
124
+
125
+ ## Paso 5 — Actualizar documentación [OPCIONAL]
126
+
127
+ Si el proyecto tiene un knowledge base configurado (Obsidian, wiki, Notion):
128
+
129
+ - Si hubo cambios de infra (nuevas env vars, cambios de schema, nuevas rutas) → actualizar la sección de deploy/infra.
130
+ - Si el proyecto usa `obsidian-sync` → invocar ese skill ahora.
131
+
132
+ ---
133
+
134
+ ## Reglas críticas
135
+
136
+ - **NUNCA** declarar la tarea terminada sin `state: READY / SUCCESS` confirmado.
137
+ - **NUNCA** asumir que el push implica deploy exitoso — siempre verificar.
138
+ - Si el deploy falla 3 veces seguidas → notificar al usuario y detener. No seguir en loop automático.
139
+ - Si el pipeline queda en QUEUED por más de 2 minutos → investigar si hay otro deploy bloqueando.
140
+
141
+ ---
142
+
143
+ ## Relación con otros skills
144
+
145
+ - `new-feature` lo invoca como último paso del flujo de implementación.
146
+ - `obsidian-sync` puede ser invocado en el Paso 5 si está configurado (opcional).
147
+ - No tiene dependencias obligatorias — puede usarse standalone.
@@ -0,0 +1,155 @@
1
+ # Skill: new-feature
2
+
3
+ Checklist completo para implementar una nueva feature desde planificación hasta deploy.
4
+ Orquesta los otros skills del proyecto en el orden correcto.
5
+
6
+ Triggers: /new-feature, "nueva feature", "quiero agregar", "implementar",
7
+ "agregar funcionalidad", "nueva sección", "empezar feature".
8
+
9
+ ---
10
+
11
+ ## Cuándo usar este skill
12
+
13
+ Al comenzar a implementar cualquier feature nueva, por pequeña que sea.
14
+ Asegura que no se saltee la spec, la seguridad ni el deploy.
15
+
16
+ ---
17
+
18
+ ## Fase 1 — Verificar que existe la spec
19
+
20
+ ```
21
+ ¿Existe docs/specs/<ID>-<nombre>.md con estado APPROVED?
22
+ → Sí: continuar
23
+ → No: STOP — usar el skill /spec para crear la spec primero
24
+ ```
25
+
26
+ Leer la spec antes de escribir una sola línea de código.
27
+ Identificar qué módulos toca: BD, API, UI, infra, auth.
28
+
29
+ ---
30
+
31
+ ## Fase 2 — Leer documentación existente del área
32
+
33
+ Si el proyecto tiene un knowledge base (Obsidian, wiki, docs/):
34
+
35
+ | Si la feature toca... | Leer primero... |
36
+ |-----------------------|-----------------|
37
+ | API / endpoints | docs de API del proyecto |
38
+ | Schema de BD | docs de BD / migraciones previas |
39
+ | UI / componentes | design system del proyecto |
40
+ | Auth / sesiones | docs de auth del proyecto |
41
+ | Deploy / infra | docs de infra / variables de entorno |
42
+
43
+ Si el proyecto usa `obsidian-sync`: leer las notas del vault antes de implementar.
44
+
45
+ ---
46
+
47
+ ## Fase 3 — Evaluar si crear agent team
48
+
49
+ **Crear team de agentes cuando**:
50
+ - La feature toca más de 3 archivos en capas distintas (BD + API + UI)
51
+ - El trabajo es paralelizable (backend y frontend pueden ir en paralelo)
52
+ - La feature tiene criterios de compliance que requieren review independiente
53
+
54
+ **NO crear team cuando**:
55
+ - Es un cambio en 1-2 archivos
56
+ - Es un bug fix puntual
57
+ - Es una consulta o lectura de código
58
+
59
+ Si se crea team → usar el skill `phase-kickoff` para coordinar el spawn de agentes.
60
+
61
+ ---
62
+
63
+ ## Fase 4 — Checklist de seguridad antes de implementar API routes
64
+
65
+ Invocar el skill `/security-audit` como checklist mental antes de escribir cualquier endpoint:
66
+
67
+ - [ ] ¿El endpoint verifica autenticación?
68
+ - [ ] ¿El endpoint verifica autorización por rol?
69
+ - [ ] ¿Si accede por ID, verifica ownership del recurso?
70
+ - [ ] ¿El input del body está validado con un schema explícito?
71
+ - [ ] ¿Las queries usan parámetros preparados (no interpolación)?
72
+
73
+ ---
74
+
75
+ ## Fase 5 — Orden de implementación recomendado
76
+
77
+ ```
78
+ 1. Schema de BD (si hay modelos nuevos)
79
+ → Invocar skill /db-migrate para el flujo seguro
80
+
81
+ 2. Types / interfaces compartidos
82
+ → Definir antes del backend para que el frontend pueda consumirlos
83
+
84
+ 3. Backend — API / servicios
85
+ → Tests junto con el código, no al final
86
+
87
+ 4. Frontend — UI / componentes
88
+ → Consume los tipos ya definidos
89
+
90
+ 5. Build check
91
+ → Verificar que no hay errores de compilación antes de commitear
92
+ ```
93
+
94
+ ---
95
+
96
+ ## Fase 6 — Post-implementación (no saltear)
97
+
98
+ 1. **Actualizar la spec** con decisiones tomadas durante la implementación
99
+ (agregar en sección "Notas de implementación" del archivo de spec)
100
+
101
+ 2. **Verificación visual** [si la feature tiene UI]
102
+ - Si el proyecto tiene `browser-test` activo → invocar `/browser-test` para tomar screenshot de evidencia
103
+ - Verificar estados: loading, error, vacío, con datos
104
+
105
+ 3. **Actualizar documentación del proyecto** [si aplica]
106
+ - Si el proyecto usa `obsidian-sync` → invocar ese skill ahora
107
+ - Si hay wiki o docs/ → actualizar la sección correspondiente
108
+
109
+ 4. **Deploy** → invocar skill `/local2prod`
110
+ - Esperar estado READY/SUCCESS antes de declarar la feature terminada
111
+
112
+ 5. **Marcar spec como IMPLEMENTED**
113
+ ```bash
114
+ # En docs/specs/<ID>-<nombre>.md, cambiar:
115
+ # > Estado: APPROVED
116
+ # por:
117
+ # > Estado: IMPLEMENTED
118
+ ```
119
+
120
+ 5. **Actualizar CLAUDE.md** — mover el ID de spec de "En curso" a "Completadas"
121
+
122
+ ---
123
+
124
+ ## Checklist final
125
+
126
+ - [ ] Spec leída y estado APPROVED verificado
127
+ - [ ] Documentación del área leída antes de implementar
128
+ - [ ] Checklist de seguridad aplicado a endpoints nuevos
129
+ - [ ] DB migrada correctamente (dev y prod si aplica)
130
+ - [ ] Build pasando sin errores
131
+ - [ ] Screenshot de evidencia tomado (si hay UI y `browser-test` activo)
132
+ - [ ] Spec actualizada con decisiones de implementación
133
+ - [ ] Documentación del proyecto actualizada
134
+ - [ ] Deploy exitoso (estado READY confirmado)
135
+ - [ ] Spec marcada como IMPLEMENTED
136
+
137
+ ---
138
+
139
+ ## Relación con otros skills
140
+
141
+ Este skill orquesta los siguientes — no los reemplaza, los invoca en orden:
142
+
143
+ ```
144
+ new-feature
145
+ ├── spec (Fase 1 — verificar/crear spec)
146
+ ├── phase-kickoff (Fase 3 — si se crea team de agentes)
147
+ ├── security-audit (Fase 4 — checklist de seguridad)
148
+ ├── db-migrate (Fase 5 — si hay cambios de schema)
149
+ ├── browser-test (Fase 6 — [OPCIONAL] screenshot de evidencia si hay UI)
150
+ ├── obsidian-sync (Fase 6 — [OPCIONAL] si el proyecto lo tiene configurado)
151
+ └── local2prod (Fase 6 — deploy a producción)
152
+ ```
153
+
154
+ Dependencias opcionales: `browser-test` solo se invoca si está en `project.yaml` bajo `skills.active`.
155
+ `obsidian-sync` solo se invoca si está en `project.yaml` bajo `skills.integrations`.