@saulwade/swl-ses 2.3.0 → 2.3.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 (303) hide show
  1. package/CLAUDE.md +47 -6
  2. package/README.md +1 -1
  3. package/agentes/accesibilidad-wcag-swl.md +690 -690
  4. package/agentes/arquitecto-swl.md +267 -267
  5. package/agentes/auto-evolucion-swl.md +908 -908
  6. package/agentes/backend-api-swl.md +472 -472
  7. package/agentes/backend-csharp-swl.md +420 -420
  8. package/agentes/backend-go-swl.md +390 -390
  9. package/agentes/backend-java-swl.md +281 -281
  10. package/agentes/backend-node-swl.md +479 -479
  11. package/agentes/backend-python-swl.md +605 -605
  12. package/agentes/backend-rust-swl.md +364 -364
  13. package/agentes/backend-workers-swl.md +482 -482
  14. package/agentes/cloud-infra-swl.md +509 -509
  15. package/agentes/consolidador-swl.md +541 -541
  16. package/agentes/datos-swl.md +605 -605
  17. package/agentes/depurador-swl.md +352 -352
  18. package/agentes/devops-ci-swl.md +400 -400
  19. package/agentes/disenador-ui-swl.md +569 -569
  20. package/agentes/documentador-swl.md +345 -345
  21. package/agentes/frontend-angular-swl.md +621 -621
  22. package/agentes/frontend-css-swl.md +716 -716
  23. package/agentes/frontend-react-swl.md +692 -692
  24. package/agentes/frontend-swl.md +496 -496
  25. package/agentes/frontend-tailwind-swl.md +826 -826
  26. package/agentes/gh-fix-ci-swl.md +2 -2
  27. package/agentes/implementador-swl.md +328 -328
  28. package/agentes/investigador-swl.md +432 -432
  29. package/agentes/investigador-ux-swl.md +505 -505
  30. package/agentes/llm-apps-swl.md +278 -278
  31. package/agentes/migrador-swl.md +442 -442
  32. package/agentes/mobile-android-swl.md +511 -511
  33. package/agentes/mobile-cross-swl.md +541 -541
  34. package/agentes/mobile-ios-swl.md +502 -502
  35. package/agentes/mobile-testing-swl.md +302 -302
  36. package/agentes/nemesis-auditor-swl.md +285 -285
  37. package/agentes/notificador-swl.md +918 -918
  38. package/agentes/observabilidad-swl.md +438 -438
  39. package/agentes/orquestador-swl.md +1026 -1026
  40. package/agentes/pagos-swl.md +310 -310
  41. package/agentes/perfilador-usuario-swl.md +321 -321
  42. package/agentes/planificador-swl.md +399 -399
  43. package/agentes/producto-prd-swl.md +589 -589
  44. package/agentes/red-team-swl.md +1 -1
  45. package/agentes/release-manager-swl.md +590 -590
  46. package/agentes/rendimiento-swl.md +713 -713
  47. package/agentes/resolutor-build-swl.md +245 -245
  48. package/agentes/revisor-angular-swl.md +278 -278
  49. package/agentes/revisor-codigo-swl.md +505 -505
  50. package/agentes/revisor-csharp-swl.md +264 -264
  51. package/agentes/revisor-go-swl.md +259 -259
  52. package/agentes/revisor-java-swl.md +257 -257
  53. package/agentes/revisor-kotlin-swl.md +273 -273
  54. package/agentes/revisor-nextjs-swl.md +281 -281
  55. package/agentes/revisor-php-swl.md +271 -271
  56. package/agentes/revisor-react-swl.md +278 -278
  57. package/agentes/revisor-rust-swl.md +346 -346
  58. package/agentes/revisor-seguridad-swl.md +399 -399
  59. package/agentes/revisor-swift-swl.md +268 -268
  60. package/agentes/revisor-typescript-swl.md +346 -346
  61. package/agentes/sre-swl.md +291 -291
  62. package/agentes/tdd-qa-swl.md +393 -393
  63. package/comandos/swl/briefing.md +119 -119
  64. package/comandos/swl/contribuir.md +233 -233
  65. package/comandos/swl/predecir.md +139 -139
  66. package/comandos/swl/sesiones.md +1 -1
  67. package/gateway/agent-executor.js +1 -1
  68. package/gateway/lib/event-channel.js +191 -191
  69. package/habilidades/agent-deep-links/SKILL.md +148 -148
  70. package/habilidades/agentes-como-servicio/SKILL.md +2 -2
  71. package/habilidades/angular-moderno/SKILL.md +20 -1
  72. package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -276
  73. package/habilidades/backend-async-postgres-testing/SKILL.md +215 -215
  74. package/habilidades/backend-error-design/SKILL.md +221 -221
  75. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  76. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  77. package/habilidades/calidad-anti-patrones-universales/SKILL.md +368 -368
  78. package/habilidades/calidad-contract-testing/SKILL.md +165 -165
  79. package/habilidades/calidad-mutation-testing/SKILL.md +170 -170
  80. package/habilidades/changelog-generator/scripts/parse-commits.js +367 -367
  81. package/habilidades/checklist-seguridad/recursos/stride-cobertura.md +60 -60
  82. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  83. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  84. package/habilidades/drift-detection/SKILL.md +179 -179
  85. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  86. package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +1 -1
  87. package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -57
  88. package/habilidades/eval-framework/SKILL.md +212 -212
  89. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
  90. package/habilidades/harness-claude-code/recursos/disciplina-harness-regla.md +252 -252
  91. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  92. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  93. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  94. package/habilidades/perfil-usuario/SKILL.md +200 -200
  95. package/habilidades/prevencion-sobreingenieria/recursos/EXAMPLES.md +580 -580
  96. package/habilidades/proceso-ddia-fundamentos/SKILL.md +255 -255
  97. package/habilidades/proceso-ddia-streaming/SKILL.md +231 -231
  98. package/habilidades/proceso-debate-adversarial/recursos/personas.md +105 -105
  99. package/habilidades/proceso-discovery-machote/SKILL.md +157 -157
  100. package/habilidades/proceso-dynamic-workflows/SKILL.md +138 -138
  101. package/habilidades/proceso-dynamic-workflows/recursos/template-adversarial-verify.js +65 -65
  102. package/habilidades/proceso-dynamic-workflows/recursos/template-triage.js +65 -65
  103. package/habilidades/proceso-intent-engineering/SKILL.md +269 -269
  104. package/habilidades/proceso-modular-split/SKILL.md +256 -256
  105. package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +2 -2
  106. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
  107. package/habilidades/structured-outputs/SKILL.md +2 -2
  108. package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -83
  109. package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -85
  110. package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -94
  111. package/habilidades/swl-dashboard/SKILL.md +2 -2
  112. package/habilidades/tdd-workflow/recursos/gherkin-bdd.md +111 -111
  113. package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +1 -1
  114. package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +1 -1
  115. package/hooks/ciclo-evolucion-subagente.js +26 -26
  116. package/hooks/ciclo-evolucion.js +26 -26
  117. package/hooks/claudemd-bloat-detector.js +161 -161
  118. package/hooks/claudemd-duplicacion-detector.js +170 -170
  119. package/hooks/contexto-iteracion.js +144 -144
  120. package/hooks/guardrail-modelo.js +1 -1
  121. package/hooks/lib/agent-routing.js +107 -107
  122. package/hooks/lib/auto-consolidator.js +335 -335
  123. package/hooks/lib/autonomia.js +208 -208
  124. package/hooks/lib/ciclo-evolucion.js +47 -47
  125. package/hooks/lib/deep-links.js +185 -185
  126. package/hooks/lib/error-classifier.js +308 -308
  127. package/hooks/lib/etapa-auto-evolucion.js +701 -701
  128. package/hooks/lib/etapa-metricas.js +388 -388
  129. package/hooks/lib/etapa-perfil-usuario.js +376 -376
  130. package/hooks/lib/loop-telemetry.js +321 -321
  131. package/hooks/lib/merkle-audit.js +96 -96
  132. package/hooks/lib/model-router.js +2 -2
  133. package/hooks/lib/propose-step.js +358 -358
  134. package/hooks/lib/provenance-tracker.js +191 -191
  135. package/hooks/lib/rate-limit-tracker.js +253 -253
  136. package/hooks/lib/resource-quota.js +122 -122
  137. package/hooks/lib/retry-jitter.js +165 -165
  138. package/hooks/lib/security-net.js +201 -201
  139. package/hooks/lib/skill-auditor.js +588 -588
  140. package/hooks/lib/sync-status.js +228 -228
  141. package/hooks/lib/taint-tracker.js +107 -107
  142. package/hooks/lib/text-similarity.js +241 -241
  143. package/hooks/lib/token-estimator.js +1 -0
  144. package/hooks/lib/toon-compressor.js +245 -245
  145. package/hooks/lib/usage-model.js +1 -1
  146. package/hooks/linea-estado.js +2 -0
  147. package/hooks/registro-turnos.js +209 -209
  148. package/hooks/session-briefing.js +98 -98
  149. package/hooks/spec-gate.js +211 -211
  150. package/hooks/sugerir-regenerar-inventario.js +170 -170
  151. package/hooks/tdd-gate.js +241 -241
  152. package/hooks/telemetria-skill-routing.js +100 -100
  153. package/hooks/validar-formato-post-subagente.js +140 -140
  154. package/hooks/validar-intent-spec.js +242 -242
  155. package/hooks/validar-memoria-hook.js +218 -218
  156. package/hooks/validar-planning-paths.js +134 -134
  157. package/instintos/autonomia.yaml +27 -27
  158. package/instintos/prompt-appendices.yaml +57 -57
  159. package/llms.txt +29 -29
  160. package/manifiestos/agent-output-schemas.json +57 -57
  161. package/manifiestos/canonical-hashes.json +2291 -1964
  162. package/manifiestos/planning-paths.json +44 -44
  163. package/manifiestos/skills-lock.json +1282 -1282
  164. package/package.json +1 -1
  165. package/plantillas/auditor-veto-template.md +105 -105
  166. package/plantillas/github-workflows/README.md +47 -47
  167. package/plantillas/github-workflows/release-please.yml +44 -44
  168. package/plantillas/github-workflows/swl-ci.yml +107 -107
  169. package/plantillas/github-workflows/swl-security.yml +51 -51
  170. package/plugin.json +1 -1
  171. package/reglas/accesibilidad.md +10 -10
  172. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  173. package/reglas/api-diseno.md +9 -9
  174. package/reglas/arreglar-al-detectar.md +240 -240
  175. package/reglas/auditorias-documentales-estructurales.md +7 -7
  176. package/reglas/cloud-infra.md +8 -8
  177. package/reglas/consultar-vault-primero.md +195 -195
  178. package/reglas/debatir-antes-de-aceptar.md +158 -158
  179. package/reglas/fragmentos-compartidos.md +183 -183
  180. package/reglas/hooks.md +6 -6
  181. package/reglas/intent-engineering.md +218 -218
  182. package/reglas/markitdown.md +8 -8
  183. package/reglas/monitor-ci.md +309 -309
  184. package/reglas/patrones.md +6 -6
  185. package/reglas/sesiones-paralelas.md +180 -180
  186. package/reglas/sin-duplicacion-reglas-globales.md +182 -182
  187. package/reglas/skills-estandar.md +6 -6
  188. package/reglas/testing.md +7 -7
  189. package/reglas/tests-cleanup.md +224 -224
  190. package/reglas/usar-code-review-graph.md +155 -155
  191. package/reglas/usar-context7.md +226 -226
  192. package/reglas/verificar-citas-normativas.md +548 -548
  193. package/schemas/agent-frontmatter.schema.json +3 -3
  194. package/schemas/agent-message.schema.json +73 -73
  195. package/schemas/agent-output-implementacion.schema.json +114 -114
  196. package/schemas/agent-output-planificacion.schema.json +150 -150
  197. package/schemas/agent-output-review.schema.json +98 -98
  198. package/schemas/diary-entry.schema.json +112 -112
  199. package/schemas/hook-profiles.schema.json +54 -54
  200. package/schemas/hooks-config.schema.json +89 -89
  201. package/schemas/modulos.schema.json +38 -38
  202. package/schemas/perfiles.schema.json +36 -36
  203. package/schemas/plugin.schema.json +77 -77
  204. package/schemas/skill-evals.schema.json +119 -119
  205. package/schemas/skill-frontmatter.schema.json +245 -245
  206. package/scripts/audit-tools/audit-history.js +330 -330
  207. package/scripts/audit-tools/bundle-tracker.js +290 -290
  208. package/scripts/audit-tools/canary-monitor.js +352 -352
  209. package/scripts/audit-tools/code-profiler.js +605 -605
  210. package/scripts/audit-tools/dep-doctor.js +320 -320
  211. package/scripts/audit-tools/env-validator.js +206 -206
  212. package/scripts/audit-tools/lib/fs-walk.js +48 -48
  213. package/scripts/audit-tools/lib/output.js +23 -23
  214. package/scripts/audit-tools/migration-checker.js +392 -392
  215. package/scripts/audit-tools/pentest-scanner.js +1436 -1436
  216. package/scripts/benchmark-memoria.js +167 -167
  217. package/scripts/cli/aprobar-plan.js +73 -73
  218. package/scripts/cli/briefing.js +23 -23
  219. package/scripts/cli/ciclo-evolucion.js +26 -26
  220. package/scripts/cli/configurar-ci.js +40 -40
  221. package/scripts/cli/derivar-feature-list.js +25 -25
  222. package/scripts/cli/detectar-host.js +27 -27
  223. package/scripts/cli/diary-entry.js +69 -69
  224. package/scripts/cli/execution-state.js +18 -18
  225. package/scripts/cli/gateway-notify.js +41 -41
  226. package/scripts/cli/liberar-fase.js +42 -42
  227. package/scripts/cli/loop-telemetry.js +125 -125
  228. package/scripts/cli/mark-evolved.js +56 -56
  229. package/scripts/cli/metricas-dora.js +26 -26
  230. package/scripts/cli/near-duplicate.js +55 -55
  231. package/scripts/cli/notificaciones.js +123 -123
  232. package/scripts/cli/propose-step.js +29 -29
  233. package/scripts/cli/schedule-parse.js +19 -19
  234. package/scripts/cli/sugerir-modelo.js +20 -20
  235. package/scripts/cli/verificar-plan.js +36 -36
  236. package/scripts/cli/verificar-trazabilidad.js +35 -35
  237. package/scripts/configurar-branch-protection.js +418 -418
  238. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  239. package/scripts/field-report.js +199 -199
  240. package/scripts/generar-checklists-consolidados.js +273 -273
  241. package/scripts/generar-matriz-lenguajes.js +271 -271
  242. package/scripts/lib/artefactos-python.js +43 -43
  243. package/scripts/lib/auditar-invocaciones-comandos.js +104 -104
  244. package/scripts/lib/benchmark-metrics.js +160 -160
  245. package/scripts/lib/budget-enforcer.js +252 -252
  246. package/scripts/lib/ci-reader.js +193 -193
  247. package/scripts/lib/claude-sessions.js +1 -0
  248. package/scripts/lib/configurar-ci.js +380 -380
  249. package/scripts/lib/contadores-inventario.js +217 -217
  250. package/scripts/lib/detectar-host-swl.js +175 -175
  251. package/scripts/lib/detectar-stack-detallado.js +307 -307
  252. package/scripts/lib/detector-autoduplicacion-intra-archivo.js +234 -234
  253. package/scripts/lib/detector-reglas-duplicadas.js +220 -220
  254. package/scripts/lib/diary-entry.js +234 -234
  255. package/scripts/lib/eval-metrics-store.js +218 -218
  256. package/scripts/lib/eval-quality.js +171 -171
  257. package/scripts/lib/eval-schemas.js +144 -144
  258. package/scripts/lib/eval-self-correct.js +106 -106
  259. package/scripts/lib/eval-validator.js +185 -185
  260. package/scripts/lib/evidencia-release.js +322 -322
  261. package/scripts/lib/expandir-targets.js +71 -71
  262. package/scripts/lib/gate-hooks-requires.js +249 -249
  263. package/scripts/lib/gate-licencias.js +212 -212
  264. package/scripts/lib/git-metricas.js +257 -257
  265. package/scripts/lib/jaccard-similarity.js +98 -98
  266. package/scripts/lib/longmemeval-runner.js +125 -125
  267. package/scripts/lib/metricas-dora.js +204 -204
  268. package/scripts/lib/npm-version.js +261 -261
  269. package/scripts/lib/paquetes-conocidos.js +50 -50
  270. package/scripts/lib/plan-lock.js +275 -275
  271. package/scripts/lib/pr-analyzer.js +399 -399
  272. package/scripts/lib/prompt-builder.js +264 -264
  273. package/scripts/lib/reglas-globales-conocidas.json +180 -180
  274. package/scripts/lib/resolver-plan-fase.js +37 -37
  275. package/scripts/lib/rrf-fusion.js +175 -175
  276. package/scripts/lib/schema-version.js +164 -164
  277. package/scripts/lib/scoring-instintos.js +277 -277
  278. package/scripts/lib/semantic-search.js +252 -252
  279. package/scripts/lib/toml-merge.js +204 -204
  280. package/scripts/lib/tool-cost-analyzer.js +1 -0
  281. package/scripts/limpiar-artefactos-python.js +131 -131
  282. package/scripts/mcp-server/auth.js +105 -105
  283. package/scripts/mcp-server/cache.js +106 -106
  284. package/scripts/migrar-csv-a-array.js +168 -168
  285. package/scripts/migrar-fase-dominio.js +200 -200
  286. package/scripts/publicar.js +497 -497
  287. package/scripts/run-eval.js +141 -141
  288. package/scripts/tui/componentes/selector-multi.js +189 -189
  289. package/scripts/tui/componentes/selector-unico.js +158 -158
  290. package/scripts/tui/ejecutores.js +375 -375
  291. package/scripts/tui/index.js +162 -162
  292. package/scripts/tui/lib/colores.js +129 -129
  293. package/scripts/tui/lib/render.js +264 -264
  294. package/scripts/tui/lib/teclas.js +113 -113
  295. package/scripts/tui/pantallas/inspect.js +173 -173
  296. package/scripts/tui/pantallas/install-wizard.js +334 -334
  297. package/scripts/tui/pantallas/menu-principal.js +52 -52
  298. package/scripts/tui/pantallas/progreso.js +274 -274
  299. package/scripts/tui/pantallas/resumen.js +132 -132
  300. package/scripts/tui/pantallas/uninstall-wizard.js +208 -208
  301. package/scripts/tui/pantallas/update-wizard.js +232 -232
  302. package/scripts/tui/pantallas/welcome.js +187 -187
  303. package/scripts/validar-userland-vacio.js +110 -110
