@saulwade/swl-ses 1.9.0 → 2.1.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 (142) hide show
  1. package/CLAUDE.md +196 -196
  2. package/README.md +579 -579
  3. package/agentes/_propose-step.md +90 -0
  4. package/agentes/accesibilidad-wcag-swl.md +3 -3
  5. package/agentes/auto-evolucion-swl.md +908 -908
  6. package/agentes/disenador-ui-swl.md +6 -5
  7. package/agentes/frontend-angular-swl.md +2 -2
  8. package/agentes/frontend-css-swl.md +2 -2
  9. package/agentes/frontend-react-swl.md +4 -4
  10. package/agentes/frontend-swl.md +6 -6
  11. package/agentes/implementador-swl.md +2 -0
  12. package/agentes/investigador-ux-swl.md +5 -5
  13. package/agentes/orquestador-swl.md +9 -7
  14. package/agentes/perfilador-usuario-swl.md +321 -308
  15. package/agentes/producto-prd-swl.md +1 -1
  16. package/agentes/red-team-swl.md +218 -218
  17. package/agentes/tdd-qa-swl.md +17 -1
  18. package/bin/swl-ses.js +1 -1
  19. package/comandos/swl/actualizar.md +1 -1
  20. package/comandos/swl/aprender.md +2 -2
  21. package/comandos/swl/aprobar-plan.md +153 -0
  22. package/comandos/swl/ayuda.md +3 -3
  23. package/comandos/swl/briefing.md +122 -0
  24. package/comandos/swl/compactar.md +29 -2
  25. package/comandos/swl/discutir-fase.md +23 -2
  26. package/comandos/swl/ejecutar-fase.md +59 -6
  27. package/comandos/swl/evolucionar.md +1 -1
  28. package/comandos/swl/inbox.md +1 -1
  29. package/comandos/swl/instalar.md +1 -1
  30. package/comandos/swl/nemesis.md +1 -1
  31. package/comandos/swl/planear-fase.md +19 -1
  32. package/comandos/swl/plugins.md +1 -1
  33. package/comandos/swl/release.md +47 -1
  34. package/comandos/swl/status.md +348 -0
  35. package/comandos/swl/verificar.md +27 -1
  36. package/habilidades/ai-runtime-security/SKILL.md +1 -1
  37. package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -276
  38. package/habilidades/benchmark-memoria/SKILL.md +1 -1
  39. package/habilidades/calidad-contract-testing/SKILL.md +165 -0
  40. package/habilidades/changelog-generator/SKILL.md +9 -2
  41. package/habilidades/changelog-generator/scripts/parse-commits.js +13 -1
  42. package/habilidades/diagrama-arquitectura/SKILL.md +1 -1
  43. package/habilidades/drift-detection/SKILL.md +179 -179
  44. package/habilidades/ejecutar-fase/SKILL.md +541 -468
  45. package/habilidades/estructura-proyecto-claude/SKILL.md +17 -14
  46. package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +34 -23
  47. package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +70 -53
  48. package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -77
  49. package/habilidades/extractor-de-aprendizajes/SKILL.md +9 -5
  50. package/habilidades/harness-claude-code/SKILL.md +10 -7
  51. package/{reglas/harness-claude-code.md → habilidades/harness-claude-code/recursos/disciplina-harness-regla.md} +2 -2
  52. package/habilidades/instalar-sistema/SKILL.md +3 -3
  53. package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +1 -1
  54. package/habilidades/perfil-usuario/SKILL.md +200 -200
  55. package/habilidades/planear-fase/SKILL.md +26 -4
  56. package/habilidades/proceso-ddia-fundamentos/SKILL.md +1 -1
  57. package/habilidades/proceso-ddia-streaming/SKILL.md +4 -4
  58. package/habilidades/proceso-debate-adversarial/SKILL.md +2 -2
  59. package/habilidades/protocolo-revision-swl/SKILL.md +1 -1
  60. package/habilidades/seguridad-skills-ia/SKILL.md +1 -1
  61. package/habilidades/swl-claudemd/SKILL.md +50 -210
  62. package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -0
  63. package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -0
  64. package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -0
  65. package/habilidades/swl-dashboard/SKILL.md +9 -9
  66. package/habilidades/swl-revisar-impacto/SKILL.md +1 -1
  67. package/habilidades/tdd-workflow/SKILL.md +715 -673
  68. package/habilidades/validacion-ci-sistema/SKILL.md +20 -4
  69. package/hooks/calidad-pre-commit.js +344 -3
  70. package/hooks/check-update.js +39 -1
  71. package/hooks/ciclo-evolucion-subagente.js +26 -0
  72. package/hooks/ciclo-evolucion.js +26 -0
  73. package/hooks/extraccion-aprendizajes.js +13 -0
  74. package/hooks/lib/autonomia.js +208 -0
  75. package/hooks/lib/briefing.js +474 -0
  76. package/hooks/lib/ciclo-evolucion.js +47 -0
  77. package/hooks/{auto-evolucion.js → lib/etapa-auto-evolucion.js} +701 -700
  78. package/hooks/{metricas-evolucion.js → lib/etapa-metricas.js} +388 -376
  79. package/hooks/{actualizar-perfil-usuario.js → lib/etapa-perfil-usuario.js} +376 -364
  80. package/hooks/lib/evolution-tracker.js +24 -3
  81. package/hooks/lib/propose-step.js +357 -0
  82. package/hooks/session-briefing.js +98 -0
  83. package/hooks/spec-gate.js +211 -0
  84. package/hooks/tdd-gate.js +241 -0
  85. package/hooks/telemetria-skill-routing.js +100 -0
  86. package/hooks/validar-intent-spec.js +30 -10
  87. package/instintos/autonomia.yaml +27 -0
  88. package/llms.txt +6 -6
  89. package/manifiestos/hooks-config.json +44 -17
  90. package/manifiestos/modulos.json +40 -15
  91. package/manifiestos/skills-lock.json +64 -57
  92. package/package.json +93 -93
  93. package/plugin.json +371 -375
  94. package/reglas/accesibilidad.md +10 -0
  95. package/reglas/analizar-directorios-antes-de-escribir.md +228 -0
  96. package/reglas/api-diseno.md +9 -0
  97. package/reglas/auditorias-documentales-estructurales.md +7 -0
  98. package/reglas/cloud-infra.md +8 -0
  99. package/reglas/consultar-vault-primero.md +195 -0
  100. package/reglas/debatir-antes-de-aceptar.md +158 -0
  101. package/reglas/fragmentos-compartidos.md +5 -0
  102. package/reglas/git-coauthor.md +100 -0
  103. package/reglas/gobernanza.md +4 -4
  104. package/reglas/hooks.md +6 -0
  105. package/reglas/intent-engineering.md +4 -0
  106. package/reglas/markitdown.md +8 -0
  107. package/reglas/memoria-consolidada.md +1 -1
  108. package/reglas/monitor-ci.md +309 -0
  109. package/reglas/patrones.md +6 -0
  110. package/reglas/registro-componentes-nuevos.md +39 -2
  111. package/reglas/seguridad-agentes.md +1 -1
  112. package/reglas/sesiones-paralelas.md +180 -0
  113. package/reglas/skills-estandar.md +6 -0
  114. package/reglas/testing.md +7 -0
  115. package/reglas/tests-cleanup.md +4 -0
  116. package/reglas/usar-code-review-graph.md +155 -0
  117. package/reglas/usar-sistema-swl.md +1 -1
  118. package/reglas/verificar-citas-normativas.md +548 -0
  119. package/scripts/instalador.js +52 -6
  120. package/scripts/lib/ci-reader.js +193 -0
  121. package/scripts/lib/detectar-host-swl.js +175 -0
  122. package/scripts/lib/evidencia-release.js +322 -0
  123. package/scripts/lib/gate-hooks-requires.js +249 -0
  124. package/scripts/lib/gate-licencias.js +212 -0
  125. package/scripts/lib/git-metricas.js +257 -0
  126. package/scripts/lib/gitignore-manifest.js +29 -1
  127. package/scripts/lib/metricas-dora.js +204 -0
  128. package/scripts/lib/plan-lock.js +275 -0
  129. package/scripts/migrar-fase-dominio.js +0 -1
  130. package/scripts/tui/ejecutores.js +1 -1
  131. package/scripts/validar-manifest.js +92 -1
  132. package/scripts/verificar-evolucion.js +54 -4
  133. package/scripts/verificar-release.js +102 -0
  134. package/scripts/verificar-trazabilidad.js +298 -0
  135. package/agentes/ux-disenador-swl.md +0 -503
  136. package/comandos/swl/dashboard.md +0 -146
  137. package/comandos/swl/evolucion-estado.md +0 -191
  138. package/comandos/swl/metricas.md +0 -376
  139. package/comandos/swl/salud.md +0 -481
  140. package/reglas/arquitectura.evolved.json +0 -7
  141. package/reglas/seguridad.evolved.json +0 -7
  142. package/reglas/verificar-citas-temporales.md +0 -139
