@saulwade/swl-ses 1.3.4 → 1.3.7
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 +2 -2
- package/README.md +34 -34
- package/bin/swl-mcp-server.js +187 -187
- package/bin/swl-ses.js +4 -62
- package/comandos/swl/.evolved.json +22 -22
- package/comandos/swl/adoptar-proyecto.md +207 -207
- package/comandos/swl/contribuir.md +233 -233
- 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/eval-framework/SKILL.md +212 -212
- package/habilidades/extractor-de-aprendizajes/SKILL.md +321 -321
- 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/recursos/convencion-examples.md +93 -93
- package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
- 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/release-semver/.evolved.json +8 -8
- package/habilidades/swl-claudemd/SKILL.md +220 -220
- package/habilidades/testing-python/SKILL.md +340 -340
- package/hooks/claudemd-bloat-detector.js +161 -161
- package/hooks/extraccion-aprendizajes.js +19 -12
- 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/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/skills-lock.json +1093 -1093
- package/package.json +1 -1
- 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 +1 -1
- 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/usar-context7.md +226 -226
- package/schemas/diary-entry.schema.json +80 -80
- package/scripts/benchmark-memoria.js +167 -167
- package/scripts/comandos/info.js +1 -1
- package/scripts/configurar-branch-protection.js +418 -418
- package/scripts/detectar-aprendizajes-duplicados.js +151 -151
- package/scripts/doctor.js +77 -3
- 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/inicializar.js +2 -2
- package/scripts/instalador.js +40 -3
- package/scripts/instalar-git-hook.js +2 -2
- 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/gitignore-manifest.js +1 -1
- package/scripts/lib/jaccard-similarity.js +98 -98
- package/scripts/lib/longmemeval-runner.js +125 -125
- package/scripts/lib/npm-version.js +261 -261
- package/scripts/lib/paquetes-conocidos.js +50 -50
- package/scripts/lib/parsear-opciones.js +136 -0
- 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/transformadores/claude.js +200 -200
- package/scripts/lib/transformadores/codex.js +1 -1
- package/scripts/lib/transformadores/copilot.js +1 -1
- package/scripts/lib/transformadores/gemini.js +1 -1
- package/scripts/lib/transformadores/opencode.js +1 -1
- package/scripts/limpiar-artefactos-python.js +131 -131
- package/scripts/mcp-server/README.md +128 -128
- package/scripts/mcp-server/handlers.js +206 -206
- 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-manifest.js +195 -195
- package/scripts/validar-userland-vacio.js +110 -110
- package/scripts/verificar-release.js +5 -1
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
name: Revisión de Seguridad — Claude Code
|
|
2
|
-
|
|
3
|
-
# Plantilla distribuida por swl-ses.
|
|
4
|
-
# Copiar este archivo a .github/workflows/ de tu proyecto.
|
|
5
|
-
# Para setup automatizado: /swl:configurar-ci init
|
|
6
|
-
#
|
|
7
|
-
# PREREQUISITO — configurar el secret CLAUDE_API_KEY en tu repositorio:
|
|
8
|
-
# GitHub → Settings → Secrets and variables → Actions → New repository secret
|
|
9
|
-
# Nombre: CLAUDE_API_KEY
|
|
10
|
-
# Valor: clave API de Anthropic (https://console.anthropic.com)
|
|
11
|
-
# La clave requiere permisos tanto para Claude API como para Claude Code.
|
|
12
|
-
#
|
|
13
|
-
# Referencia de la action oficial:
|
|
14
|
-
# https://github.com/anthropics/claude-code-security-review
|
|
15
|
-
#
|
|
16
|
-
# NOTA: los workflows de forks externos no reciben secrets por diseño de GitHub.
|
|
17
|
-
# La revisión de seguridad solo corre en PRs de ramas del mismo repositorio.
|
|
18
|
-
|
|
19
|
-
on:
|
|
20
|
-
pull_request:
|
|
21
|
-
branches: [main]
|
|
22
|
-
|
|
23
|
-
# Permisos mínimos: escribir comentarios en PRs y leer contenido del repo.
|
|
24
|
-
permissions:
|
|
25
|
-
pull-requests: write
|
|
26
|
-
contents: read
|
|
27
|
-
|
|
28
|
-
jobs:
|
|
29
|
-
security:
|
|
30
|
-
name: Análisis de seguridad con Claude
|
|
31
|
-
runs-on: ubuntu-latest
|
|
32
|
-
|
|
33
|
-
steps:
|
|
34
|
-
- uses: actions/checkout@v5
|
|
35
|
-
with:
|
|
36
|
-
# fetch-depth: 2 es requerido por la action para calcular el diff.
|
|
37
|
-
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
38
|
-
fetch-depth: 2
|
|
39
|
-
|
|
40
|
-
# Análisis semántico de seguridad sobre el diff del PR.
|
|
41
|
-
# Detecta: inyecciones SQL/OS, credenciales expuestas, auth débil,
|
|
42
|
-
# SSRF, XSS y las 10 categorías del OWASP Top 10.
|
|
43
|
-
# Comenta hallazgos directamente en el PR.
|
|
44
|
-
- uses: anthropics/claude-code-security-review@main
|
|
45
|
-
with:
|
|
46
|
-
claude-api-key: ${{ secrets.CLAUDE_API_KEY }}
|
|
47
|
-
comment-pr: true
|
|
48
|
-
upload-results: true
|
|
49
|
-
# Excluir directorios que no son código de producción.
|
|
50
|
-
# Ajustar según la estructura de tu proyecto.
|
|
51
|
-
# exclude-directories: "temp,docs,fixtures"
|
|
1
|
+
name: Revisión de Seguridad — Claude Code
|
|
2
|
+
|
|
3
|
+
# Plantilla distribuida por swl-ses.
|
|
4
|
+
# Copiar este archivo a .github/workflows/ de tu proyecto.
|
|
5
|
+
# Para setup automatizado: /swl:configurar-ci init
|
|
6
|
+
#
|
|
7
|
+
# PREREQUISITO — configurar el secret CLAUDE_API_KEY en tu repositorio:
|
|
8
|
+
# GitHub → Settings → Secrets and variables → Actions → New repository secret
|
|
9
|
+
# Nombre: CLAUDE_API_KEY
|
|
10
|
+
# Valor: clave API de Anthropic (https://console.anthropic.com)
|
|
11
|
+
# La clave requiere permisos tanto para Claude API como para Claude Code.
|
|
12
|
+
#
|
|
13
|
+
# Referencia de la action oficial:
|
|
14
|
+
# https://github.com/anthropics/claude-code-security-review
|
|
15
|
+
#
|
|
16
|
+
# NOTA: los workflows de forks externos no reciben secrets por diseño de GitHub.
|
|
17
|
+
# La revisión de seguridad solo corre en PRs de ramas del mismo repositorio.
|
|
18
|
+
|
|
19
|
+
on:
|
|
20
|
+
pull_request:
|
|
21
|
+
branches: [main]
|
|
22
|
+
|
|
23
|
+
# Permisos mínimos: escribir comentarios en PRs y leer contenido del repo.
|
|
24
|
+
permissions:
|
|
25
|
+
pull-requests: write
|
|
26
|
+
contents: read
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
security:
|
|
30
|
+
name: Análisis de seguridad con Claude
|
|
31
|
+
runs-on: ubuntu-latest
|
|
32
|
+
|
|
33
|
+
steps:
|
|
34
|
+
- uses: actions/checkout@v5
|
|
35
|
+
with:
|
|
36
|
+
# fetch-depth: 2 es requerido por la action para calcular el diff.
|
|
37
|
+
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
38
|
+
fetch-depth: 2
|
|
39
|
+
|
|
40
|
+
# Análisis semántico de seguridad sobre el diff del PR.
|
|
41
|
+
# Detecta: inyecciones SQL/OS, credenciales expuestas, auth débil,
|
|
42
|
+
# SSRF, XSS y las 10 categorías del OWASP Top 10.
|
|
43
|
+
# Comenta hallazgos directamente en el PR.
|
|
44
|
+
- uses: anthropics/claude-code-security-review@main
|
|
45
|
+
with:
|
|
46
|
+
claude-api-key: ${{ secrets.CLAUDE_API_KEY }}
|
|
47
|
+
comment-pr: true
|
|
48
|
+
upload-results: true
|
|
49
|
+
# Excluir directorios que no son código de producción.
|
|
50
|
+
# Ajustar según la estructura de tu proyecto.
|
|
51
|
+
# exclude-directories: "temp,docs,fixtures"
|
package/plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "swl-ses",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.7",
|
|
4
4
|
"description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot. 59 agentes, 155 habilidades, 43 comandos, 64 reglas y 41 hooks. 62 librerias. 11 lenguajes. Soporta Claude Code, Copilot, OpenCode, Codex y Gemini CLI.",
|
|
5
5
|
"author": "Saul Wade Leon",
|
|
6
6
|
"license": "MIT",
|
|
@@ -1,172 +1,172 @@
|
|
|
1
|
-
# Regla: Análisis previo ante tareas grandes
|
|
2
|
-
|
|
3
|
-
Esta regla es OBLIGATORIA y aplica a todo trabajo donde la solicitud del usuario
|
|
4
|
-
implique cambio masivo: porte de sistema, refactor cross-módulo, replicación de
|
|
5
|
-
arquitectura externa, migración de stack, instalación de framework completo,
|
|
6
|
-
adopción de patrón en N módulos.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Principio
|
|
11
|
-
|
|
12
|
-
> Cuando el usuario pide "replicar íntegramente X", "portar todo Y", "implementar
|
|
13
|
-
> el sistema completo Z", **responde primero con análisis comparativo (qué ya
|
|
14
|
-
> existe vs. qué falta) y propón 3 opciones de alcance** (mínima / media /
|
|
15
|
-
> completa) antes de escribir código. Nunca arrancar el porte literal sin
|
|
16
|
-
> confirmación explícita tras presentar opciones.
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## Cómo aplicar
|
|
21
|
-
|
|
22
|
-
### Detección — qué cuenta como "tarea grande"
|
|
23
|
-
|
|
24
|
-
Cualquier solicitud que tenga al menos uno de estos atributos:
|
|
25
|
-
|
|
26
|
-
- Más de ~10 archivos a crear, mover o reescribir.
|
|
27
|
-
- Más de ~500 LOC estimadas a tocar en un solo turno.
|
|
28
|
-
- Toca más de un dominio (backend + frontend, o varios módulos backend).
|
|
29
|
-
- "Replicar X" donde X es un sistema externo con su propia arquitectura.
|
|
30
|
-
- "Portar todo de Y" donde Y es un repo, framework o lib voluminoso.
|
|
31
|
-
- "Implementar todo Z" donde Z es una fase, un sub-sistema, una capa nueva.
|
|
32
|
-
- Análisis de un repo en `temp/` con la pregunta abierta "¿qué adoptamos?".
|
|
33
|
-
|
|
34
|
-
Si la solicitud encaja en cualquiera de estas, aplicar la regla.
|
|
35
|
-
|
|
36
|
-
### Paso 1 — Auditar lo que ya existe
|
|
37
|
-
|
|
38
|
-
Antes de proponer el porte:
|
|
39
|
-
|
|
40
|
-
- `Glob` / `Grep` / `Read` para mapear el código actual del usuario.
|
|
41
|
-
- Identificar componentes que ya cubren parte de la solicitud.
|
|
42
|
-
- Verificar versiones, dependencias, convenciones del proyecto.
|
|
43
|
-
- Si es repo externo en `temp/`: aplicar **filtro de dominio** primero
|
|
44
|
-
(ver `reglas/arquitectura.md` § "Análisis de repositorios externos").
|
|
45
|
-
Descartar 80-95% del contenido vertical antes de análisis profundo.
|
|
46
|
-
|
|
47
|
-
### Paso 2 — Tabla comparativa
|
|
48
|
-
|
|
49
|
-
Producir una tabla con tres columnas:
|
|
50
|
-
|
|
51
|
-
| Componente del sistema externo | Equivalente actual del usuario | Gap |
|
|
52
|
-
|---|---|---|
|
|
53
|
-
| ... | ya existe / parcial / no existe | qué falta agregar |
|
|
54
|
-
|
|
55
|
-
Sin la tabla, no se proponen opciones. La tabla es la base objetiva de la decisión.
|
|
56
|
-
|
|
57
|
-
### Paso 3 — Tres opciones de alcance
|
|
58
|
-
|
|
59
|
-
Siempre presentar tres opciones:
|
|
60
|
-
|
|
61
|
-
- **Mínima** — solo cierra los gaps críticos (lo que NO existe). Esfuerzo
|
|
62
|
-
estimado bajo. Usuario acepta vivir con diferencias menores en lo demás.
|
|
63
|
-
- **Media** — cierra gaps + alinea componentes parciales con el patrón externo.
|
|
64
|
-
Esfuerzo medio. Convergencia parcial sin reescribir lo que ya funciona.
|
|
65
|
-
- **Completa** — porte literal de todo lo que el usuario pidió, sin reusar
|
|
66
|
-
componentes existentes. Esfuerzo alto. Justificable solo cuando la
|
|
67
|
-
arquitectura externa es estrictamente superior.
|
|
68
|
-
|
|
69
|
-
Cada opción incluye:
|
|
70
|
-
|
|
71
|
-
- Estimación de esfuerzo (turnos, LOC, archivos afectados).
|
|
72
|
-
- Lista de tareas concretas si se elige.
|
|
73
|
-
- Riesgos / tradeoffs específicos.
|
|
74
|
-
|
|
75
|
-
### Paso 4 — Recomendación explícita
|
|
76
|
-
|
|
77
|
-
Tras las tres opciones, **recomendar una** con razonamiento. No dejar la
|
|
78
|
-
decisión "abierta" — el usuario espera tu juicio técnico.
|
|
79
|
-
|
|
80
|
-
Patrón de recomendación:
|
|
81
|
-
|
|
82
|
-
> **Recomiendo la opción [N]** porque [razón concreta]. Las opciones [otras]
|
|
83
|
-
> son válidas si [condición específica].
|
|
84
|
-
|
|
85
|
-
### Paso 5 — Esperar confirmación
|
|
86
|
-
|
|
87
|
-
Después de presentar tabla + opciones + recomendación: detenerse y esperar.
|
|
88
|
-
|
|
89
|
-
NO arrancar a escribir código asumiendo aprobación implícita. La autorización
|
|
90
|
-
debe ser literal del usuario ("procede con la opción 2", "adelante con la
|
|
91
|
-
mínima", "hagamos la completa").
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
## Excepciones — cuándo NO aplicar la regla
|
|
96
|
-
|
|
97
|
-
NO aplicar cuando:
|
|
98
|
-
|
|
99
|
-
1. **El usuario ya pidió explícitamente la opción**: "implementa la versión
|
|
100
|
-
mínima de X" o "porta solo el módulo Y" — la elección ya está hecha.
|
|
101
|
-
2. **El alcance es trivial** — menos de 5 archivos, una sola dependencia.
|
|
102
|
-
3. **El usuario pidió análisis y ya decidió**: si ya hubo una sesión previa con
|
|
103
|
-
la tabla comparativa y el usuario eligió, proceder sin re-presentar.
|
|
104
|
-
4. **Es un fix urgente de producción** — bug crítico, vulnerabilidad activa,
|
|
105
|
-
incidente. El análisis se reduce a confirmar la causa y aplicar el fix
|
|
106
|
-
específico.
|
|
107
|
-
|
|
108
|
-
---
|
|
109
|
-
|
|
110
|
-
## Cómo presentar la tabla y opciones
|
|
111
|
-
|
|
112
|
-
### Formato de tabla comparativa (mínimo)
|
|
113
|
-
|
|
114
|
-
```markdown
|
|
115
|
-
| Componente | Sistema externo | Tu sistema actual | Gap |
|
|
116
|
-
|---|---|---|---|
|
|
117
|
-
| Auth | OAuth2 + PKCE | JWT custom | parcial — falta PKCE |
|
|
118
|
-
| Storage | S3 + presigned | filesystem local | falta — pendiente migración |
|
|
119
|
-
| ... | ... | ... | ... |
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Formato de las tres opciones (mínimo)
|
|
123
|
-
|
|
124
|
-
```markdown
|
|
125
|
-
**Opción A — Mínima** (~3 turnos, ~15 archivos)
|
|
126
|
-
- Cerrar solo gaps críticos: PKCE, presigned URLs.
|
|
127
|
-
- No tocar lo que ya funciona.
|
|
128
|
-
- Riesgo: leve divergencia con sistema externo en convenciones menores.
|
|
129
|
-
|
|
130
|
-
**Opción B — Media** (~6 turnos, ~30 archivos)
|
|
131
|
-
- Cerrar gaps + alinear `auth/` con patrón OAuth2 completo.
|
|
132
|
-
- Mantener storage actual con migración planeada en fase futura.
|
|
133
|
-
- Riesgo: refactor en `auth/` puede romper integraciones existentes.
|
|
134
|
-
|
|
135
|
-
**Opción C — Completa** (~15 turnos, ~80 archivos)
|
|
136
|
-
- Porte literal del sistema externo completo.
|
|
137
|
-
- Reemplaza todo lo equivalente, no importa que ya funcione.
|
|
138
|
-
- Riesgo: regresiones en funcionalidad madura.
|
|
139
|
-
|
|
140
|
-
**Recomiendo la Opción A**: el sistema actual cubre el 80% del valor;
|
|
141
|
-
los gaps específicos resuelven el caso concreto sin riesgo de regresión.
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## Anti-patrones
|
|
147
|
-
|
|
148
|
-
- Arrancar a escribir código tras "replícame X" sin tabla comparativa.
|
|
149
|
-
- Presentar las opciones sin recomendar — pasar la pelota al usuario.
|
|
150
|
-
- Listar 5+ opciones cuando 3 son suficientes (mínima / media / completa).
|
|
151
|
-
- Estimar esfuerzo en términos vagos ("bastante trabajo", "no mucho") sin
|
|
152
|
-
cuantificar turnos / archivos / LOC.
|
|
153
|
-
- Omitir la auditoría de lo que ya existe y proponer porte literal de todo.
|
|
154
|
-
- Cuando el usuario pide la opción mínima, expandir el alcance "porque
|
|
155
|
-
conviene" sin pedir confirmación.
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
## Origen de esta regla
|
|
160
|
-
|
|
161
|
-
Consolidada el 2026-05-04 desde feedback del usuario en sesión 2026-04-18 sobre
|
|
162
|
-
porte de Hermes Agent: tras pedir "replicar íntegramente Hermes Agent" (~960
|
|
163
|
-
archivos Python), aceptó la propuesta de cerrar solo 3 gaps específicos
|
|
164
|
-
(perfil de usuario, cron natural, auto-evolución). Lección: la auditoría previa
|
|
165
|
-
+ opciones explícitas evita re-implementar 80% de funcionalidad ya existente.
|
|
166
|
-
|
|
167
|
-
Reforzada en análisis de repos en `temp/` durante v1.1.0 de swl-ses (2026-04-23):
|
|
168
|
-
filtro de dominio descartó 97% del contenido de 5 repos antes de análisis
|
|
169
|
-
profundo, ahorrando horas de trabajo en arquitectura externa irrelevante.
|
|
170
|
-
|
|
171
|
-
Memoria nativa local correspondiente (`feedback_analisis_previo.md` en swl-ses):
|
|
172
|
-
redundante tras esta regla; el contenido operativo vive aquí.
|
|
1
|
+
# Regla: Análisis previo ante tareas grandes
|
|
2
|
+
|
|
3
|
+
Esta regla es OBLIGATORIA y aplica a todo trabajo donde la solicitud del usuario
|
|
4
|
+
implique cambio masivo: porte de sistema, refactor cross-módulo, replicación de
|
|
5
|
+
arquitectura externa, migración de stack, instalación de framework completo,
|
|
6
|
+
adopción de patrón en N módulos.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Principio
|
|
11
|
+
|
|
12
|
+
> Cuando el usuario pide "replicar íntegramente X", "portar todo Y", "implementar
|
|
13
|
+
> el sistema completo Z", **responde primero con análisis comparativo (qué ya
|
|
14
|
+
> existe vs. qué falta) y propón 3 opciones de alcance** (mínima / media /
|
|
15
|
+
> completa) antes de escribir código. Nunca arrancar el porte literal sin
|
|
16
|
+
> confirmación explícita tras presentar opciones.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Cómo aplicar
|
|
21
|
+
|
|
22
|
+
### Detección — qué cuenta como "tarea grande"
|
|
23
|
+
|
|
24
|
+
Cualquier solicitud que tenga al menos uno de estos atributos:
|
|
25
|
+
|
|
26
|
+
- Más de ~10 archivos a crear, mover o reescribir.
|
|
27
|
+
- Más de ~500 LOC estimadas a tocar en un solo turno.
|
|
28
|
+
- Toca más de un dominio (backend + frontend, o varios módulos backend).
|
|
29
|
+
- "Replicar X" donde X es un sistema externo con su propia arquitectura.
|
|
30
|
+
- "Portar todo de Y" donde Y es un repo, framework o lib voluminoso.
|
|
31
|
+
- "Implementar todo Z" donde Z es una fase, un sub-sistema, una capa nueva.
|
|
32
|
+
- Análisis de un repo en `temp/` con la pregunta abierta "¿qué adoptamos?".
|
|
33
|
+
|
|
34
|
+
Si la solicitud encaja en cualquiera de estas, aplicar la regla.
|
|
35
|
+
|
|
36
|
+
### Paso 1 — Auditar lo que ya existe
|
|
37
|
+
|
|
38
|
+
Antes de proponer el porte:
|
|
39
|
+
|
|
40
|
+
- `Glob` / `Grep` / `Read` para mapear el código actual del usuario.
|
|
41
|
+
- Identificar componentes que ya cubren parte de la solicitud.
|
|
42
|
+
- Verificar versiones, dependencias, convenciones del proyecto.
|
|
43
|
+
- Si es repo externo en `temp/`: aplicar **filtro de dominio** primero
|
|
44
|
+
(ver `reglas/arquitectura.md` § "Análisis de repositorios externos").
|
|
45
|
+
Descartar 80-95% del contenido vertical antes de análisis profundo.
|
|
46
|
+
|
|
47
|
+
### Paso 2 — Tabla comparativa
|
|
48
|
+
|
|
49
|
+
Producir una tabla con tres columnas:
|
|
50
|
+
|
|
51
|
+
| Componente del sistema externo | Equivalente actual del usuario | Gap |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| ... | ya existe / parcial / no existe | qué falta agregar |
|
|
54
|
+
|
|
55
|
+
Sin la tabla, no se proponen opciones. La tabla es la base objetiva de la decisión.
|
|
56
|
+
|
|
57
|
+
### Paso 3 — Tres opciones de alcance
|
|
58
|
+
|
|
59
|
+
Siempre presentar tres opciones:
|
|
60
|
+
|
|
61
|
+
- **Mínima** — solo cierra los gaps críticos (lo que NO existe). Esfuerzo
|
|
62
|
+
estimado bajo. Usuario acepta vivir con diferencias menores en lo demás.
|
|
63
|
+
- **Media** — cierra gaps + alinea componentes parciales con el patrón externo.
|
|
64
|
+
Esfuerzo medio. Convergencia parcial sin reescribir lo que ya funciona.
|
|
65
|
+
- **Completa** — porte literal de todo lo que el usuario pidió, sin reusar
|
|
66
|
+
componentes existentes. Esfuerzo alto. Justificable solo cuando la
|
|
67
|
+
arquitectura externa es estrictamente superior.
|
|
68
|
+
|
|
69
|
+
Cada opción incluye:
|
|
70
|
+
|
|
71
|
+
- Estimación de esfuerzo (turnos, LOC, archivos afectados).
|
|
72
|
+
- Lista de tareas concretas si se elige.
|
|
73
|
+
- Riesgos / tradeoffs específicos.
|
|
74
|
+
|
|
75
|
+
### Paso 4 — Recomendación explícita
|
|
76
|
+
|
|
77
|
+
Tras las tres opciones, **recomendar una** con razonamiento. No dejar la
|
|
78
|
+
decisión "abierta" — el usuario espera tu juicio técnico.
|
|
79
|
+
|
|
80
|
+
Patrón de recomendación:
|
|
81
|
+
|
|
82
|
+
> **Recomiendo la opción [N]** porque [razón concreta]. Las opciones [otras]
|
|
83
|
+
> son válidas si [condición específica].
|
|
84
|
+
|
|
85
|
+
### Paso 5 — Esperar confirmación
|
|
86
|
+
|
|
87
|
+
Después de presentar tabla + opciones + recomendación: detenerse y esperar.
|
|
88
|
+
|
|
89
|
+
NO arrancar a escribir código asumiendo aprobación implícita. La autorización
|
|
90
|
+
debe ser literal del usuario ("procede con la opción 2", "adelante con la
|
|
91
|
+
mínima", "hagamos la completa").
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Excepciones — cuándo NO aplicar la regla
|
|
96
|
+
|
|
97
|
+
NO aplicar cuando:
|
|
98
|
+
|
|
99
|
+
1. **El usuario ya pidió explícitamente la opción**: "implementa la versión
|
|
100
|
+
mínima de X" o "porta solo el módulo Y" — la elección ya está hecha.
|
|
101
|
+
2. **El alcance es trivial** — menos de 5 archivos, una sola dependencia.
|
|
102
|
+
3. **El usuario pidió análisis y ya decidió**: si ya hubo una sesión previa con
|
|
103
|
+
la tabla comparativa y el usuario eligió, proceder sin re-presentar.
|
|
104
|
+
4. **Es un fix urgente de producción** — bug crítico, vulnerabilidad activa,
|
|
105
|
+
incidente. El análisis se reduce a confirmar la causa y aplicar el fix
|
|
106
|
+
específico.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Cómo presentar la tabla y opciones
|
|
111
|
+
|
|
112
|
+
### Formato de tabla comparativa (mínimo)
|
|
113
|
+
|
|
114
|
+
```markdown
|
|
115
|
+
| Componente | Sistema externo | Tu sistema actual | Gap |
|
|
116
|
+
|---|---|---|---|
|
|
117
|
+
| Auth | OAuth2 + PKCE | JWT custom | parcial — falta PKCE |
|
|
118
|
+
| Storage | S3 + presigned | filesystem local | falta — pendiente migración |
|
|
119
|
+
| ... | ... | ... | ... |
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Formato de las tres opciones (mínimo)
|
|
123
|
+
|
|
124
|
+
```markdown
|
|
125
|
+
**Opción A — Mínima** (~3 turnos, ~15 archivos)
|
|
126
|
+
- Cerrar solo gaps críticos: PKCE, presigned URLs.
|
|
127
|
+
- No tocar lo que ya funciona.
|
|
128
|
+
- Riesgo: leve divergencia con sistema externo en convenciones menores.
|
|
129
|
+
|
|
130
|
+
**Opción B — Media** (~6 turnos, ~30 archivos)
|
|
131
|
+
- Cerrar gaps + alinear `auth/` con patrón OAuth2 completo.
|
|
132
|
+
- Mantener storage actual con migración planeada en fase futura.
|
|
133
|
+
- Riesgo: refactor en `auth/` puede romper integraciones existentes.
|
|
134
|
+
|
|
135
|
+
**Opción C — Completa** (~15 turnos, ~80 archivos)
|
|
136
|
+
- Porte literal del sistema externo completo.
|
|
137
|
+
- Reemplaza todo lo equivalente, no importa que ya funcione.
|
|
138
|
+
- Riesgo: regresiones en funcionalidad madura.
|
|
139
|
+
|
|
140
|
+
**Recomiendo la Opción A**: el sistema actual cubre el 80% del valor;
|
|
141
|
+
los gaps específicos resuelven el caso concreto sin riesgo de regresión.
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Anti-patrones
|
|
147
|
+
|
|
148
|
+
- Arrancar a escribir código tras "replícame X" sin tabla comparativa.
|
|
149
|
+
- Presentar las opciones sin recomendar — pasar la pelota al usuario.
|
|
150
|
+
- Listar 5+ opciones cuando 3 son suficientes (mínima / media / completa).
|
|
151
|
+
- Estimar esfuerzo en términos vagos ("bastante trabajo", "no mucho") sin
|
|
152
|
+
cuantificar turnos / archivos / LOC.
|
|
153
|
+
- Omitir la auditoría de lo que ya existe y proponer porte literal de todo.
|
|
154
|
+
- Cuando el usuario pide la opción mínima, expandir el alcance "porque
|
|
155
|
+
conviene" sin pedir confirmación.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Origen de esta regla
|
|
160
|
+
|
|
161
|
+
Consolidada el 2026-05-04 desde feedback del usuario en sesión 2026-04-18 sobre
|
|
162
|
+
porte de Hermes Agent: tras pedir "replicar íntegramente Hermes Agent" (~960
|
|
163
|
+
archivos Python), aceptó la propuesta de cerrar solo 3 gaps específicos
|
|
164
|
+
(perfil de usuario, cron natural, auto-evolución). Lección: la auditoría previa
|
|
165
|
+
+ opciones explícitas evita re-implementar 80% de funcionalidad ya existente.
|
|
166
|
+
|
|
167
|
+
Reforzada en análisis de repos en `temp/` durante v1.1.0 de swl-ses (2026-04-23):
|
|
168
|
+
filtro de dominio descartó 97% del contenido de 5 repos antes de análisis
|
|
169
|
+
profundo, ahorrando horas de trabajo en arquitectura externa irrelevante.
|
|
170
|
+
|
|
171
|
+
Memoria nativa local correspondiente (`feedback_analisis_previo.md` en swl-ses):
|
|
172
|
+
redundante tras esta regla; el contenido operativo vive aquí.
|