@saulwade/swl-ses 1.5.2 → 1.6.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.
Files changed (64) hide show
  1. package/CLAUDE.md +32 -61
  2. package/README.md +20 -3
  3. package/agentes/datos-swl.md +1 -1
  4. package/agentes/frontend-angular-swl.md +7 -7
  5. package/agentes/frontend-css-swl.md +4 -4
  6. package/agentes/frontend-react-swl.md +7 -7
  7. package/agentes/frontend-swl.md +9 -9
  8. package/agentes/frontend-tailwind-swl.md +4 -4
  9. package/agentes/rendimiento-swl.md +2 -2
  10. package/bin/swl-ses.js +49 -7
  11. package/comandos/swl/brainstorm.md +1 -0
  12. package/comandos/swl/compactar.md +1 -1
  13. package/comandos/swl/discutir-fase.md +15 -1
  14. package/comandos/swl/mapear-codebase.md +1 -1
  15. package/comandos/swl/nemesis.md +29 -0
  16. package/comandos/swl/planear-fase.md +2 -2
  17. package/comandos/swl/verificar.md +4 -4
  18. package/habilidades/aprendizaje-continuo/SKILL.md +7 -1
  19. package/habilidades/diseno-herramientas-agente/SKILL.md +1 -0
  20. package/habilidades/doc-sync/SKILL.md +441 -1
  21. package/habilidades/doubt-driven-review/SKILL.md +177 -171
  22. package/habilidades/feynman-auditor-swl/SKILL.md +129 -123
  23. package/habilidades/infra-github-actions/SKILL.md +172 -166
  24. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  25. package/habilidades/nemesis-evaluacion-json/SKILL.md +5 -0
  26. package/habilidades/nemesis-redistribuir/SKILL.md +5 -0
  27. package/habilidades/node-experto/SKILL.md +197 -3
  28. package/habilidades/prevencion-racionalizacion/SKILL.md +1 -0
  29. package/habilidades/privacy-memoria/SKILL.md +1 -0
  30. package/habilidades/sre-patrones/SKILL.md +1 -1
  31. package/habilidades/state-inconsistency-auditor-swl/SKILL.md +172 -166
  32. package/habilidades/tdd-workflow/SKILL.md +178 -3
  33. package/habilidades/verificacion-evidencia/SKILL.md +1 -0
  34. package/habilidades/web-fetcher-routing/SKILL.md +81 -75
  35. package/habilidades/workflow-claude-code/SKILL.md +2 -2
  36. package/hooks/extraccion-aprendizajes.js +11 -0
  37. package/manifiestos/modulos.json +2 -1
  38. package/manifiestos/skills-lock.json +1142 -1114
  39. package/package.json +7 -4
  40. package/plugin.json +4 -2
  41. package/reglas/auditorias-documentales-estructurales.md +205 -0
  42. package/schemas/agent-frontmatter.schema.json +1 -1
  43. package/scripts/desinstalar.js +105 -24
  44. package/scripts/generar-inventario.js +450 -420
  45. package/scripts/instalador.js +55 -4
  46. package/scripts/lib/parsear-opciones.js +3 -0
  47. package/scripts/lib/ui.js +148 -22
  48. package/scripts/tui/componentes/selector-multi.js +189 -0
  49. package/scripts/tui/componentes/selector-unico.js +158 -0
  50. package/scripts/tui/ejecutores.js +375 -0
  51. package/scripts/tui/index.js +162 -0
  52. package/scripts/tui/lib/colores.js +129 -0
  53. package/scripts/tui/lib/render.js +264 -0
  54. package/scripts/tui/lib/teclas.js +113 -0
  55. package/scripts/tui/pantallas/inspect.js +173 -0
  56. package/scripts/tui/pantallas/install-wizard.js +334 -0
  57. package/scripts/tui/pantallas/menu-principal.js +52 -0
  58. package/scripts/tui/pantallas/progreso.js +274 -0
  59. package/scripts/tui/pantallas/resumen.js +132 -0
  60. package/scripts/tui/pantallas/uninstall-wizard.js +208 -0
  61. package/scripts/tui/pantallas/update-wizard.js +232 -0
  62. package/scripts/tui/pantallas/welcome.js +187 -0
  63. package/scripts/verificar-docs-vs-codigo.js +654 -0
  64. package/scripts/verificar-evolucion.js +19 -3