@@ -1,3 +1,13 @@
1
+ ---
2
+ paths:
3
+ - "**/*.tsx"
4
+ - "**/*.jsx"
5
+ - "**/*.vue"
6
+ - "**/*.svelte"
7
+ - "**/*.html"
8
+ - "**/*.css"
9
+ - "**/*.scss"
10
+ ---
1
11
  # Regla: Accesibilidad
2
12
 
3
13
  Esta regla es OBLIGATORIA para todo código frontend sin excepción.
@@ -0,0 +1,228 @@
1
+ # Regla: Analizar la estructura de directorios antes de escribir documentación o MDs
2
+
3
+ Esta regla es OBLIGATORIA y aplica cada vez que Claude va a **crear un
4
+ directorio nuevo** o **escribir un archivo de documentación** (`.md`, `.json`
5
+ de reporte, informe, ADR, plan, análisis, output de auditoría/diseño/research)
6
+ en cualquier proyecto del usuario.
7
+
8
+ Cierra un patrón conductual recurrente: el agente escribe un documento en un
9
+ directorio nuevo elegido ad-hoc — en idioma o nombre distinto al que el
10
+ proyecto ya usa para ese dominio — y produce **directorios paralelos
11
+ divergentes** que fragmentan la memoria institucional.
12
+
13
+ ---
14
+
15
+ ## Principio
16
+
17
+ > Antes de crear un directorio nuevo o escribir un MD/reporte, **analiza
18
+ > primero la estructura de directorios existente** (`Glob`/`ls`) para
19
+ > descubrir la convención que el proyecto YA usa para ese dominio, y
20
+ > **reúsala**. NUNCA crees un directorio paralelo para un dominio que ya
21
+ > tiene uno. Solo cuando no exista precedente, crea uno nuevo siguiendo la
22
+ > convención dominante del proyecto; como desempate del **nombre**, prefiere
23
+ > español de México — salvo que exista un path canónico establecido (aunque
24
+ > sea en inglés), en cuyo caso ese path gana.
25
+
26
+ El costo de un `ls` antes de escribir es de 1 segundo. El costo de un
27
+ directorio paralelo es: referencias colgadas, búsquedas que fallan, memoria
28
+ institucional partida, y una sesión futura de depuración/unificación.
29
+
30
+ ---
31
+
32
+ ## Cuándo aplicar
33
+
34
+ OBLIGATORIO antes de:
35
+
36
+ - Escribir un reporte de auditoría, verificación, nemesis, revisión, análisis.
37
+ - Escribir un documento de diseño/UX (propuesta, tokens, discovery, UI-SPEC).
38
+ - Crear un ADR, plan, spec, runbook, research output.
39
+ - Crear cualquier directorio nuevo bajo `.planning/`, `docs/`, o equivalente.
40
+ - Persistir cualquier `.md`/`.json` que sea memoria del proyecto (no código).
41
+
42
+ NO aplica cuando:
43
+
44
+ - El comando/agente/herramienta **fija un path canónico de output** — en ese
45
+ caso úsalo tal cual, no lo cuestiones (ej: un agente que pinea
46
+ `.planning/audit/findings/iter-N/`).
47
+ - El archivo es código fuente (sigue las convenciones del lenguaje/framework).
48
+ - El usuario indicó explícitamente la ruta exacta donde escribir.
49
+ - Es un archivo efímero de scratch que se borrará en el mismo turno.
50
+
51
+ ---
52
+
53
+ ## Cómo aplicar — protocolo de 4 pasos
54
+
55
+ ### Paso 1 — Listar la estructura existente
56
+
57
+ Antes de elegir dónde escribir:
58
+
59
+ ```bash
60
+ ls .planning/ # o el directorio raíz de docs del proyecto
61
+ ls docs/
62
+ ```
63
+
64
+ O con Glob: `**/{audit,auditoria,diseno*,ux,design,research,specs}/`.
65
+
66
+ ### Paso 2 — Buscar si el dominio ya tiene directorio (incluye variantes es/en)
67
+
68
+ Pregúntate: ¿ya existe un directorio para este tipo de artefacto? Busca
69
+ **variantes en ambos idiomas** y sinónimos:
70
+
71
+ | Dominio | Variantes a buscar antes de crear |
72
+ |---|---|
73
+ | Auditoría | `audit/`, `auditoria/`, `auditorias/`, `findings/` |
74
+ | Diseño/UX | `diseno/`, `diseno-visual/`, `ux/`, `ui/`, `design/` |
75
+ | Investigación | `research/`, `investigacion/`, `knowledge/` |
76
+ | Decisiones | `adrs/`, `adr/`, `decisiones/` |
77
+ | Sesiones | `sessions/`, `sesiones/` |
78
+ | Deuda | `DEUDAS.md`, `DEUDA-TECNICA.md`, `deuda/`, `debt/` |
79
+
80
+ ### Paso 3 — Decidir el destino
81
+
82
+ - **Si ya existe un directorio para el dominio** → escribe ahí. Punto. Aunque
83
+ el nombre existente esté en el "idioma equivocado", reusarlo es superior a
84
+ crear un paralelo. La consistencia gana sobre la preferencia de idioma.
85
+ - **Si existe un path canónico de la herramienta** (swl-ses pinea
86
+ `.planning/audit/`, `knowledge/outputs/`, `sessions/`, etc.) → ese path es
87
+ la fuente de verdad. NO lo dupliques en español.
88
+ - **Si NO existe precedente** → crea uno nuevo siguiendo la convención
89
+ dominante del proyecto (mira cómo están nombrados los directorios hermanos).
90
+
91
+ ### Paso 4 — Desempate del nombre (solo para directorios genuinamente nuevos)
92
+
93
+ Cuando creas un nombre nuevo sin precedente ni path canónico:
94
+
95
+ - Prefiere **español de México** (consistente con
96
+ `~/.claude/rules/brevedad-output.md § Idioma obligatorio`): `diseno/`,
97
+ `investigacion/`, `auditoria/` antes que `design/`, `research/`, `audit/`.
98
+ - **PERO**: si el proyecto ya tiene una convención de idioma dominante para
99
+ sus directorios (ej: swl-ses usa mayormente inglés: `audit/`, `knowledge/`,
100
+ `sessions/`, `research/`), respeta ESA convención sobre la preferencia
101
+ general — la coherencia intra-proyecto manda.
102
+ - Identificadores técnicos (nombres que un comando/script consume como string)
103
+ siguen la convención del consumidor, no la preferencia de idioma.
104
+
105
+ ---
106
+
107
+ ## La tensión es/en — cómo resolverla (no es "español siempre")
108
+
109
+ "Preferir español" es un **desempate**, no un mandato absoluto. La jerarquía
110
+ de decisión, de mayor a menor prioridad:
111
+
112
+ 1. **Path canónico fijado por la herramienta** (gana siempre, aunque sea inglés).
113
+ 2. **Directorio existente para el dominio** (reusar, aunque el idioma "no cuadre").
114
+ 3. **Convención de idioma dominante del proyecto** (si el proyecto es es → es;
115
+ si es en → en).
116
+ 4. **Preferencia general español de México** (solo cuando 1-3 no aplican).
117
+
118
+ Renombrar un path canónico inglés establecido a español **viola** esta regla:
119
+ reintroduce divergencia en vez de eliminarla. El objetivo es UNA convención por
120
+ proyecto, no "todo en español".
121
+
122
+
123
+ ---
124
+
125
+ ## Eje técnico-runtime vs vocabulario-de-dominio (refina la jerarquía)
126
+
127
+ La jerarquía de arriba decide entre español e inglés *cuando todo el árbol usa
128
+ un solo idioma*. Pero muchos proyectos adoptan una convención **mixta por
129
+ categoría**: "identificadores técnicos en inglés, vocabulario de cara al usuario
130
+ en el idioma del proyecto" (caso swl-ses). Ahí, **clasifica el directorio ANTES**
131
+ de aplicar la jerarquía:
132
+
133
+ - **Path runtime/técnico → inglés.** Telemetría, estado interno, caches, logs
134
+ archivados, outputs de tooling, índices. No los lee el usuario final; los
135
+ consume el código como string. Ej. en swl-ses: `.planning/evolution/`,
136
+ `.planning/auto-evolution/`, `.planning/user-profile/`, `.planning/archive/`,
137
+ `.planning/traces/`, `.planning/sessions/`, `.planning/audit/`.
138
+ - **Vocabulario de dominio de cara al usuario → idioma del proyecto.** Artefactos
139
+ acoplados a comandos/UX cuyo nombre el usuario lee y escribe. Ej. en swl-ses:
140
+ `.planning/fases/` permanece **español** porque su comando es `/swl:planear-fase`
141
+ (español, intocable). Cambiar el dir sin cambiar el comando crea una
142
+ inconsistencia comando↔directorio *peor* que la divergencia que se quería evitar.
143
+
144
+ **Regla de coherencia comando↔directorio:** el nombre del data dir debe espejar
145
+ el idioma del comando que escribe en él. NUNCA partir un par comando↔directorio
146
+ en dos idiomas.
147
+
148
+ **Consolidar islas runtime SÍ es válido (no viola "no renombrar paths
149
+ establecidos"):** si un proyecto con convención técnico-inglés tiene islas
150
+ runtime en español (`evolucion/`, `archivo/`), alinearlas a inglés *reduce*
151
+ divergencia — es lo opuesto a "renombrar `audit/` a español". La prohibición de
152
+ renombrar aplica a mover *desde* la convención establecida, no *hacia* ella. Las
153
+ islas runtime alineadas requieren shim de migración (renombrar el dir físico en
154
+ proyectos que ya tienen datos) — ver `scripts/instalador.js § 6c-bis` en swl-ses.
155
+
156
+
157
+ ---
158
+
159
+ ## Anti-patrones explícitos
160
+
161
+ - **Crear `ux/` cuando ya existe `diseno-visual/`** (o viceversa) sin haber
162
+ hecho `ls .planning/` primero. Caso real: SIGM acumuló ambos por sesiones
163
+ distintas que no verificaron el precedente.
164
+ - **Crear `auditoria/` (es) cuando la herramienta pinea `audit/` (en)** como
165
+ path canónico. Caso real: `/swl:verificar` y el consolidado de `/swl:nemesis`
166
+ escribieron en `auditoria/` mientras los reportes por-router iban a
167
+ `audit/findings/` — misma corrida, dos directorios.
168
+ - **Renombrar `audit/`, `knowledge/`, `sessions/` a español** "porque la
169
+ preferencia es español". Eso rompe paths canónicos y reintroduce divergencia.
170
+ - **Escribir un reporte en un directorio top-level nuevo** sin revisar los
171
+ directorios hermanos existentes.
172
+ - **Asumir que no hay precedente sin buscar variantes es/en** del nombre del
173
+ dominio.
174
+
175
+ ---
176
+
177
+ ## Excepciones legítimas
178
+
179
+ NO aplicar (o aplicar con criterio reducido) cuando:
180
+
181
+ 1. El comando/agente **pinea el path** — úsalo, no analices.
182
+ 2. El usuario dictó la ruta exacta.
183
+ 3. Es un archivo de scratch efímero del mismo turno.
184
+ 4. Es el **primer** documento del proyecto (no hay estructura que analizar
185
+ todavía) — ahí creas la convención; hazlo deliberadamente y en español si
186
+ no hay restricción técnica.
187
+
188
+ ---
189
+
190
+ ## Checklist antes de escribir un MD/reporte o crear un directorio
191
+
192
+ - [ ] Ejecuté `ls`/`Glob` sobre el directorio raíz de docs (`.planning/`, `docs/`).
193
+ - [ ] Busqué variantes es/en del nombre del dominio (audit/auditoria,
194
+ diseno/ux/design, research/investigacion).
195
+ - [ ] Si existe directorio para el dominio → escribo ahí (no creo paralelo).
196
+ - [ ] Si la herramienta pinea path canónico → uso ese (aunque sea inglés).
197
+ - [ ] Si creo uno nuevo → sigue la convención de idioma dominante del proyecto;
198
+ español como desempate solo sin precedente ni path canónico.
199
+ - [ ] No reintroduje divergencia renombrando un path canónico establecido.
200
+
201
+ ---
202
+
203
+ ## Origen de esta regla
204
+
205
+ Sesión 2026-05-31, proyecto SIGM. Al depurar `.planning/` se detectaron **dos
206
+ pares de directorios divergentes** creados por sesiones distintas para el mismo
207
+ dominio, en idiomas distintos:
208
+
209
+ - `.planning/audit/` (en, canónico swl-ses) vs `.planning/auditoria/` (es,
210
+ ad-hoc). La misma corrida de `/swl:nemesis` quedó partida entre ambos; 8
211
+ documentos con referencias colgadas tras la consolidación.
212
+ - `.planning/ux/` (en, 2026-05-30) vs `.planning/diseno-visual/` (es,
213
+ 2026-05-11). La sesión 05-30 creó `ux/` sin verificar que `diseno-visual/`
214
+ ya existía.
215
+
216
+ Causa raíz dual: (a) **conductual** — el agente no analiza la estructura
217
+ existente antes de escribir (esta regla); (b) **de herramienta** — varios
218
+ comandos/agentes de swl-ses no fijan path canónico de output (ticket
219
+ `DT-PLANNING-OUTPUT-PATHS` en swl-ses). Esta regla ataca el lado conductual y
220
+ aplica a todo proyecto del usuario, use o no swl-ses.
221
+
222
+ Relación con otras reglas:
223
+ - `~/.claude/rules/brevedad-output.md § Idioma obligatorio` — la preferencia
224
+ español que esta regla usa como desempate.
225
+ - `~/.claude/rules/memoria-consolidada.md § no-duplicación` — un dato vive en
226
+ un solo canal; esta regla extiende el principio a directorios.
227
+ - `~/.claude/rules/sin-duplicacion-reglas-globales.md` — analogía: no duplicar
228
+ contenido que ya vive en su lugar canónico.
@@ -1,3 +1,12 @@
1
+ ---
2
+ paths:
3
+ - "**/api/**"
4
+ - "**/routers/**"
5
+ - "**/controllers/**"
6
+ - "**/handlers/**"
7
+ - "**/endpoints/**"
8
+ - "**/openapi.{yaml,yml,json}"
9
+ ---
1
10
  # Regla: Diseño de APIs REST
2
11
 
3
12
  Esta regla es OBLIGATORIA para toda API REST expuesta, ya sea pública o interna.
@@ -1,3 +1,10 @@
1
+ ---
2
+ paths:
3
+ - "**/scripts/verificar-*.js"
4
+ - "**/MANUAL_USO.md"
5
+ - "**/manifiestos/**"
6
+ - "**/INVENTARIO.md"
7
+ ---
1
8
  # Regla: Auditorías documentales estructurales en SWL
2
9
 
3
10
  Esta regla es **OBLIGATORIA** y aplica a todo agente o agente humano que
@@ -1,3 +1,11 @@
1
+ ---
2
+ paths:
3
+ - "**/*.tf"
4
+ - "**/*.tfvars"
5
+ - "**/Dockerfile*"
6
+ - "**/*.bicep"
7
+ - "**/docker-compose*.{yml,yaml}"
8
+ ---
1
9
  # Regla: Infraestructura Cloud
2
10
 
3
11
  Esta regla es OBLIGATORIA para todo recurso desplegado en cloud sin excepción.
@@ -0,0 +1,195 @@
1
+ # Regla: Consultar el vault Obsidian antes de leer múltiples archivos
2
+
3
+ Esta regla es OBLIGATORIA y aplica cuando Claude necesita contexto de dominio
4
+ (arquitectura, decisiones, patrones, lecciones, vocabulario del proyecto) antes
5
+ de implementar, debugear, planificar o responder preguntas no triviales.
6
+
7
+ El vault Obsidian del usuario es **fuente de verdad curada**: contiene resúmenes,
8
+ ADRs, notas de decisiones, índices de proyectos, lecciones aprendidas. Está
9
+ indexado y consultable vía MCP server `obsidian`. Leer ahí primero es más
10
+ eficiente en tokens que leer múltiples archivos del codebase.
11
+
12
+ ---
13
+
14
+ ## Principio
15
+
16
+ > Antes de leer **3 o más archivos completos** del codebase para construir
17
+ > contexto general (arquitectura, decisiones previas, convenciones del proyecto,
18
+ > patrones), **consulta el vault Obsidian primero** con `obsidian_simple_search`
19
+ > o `obsidian_complex_search`. Lee únicamente las notas relevantes. Solo cae
20
+ > al codebase para los detalles concretos que el vault no cubra.
21
+
22
+ Esto reduce el contexto consumido y aprovecha el conocimiento que el usuario ya
23
+ sintetizó manualmente.
24
+
25
+ ---
26
+
27
+ ## Cuándo aplicar
28
+
29
+ OBLIGATORIO consultar el vault antes de:
30
+
31
+ - Empezar una sesión nueva en un proyecto donde el usuario menciona terminología
32
+ específica (nombres de sistemas, ADRs, conceptos del dominio)
33
+ - **Tomar una decisión de diseño, arquitectura o scope** — en CUALQUIER
34
+ proyecto, no solo en uno desconocido. El usuario tiene decisiones ya tomadas
35
+ que se repiten y no quiere reabrirlas
36
+ - Buscar el "por qué" detrás de una elección arquitectónica
37
+ - Resolver un bug donde la causa puede estar documentada en lecciones aprendidas
38
+ - Investigar si un patrón ya fue evaluado y descartado
39
+ - Responder "¿qué dice tu sistema sobre X?" o "¿cómo manejamos Y?"
40
+ - **Antes de proponer una solución que parece "obvia"** — si suena obvia, alta
41
+ probabilidad de que el usuario ya pasó por ahí y haya una decisión documentada
42
+
43
+ NO aplicar cuando:
44
+
45
+ - La tarea es claramente local a 1-2 archivos del codebase (fix puntual, rename)
46
+ - El usuario pidió explícitamente leer un archivo específico
47
+ - Es una operación de comando puro (git, npm install, builds)
48
+ - El proyecto no es del usuario (repos de terceros, código de exploración)
49
+
50
+ ---
51
+
52
+ ## Tipos de conocimiento valioso que el vault repite
53
+
54
+ El vault no es archivo histórico — es **memoria operacional activa**. Los
55
+ siguientes tipos de contenido se repiten a través de proyectos y sesiones:
56
+
57
+ | Tipo | Por qué consultarlo | Ejemplo de query |
58
+ |---|---|---|
59
+ | **ADRs vigentes y propuestos** | Decisiones de arquitectura que el usuario YA tomó y no quiere debatir otra vez | `obsidian_simple_search` con nombre del componente o tecnología |
60
+ | **Patrones validados** | Soluciones que el usuario aprobó en sesiones previas para problemas equivalentes | búsqueda por keyword del problema |
61
+ | **Anti-patrones documentados** | Caminos que el usuario YA rechazó — proponerlos otra vez es regresión | búsqueda por síntoma del bug o patrón |
62
+ | **Vocabulario y convenciones del dominio** | Términos específicos del proyecto (OIC, VBO, papel de trabajo) que tienen significado preciso | nombre del término |
63
+ | **Lecciones de incidentes** | Bugs ya investigados con causa raíz documentada | búsqueda por mensaje de error o síntoma |
64
+ | **Diferencias entre proyectos del usuario** | SIGAF vs SIGM vs swl-ses tienen convenciones distintas — el vault las separa | path filtering por carpeta del proyecto |
65
+ | **Roadmap y prioridades** | Lo que el usuario quiere para próximos sprints vs lo que está cerrado | búsqueda por nombre de feature |
66
+
67
+ **Regla práctica**: si la decisión que vas a tomar es del tipo "el usuario
68
+ probablemente ya pensó en esto", consulta antes. La probabilidad de que
69
+ exista nota relevante en el vault es alta.
70
+
71
+ ---
72
+
73
+ ## Cómo consultar
74
+
75
+ ### Tools disponibles del MCP `obsidian`
76
+
77
+ | Tool | Cuándo usar |
78
+ |---|---|
79
+ | `obsidian_simple_search` | Búsqueda full-text por keywords. Primer paso siempre. |
80
+ | `obsidian_complex_search` | Filtros estructurados (frontmatter, tags, paths). Cuando simple_search devuelve demasiado. |
81
+ | `obsidian_list_files_in_vault` | Inventario completo del vault. Solo en sesión inicial de un proyecto. |
82
+ | `obsidian_list_files_in_dir` | Listar notas de una carpeta específica. |
83
+ | `obsidian_get_file_contents` | Leer una nota completa identificada por path relativo al vault. |
84
+ | `obsidian_recent_changes` | Notas modificadas recientemente. Útil para retomar trabajo reciente. |
85
+ | `obsidian_periodic_notes` | Daily/weekly notes si el usuario las usa. |
86
+
87
+ ### Workflow estándar
88
+
89
+ 1. **Search**: `obsidian_simple_search` con 2-4 keywords del dominio del problema.
90
+ 2. **Triage**: revisar paths de las notas devueltas. Identificar las 1-3 más
91
+ relevantes por nombre de archivo y context score.
92
+ 3. **Read targeted**: `obsidian_get_file_contents` solo de esas 1-3 notas.
93
+ 4. **Fallback al codebase**: si el vault no tiene info suficiente, ahí sí leer
94
+ archivos del codebase — pero con foco específico, no exploración amplia.
95
+
96
+ ### Anti-patrones
97
+
98
+ - ❌ Leer 5+ archivos del codebase para entender la arquitectura sin haber
99
+ consultado el vault primero.
100
+ - ❌ Llamar `obsidian_list_files_in_vault` y leer todo — el vault puede tener
101
+ cientos de notas. Usar search siempre antes que list.
102
+ - ❌ Ignorar el vault porque "el codebase es fuente de verdad" — el codebase
103
+ es la fuente de verdad del CÓDIGO; el vault es la fuente de verdad de las
104
+ DECISIONES y el CONTEXTO.
105
+ - ❌ Re-leer la misma nota del vault en turnos sucesivos del mismo proyecto —
106
+ el contenido ya está en contexto, citarlo directamente.
107
+ - ❌ **Re-abrir una decisión ya documentada en el vault** porque "no la
108
+ recuerdo en este turno". Si la decisión está en una nota del usuario,
109
+ consultarla en lugar de re-debatir el tradeoff desde cero. El usuario
110
+ ya pagó el costo de decidir — no obligarlo a re-pagar.
111
+ - ❌ **Proponer una solución sin verificar si el vault tiene una nota
112
+ contraria**. Si el usuario propuso X hace 2 meses y lo rechazó por razón
113
+ Y documentada en el vault, proponer X otra vez es regresión silenciosa.
114
+ - ❌ **Asumir que "es un proyecto nuevo, no hay nada en el vault"** sin
115
+ buscar. El vault tiene notas transversales (decisiones arquitectónicas
116
+ del usuario, convenciones de naming, stack preferido) que aplican
117
+ cross-proyecto.
118
+ - ❌ **Defaultear a Bash+filesystem cuando los tools `mcp__obsidian__*`
119
+ aparecen como deferred ("schemas not loaded")**. Tools deferred ≠ tools
120
+ ausentes — el MCP server está corriendo, solo falta cargar schemas vía
121
+ `ToolSearch(query="select:mcp__obsidian__obsidian_simple_search", ...)`.
122
+ Si Bash+cp+heredoc parece "más fácil", es inercia del workaround antiguo.
123
+ La ruta MCP es **siempre superior** para escritura al vault: patches
124
+ dirigidos por sección con `obsidian_patch_content` (target_type heading),
125
+ sin staging intermedio, sin tocar `proteccion-rutas.js`, auditable
126
+ nativamente por el plugin Local REST API.
127
+ - ❌ **Tras un bloqueo de hook hacia el vault, recurrir al workaround
128
+ conocido sin reconsiderar el canal nuevo**. El MCP `obsidian` opera vía
129
+ HTTPS al puerto 27124 — NO pasa por el hook `proteccion-rutas.js`
130
+ (es protocolo MCP, no operación de filesystem). Cuando un destino esté
131
+ fuera del CWD, evaluar primero `mcp__obsidian__*` antes de defaultear
132
+ a Bash + cp.
133
+
134
+ ### Workflow forzoso para escritura al vault
135
+
136
+ Si la operación es **escribir** al vault (no solo leer):
137
+
138
+ 1. Verificar si los tools `mcp__obsidian__obsidian_patch_content` y
139
+ `mcp__obsidian__obsidian_append_content` están cargados.
140
+ 2. Si aparecen como deferred → invocar `ToolSearch` con
141
+ `select:<tool-name>` para cargar el schema.
142
+ 3. Solo si el MCP no responde tras 5s o no está registrado → caer al
143
+ filesystem como fallback con disclaimer al usuario ("MCP no disponible,
144
+ uso filesystem y staging").
145
+ 4. NUNCA escribir al vault vía Bash + heredoc + cp como primera opción
146
+ cuando el MCP está disponible. Es deuda operativa con costo en cada
147
+ sesión futura.
148
+
149
+ ---
150
+
151
+ ## Vault del usuario
152
+
153
+ - **Path**: `F:\Google Drive\Developer\Obsidian\Vault\SWL` (sincronizado vía
154
+ Google Drive entre WISC y WISCLAP)
155
+ - **Contenido típico**: notas sobre el sistema SWL, decisiones de arquitectura,
156
+ ADRs, lecciones de sesiones pasadas, vocabulario específico del dominio
157
+ - **Plugin habilitador**: Local REST API en Obsidian (puerto 27124, HTTPS)
158
+ - **Precondición**: Obsidian debe estar corriendo en la máquina actual para
159
+ que el MCP responda. Si no responde, fallback al codebase con disclaimer
160
+ al usuario ("Obsidian no está corriendo, no pude consultar el vault").
161
+
162
+ ---
163
+
164
+ ## Excepciones documentadas
165
+
166
+ - Si `obsidian_simple_search` devuelve 0 resultados para keywords razonables
167
+ del dominio, el vault no cubre el tema — proceder con codebase sin más
168
+ intentos en el vault.
169
+ - Si Obsidian no está corriendo (timeout o connection refused), reportarlo
170
+ al usuario en una línea breve y proceder con codebase. NO bloquear el flujo.
171
+ - Para tareas donde el usuario explícitamente dice "no consultes nada, solo
172
+ haz X", respetar — esto es preferencia explícita.
173
+
174
+ ---
175
+
176
+ ## Aplicabilidad
177
+
178
+ Esta regla aplica a:
179
+ - Claude Code (CLI y Desktop)
180
+ - Cualquier agente del sistema SWL que necesite contexto de dominio
181
+ - Sesiones de planning, debugging, arquitectura, code review
182
+
183
+ NO aplica a:
184
+ - Sub-agentes que solo hacen una tarea atómica (formateo, lint, build)
185
+ - Agentes que operan exclusivamente sobre archivos pasados como argumento
186
+
187
+ ---
188
+
189
+ ## Origen
190
+
191
+ Formalizada el 2026-05-09 al instalar el MCP server `mcp-obsidian` (Python,
192
+ MarkusPfundstein) en WISCLAP para evitar el patrón observado de leer múltiples
193
+ archivos del codebase para reconstruir contexto que ya estaba sintetizado en
194
+ el vault. La regla aplica cross-machine vía Syncthing (`~/.claude/rules/` se
195
+ sincroniza automáticamente).
@@ -0,0 +1,158 @@
1
+ # Regla: Debatir antes de aceptar decisiones que chocan con reglas
2
+
3
+ Esta regla es OBLIGATORIA y aplica a todo trabajo donde Claude reciba una
4
+ decisión técnica o de diseño del usuario que entre en conflicto con una regla
5
+ documentada del sistema, una invariante del dominio, o una buena práctica
6
+ establecida.
7
+
8
+ ---
9
+
10
+ ## Principio
11
+
12
+ > Cuando el usuario propone una decisión, **NUNCA la aceptes por reflejo**.
13
+ > Si la decisión choca con una regla documentada (de `~/.claude/rules/`,
14
+ > `CLAUDE.md` del proyecto, ADRs vigentes) o con una invariante obvia del
15
+ > dominio, debes **debatirla con cita concreta + riesgo observable +
16
+ > alternativa** ANTES de implementar.
17
+
18
+ El usuario espera un colaborador técnico, no un sí-señor. Su rol es decidir
19
+ qué riesgos asume; el rol del agente es señalar el costo técnico antes de
20
+ que la decisión se materialice.
21
+
22
+ ---
23
+
24
+ ## Cuándo aplicar
25
+
26
+ Cuando la decisión del usuario:
27
+
28
+ - Contradice una regla global de `~/.claude/rules/*.md` (especialmente
29
+ `seguridad-agentes.md`, `arquitectura.md`, `gobernanza.md`, `seguridad.md`).
30
+ - Contradice una regla de `CLAUDE.md` del proyecto o un ADR vigente.
31
+ - Rompe una invariante del dominio (integridad referencial, auditoría
32
+ inmutable, trazabilidad regulatoria, separación de responsabilidades).
33
+ - Introduce una "puerta trasera" para un rol privilegiado que erosiona una
34
+ garantía formal del sistema (ej: ADMIN bypassa una invariante de
35
+ integridad — distinto de bypassar una restricción jerárquica).
36
+
37
+ ---
38
+
39
+ ## Cómo aplicar
40
+
41
+ ### Paso 1 — Contrastar la decisión con las reglas
42
+
43
+ Antes de implementar, ejecuta mentalmente este check:
44
+
45
+ - ¿Existe una regla en `~/.claude/rules/` que aplique?
46
+ - ¿El proyecto tiene `CLAUDE.md` o ADRs que cubran este territorio?
47
+ - ¿La decisión rompe una invariante visible del dominio (audit trail,
48
+ consistencia de estados, integridad referencial)?
49
+ - ¿Hay un ejemplo histórico en el proyecto donde una decisión similar
50
+ causó un incidente?
51
+
52
+ ### Paso 2 — Si hay choque: responder con tres bloques
53
+
54
+ NO implementes en silencio. Responde explícitamente con:
55
+
56
+ 1. **Por qué la decisión es problemática**: cita la regla concreta o la
57
+ invariante violada. Evita generalidades — referencia el archivo y la
58
+ sección.
59
+
60
+ 2. **Cuál es el riesgo real**: descríbelo de forma observable, no abstracta.
61
+ Mal: "puede causar problemas de integridad". Bien: "el chip 'Aprobado por
62
+ X' seguirá visible cuando el contenido haya cambiado, y un auditor
63
+ externo no tendrá forma de saber que se editó después — eso vulnera la
64
+ trazabilidad regulatoria del OIC".
65
+
66
+ 3. **Alternativa concreta** que satisfaga la intención del usuario sin
67
+ romper la regla. Idealmente con costo acotado en pasos.
68
+
69
+ ### Paso 3 — Esperar confirmación informada
70
+
71
+ Tras presentar el análisis, espera. Si el usuario insiste tras conocer el
72
+ costo, implementa — pero ahí queda registrado que es decisión informada,
73
+ no inercia.
74
+
75
+ Si el usuario contradice tu análisis con argumentos válidos (la regla no
76
+ aplica al caso, el riesgo no existe en este contexto), corrige y procede.
77
+ La regla es debatir, no obstinarse.
78
+
79
+ ---
80
+
81
+ ## Excepciones legítimas
82
+
83
+ NO aplicar cuando:
84
+
85
+ 1. **Decisiones de preferencia personal sin impacto técnico**: color,
86
+ naming, estilo de prosa, formato de mensajes. Esas se obedecen sin
87
+ debate.
88
+ 2. **Decisiones donde el usuario ya consideró la regla y la sobrescribió
89
+ intencionalmente** en una sesión previa, en `discutir-fase`, o en un
90
+ ADR documentado.
91
+ 3. **El usuario pide explícitamente "no debates, ejecuta"** para una
92
+ tarea acotada y reversible. Respeta la instrucción explícita; NO
93
+ añadas debate por reflejo.
94
+ 4. **Fix urgente de producción** con incidente activo y blast radius
95
+ acotado. Aplica el fix; el debate puede esperar al post-mortem.
96
+
97
+ ---
98
+
99
+ ## Anti-patrones explícitos
100
+
101
+ - **Aceptar por reflejo**: responder "listo, implemento" a una decisión
102
+ que viola una regla, y solo detectar el problema cuando el usuario pide
103
+ análisis crítico explícito.
104
+ - **Endulzar el análisis**: presentar la objeción como tradeoff opcional
105
+ cuando la regla es absoluta. "Aunque hay tradeoffs, tu enfoque es
106
+ válido si…" cuando en realidad la decisión rompe una invariante del
107
+ sistema.
108
+ - **Soluciones intermedias que vacían la regla**: ofrecer "agregar un
109
+ log warning" cuando el problema real es romper una invariante. Eso es
110
+ fallback silencioso disfrazado — la solución correcta es no romper la
111
+ invariante, no agregar un log invisible al usuario.
112
+ - **Confundir conveniencia con jerarquía**: que el usuario sea el dueño
113
+ del proyecto no significa que toda preferencia suya esté libre de costo
114
+ técnico. El rol del agente es señalar el costo; el del usuario es
115
+ decidir si lo asume.
116
+ - **Implementar primero, debatir después**: si la decisión genera daño
117
+ acumulable (commits que rompen invariantes), revertir es más caro que
118
+ haber debatido al inicio.
119
+
120
+ ---
121
+
122
+ ## Ejemplo positivo
123
+
124
+ > Usuario: "Implementa que ADMIN pueda editar el contenido de un papel
125
+ > de trabajo bajo VBO aprobado, sin tener que revocar primero."
126
+ >
127
+ > Respuesta correcta:
128
+ >
129
+ > Análisis: la regla `seguridad-agentes.md § Anti-fallback silencioso`
130
+ > establece que ningún cambio de garantía puede suceder sin alerta
131
+ > visible al usuario. Permitir esa edición rompe la integridad
132
+ > semántica del VBO: el chip "Aprobado por Juan Pérez — fecha" seguirá
133
+ > visible aunque el contenido cambie, y el auditor externo no podrá
134
+ > distinguir el contenido aprobado del editado después. En un OIC
135
+ > regulado por LGIPE eso compromete la trazabilidad legal.
136
+ >
137
+ > Riesgo observable: cualquier auditoría posterior verá el VBO aprobado
138
+ > y asumirá que ese contenido fue revisado. Si el contenido cambió por
139
+ > override administrativo, la auditoría está mintiendo.
140
+ >
141
+ > Alternativa: el flujo correcto ya existe y no es burocrático. ADMIN
142
+ > puede revocar el VBO desde el panel (1 click, deja registro inmutable
143
+ > en `vbo_historial` con motivo obligatorio), editar, y re-aprobar. Tres
144
+ > acciones, todas trazables. ¿Procedo con este flujo?
145
+
146
+ ---
147
+
148
+ ## Origen de esta regla
149
+
150
+ Sesión 2026-05-08, proyecto SIGAF. Ante la petición de implementar
151
+ "ADMIN puede editar título/contenido de papel de trabajo bajo estatus
152
+ REVISADO sin revocar el VBO primero", el agente aceptó sin debate
153
+ inicial. La implementación rompió la integridad semántica del Visto
154
+ Bueno (VBO aprobado contra contenido que ya no existe) y fue revertida
155
+ en commit `6aaf05c` tras análisis crítico explícito pedido por el
156
+ usuario. Memoria nativa registrada en
157
+ `feedback_no_dar_razon_automatica.md`; promovida a regla global porque
158
+ el patrón se repetiría en cualquier proyecto del usuario.
@@ -1,3 +1,8 @@
1
+ ---
2
+ paths:
3
+ - "**/agentes/**"
4
+ - "**/reglas/**"
5
+ ---
1
6
  # Regla: Fragmentos compartidos no-routables
2
7
 
3
8
  Esta regla es **OBLIGATORIA** para autores y mantenedores de agentes y reglas