@saulwade/swl-ses 1.1.2 → 1.1.4
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 +5 -3
- package/README.md +2 -2
- package/comandos/swl/exportar-vault.md +103 -1
- package/manifiestos/modulos.json +3 -1
- package/manifiestos/skills-lock.json +1 -1
- package/package.json +2 -2
- package/plugin.json +2 -2
- package/reglas/analisis-previo-tareas-grandes.md +172 -0
- package/reglas/arreglar-al-detectar.md +147 -0
package/CLAUDE.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# CLAUDE.md — @saulwade/swl-ses v1.1.
|
|
1
|
+
# CLAUDE.md — @saulwade/swl-ses v1.1.4
|
|
2
2
|
|
|
3
3
|
## Reglas de máxima prioridad (aplican SIEMPRE, sin excepción)
|
|
4
4
|
|
|
@@ -23,7 +23,7 @@ El Read tool sigue siendo correcto para `.pdf` (≤20 páginas), `.md`, `.txt` y
|
|
|
23
23
|
## Qué es este repositorio
|
|
24
24
|
|
|
25
25
|
Sistema de ingeniería de software auto-evolutivo multi-runtime polyglot (SDLC completo).
|
|
26
|
-
11 lenguajes, 5 runtimes, 59 agentes, 151 skills, 42 comandos,
|
|
26
|
+
11 lenguajes, 5 runtimes, 59 agentes, 151 skills, 42 comandos, 64 reglas, 39 hooks.
|
|
27
27
|
**Idioma**: 100% español (México) para componentes SWL y skills Anthropic en inglés.
|
|
28
28
|
|
|
29
29
|
## Estructura del repositorio
|
|
@@ -87,7 +87,7 @@ scripts/ bin/ _userland/ .claude/ .planning/
|
|
|
87
87
|
| `/swl:contribuir` | Contribuir evoluciones de _userland/ al core vía PR (filtro dominio + PluginEval ≥80) |
|
|
88
88
|
| `/swl:ayuda` | Ayuda interactiva: catálogo, detalle de comando, búsqueda por keyword |
|
|
89
89
|
|
|
90
|
-
## Reglas obligatorias (
|
|
90
|
+
## Reglas obligatorias (24 base + 40 por lenguaje)
|
|
91
91
|
|
|
92
92
|
| Regla | Carga cuando |
|
|
93
93
|
|-------|-------------|
|
|
@@ -111,6 +111,8 @@ scripts/ bin/ _userland/ .claude/ .planning/
|
|
|
111
111
|
| `patrones.md` | Patrones de diseño y arquitectura |
|
|
112
112
|
| `testing.md` | test*/, *.test.*, *.spec.* |
|
|
113
113
|
| `usar-context7.md` | OBLIGATORIA al generar código que importe librerías/frameworks externos. Aplica a `backend-*-swl`, `frontend-*-swl`, `mobile-*-swl`, `implementador-swl`, `llm-apps-swl`, `pagos-swl`, `datos-swl`. Verifica versión actual y deprecaciones via Context7 MCP antes de agregar deps o generar imports. |
|
|
114
|
+
| `arreglar-al-detectar.md` | Siempre — al detectar cualquier error, bug, inconsistencia o anomalía durante cualquier trabajo: informar y resolver en el mismo turno, sin deuda silenciosa ni bypass |
|
|
115
|
+
| `analisis-previo-tareas-grandes.md` | Cuando la solicitud implica >10 archivos, >500 LOC, cross-módulo, porte de sistema o repo en `temp/`: auditar primero, presentar tabla comparativa + 3 opciones de alcance, esperar confirmación |
|
|
114
116
|
|
|
115
117
|
Reglas por lenguaje (5 por lenguaje × 8 lenguajes): Java, Go, Rust, C#, Kotlin, Swift, PHP, Next.js — en `reglas/` con subdirectorios.
|
|
116
118
|
|
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# swl-ses v1.1.
|
|
1
|
+
# swl-ses v1.1.4
|
|
2
2
|
|
|
3
3
|
> El paquete anterior `@saulwadeleon/swl-software-engineering-system` está deprecado. Migrar a `@saulwade/swl-ses` (npmjs.org canónico) o `@saul-wade/swl-ses` (mirror en GitHub Packages) — el CLI `swl-ses` no cambia.
|
|
4
4
|
|
|
@@ -177,7 +177,7 @@ claude
|
|
|
177
177
|
| `mobile` | Android + iOS + React Native/Flutter + UX |
|
|
178
178
|
| `devops` | CI/CD + cloud + observabilidad + releases + seguridad |
|
|
179
179
|
| `polyglot` | Todos los lenguajes: 11 lenguajes + revisores + build resolvers |
|
|
180
|
-
| `completo` | Todo: 59 agentes + 151 habilidades + 42 comandos +
|
|
180
|
+
| `completo` | Todo: 59 agentes + 151 habilidades + 42 comandos + 64 reglas + 39 hooks |
|
|
181
181
|
|
|
182
182
|
### Targets soportados
|
|
183
183
|
|
|
@@ -44,6 +44,86 @@ Normaliza el slug del proyecto a kebab-case sin acentos. Ejemplos válidos:
|
|
|
44
44
|
- `swl-software-engineering-system`
|
|
45
45
|
- `ecosistema-multi-agente-ia`
|
|
46
46
|
|
|
47
|
+
## Paso 1.5 — Resolución del nombre canónico desde el vault (CRÍTICO)
|
|
48
|
+
|
|
49
|
+
Antes de redactar el frontmatter, **debes resolver el nombre canónico exacto** del proyecto leyendo `02-Projects/` del vault. Sin esto, el campo `related_vault_project` queda con un nombre fabricado que no enlaza con ningún nodo del grafo de Obsidian.
|
|
50
|
+
|
|
51
|
+
Listar proyectos del vault:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
ls "F:/Google Drive/Developer/Obsidian/Vault/SWL/02-Projects/" 2>/dev/null
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Resultado típico:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
DEV - Ecosistema Multi-Agente IA OIC-INE.md
|
|
61
|
+
DEV - SIGAF.md
|
|
62
|
+
DEV - SIGM.md
|
|
63
|
+
META - SWL Software Engineering System.md
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Algoritmo de match (en cascada — cada pasada solo se ejecuta si la anterior no resolvió match único):
|
|
67
|
+
|
|
68
|
+
**Normaliza ambos lados** a comparación robusta antes de cualquier pasada:
|
|
69
|
+
- Strip extensión `.md`.
|
|
70
|
+
- Strip prefijo `DEV - ` o `META - ` (cualquier prefijo seguido de ` - `).
|
|
71
|
+
- Lowercase.
|
|
72
|
+
- Sin acentos.
|
|
73
|
+
- Reemplaza espacios y guiones por nada (compactar).
|
|
74
|
+
|
|
75
|
+
Aplica el mismo procesamiento al slug del proyecto local.
|
|
76
|
+
|
|
77
|
+
**Pasada 1 — Match exacto**:
|
|
78
|
+
- Si la cadena normalizada del slug local coincide carácter a carácter con la de algún canónico, ese es el match. Caso típico: `sigaf` ↔ `DEV - SIGAF`.
|
|
79
|
+
|
|
80
|
+
**Pasada 2 — Match por prefijo bidireccional**:
|
|
81
|
+
- Si la cadena del slug local es **prefijo** de la cadena de algún canónico, ese canónico matchea. Ej: `ecosistemamultiagenteia` es prefijo de `ecosistemamultiagenteiaoicine` → match con `DEV - Ecosistema Multi-Agente IA OIC-INE`.
|
|
82
|
+
- Inversamente: si la cadena de algún canónico es prefijo de la del slug local, también matchea (cubre el caso opuesto: vault con nombre más corto que el slug del proyecto).
|
|
83
|
+
- Solo se acepta el match si la pasada produce **exactamente 1** candidato. Si hay 2+ ambiguos, NO usar — pasar a siguiente pasada con el alias o fallback final, listando los candidatos en el WARNING del Paso 5.
|
|
84
|
+
|
|
85
|
+
**Pasada 3 — Aliases conocidos**:
|
|
86
|
+
- Si ninguna pasada anterior resolvió, intenta con sinónimos del slug local antes del fallback (ver lista de aliases más abajo). Para cada alias, repite Pasada 1 y Pasada 2.
|
|
87
|
+
|
|
88
|
+
**Pasada 4 — Fallback**:
|
|
89
|
+
- Si todo lo anterior es vacío:
|
|
90
|
+
- Usar como `related_vault_project` el valor `[[DEV - {Nombre-Title-Case}]]` (fallback antiguo).
|
|
91
|
+
- **Reportar warning explícito al usuario** en el paso 5 indicando que no se encontró nodo canónico y sugerir crear `02-Projects/DEV - {Nombre}.md` en el vault.
|
|
92
|
+
|
|
93
|
+
Resultado del algoritmo: el nombre canónico es el basename del archivo sin `.md` (con su prefijo `DEV - ` o `META - ` original intacto).
|
|
94
|
+
|
|
95
|
+
Ejemplos de match esperado (con la pasada que lo resuelve):
|
|
96
|
+
|
|
97
|
+
| Slug local | Normalizado local | Canónico que matchea | Pasada | Nombre canónico resuelto |
|
|
98
|
+
|------------|-------------------|----------------------|--------|--------------------------|
|
|
99
|
+
| `sigaf` | `sigaf` | `sigaf` | 1 (exacto) | `DEV - SIGAF` |
|
|
100
|
+
| `sigm` | `sigm` | `sigm` | 1 (exacto) | `DEV - SIGM` |
|
|
101
|
+
| `swl-software-engineering-system` | `swlsoftwareengineeringsystem` | `swlsoftwareengineeringsystem` | 1 (exacto) | `META - SWL Software Engineering System` |
|
|
102
|
+
| `ecosistema-multi-agente-ia` | `ecosistemamultiagenteia` | `ecosistemamultiagenteiaoicine` | 2 (prefijo del slug en canónico) | `DEV - Ecosistema Multi-Agente IA OIC-INE` |
|
|
103
|
+
| `swl-ses` | `swlses` | ninguno (ver nota) | 3 (alias → reemplaza slug por `swlsoftwareengineeringsystem` y repite 1) | `META - SWL Software Engineering System` |
|
|
104
|
+
|
|
105
|
+
**Nota sobre el caso `swl-ses`** — un lector cuidadoso puede preguntarse por qué Pasada 2 (prefijo) no captura este caso, dado que `swlses` y `swlsoftwareengineeringsystem` comparten el inicio `swls`. La verificación carácter a carácter:
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
pos: 0 1 2 3 4 5
|
|
109
|
+
swlses: s w l s e s
|
|
110
|
+
swlsof: s w l s o f t w a r e ...
|
|
111
|
+
^
|
|
112
|
+
divergen aquí (e vs o)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
`swlses` **no es prefijo** de `swlsoftwareengineeringsystem` — comparten 4 caracteres pero divergen en la posición 4. Por eso Pasada 2 falla y se necesita la sustitución de alias en Pasada 3. Esta nota existe para prevenir el malentendido común de que "comparten algunas letras iniciales" implica "uno es prefijo del otro".
|
|
116
|
+
|
|
117
|
+
**Aliases conocidos** — si el slug local no matchea directo, intenta estos sinónimos antes del fallback:
|
|
118
|
+
|
|
119
|
+
- `swl-ses` → buscar `swl-software-engineering-system` o `swlsoftwareengineeringsystem`.
|
|
120
|
+
- Cualquier slug que empiece con `swl-` y termine en `-ses` o `-software-engineering-system` → trata como `swl-software-engineering-system`.
|
|
121
|
+
|
|
122
|
+
Guarda el resultado en dos variables internas para usar más abajo:
|
|
123
|
+
|
|
124
|
+
- `nombre_canonico_completo` — ej. `META - SWL Software Engineering System`. Va dentro de `[[ ]]` en el frontmatter.
|
|
125
|
+
- `proyecto_slug` — el slug original sin alterar. Va en el filename y en tags.
|
|
126
|
+
|
|
47
127
|
## Paso 2 — Recolección del contenido de la sesión
|
|
48
128
|
|
|
49
129
|
Junta estas fuentes (las que existan):
|
|
@@ -67,7 +147,7 @@ created: {fecha-hoy YYYY-MM-DD}
|
|
|
67
147
|
source: swl-ses
|
|
68
148
|
project: "{nombre-proyecto}"
|
|
69
149
|
project_path: "{ruta-absoluta}"
|
|
70
|
-
related_vault_project: "[[
|
|
150
|
+
related_vault_project: "[[{nombre_canonico_completo}]]"
|
|
71
151
|
reviewed: false
|
|
72
152
|
---
|
|
73
153
|
|
|
@@ -150,8 +230,30 @@ Reporta al usuario:
|
|
|
150
230
|
|
|
151
231
|
- Ruta exacta del archivo creado.
|
|
152
232
|
- Conteo de palabras.
|
|
233
|
+
- **Nombre canónico resuelto**: indicar qué nodo de `02-Projects/` enlazó el export. Si no hubo match, marcar el warning explícito.
|
|
153
234
|
- Recordatorio: "Al abrir el vault en tu próxima sesión, ejecuta `/sync-projects {proyecto-slug}` para integrar formalmente estos cambios."
|
|
154
235
|
|
|
236
|
+
Formato esperado cuando hay match:
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
[OK] Export creado: F:\...\2026-05-04_1748_export-swl-ses.md (487 palabras)
|
|
240
|
+
[OK] Enlace canónico: [[META - SWL Software Engineering System]]
|
|
241
|
+
|
|
242
|
+
Próximo paso: al abrir el vault, ejecuta:
|
|
243
|
+
/sync-projects swl-ses
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Formato esperado cuando NO hay match:
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
[OK] Export creado: F:\...\2026-05-04_1748_export-mi-proyecto.md (487 palabras)
|
|
250
|
+
[WARNING] No se encontró nodo canónico en 02-Projects/. Usado fallback: [[DEV - Mi Proyecto]]
|
|
251
|
+
Sugerencia: crear F:\...\02-Projects\DEV - Mi Proyecto.md en el vault para que el grafo conecte el export con el proyecto.
|
|
252
|
+
|
|
253
|
+
Próximo paso: al abrir el vault, ejecuta:
|
|
254
|
+
/sync-projects mi-proyecto
|
|
255
|
+
```
|
|
256
|
+
|
|
155
257
|
## Restricciones
|
|
156
258
|
|
|
157
259
|
- **No sobrescribir** archivos existentes con el mismo nombre. Si por azar existe uno con el mismo timestamp (raro), agrega sufijo `_b`.
|
package/manifiestos/modulos.json
CHANGED
|
@@ -836,7 +836,9 @@
|
|
|
836
836
|
"reglas/brevedad-output.md",
|
|
837
837
|
"reglas/seguridad-agentes.md",
|
|
838
838
|
"reglas/memoria-consolidada.md",
|
|
839
|
-
"reglas/usar-context7.md"
|
|
839
|
+
"reglas/usar-context7.md",
|
|
840
|
+
"reglas/arreglar-al-detectar.md",
|
|
841
|
+
"reglas/analisis-previo-tareas-grandes.md"
|
|
840
842
|
],
|
|
841
843
|
"targets": [
|
|
842
844
|
"claude",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saulwade/swl-ses",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot con 59 agentes, 151 habilidades, 42 comandos,
|
|
3
|
+
"version": "1.1.4",
|
|
4
|
+
"description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot con 59 agentes, 151 habilidades, 42 comandos, 64 reglas y 39 hooks. Soporta 11 lenguajes y 5 runtimes: Claude Code, Copilot, OpenCode, Codex y Gemini CLI. 100% en espanol (Mexico). Incluye gateway bidireccional con relay Telegram a Claude Code.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"swl-ses": "bin/swl-ses.js",
|
|
7
7
|
"swl-telegram-bot": "bin/swl-telegram-bot.js"
|
package/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "swl-ses",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot. 59 agentes, 151 habilidades, 42 comandos,
|
|
3
|
+
"version": "1.1.4",
|
|
4
|
+
"description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot. 59 agentes, 151 habilidades, 42 comandos, 64 reglas y 39 hooks. 62 librerias. 11 lenguajes. Soporta Claude Code, Copilot, OpenCode, Codex y Gemini CLI.",
|
|
5
5
|
"author": "Saul Wade Leon",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": "https://github.com/saul-wade/swl-ses",
|
|
@@ -0,0 +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í.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Regla: Detectar → Informar → Arreglar en el mismo turno
|
|
2
|
+
|
|
3
|
+
Esta regla es OBLIGATORIA y aplica a todo trabajo que Claude ejecute en cualquier
|
|
4
|
+
proyecto del usuario. Consolida cuatro feedbacks repetidos en sesiones distintas
|
|
5
|
+
entre 2026-04-23 y 2026-05-03 con la misma señal: el usuario rechaza entregas
|
|
6
|
+
parciales, deuda silenciosa y bypass de errores ajenos.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Principio
|
|
11
|
+
|
|
12
|
+
> Cuando detectes un error, bug, inconsistencia, anomalía o problema secundario
|
|
13
|
+
> durante la ejecución de cualquier trabajo, **informa al usuario brevemente Y
|
|
14
|
+
> procede a resolverlo en el mismo turno**. Nunca lo dejes como pendiente, deuda
|
|
15
|
+
> implícita, "ya estaba antes" ni "fuera del scope".
|
|
16
|
+
|
|
17
|
+
Esta regla resume cuatro feedbacks separados que el usuario reforzó como mismo
|
|
18
|
+
principio:
|
|
19
|
+
|
|
20
|
+
- "No me gustan las cosas a medias" — rechazo de entregas parciales (2026-04-23).
|
|
21
|
+
- "Cuando detectes errores, bugs, inconsistencias y demás informes al usuario y
|
|
22
|
+
procedas a solucionar y/o arreglar, además nunca debes dejar pendientes, ni
|
|
23
|
+
diferir" (2026-04-30).
|
|
24
|
+
- "Resuelve los test que fallan, no bypass" — al detectar intento de excluir
|
|
25
|
+
tests del glob para evitar arreglarlos (2026-04-30).
|
|
26
|
+
- "Si el job CI falla, hay que arreglarlo todo" — al ver tests rotos
|
|
27
|
+
presentados como "preexistentes, no críticos" (2026-05-03).
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Cómo aplicar
|
|
32
|
+
|
|
33
|
+
### Al detectar un problema secundario durante el trabajo principal
|
|
34
|
+
|
|
35
|
+
- Reportarlo brevemente al usuario: qué se detectó, dónde, severidad.
|
|
36
|
+
- Resolverlo en el mismo turno o en commit separado de la misma sesión.
|
|
37
|
+
- NUNCA ofrecer "lo documento como deuda" como primera opción.
|
|
38
|
+
- NUNCA usar frases como "son tests con mocks pre-existentes que ya estaban rotos",
|
|
39
|
+
"esto estaba antes", "no es del scope inmediato" para evitar el trabajo.
|
|
40
|
+
|
|
41
|
+
### Al ejecutar tests, builds, lints, validadores
|
|
42
|
+
|
|
43
|
+
- Si hay failures, listarlos todos y atacarlos todos.
|
|
44
|
+
- No distinguir "bugs reales" vs "tests con mocks mal configurados" como excusa
|
|
45
|
+
para arreglar solo unos. Si están rotos, arreglarlos.
|
|
46
|
+
- Excepción: bugs que requieran decisión arquitectural ambigua del usuario —
|
|
47
|
+
pedir esa decisión explícitamente, no diferir como "tu decisión".
|
|
48
|
+
|
|
49
|
+
### Al modificar código adyacente
|
|
50
|
+
|
|
51
|
+
- Si tocas líneas con problemas adyacentes (None checks faltantes, schemas
|
|
52
|
+
obsoletos, mocks inconsistentes, contadores stale, paths inválidos),
|
|
53
|
+
arreglarlos en el mismo commit o en commit separado de la misma sesión.
|
|
54
|
+
|
|
55
|
+
### Al refactorizar
|
|
56
|
+
|
|
57
|
+
- Si encuentras código adyacente que se quedó obsoleto por un refactor previo,
|
|
58
|
+
actualizarlo. No dejar deuda residual.
|
|
59
|
+
|
|
60
|
+
### Al detectar un error ajeno al trabajo actual
|
|
61
|
+
|
|
62
|
+
- NO bypassear (excluir tests del glob, comentar checks, `|| true`,
|
|
63
|
+
downgradear a warning, ignorar).
|
|
64
|
+
- Resolver de raíz o, si requiere decisión, abrir explícitamente la decisión
|
|
65
|
+
con el usuario antes de bypassear.
|
|
66
|
+
- El default es resolver, no esquivar.
|
|
67
|
+
|
|
68
|
+
### Al presentar planes con sub-tareas
|
|
69
|
+
|
|
70
|
+
- Dar primero la opción "todo completo" con esfuerzo estimado.
|
|
71
|
+
- Si por capacity hay que partir el trabajo, hacerlo explícito con razón
|
|
72
|
+
concreta: "esta sesión cubre 3.1 a 3.4; la 3.5 va en commit separado por
|
|
73
|
+
X razón concreta", no por preferencia genérica.
|
|
74
|
+
|
|
75
|
+
### Al recomendar diferir un patrón o feature
|
|
76
|
+
|
|
77
|
+
- Redactar **simultáneamente** el ítem de deuda formal con criterio de disparo
|
|
78
|
+
verificable. La oferta "lo dejo apuntado" sin entrada formal no es aceptable.
|
|
79
|
+
- Distinción de categorías:
|
|
80
|
+
- **DT (deuda técnica)** con plan de cierre.
|
|
81
|
+
- **DA (decisión arquitectural)** con trigger verificable.
|
|
82
|
+
- **OP (pendiente operacional)** con responsable.
|
|
83
|
+
- "Mediano plazo / Q3 / cuando aparezca demanda" sin trigger verificable es
|
|
84
|
+
deuda silenciosa. Convertir a DA formal en mismo commit.
|
|
85
|
+
- Trigger verificable significa condición observable: "≥2 clientes distintos
|
|
86
|
+
reportan", "p95 > 60s en producción documentado", "uso > N veces/mes",
|
|
87
|
+
no "cuando sea relevante" o "más adelante".
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Excepciones legítimas
|
|
92
|
+
|
|
93
|
+
NO aplicar la regla al pie de la letra cuando:
|
|
94
|
+
|
|
95
|
+
1. **El fix es ambiguo** — varias opciones razonables sin criterio claro para
|
|
96
|
+
elegir. Presentar opciones concretas con la recomendación y esperar
|
|
97
|
+
decisión rápida.
|
|
98
|
+
2. **El fix es destructivo** — `rm -rf`, `git reset --hard`, `git push --force`,
|
|
99
|
+
eliminar tablas de BD. Esos siguen requiriendo confirmación explícita por
|
|
100
|
+
separado, sin importar que el problema esté detectado.
|
|
101
|
+
3. **El fix tiene blast radius alto** — modifica configuración de CI, infra
|
|
102
|
+
compartida, contratos públicos de API. Presentar plan, pedir confirmación.
|
|
103
|
+
4. **El bug requiere decisión de producto** — comportamiento esperado ambiguo,
|
|
104
|
+
breaking change. Explícito al usuario y esperar.
|
|
105
|
+
|
|
106
|
+
En todos los casos: presentar la opción y la recomendación, NO dejar el
|
|
107
|
+
problema sin reportar.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Anti-patrones explícitos
|
|
112
|
+
|
|
113
|
+
- "Lo dejo como deuda residual" — sin DT/DA formal con criterio de disparo.
|
|
114
|
+
- "Esos tests ya estaban rotos antes" — usado para evitar arreglarlos.
|
|
115
|
+
- "No es parte del scope inmediato" — para esquivar un fix obvio.
|
|
116
|
+
- "Lo documento y tú decides" — para diferir trabajo claro al usuario.
|
|
117
|
+
- "Mediano plazo" sin trigger verificable.
|
|
118
|
+
- Excluir tests del glob, comentar checks, `|| true`, downgradear severidad de
|
|
119
|
+
un linter — para que el CI deje de fallar sin arreglar la causa.
|
|
120
|
+
- Mover archivos a `legacy/` o `deprecated/` sin plan de eliminación con
|
|
121
|
+
criterio de disparo.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Relación con otras reglas
|
|
126
|
+
|
|
127
|
+
- `seguridad-agentes.md` — sección "Anti-fallback silencioso y anti-degradación"
|
|
128
|
+
cubre el mismo principio aplicado a agentes autónomos. Esta regla lo extiende
|
|
129
|
+
al trabajo del usuario.
|
|
130
|
+
- `git-workflow.md` — los commits siguen siendo atómicos; arreglar un problema
|
|
131
|
+
detectado puede requerir varios commits, no uno solo gigante.
|
|
132
|
+
- `pruebas.md` — los tests rotos son violaciones a esta regla. No se mergea
|
|
133
|
+
con tests rotos (excepción: tests rotos por decisión de producto en proceso).
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Origen de esta regla
|
|
138
|
+
|
|
139
|
+
Consolidada el 2026-05-04 a partir de cuatro feedbacks repetidos del usuario en
|
|
140
|
+
memorias nativas de Claude Code de los proyectos sigm, swl-ses y emaia
|
|
141
|
+
(2026-04-23 a 2026-05-03). Antes vivía duplicada en 4 archivos de feedback
|
|
142
|
+
distintos en 2 de los 3 proyectos. Promovida a regla global para eliminar
|
|
143
|
+
duplicación y aplicar uniformemente a todo proyecto del usuario.
|
|
144
|
+
|
|
145
|
+
Memoria nativa local correspondiente: redundante tras esta regla; mantener solo
|
|
146
|
+
una mención mínima en MEMORY.md de cada proyecto si se desea preservar el rastro
|
|
147
|
+
histórico, pero el contenido operativo vive aquí.
|