@saulwade/swl-ses 1.3.7 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/CLAUDE.md +12 -4
  2. package/README.md +1 -1
  3. package/bin/swl-mcp-server.js +187 -187
  4. package/bin/swl-webhook-server.js +198 -0
  5. package/comandos/swl/.evolved.json +22 -22
  6. package/comandos/swl/adoptar-proyecto.md +21 -1
  7. package/comandos/swl/claudemd.md +14 -1
  8. package/comandos/swl/contribuir.md +233 -233
  9. package/comandos/swl/exportar-vault.md +207 -7
  10. package/comandos/swl/nuevo-proyecto.md +24 -2
  11. package/gateway/adapters/base.js +109 -0
  12. package/gateway/adapters/discord.js +167 -0
  13. package/gateway/adapters/email.js +221 -0
  14. package/gateway/adapters/slack.js +192 -0
  15. package/gateway/adapters/telegram.js +183 -0
  16. package/gateway/adapters/webhook.js +113 -0
  17. package/gateway/adapters/whatsapp.js +214 -0
  18. package/gateway/agent-executor.js +322 -0
  19. package/gateway/command-relay.js +271 -0
  20. package/gateway/cron/jobs.js +263 -0
  21. package/gateway/cron/scheduler.js +322 -0
  22. package/gateway/cron/store.js +335 -0
  23. package/gateway/index.js +320 -0
  24. package/gateway/lib/event-channel.js +191 -0
  25. package/gateway/session.js +131 -0
  26. package/gateway/webhook-server.js +324 -0
  27. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  28. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  29. package/habilidades/build-errors-nextjs/SKILL.md +55 -1
  30. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  31. package/habilidades/doubt-driven-review/SKILL.md +171 -171
  32. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  33. package/habilidades/eval-framework/SKILL.md +212 -212
  34. package/habilidades/extractor-de-aprendizajes/SKILL.md +24 -10
  35. package/habilidades/harness-claude-code/SKILL.md +299 -299
  36. package/habilidades/infra-github-actions/SKILL.md +166 -166
  37. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  38. package/habilidades/manejo-errores/.evolved.json +8 -8
  39. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  40. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  41. package/habilidades/nextjs-testing/SKILL.md +89 -5
  42. package/habilidades/node-experto/SKILL.md +37 -1
  43. package/habilidades/patrones-python/SKILL.md +229 -229
  44. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  45. package/habilidades/planear-fase/SKILL.md +319 -319
  46. package/habilidades/react-experto/SKILL.md +45 -4
  47. package/habilidades/release-semver/.evolved.json +8 -8
  48. package/habilidades/swl-claudemd/SKILL.md +15 -1
  49. package/habilidades/tdd-workflow/SKILL.md +36 -4
  50. package/habilidades/testing-python/SKILL.md +340 -340
  51. package/hooks/claudemd-bloat-detector.js +161 -161
  52. package/hooks/inyeccion-contexto.js +8 -3
  53. package/hooks/lib/agent-routing.js +107 -107
  54. package/hooks/lib/auto-consolidator.js +335 -335
  55. package/hooks/lib/error-classifier.js +308 -308
  56. package/hooks/lib/merkle-audit.js +96 -96
  57. package/hooks/lib/provenance-tracker.js +191 -191
  58. package/hooks/lib/rate-limit-ip.js +177 -0
  59. package/hooks/lib/rate-limit-tracker.js +253 -253
  60. package/hooks/lib/resource-quota.js +122 -122
  61. package/hooks/lib/retry-jitter.js +165 -165
  62. package/hooks/lib/skill-auditor.js +588 -588
  63. package/hooks/lib/sync-status.js +228 -228
  64. package/hooks/lib/taint-tracker.js +107 -107
  65. package/hooks/lib/text-similarity.js +241 -241
  66. package/hooks/lib/toon-compressor.js +245 -245
  67. package/hooks/lib/webhook-dedup.js +184 -0
  68. package/hooks/lib/webhook-verify.js +123 -0
  69. package/hooks/proteccion-rutas.js +120 -15
  70. package/hooks/registro-turnos.js +209 -209
  71. package/hooks/sugerir-regenerar-inventario.js +170 -170
  72. package/hooks/validar-formato-post-subagente.js +140 -140
  73. package/hooks/validar-memoria-hook.js +218 -218
  74. package/instintos/prompt-appendices.yaml +57 -57
  75. package/manifiestos/agent-output-schemas.json +57 -57
  76. package/manifiestos/modulos.json +1 -0
  77. package/manifiestos/skills-lock.json +37 -37
  78. package/package.json +5 -3
  79. package/plantillas/auditor-veto-template.md +105 -105
  80. package/plantillas/github-workflows/README.md +47 -47
  81. package/plantillas/github-workflows/release-please.yml +44 -44
  82. package/plantillas/github-workflows/swl-ci.yml +107 -107
  83. package/plantillas/github-workflows/swl-security.yml +51 -51
  84. package/plugin.json +1 -1
  85. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  86. package/reglas/arreglar-al-detectar.md +147 -147
  87. package/reglas/fragmentos-compartidos.md +152 -152
  88. package/reglas/harness-claude-code.md +213 -213
  89. package/reglas/usar-context7.md +226 -226
  90. package/reglas/usar-sistema-swl.md +251 -0
  91. package/schemas/diary-entry.schema.json +80 -80
  92. package/scripts/benchmark-memoria.js +167 -167
  93. package/scripts/comandos/skills.js +251 -2
  94. package/scripts/configurar-branch-protection.js +418 -418
  95. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  96. package/scripts/field-report.js +199 -199
  97. package/scripts/generar-checklists-consolidados.js +273 -273
  98. package/scripts/generar-inventario.js +420 -420
  99. package/scripts/generar-matriz-lenguajes.js +271 -271
  100. package/scripts/lib/artefactos-python.js +43 -43
  101. package/scripts/lib/benchmark-metrics.js +160 -160
  102. package/scripts/lib/budget-enforcer.js +252 -252
  103. package/scripts/lib/configurar-ci.js +380 -380
  104. package/scripts/lib/contadores-inventario.js +217 -217
  105. package/scripts/lib/detectar-stack-detallado.js +307 -307
  106. package/scripts/lib/diary-entry.js +234 -234
  107. package/scripts/lib/eval-metrics-store.js +218 -218
  108. package/scripts/lib/eval-quality.js +171 -171
  109. package/scripts/lib/eval-schemas.js +144 -144
  110. package/scripts/lib/eval-self-correct.js +106 -106
  111. package/scripts/lib/eval-validator.js +185 -185
  112. package/scripts/lib/jaccard-similarity.js +98 -98
  113. package/scripts/lib/longmemeval-runner.js +125 -125
  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/limpiar-artefactos-python.js +131 -131
  121. package/scripts/mcp-server/README.md +128 -128
  122. package/scripts/mcp-server/handlers.js +206 -206
  123. package/scripts/migrar-csv-a-array.js +168 -168
  124. package/scripts/migrar-fase-dominio.js +201 -201
  125. package/scripts/publicar.js +511 -511
  126. package/scripts/run-eval.js +141 -141
  127. package/scripts/validar-manifest.js +195 -195
  128. package/scripts/validar-userland-vacio.js +110 -110
  129. package/scripts/verificar-release.js +110 -0
@@ -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í.
@@ -1,147 +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í.
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í.