@saulwade/swl-ses 2.4.2 → 2.5.1
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 +194 -241
- package/README.md +600 -597
- package/agentes/_intent-spec.md +73 -73
- package/agentes/_propose-step.md +90 -90
- package/agentes/abogado-diablo-swl.md +145 -0
- package/agentes/accesibilidad-wcag-swl.md +690 -690
- package/agentes/arquitecto-swl.md +267 -267
- package/agentes/auto-evolucion-swl.md +908 -908
- package/agentes/backend-api-swl.md +1 -1
- package/agentes/backend-csharp-swl.md +420 -420
- package/agentes/backend-go-swl.md +390 -390
- package/agentes/backend-java-swl.md +281 -281
- package/agentes/backend-node-swl.md +1 -1
- package/agentes/backend-python-swl.md +1 -1
- package/agentes/backend-rust-swl.md +364 -364
- package/agentes/backend-workers-swl.md +482 -482
- package/agentes/cloud-infra-swl.md +509 -509
- package/agentes/consolidador-swl.md +541 -541
- package/agentes/datos-swl.md +1 -1
- package/agentes/depurador-swl.md +352 -352
- package/agentes/devops-ci-swl.md +400 -400
- package/agentes/disenador-ui-swl.md +569 -569
- package/agentes/documentador-swl.md +345 -345
- package/agentes/frontend-angular-swl.md +621 -621
- package/agentes/frontend-css-swl.md +716 -716
- package/agentes/frontend-react-swl.md +692 -692
- package/agentes/frontend-swl.md +496 -496
- package/agentes/frontend-tailwind-swl.md +826 -826
- package/agentes/gh-fix-ci-swl.md +6 -1
- package/agentes/implementador-swl.md +1 -1
- package/agentes/investigador-swl.md +432 -432
- package/agentes/investigador-ux-swl.md +505 -505
- package/agentes/llm-apps-swl.md +1 -1
- package/agentes/migrador-swl.md +442 -442
- package/agentes/mobile-android-swl.md +511 -511
- package/agentes/mobile-cross-swl.md +541 -541
- package/agentes/mobile-ios-swl.md +502 -502
- package/agentes/mobile-testing-swl.md +302 -302
- package/agentes/nemesis-auditor-swl.md +285 -285
- package/agentes/notificador-swl.md +1 -1
- package/agentes/observabilidad-swl.md +438 -438
- package/agentes/pagos-swl.md +310 -310
- package/agentes/perfilador-usuario-swl.md +321 -321
- package/agentes/planificador-swl.md +399 -399
- package/agentes/producto-prd-swl.md +589 -589
- package/agentes/red-team-swl.md +218 -218
- package/agentes/release-manager-swl.md +590 -590
- package/agentes/rendimiento-swl.md +713 -713
- package/agentes/resolutor-build-swl.md +10 -1
- package/agentes/revisor-angular-swl.md +278 -278
- package/agentes/revisor-codigo-swl.md +1 -1
- package/agentes/revisor-csharp-swl.md +264 -264
- package/agentes/revisor-go-swl.md +259 -259
- package/agentes/revisor-java-swl.md +257 -257
- package/agentes/revisor-kotlin-swl.md +273 -273
- package/agentes/revisor-nextjs-swl.md +281 -281
- package/agentes/revisor-php-swl.md +271 -271
- package/agentes/revisor-react-swl.md +278 -278
- package/agentes/revisor-rust-swl.md +346 -346
- package/agentes/revisor-seguridad-swl.md +399 -399
- package/agentes/revisor-swift-swl.md +268 -268
- package/agentes/revisor-typescript-swl.md +346 -346
- package/agentes/sre-swl.md +1 -1
- package/agentes/tdd-qa-swl.md +393 -393
- package/bin/lib/bot-comandos.js +1 -1
- package/bin/swl-ses.js +6 -0
- package/comandos/swl/adoptar-proyecto.md +14 -2
- package/comandos/swl/configurar-ci.md +8 -1
- package/comandos/swl/deuda-codigo.md +97 -97
- package/comandos/swl/discutir-fase.md +22 -118
- package/comandos/swl/fix.md +118 -0
- package/comandos/swl/nuevo-proyecto.md +54 -3
- package/comandos/swl/predecir.md +32 -2
- package/comandos/swl/seguridad.md +189 -0
- package/comandos/swl/status.md +5 -3
- package/habilidades/aprendizaje-continuo/SKILL.md +3 -1
- package/habilidades/discutir-fase/SKILL.md +84 -81
- package/habilidades/discutir-fase/recursos/plantilla-contexto.md +136 -0
- package/habilidades/doc-sync/SKILL.md +3 -1
- package/habilidades/doubt-driven-review/SKILL.md +15 -1
- package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
- package/habilidades/estructura-proyecto-claude/SKILL.md +11 -2
- package/habilidades/harness-claude-code/SKILL.md +3 -1
- package/habilidades/instalar-sistema/SKILL.md +3 -1
- package/habilidades/meta-reglas-extendido/SKILL.md +92 -0
- package/habilidades/meta-reglas-extendido/recursos/analisis-previo-tareas-grandes.md +186 -0
- package/habilidades/meta-reglas-extendido/recursos/analizar-directorios-antes-de-escribir.md +235 -0
- package/habilidades/meta-reglas-extendido/recursos/api-diseno.md +413 -0
- package/habilidades/meta-reglas-extendido/recursos/arquitectura.md +491 -0
- package/habilidades/meta-reglas-extendido/recursos/arreglar-al-detectar.md +264 -0
- package/habilidades/meta-reglas-extendido/recursos/debatir-antes-de-aceptar.md +152 -0
- package/habilidades/meta-reglas-extendido/recursos/git-workflow.md +259 -0
- package/habilidades/meta-reglas-extendido/recursos/gobernanza.md +291 -0
- package/habilidades/meta-reglas-extendido/recursos/memoria-consolidada.md +263 -0
- package/habilidades/meta-reglas-extendido/recursos/seguridad-agentes.md +443 -0
- package/habilidades/meta-reglas-extendido/recursos/sesiones-paralelas.md +190 -0
- package/habilidades/meta-reglas-extendido/recursos/sin-duplicacion-reglas-globales.md +179 -0
- package/habilidades/meta-reglas-extendido/recursos/skills-estandar.md +394 -0
- package/habilidades/meta-reglas-extendido/recursos/usar-code-review-graph.md +156 -0
- package/habilidades/meta-reglas-extendido/recursos/usar-context7.md +236 -0
- package/habilidades/meta-reglas-extendido/recursos/usar-sistema-swl.md +253 -0
- package/habilidades/meta-reglas-extendido/recursos/verificar-citas-normativas.md +527 -0
- package/habilidades/meta-skills-estandar/SKILL.md +3 -1
- package/habilidades/nuevo-proyecto/SKILL.md +20 -3
- package/habilidades/php-experto/SKILL.md +10 -3
- package/habilidades/{filament-admin/SKILL.md → php-experto/recursos/filament-admin.md} +23 -39
- package/habilidades/prevencion-sobreingenieria/recursos/soluciones-nativas.md +166 -166
- package/habilidades/prevencion-sobreingenieria/recursos/variables-residuales-post-refactor.md +85 -85
- package/habilidades/proceso-debate-adversarial/recursos/personas.md +5 -4
- package/habilidades/proceso-ingenieria-requerimientos/SKILL.md +147 -0
- package/hooks/check-update.js +19 -10
- package/hooks/contexto-subagente.js +68 -68
- package/hooks/degradacion-instintos.js +1 -1
- package/hooks/extraccion-aprendizajes.js +2 -2
- package/hooks/lib/briefing.js +3 -3
- package/hooks/lib/nudge-tracker.js +1 -1
- package/hooks/lib/otlp-exporter.js +1 -1
- package/hooks/lib/webhook-dedup.js +1 -1
- package/hooks/session-briefing.js +1 -1
- package/llms.txt +6 -6
- package/manifiestos/canonical-hashes.json +989 -0
- package/manifiestos/hooks-config.json +469 -469
- package/manifiestos/invariantes-criticos.json +30 -30
- package/manifiestos/modulos.json +168 -135
- package/manifiestos/perfiles.json +0 -2
- package/manifiestos/skills-lock.json +52 -59
- package/package.json +7 -5
- package/plantillas/github-workflows/README.md +15 -1
- package/plantillas/github-workflows/swl-devsecops.yml +70 -0
- package/plugin.json +5 -5
- package/reglas/analisis-previo-tareas-grandes.md +30 -156
- package/reglas/analizar-directorios-antes-de-escribir.md +30 -211
- package/reglas/api-diseno.md +28 -398
- package/reglas/arquitectura.md +35 -456
- package/reglas/arreglar-al-detectar.md +30 -230
- package/reglas/debatir-antes-de-aceptar.md +30 -143
- package/reglas/docs.md +7 -0
- package/reglas/estilo-codigo.md +9 -0
- package/reglas/fragmentos-compartidos.md +6 -0
- package/reglas/git-workflow.md +44 -240
- package/reglas/gobernanza.md +23 -262
- package/reglas/memoria-consolidada.md +34 -228
- package/reglas/performance.md +8 -0
- package/reglas/pruebas.md +12 -0
- package/reglas/seguridad-agentes.md +37 -418
- package/reglas/seguridad.md +12 -0
- package/reglas/sesiones-paralelas.md +29 -162
- package/reglas/sin-duplicacion-reglas-globales.md +25 -166
- package/reglas/skills-estandar.md +23 -373
- package/reglas/usar-code-review-graph.md +31 -140
- package/reglas/usar-context7.md +30 -208
- package/reglas/usar-sistema-swl.md +47 -242
- package/reglas/verificar-citas-normativas.md +47 -537
- package/scripts/actualizar.js +253 -253
- package/scripts/audit-tools/auditar-relleno-inventario.js +145 -0
- package/scripts/auditar-clases-conocidas.js +106 -0
- package/scripts/bootstrap-instintos.js +2 -2
- package/scripts/canario-hooks.js +166 -0
- package/scripts/cli/configurar-ci.js +2 -1
- package/scripts/evidencia-valor.js +93 -0
- package/scripts/field-report.js +1 -1
- package/scripts/generar-comandos.js +143 -0
- package/scripts/generar-inventario.js +236 -23
- package/scripts/generar-matriz-lenguajes.js +1 -1
- package/scripts/instalador.js +15 -1
- package/scripts/lib/configurar-ci.js +10 -3
- package/scripts/lib/detectar-runtime.js +12 -3
- package/scripts/lib/diary-entry.js +3 -1
- package/scripts/lib/drift-detector.js +1 -1
- package/scripts/lib/evidencia-valor.js +189 -0
- package/scripts/lib/expandir-targets.js +71 -71
- package/scripts/lib/frontmatter-md.js +63 -0
- package/scripts/lib/parsear-opciones.js +2 -0
- package/scripts/lib/prune-componentes.js +180 -0
- package/scripts/lib/reglas-globales-conocidas.json +16 -2
- package/scripts/lib/scoring-instintos.js +2 -2
- package/scripts/lib/toml-merge.js +204 -204
- package/scripts/lib/transformadores/claude.js +1 -1
- package/scripts/lib/transformadores/codex.js +1 -1
- package/scripts/lib/transformadores/copilot.js +1 -1
- package/scripts/lib/transformadores/cursor.js +1 -1
- package/scripts/lib/transformadores/gemini.js +22 -2
- package/scripts/lib/transformadores/opencode.js +1 -1
- package/scripts/mcp-server/auth.js +105 -105
- package/scripts/mcp-server/cache.js +106 -106
- package/scripts/prune.js +102 -0
- package/scripts/publicar.js +18 -2
- package/scripts/tui/pantallas/inspect.js +175 -175
- package/scripts/tui/pantallas/uninstall-wizard.js +210 -210
- package/scripts/tui/pantallas/update-wizard.js +234 -234
- package/scripts/tui/pantallas/welcome.js +189 -189
- package/habilidades/paid-media-tracking/SKILL.md +0 -269
- package/habilidades/paid-media-tracking/recursos/auditoria-tracking.md +0 -220
- package/habilidades/paid-media-tracking/recursos/google-ads-api.md +0 -215
- package/habilidades/tracking-measurement/SKILL.md +0 -239
- package/habilidades/tracking-measurement/recursos/consent-mode.md +0 -231
- package/habilidades/tracking-measurement/recursos/gtm-datalayer.md +0 -216
- package/habilidades/tracking-measurement/recursos/meta-capi.md +0 -262
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
# Regla: Detectar → Informar → Arreglar en el mismo turno
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
---
|
|
3
|
+
Regla OBLIGATORIA en todo trabajo de cualquier proyecto del usuario. Consolida cuatro feedbacks
|
|
4
|
+
(2026-04-23 a 2026-05-03): el usuario rechaza entregas parciales, deuda silenciosa y bypass de errores ajenos.
|
|
9
5
|
|
|
10
6
|
## Principio
|
|
11
7
|
|
|
@@ -14,243 +10,47 @@ parciales, deuda silenciosa y bypass de errores ajenos.
|
|
|
14
10
|
> procede a resolverlo en el mismo turno**. Nunca lo dejes como pendiente, deuda
|
|
15
11
|
> implícita, "ya estaba antes" ni "fuera del scope".
|
|
16
12
|
|
|
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
13
|
## Cómo aplicar
|
|
32
14
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
|
|
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
|
-
### Fix de clase, no de instancia (barrido por patrón obligatorio)
|
|
61
|
-
|
|
62
|
-
- Si el bug corregido es un PATRÓN (regex incompleto, umbral mal calibrado,
|
|
63
|
-
construcción de path repetida, gate copy-pasteado) y no un typo puntual,
|
|
64
|
-
el MISMO turno incluye un `grep` de todos los hermanos del patrón en el
|
|
65
|
-
codebase y su corrección — o el registro explícito de por qué no aplica.
|
|
66
|
-
- Arreglar solo la instancia que falló deja a los gemelos esperando el peor
|
|
67
|
-
momento para reventar. Evidencia doble (2026-07-03, swl-ses): se corrigió
|
|
68
|
-
el gate de reloj de un test sin barrer la clase → su gemelo tumbó el
|
|
69
|
-
`npm publish` de v2.4.0 horas después (bump de coordinación innecesario);
|
|
70
|
-
se corrigió el scope fantasma en el doctor sin barrer → quedaron 7 sitios
|
|
71
|
-
más con el mismo patrón, incluido un uninstall-wizard que ofrecía borrar
|
|
72
|
-
la instalación global de Claude Code.
|
|
73
|
-
- Es la aplicación a FIXES del "sweep por patrón" que
|
|
74
|
-
`verificar-citas-normativas.md § Familia 2` ya exige para reportes.
|
|
75
|
-
|
|
76
|
-
### Al detectar un error ajeno al trabajo actual
|
|
77
|
-
|
|
78
|
-
- NO bypassear (excluir tests del glob, comentar checks, `|| true`,
|
|
79
|
-
downgradear a warning, ignorar).
|
|
80
|
-
- Resolver de raíz o, si requiere decisión, abrir explícitamente la decisión
|
|
81
|
-
con el usuario antes de bypassear.
|
|
82
|
-
- El default es resolver, no esquivar.
|
|
83
|
-
|
|
84
|
-
### Al presentar planes con sub-tareas
|
|
85
|
-
|
|
86
|
-
- Dar primero la opción "todo completo" con esfuerzo estimado.
|
|
87
|
-
- Si por capacity hay que partir el trabajo, hacerlo explícito con razón
|
|
88
|
-
concreta: "esta sesión cubre 3.1 a 3.4; la 3.5 va en commit separado por
|
|
89
|
-
X razón concreta", no por preferencia genérica.
|
|
90
|
-
|
|
91
|
-
### Al recomendar diferir un patrón o feature
|
|
92
|
-
|
|
93
|
-
- Redactar **simultáneamente** el ítem de deuda formal con criterio de disparo
|
|
94
|
-
verificable. La oferta "lo dejo apuntado" sin entrada formal no es aceptable.
|
|
95
|
-
- Distinción de categorías:
|
|
96
|
-
- **DT (deuda técnica)** con plan de cierre.
|
|
97
|
-
- **DA (decisión arquitectural)** con trigger verificable.
|
|
98
|
-
- **OP (pendiente operacional)** con responsable.
|
|
99
|
-
- "Mediano plazo / Q3 / cuando aparezca demanda" sin trigger verificable es
|
|
100
|
-
deuda silenciosa. Convertir a DA formal en mismo commit.
|
|
101
|
-
- Trigger verificable significa condición observable: "≥2 clientes distintos
|
|
102
|
-
reportan", "p95 > 60s en producción documentado", "uso > N veces/mes",
|
|
103
|
-
no "cuando sea relevante" o "más adelante".
|
|
104
|
-
|
|
105
|
-
### Hallazgos colaterales con blast radius alto — patrón Hallazgo A/B/C
|
|
106
|
-
|
|
107
|
-
Durante el trabajo principal puedes detectar un problema secundario cuyo fix
|
|
108
|
-
**no cabe** en la regla general "detectar → informar → arreglar en mismo
|
|
109
|
-
turno" porque su blast radius es alto: toca infra compartida, requiere
|
|
110
|
-
downtime, modifica contratos públicos, exige decisión arquitectural, o su
|
|
111
|
-
remediación dura más que el trabajo principal en curso.
|
|
112
|
-
|
|
113
|
-
Aplicar el catálogo de tres opciones explícitas — NUNCA mezclar el fix con
|
|
114
|
-
el trabajo principal sin etiquetarlo y NUNCA dejarlo como deuda silenciosa.
|
|
15
|
+
- **Problema secundario durante el trabajo principal** → reportar (qué, dónde, severidad) y resolver en el mismo turno o commit separado de la misma sesión; NUNCA "lo documento como deuda" como primera opción.
|
|
16
|
+
- **Tests / builds / lints fallando** → listar TODOS los failures y atacarlos todos; no distinguir "bugs reales" vs "mocks preexistentes" para arreglar solo unos. Si requiere decisión arquitectural ambigua, pedirla explícitamente.
|
|
17
|
+
- **Código adyacente roto al tocar líneas** (None checks, schemas obsoletos, mocks inconsistentes, paths inválidos) → arreglar en el mismo commit o en uno separado de la misma sesión.
|
|
18
|
+
- **Refactor que deja código obsoleto** → actualizarlo; sin deuda residual.
|
|
19
|
+
- **Fix de clase, no de instancia**: si el bug es un PATRÓN (regex incompleto, umbral, gate copy-pasteado), el MISMO turno incluye `grep` de todos los hermanos y su corrección — o el registro explícito de por qué no aplica.
|
|
20
|
+
- **Error ajeno al trabajo actual** → NUNCA bypassear (excluir tests del glob, comentar checks, `|| true`, downgrade a warning); resolver de raíz o abrir la decisión con el usuario. El default es resolver.
|
|
21
|
+
- **Planes con sub-tareas** → primero la opción "todo completo" con esfuerzo estimado; partir el trabajo solo con razón concreta explícita, no por preferencia genérica.
|
|
22
|
+
- **Diferir un patrón o feature** → redactar SIMULTÁNEAMENTE el ítem formal: DT (plan de cierre), DA (trigger verificable) u OP (responsable). Trigger verificable = condición observable ("≥2 clientes reportan", "p95 > 60s documentado"), nunca "mediano plazo / cuando aparezca demanda".
|
|
115
23
|
|
|
116
|
-
|
|
24
|
+
## Hallazgos colaterales con blast radius alto — patrón Hallazgo A/B/C
|
|
117
25
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
no relacionados con la tarea actual).
|
|
122
|
-
- Requiere operación destructiva (`git filter-branch`, `git filter-repo`,
|
|
123
|
-
drop de tabla, rotación de credencial productiva).
|
|
124
|
-
- Modifica configuración de infra compartida (CI/CD, branch protection,
|
|
125
|
-
permisos de repo, secrets de organización).
|
|
126
|
-
- Exige decisión arquitectural ambigua que el agente no puede tomar solo.
|
|
127
|
-
- Su remediación dura más que el commit actual del trabajo principal.
|
|
128
|
-
|
|
129
|
-
Si NO cumple ninguno de estos atributos, NO es Hallazgo A/B/C — aplicar la
|
|
130
|
-
regla general (arreglar en mismo turno).
|
|
131
|
-
|
|
132
|
-
#### Las tres opciones explícitas
|
|
26
|
+
Hallazgo colateral = fix que cumple al menos uno: toca >3 archivos fuera de scope, requiere operación
|
|
27
|
+
destructiva, modifica infra compartida, exige decisión arquitectural, o dura más que el trabajo principal.
|
|
28
|
+
Si no cumple ninguno → regla general (arreglar en mismo turno).
|
|
133
29
|
|
|
134
30
|
| Opción | Cuándo | Acción |
|
|
135
31
|
|---|---|---|
|
|
136
|
-
| **
|
|
137
|
-
| **
|
|
138
|
-
| **
|
|
139
|
-
|
|
140
|
-
#### Reglas duras
|
|
141
|
-
|
|
142
|
-
- **Reportar siempre, independientemente de la opción elegida**: el usuario
|
|
143
|
-
ve el hallazgo en el mismo turno, no se entera en el commit posterior.
|
|
144
|
-
- **DT formal NO es "lo apunto y veremos"**: requiere ID (`DT-NOMBRE-X`),
|
|
145
|
-
trigger verificable observable, plan de cierre con pasos concretos, y
|
|
146
|
-
entry visible en `.planning/DEUDA-TECNICA.md` commiteada en mismo turno.
|
|
147
|
-
- **NUNCA degradar Hallazgo C a Hallazgo B sin pedirlo**: una decisión
|
|
148
|
-
arquitectural disfrazada de DT es deuda silenciosa con cara de proceso.
|
|
149
|
-
- **NUNCA "arreglar como parte del trabajo principal" un Hallazgo B/C
|
|
150
|
-
sin etiquetarlo**: aunque el fix sea pequeño, si su blast radius es alto
|
|
151
|
-
el commit debe ser separado con mensaje explícito ("colateral: cierra
|
|
152
|
-
DT-X" o "colateral: aplica fix urgente fuera de scope original").
|
|
153
|
-
|
|
154
|
-
#### Ejemplo validado (SIGAF, sesión 2026-05-20)
|
|
155
|
-
|
|
156
|
-
Durante implementación de pipeline DevSecOps (gates gitleaks + SAST + deps
|
|
157
|
-
+ containers), el agente detectó tres hallazgos colaterales:
|
|
158
|
-
|
|
159
|
-
- **Hallazgo A — Validator JWT con frozenset + regex**: bug detectado en
|
|
160
|
-
`backend/app/core/config.py` donde `_CENTINELA` hardcodeado divergía del
|
|
161
|
-
`.env.example` real. Fix < 30 min, reversible, alcance acotado a
|
|
162
|
-
validators. Aplicado en commit separado mismo turno + 8 tests de regresión.
|
|
163
|
-
|
|
164
|
-
- **Hallazgo B — DT-GHAS-HABILITAR**: detectado que repo PRIVATE en
|
|
165
|
-
organización sin GitHub Advanced Security responde 403 al upload SARIF.
|
|
166
|
-
Mitigación inmediata con `continue-on-error: true` en step de upload.
|
|
167
|
-
DT formal con trigger verificable: "equipo crece >2 personas, auditoría
|
|
168
|
-
externa, o licencia GHAS adquirida". Entry en `.planning/DEUDA-TECNICA.md`
|
|
169
|
-
con plan de cierre (eliminar `continue-on-error` cuando GHAS activo).
|
|
170
|
-
|
|
171
|
-
- **Hallazgo C — DT-HISTORIAL-ENV**: detectado que commit `203a603` en
|
|
172
|
-
historial git contenía `ADMIN_PASSWORD=Admin2026!` (ya rotado, ya en
|
|
173
|
-
`.gitignore`, pero presente en `git log -p`). Fix requiere `git
|
|
174
|
-
filter-branch` o `git filter-repo` (destructivo, irreversible para
|
|
175
|
-
colaboradores con clones locales). El agente escaló al usuario; usuario
|
|
176
|
-
respondió "estamos en desarrollo y etapa de pruebas" → degradado a DT
|
|
177
|
-
formal con trigger "antes del primer deploy productivo, repo público
|
|
178
|
-
o colaborador externo".
|
|
179
|
-
|
|
180
|
-
Los tres hallazgos quedaron visibles, etiquetados y con trigger observable.
|
|
181
|
-
Ninguno se mezcló silenciosamente con el trabajo principal del pipeline.
|
|
32
|
+
| **A — Resolver ahora** | Fix < 30 min, reversible con `git revert`, sin blast radius ni decisión arquitectural | Pausar, fix en commit separado etiquetado, retomar |
|
|
33
|
+
| **B — DT formal** | Blast radius alto pero NO bloqueante, con criterio observable de cierre | Entry en `.planning/DEUDA-TECNICA.md` con ID, trigger verificable y plan de cierre; continuar |
|
|
34
|
+
| **C — Escalar al usuario** | Excede autorización: decisión arquitectural, operación destructiva irreversible, contratos productivos | Pausar, reportar con 3 opciones concretas y recomendación, esperar decisión |
|
|
182
35
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
- **"Lo arreglo de paso porque ya estoy aquí"**: si el fix tiene blast
|
|
186
|
-
radius alto, NO va de paso. Va etiquetado o no va.
|
|
187
|
-
- **DT sin trigger verificable**: "cuando sea posible", "más adelante",
|
|
188
|
-
"cuando tengamos tiempo" — viola la regla general arriba. Trigger debe
|
|
189
|
-
ser condición observable.
|
|
190
|
-
- **Reportar Hallazgo C como informativo sin pedir decisión**: si la
|
|
191
|
-
decisión requiere autorización del usuario, la respuesta NO es
|
|
192
|
-
"documentado para tu consideración" — es "elige A, B o C".
|
|
193
|
-
- **Aplicar Hallazgo A descubriendo en medio que era Hallazgo C**: si al
|
|
194
|
-
empezar el fix detectas que tiene blast radius mayor del estimado,
|
|
195
|
-
detente, revierte el WIP, y re-clasifica. NO terminar "porque ya
|
|
196
|
-
empezamos".
|
|
197
|
-
|
|
198
|
-
---
|
|
36
|
+
Reportar SIEMPRE en el mismo turno, sin importar la opción. NUNCA degradar C a B sin
|
|
37
|
+
pedirlo. NUNCA mezclar un fix B/C con el trabajo principal sin commit etiquetado.
|
|
199
38
|
|
|
200
39
|
## Excepciones legítimas
|
|
201
40
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
decisión rápida.
|
|
207
|
-
2. **El fix es destructivo** — `rm -rf`, `git reset --hard`, `git push --force`,
|
|
208
|
-
eliminar tablas de BD. Esos siguen requiriendo confirmación explícita por
|
|
209
|
-
separado, sin importar que el problema esté detectado.
|
|
210
|
-
3. **El fix tiene blast radius alto** — modifica configuración de CI, infra
|
|
211
|
-
compartida, contratos públicos de API. Presentar plan, pedir confirmación.
|
|
212
|
-
4. **El bug requiere decisión de producto** — comportamiento esperado ambiguo,
|
|
213
|
-
breaking change. Explícito al usuario y esperar.
|
|
41
|
+
1. **Fix ambiguo** → presentar opciones concretas con recomendación y esperar decisión.
|
|
42
|
+
2. **Fix destructivo** (`rm -rf`, `git reset --hard`, drop de tablas) → confirmación explícita siempre.
|
|
43
|
+
3. **Blast radius alto** (CI, infra compartida, contratos públicos de API) → presentar plan, pedir confirmación.
|
|
44
|
+
4. **Decisión de producto** (comportamiento ambiguo, breaking change) → explícito al usuario y esperar.
|
|
214
45
|
|
|
215
|
-
En todos los casos: presentar
|
|
216
|
-
problema sin reportar.
|
|
46
|
+
En todos los casos: presentar opción y recomendación — NO dejar el problema sin reportar.
|
|
217
47
|
|
|
218
|
-
|
|
48
|
+
## Anti-patrones
|
|
219
49
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
- "Lo dejo como deuda residual" — sin DT/DA formal con criterio de disparo.
|
|
223
|
-
- "Esos tests ya estaban rotos antes" — usado para evitar arreglarlos.
|
|
224
|
-
- "No es parte del scope inmediato" — para esquivar un fix obvio.
|
|
50
|
+
- "Esos tests ya estaban rotos antes" / "no es del scope inmediato" — para esquivar el fix.
|
|
51
|
+
- "Lo dejo como deuda residual" / "mediano plazo" — sin DT/DA formal con trigger verificable.
|
|
225
52
|
- "Lo documento y tú decides" — para diferir trabajo claro al usuario.
|
|
226
|
-
-
|
|
227
|
-
-
|
|
228
|
-
un linter — para que el CI deje de fallar sin arreglar la causa.
|
|
229
|
-
- Mover archivos a `legacy/` o `deprecated/` sin plan de eliminación con
|
|
230
|
-
criterio de disparo.
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## Relación con otras reglas
|
|
235
|
-
|
|
236
|
-
- `seguridad-agentes.md` — sección "Anti-fallback silencioso y anti-degradación"
|
|
237
|
-
cubre el mismo principio aplicado a agentes autónomos. Esta regla lo extiende
|
|
238
|
-
al trabajo del usuario.
|
|
239
|
-
- `git-workflow.md` — los commits siguen siendo atómicos; arreglar un problema
|
|
240
|
-
detectado puede requerir varios commits, no uno solo gigante.
|
|
241
|
-
- `pruebas.md` — los tests rotos son violaciones a esta regla. No se mergea
|
|
242
|
-
con tests rotos (excepción: tests rotos por decisión de producto en proceso).
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
|
-
## Origen de esta regla
|
|
247
|
-
|
|
248
|
-
Consolidada el 2026-05-04 a partir de cuatro feedbacks repetidos del usuario en
|
|
249
|
-
memorias nativas de Claude Code de los proyectos sigm, swl-ses y emaia
|
|
250
|
-
(2026-04-23 a 2026-05-03). Antes vivía duplicada en 4 archivos de feedback
|
|
251
|
-
distintos en 2 de los 3 proyectos. Promovida a regla global para eliminar
|
|
252
|
-
duplicación y aplicar uniformemente a todo proyecto del usuario.
|
|
53
|
+
- Excluir tests del glob, comentar checks, `|| true`, downgradear severidad — CI verde sin arreglar la causa.
|
|
54
|
+
- Mover archivos a `legacy/` o `deprecated/` sin plan de eliminación con criterio de disparo.
|
|
253
55
|
|
|
254
|
-
|
|
255
|
-
una mención mínima en MEMORY.md de cada proyecto si se desea preservar el rastro
|
|
256
|
-
histórico, pero el contenido operativo vive aquí.
|
|
56
|
+
Detalle extendido (feedbacks de origen, detalle por situación, patrón A/B/C completo con ejemplo SIGAF, relación con otras reglas): `Skill("meta-reglas-extendido")` → `recursos/arreglar-al-detectar.md`.
|
|
@@ -1,158 +1,45 @@
|
|
|
1
1
|
# Regla: Debatir antes de aceptar decisiones que chocan con reglas
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
establecida.
|
|
7
|
-
|
|
8
|
-
---
|
|
3
|
+
Regla OBLIGATORIA cuando una decisión técnica o de diseño del usuario entra en
|
|
4
|
+
conflicto con una regla documentada del sistema, una invariante del dominio o
|
|
5
|
+
una buena práctica establecida.
|
|
9
6
|
|
|
10
7
|
## Principio
|
|
11
8
|
|
|
12
|
-
> Cuando el usuario propone una decisión, **NUNCA la aceptes por reflejo**.
|
|
13
|
-
>
|
|
14
|
-
>
|
|
15
|
-
>
|
|
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:
|
|
9
|
+
> Cuando el usuario propone una decisión, **NUNCA la aceptes por reflejo**. Si
|
|
10
|
+
> choca con una regla documentada (`~/.claude/rules/`, `CLAUDE.md` del
|
|
11
|
+
> proyecto, ADRs vigentes) o con una invariante obvia del dominio, debátela
|
|
12
|
+
> con **cita concreta + riesgo observable + alternativa** ANTES de implementar.
|
|
84
13
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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.
|
|
14
|
+
El usuario espera un colaborador técnico, no un sí-señor: su rol es decidir qué
|
|
15
|
+
riesgos asume; el del agente es señalar el costo técnico antes de que la
|
|
16
|
+
decisión se materialice — que el usuario sea el dueño del proyecto no significa
|
|
17
|
+
que toda preferencia suya esté libre de costo técnico.
|
|
96
18
|
|
|
97
|
-
|
|
19
|
+
## Cuándo aplica
|
|
98
20
|
|
|
99
|
-
|
|
21
|
+
- La decisión contradice una regla global de `~/.claude/rules/*.md`, una regla del `CLAUDE.md` del proyecto o un ADR vigente.
|
|
22
|
+
- Rompe una invariante del dominio (integridad referencial, auditoría inmutable, trazabilidad regulatoria, separación de responsabilidades).
|
|
23
|
+
- Introduce una "puerta trasera" para un rol privilegiado que erosiona una garantía formal del sistema (distinto de bypassar una restricción jerárquica).
|
|
100
24
|
|
|
101
|
-
|
|
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.
|
|
25
|
+
## Cómo aplicar (3 pasos)
|
|
119
26
|
|
|
120
|
-
|
|
27
|
+
1. **Contrastar** la decisión con las reglas: ¿aplica alguna de `~/.claude/rules/`, `CLAUDE.md`, ADRs? ¿rompe una invariante visible del dominio? ¿hubo un incidente histórico similar en el proyecto?
|
|
28
|
+
2. **Si hay choque, responder con tres bloques** (nunca implementar en silencio): (a) por qué es problemática — cita la regla o invariante concreta con archivo y sección, sin generalidades; (b) riesgo OBSERVABLE, no abstracto (mal: "puede causar problemas de integridad"; bien: "el chip 'Aprobado por X' seguirá visible cuando el contenido haya cambiado"); (c) alternativa concreta que satisfaga la intención sin romper la regla, con costo acotado en pasos.
|
|
29
|
+
3. **Esperar confirmación informada**: si el usuario insiste tras conocer el costo, implementar — queda registrado como decisión informada, no inercia; si refuta con argumentos válidos, corregir y proceder. La regla es debatir, no obstinarse.
|
|
121
30
|
|
|
122
|
-
##
|
|
31
|
+
## Excepciones
|
|
123
32
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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?
|
|
33
|
+
- Preferencia personal sin impacto técnico (color, naming, estilo de prosa, formato) — se obedece sin debate.
|
|
34
|
+
- El usuario ya consideró la regla y la sobrescribió intencionalmente (sesión previa, `discutir-fase`, ADR documentado).
|
|
35
|
+
- "No debates, ejecuta" explícito para tarea acotada y reversible — no añadir debate por reflejo.
|
|
36
|
+
- Fix urgente de producción con incidente activo y blast radius acotado — el debate espera al post-mortem.
|
|
145
37
|
|
|
146
|
-
|
|
38
|
+
## Anti-patrones
|
|
147
39
|
|
|
148
|
-
|
|
40
|
+
- **Aceptar por reflejo**: "listo, implemento" ante una decisión que viola una regla, detectando el problema solo cuando el usuario pide análisis crítico.
|
|
41
|
+
- **Endulzar el análisis**: presentar como tradeoff opcional lo que rompe una regla absoluta ("aunque hay tradeoffs, tu enfoque es válido si…").
|
|
42
|
+
- **Solución intermedia que vacía la regla**: ofrecer "agregar un log warning" cuando el problema real es romper la invariante — fallback silencioso disfrazado.
|
|
43
|
+
- **Implementar primero, debatir después**: revertir daño acumulable (commits que rompen invariantes) es más caro que debatir al inicio.
|
|
149
44
|
|
|
150
|
-
|
|
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.
|
|
45
|
+
Detalle extendido (ejemplo positivo completo del VBO, anti-patrones desarrollados, caso de origen SIGAF con commit): `Skill("meta-reglas-extendido")` → `recursos/debatir-antes-de-aceptar.md`.
|
package/reglas/docs.md
CHANGED
package/reglas/estilo-codigo.md
CHANGED
|
@@ -173,6 +173,12 @@ Scripts y hooks SWL que aplican esta exclusión y deben mantenerla:
|
|
|
173
173
|
con clase negada para fragmentos.
|
|
174
174
|
- Cualquier script futuro de auditoría de agentes.
|
|
175
175
|
|
|
176
|
+
**Caso de validación positiva (2026-07-08)**: durante el diseño del comando
|
|
177
|
+
`/swl:fix` se planeó extraer la tabla de detección de lenguaje duplicada entre
|
|
178
|
+
`resolutor-build-swl` y `gh-fix-ci-swl` a un fragmento — esta regla lo impidió
|
|
179
|
+
correctamente (solo 2 agentes; "no hay ahorro real"). La duplicación quedó como
|
|
180
|
+
herencia documentada. La regla previno sobre-ingeniería real.
|
|
181
|
+
|
|
176
182
|
**Caso de regresión histórico**: tras crear `agentes/_intent-spec.md`
|
|
177
183
|
(fragmento) en sesión 2026-05-18, `scripts/generar-inventario.js` contó
|
|
178
184
|
61 agentes cuando real eran 60 (gate `verificar-release.js` lo detectó).
|