@saulwade/swl-ses 1.4.1 → 1.5.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 (136) hide show
  1. package/CLAUDE.md +3 -3
  2. package/README.md +561 -560
  3. package/agentes/nemesis-auditor-swl.md +161 -161
  4. package/bin/swl-mcp-server.js +49 -22
  5. package/bin/swl-ses.js +74 -0
  6. package/comandos/swl/.evolved.json +22 -22
  7. package/comandos/swl/contribuir.md +233 -233
  8. package/comandos/swl/ejecutar-fase.md +33 -4
  9. package/comandos/swl/metricas.md +72 -0
  10. package/comandos/swl/nemesis.md +122 -122
  11. package/gateway/lib/event-channel.js +191 -191
  12. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  13. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  14. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  15. package/habilidades/discutir-fase/SKILL.md +50 -2
  16. package/habilidades/doubt-driven-review/SKILL.md +171 -171
  17. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  18. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -0
  19. package/habilidades/eval-framework/SKILL.md +212 -212
  20. package/habilidades/feynman-auditor-swl/SKILL.md +123 -123
  21. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
  22. package/habilidades/harness-claude-code/SKILL.md +299 -299
  23. package/habilidades/infra-github-actions/SKILL.md +166 -166
  24. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  25. package/habilidades/manejo-errores/.evolved.json +8 -8
  26. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  27. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  28. package/habilidades/patrones-python/SKILL.md +229 -229
  29. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  30. package/habilidades/planear-fase/SKILL.md +319 -319
  31. package/habilidades/protocolo-revision-swl/SKILL.md +276 -0
  32. package/habilidades/release-semver/.evolved.json +8 -8
  33. package/habilidades/state-inconsistency-auditor-swl/SKILL.md +166 -166
  34. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
  35. package/habilidades/testing-python/SKILL.md +340 -340
  36. package/habilidades/verificar-trabajo/SKILL.md +49 -5
  37. package/habilidades/web-fetcher-routing/SKILL.md +75 -75
  38. package/hooks/claudemd-bloat-detector.js +161 -161
  39. package/hooks/lib/agent-routing.js +107 -107
  40. package/hooks/lib/auto-consolidator.js +335 -335
  41. package/hooks/lib/error-classifier.js +308 -308
  42. package/hooks/lib/merkle-audit.js +96 -96
  43. package/hooks/lib/provenance-tracker.js +191 -191
  44. package/hooks/lib/rate-limit-tracker.js +253 -253
  45. package/hooks/lib/resource-quota.js +122 -122
  46. package/hooks/lib/retry-jitter.js +165 -165
  47. package/hooks/lib/security-net.js +201 -201
  48. package/hooks/lib/skill-auditor.js +588 -588
  49. package/hooks/lib/sync-status.js +228 -228
  50. package/hooks/lib/taint-tracker.js +107 -107
  51. package/hooks/lib/text-similarity.js +241 -241
  52. package/hooks/lib/toon-compressor.js +245 -245
  53. package/hooks/registro-turnos.js +209 -209
  54. package/hooks/sugerir-regenerar-inventario.js +170 -170
  55. package/hooks/validar-formato-post-subagente.js +140 -140
  56. package/hooks/validar-memoria-hook.js +218 -218
  57. package/instintos/prompt-appendices.yaml +57 -57
  58. package/manifiestos/agent-output-schemas.json +57 -57
  59. package/manifiestos/modulos.json +1321 -1262
  60. package/manifiestos/perfiles.json +2 -1
  61. package/manifiestos/skills-lock.json +1114 -1114
  62. package/package.json +3 -3
  63. package/plantillas/auditor-veto-template.md +105 -105
  64. package/plantillas/github-workflows/README.md +47 -47
  65. package/plantillas/github-workflows/release-please.yml +44 -44
  66. package/plantillas/github-workflows/swl-ci.yml +107 -107
  67. package/plantillas/github-workflows/swl-security.yml +51 -51
  68. package/plugin.json +351 -343
  69. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  70. package/reglas/arreglar-al-detectar.md +147 -147
  71. package/reglas/fragmentos-compartidos.md +152 -152
  72. package/reglas/harness-claude-code.md +213 -213
  73. package/reglas/usar-context7.md +226 -226
  74. package/schemas/diary-entry.schema.json +80 -80
  75. package/scripts/audit-tools/audit-history.js +330 -330
  76. package/scripts/audit-tools/bundle-tracker.js +290 -290
  77. package/scripts/audit-tools/canary-monitor.js +352 -352
  78. package/scripts/audit-tools/code-profiler.js +605 -605
  79. package/scripts/audit-tools/dep-doctor.js +320 -320
  80. package/scripts/audit-tools/env-validator.js +206 -206
  81. package/scripts/audit-tools/lib/fs-walk.js +48 -48
  82. package/scripts/audit-tools/lib/output.js +23 -23
  83. package/scripts/audit-tools/migration-checker.js +392 -392
  84. package/scripts/audit-tools/pentest-scanner.js +1436 -1436
  85. package/scripts/benchmark-memoria.js +167 -167
  86. package/scripts/configurar-branch-protection.js +418 -418
  87. package/scripts/derivar-feature-list.js +489 -0
  88. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  89. package/scripts/doctor.js +31 -4
  90. package/scripts/field-report.js +199 -199
  91. package/scripts/generar-checklists-consolidados.js +273 -273
  92. package/scripts/generar-inventario.js +420 -420
  93. package/scripts/generar-matriz-lenguajes.js +271 -271
  94. package/scripts/instalador.js +56 -5
  95. package/scripts/lib/artefactos-python.js +43 -43
  96. package/scripts/lib/benchmark-metrics.js +160 -160
  97. package/scripts/lib/budget-enforcer.js +252 -252
  98. package/scripts/lib/configurar-ci.js +380 -380
  99. package/scripts/lib/contadores-inventario.js +217 -217
  100. package/scripts/lib/detectar-runtime.js +75 -9
  101. package/scripts/lib/detectar-stack-detallado.js +307 -307
  102. package/scripts/lib/diary-entry.js +234 -234
  103. package/scripts/lib/estado.js +13 -1
  104. package/scripts/lib/eval-metrics-store.js +218 -218
  105. package/scripts/lib/eval-quality.js +171 -171
  106. package/scripts/lib/eval-schemas.js +144 -144
  107. package/scripts/lib/eval-self-correct.js +106 -106
  108. package/scripts/lib/eval-validator.js +185 -185
  109. package/scripts/lib/expandir-targets.js +71 -0
  110. package/scripts/lib/jaccard-similarity.js +98 -98
  111. package/scripts/lib/longmemeval-runner.js +125 -125
  112. package/scripts/lib/manifiestos.js +42 -1
  113. package/scripts/lib/npm-version.js +261 -261
  114. package/scripts/lib/paquetes-conocidos.js +50 -50
  115. package/scripts/lib/parsear-opciones.js +3 -0
  116. package/scripts/lib/prompt-builder.js +264 -264
  117. package/scripts/lib/rrf-fusion.js +175 -175
  118. package/scripts/lib/scoring-instintos.js +277 -277
  119. package/scripts/lib/semantic-search.js +252 -252
  120. package/scripts/lib/toml-merge.js +204 -0
  121. package/scripts/lib/transformadores/base.js +43 -9
  122. package/scripts/lib/transformadores/codex.js +375 -115
  123. package/scripts/lib/transformadores/cursor.js +359 -0
  124. package/scripts/lib/transformadores/index.js +2 -0
  125. package/scripts/limpiar-artefactos-python.js +131 -131
  126. package/scripts/mcp-server/README.md +122 -80
  127. package/scripts/mcp-server/auth.js +105 -0
  128. package/scripts/mcp-server/cache.js +106 -0
  129. package/scripts/mcp-server/handlers.js +386 -206
  130. package/scripts/mcp-server/telemetry.js +78 -0
  131. package/scripts/migrar-csv-a-array.js +168 -168
  132. package/scripts/migrar-fase-dominio.js +201 -201
  133. package/scripts/publicar.js +511 -511
  134. package/scripts/run-eval.js +141 -141
  135. package/scripts/validar-manifest.js +231 -195
  136. package/scripts/validar-userland-vacio.js +110 -110
