@saulwade/swl-ses 1.5.0 → 1.5.2

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 (134) hide show
  1. package/CLAUDE.md +19 -2
  2. package/README.md +561 -561
  3. package/agentes/arquitecto-swl.md +33 -1
  4. package/agentes/nemesis-auditor-swl.md +59 -19
  5. package/bin/swl-mcp-server.js +214 -214
  6. package/comandos/swl/.evolved.json +22 -22
  7. package/comandos/swl/contribuir.md +233 -233
  8. package/comandos/swl/nemesis.md +230 -56
  9. package/gateway/lib/event-channel.js +191 -191
  10. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  11. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  12. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  13. package/habilidades/doubt-driven-review/SKILL.md +171 -171
  14. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  15. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  16. package/habilidades/eval-framework/SKILL.md +212 -212
  17. package/habilidades/feynman-auditor-swl/SKILL.md +123 -123
  18. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
  19. package/habilidades/harness-claude-code/SKILL.md +299 -299
  20. package/habilidades/infra-github-actions/SKILL.md +166 -166
  21. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  22. package/habilidades/manejo-errores/.evolved.json +8 -8
  23. package/habilidades/meta-skills-estandar/SKILL.md +225 -1
  24. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  25. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  26. package/habilidades/nemesis-evaluacion-json/SKILL.md +266 -0
  27. package/habilidades/nemesis-redistribuir/SKILL.md +341 -0
  28. package/habilidades/node-experto/SKILL.md +105 -4
  29. package/habilidades/patrones-python/SKILL.md +229 -229
  30. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  31. package/habilidades/planear-fase/SKILL.md +319 -319
  32. package/habilidades/protocolo-revision-swl/SKILL.md +350 -276
  33. package/habilidades/release-semver/.evolved.json +8 -8
  34. package/habilidades/state-inconsistency-auditor-swl/SKILL.md +166 -166
  35. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
  36. package/habilidades/tdd-workflow/SKILL.md +150 -4
  37. package/habilidades/testing-python/SKILL.md +340 -340
  38. package/habilidades/verificar-trabajo/SKILL.md +8 -3
  39. package/habilidades/web-fetcher-routing/SKILL.md +75 -75
  40. package/hooks/check-update.js +31 -3
  41. package/hooks/claudemd-bloat-detector.js +161 -161
  42. package/hooks/lib/agent-routing.js +107 -107
  43. package/hooks/lib/auto-consolidator.js +335 -335
  44. package/hooks/lib/error-classifier.js +308 -308
  45. package/hooks/lib/merkle-audit.js +96 -96
  46. package/hooks/lib/provenance-tracker.js +191 -191
  47. package/hooks/lib/rate-limit-tracker.js +253 -253
  48. package/hooks/lib/resource-quota.js +122 -122
  49. package/hooks/lib/retry-jitter.js +165 -165
  50. package/hooks/lib/security-net.js +201 -201
  51. package/hooks/lib/skill-auditor.js +588 -588
  52. package/hooks/lib/sync-status.js +228 -228
  53. package/hooks/lib/taint-tracker.js +107 -107
  54. package/hooks/lib/text-similarity.js +241 -241
  55. package/hooks/lib/toon-compressor.js +245 -245
  56. package/hooks/registro-turnos.js +209 -209
  57. package/hooks/sugerir-regenerar-inventario.js +170 -170
  58. package/hooks/validar-formato-post-subagente.js +140 -140
  59. package/hooks/validar-memoria-hook.js +218 -218
  60. package/instintos/prompt-appendices.yaml +57 -57
  61. package/manifiestos/agent-output-schemas.json +57 -57
  62. package/manifiestos/modulos.json +1324 -1321
  63. package/manifiestos/skills-lock.json +1114 -1114
  64. package/package.json +2 -2
  65. package/plantillas/auditor-veto-template.md +105 -105
  66. package/plantillas/github-workflows/README.md +47 -47
  67. package/plantillas/github-workflows/release-please.yml +44 -44
  68. package/plantillas/github-workflows/swl-ci.yml +107 -107
  69. package/plantillas/github-workflows/swl-security.yml +51 -51
  70. package/plugin.json +353 -351
  71. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  72. package/reglas/arreglar-al-detectar.md +147 -147
  73. package/reglas/fragmentos-compartidos.md +152 -152
  74. package/reglas/harness-claude-code.md +213 -213
  75. package/reglas/registro-componentes-nuevos.md +192 -0
  76. package/reglas/usar-context7.md +226 -226
  77. package/schemas/diary-entry.schema.json +80 -80
  78. package/scripts/actualizar.js +110 -1
  79. package/scripts/audit-tools/audit-history.js +330 -330
  80. package/scripts/audit-tools/bundle-tracker.js +290 -290
  81. package/scripts/audit-tools/canary-monitor.js +352 -352
  82. package/scripts/audit-tools/code-profiler.js +605 -605
  83. package/scripts/audit-tools/dep-doctor.js +320 -320
  84. package/scripts/audit-tools/env-validator.js +206 -206
  85. package/scripts/audit-tools/lib/fs-walk.js +48 -48
  86. package/scripts/audit-tools/lib/output.js +23 -23
  87. package/scripts/audit-tools/migration-checker.js +392 -392
  88. package/scripts/audit-tools/pentest-scanner.js +1436 -1436
  89. package/scripts/benchmark-memoria.js +167 -167
  90. package/scripts/configurar-branch-protection.js +418 -418
  91. package/scripts/derivar-feature-list.js +489 -489
  92. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  93. package/scripts/doctor.js +58 -4
  94. package/scripts/field-report.js +199 -199
  95. package/scripts/generar-checklists-consolidados.js +273 -273
  96. package/scripts/generar-inventario.js +420 -420
  97. package/scripts/generar-matriz-lenguajes.js +271 -271
  98. package/scripts/lib/artefactos-python.js +43 -43
  99. package/scripts/lib/benchmark-metrics.js +160 -160
  100. package/scripts/lib/budget-enforcer.js +252 -252
  101. package/scripts/lib/configurar-ci.js +380 -380
  102. package/scripts/lib/contadores-inventario.js +217 -217
  103. package/scripts/lib/detectar-stack-detallado.js +307 -307
  104. package/scripts/lib/diary-entry.js +234 -234
  105. package/scripts/lib/eval-metrics-store.js +218 -218
  106. package/scripts/lib/eval-quality.js +171 -171
  107. package/scripts/lib/eval-schemas.js +144 -144
  108. package/scripts/lib/eval-self-correct.js +106 -106
  109. package/scripts/lib/eval-validator.js +185 -185
  110. package/scripts/lib/expandir-targets.js +71 -71
  111. package/scripts/lib/jaccard-similarity.js +98 -98
  112. package/scripts/lib/longmemeval-runner.js +125 -125
  113. package/scripts/lib/mcp_config.py +127 -0
  114. package/scripts/lib/npm-version.js +261 -261
  115. package/scripts/lib/paquetes-conocidos.js +50 -50
  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 -204
  121. package/scripts/lib/transformadores/codex.js +375 -375
  122. package/scripts/lib/transformadores/cursor.js +359 -359
  123. package/scripts/limpiar-artefactos-python.js +131 -131
  124. package/scripts/mcp-orchestrator.py +8 -18
  125. package/scripts/mcp-pool-manager.py +12 -23
  126. package/scripts/mcp-server/README.md +170 -170
  127. package/scripts/mcp-server/auth.js +105 -105
  128. package/scripts/mcp-server/cache.js +106 -106
  129. package/scripts/mcp-server/telemetry.js +78 -78
  130. package/scripts/migrar-csv-a-array.js +168 -168
  131. package/scripts/migrar-fase-dominio.js +201 -201
  132. package/scripts/publicar.js +511 -511
  133. package/scripts/run-eval.js +141 -141
  134. package/scripts/validar-userland-vacio.js +110 -110