@@ -1,105 +1,105 @@
1
- # Personas para análisis predictivo y debate adversarial
2
-
3
- Definiciones operativas de las personas que consume `proceso-debate-adversarial`
4
- (modo personas) y `/swl:predecir`. Cada persona se invoca EN FRÍO (COLD START):
5
- recibe la descripción del cambio + conocimiento del codebase + sus criterios —
6
- nunca el análisis de otra persona.
7
-
8
- Formato de hallazgo obligatorio por persona:
9
-
10
- ```markdown
11
- | # | Hallazgo | Severidad | Confianza (0-100%) | archivo:línea | Recomendación |
12
- ```
13
-
14
- Presupuesto: `max_hallazgos_por_persona = presupuesto_total / num_personas`
15
- (default presupuesto 40 → 8 por persona). Obliga a priorizar, no a enumerar.
16
-
17
- ---
18
-
19
- ## Set default (análisis predictivo estándar)
20
-
21
- ### 1. Arquitecto de Software
22
- - **Enfoque**: diseño sistémico, fronteras de componentes, flujo de datos, escalabilidad.
23
- - **Preguntas guía**: ¿Escala? ¿Los límites entre módulos son limpios? ¿El acoplamiento está minimizado? ¿Sobrevive un crecimiento 10x?
24
- - **Evidencia exigida**: archivo:línea, grafo de dependencias, métricas de acoplamiento.
25
- - **Red flags**: god classes, dependencias circulares, abstracciones con fugas, estado mutable compartido.
26
-
27
- ### 2. Analista de Seguridad
28
- - **Enfoque**: superficies de ataque, autenticación/autorización, protección de datos, vectores de inyección.
29
- - **Preguntas guía**: ¿Es explotable? ¿Los trust boundaries se aplican? ¿El input se sanitiza? ¿Los secretos están protegidos?
30
- - **Evidencia exigida**: archivo:línea + escenario de ataque concreto (no especulación teórica).
31
- - **Red flags**: SQL crudo, authz faltante, secretos hardcodeados, input sin sanitizar.
32
-
33
- ### 3. Ingeniero de Rendimiento
34
- - **Enfoque**: latencia, throughput, uso de recursos, complejidad algorítmica.
35
- - **Preguntas guía**: ¿Es suficientemente rápido? ¿Cuál es el peor caso? ¿Dónde están los cuellos de botella? ¿El caching es efectivo?
36
- - **Evidencia exigida**: archivo:línea, análisis de complejidad, estimaciones de recursos.
37
- - **Red flags**: queries N+1, loops sin cota, índices faltantes, I/O síncrono en hot paths.
38
-
39
- ### 4. Ingeniero de Confiabilidad
40
- - **Enfoque**: manejo de errores, modos de falla, observabilidad, recuperación.
41
- - **Preguntas guía**: ¿Qué pasa cuando falla? ¿Podemos detectarlo? ¿Hay camino de recuperación? ¿Es observable?
42
- - **Evidencia exigida**: archivo:línea, escenarios de falla, rutas de recuperación.
43
- - **Red flags**: errores tragados, retries faltantes, sin circuit breakers, fallas silenciosas.
44
-
45
- ### 5. Abogado del Diablo
46
- - **Enfoque**: asunciones, casos límite, complejidad oculta, mantenibilidad.
47
- - **Preguntas guía**: ¿Qué asunciones son falsas? ¿Qué rompe esto? ¿Está sobre-ingenierizado?
48
- - **Evidencia exigida**: contraejemplos concretos, escenarios de caso límite.
49
- - **Red flags**: diseño solo-happy-path, asunciones sin probar, complejidad sin justificación.
50
-
51
- ---
52
-
53
- ## Set adversarial (`--adversarial`)
54
-
55
- Reemplaza al set default cuando el objetivo es estresar el cambio como atacante,
56
- no como revisor.
57
-
58
- ### 1. El Rompedor
59
- Intenta crashear o corromper el sistema. Busca: estados imposibles, inputs
60
- malformados, condiciones de carrera, límites de recursos.
61
-
62
- ### 2. El Tramposo
63
- Busca formas de saltarse reglas y abusar de features. Busca: validaciones solo
64
- en frontend, límites evadibles, flujos alternos sin guards.
65
-
66
- ### 3. El Escalador
67
- Imagina carga 1000x y encuentra qué se rompe primero. Busca: queries sin
68
- paginación, locks globales, colas sin backpressure, costos lineales ocultos.
69
-
70
- ### 4. El Novato
71
- Usa mal cada API esperando que funcione. Busca: defaults peligrosos, errores
72
- crípticos, documentación que asume contexto, footguns de la interfaz.
73
-
74
- ### 5. El Insider Malicioso
75
- Tiene credenciales válidas y quiere exfiltrar. Busca: permisos excesivos,
76
- auditoría faltante, datos sensibles accesibles lateralmente.
77
-
78
- ---
79
-
80
- ## Set red-team de seguridad (para `checklist-seguridad` modo cobertura)
81
-
82
- Rotación de mentalidades para auditoría STRIDE/OWASP iterativa:
83
-
84
- | Persona | Foco | Mentalidad |
85
- |---------|------|-----------|
86
- | Adversario de Seguridad | auth, crypto, inyección | atacante externo con browser + proxy de intercepción |
87
- | Atacante de Supply Chain | dependencias, CI/CD, build pipeline | comprometer vía código de terceros |
88
- | Amenaza Interna | acceso a datos, abuso de privilegios, exfiltración | usuario autenticado con intención maliciosa |
89
- | Atacante de Infraestructura | red, configuración cloud, contenedores | apuntar a misconfigurations de infra |
90
-
91
- ---
92
-
93
- ## Protocolo de síntesis (tras el análisis individual)
94
-
95
- 1. **Deduplicar**: mismo archivo:línea + mismo problema → fusionar, conservar la severidad más alta.
96
- 2. **Resolver conflictos**: si dos personas discrepan → registrar el disenso, no silenciarlo.
97
- 3. **Anti-herd check**: si TODAS las personas coinciden → el sintetizador DEBE producir ≥1 contraargumento.
98
- 4. **Rankear**: `severidad × confianza promedio × número de personas que coinciden`.
99
-
100
- Output del sintetizador:
101
-
102
- ```markdown
103
- ### Consenso — [N hallazgos tras dedup]
104
- | # | Hallazgo | Severidad | Acuerdo | Personas origen | Acción |
105
- ```
1
+ # Personas para análisis predictivo y debate adversarial
2
+
3
+ Definiciones operativas de las personas que consume `proceso-debate-adversarial`
4
+ (modo personas) y `/swl:predecir`. Cada persona se invoca EN FRÍO (COLD START):
5
+ recibe la descripción del cambio + conocimiento del codebase + sus criterios —
6
+ nunca el análisis de otra persona.
7
+
8
+ Formato de hallazgo obligatorio por persona:
9
+
10
+ ```markdown
11
+ | # | Hallazgo | Severidad | Confianza (0-100%) | archivo:línea | Recomendación |
12
+ ```
13
+
14
+ Presupuesto: `max_hallazgos_por_persona = presupuesto_total / num_personas`
15
+ (default presupuesto 40 → 8 por persona). Obliga a priorizar, no a enumerar.
16
+
17
+ ---
18
+
19
+ ## Set default (análisis predictivo estándar)
20
+
21
+ ### 1. Arquitecto de Software
22
+ - **Enfoque**: diseño sistémico, fronteras de componentes, flujo de datos, escalabilidad.
23
+ - **Preguntas guía**: ¿Escala? ¿Los límites entre módulos son limpios? ¿El acoplamiento está minimizado? ¿Sobrevive un crecimiento 10x?
24
+ - **Evidencia exigida**: archivo:línea, grafo de dependencias, métricas de acoplamiento.
25
+ - **Red flags**: god classes, dependencias circulares, abstracciones con fugas, estado mutable compartido.
26
+
27
+ ### 2. Analista de Seguridad
28
+ - **Enfoque**: superficies de ataque, autenticación/autorización, protección de datos, vectores de inyección.
29
+ - **Preguntas guía**: ¿Es explotable? ¿Los trust boundaries se aplican? ¿El input se sanitiza? ¿Los secretos están protegidos?
30
+ - **Evidencia exigida**: archivo:línea + escenario de ataque concreto (no especulación teórica).
31
+ - **Red flags**: SQL crudo, authz faltante, secretos hardcodeados, input sin sanitizar.
32
+
33
+ ### 3. Ingeniero de Rendimiento
34
+ - **Enfoque**: latencia, throughput, uso de recursos, complejidad algorítmica.
35
+ - **Preguntas guía**: ¿Es suficientemente rápido? ¿Cuál es el peor caso? ¿Dónde están los cuellos de botella? ¿El caching es efectivo?
36
+ - **Evidencia exigida**: archivo:línea, análisis de complejidad, estimaciones de recursos.
37
+ - **Red flags**: queries N+1, loops sin cota, índices faltantes, I/O síncrono en hot paths.
38
+
39
+ ### 4. Ingeniero de Confiabilidad
40
+ - **Enfoque**: manejo de errores, modos de falla, observabilidad, recuperación.
41
+ - **Preguntas guía**: ¿Qué pasa cuando falla? ¿Podemos detectarlo? ¿Hay camino de recuperación? ¿Es observable?
42
+ - **Evidencia exigida**: archivo:línea, escenarios de falla, rutas de recuperación.
43
+ - **Red flags**: errores tragados, retries faltantes, sin circuit breakers, fallas silenciosas.
44
+
45
+ ### 5. Abogado del Diablo
46
+ - **Enfoque**: asunciones, casos límite, complejidad oculta, mantenibilidad.
47
+ - **Preguntas guía**: ¿Qué asunciones son falsas? ¿Qué rompe esto? ¿Está sobre-ingenierizado?
48
+ - **Evidencia exigida**: contraejemplos concretos, escenarios de caso límite.
49
+ - **Red flags**: diseño solo-happy-path, asunciones sin probar, complejidad sin justificación.
50
+
51
+ ---
52
+
53
+ ## Set adversarial (`--adversarial`)
54
+
55
+ Reemplaza al set default cuando el objetivo es estresar el cambio como atacante,
56
+ no como revisor.
57
+
58
+ ### 1. El Rompedor
59
+ Intenta crashear o corromper el sistema. Busca: estados imposibles, inputs
60
+ malformados, condiciones de carrera, límites de recursos.
61
+
62
+ ### 2. El Tramposo
63
+ Busca formas de saltarse reglas y abusar de features. Busca: validaciones solo
64
+ en frontend, límites evadibles, flujos alternos sin guards.
65
+
66
+ ### 3. El Escalador
67
+ Imagina carga 1000x y encuentra qué se rompe primero. Busca: queries sin
68
+ paginación, locks globales, colas sin backpressure, costos lineales ocultos.
69
+
70
+ ### 4. El Novato
71
+ Usa mal cada API esperando que funcione. Busca: defaults peligrosos, errores
72
+ crípticos, documentación que asume contexto, footguns de la interfaz.
73
+
74
+ ### 5. El Insider Malicioso
75
+ Tiene credenciales válidas y quiere exfiltrar. Busca: permisos excesivos,
76
+ auditoría faltante, datos sensibles accesibles lateralmente.
77
+
78
+ ---
79
+
80
+ ## Set red-team de seguridad (para `checklist-seguridad` modo cobertura)
81
+
82
+ Rotación de mentalidades para auditoría STRIDE/OWASP iterativa:
83
+
84
+ | Persona | Foco | Mentalidad |
85
+ |---------|------|-----------|
86
+ | Adversario de Seguridad | auth, crypto, inyección | atacante externo con browser + proxy de intercepción |
87
+ | Atacante de Supply Chain | dependencias, CI/CD, build pipeline | comprometer vía código de terceros |
88
+ | Amenaza Interna | acceso a datos, abuso de privilegios, exfiltración | usuario autenticado con intención maliciosa |
89
+ | Atacante de Infraestructura | red, configuración cloud, contenedores | apuntar a misconfigurations de infra |
90
+
91
+ ---
92
+
93
+ ## Protocolo de síntesis (tras el análisis individual)
94
+
95
+ 1. **Deduplicar**: mismo archivo:línea + mismo problema → fusionar, conservar la severidad más alta.
96
+ 2. **Resolver conflictos**: si dos personas discrepan → registrar el disenso, no silenciarlo.
97
+ 3. **Anti-herd check**: si TODAS las personas coinciden → el sintetizador DEBE producir ≥1 contraargumento.
98
+ 4. **Rankear**: `severidad × confianza promedio × número de personas que coinciden`.
99
+
100
+ Output del sintetizador:
101
+
102
+ ```markdown
103
+ ### Consenso — [N hallazgos tras dedup]
104
+ | # | Hallazgo | Severidad | Acuerdo | Personas origen | Acción |
105
+ ```
@@ -1,157 +1,157 @@
1
- ---
2
- name: proceso-discovery-machote
3
- description: >
4
- Patrón de discovery para modelar entidades regulatorias (papeles de trabajo,
5
- cédulas, oficios, informes, expedientes, actas, dictámenes). Antes de modelar
6
- desde el Artículo legal, pedir al usuario el machote oficial real (template
7
- institucional). El Art. define el mínimo normativo; el machote revela el
8
- contrato institucional real con prácticas no codificadas pero exigidas.
9
- Cargar al iniciar la modelación de cualquier entidad nueva que represente
10
- un documento normativo emitido por una institución regulatoria (OIC, INE,
11
- SAT, etc.), durante /swl:discutir-fase de un módulo regulatorio, o cuando
12
- el usuario rechaza un primer diseño por "faltan campos del documento real".
13
- version: "1.0.0"
14
- herramientasPermitidas: [Read, Grep, Glob]
15
- exclusiones:
16
- - "No cargar para entidades NO regulatorias (productos, usuarios, sesiones, eventos de log) — el machote no aplica a entidades de aplicación generales."
17
- - "No cargar cuando el modelo de la entidad ya está estabilizado y solo se va a agregar 1-2 campos — el discovery completo es overhead innecesario para ajustes pequeños."
18
- - "No cargar para refactor de entidad existente que ya tiene 6+ meses en producción — el machote ya se consolidó implícitamente en el modelo; cualquier diferencia es decisión de evolución, no de discovery."
19
- - "No cargar para CRUD administrativo simple (catálogos, configuraciones) — esos no tienen contrato institucional rico; cargar `discutir-fase` regular."
20
- evolvable: true
21
- ---
22
-
23
- # Proceso Discovery Machote
24
-
25
- Patrón obligatorio antes de modelar entidades regulatorias.
26
-
27
- ## Cuándo NO cargar
28
-
29
- - La entidad NO es regulatoria (un producto de catálogo, una sesión de usuario, un evento de log).
30
- - El modelo ya está estabilizado en producción y solo se agregan 1-2 campos.
31
- - Es refactor de entidad consolidada (≥6 meses prod) — cargar reglas de refactor, no de discovery.
32
- - Es CRUD administrativo simple sin contrato institucional rico.
33
-
34
- ## El gap conceptual
35
-
36
- **El Artículo legal define el mínimo normativo. El machote oficial revela el contrato institucional real.**
37
-
38
- Caso real SIGAF ADR-081 IPHI (2026-05-15). El Informe de Presunta Hipótesis de Irregularidad (IPHI) se modeló inicialmente desde Art. 44 DBC_FISC_OIC, que enumera 10 fracciones (I-X) de contenido obligatorio:
39
-
40
- > Art. 44. El informe contendrá:
41
- > I. Antecedentes
42
- > II. Marco normativo
43
- > III. Hechos
44
- > IV. Análisis
45
- > V. Presunto daño patrimonial
46
- > VI. Cuantificación del daño
47
- > VII. Sujetos involucrados
48
- > VIII. Pruebas documentales
49
- > IX. Conclusiones
50
- > X. Auditores que intervinieron
51
-
52
- Modelo Pydantic + tabla SQL creados con esas 10 secciones. Commit inicial Fase 1.
53
-
54
- Tras Fase 1, el usuario proporcionó el machote oficial real `OIC-DATIC-02-ESP-2025-IPHI-01.docx`. Reveló **7 extensiones institucionales NO presentes en Art. 44**:
55
-
56
- | # | Extensión del machote | NO está en Art. 44 |
57
- |---|---|---|
58
- | 1 | Distinción `presunto_dano_patrimonial` (directo) vs `perjuicio_total_estimado` (agregado: daño + depreciación + costo oportunidad) | Art. 44 fracción V/VI no distinguen |
59
- | 2 | Observaciones origen N:M con `hallazgo_identificador` (tabla puente `iphi_observacion_origen`) | Art. 44 no define la relación |
60
- | 3 | `procedimientos_contratacion_relacionados` JSONB (lista de LP-INE asociadas) | No aparece en el Art. |
61
- | 4 | `normas_infringidas` JSONB estructurado `[{norma, articulo, contenido}]` | Art. 44 dice "marco normativo" sin estructura |
62
- | 5 | `desglose_dano_patrimonial` JSONB (auditabilidad del cálculo) | No exigido por Art. |
63
- | 6 | Estructura específica de `antecedentes` JSONB con 6 sub-secciones | Art. 44 dice "antecedentes" sin desglose |
64
- | 7 | Roles claros de `auditores_integrantes`: Elaboró/Revisó/Supervisó/Autorizó mapeando a flujo VBO de 3 niveles | Art. 44 dice "auditores que intervinieron" sin roles |
65
-
66
- Refactor de Fase 1 = ~600 LOC de cambios + 1 tabla puente nueva + modelo Pydantic re-estructurado. Si el machote hubiera estado disponible al inicio, ese refactor no existiría.
67
-
68
- ## El patrón
69
-
70
- ### Paso 1: identificar si la entidad es regulatoria
71
-
72
- Una entidad es regulatoria cuando representa un **documento normativo emitido por una institución**:
73
-
74
- - Papel de trabajo (de auditoría).
75
- - Cédula (preliminar, definitiva, observación derivada).
76
- - Oficio (de investigación, de notificación, de respuesta).
77
- - Informe (de hipótesis, de irregularidad, de auditoría).
78
- - Acta (de inicio, de hechos, de cierre).
79
- - Dictamen.
80
- - Expediente (con composición fija de documentos).
81
- - Resolución.
82
-
83
- NO es regulatoria:
84
- - Producto de catálogo, usuario, sesión, configuración.
85
- - Evento de log o auditoría técnica.
86
- - Entidad transaccional puramente operacional (pago, factura interna).
87
-
88
- ### Paso 2: durante /swl:discutir-fase, preguntar explícitamente
89
-
90
- Antes de modelar la entidad, plantear al usuario las 3 preguntas:
91
-
92
- 1. **¿Existe un machote oficial real del documento?** (formato Word/PDF emitido por la institución, no template generado por el equipo).
93
- 2. **¿Existe un Artículo legal o Reglamento que defina el contenido obligatorio?** (cita exacta del Art.).
94
- 3. **Si solo hay Art., ¿hay práctica institucional documentada (manuales operativos, guías, ejemplos previos)?**
95
-
96
- Estados posibles del discovery:
97
-
98
- | Machote | Art. legal | Acción |
99
- |---|---|---|
100
- | ✅ Disponible | ✅ Disponible | Modelar desde machote + verificar que cubre todos los puntos del Art. (el Art. es el mínimo, el machote es el contrato real). |
101
- | ✅ Disponible | ❌ No disponible | Modelar desde machote. Marcar campos como "exigidos por práctica institucional, sin base legal explícita". |
102
- | ❌ No disponible | ✅ Disponible | Modelar desde Art. con marca explícita "modelo derivado solo del Art. — pendiente de validar contra machote oficial cuando el usuario lo proporcione". Crear DT formal `DT-MODELO-{ENTIDAD}-MACHOTE-PENDIENTE` con criterio de disparo: "modelo se considera estable cuando el machote oficial confirme o requiera ajustes". |
103
- | ❌ No disponible | ❌ No disponible | Escalar al usuario: "No hay fuente oficial ni machote — ¿la entidad existe como tal? ¿O debería modelarse como entidad de aplicación sin contrato institucional?". |
104
-
105
- ### Paso 3: extraer del machote, no del modelo mental
106
-
107
- Cuando el machote esté disponible, leerlo COMPLETO con `markitdown` (regla global `markitdown.md` para .docx/.pdf):
108
-
109
- ```bash
110
- markitdown OIC-DATIC-02-ESP-2025-IPHI-01.docx > /tmp/machote-iphi.md
111
- ```
112
-
113
- Auditar cada sección visible:
114
-
115
- - **Tablas estructuradas**: cada fila/columna → posible columna de la entidad o tabla puente.
116
- - **Campos repetidos con formato uniforme**: posible tipo enum o catálogo.
117
- - **Secciones con sub-secciones**: posible JSONB estructurado.
118
- - **Espacios para firma/aprobación**: posible flujo de estados (VBO, aprobación multi-nivel).
119
- - **Numeración de párrafos**: posible array o relación 1:N.
120
- - **Referencias a otros documentos**: posibles FKs a otras entidades.
121
-
122
- NO inferir campos del modelo mental — extraer literal del machote.
123
-
124
- ### Paso 4: registrar la divergencia Art. ↔ machote
125
-
126
- En el ADR de la entidad (o sección `### Modelo derivado` del schema):
127
-
128
- ```markdown
129
- ## Origen del modelo
130
-
131
- **Artículo legal**: DBC_FISC_OIC Art. 44 (10 fracciones I-X).
132
- **Machote oficial**: OIC-DATIC-02-ESP-2025-IPHI-01.docx (~25 páginas).
133
-
134
- **Extensiones del machote sobre el Art.**:
135
- 1. `perjuicio_total_estimado` distinto de `presunto_dano_patrimonial`.
136
- 2. Observaciones origen N:M con `hallazgo_identificador`.
137
- 3. `procedimientos_contratacion_relacionados` JSONB.
138
- 4. ...
139
-
140
- **Cobertura**: el modelo cubre 100% del Art. 44 + 7 extensiones del machote.
141
- **Divergencia**: cuando el Art. y el machote contradicen, prevalece el machote (es el contrato real de la institución).
142
- ```
143
-
144
- ## Anti-patrones
145
-
146
- - **Modelar desde solo el Art. legal sin pedir el machote** — el modelo cubre el mínimo legal pero pierde 30-50% del contenido institucional real. Refactor garantizado cuando aparezca el machote.
147
- - **Modelar desde un machote sin verificar contra el Art.** — riesgo de campos derivados de versiones obsoletas del documento. El Art. es la fuente de verdad legal; el machote puede tener campos "heredados" de versiones previas.
148
- - **Asumir que el machote está internalizado en el modelo del equipo** — el equipo del agente NO tiene el machote en su contexto entrenado. Pedirlo explícitamente al usuario; no inferir.
149
- - **Diferir el machote a "después del MVP"** — el refactor para incorporar el machote en una entidad regulatoria es 80% reescritura del modelo + cascada a schemas Pydantic + frontend forms. NO es post-MVP barato.
150
- - **Aceptar un machote en formato propietario sin convertirlo a markdown legible** — abrir el Word/PDF directamente lleva al modelo a olvidar campos. Convertir SIEMPRE con `markitdown` y auditar el markdown resultante.
151
-
152
- ## Gotchas / Errores comunes no obvios
153
-
154
- - **El machote tiene campos "sólo para impresión" que NO son datos de la entidad**: encabezados con logos, secciones de "Para uso oficial", footers. Esos NO van al modelo. Discriminar mientras se audita el markdown extraído.
155
- - **El machote tiene campos calculados o derivados que SE ALMACENAN para auditoría**: ej. `perjuicio_total_estimado` se calcula desde 3 sumandos pero se persiste explícitamente porque el documento legal lo cita como cifra. Almacenar como columna calculada con backfill o como dato denormalizado con trigger de recálculo.
156
- - **El machote evoluciona entre años fiscales** (`OIC-DATIC-02-ESP-2024-...` vs `OIC-DATIC-02-ESP-2025-...`): el modelo debe versionar el contrato. Agregar `machote_version: str` a la entidad para registrar contra qué versión se emitió cada documento. Migrar es costoso si no se versiona desde el inicio.
157
- - **El usuario puede proporcionar un machote "informal" que es solo un Word con texto libre**: discriminar entre machote oficial (emitido por la institución con código de documento, fecha de actualización, autoridad emisora) vs borrador interno del equipo. El borrador NO es contrato — usar Art. como base con DT formal.
1
+ ---
2
+ name: proceso-discovery-machote
3
+ description: >
4
+ Patrón de discovery para modelar entidades regulatorias (papeles de trabajo,
5
+ cédulas, oficios, informes, expedientes, actas, dictámenes). Antes de modelar
6
+ desde el Artículo legal, pedir al usuario el machote oficial real (template
7
+ institucional). El Art. define el mínimo normativo; el machote revela el
8
+ contrato institucional real con prácticas no codificadas pero exigidas.
9
+ Cargar al iniciar la modelación de cualquier entidad nueva que represente
10
+ un documento normativo emitido por una institución regulatoria (OIC, INE,
11
+ SAT, etc.), durante /swl:discutir-fase de un módulo regulatorio, o cuando
12
+ el usuario rechaza un primer diseño por "faltan campos del documento real".
13
+ version: "1.0.0"
14
+ herramientasPermitidas: [Read, Grep, Glob]
15
+ exclusiones:
16
+ - "No cargar para entidades NO regulatorias (productos, usuarios, sesiones, eventos de log) — el machote no aplica a entidades de aplicación generales."
17
+ - "No cargar cuando el modelo de la entidad ya está estabilizado y solo se va a agregar 1-2 campos — el discovery completo es overhead innecesario para ajustes pequeños."
18
+ - "No cargar para refactor de entidad existente que ya tiene 6+ meses en producción — el machote ya se consolidó implícitamente en el modelo; cualquier diferencia es decisión de evolución, no de discovery."
19
+ - "No cargar para CRUD administrativo simple (catálogos, configuraciones) — esos no tienen contrato institucional rico; cargar `discutir-fase` regular."
20
+ evolvable: true
21
+ ---
22
+
23
+ # Proceso Discovery Machote
24
+
25
+ Patrón obligatorio antes de modelar entidades regulatorias.
26
+
27
+ ## Cuándo NO cargar
28
+
29
+ - La entidad NO es regulatoria (un producto de catálogo, una sesión de usuario, un evento de log).
30
+ - El modelo ya está estabilizado en producción y solo se agregan 1-2 campos.
31
+ - Es refactor de entidad consolidada (≥6 meses prod) — cargar reglas de refactor, no de discovery.
32
+ - Es CRUD administrativo simple sin contrato institucional rico.
33
+
34
+ ## El gap conceptual
35
+
36
+ **El Artículo legal define el mínimo normativo. El machote oficial revela el contrato institucional real.**
37
+
38
+ Caso real SIGAF ADR-081 IPHI (2026-05-15). El Informe de Presunta Hipótesis de Irregularidad (IPHI) se modeló inicialmente desde Art. 44 DBC_FISC_OIC, que enumera 10 fracciones (I-X) de contenido obligatorio:
39
+
40
+ > Art. 44. El informe contendrá:
41
+ > I. Antecedentes
42
+ > II. Marco normativo
43
+ > III. Hechos
44
+ > IV. Análisis
45
+ > V. Presunto daño patrimonial
46
+ > VI. Cuantificación del daño
47
+ > VII. Sujetos involucrados
48
+ > VIII. Pruebas documentales
49
+ > IX. Conclusiones
50
+ > X. Auditores que intervinieron
51
+
52
+ Modelo Pydantic + tabla SQL creados con esas 10 secciones. Commit inicial Fase 1.
53
+
54
+ Tras Fase 1, el usuario proporcionó el machote oficial real `OIC-DATIC-02-ESP-2025-IPHI-01.docx`. Reveló **7 extensiones institucionales NO presentes en Art. 44**:
55
+
56
+ | # | Extensión del machote | NO está en Art. 44 |
57
+ |---|---|---|
58
+ | 1 | Distinción `presunto_dano_patrimonial` (directo) vs `perjuicio_total_estimado` (agregado: daño + depreciación + costo oportunidad) | Art. 44 fracción V/VI no distinguen |
59
+ | 2 | Observaciones origen N:M con `hallazgo_identificador` (tabla puente `iphi_observacion_origen`) | Art. 44 no define la relación |
60
+ | 3 | `procedimientos_contratacion_relacionados` JSONB (lista de LP-INE asociadas) | No aparece en el Art. |
61
+ | 4 | `normas_infringidas` JSONB estructurado `[{norma, articulo, contenido}]` | Art. 44 dice "marco normativo" sin estructura |
62
+ | 5 | `desglose_dano_patrimonial` JSONB (auditabilidad del cálculo) | No exigido por Art. |
63
+ | 6 | Estructura específica de `antecedentes` JSONB con 6 sub-secciones | Art. 44 dice "antecedentes" sin desglose |
64
+ | 7 | Roles claros de `auditores_integrantes`: Elaboró/Revisó/Supervisó/Autorizó mapeando a flujo VBO de 3 niveles | Art. 44 dice "auditores que intervinieron" sin roles |
65
+
66
+ Refactor de Fase 1 = ~600 LOC de cambios + 1 tabla puente nueva + modelo Pydantic re-estructurado. Si el machote hubiera estado disponible al inicio, ese refactor no existiría.
67
+
68
+ ## El patrón
69
+
70
+ ### Paso 1: identificar si la entidad es regulatoria
71
+
72
+ Una entidad es regulatoria cuando representa un **documento normativo emitido por una institución**:
73
+
74
+ - Papel de trabajo (de auditoría).
75
+ - Cédula (preliminar, definitiva, observación derivada).
76
+ - Oficio (de investigación, de notificación, de respuesta).
77
+ - Informe (de hipótesis, de irregularidad, de auditoría).
78
+ - Acta (de inicio, de hechos, de cierre).
79
+ - Dictamen.
80
+ - Expediente (con composición fija de documentos).
81
+ - Resolución.
82
+
83
+ NO es regulatoria:
84
+ - Producto de catálogo, usuario, sesión, configuración.
85
+ - Evento de log o auditoría técnica.
86
+ - Entidad transaccional puramente operacional (pago, factura interna).
87
+
88
+ ### Paso 2: durante /swl:discutir-fase, preguntar explícitamente
89
+
90
+ Antes de modelar la entidad, plantear al usuario las 3 preguntas:
91
+
92
+ 1. **¿Existe un machote oficial real del documento?** (formato Word/PDF emitido por la institución, no template generado por el equipo).
93
+ 2. **¿Existe un Artículo legal o Reglamento que defina el contenido obligatorio?** (cita exacta del Art.).
94
+ 3. **Si solo hay Art., ¿hay práctica institucional documentada (manuales operativos, guías, ejemplos previos)?**
95
+
96
+ Estados posibles del discovery:
97
+
98
+ | Machote | Art. legal | Acción |
99
+ |---|---|---|
100
+ | ✅ Disponible | ✅ Disponible | Modelar desde machote + verificar que cubre todos los puntos del Art. (el Art. es el mínimo, el machote es el contrato real). |
101
+ | ✅ Disponible | ❌ No disponible | Modelar desde machote. Marcar campos como "exigidos por práctica institucional, sin base legal explícita". |
102
+ | ❌ No disponible | ✅ Disponible | Modelar desde Art. con marca explícita "modelo derivado solo del Art. — pendiente de validar contra machote oficial cuando el usuario lo proporcione". Crear DT formal `DT-MODELO-{ENTIDAD}-MACHOTE-PENDIENTE` con criterio de disparo: "modelo se considera estable cuando el machote oficial confirme o requiera ajustes". |
103
+ | ❌ No disponible | ❌ No disponible | Escalar al usuario: "No hay fuente oficial ni machote — ¿la entidad existe como tal? ¿O debería modelarse como entidad de aplicación sin contrato institucional?". |
104
+
105
+ ### Paso 3: extraer del machote, no del modelo mental
106
+
107
+ Cuando el machote esté disponible, leerlo COMPLETO con `markitdown` (regla global `markitdown.md` para .docx/.pdf):
108
+
109
+ ```bash
110
+ markitdown OIC-DATIC-02-ESP-2025-IPHI-01.docx > /tmp/machote-iphi.md
111
+ ```
112
+
113
+ Auditar cada sección visible:
114
+
115
+ - **Tablas estructuradas**: cada fila/columna → posible columna de la entidad o tabla puente.
116
+ - **Campos repetidos con formato uniforme**: posible tipo enum o catálogo.
117
+ - **Secciones con sub-secciones**: posible JSONB estructurado.
118
+ - **Espacios para firma/aprobación**: posible flujo de estados (VBO, aprobación multi-nivel).
119
+ - **Numeración de párrafos**: posible array o relación 1:N.
120
+ - **Referencias a otros documentos**: posibles FKs a otras entidades.
121
+
122
+ NO inferir campos del modelo mental — extraer literal del machote.
123
+
124
+ ### Paso 4: registrar la divergencia Art. ↔ machote
125
+
126
+ En el ADR de la entidad (o sección `### Modelo derivado` del schema):
127
+
128
+ ```markdown
129
+ ## Origen del modelo
130
+
131
+ **Artículo legal**: DBC_FISC_OIC Art. 44 (10 fracciones I-X).
132
+ **Machote oficial**: OIC-DATIC-02-ESP-2025-IPHI-01.docx (~25 páginas).
133
+
134
+ **Extensiones del machote sobre el Art.**:
135
+ 1. `perjuicio_total_estimado` distinto de `presunto_dano_patrimonial`.
136
+ 2. Observaciones origen N:M con `hallazgo_identificador`.
137
+ 3. `procedimientos_contratacion_relacionados` JSONB.
138
+ 4. ...
139
+
140
+ **Cobertura**: el modelo cubre 100% del Art. 44 + 7 extensiones del machote.
141
+ **Divergencia**: cuando el Art. y el machote contradicen, prevalece el machote (es el contrato real de la institución).
142
+ ```
143
+
144
+ ## Anti-patrones
145
+
146
+ - **Modelar desde solo el Art. legal sin pedir el machote** — el modelo cubre el mínimo legal pero pierde 30-50% del contenido institucional real. Refactor garantizado cuando aparezca el machote.
147
+ - **Modelar desde un machote sin verificar contra el Art.** — riesgo de campos derivados de versiones obsoletas del documento. El Art. es la fuente de verdad legal; el machote puede tener campos "heredados" de versiones previas.
148
+ - **Asumir que el machote está internalizado en el modelo del equipo** — el equipo del agente NO tiene el machote en su contexto entrenado. Pedirlo explícitamente al usuario; no inferir.
149
+ - **Diferir el machote a "después del MVP"** — el refactor para incorporar el machote en una entidad regulatoria es 80% reescritura del modelo + cascada a schemas Pydantic + frontend forms. NO es post-MVP barato.
150
+ - **Aceptar un machote en formato propietario sin convertirlo a markdown legible** — abrir el Word/PDF directamente lleva al modelo a olvidar campos. Convertir SIEMPRE con `markitdown` y auditar el markdown resultante.
151
+
152
+ ## Gotchas / Errores comunes no obvios
153
+
154
+ - **El machote tiene campos "sólo para impresión" que NO son datos de la entidad**: encabezados con logos, secciones de "Para uso oficial", footers. Esos NO van al modelo. Discriminar mientras se audita el markdown extraído.
155
+ - **El machote tiene campos calculados o derivados que SE ALMACENAN para auditoría**: ej. `perjuicio_total_estimado` se calcula desde 3 sumandos pero se persiste explícitamente porque el documento legal lo cita como cifra. Almacenar como columna calculada con backfill o como dato denormalizado con trigger de recálculo.
156
+ - **El machote evoluciona entre años fiscales** (`OIC-DATIC-02-ESP-2024-...` vs `OIC-DATIC-02-ESP-2025-...`): el modelo debe versionar el contrato. Agregar `machote_version: str` a la entidad para registrar contra qué versión se emitió cada documento. Migrar es costoso si no se versiona desde el inicio.
157
+ - **El usuario puede proporcionar un machote "informal" que es solo un Word con texto libre**: discriminar entre machote oficial (emitido por la institución con código de documento, fecha de actualización, autoridad emisora) vs borrador interno del equipo. El borrador NO es contrato — usar Art. como base con DT formal.