@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.
- package/CLAUDE.md +19 -2
- package/README.md +561 -561
- package/agentes/arquitecto-swl.md +33 -1
- package/agentes/nemesis-auditor-swl.md +59 -19
- package/bin/swl-mcp-server.js +214 -214
- package/comandos/swl/.evolved.json +22 -22
- package/comandos/swl/contribuir.md +233 -233
- package/comandos/swl/nemesis.md +230 -56
- package/gateway/lib/event-channel.js +191 -191
- package/habilidades/backend-production-resilience/SKILL.md +288 -288
- package/habilidades/benchmark-memoria/SKILL.md +186 -186
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
- package/habilidades/doubt-driven-review/SKILL.md +171 -171
- package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
- package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
- package/habilidades/eval-framework/SKILL.md +212 -212
- package/habilidades/feynman-auditor-swl/SKILL.md +123 -123
- package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
- package/habilidades/harness-claude-code/SKILL.md +299 -299
- package/habilidades/infra-github-actions/SKILL.md +166 -166
- package/habilidades/legacy-code-rescue/SKILL.md +267 -267
- package/habilidades/manejo-errores/.evolved.json +8 -8
- package/habilidades/meta-skills-estandar/SKILL.md +225 -1
- package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
- package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
- package/habilidades/nemesis-evaluacion-json/SKILL.md +266 -0
- package/habilidades/nemesis-redistribuir/SKILL.md +341 -0
- package/habilidades/node-experto/SKILL.md +105 -4
- package/habilidades/patrones-python/SKILL.md +229 -229
- package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
- package/habilidades/planear-fase/SKILL.md +319 -319
- package/habilidades/protocolo-revision-swl/SKILL.md +350 -276
- package/habilidades/release-semver/.evolved.json +8 -8
- package/habilidades/state-inconsistency-auditor-swl/SKILL.md +166 -166
- package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
- package/habilidades/tdd-workflow/SKILL.md +150 -4
- package/habilidades/testing-python/SKILL.md +340 -340
- package/habilidades/verificar-trabajo/SKILL.md +8 -3
- package/habilidades/web-fetcher-routing/SKILL.md +75 -75
- package/hooks/check-update.js +31 -3
- package/hooks/claudemd-bloat-detector.js +161 -161
- package/hooks/lib/agent-routing.js +107 -107
- package/hooks/lib/auto-consolidator.js +335 -335
- package/hooks/lib/error-classifier.js +308 -308
- package/hooks/lib/merkle-audit.js +96 -96
- package/hooks/lib/provenance-tracker.js +191 -191
- package/hooks/lib/rate-limit-tracker.js +253 -253
- package/hooks/lib/resource-quota.js +122 -122
- package/hooks/lib/retry-jitter.js +165 -165
- package/hooks/lib/security-net.js +201 -201
- package/hooks/lib/skill-auditor.js +588 -588
- package/hooks/lib/sync-status.js +228 -228
- package/hooks/lib/taint-tracker.js +107 -107
- package/hooks/lib/text-similarity.js +241 -241
- package/hooks/lib/toon-compressor.js +245 -245
- package/hooks/registro-turnos.js +209 -209
- package/hooks/sugerir-regenerar-inventario.js +170 -170
- package/hooks/validar-formato-post-subagente.js +140 -140
- package/hooks/validar-memoria-hook.js +218 -218
- package/instintos/prompt-appendices.yaml +57 -57
- package/manifiestos/agent-output-schemas.json +57 -57
- package/manifiestos/modulos.json +1324 -1321
- package/manifiestos/skills-lock.json +1114 -1114
- package/package.json +2 -2
- package/plantillas/auditor-veto-template.md +105 -105
- package/plantillas/github-workflows/README.md +47 -47
- package/plantillas/github-workflows/release-please.yml +44 -44
- package/plantillas/github-workflows/swl-ci.yml +107 -107
- package/plantillas/github-workflows/swl-security.yml +51 -51
- package/plugin.json +353 -351
- package/reglas/analisis-previo-tareas-grandes.md +172 -172
- package/reglas/arreglar-al-detectar.md +147 -147
- package/reglas/fragmentos-compartidos.md +152 -152
- package/reglas/harness-claude-code.md +213 -213
- package/reglas/registro-componentes-nuevos.md +192 -0
- package/reglas/usar-context7.md +226 -226
- package/schemas/diary-entry.schema.json +80 -80
- package/scripts/actualizar.js +110 -1
- package/scripts/audit-tools/audit-history.js +330 -330
- package/scripts/audit-tools/bundle-tracker.js +290 -290
- package/scripts/audit-tools/canary-monitor.js +352 -352
- package/scripts/audit-tools/code-profiler.js +605 -605
- package/scripts/audit-tools/dep-doctor.js +320 -320
- package/scripts/audit-tools/env-validator.js +206 -206
- package/scripts/audit-tools/lib/fs-walk.js +48 -48
- package/scripts/audit-tools/lib/output.js +23 -23
- package/scripts/audit-tools/migration-checker.js +392 -392
- package/scripts/audit-tools/pentest-scanner.js +1436 -1436
- package/scripts/benchmark-memoria.js +167 -167
- package/scripts/configurar-branch-protection.js +418 -418
- package/scripts/derivar-feature-list.js +489 -489
- package/scripts/detectar-aprendizajes-duplicados.js +151 -151
- package/scripts/doctor.js +58 -4
- package/scripts/field-report.js +199 -199
- package/scripts/generar-checklists-consolidados.js +273 -273
- package/scripts/generar-inventario.js +420 -420
- package/scripts/generar-matriz-lenguajes.js +271 -271
- package/scripts/lib/artefactos-python.js +43 -43
- package/scripts/lib/benchmark-metrics.js +160 -160
- package/scripts/lib/budget-enforcer.js +252 -252
- package/scripts/lib/configurar-ci.js +380 -380
- package/scripts/lib/contadores-inventario.js +217 -217
- package/scripts/lib/detectar-stack-detallado.js +307 -307
- package/scripts/lib/diary-entry.js +234 -234
- package/scripts/lib/eval-metrics-store.js +218 -218
- package/scripts/lib/eval-quality.js +171 -171
- package/scripts/lib/eval-schemas.js +144 -144
- package/scripts/lib/eval-self-correct.js +106 -106
- package/scripts/lib/eval-validator.js +185 -185
- package/scripts/lib/expandir-targets.js +71 -71
- package/scripts/lib/jaccard-similarity.js +98 -98
- package/scripts/lib/longmemeval-runner.js +125 -125
- package/scripts/lib/mcp_config.py +127 -0
- package/scripts/lib/npm-version.js +261 -261
- package/scripts/lib/paquetes-conocidos.js +50 -50
- package/scripts/lib/prompt-builder.js +264 -264
- package/scripts/lib/rrf-fusion.js +175 -175
- package/scripts/lib/scoring-instintos.js +277 -277
- package/scripts/lib/semantic-search.js +252 -252
- package/scripts/lib/toml-merge.js +204 -204
- package/scripts/lib/transformadores/codex.js +375 -375
- package/scripts/lib/transformadores/cursor.js +359 -359
- package/scripts/limpiar-artefactos-python.js +131 -131
- package/scripts/mcp-orchestrator.py +8 -18
- package/scripts/mcp-pool-manager.py +12 -23
- package/scripts/mcp-server/README.md +170 -170
- package/scripts/mcp-server/auth.js +105 -105
- package/scripts/mcp-server/cache.js +106 -106
- package/scripts/mcp-server/telemetry.js +78 -78
- package/scripts/migrar-csv-a-array.js +168 -168
- package/scripts/migrar-fase-dominio.js +201 -201
- package/scripts/publicar.js +511 -511
- package/scripts/run-eval.js +141 -141
- package/scripts/validar-userland-vacio.js +110 -110
|
@@ -9,7 +9,12 @@ description: >
|
|
|
9
9
|
idiomas de framework y mapeo a frameworks de seguridad. Cargar cuando se
|
|
10
10
|
esté escribiendo o auditando un SKILL.md y se necesiten patrones avanzados
|
|
11
11
|
que no están en la regla core.
|
|
12
|
-
version: "1.
|
|
12
|
+
version: "1.1.1"
|
|
13
|
+
evolved: true
|
|
14
|
+
evolved-from: "1.1.0"
|
|
15
|
+
evolved-at: "2026-05-16"
|
|
16
|
+
evolved-by: "aprender"
|
|
17
|
+
evolved-note: "v1.1.0 MINOR: 3 secciones nuevas (contratos controller↔worker + return explícito + evaluator-optimizer). v1.1.1 PATCH: corrige inconsistencia interna — ejemplos de la sección 'Pseudocódigo con return' usaban iter=0/while iter<3, contradiciendo el contrato 1-based de la sección anterior. Mismo skill que enseña off-by-one no debe cometerlo en sus ejemplos."
|
|
13
18
|
herramientasPermitidas: [Read, Write, Edit]
|
|
14
19
|
exclusiones:
|
|
15
20
|
- "No cargar si solo se necesita el frontmatter obligatorio, el límite de líneas o la estructura de directorio — eso está en la regla core `reglas/skills-estandar.md` que se carga siempre."
|
|
@@ -293,6 +298,22 @@ al caso en cuestión en lugar de los tres.
|
|
|
293
298
|
- **Cargar este skill cuando la regla core basta**: esto invierte el trade-off
|
|
294
299
|
de context budget. Cargar `meta-skills-estandar` solo cuando se necesita
|
|
295
300
|
contenido extendido, no por defecto.
|
|
301
|
+
- **Absorber naming externo al portar un patrón valioso**: cuando un skill
|
|
302
|
+
externo (de cc-sdd, harness-sdd, langchain, kiro, etc.) aporta un patrón
|
|
303
|
+
útil, la tentación es importar también el nombre original (`kiro-review`,
|
|
304
|
+
`kiro-impl`, `langchain-router`). Causa: economía cognitiva en la transición.
|
|
305
|
+
Costo: rompe la identidad del sistema receptor, confunde routing del
|
|
306
|
+
orquestador, viola la regla de idioma español MX y crea acoplamiento
|
|
307
|
+
conceptual con un sistema externo cuya API puede cambiar. Solución
|
|
308
|
+
obligatoria: **portar el patrón, adaptar el nombre al naming del sistema
|
|
309
|
+
receptor**. Para SWL: usar prefijo `swl-` o sufijo `-swl`, en español MX,
|
|
310
|
+
con el dominio del problema (no del sistema origen). Ejemplo real
|
|
311
|
+
(2026-05-15): el patrón `kiro-review` de cc-sdd se absorbió como
|
|
312
|
+
`protocolo-revision-swl` por instrucción explícita del usuario; `kiro-impl`
|
|
313
|
+
iterativo se absorbió como `ejecutar-task-iterativo`. Documentar el origen
|
|
314
|
+
en la sección "Referencias" o "Origen" del skill, NO en el nombre. Verificar
|
|
315
|
+
con `git log --grep="kiro\|otro-prefijo-externo"` que no quedan menciones
|
|
316
|
+
del naming externo en el codebase del sistema receptor.
|
|
296
317
|
|
|
297
318
|
## Referencias
|
|
298
319
|
|
|
@@ -300,3 +321,206 @@ al caso en cuestión en lugar de los tres.
|
|
|
300
321
|
- Evaluador de skills: `comandos/swl/evaluar-skill.md` (usa W009, W010, W011).
|
|
301
322
|
- Schema: `schemas/skill-frontmatter.schema.json`.
|
|
302
323
|
- Normalizador de campos legacy: `scripts/lib/skill-normalizer.js`.
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## Contratos controller ↔ worker en skills/agentes
|
|
328
|
+
|
|
329
|
+
Cuando un skill orquesta un loop iterativo entre un **controller** (comando
|
|
330
|
+
o agente padre) y un **worker** (agente o sub-skill invocado N veces), el
|
|
331
|
+
contrato entre ambos DEBE explicitar tres dimensiones:
|
|
332
|
+
|
|
333
|
+
| Dimensión | Pregunta | Riesgo si se omite |
|
|
334
|
+
|---|---|---|
|
|
335
|
+
| **Indexing** | ¿1-based o 0-based? | Off-by-one entre output paths (`iter-N/`) y argumentos al worker |
|
|
336
|
+
| **Identificadores únicos** | ¿Cada sub-invocación tiene un ID propio? | Colisiones de output cuando hay paralelismo o sub-scopes |
|
|
337
|
+
| **Convergencia** | ¿Cuándo termina el loop? `PASS` explícito, max-iter, ambos | Loops infinitos o terminación prematura |
|
|
338
|
+
|
|
339
|
+
### Anti-patrón: convenciones distintas entre capas
|
|
340
|
+
|
|
341
|
+
```
|
|
342
|
+
# Controller (comando): zero-based
|
|
343
|
+
iter = 0
|
|
344
|
+
while iter < 3:
|
|
345
|
+
invocar(worker, iter=iter)
|
|
346
|
+
iter += 1
|
|
347
|
+
|
|
348
|
+
# Worker (agente): one-based
|
|
349
|
+
"Recibo iter ∈ {1, 2, 3}. Escribo a iter-N/."
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
Resultado: cuando el controller pasa `iter=0`, el worker espera `iter=1` y
|
|
353
|
+
escribe a `iter-0/` que la documentación no contempla. El path documentado
|
|
354
|
+
`iter-1/` nunca se llena hasta la segunda iteración. Bug silencioso —
|
|
355
|
+
detectable solo cuando se intenta leer `iter-N-1/` para correlación entre
|
|
356
|
+
iteraciones.
|
|
357
|
+
|
|
358
|
+
### Pattern correcto: contrato explícito documentado
|
|
359
|
+
|
|
360
|
+
```python
|
|
361
|
+
# Controller (comando) — usar mismo indexing que el worker
|
|
362
|
+
iter = 1
|
|
363
|
+
MAX_ITER = 3
|
|
364
|
+
while iter <= MAX_ITER:
|
|
365
|
+
invocar(worker, iter=iter, sub_id=sub_scope.id if redistribuir else None)
|
|
366
|
+
iter += 1
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
```yaml
|
|
370
|
+
# Agente (worker) — declara qué recibe
|
|
371
|
+
## Iteración del loop
|
|
372
|
+
El agente recibe:
|
|
373
|
+
- `iter`: entero ∈ {1, 2, 3} (one-indexed, coherente con paths `iter-N/`)
|
|
374
|
+
- `sub_id`: opcional, identificador del sub-scope (string o null)
|
|
375
|
+
- En iteraciones >= 2, ruta del output previo (`iter-<N-1>/`)
|
|
376
|
+
|
|
377
|
+
| Modo | sub_id | Output |
|
|
378
|
+
|------|--------|--------|
|
|
379
|
+
| Monolítico | null | `iter-N/<archivos>` |
|
|
380
|
+
| Redistribuido | "sub-1-X" | `iter-N/<sub_id>/<archivos>` |
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### Origen
|
|
384
|
+
|
|
385
|
+
Bug detectado en sesión 2026-05-16 del proyecto swl-ses (PR #28):
|
|
386
|
+
`/swl:nemesis --remediar` con `iter=0` en el controller y agente esperando
|
|
387
|
+
`iter ∈ {1,2,3}`. Adicional: invocación al worker sin pasar `sub_id` en
|
|
388
|
+
modo redistribuido → todos los sub-scopes escribían al mismo path y se
|
|
389
|
+
sobreescribían entre sí (fix en PR #29).
|
|
390
|
+
|
|
391
|
+
Mantener el contrato comando ↔ agente ↔ skill ↔ skill `nemesis-redistribuir`
|
|
392
|
+
coherente requiere documentarlo en los **tres** archivos: comando (controller),
|
|
393
|
+
agente (worker) y skill operativo (orquestación). Inconsistencia en cualquiera
|
|
394
|
+
de los tres = bug.
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## Pseudocódigo en ADRs y skills: `return` siempre explícitos
|
|
399
|
+
|
|
400
|
+
Cuando un ADR o skill describe lógica de control con pseudocódigo, las
|
|
401
|
+
salidas tempranas DEBEN ser explícitas — no implícitas a través de naming
|
|
402
|
+
de funciones helper.
|
|
403
|
+
|
|
404
|
+
### Anti-patrón: nombre semántico sin `return`
|
|
405
|
+
|
|
406
|
+
```
|
|
407
|
+
# Indexing 1-based para no mezclar dos problemas (helper sin return +
|
|
408
|
+
# off-by-one) en el mismo ejemplo. Aquí el bug pedagógico es solo el
|
|
409
|
+
# helper ambiguo.
|
|
410
|
+
iter = 1
|
|
411
|
+
MAX_ITER = 3
|
|
412
|
+
while iter <= MAX_ITER:
|
|
413
|
+
eval = invocar(evaluator, iter=iter)
|
|
414
|
+
if eval.status == "PASS": break
|
|
415
|
+
if not flag_remediar: emitir_reporte_y_salir() # ← ¿sale del while? ¿del scope completo?
|
|
416
|
+
invocar(generator, eval.hallazgos)
|
|
417
|
+
iter += 1
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
Lector estricto puede interpretar `emitir_reporte_y_salir()` como
|
|
421
|
+
"emite el reporte y retorna del scope completo" O como "función con
|
|
422
|
+
side effect cuyo nombre prometía salida pero no la ejecuta". Ambigüedad
|
|
423
|
+
detectada por revisor externo y reportada como bug del ADR.
|
|
424
|
+
|
|
425
|
+
### Pattern correcto: `return` explícitos con valor
|
|
426
|
+
|
|
427
|
+
```
|
|
428
|
+
# Indexing 1-based coherente con la sección "Contratos controller ↔ worker"
|
|
429
|
+
# arriba. Si este skill enseña a evitar off-by-one entre capas, sus propios
|
|
430
|
+
# ejemplos deben usar el mismo indexing que el contrato canónico.
|
|
431
|
+
iter = 1
|
|
432
|
+
MAX_ITER = 3
|
|
433
|
+
evaluacion = null
|
|
434
|
+
while iter <= MAX_ITER:
|
|
435
|
+
evaluacion = invocar(evaluator, iter=iter)
|
|
436
|
+
if evaluacion.status == "PASS":
|
|
437
|
+
return { exito: True, iters: iter, evaluacion } # convergencia
|
|
438
|
+
if not flag_remediar:
|
|
439
|
+
emitir_reporte(evaluacion)
|
|
440
|
+
return { exito: False, iters: iter, evaluacion } # solo audita
|
|
441
|
+
invocar(generator, evaluacion.hallazgos)
|
|
442
|
+
iter += 1
|
|
443
|
+
return activar_recovery_catalog(evaluacion) # max-iter agotado
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
Cada path de salida es:
|
|
447
|
+
- Explícito (`return` literal en pseudocódigo)
|
|
448
|
+
- Tipado (objeto con campos esperados)
|
|
449
|
+
- Comentado con la condición que lo dispara
|
|
450
|
+
- Coherente con el indexing del contrato controller ↔ worker (1-based)
|
|
451
|
+
|
|
452
|
+
### Regla
|
|
453
|
+
|
|
454
|
+
El pseudocódigo de un ADR o skill es **contrato visual** entre el documento
|
|
455
|
+
y el implementador. Funciones helper con nombres semánticos (`emitir_*`,
|
|
456
|
+
`escalar_*`, `salir_*`) son aceptables PERO siempre acompañadas de `return`
|
|
457
|
+
explícito en el pseudocódigo, no solo en la implementación.
|
|
458
|
+
|
|
459
|
+
### Origen
|
|
460
|
+
|
|
461
|
+
Bug del ADR-0021 detectado por revisor externo (sesión 2026-05-16):
|
|
462
|
+
*"`emitir_reporte_y_salir()` no muestra explícitamente que sale del loop.
|
|
463
|
+
Si la función solo emite output, la ejecución continúa a la siguiente
|
|
464
|
+
línea, violando la retrocompatibilidad."* Verificado y corregido en
|
|
465
|
+
el mismo ADR.
|
|
466
|
+
|
|
467
|
+
---
|
|
468
|
+
|
|
469
|
+
## Patrón evaluator-optimizer aplicado a auditoría
|
|
470
|
+
|
|
471
|
+
Cuando un skill o agente implementa el patrón `audit → fix → re-audit`,
|
|
472
|
+
adoptar el **patrón canónico evaluator-optimizer** del [cookbook oficial
|
|
473
|
+
de Anthropic](https://github.com/anthropics/anthropic-cookbook/blob/main/patterns/agents/evaluator_optimizer.ipynb)
|
|
474
|
+
en lugar de re-inventar nomenclatura propia.
|
|
475
|
+
|
|
476
|
+
### Mapeo del patrón
|
|
477
|
+
|
|
478
|
+
| Componente del cookbook | Equivalente en SWL |
|
|
479
|
+
|---|---|
|
|
480
|
+
| `generator(prompt, task, context)` | Agente que aplica correcciones (ej: `orquestador-swl` delegando a `depurador-swl`, `backend-python-swl`, etc.) |
|
|
481
|
+
| `evaluator(prompt, content, task)` | Agente auditor (ej: `nemesis-auditor-swl`, `revisor-codigo-swl`) que produce veredicto estructurado |
|
|
482
|
+
| Veredicto: `PASS / NEEDS_IMPROVEMENT / FAIL` | Status del JSON estructurado del evaluator |
|
|
483
|
+
| `loop()` con `while evaluation != "PASS"` | Controller en el comando (no en el agente — ver sección "Contratos controller ↔ worker") |
|
|
484
|
+
| Memoria de intentos previos | `.planning/<modulo>/iter-N/` con outputs de cada iteración |
|
|
485
|
+
|
|
486
|
+
### Reglas obligatorias del patrón
|
|
487
|
+
|
|
488
|
+
1. **Evaluator y generator NUNCA son el mismo agente**. La separación
|
|
489
|
+
revisor/ejecutor de `reglas/gobernanza.md` se mantiene.
|
|
490
|
+
2. **El loop vive en el controller (comando)**, no en el evaluator ni en
|
|
491
|
+
el generator. Esto preserva privilegio mínimo del evaluator (sin Agent
|
|
492
|
+
tool) y delega orquestación a la capa correcta.
|
|
493
|
+
3. **Convergencia por `PASS` explícito + max-iter como guardrail**. Anthropic
|
|
494
|
+
recomienda terminación natural; el max-iter (típicamente 3) evita loops
|
|
495
|
+
infinitos sin sustituir el criterio principal.
|
|
496
|
+
4. **Output estructurado del evaluator** (JSON con schema versionado). El
|
|
497
|
+
markdown legible es complementario, no source of truth.
|
|
498
|
+
5. **Recovery Catalog cuando max-iter agotado sin PASS**: aplicar
|
|
499
|
+
`reprompt → reduce-autonomy → escalate → terminate` según
|
|
500
|
+
`reglas/seguridad-agentes.md`.
|
|
501
|
+
|
|
502
|
+
### Ejemplo aplicado
|
|
503
|
+
|
|
504
|
+
ADR-0021 (`/swl:nemesis --remediar`):
|
|
505
|
+
- Evaluator: `nemesis-auditor-swl` (atómico, sin Agent tool).
|
|
506
|
+
- Generator: `orquestador-swl` invocado con hallazgos como input.
|
|
507
|
+
- Loop: en `comandos/swl/nemesis.md` (controller).
|
|
508
|
+
- Convergencia: `evaluacion.status == "PASS"`.
|
|
509
|
+
- Max-iter: 3 hardcoded en comando.
|
|
510
|
+
- Recovery: catálogo formal en escalada secuencial.
|
|
511
|
+
|
|
512
|
+
### Cuándo NO aplicar este patrón
|
|
513
|
+
|
|
514
|
+
- Audit one-shot sin remediación automática: aplicar solo el evaluator,
|
|
515
|
+
entregar reporte, fin.
|
|
516
|
+
- Cuando el evaluator no puede emitir veredicto estructurado (ejemplo:
|
|
517
|
+
análisis de UX subjetivo): el patrón requiere clasificación binaria
|
|
518
|
+
PASS/no-PASS, no opina.
|
|
519
|
+
- Para tareas donde el costo del loop (3-5× tokens) supera el valor de
|
|
520
|
+
la convergencia automática.
|
|
521
|
+
|
|
522
|
+
### Origen y referencia
|
|
523
|
+
|
|
524
|
+
Adoptado formalmente en swl-ses v1.5.2 vía ADR-0021. Citar el cookbook
|
|
525
|
+
Anthropic directamente en ADRs evita re-inventar terminología y facilita
|
|
526
|
+
la integración con otros sistemas que sigan el mismo patrón.
|
|
@@ -1,93 +1,93 @@
|
|
|
1
|
-
# Convención `EXAMPLES.md` — recurso opcional para skills críticos
|
|
2
|
-
|
|
3
|
-
Convención **opcional** para skills cuyo valor depende de ejemplos concretos
|
|
4
|
-
con diff MAL → BIEN. Esta convención NO es retroactiva: las 63 carpetas
|
|
5
|
-
`recursos/` existentes en `habilidades/` no se renombran. Solo aplica a:
|
|
6
|
-
|
|
7
|
-
- Skills nuevos cuyo dominio se entiende mejor con ejemplos lado a lado.
|
|
8
|
-
- Skills existentes que reciban actualización mayor y agreguen ejemplos.
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Cuándo aplicarla
|
|
13
|
-
|
|
14
|
-
Aplicar cuando:
|
|
15
|
-
|
|
16
|
-
- El skill prescribe **decisiones técnicas** o **patrones** cuyo error es
|
|
17
|
-
sutil sin un caso concreto (ej: anti-patrones de async, gotchas de framework,
|
|
18
|
-
decisiones arquitecturales).
|
|
19
|
-
- El skill se beneficia de mostrar 2-4 ejemplos lado a lado: el caso aplicado
|
|
20
|
-
correctamente vs el caso degenerado.
|
|
21
|
-
- Los ejemplos suman > 100 líneas y meterlos en SKILL.md lo pasaría del
|
|
22
|
-
límite de 300 líneas.
|
|
23
|
-
|
|
24
|
-
NO aplicar cuando:
|
|
25
|
-
|
|
26
|
-
- El skill ya tiene `recursos/` con archivos temáticos específicos
|
|
27
|
-
(ej: `meta-skills-estandar/recursos/anti-patrones-y-leyes.md`). El nombre
|
|
28
|
-
temático es más informativo que `EXAMPLES.md`.
|
|
29
|
-
- El skill es un how-to procedural sin antipatrones contrastables.
|
|
30
|
-
- El skill tiene < 80 líneas en SKILL.md y los ejemplos caben en línea.
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## Estructura recomendada
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
habilidades/<skill-name>/
|
|
38
|
-
├── SKILL.md
|
|
39
|
-
└── recursos/
|
|
40
|
-
└── EXAMPLES.md
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
`SKILL.md` enlaza al final con:
|
|
44
|
-
|
|
45
|
-
```markdown
|
|
46
|
-
Para ejemplos concretos de aplicación, ver [`recursos/EXAMPLES.md`](recursos/EXAMPLES.md).
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
`EXAMPLES.md` contiene 2-4 ejemplos siguiendo el patrón:
|
|
50
|
-
|
|
51
|
-
```markdown
|
|
52
|
-
## Ejemplo N — [título corto del escenario]
|
|
53
|
-
|
|
54
|
-
**Contexto**: [1-2 líneas]
|
|
55
|
-
|
|
56
|
-
### ❌ Sin <skill-name> (hipotético)
|
|
57
|
-
[código o descripción del enfoque incorrecto + consecuencia observable]
|
|
58
|
-
|
|
59
|
-
### ✓ Con <skill-name>
|
|
60
|
-
[código o descripción del enfoque correcto + por qué evita la consecuencia]
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Cierre de `EXAMPLES.md`: tabla resumen de los ejemplos con la dimensión
|
|
64
|
-
clave que cambió (costo, tiempo, severidad de bug, etc.).
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## Por qué OPCIONAL y no obligatoria
|
|
69
|
-
|
|
70
|
-
- 63 carpetas `recursos/` ya existen con nomenclatura temática
|
|
71
|
-
(`anti-patrones-y-leyes.md`, `frameworks-seguridad.md`,
|
|
72
|
-
`idiomas-framework.md`). Forzar `EXAMPLES.md` rompería información
|
|
73
|
-
semántica del nombre.
|
|
74
|
-
- La regla core `reglas/skills-estandar.md` ya prescribe que `SKILL.md`
|
|
75
|
-
no exceda 300 líneas y que los `recursos/` se nombren en kebab-case
|
|
76
|
-
con sufijo `.md` — esa regla cubre el 95% de los casos.
|
|
77
|
-
- Esta convención **complementa** la regla core para skills donde un nombre
|
|
78
|
-
semántico genérico (`EXAMPLES.md`) comunica mejor el contenido que un
|
|
79
|
-
nombre específico (ej: `casos-decisiones-arquitecturales.md` es más largo
|
|
80
|
-
y menos buscable).
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## Origen
|
|
85
|
-
|
|
86
|
-
Patrón observado en repos externos analizados el 2026-05-09
|
|
87
|
-
(`temp/agent-skills-main`, `temp/andrej-karpathy-skills-main`):
|
|
88
|
-
varios skills críticos exponen un `EXAMPLES.md` con diffs MAL/BIEN
|
|
89
|
-
auto-cargable como referencia rápida del agente.
|
|
90
|
-
|
|
91
|
-
Adoptado en `habilidades/doubt-driven-review/recursos/EXAMPLES.md` como
|
|
92
|
-
primera aplicación. Casos futuros: skills de decisiones arquitecturales,
|
|
93
|
-
seguridad, debugging avanzado.
|
|
1
|
+
# Convención `EXAMPLES.md` — recurso opcional para skills críticos
|
|
2
|
+
|
|
3
|
+
Convención **opcional** para skills cuyo valor depende de ejemplos concretos
|
|
4
|
+
con diff MAL → BIEN. Esta convención NO es retroactiva: las 63 carpetas
|
|
5
|
+
`recursos/` existentes en `habilidades/` no se renombran. Solo aplica a:
|
|
6
|
+
|
|
7
|
+
- Skills nuevos cuyo dominio se entiende mejor con ejemplos lado a lado.
|
|
8
|
+
- Skills existentes que reciban actualización mayor y agreguen ejemplos.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Cuándo aplicarla
|
|
13
|
+
|
|
14
|
+
Aplicar cuando:
|
|
15
|
+
|
|
16
|
+
- El skill prescribe **decisiones técnicas** o **patrones** cuyo error es
|
|
17
|
+
sutil sin un caso concreto (ej: anti-patrones de async, gotchas de framework,
|
|
18
|
+
decisiones arquitecturales).
|
|
19
|
+
- El skill se beneficia de mostrar 2-4 ejemplos lado a lado: el caso aplicado
|
|
20
|
+
correctamente vs el caso degenerado.
|
|
21
|
+
- Los ejemplos suman > 100 líneas y meterlos en SKILL.md lo pasaría del
|
|
22
|
+
límite de 300 líneas.
|
|
23
|
+
|
|
24
|
+
NO aplicar cuando:
|
|
25
|
+
|
|
26
|
+
- El skill ya tiene `recursos/` con archivos temáticos específicos
|
|
27
|
+
(ej: `meta-skills-estandar/recursos/anti-patrones-y-leyes.md`). El nombre
|
|
28
|
+
temático es más informativo que `EXAMPLES.md`.
|
|
29
|
+
- El skill es un how-to procedural sin antipatrones contrastables.
|
|
30
|
+
- El skill tiene < 80 líneas en SKILL.md y los ejemplos caben en línea.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Estructura recomendada
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
habilidades/<skill-name>/
|
|
38
|
+
├── SKILL.md
|
|
39
|
+
└── recursos/
|
|
40
|
+
└── EXAMPLES.md
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
`SKILL.md` enlaza al final con:
|
|
44
|
+
|
|
45
|
+
```markdown
|
|
46
|
+
Para ejemplos concretos de aplicación, ver [`recursos/EXAMPLES.md`](recursos/EXAMPLES.md).
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`EXAMPLES.md` contiene 2-4 ejemplos siguiendo el patrón:
|
|
50
|
+
|
|
51
|
+
```markdown
|
|
52
|
+
## Ejemplo N — [título corto del escenario]
|
|
53
|
+
|
|
54
|
+
**Contexto**: [1-2 líneas]
|
|
55
|
+
|
|
56
|
+
### ❌ Sin <skill-name> (hipotético)
|
|
57
|
+
[código o descripción del enfoque incorrecto + consecuencia observable]
|
|
58
|
+
|
|
59
|
+
### ✓ Con <skill-name>
|
|
60
|
+
[código o descripción del enfoque correcto + por qué evita la consecuencia]
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Cierre de `EXAMPLES.md`: tabla resumen de los ejemplos con la dimensión
|
|
64
|
+
clave que cambió (costo, tiempo, severidad de bug, etc.).
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Por qué OPCIONAL y no obligatoria
|
|
69
|
+
|
|
70
|
+
- 63 carpetas `recursos/` ya existen con nomenclatura temática
|
|
71
|
+
(`anti-patrones-y-leyes.md`, `frameworks-seguridad.md`,
|
|
72
|
+
`idiomas-framework.md`). Forzar `EXAMPLES.md` rompería información
|
|
73
|
+
semántica del nombre.
|
|
74
|
+
- La regla core `reglas/skills-estandar.md` ya prescribe que `SKILL.md`
|
|
75
|
+
no exceda 300 líneas y que los `recursos/` se nombren en kebab-case
|
|
76
|
+
con sufijo `.md` — esa regla cubre el 95% de los casos.
|
|
77
|
+
- Esta convención **complementa** la regla core para skills donde un nombre
|
|
78
|
+
semántico genérico (`EXAMPLES.md`) comunica mejor el contenido que un
|
|
79
|
+
nombre específico (ej: `casos-decisiones-arquitecturales.md` es más largo
|
|
80
|
+
y menos buscable).
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Origen
|
|
85
|
+
|
|
86
|
+
Patrón observado en repos externos analizados el 2026-05-09
|
|
87
|
+
(`temp/agent-skills-main`, `temp/andrej-karpathy-skills-main`):
|
|
88
|
+
varios skills críticos exponen un `EXAMPLES.md` con diffs MAL/BIEN
|
|
89
|
+
auto-cargable como referencia rápida del agente.
|
|
90
|
+
|
|
91
|
+
Adoptado en `habilidades/doubt-driven-review/recursos/EXAMPLES.md` como
|
|
92
|
+
primera aplicación. Casos futuros: skills de decisiones arquitecturales,
|
|
93
|
+
seguridad, debugging avanzado.
|