@@ -1,23 +1,23 @@
1
- {
2
- "release.md": {
3
- "evolved": true,
4
- "evolvedFrom": "5.4.0",
5
- "evolvedAt": "2026-04-11",
6
- "evolvedBy": "aprender",
7
- "evolvedNote": "mejora de metodología: checklist obligatoria de archivos de versión en paso 6"
8
- },
9
- "aprender.md": {
10
- "evolved": true,
11
- "evolvedFrom": "5.12.3",
12
- "evolvedAt": "2026-04-25",
13
- "evolvedBy": "aprender",
14
- "evolvedNote": "Paso 2 — filtro crítico obligatorio sobre reportes de sub-agentes Explore para evitar sobre-ingeniería al analizar papers académicos"
15
- },
16
- "verificar.md": {
17
- "evolved": true,
18
- "evolvedFrom": "5.12.3",
19
- "evolvedAt": "2026-04-26",
20
- "evolvedBy": "evolucionar",
21
- "evolvedNote": "flag --until-converge para iterar verificar→corregir→re-verificar hasta 0 hallazgos CRÍTICO+ALTO+MAYOR (max-iter=5, --no-prompt CI, detección adversarial ≥5 hallazgos nuevos)"
22
- }
1
+ {
2
+ "release.md": {
3
+ "evolved": true,
4
+ "evolvedFrom": "5.4.0",
5
+ "evolvedAt": "2026-04-11",
6
+ "evolvedBy": "aprender",
7
+ "evolvedNote": "mejora de metodología: checklist obligatoria de archivos de versión en paso 6"
8
+ },
9
+ "aprender.md": {
10
+ "evolved": true,
11
+ "evolvedFrom": "5.12.3",
12
+ "evolvedAt": "2026-04-25",
13
+ "evolvedBy": "aprender",
14
+ "evolvedNote": "Paso 2 — filtro crítico obligatorio sobre reportes de sub-agentes Explore para evitar sobre-ingeniería al analizar papers académicos"
15
+ },
16
+ "verificar.md": {
17
+ "evolved": true,
18
+ "evolvedFrom": "5.12.3",
19
+ "evolvedAt": "2026-04-26",
20
+ "evolvedBy": "evolucionar",
21
+ "evolvedNote": "flag --until-converge para iterar verificar→corregir→re-verificar hasta 0 hallazgos CRÍTICO+ALTO+MAYOR (max-iter=5, --no-prompt CI, detección adversarial ≥5 hallazgos nuevos)"
22
+ }
23
23
  }
@@ -1,233 +1,233 @@
1
- ---
2
- name: swl:contribuir
3
- description: Contribuye evoluciones de _userland/ al core de swl-ses creando un PR en GitHub. Filtra por dominio (solo ingeniería de software general), evalúa calidad con PluginEval (score ≥80 requerido) y crea el PR vía gh CLI. Flags: --skill=[nombre], --agente=[nombre], --dry-run.
4
- allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep", "Agent"]
5
- ---
6
-
7
- # /swl:contribuir — Contribuir evoluciones al core de swl-ses
8
-
9
- Eres el facilitador de contribuciones del sistema SWL. Tu responsabilidad es tomar evoluciones que un usuario creó en `_userland/` y, si pasan los filtros de calidad y dominio, crear un Pull Request contra el repositorio oficial de swl-ses.
10
-
11
- **Principio**: las evoluciones específicas de un proyecto se quedan en `_userland/` — solo evoluciones de dominio general pasan al core. Un skill de "configuración de Stripe para mi SaaS" no sube; un skill de "patrones de testing de APIs de pago" sí.
12
-
13
- ## Cuándo usar este comando
14
-
15
- - Cuando el usuario evolucionó un agente o skill en `_userland/` y quiere compartirlo con la comunidad
16
- - Después de `/swl:evolucionar` cuando el cambio aplica a cualquier proyecto de software
17
- - Cuando se creó un skill nuevo con `/swl:crear-skill` que resuelve un problema general de ingeniería
18
-
19
- ## Prerrequisitos
20
-
21
- 1. **GitHub CLI (`gh`) autenticado** — verificar con `gh auth status`
22
- 2. **Evolución marcada** — el artefacto debe tener `evolved: true` en frontmatter o existir en `_userland/`
23
- 3. **Repositorio swl-ses accesible** — se necesita permiso de fork/PR
24
-
25
- ## Flags soportados
26
-
27
- ```
28
- --skill=[nombre] Contribuir solo el skill indicado de _userland/habilidades/
29
- --agente=[nombre] Contribuir solo el agente indicado de _userland/agentes/
30
- --dry-run Ejecutar validaciones y evaluación sin crear PR
31
- ```
32
-
33
- Si no se pasa flag, escanea todo `_userland/` buscando candidatos.
34
-
35
- ## Paso 0 — Verificar prerrequisitos
36
-
37
- Verificar que `gh` está instalado y autenticado:
38
-
39
- ```bash
40
- gh auth status
41
- ```
42
-
43
- Si falla:
44
- - **No instalado**: indicar al usuario que instale GitHub CLI (ver MANUAL_USO.md § Dependencias externas)
45
- - **No autenticado**: indicar al usuario que ejecute `! gh auth login` desde el prompt de Claude Code
46
-
47
- DETENER si `gh auth status` no reporta una cuenta autenticada.
48
-
49
- ## Paso 1 — Escanear candidatos en _userland/
50
-
51
- Buscar artefactos en `_userland/habilidades/` y `_userland/agentes/`:
52
-
53
- ```bash
54
- # Skills con SKILL.md
55
- for dir in _userland/habilidades/*/; do
56
- [ -f "$dir/SKILL.md" ] && echo "skill: $(basename $dir)"
57
- done
58
-
59
- # Agentes con .md
60
- for f in _userland/agentes/*.md; do
61
- [ -f "$f" ] && echo "agente: $(basename $f .md)"
62
- done
63
- ```
64
-
65
- Si se pasó `--skill` o `--agente`, filtrar a solo ese candidato.
66
-
67
- Si no hay candidatos, informar:
68
- ```
69
- No se encontraron evoluciones en _userland/ para contribuir.
70
- Usa /swl:evolucionar o /swl:crear-skill para generar evoluciones primero.
71
- ```
72
-
73
- ## Paso 2 — Filtro de dominio
74
-
75
- Para cada candidato, leer su contenido y evaluar compatibilidad de dominio.
76
-
77
- **Pregunta de filtro**: *¿Le sirve esto a un ingeniero de software en cualquier proyecto de software?*
78
-
79
- **Dominios aceptados** (ingeniería de software general):
80
- - SDLC, backend, frontend, QA, DevOps, seguridad, arquitectura
81
- - Testing, CI/CD, monitoreo, observabilidad
82
- - Patrones de diseño, refactoring, revisión de código
83
- - APIs, bases de datos, infraestructura cloud
84
-
85
- **Dominios rechazados** (verticales específicos):
86
- - ML/AI productivo, ciencia de datos, bioinformática
87
- - Finanzas, contabilidad, legal
88
- - Dominio de negocio específico del proyecto
89
-
90
- Para cada candidato rechazado, explicar por qué:
91
- ```
92
- RECHAZADO: [nombre] — dominio "[dominio detectado]" no es ingeniería de software general.
93
- Las evoluciones específicas de dominio se mantienen en _userland/ del proyecto.
94
- ```
95
-
96
- ## Paso 3 — Evaluación PluginEval
97
-
98
- Para cada candidato que pasó el filtro de dominio, ejecutar evaluación de calidad.
99
-
100
- Cargar:
101
- ```
102
- Skill("evaluacion-agentes")
103
- ```
104
-
105
- Ejecutar evaluación completa (2 capas). El score mínimo para contribuir es **80/100** (badge Oro).
106
-
107
- - **Score ≥ 80**: APROBADO — continuar al siguiente paso
108
- - **Score 60-79**: RECHAZADO con recomendaciones de mejora
109
- - **Score < 60**: RECHAZADO — necesita trabajo significativo
110
-
111
- ```
112
- EVALUACIÓN: [nombre]
113
- Capa 1 (estática): [N] errores, [N] advertencias
114
- Capa 2 (semántica): [score]/100 — badge [badge]
115
- Veredicto: [APROBADO | RECHAZADO]
116
- [Si rechazado: top 3 mejoras recomendadas]
117
- ```
118
-
119
- Si `--dry-run`: presentar resultados de evaluación y TERMINAR.
120
-
121
- ## Paso 4 — Preparar contribución
122
-
123
- Para cada candidato aprobado:
124
-
125
- 1. **Guardar ruta del workspace original** antes de cambiar de directorio:
126
- ```bash
127
- WORKSPACE_DIR=$(pwd)
128
- ```
129
-
130
- 2. **Crear fork** (si no existe) del repo oficial de swl-ses y obtener el nombre del fork:
131
- ```bash
132
- gh repo fork saul-wade/swl-ses --clone=false
133
- FORK_REPO=$(gh api user --jq '.login')/swl-ses
134
- ```
135
-
136
- 3. **Clonar el fork** y crear branch descriptivo:
137
- ```bash
138
- gh repo clone "$FORK_REPO" /tmp/swl-ses-contrib
139
- cd /tmp/swl-ses-contrib
140
- git checkout -b contrib/[tipo]-[nombre]
141
- ```
142
-
143
- 4. **Copiar artefacto** desde el workspace original al clon del fork:
144
- - Skills: `$WORKSPACE_DIR/_userland/habilidades/[nombre]/` → `habilidades/[nombre]/`
145
- - Agentes: `$WORKSPACE_DIR/_userland/agentes/[nombre].md` → `agentes/[nombre].md`
146
-
147
- 4. **Ajustar frontmatter** — agregar campos de contribución:
148
- ```yaml
149
- contributed: true
150
- contributed-from: "_userland"
151
- contributed-at: "[fecha YYYY-MM-DD]"
152
- contributed-by: "[usuario gh]"
153
- plugineval-score: [score]
154
- ```
155
-
156
- 5. **Registrar en plugin.json** si es necesario
157
-
158
- ## Paso 5 — Crear Pull Request
159
-
160
- Crear el PR con template estructurado:
161
-
162
- ```bash
163
- git add .
164
- git commit -m "contrib([tipo]): agrega [nombre] desde _userland
165
-
166
- Evaluado con PluginEval: [score]/100 (badge [badge]).
167
- Dominio: ingeniería de software general.
168
-
169
- Co-Authored-By: swl-ses <noreply@swl-ses>"
170
-
171
- git push origin contrib/[tipo]-[nombre]
172
-
173
- gh pr create \
174
- --repo saul-wade/swl-ses \
175
- --title "contrib([tipo]): [nombre]" \
176
- --body "$(cat <<'EOF'
177
- ## Contribución desde _userland
178
-
179
- **Tipo**: [skill | agente]
180
- **Nombre**: [nombre]
181
- **Dominio**: [dominio detectado]
182
- **PluginEval**: [score]/100 — badge [badge]
183
-
184
- ## Descripción
185
-
186
- [Descripción extraída del artefacto]
187
-
188
- ## Evidencia de calidad
189
-
190
- - Capa 1 (estática): [N] errores, [N] advertencias
191
- - Capa 2 (semántica): [score]/100
192
- - Filtro de dominio: APROBADO (ingeniería de software general)
193
-
194
- ## Checklist
195
-
196
- - [ ] Score PluginEval ≥ 80
197
- - [ ] Dominio: ingeniería de software general
198
- - [ ] Sin credenciales hardcodeadas
199
- - [ ] Frontmatter válido
200
- - [ ] No duplica skill/agente existente
201
-
202
- ---
203
- Generado por `/swl:contribuir` — swl-ses v[versión]
204
- EOF
205
- )"
206
- ```
207
-
208
- ## Paso 6 — Reporte final
209
-
210
- ```
211
- === Contribución completada ===
212
-
213
- Candidatos escaneados: [N]
214
- Filtro de dominio: [N] aprobados, [N] rechazados
215
- Evaluación PluginEval: [N] aprobados (≥80), [N] rechazados
216
- PRs creados: [N]
217
-
218
- [Para cada PR creado:]
219
- → [nombre]: [URL del PR]
220
-
221
- Los PRs serán revisados por los mantenedores de swl-ses.
222
- ```
223
-
224
- ## Reglas de comportamiento
225
-
226
- - NUNCA crear un PR sin que el candidato haya pasado AMBOS filtros (dominio + PluginEval ≥ 80).
227
- - NUNCA contribuir artefactos que contengan credenciales, tokens o datos del proyecto del usuario.
228
- - NUNCA modificar artefactos del core existente — solo agregar nuevos.
229
- - Si el artefacto duplica funcionalidad de uno existente en el core, RECHAZAR y sugerir `/swl:evolucionar` en su lugar.
230
- - Si `gh auth status` falla, DETENER inmediatamente — no intentar autenticación automática.
231
- - En `--dry-run`, el reporte debe ser completo y accionable sin crear ningún PR.
232
- - Los artefactos contribuidos mantienen su autoría original (campo `contributed-by`).
233
- - SIEMPRE verificar que el nombre del artefacto no colisione con uno existente en el core antes de crear el PR.
1
+ ---
2
+ name: swl:contribuir
3
+ description: Contribuye evoluciones de _userland/ al core de swl-ses creando un PR en GitHub. Filtra por dominio (solo ingeniería de software general), evalúa calidad con PluginEval (score ≥80 requerido) y crea el PR vía gh CLI. Flags: --skill=[nombre], --agente=[nombre], --dry-run.
4
+ allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep", "Agent"]
5
+ ---
6
+
7
+ # /swl:contribuir — Contribuir evoluciones al core de swl-ses
8
+
9
+ Eres el facilitador de contribuciones del sistema SWL. Tu responsabilidad es tomar evoluciones que un usuario creó en `_userland/` y, si pasan los filtros de calidad y dominio, crear un Pull Request contra el repositorio oficial de swl-ses.
10
+
11
+ **Principio**: las evoluciones específicas de un proyecto se quedan en `_userland/` — solo evoluciones de dominio general pasan al core. Un skill de "configuración de Stripe para mi SaaS" no sube; un skill de "patrones de testing de APIs de pago" sí.
12
+
13
+ ## Cuándo usar este comando
14
+
15
+ - Cuando el usuario evolucionó un agente o skill en `_userland/` y quiere compartirlo con la comunidad
16
+ - Después de `/swl:evolucionar` cuando el cambio aplica a cualquier proyecto de software
17
+ - Cuando se creó un skill nuevo con `/swl:crear-skill` que resuelve un problema general de ingeniería
18
+
19
+ ## Prerrequisitos
20
+
21
+ 1. **GitHub CLI (`gh`) autenticado** — verificar con `gh auth status`
22
+ 2. **Evolución marcada** — el artefacto debe tener `evolved: true` en frontmatter o existir en `_userland/`
23
+ 3. **Repositorio swl-ses accesible** — se necesita permiso de fork/PR
24
+
25
+ ## Flags soportados
26
+
27
+ ```
28
+ --skill=[nombre] Contribuir solo el skill indicado de _userland/habilidades/
29
+ --agente=[nombre] Contribuir solo el agente indicado de _userland/agentes/
30
+ --dry-run Ejecutar validaciones y evaluación sin crear PR
31
+ ```
32
+
33
+ Si no se pasa flag, escanea todo `_userland/` buscando candidatos.
34
+
35
+ ## Paso 0 — Verificar prerrequisitos
36
+
37
+ Verificar que `gh` está instalado y autenticado:
38
+
39
+ ```bash
40
+ gh auth status
41
+ ```
42
+
43
+ Si falla:
44
+ - **No instalado**: indicar al usuario que instale GitHub CLI (ver MANUAL_USO.md § Dependencias externas)
45
+ - **No autenticado**: indicar al usuario que ejecute `! gh auth login` desde el prompt de Claude Code
46
+
47
+ DETENER si `gh auth status` no reporta una cuenta autenticada.
48
+
49
+ ## Paso 1 — Escanear candidatos en _userland/
50
+
51
+ Buscar artefactos en `_userland/habilidades/` y `_userland/agentes/`:
52
+
53
+ ```bash
54
+ # Skills con SKILL.md
55
+ for dir in _userland/habilidades/*/; do
56
+ [ -f "$dir/SKILL.md" ] && echo "skill: $(basename $dir)"
57
+ done
58
+
59
+ # Agentes con .md
60
+ for f in _userland/agentes/*.md; do
61
+ [ -f "$f" ] && echo "agente: $(basename $f .md)"
62
+ done
63
+ ```
64
+
65
+ Si se pasó `--skill` o `--agente`, filtrar a solo ese candidato.
66
+
67
+ Si no hay candidatos, informar:
68
+ ```
69
+ No se encontraron evoluciones en _userland/ para contribuir.
70
+ Usa /swl:evolucionar o /swl:crear-skill para generar evoluciones primero.
71
+ ```
72
+
73
+ ## Paso 2 — Filtro de dominio
74
+
75
+ Para cada candidato, leer su contenido y evaluar compatibilidad de dominio.
76
+
77
+ **Pregunta de filtro**: *¿Le sirve esto a un ingeniero de software en cualquier proyecto de software?*
78
+
79
+ **Dominios aceptados** (ingeniería de software general):
80
+ - SDLC, backend, frontend, QA, DevOps, seguridad, arquitectura
81
+ - Testing, CI/CD, monitoreo, observabilidad
82
+ - Patrones de diseño, refactoring, revisión de código
83
+ - APIs, bases de datos, infraestructura cloud
84
+
85
+ **Dominios rechazados** (verticales específicos):
86
+ - ML/AI productivo, ciencia de datos, bioinformática
87
+ - Finanzas, contabilidad, legal
88
+ - Dominio de negocio específico del proyecto
89
+
90
+ Para cada candidato rechazado, explicar por qué:
91
+ ```
92
+ RECHAZADO: [nombre] — dominio "[dominio detectado]" no es ingeniería de software general.
93
+ Las evoluciones específicas de dominio se mantienen en _userland/ del proyecto.
94
+ ```
95
+
96
+ ## Paso 3 — Evaluación PluginEval
97
+
98
+ Para cada candidato que pasó el filtro de dominio, ejecutar evaluación de calidad.
99
+
100
+ Cargar:
101
+ ```
102
+ Skill("evaluacion-agentes")
103
+ ```
104
+
105
+ Ejecutar evaluación completa (2 capas). El score mínimo para contribuir es **80/100** (badge Oro).
106
+
107
+ - **Score ≥ 80**: APROBADO — continuar al siguiente paso
108
+ - **Score 60-79**: RECHAZADO con recomendaciones de mejora
109
+ - **Score < 60**: RECHAZADO — necesita trabajo significativo
110
+
111
+ ```
112
+ EVALUACIÓN: [nombre]
113
+ Capa 1 (estática): [N] errores, [N] advertencias
114
+ Capa 2 (semántica): [score]/100 — badge [badge]
115
+ Veredicto: [APROBADO | RECHAZADO]
116
+ [Si rechazado: top 3 mejoras recomendadas]
117
+ ```
118
+
119
+ Si `--dry-run`: presentar resultados de evaluación y TERMINAR.
120
+
121
+ ## Paso 4 — Preparar contribución
122
+
123
+ Para cada candidato aprobado:
124
+
125
+ 1. **Guardar ruta del workspace original** antes de cambiar de directorio:
126
+ ```bash
127
+ WORKSPACE_DIR=$(pwd)
128
+ ```
129
+
130
+ 2. **Crear fork** (si no existe) del repo oficial de swl-ses y obtener el nombre del fork:
131
+ ```bash
132
+ gh repo fork saul-wade/swl-ses --clone=false
133
+ FORK_REPO=$(gh api user --jq '.login')/swl-ses
134
+ ```
135
+
136
+ 3. **Clonar el fork** y crear branch descriptivo:
137
+ ```bash
138
+ gh repo clone "$FORK_REPO" /tmp/swl-ses-contrib
139
+ cd /tmp/swl-ses-contrib
140
+ git checkout -b contrib/[tipo]-[nombre]
141
+ ```
142
+
143
+ 4. **Copiar artefacto** desde el workspace original al clon del fork:
144
+ - Skills: `$WORKSPACE_DIR/_userland/habilidades/[nombre]/` → `habilidades/[nombre]/`
145
+ - Agentes: `$WORKSPACE_DIR/_userland/agentes/[nombre].md` → `agentes/[nombre].md`
146
+
147
+ 4. **Ajustar frontmatter** — agregar campos de contribución:
148
+ ```yaml
149
+ contributed: true
150
+ contributed-from: "_userland"
151
+ contributed-at: "[fecha YYYY-MM-DD]"
152
+ contributed-by: "[usuario gh]"
153
+ plugineval-score: [score]
154
+ ```
155
+
156
+ 5. **Registrar en plugin.json** si es necesario
157
+
158
+ ## Paso 5 — Crear Pull Request
159
+
160
+ Crear el PR con template estructurado:
161
+
162
+ ```bash
163
+ git add .
164
+ git commit -m "contrib([tipo]): agrega [nombre] desde _userland
165
+
166
+ Evaluado con PluginEval: [score]/100 (badge [badge]).
167
+ Dominio: ingeniería de software general.
168
+
169
+ Co-Authored-By: swl-ses <noreply@swl-ses>"
170
+
171
+ git push origin contrib/[tipo]-[nombre]
172
+
173
+ gh pr create \
174
+ --repo saul-wade/swl-ses \
175
+ --title "contrib([tipo]): [nombre]" \
176
+ --body "$(cat <<'EOF'
177
+ ## Contribución desde _userland
178
+
179
+ **Tipo**: [skill | agente]
180
+ **Nombre**: [nombre]
181
+ **Dominio**: [dominio detectado]
182
+ **PluginEval**: [score]/100 — badge [badge]
183
+
184
+ ## Descripción
185
+
186
+ [Descripción extraída del artefacto]
187
+
188
+ ## Evidencia de calidad
189
+
190
+ - Capa 1 (estática): [N] errores, [N] advertencias
191
+ - Capa 2 (semántica): [score]/100
192
+ - Filtro de dominio: APROBADO (ingeniería de software general)
193
+
194
+ ## Checklist
195
+
196
+ - [ ] Score PluginEval ≥ 80
197
+ - [ ] Dominio: ingeniería de software general
198
+ - [ ] Sin credenciales hardcodeadas
199
+ - [ ] Frontmatter válido
200
+ - [ ] No duplica skill/agente existente
201
+
202
+ ---
203
+ Generado por `/swl:contribuir` — swl-ses v[versión]
204
+ EOF
205
+ )"
206
+ ```
207
+
208
+ ## Paso 6 — Reporte final
209
+
210
+ ```
211
+ === Contribución completada ===
212
+
213
+ Candidatos escaneados: [N]
214
+ Filtro de dominio: [N] aprobados, [N] rechazados
215
+ Evaluación PluginEval: [N] aprobados (≥80), [N] rechazados
216
+ PRs creados: [N]
217
+
218
+ [Para cada PR creado:]
219
+ → [nombre]: [URL del PR]
220
+
221
+ Los PRs serán revisados por los mantenedores de swl-ses.
222
+ ```
223
+
224
+ ## Reglas de comportamiento
225
+
226
+ - NUNCA crear un PR sin que el candidato haya pasado AMBOS filtros (dominio + PluginEval ≥ 80).
227
+ - NUNCA contribuir artefactos que contengan credenciales, tokens o datos del proyecto del usuario.
228
+ - NUNCA modificar artefactos del core existente — solo agregar nuevos.
229
+ - Si el artefacto duplica funcionalidad de uno existente en el core, RECHAZAR y sugerir `/swl:evolucionar` en su lugar.
230
+ - Si `gh auth status` falla, DETENER inmediatamente — no intentar autenticación automática.
231
+ - En `--dry-run`, el reporte debe ser completo y accionable sin crear ningún PR.
232
+ - Los artefactos contribuidos mantienen su autoría original (campo `contributed-by`).
233
+ - SIEMPRE verificar que el nombre del artefacto no colisione con uno existente en el core antes de crear el PR.