@@ -1,226 +1,226 @@
1
- # Regla: Consultar Context7 antes de generar código con dependencias externas
2
-
3
- Esta regla es OBLIGATORIA para todo agente o skill del sistema SWL que
4
- genere código que use librerías, frameworks, SDKs o APIs externas. La regla
5
- se carga automáticamente para los agentes de stack (`backend-*-swl`,
6
- `frontend-*-swl`, `mobile-*-swl`, `implementador-swl`, `llm-apps-swl`,
7
- `pagos-swl`, `datos-swl`) y para skills de implementación.
8
-
9
- ---
10
-
11
- ## Por qué existe esta regla
12
-
13
- El conocimiento del modelo sobre librerías de terceros tiene fecha de
14
- corte. Una librería que en el corte estaba en la versión X y era la
15
- recomendación, hoy puede estar:
16
-
17
- - En una versión Y mayor con cambios incompatibles
18
- - Deprecada y reemplazada por otra librería
19
- - Con vulnerabilidades conocidas que requieren un parche
20
- - Renombrada o migrada a otra organización
21
-
22
- Generar código sin verificar la versión actual genera tres clases de
23
- defectos en producción:
24
-
25
- 1. **Imports a APIs deprecadas** que arrastran warnings o se eliminan
26
- en próximas versiones (ejemplo histórico: `@xenova/transformers`
27
- migrado a `@huggingface/transformers`).
28
- 2. **Dependencias transitivas obsoletas** que el usuario ve como
29
- warnings al instalar (ejemplo: `prebuild-install@7.1.3` arrastrada
30
- por una librería que el sistema eligió sin verificar la salud).
31
- 3. **Vulnerabilidades CVE conocidas** que están parchadas en versiones
32
- más nuevas que el modelo no conoce.
33
-
34
- Context7 (MCP `mcp__claude_ai_Context7__query-docs` y
35
- `mcp__claude_ai_Context7__resolve-library-id`) provee documentación
36
- actualizada de librerías y frameworks. Su uso es la primera línea de
37
- defensa contra estos tres problemas.
38
-
39
- ---
40
-
41
- ## Cuándo consultar Context7 (OBLIGATORIO)
42
-
43
- Antes de:
44
-
45
- 1. **Agregar una nueva dependencia** a `package.json`, `requirements.txt`,
46
- `pom.xml`, `Cargo.toml`, `go.mod`, `composer.json`, `Package.swift` o
47
- equivalente.
48
- 2. **Generar código que importe o use una librería externa** que no
49
- estaba ya en uso en el proyecto, aunque la librería ya esté
50
- instalada.
51
- 3. **Actualizar la versión** de una dependencia existente.
52
- 4. **Migrar de una librería a otra** alternativa (ej.
53
- `axios` → `fetch`, `moment` → `date-fns`, `jest` → `vitest`).
54
- 5. **Resolver un warning de deprecación** de una dependencia
55
- transitiva.
56
- 6. **Implementar un patrón nuevo** del framework (ej. Server Actions
57
- en Next.js, Signals en Angular, Suspense en React) — la API
58
- correcta cambia rápido.
59
-
60
- NO es necesario consultar Context7 cuando:
61
-
62
- - La librería es interna al proyecto SWL (`scripts/lib/*`,
63
- `hooks/lib/*`).
64
- - Es la biblioteca estándar del lenguaje (Node `fs`, Python `os`).
65
- - Es código que no usa dependencias externas (algoritmos, lógica de
66
- negocio sin librerías de terceros).
67
- - El cambio es trivial (renombrar variable, formatear).
68
-
69
- ---
70
-
71
- ## Cómo consultar Context7
72
-
73
- El MCP de Context7 expone dos herramientas principales:
74
-
75
- ```
76
- mcp__claude_ai_Context7__resolve-library-id(libraryName)
77
- → Resuelve un nombre de librería (ej. "react", "next.js") al ID
78
- canónico que Context7 usa internamente.
79
-
80
- mcp__claude_ai_Context7__query-docs(library, topic, version?)
81
- → Devuelve documentación actualizada de la librería sobre el
82
- topic específico. Acepta versión opcional.
83
- ```
84
-
85
- Flujo típico:
86
-
87
- 1. Resolver el ID de la librería:
88
- ```
89
- const id = mcp__claude_ai_Context7__resolve-library-id({
90
- libraryName: "next.js"
91
- });
92
- ```
93
-
94
- 2. Consultar el tema específico:
95
- ```
96
- const docs = mcp__claude_ai_Context7__query-docs({
97
- library: id,
98
- topic: "Server Actions",
99
- version: "16"
100
- });
101
- ```
102
-
103
- 3. Verificar:
104
- - ¿La librería sigue siendo la recomendada o está deprecada?
105
- - ¿Hay una alternativa migrada que deberíamos usar?
106
- - ¿La API que voy a generar es la actual o cambió?
107
- - ¿La versión que recomienda Context7 coincide con la del
108
- `package.json` del proyecto?
109
-
110
- ---
111
-
112
- ## Reglas estrictas
113
-
114
- ### NUNCA agregar dependencia sin verificar
115
-
116
- Antes de escribir `npm install <paquete>`, `pip install <paquete>`,
117
- `go get <paquete>` o equivalente:
118
-
119
- - Consultar Context7 para confirmar que la librería sigue activa.
120
- - Confirmar la versión más reciente compatible con el resto del
121
- stack del proyecto.
122
- - Si Context7 reporta deprecación, **NO la uses**. Buscar la
123
- alternativa migrada.
124
-
125
- ### NUNCA generar código con API obsoleta
126
-
127
- Si el usuario pide implementar X usando librería Y:
128
-
129
- - Consultar Context7 sobre cómo se hace X en la versión actual de Y.
130
- - Si la API que aparece en el contexto del modelo difiere de la que
131
- Context7 reporta como actual, **usar la de Context7**.
132
- - Documentar en un comentario corto la versión consultada y la
133
- fecha si la API es notable.
134
-
135
- ### NUNCA copiar ejemplos de la web sin verificar versión
136
-
137
- Stack Overflow, blogs y tutoriales tienen alta probabilidad de
138
- mostrar código deprecado. Si el agente consulta una web (vía
139
- WebSearch o WebFetch) y obtiene un ejemplo, ese ejemplo debe
140
- validarse contra Context7 antes de incorporarlo.
141
-
142
- ---
143
-
144
- ## Excepción: Context7 no responde o no tiene la librería
145
-
146
- Si Context7 no tiene documentación disponible para una librería
147
- específica:
148
-
149
- 1. **Documentar en el código** que Context7 no respondió y la API se
150
- tomó de la fuente oficial (npm registry, docs del repo).
151
- 2. **Verificar al menos**: la librería existe, no está deprecada en
152
- npm/PyPI, su última publicación es reciente (≤ 12 meses).
153
- 3. **NO bloquear** el flujo del usuario por este caso — proceder con
154
- diligencia razonable.
155
-
156
- ---
157
-
158
- ## Auditoría retroactiva
159
-
160
- Esta regla aplica también al código existente del proyecto SWL:
161
-
162
- - Si durante un refactor se detecta una dependencia que arrastra
163
- warnings de deprecación, abrir un ticket para auditarla con
164
- Context7 y migrar si hay alternativa actual.
165
- - El comando `/swl:auditar-deps` (cuando esté disponible) debe
166
- cruzar las dependencias del proyecto contra Context7 para
167
- detectar deprecaciones silenciosas.
168
-
169
- ---
170
-
171
- ## Aplicabilidad por agente
172
-
173
- | Agente | Aplica | Cuándo |
174
- |---|---|---|
175
- | `backend-python-swl` | SÍ | Al generar código FastAPI/Django/SQLAlchemy |
176
- | `backend-node-swl` | SÍ | Al generar código Express/Fastify/NestJS |
177
- | `backend-java-swl` | SÍ | Al generar código Spring Boot/JPA |
178
- | `backend-go-swl` | SÍ | Al generar código Go con frameworks |
179
- | `backend-rust-swl` | SÍ | Al generar código Axum/Actix |
180
- | `backend-csharp-swl` | SÍ | Al generar código ASP.NET Core |
181
- | `frontend-react-swl` | SÍ | Al generar código React/Next.js |
182
- | `frontend-angular-swl` | SÍ | Al generar código Angular |
183
- | `frontend-css-swl` | SÍ | Al usar PostCSS/Tailwind plugins |
184
- | `frontend-tailwind-swl` | SÍ | Al usar Tailwind v4+ APIs |
185
- | `frontend-swl` | SÍ | Al usar Vue/Svelte/Lit |
186
- | `mobile-android-swl` | SÍ | Al usar Jetpack Compose libs |
187
- | `mobile-ios-swl` | SÍ | Al usar SwiftUI/Combine |
188
- | `mobile-cross-swl` | SÍ | Al usar React Native/Flutter |
189
- | `implementador-swl` | SÍ | Generalista — siempre |
190
- | `llm-apps-swl` | SÍ | LangChain, OpenAI SDK, Anthropic SDK |
191
- | `pagos-swl` | SÍ | Stripe SDK actualizado |
192
- | `datos-swl` | SÍ | ORMs y drivers de BD |
193
- | `arquitecto-swl` | RECOMENDADO | Al evaluar tradeoffs entre librerías |
194
- | `revisor-codigo-swl` | RECOMENDADO | Al detectar deps deprecadas en review |
195
- | `revisor-seguridad-swl` | OBLIGATORIO | Al verificar CVEs de dependencias |
196
- | Resto de agentes | NO | No generan código con dependencias externas |
197
-
198
- ---
199
-
200
- ## Checklist de consulta Context7
201
-
202
- Antes de marcar una tarea como completa:
203
-
204
- - [ ] ¿Las dependencias agregadas/usadas se verificaron contra Context7?
205
- - [ ] ¿La versión usada está alineada con la que Context7 reporta como actual?
206
- - [ ] ¿No hay imports de APIs deprecadas según Context7?
207
- - [ ] ¿Las dependencias transitivas conocidas no son warnings de
208
- deprecación al instalar?
209
- - [ ] Si Context7 no tenía la librería, ¿se documentó el motivo?
210
-
211
- ---
212
-
213
- ## Origen de esta regla
214
-
215
- Esta regla se formalizó tras observar en la primera instalación pública
216
- de `@saulwade/swl-ses@1.0.0` (2026-04-30) un warning de
217
- `prebuild-install@7.1.3 deprecated` arrastrado por
218
- `@xenova/transformers` que estaba en `optionalDependencies`. La
219
- dependencia se eligió en una iteración anterior sin verificar Context7;
220
- la migración oficial era `@huggingface/transformers`. El warning se vio
221
- en cada `npm install` del paquete distribuido. Resuelto en v1.0.1
222
- eliminando la dependencia opcional y elevando esta regla a obligatoria
223
- para que no se repita.
224
-
225
- Memoria asociada: `feedback_usar_context7.md` (preferencia previa del
226
- usuario, formalizada como regla).
1
+ # Regla: Consultar Context7 antes de generar código con dependencias externas
2
+
3
+ Esta regla es OBLIGATORIA para todo agente o skill del sistema SWL que
4
+ genere código que use librerías, frameworks, SDKs o APIs externas. La regla
5
+ se carga automáticamente para los agentes de stack (`backend-*-swl`,
6
+ `frontend-*-swl`, `mobile-*-swl`, `implementador-swl`, `llm-apps-swl`,
7
+ `pagos-swl`, `datos-swl`) y para skills de implementación.
8
+
9
+ ---
10
+
11
+ ## Por qué existe esta regla
12
+
13
+ El conocimiento del modelo sobre librerías de terceros tiene fecha de
14
+ corte. Una librería que en el corte estaba en la versión X y era la
15
+ recomendación, hoy puede estar:
16
+
17
+ - En una versión Y mayor con cambios incompatibles
18
+ - Deprecada y reemplazada por otra librería
19
+ - Con vulnerabilidades conocidas que requieren un parche
20
+ - Renombrada o migrada a otra organización
21
+
22
+ Generar código sin verificar la versión actual genera tres clases de
23
+ defectos en producción:
24
+
25
+ 1. **Imports a APIs deprecadas** que arrastran warnings o se eliminan
26
+ en próximas versiones (ejemplo histórico: `@xenova/transformers`
27
+ migrado a `@huggingface/transformers`).
28
+ 2. **Dependencias transitivas obsoletas** que el usuario ve como
29
+ warnings al instalar (ejemplo: `prebuild-install@7.1.3` arrastrada
30
+ por una librería que el sistema eligió sin verificar la salud).
31
+ 3. **Vulnerabilidades CVE conocidas** que están parchadas en versiones
32
+ más nuevas que el modelo no conoce.
33
+
34
+ Context7 (MCP `mcp__claude_ai_Context7__query-docs` y
35
+ `mcp__claude_ai_Context7__resolve-library-id`) provee documentación
36
+ actualizada de librerías y frameworks. Su uso es la primera línea de
37
+ defensa contra estos tres problemas.
38
+
39
+ ---
40
+
41
+ ## Cuándo consultar Context7 (OBLIGATORIO)
42
+
43
+ Antes de:
44
+
45
+ 1. **Agregar una nueva dependencia** a `package.json`, `requirements.txt`,
46
+ `pom.xml`, `Cargo.toml`, `go.mod`, `composer.json`, `Package.swift` o
47
+ equivalente.
48
+ 2. **Generar código que importe o use una librería externa** que no
49
+ estaba ya en uso en el proyecto, aunque la librería ya esté
50
+ instalada.
51
+ 3. **Actualizar la versión** de una dependencia existente.
52
+ 4. **Migrar de una librería a otra** alternativa (ej.
53
+ `axios` → `fetch`, `moment` → `date-fns`, `jest` → `vitest`).
54
+ 5. **Resolver un warning de deprecación** de una dependencia
55
+ transitiva.
56
+ 6. **Implementar un patrón nuevo** del framework (ej. Server Actions
57
+ en Next.js, Signals en Angular, Suspense en React) — la API
58
+ correcta cambia rápido.
59
+
60
+ NO es necesario consultar Context7 cuando:
61
+
62
+ - La librería es interna al proyecto SWL (`scripts/lib/*`,
63
+ `hooks/lib/*`).
64
+ - Es la biblioteca estándar del lenguaje (Node `fs`, Python `os`).
65
+ - Es código que no usa dependencias externas (algoritmos, lógica de
66
+ negocio sin librerías de terceros).
67
+ - El cambio es trivial (renombrar variable, formatear).
68
+
69
+ ---
70
+
71
+ ## Cómo consultar Context7
72
+
73
+ El MCP de Context7 expone dos herramientas principales:
74
+
75
+ ```
76
+ mcp__claude_ai_Context7__resolve-library-id(libraryName)
77
+ → Resuelve un nombre de librería (ej. "react", "next.js") al ID
78
+ canónico que Context7 usa internamente.
79
+
80
+ mcp__claude_ai_Context7__query-docs(library, topic, version?)
81
+ → Devuelve documentación actualizada de la librería sobre el
82
+ topic específico. Acepta versión opcional.
83
+ ```
84
+
85
+ Flujo típico:
86
+
87
+ 1. Resolver el ID de la librería:
88
+ ```
89
+ const id = mcp__claude_ai_Context7__resolve-library-id({
90
+ libraryName: "next.js"
91
+ });
92
+ ```
93
+
94
+ 2. Consultar el tema específico:
95
+ ```
96
+ const docs = mcp__claude_ai_Context7__query-docs({
97
+ library: id,
98
+ topic: "Server Actions",
99
+ version: "16"
100
+ });
101
+ ```
102
+
103
+ 3. Verificar:
104
+ - ¿La librería sigue siendo la recomendada o está deprecada?
105
+ - ¿Hay una alternativa migrada que deberíamos usar?
106
+ - ¿La API que voy a generar es la actual o cambió?
107
+ - ¿La versión que recomienda Context7 coincide con la del
108
+ `package.json` del proyecto?
109
+
110
+ ---
111
+
112
+ ## Reglas estrictas
113
+
114
+ ### NUNCA agregar dependencia sin verificar
115
+
116
+ Antes de escribir `npm install <paquete>`, `pip install <paquete>`,
117
+ `go get <paquete>` o equivalente:
118
+
119
+ - Consultar Context7 para confirmar que la librería sigue activa.
120
+ - Confirmar la versión más reciente compatible con el resto del
121
+ stack del proyecto.
122
+ - Si Context7 reporta deprecación, **NO la uses**. Buscar la
123
+ alternativa migrada.
124
+
125
+ ### NUNCA generar código con API obsoleta
126
+
127
+ Si el usuario pide implementar X usando librería Y:
128
+
129
+ - Consultar Context7 sobre cómo se hace X en la versión actual de Y.
130
+ - Si la API que aparece en el contexto del modelo difiere de la que
131
+ Context7 reporta como actual, **usar la de Context7**.
132
+ - Documentar en un comentario corto la versión consultada y la
133
+ fecha si la API es notable.
134
+
135
+ ### NUNCA copiar ejemplos de la web sin verificar versión
136
+
137
+ Stack Overflow, blogs y tutoriales tienen alta probabilidad de
138
+ mostrar código deprecado. Si el agente consulta una web (vía
139
+ WebSearch o WebFetch) y obtiene un ejemplo, ese ejemplo debe
140
+ validarse contra Context7 antes de incorporarlo.
141
+
142
+ ---
143
+
144
+ ## Excepción: Context7 no responde o no tiene la librería
145
+
146
+ Si Context7 no tiene documentación disponible para una librería
147
+ específica:
148
+
149
+ 1. **Documentar en el código** que Context7 no respondió y la API se
150
+ tomó de la fuente oficial (npm registry, docs del repo).
151
+ 2. **Verificar al menos**: la librería existe, no está deprecada en
152
+ npm/PyPI, su última publicación es reciente (≤ 12 meses).
153
+ 3. **NO bloquear** el flujo del usuario por este caso — proceder con
154
+ diligencia razonable.
155
+
156
+ ---
157
+
158
+ ## Auditoría retroactiva
159
+
160
+ Esta regla aplica también al código existente del proyecto SWL:
161
+
162
+ - Si durante un refactor se detecta una dependencia que arrastra
163
+ warnings de deprecación, abrir un ticket para auditarla con
164
+ Context7 y migrar si hay alternativa actual.
165
+ - El comando `/swl:auditar-deps` (cuando esté disponible) debe
166
+ cruzar las dependencias del proyecto contra Context7 para
167
+ detectar deprecaciones silenciosas.
168
+
169
+ ---
170
+
171
+ ## Aplicabilidad por agente
172
+
173
+ | Agente | Aplica | Cuándo |
174
+ |---|---|---|
175
+ | `backend-python-swl` | SÍ | Al generar código FastAPI/Django/SQLAlchemy |
176
+ | `backend-node-swl` | SÍ | Al generar código Express/Fastify/NestJS |
177
+ | `backend-java-swl` | SÍ | Al generar código Spring Boot/JPA |
178
+ | `backend-go-swl` | SÍ | Al generar código Go con frameworks |
179
+ | `backend-rust-swl` | SÍ | Al generar código Axum/Actix |
180
+ | `backend-csharp-swl` | SÍ | Al generar código ASP.NET Core |
181
+ | `frontend-react-swl` | SÍ | Al generar código React/Next.js |
182
+ | `frontend-angular-swl` | SÍ | Al generar código Angular |
183
+ | `frontend-css-swl` | SÍ | Al usar PostCSS/Tailwind plugins |
184
+ | `frontend-tailwind-swl` | SÍ | Al usar Tailwind v4+ APIs |
185
+ | `frontend-swl` | SÍ | Al usar Vue/Svelte/Lit |
186
+ | `mobile-android-swl` | SÍ | Al usar Jetpack Compose libs |
187
+ | `mobile-ios-swl` | SÍ | Al usar SwiftUI/Combine |
188
+ | `mobile-cross-swl` | SÍ | Al usar React Native/Flutter |
189
+ | `implementador-swl` | SÍ | Generalista — siempre |
190
+ | `llm-apps-swl` | SÍ | LangChain, OpenAI SDK, Anthropic SDK |
191
+ | `pagos-swl` | SÍ | Stripe SDK actualizado |
192
+ | `datos-swl` | SÍ | ORMs y drivers de BD |
193
+ | `arquitecto-swl` | RECOMENDADO | Al evaluar tradeoffs entre librerías |
194
+ | `revisor-codigo-swl` | RECOMENDADO | Al detectar deps deprecadas en review |
195
+ | `revisor-seguridad-swl` | OBLIGATORIO | Al verificar CVEs de dependencias |
196
+ | Resto de agentes | NO | No generan código con dependencias externas |
197
+
198
+ ---
199
+
200
+ ## Checklist de consulta Context7
201
+
202
+ Antes de marcar una tarea como completa:
203
+
204
+ - [ ] ¿Las dependencias agregadas/usadas se verificaron contra Context7?
205
+ - [ ] ¿La versión usada está alineada con la que Context7 reporta como actual?
206
+ - [ ] ¿No hay imports de APIs deprecadas según Context7?
207
+ - [ ] ¿Las dependencias transitivas conocidas no son warnings de
208
+ deprecación al instalar?
209
+ - [ ] Si Context7 no tenía la librería, ¿se documentó el motivo?
210
+
211
+ ---
212
+
213
+ ## Origen de esta regla
214
+
215
+ Esta regla se formalizó tras observar en la primera instalación pública
216
+ de `@saulwade/swl-ses@1.0.0` (2026-04-30) un warning de
217
+ `prebuild-install@7.1.3 deprecated` arrastrado por
218
+ `@xenova/transformers` que estaba en `optionalDependencies`. La
219
+ dependencia se eligió en una iteración anterior sin verificar Context7;
220
+ la migración oficial era `@huggingface/transformers`. El warning se vio
221
+ en cada `npm install` del paquete distribuido. Resuelto en v1.0.1
222
+ eliminando la dependencia opcional y elevando esta regla a obligatoria
223
+ para que no se repita.
224
+
225
+ Memoria asociada: `feedback_usar_context7.md` (preferencia previa del
226
+ usuario, formalizada como regla).
@@ -1,80 +1,80 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://swl-ses.dev/schemas/diary-entry.json",
4
- "title": "SWL Diary Entry",
5
- "description": "Diario estructurado por sesion. Captura logros, decisiones, challenges y aprendizajes clave en formato consumible por /swl:aprender.",
6
- "type": "object",
7
- "required": ["id", "sessionId", "date", "createdAt"],
8
- "properties": {
9
- "id": {
10
- "type": "string",
11
- "pattern": "^diary-\\d{8}-[a-f0-9]+$",
12
- "description": "ID unico del diario: diary-YYYYMMDD-{hash}"
13
- },
14
- "sessionId": {
15
- "type": "string",
16
- "minLength": 1,
17
- "description": "ID de la sesion de Claude Code que origina el diario"
18
- },
19
- "agent": {
20
- "type": ["string", "null"],
21
- "description": "Agente principal de la sesion (si aplica)"
22
- },
23
- "date": {
24
- "type": "string",
25
- "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
26
- "description": "Fecha de la sesion en formato YYYY-MM-DD"
27
- },
28
- "startTime": {
29
- "type": ["string", "null"],
30
- "format": "date-time",
31
- "description": "Inicio de la sesion en ISO 8601"
32
- },
33
- "endTime": {
34
- "type": ["string", "null"],
35
- "format": "date-time",
36
- "description": "Fin de la sesion en ISO 8601 (null si esta abierta)"
37
- },
38
- "accomplishments": {
39
- "type": "array",
40
- "maxItems": 20,
41
- "items": { "type": "string", "maxLength": 500 },
42
- "description": "Logros concretos de la sesion"
43
- },
44
- "decisions": {
45
- "type": "array",
46
- "maxItems": 20,
47
- "items": { "type": "string", "maxLength": 500 },
48
- "description": "Decisiones tomadas con su justificacion breve"
49
- },
50
- "challenges": {
51
- "type": "array",
52
- "maxItems": 20,
53
- "items": { "type": "string", "maxLength": 500 },
54
- "description": "Bloqueos o problemas encontrados"
55
- },
56
- "keyLearnings": {
57
- "type": "array",
58
- "maxItems": 20,
59
- "items": { "type": "string", "maxLength": 500 },
60
- "description": "Aprendizajes clave que alimentan APRENDIZAJES.md o instintos"
61
- },
62
- "tags": {
63
- "type": "array",
64
- "maxItems": 20,
65
- "items": { "type": "string", "maxLength": 500 },
66
- "description": "Etiquetas para clasificacion y busqueda"
67
- },
68
- "sourceAgents": {
69
- "type": "array",
70
- "uniqueItems": true,
71
- "items": { "type": "string" },
72
- "description": "Agentes que contribuyeron a la sesion (cross-agent enrichment)"
73
- },
74
- "createdAt": {
75
- "type": "string",
76
- "format": "date-time",
77
- "description": "Timestamp de creacion del diario"
78
- }
79
- }
80
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://swl-ses.dev/schemas/diary-entry.json",
4
+ "title": "SWL Diary Entry",
5
+ "description": "Diario estructurado por sesion. Captura logros, decisiones, challenges y aprendizajes clave en formato consumible por /swl:aprender.",
6
+ "type": "object",
7
+ "required": ["id", "sessionId", "date", "createdAt"],
8
+ "properties": {
9
+ "id": {
10
+ "type": "string",
11
+ "pattern": "^diary-\\d{8}-[a-f0-9]+$",
12
+ "description": "ID unico del diario: diary-YYYYMMDD-{hash}"
13
+ },
14
+ "sessionId": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "description": "ID de la sesion de Claude Code que origina el diario"
18
+ },
19
+ "agent": {
20
+ "type": ["string", "null"],
21
+ "description": "Agente principal de la sesion (si aplica)"
22
+ },
23
+ "date": {
24
+ "type": "string",
25
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
26
+ "description": "Fecha de la sesion en formato YYYY-MM-DD"
27
+ },
28
+ "startTime": {
29
+ "type": ["string", "null"],
30
+ "format": "date-time",
31
+ "description": "Inicio de la sesion en ISO 8601"
32
+ },
33
+ "endTime": {
34
+ "type": ["string", "null"],
35
+ "format": "date-time",
36
+ "description": "Fin de la sesion en ISO 8601 (null si esta abierta)"
37
+ },
38
+ "accomplishments": {
39
+ "type": "array",
40
+ "maxItems": 20,
41
+ "items": { "type": "string", "maxLength": 500 },
42
+ "description": "Logros concretos de la sesion"
43
+ },
44
+ "decisions": {
45
+ "type": "array",
46
+ "maxItems": 20,
47
+ "items": { "type": "string", "maxLength": 500 },
48
+ "description": "Decisiones tomadas con su justificacion breve"
49
+ },
50
+ "challenges": {
51
+ "type": "array",
52
+ "maxItems": 20,
53
+ "items": { "type": "string", "maxLength": 500 },
54
+ "description": "Bloqueos o problemas encontrados"
55
+ },
56
+ "keyLearnings": {
57
+ "type": "array",
58
+ "maxItems": 20,
59
+ "items": { "type": "string", "maxLength": 500 },
60
+ "description": "Aprendizajes clave que alimentan APRENDIZAJES.md o instintos"
61
+ },
62
+ "tags": {
63
+ "type": "array",
64
+ "maxItems": 20,
65
+ "items": { "type": "string", "maxLength": 500 },
66
+ "description": "Etiquetas para clasificacion y busqueda"
67
+ },
68
+ "sourceAgents": {
69
+ "type": "array",
70
+ "uniqueItems": true,
71
+ "items": { "type": "string" },
72
+ "description": "Agentes que contribuyeron a la sesion (cross-agent enrichment)"
73
+ },
74
+ "createdAt": {
75
+ "type": "string",
76
+ "format": "date-time",
77
+ "description": "Timestamp de creacion del diario"
78
+ }
79
+ }
80
+ }