@@ -1,171 +1,177 @@
1
- ---
2
- name: doubt-driven-review
3
- description: >
4
- Adversarial peer review de decisiones técnicas antes de comprometerlas.
5
- Cuestiona supuestos, fuerza la articulación de alternativas descartadas y
6
- detecta confianza injustificada. Cargar antes de decidir arquitecturas
7
- irreversibles, elegir un framework crítico, definir un contrato de API
8
- público o aprobar un PR de alto impacto. NO cubre adversarial review de
9
- memoria (eso lo hace red-team-swl) ni de seguridad de código (eso lo hace
10
- revisor-seguridad-swl) — este skill se especializa en decisiones técnicas
11
- con costo de cambio alto.
12
- ---
13
-
14
- # Doubt-Driven Review
15
-
16
- ## Cuándo cargar
17
-
18
- - Antes de aprobar un ADR que toma una decisión irreversible.
19
- - Antes de comprometer un contrato público de API o un schema de BD que afecta integraciones externas.
20
- - Antes de elegir un framework, librería o patrón con costo de migración alto.
21
- - Antes de fusionar un PR cuyo blast radius incluye módulos críticos.
22
- - Cuando el equipo o el agente exhibe **alta confianza con baja evidencia** sobre una decisión técnica.
23
-
24
- ## Cuándo NO cargar
25
-
26
- - Para revisar código por calidad eso es `revisor-codigo-swl` con `Skill("checklist-calidad")`.
27
- - Para revisar seguridad eso es `revisor-seguridad-swl` con `Skill("checklist-seguridad")`.
28
- - Para validar memoria contra prompt injection o privacidad eso es `red-team-swl`.
29
- - Para discutir alcances con el usuario — eso es `Skill("brainstorming")` o `swl:discutir-fase`.
30
- - Para fixes triviales o decisiones reversibles en menos de 10 minutos.
31
-
32
- ## Principio
33
-
34
- > Una decisión cuya alternativa no se ha articulado, no es una decisión:
35
- > es una preferencia. Toda decisión técnica con costo de cambio alto debe
36
- > sobrevivir a un round adversarial antes de comprometerse.
37
-
38
- El skill ejecuta un protocolo en 5 pasos. Cada paso produce evidencia en
39
- texto. La salida del skill NO aprueba ni rechaza — produce un reporte que
40
- el agente o usuario humano usa para decidir.
41
-
42
- ## Protocolo
43
-
44
- ### Paso 1 Articular la decisión y su irreversibilidad
45
-
46
- Pedir explícitamente:
47
-
48
- - **Qué se decide**: 1-3 oraciones, sin jerga ambigua.
49
- - **Qué se descarta**: la decisión opuesta concreta.
50
- - **Costo de revertir**: estimación en turnos / archivos / horas si en 3 meses se concluye que fue incorrecta.
51
-
52
- Si el costo de revertir es < 4 horas y < 5 archivos: la decisión NO es candidata
53
- a doubt-driven review. Cerrar el skill y proceder.
54
-
55
- ### Paso 2 Forzar 3 alternativas descartadas
56
-
57
- El agente o usuario debe articular las 3 alternativas más fuertes que NO se eligieron, con:
58
-
59
- - Por qué cada una es plausible (≥ 1 razón concreta).
60
- - Qué tradeoff la hace inferior a la elegida (sin frase genérica como "menos flexible").
61
-
62
- Si la persona/agente no puede articular 3 alternativas: **señal de decisión bajo-evidencia**.
63
- Reportar: "Decisión propuesta sin alternativas articuladas. Riesgo de selección por inercia."
64
-
65
- ### Paso 3 Buscar contraevidencia activamente
66
-
67
- Para la decisión propuesta:
68
-
69
- - Listar 3 escenarios donde la decisión **fallaría** o produciría costos no anticipados.
70
- - Listar 1 caso histórico (dentro o fuera del proyecto) donde una decisión similar resultó incorrecta.
71
- - Identificar 1 supuesto de la decisión que NO está validado con evidencia (corre el riesgo de ser falso).
72
-
73
- Si los 3 escenarios de falla son improbables Y el supuesto está validado: la decisión gana robustez.
74
- Si ≥ 1 escenario tiene probabilidad ≥ 30%: documentar el riesgo en el reporte.
75
-
76
- ### Paso 4 Detectar confianza injustificada
77
-
78
- Patrones a marcar como red flags:
79
-
80
- - "Es la mejor práctica" sin citar fuente o caso.
81
- - "Siempre se hace así" sin verificar el contexto del proyecto actual.
82
- - "Es lo que recomienda <autoridad>" sin verificar que la recomendación aplica al stack/escala/dominio.
83
- - "No hay otra opción razonable" cuando el paso 2 ya forzó 3 alternativas.
84
- - Cita de un blog post o tweet como evidencia única.
85
- - Argumentos de tipo "todo el mundo lo usa" sin métrica concreta.
86
-
87
- Por cada red flag detectado: 1 línea en el reporte con cita textual del argumento.
88
-
89
- ### Paso 5 Trigger de reversión
90
-
91
- Toda decisión que pase doubt-driven review debe incluir:
92
-
93
- - **Trigger de reversión**: condición observable que, de cumplirse, obliga a reabrir la decisión.
94
- Ejemplos válidos: "p95 de latencia > 800ms en producción durante 7 días",
95
- "≥3 reportes de bugs relacionados con la limitación X en 30 días", "vendor X
96
- publica deprecation notice", "costo mensual de infra excede $Y".
97
- - **Fecha de reevaluación automática**: 6-12 meses desde la fecha de decisión.
98
-
99
- Si la decisión NO puede tener trigger observable: es una decisión **basada en preferencia**,
100
- no en hipótesis falsable. Documentarla como tal en el reporte.
101
-
102
- ## Formato del reporte
103
-
104
- ```markdown
105
- ## Doubt-Driven Review [decisión] [fecha]
106
-
107
- ### Decisión articulada
108
- - Qué se decide: [...]
109
- - Qué se descarta: [...]
110
- - Costo de revertir: [estimación]
111
-
112
- ### Alternativas articuladas
113
- 1. [alt-1]: plausible porque [...]; descartada porque [tradeoff concreto]
114
- 2. [alt-2]: ...
115
- 3. [alt-3]: ...
116
-
117
- ### Contraevidencia
118
- - Escenario de falla 1 [prob: alta/media/baja]: [...]
119
- - Escenario de falla 2 [prob: ...]: [...]
120
- - Escenario de falla 3 [prob: ...]: [...]
121
- - Caso histórico relevante: [...]
122
- - Supuesto sin validar: [...]
123
-
124
- ### Red flags detectados
125
- - [línea N: cita textual del argumento débil]
126
- - [...]
127
- - (o "Ninguno")
128
-
129
- ### Trigger de reversión
130
- - Condición: [observable falsable]
131
- - Fecha de reevaluación: [YYYY-MM-DD]
132
-
133
- ### Veredicto
134
- - ROBUSTA — pasó los 5 pasos sin red flags y con trigger claro
135
- - ACEPTABLE pasó con 1-2 red flags documentados y trigger claro
136
- - BAJO-EVIDENCIA falla en pasos 2, 4 o 5; reabrir antes de comprometer
137
- ```
138
-
139
- ## Anti-patrones del skill
140
-
141
- - **Auto-revisión**: el agente que tomó la decisión ejecuta el skill sobre sí mismo.
142
- Pierde el efecto adversarial. Cargar el skill desde un agente distinto al
143
- decisor (ej: `arquitecto-swl` decidió → `revisor-codigo-swl` ejecuta el skill
144
- con foco en la decisión).
145
- - **Trigger inverificable**: "cuando el sistema deje de escalar" no es trigger.
146
- Debe ser una métrica observable con valor numérico o evento concreto.
147
- - **Alternativas de paja**: las 3 alternativas no pueden ser opciones triviales
148
- inferiores a propósito. Si las 3 son obviamente peores, el skill perdió su valor
149
- pedir 3 alternativas reales o aceptar que la decisión es bajo-evidencia.
150
- - **Convertirlo en proceso burocrático**: aplicar doubt-driven a decisiones
151
- reversibles es overhead. El paso 1 filtra esto explícitamente.
152
-
153
- ## Relación con otras capacidades del sistema
154
-
155
- - `red-team-swl`: cubre adversarial review de **memoria del sistema** (perfil-usuario,
156
- instintos, APRENDIZAJES). Doubt-driven cubre **decisiones técnicas**. NO duplicación.
157
- - `arquitecto-swl`: produce ADRs. Doubt-driven se carga ANTES de aceptar el ADR.
158
- - `revisor-codigo-swl`: revisa calidad de código ya escrito. Doubt-driven revisa
159
- decisiones ANTES de escribir código.
160
- - `Skill("verificar-trabajo")`: verificación goal-backward del resultado.
161
- Doubt-driven es goal-backward del **diseño**, no del resultado.
162
-
163
- ## Origen
164
-
165
- Patrón observado en `temp/agent-skills-main/skills/doubt-driven-development`
166
- (2026-05-09). Adaptado al sistema swl-ses: en español, con trigger de
167
- reversión obligatorio (alineado con `reglas/arquitectura.md` § ADRs en estado
168
- Propuesto), y con relación explícita a `red-team-swl` para evitar duplicar
169
- funciones que ya existen en el sistema.
170
-
171
- Para ejemplos concretos de aplicación, ver [`recursos/EXAMPLES.md`](recursos/EXAMPLES.md).
1
+ ---
2
+ name: doubt-driven-review
3
+ description: >
4
+ Adversarial peer review de decisiones técnicas antes de comprometerlas.
5
+ Cuestiona supuestos, fuerza la articulación de alternativas descartadas y
6
+ detecta confianza injustificada. Cargar antes de decidir arquitecturas
7
+ irreversibles, elegir un framework crítico, definir un contrato de API
8
+ público o aprobar un PR de alto impacto. NO cubre adversarial review de
9
+ memoria (eso lo hace red-team-swl) ni de seguridad de código (eso lo hace
10
+ revisor-seguridad-swl) — este skill se especializa en decisiones técnicas
11
+ con costo de cambio alto.
12
+ version: "1.0.0"
13
+ exclusiones:
14
+ - "No cargar para revisión de memoria SWL (APRENDIZAJES.md, instintos/) — esa es responsabilidad de red-team-swl."
15
+ - "No cargar para auditoría de seguridad de código (OWASP, CVEs, inyección) — usar revisor-seguridad-swl."
16
+ - "No cargar para decisiones reversibles de bajo costo (formato de output, nombre de variable, refactor menor) — el overhead del review no compensa."
17
+ - "No cargar para code review estándar de PR — eso es revisor-codigo-swl; este skill aplica a decisiones de diseño, no a calidad de código."
18
+ ---
19
+
20
+ # Doubt-Driven Review
21
+
22
+ ## Cuándo cargar
23
+
24
+ - Antes de aprobar un ADR que toma una decisión irreversible.
25
+ - Antes de comprometer un contrato público de API o un schema de BD que afecta integraciones externas.
26
+ - Antes de elegir un framework, librería o patrón con costo de migración alto.
27
+ - Antes de fusionar un PR cuyo blast radius incluye módulos críticos.
28
+ - Cuando el equipo o el agente exhibe **alta confianza con baja evidencia** sobre una decisión técnica.
29
+
30
+ ## Cuándo NO cargar
31
+
32
+ - Para revisar código por calidad — eso es `revisor-codigo-swl` con `Skill("checklist-calidad")`.
33
+ - Para revisar seguridad — eso es `revisor-seguridad-swl` con `Skill("checklist-seguridad")`.
34
+ - Para validar memoria contra prompt injection o privacidad eso es `red-team-swl`.
35
+ - Para discutir alcances con el usuario eso es `Skill("brainstorming")` o `swl:discutir-fase`.
36
+ - Para fixes triviales o decisiones reversibles en menos de 10 minutos.
37
+
38
+ ## Principio
39
+
40
+ > Una decisión cuya alternativa no se ha articulado, no es una decisión:
41
+ > es una preferencia. Toda decisión técnica con costo de cambio alto debe
42
+ > sobrevivir a un round adversarial antes de comprometerse.
43
+
44
+ El skill ejecuta un protocolo en 5 pasos. Cada paso produce evidencia en
45
+ texto. La salida del skill NO aprueba ni rechaza — produce un reporte que
46
+ el agente o usuario humano usa para decidir.
47
+
48
+ ## Protocolo
49
+
50
+ ### Paso 1 Articular la decisión y su irreversibilidad
51
+
52
+ Pedir explícitamente:
53
+
54
+ - **Qué se decide**: 1-3 oraciones, sin jerga ambigua.
55
+ - **Qué se descarta**: la decisión opuesta concreta.
56
+ - **Costo de revertir**: estimación en turnos / archivos / horas si en 3 meses se concluye que fue incorrecta.
57
+
58
+ Si el costo de revertir es < 4 horas y < 5 archivos: la decisión NO es candidata
59
+ a doubt-driven review. Cerrar el skill y proceder.
60
+
61
+ ### Paso 2 — Forzar 3 alternativas descartadas
62
+
63
+ El agente o usuario debe articular las 3 alternativas más fuertes que NO se eligieron, con:
64
+
65
+ - Por qué cada una es plausible (≥ 1 razón concreta).
66
+ - Qué tradeoff la hace inferior a la elegida (sin frase genérica como "menos flexible").
67
+
68
+ Si la persona/agente no puede articular 3 alternativas: **señal de decisión bajo-evidencia**.
69
+ Reportar: "Decisión propuesta sin alternativas articuladas. Riesgo de selección por inercia."
70
+
71
+ ### Paso 3 Buscar contraevidencia activamente
72
+
73
+ Para la decisión propuesta:
74
+
75
+ - Listar 3 escenarios donde la decisión **fallaría** o produciría costos no anticipados.
76
+ - Listar 1 caso histórico (dentro o fuera del proyecto) donde una decisión similar resultó incorrecta.
77
+ - Identificar 1 supuesto de la decisión que NO está validado con evidencia (corre el riesgo de ser falso).
78
+
79
+ Si los 3 escenarios de falla son improbables Y el supuesto está validado: la decisión gana robustez.
80
+ Si 1 escenario tiene probabilidad 30%: documentar el riesgo en el reporte.
81
+
82
+ ### Paso 4 Detectar confianza injustificada
83
+
84
+ Patrones a marcar como red flags:
85
+
86
+ - "Es la mejor práctica" sin citar fuente o caso.
87
+ - "Siempre se hace así" sin verificar el contexto del proyecto actual.
88
+ - "Es lo que recomienda <autoridad>" sin verificar que la recomendación aplica al stack/escala/dominio.
89
+ - "No hay otra opción razonable" cuando el paso 2 ya forzó 3 alternativas.
90
+ - Cita de un blog post o tweet como evidencia única.
91
+ - Argumentos de tipo "todo el mundo lo usa" sin métrica concreta.
92
+
93
+ Por cada red flag detectado: 1 línea en el reporte con cita textual del argumento.
94
+
95
+ ### Paso 5 Trigger de reversión
96
+
97
+ Toda decisión que pase doubt-driven review debe incluir:
98
+
99
+ - **Trigger de reversión**: condición observable que, de cumplirse, obliga a reabrir la decisión.
100
+ Ejemplos válidos: "p95 de latencia > 800ms en producción durante 7 días",
101
+ "≥3 reportes de bugs relacionados con la limitación X en 30 días", "vendor X
102
+ publica deprecation notice", "costo mensual de infra excede $Y".
103
+ - **Fecha de reevaluación automática**: 6-12 meses desde la fecha de decisión.
104
+
105
+ Si la decisión NO puede tener trigger observable: es una decisión **basada en preferencia**,
106
+ no en hipótesis falsable. Documentarla como tal en el reporte.
107
+
108
+ ## Formato del reporte
109
+
110
+ ```markdown
111
+ ## Doubt-Driven Review — [decisión] — [fecha]
112
+
113
+ ### Decisión articulada
114
+ - Qué se decide: [...]
115
+ - Qué se descarta: [...]
116
+ - Costo de revertir: [estimación]
117
+
118
+ ### Alternativas articuladas
119
+ 1. [alt-1]: plausible porque [...]; descartada porque [tradeoff concreto]
120
+ 2. [alt-2]: ...
121
+ 3. [alt-3]: ...
122
+
123
+ ### Contraevidencia
124
+ - Escenario de falla 1 [prob: alta/media/baja]: [...]
125
+ - Escenario de falla 2 [prob: ...]: [...]
126
+ - Escenario de falla 3 [prob: ...]: [...]
127
+ - Caso histórico relevante: [...]
128
+ - Supuesto sin validar: [...]
129
+
130
+ ### Red flags detectados
131
+ - [línea N: cita textual del argumento débil]
132
+ - [...]
133
+ - (o "Ninguno")
134
+
135
+ ### Trigger de reversión
136
+ - Condición: [observable falsable]
137
+ - Fecha de reevaluación: [YYYY-MM-DD]
138
+
139
+ ### Veredicto
140
+ - ROBUSTA — pasó los 5 pasos sin red flags y con trigger claro
141
+ - ACEPTABLE pasó con 1-2 red flags documentados y trigger claro
142
+ - BAJO-EVIDENCIA falla en pasos 2, 4 o 5; reabrir antes de comprometer
143
+ ```
144
+
145
+ ## Anti-patrones del skill
146
+
147
+ - **Auto-revisión**: el agente que tomó la decisión ejecuta el skill sobre sí mismo.
148
+ Pierde el efecto adversarial. Cargar el skill desde un agente distinto al
149
+ decisor (ej: `arquitecto-swl` decidió `revisor-codigo-swl` ejecuta el skill
150
+ con foco en la decisión).
151
+ - **Trigger inverificable**: "cuando el sistema deje de escalar" no es trigger.
152
+ Debe ser una métrica observable con valor numérico o evento concreto.
153
+ - **Alternativas de paja**: las 3 alternativas no pueden ser opciones triviales
154
+ inferiores a propósito. Si las 3 son obviamente peores, el skill perdió su valor
155
+ pedir 3 alternativas reales o aceptar que la decisión es bajo-evidencia.
156
+ - **Convertirlo en proceso burocrático**: aplicar doubt-driven a decisiones
157
+ reversibles es overhead. El paso 1 filtra esto explícitamente.
158
+
159
+ ## Relación con otras capacidades del sistema
160
+
161
+ - `red-team-swl`: cubre adversarial review de **memoria del sistema** (perfil-usuario,
162
+ instintos, APRENDIZAJES). Doubt-driven cubre **decisiones técnicas**. NO duplicación.
163
+ - `arquitecto-swl`: produce ADRs. Doubt-driven se carga ANTES de aceptar el ADR.
164
+ - `revisor-codigo-swl`: revisa calidad de código ya escrito. Doubt-driven revisa
165
+ decisiones ANTES de escribir código.
166
+ - `Skill("verificar-trabajo")`: verificación goal-backward del resultado.
167
+ Doubt-driven es goal-backward del **diseño**, no del resultado.
168
+
169
+ ## Origen
170
+
171
+ Patrón observado en `temp/agent-skills-main/skills/doubt-driven-development`
172
+ (2026-05-09). Adaptado al sistema swl-ses: en español, con trigger de
173
+ reversión obligatorio (alineado con `reglas/arquitectura.md` § ADRs en estado
174
+ Propuesto), y con relación explícita a `red-team-swl` para evitar duplicar
175
+ funciones que ya existen en el sistema.
176
+
177
+ Para ejemplos concretos de aplicación, ver [`recursos/EXAMPLES.md`](recursos/EXAMPLES.md).
@@ -1,123 +1,129 @@
1
- ---
2
- name: feynman-auditor-swl
3
- description: >
4
- Auditor de bugs de lógica de negocio mediante la técnica Feynman: cuestiona
5
- cada línea, cada orden de operaciones, cada presencia/ausencia de guard, y
6
- cada asunción implícita. Language-agnostic (Python, TS, Go, Rust, Java, C#).
7
- Cargar cuando se necesite revisión profunda de funciones individuales en
8
- módulos críticos, especialmente tras un revisor-codigo-swl que pasó pero
9
- donde sospechas que algo no está bien.
10
- ---
11
-
12
- # Cuándo cargar
13
-
14
- - El módulo maneja dinero, inventario, permisos, o datos críticos irreversibles.
15
- - `revisor-codigo-swl` pasó pero hay sospecha de bug de lógica de negocio.
16
- - Nemesis está corriendo su Pasada 1.
17
- - Se necesita revisión profunda de una función específica antes de merge.
18
-
19
- # Cuándo NO cargar
20
-
21
- - Para escaneo de vulnerabilidades conocidas (CVE, inyecciones) usar `revisor-seguridad-swl`.
22
- - Para revisión de estilo o cobertura de tests — usar `revisor-codigo-swl`.
23
- - Para funciones de utilería sin estado (formateo, parsing puro).
24
- - Como sustituto de tests de regresión.
25
-
26
- ---
27
-
28
- # Feynman Auditor
29
-
30
- Encuentra bugs de lógica de negocio cuestionando cada línea como si tuvieras que explicarle el código a alguien que no asume nada.
31
-
32
- Las preguntas detalladas están en [recursos/preguntas-language-agnostic.md](recursos/preguntas-language-agnostic.md).
33
-
34
- ---
35
-
36
- ## Mentalidad de base
37
-
38
- Antes de leer el primer archivo, adoptar esta perspectiva:
39
-
40
- > "Este código tiene un bug. Mi trabajo es encontrarlo.
41
- > No estoy aquí para confirmar que el código es correcto.
42
- > Cada línea que no entiendo completamente es un sospechoso."
43
-
44
- Dos fuentes principales de bugs de lógica:
45
-
46
- 1. **Bugs de guard ausente**: la condición correcta existe en función A pero falta en función B que hace lo mismo por un path diferente.
47
- 2. **Bugs de orden de operaciones**: el cálculo es correcto, pero se ejecuta antes o después del momento en que los datos son válidos.
48
-
49
- ---
50
-
51
- ## Fase 0: Inventario de scope
52
-
53
- Antes de auditar, mapear:
54
-
55
- - ¿Qué módulos/archivos están en scope?
56
- - ¿Cuáles son las funciones de punto de entrada (endpoints, handlers, métodos públicos)?
57
- - ¿Qué datos persisten (BD, caché, archivos, estado en memoria)?
58
- - ¿Qué actores pueden llamar qué funciones?
59
-
60
- ---
61
-
62
- ## Fase 1: Auditoría de funciones individuales
63
-
64
- Para cada función no trivial, hacer las preguntas Q1–Q7 del archivo de recursos.
65
-
66
- Categorías de preguntas:
67
- - **Q1** — Propósito: ¿qué hace exactamente esta función y solo esta función?
68
- - **Q2** — Orden: ¿importa el orden de estas operaciones?
69
- - **Q3** — Consistencia cross-función: ¿qué tienen en común dos funciones que parecen similares?
70
- - **Q4** Asunciones implícitas: ¿qué asume este código sin verificarlo?
71
- - **Q5** — Límites: ¿qué pasa en los extremos (cero, máximo, vacío, ya-existe)?
72
- - **Q6** — Returns y errores: ¿qué devuelve esta función cuando algo falla?
73
- - **Q7** — Interacciones externas: ¿qué puede pasar mal cuando se llama a otro sistema?
74
-
75
- Registrar como sospechoso cualquier función donde una pregunta no tenga respuesta clara en el código.
76
-
77
- ---
78
-
79
- ## Fase 2: Auditoría cross-función
80
-
81
- Buscar divergencias entre funciones que deberían comportarse igual:
82
-
83
- - ¿Función A y B hacen lo mismo pero una tiene un guard que la otra no tiene?
84
- - ¿La función de creación inicializa todos los campos que la función de lectura usa?
85
- - ¿El path de happy path y el path de error manejan el estado de la misma manera?
86
-
87
- ---
88
-
89
- ## Fase 3: Síntesis de hallazgos
90
-
91
- Convertir sospechosos en hallazgos concretos:
92
-
93
- Para cada sospechoso, construir:
94
- 1. La pregunta Feynman que lo identificó
95
- 2. La asunción que el código hace implícitamente
96
- 3. El contraejemplo concreto que rompe esa asunción
97
- 4. La consecuencia observable del bug
98
-
99
- ---
100
-
101
- ## Fase 4: Verificación
102
-
103
- Todo hallazgo CRÍTICO, ALTO y MEDIO debe verificarse antes del reporte final.
104
-
105
- **Patrón de falsos positivos frecuentes:**
106
- - El guard existe pero en un nivel superior (middleware, decorator, caller).
107
- - El orden parece incorrecto pero hay un comentario que explica el diseño intencional.
108
- - La función parece no validar, pero el tipo de dato ya garantiza el invariante.
109
-
110
- **Formato de salida**: `.audit/findings/feynman-passN.md`
111
-
112
- ---
113
-
114
- ## Adaptación por lenguaje
115
-
116
- | Concepto | Python | TypeScript | Go | Rust | Java | C# |
117
- |---------|--------|------------|-----|------|------|-----|
118
- | Actor | `request.user` | `req.user` / `userId` | `ctx.UserID` | `actor_id` | `principal` | `User.Identity` |
119
- | Guard | decorador / `if not user:` | middleware / `if (!user)` | `if ctx.UserID == ""` | `if actor_id.is_none()` | `@PreAuthorize` | `[Authorize]` |
120
- | Mutación interna | método privado `_fn` | método privado | función local | `pub(crate) fn` | método `private` | método `private` |
121
- | Transacción | `with db.begin():` | `await trx.begin()` | `tx, _ := db.Begin()` | `conn.execute("BEGIN")` | `@Transactional` | `using var tx =` |
122
-
123
- <!-- Adaptado de nemesis-auditor-main bajo MIT License (https://github.com/0xiehnnkta/nemesis-auditor) -->
1
+ ---
2
+ name: feynman-auditor-swl
3
+ description: >
4
+ Auditor de bugs de lógica de negocio mediante la técnica Feynman: cuestiona
5
+ cada línea, cada orden de operaciones, cada presencia/ausencia de guard, y
6
+ cada asunción implícita. Language-agnostic (Python, TS, Go, Rust, Java, C#).
7
+ Cargar cuando se necesite revisión profunda de funciones individuales en
8
+ módulos críticos, especialmente tras un revisor-codigo-swl que pasó pero
9
+ donde sospechas que algo no está bien.
10
+ version: "1.0.0"
11
+ exclusiones:
12
+ - "No cargar para revisión de estilo de código o naming — usar revisor-codigo-swl."
13
+ - "No cargar para auditoría de seguridad (OWASP, secretos, inyección) — usar revisor-seguridad-swl."
14
+ - "No cargar para módulos triviales de <200 LOC con CRUD directo — el costo de carga supera el valor."
15
+ - "No cargar para análisis de performance o bottlenecks usar performance-baseline."
16
+ ---
17
+
18
+ # Cuándo cargar
19
+
20
+ - El módulo maneja dinero, inventario, permisos, o datos críticos irreversibles.
21
+ - `revisor-codigo-swl` pasó pero hay sospecha de bug de lógica de negocio.
22
+ - Nemesis está corriendo su Pasada 1.
23
+ - Se necesita revisión profunda de una función específica antes de merge.
24
+
25
+ # Cuándo NO cargar
26
+
27
+ - Para escaneo de vulnerabilidades conocidas (CVE, inyecciones) — usar `revisor-seguridad-swl`.
28
+ - Para revisión de estilo o cobertura de tests — usar `revisor-codigo-swl`.
29
+ - Para funciones de utilería sin estado (formateo, parsing puro).
30
+ - Como sustituto de tests de regresión.
31
+
32
+ ---
33
+
34
+ # Feynman Auditor
35
+
36
+ Encuentra bugs de lógica de negocio cuestionando cada línea como si tuvieras que explicarle el código a alguien que no asume nada.
37
+
38
+ Las preguntas detalladas están en [recursos/preguntas-language-agnostic.md](recursos/preguntas-language-agnostic.md).
39
+
40
+ ---
41
+
42
+ ## Mentalidad de base
43
+
44
+ Antes de leer el primer archivo, adoptar esta perspectiva:
45
+
46
+ > "Este código tiene un bug. Mi trabajo es encontrarlo.
47
+ > No estoy aquí para confirmar que el código es correcto.
48
+ > Cada línea que no entiendo completamente es un sospechoso."
49
+
50
+ Dos fuentes principales de bugs de lógica:
51
+
52
+ 1. **Bugs de guard ausente**: la condición correcta existe en función A pero falta en función B que hace lo mismo por un path diferente.
53
+ 2. **Bugs de orden de operaciones**: el cálculo es correcto, pero se ejecuta antes o después del momento en que los datos son válidos.
54
+
55
+ ---
56
+
57
+ ## Fase 0: Inventario de scope
58
+
59
+ Antes de auditar, mapear:
60
+
61
+ - ¿Qué módulos/archivos están en scope?
62
+ - ¿Cuáles son las funciones de punto de entrada (endpoints, handlers, métodos públicos)?
63
+ - ¿Qué datos persisten (BD, caché, archivos, estado en memoria)?
64
+ - ¿Qué actores pueden llamar qué funciones?
65
+
66
+ ---
67
+
68
+ ## Fase 1: Auditoría de funciones individuales
69
+
70
+ Para cada función no trivial, hacer las preguntas Q1–Q7 del archivo de recursos.
71
+
72
+ Categorías de preguntas:
73
+ - **Q1** — Propósito: ¿qué hace exactamente esta función y solo esta función?
74
+ - **Q2** — Orden: ¿importa el orden de estas operaciones?
75
+ - **Q3** Consistencia cross-función: ¿qué tienen en común dos funciones que parecen similares?
76
+ - **Q4** — Asunciones implícitas: ¿qué asume este código sin verificarlo?
77
+ - **Q5** — Límites: ¿qué pasa en los extremos (cero, máximo, vacío, ya-existe)?
78
+ - **Q6** — Returns y errores: ¿qué devuelve esta función cuando algo falla?
79
+ - **Q7** — Interacciones externas: ¿qué puede pasar mal cuando se llama a otro sistema?
80
+
81
+ Registrar como sospechoso cualquier función donde una pregunta no tenga respuesta clara en el código.
82
+
83
+ ---
84
+
85
+ ## Fase 2: Auditoría cross-función
86
+
87
+ Buscar divergencias entre funciones que deberían comportarse igual:
88
+
89
+ - ¿Función A y B hacen lo mismo pero una tiene un guard que la otra no tiene?
90
+ - ¿La función de creación inicializa todos los campos que la función de lectura usa?
91
+ - ¿El path de happy path y el path de error manejan el estado de la misma manera?
92
+
93
+ ---
94
+
95
+ ## Fase 3: Síntesis de hallazgos
96
+
97
+ Convertir sospechosos en hallazgos concretos:
98
+
99
+ Para cada sospechoso, construir:
100
+ 1. La pregunta Feynman que lo identificó
101
+ 2. La asunción que el código hace implícitamente
102
+ 3. El contraejemplo concreto que rompe esa asunción
103
+ 4. La consecuencia observable del bug
104
+
105
+ ---
106
+
107
+ ## Fase 4: Verificación
108
+
109
+ Todo hallazgo CRÍTICO, ALTO y MEDIO debe verificarse antes del reporte final.
110
+
111
+ **Patrón de falsos positivos frecuentes:**
112
+ - El guard existe pero en un nivel superior (middleware, decorator, caller).
113
+ - El orden parece incorrecto pero hay un comentario que explica el diseño intencional.
114
+ - La función parece no validar, pero el tipo de dato ya garantiza el invariante.
115
+
116
+ **Formato de salida**: `.audit/findings/feynman-passN.md`
117
+
118
+ ---
119
+
120
+ ## Adaptación por lenguaje
121
+
122
+ | Concepto | Python | TypeScript | Go | Rust | Java | C# |
123
+ |---------|--------|------------|-----|------|------|-----|
124
+ | Actor | `request.user` | `req.user` / `userId` | `ctx.UserID` | `actor_id` | `principal` | `User.Identity` |
125
+ | Guard | decorador / `if not user:` | middleware / `if (!user)` | `if ctx.UserID == ""` | `if actor_id.is_none()` | `@PreAuthorize` | `[Authorize]` |
126
+ | Mutación interna | método privado `_fn` | método privado | función local | `pub(crate) fn` | método `private` | método `private` |
127
+ | Transacción | `with db.begin():` | `await trx.begin()` | `tx, _ := db.Begin()` | `conn.execute("BEGIN")` | `@Transactional` | `using var tx =` |
128
+
129
+ <!-- Adaptado de nemesis-auditor-main bajo MIT License (https://github.com/0xiehnnkta/nemesis-auditor) -->