@saulwade/swl-ses 2.6.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/CLAUDE.md +209 -197
  2. package/README.md +647 -600
  3. package/agentes/accesibilidad-wcag-swl.md +690 -690
  4. package/agentes/arquitecto-swl.md +267 -267
  5. package/agentes/auto-evolucion-swl.md +932 -932
  6. package/agentes/backend-csharp-swl.md +420 -420
  7. package/agentes/backend-go-swl.md +390 -390
  8. package/agentes/backend-java-swl.md +281 -281
  9. package/agentes/backend-rust-swl.md +364 -364
  10. package/agentes/backend-workers-swl.md +482 -482
  11. package/agentes/cloud-infra-swl.md +509 -509
  12. package/agentes/consolidador-swl.md +541 -541
  13. package/agentes/depurador-swl.md +352 -352
  14. package/agentes/devops-ci-swl.md +400 -400
  15. package/agentes/disenador-ui-swl.md +569 -569
  16. package/agentes/documentador-swl.md +345 -345
  17. package/agentes/frontend-angular-swl.md +621 -621
  18. package/agentes/frontend-css-swl.md +716 -716
  19. package/agentes/frontend-react-swl.md +692 -692
  20. package/agentes/frontend-swl.md +496 -496
  21. package/agentes/frontend-tailwind-swl.md +826 -826
  22. package/agentes/investigador-swl.md +432 -432
  23. package/agentes/investigador-ux-swl.md +505 -505
  24. package/agentes/migrador-swl.md +442 -442
  25. package/agentes/mobile-android-swl.md +511 -511
  26. package/agentes/mobile-cross-swl.md +541 -541
  27. package/agentes/mobile-ios-swl.md +502 -502
  28. package/agentes/mobile-testing-swl.md +302 -302
  29. package/agentes/nemesis-auditor-swl.md +285 -285
  30. package/agentes/observabilidad-swl.md +438 -438
  31. package/agentes/pagos-swl.md +310 -310
  32. package/agentes/perfilador-usuario-swl.md +321 -321
  33. package/agentes/planificador-swl.md +399 -399
  34. package/agentes/producto-prd-swl.md +589 -589
  35. package/agentes/red-team-swl.md +218 -218
  36. package/agentes/release-manager-swl.md +590 -590
  37. package/agentes/rendimiento-swl.md +713 -713
  38. package/agentes/revisor-angular-swl.md +278 -278
  39. package/agentes/revisor-csharp-swl.md +264 -264
  40. package/agentes/revisor-go-swl.md +259 -259
  41. package/agentes/revisor-java-swl.md +257 -257
  42. package/agentes/revisor-kotlin-swl.md +273 -273
  43. package/agentes/revisor-nextjs-swl.md +281 -281
  44. package/agentes/revisor-php-swl.md +271 -271
  45. package/agentes/revisor-react-swl.md +278 -278
  46. package/agentes/revisor-rust-swl.md +346 -346
  47. package/agentes/revisor-seguridad-swl.md +399 -399
  48. package/agentes/revisor-swift-swl.md +268 -268
  49. package/agentes/revisor-typescript-swl.md +346 -346
  50. package/agentes/tdd-qa-swl.md +393 -393
  51. package/bin/swl-ses.js +10 -0
  52. package/comandos/swl/actualizar.md +174 -174
  53. package/comandos/swl/adoptar-proyecto.md +265 -265
  54. package/comandos/swl/aprender.md +836 -836
  55. package/comandos/swl/aprobar-plan.md +146 -146
  56. package/comandos/swl/auditar-deps.md +134 -134
  57. package/comandos/swl/autoresearch.md +264 -264
  58. package/comandos/swl/ayuda.md +224 -224
  59. package/comandos/swl/brainstorm.md +52 -51
  60. package/comandos/swl/checkpoint.md +325 -325
  61. package/comandos/swl/claudemd.md +234 -234
  62. package/comandos/swl/compactar.md +310 -310
  63. package/comandos/swl/configurar-ci.md +235 -235
  64. package/comandos/swl/contexto.md +110 -110
  65. package/comandos/swl/crear-skill.md +292 -292
  66. package/comandos/swl/cron.md +194 -194
  67. package/comandos/swl/deuda-codigo.md +97 -97
  68. package/comandos/swl/discutir-fase.md +169 -169
  69. package/comandos/swl/ejecutar-fase.md +233 -233
  70. package/comandos/swl/evaluar-skill.md +520 -520
  71. package/comandos/swl/evolucion-continua.md +73 -73
  72. package/comandos/swl/evolucionar.md +267 -267
  73. package/comandos/swl/exportar-vault.md +583 -583
  74. package/comandos/swl/fix.md +118 -118
  75. package/comandos/swl/gateway.md +158 -158
  76. package/comandos/swl/inbox.md +116 -116
  77. package/comandos/swl/instalar.md +220 -220
  78. package/comandos/swl/instintos.md +86 -86
  79. package/comandos/swl/mapear-codebase.md +312 -312
  80. package/comandos/swl/mcp-status.md +176 -175
  81. package/comandos/swl/modelo.md +100 -100
  82. package/comandos/swl/nemesis.md +433 -433
  83. package/comandos/swl/notificaciones.md +299 -299
  84. package/comandos/swl/nuevo-proyecto.md +251 -251
  85. package/comandos/swl/planear-fase.md +263 -263
  86. package/comandos/swl/plugins.md +256 -256
  87. package/comandos/swl/predecir.md +169 -169
  88. package/comandos/swl/reflect-skills.md +125 -125
  89. package/comandos/swl/release.md +450 -450
  90. package/comandos/swl/revisar-impacto.md +201 -201
  91. package/comandos/swl/revisar.md +330 -330
  92. package/comandos/swl/seguridad.md +189 -189
  93. package/comandos/swl/sesiones.md +200 -200
  94. package/comandos/swl/skill-search.md +113 -113
  95. package/comandos/swl/status.md +345 -345
  96. package/comandos/swl/verificar.md +817 -817
  97. package/comandos/swl/wiki.md +620 -620
  98. package/gateway/cron/jobs.example.json +12 -12
  99. package/gateway/lib/event-channel.js +191 -191
  100. package/habilidades/agent-deep-links/SKILL.md +148 -148
  101. package/habilidades/auto-evolucion-protocolo/SKILL.md +294 -294
  102. package/habilidades/backend-async-postgres-testing/SKILL.md +216 -215
  103. package/habilidades/backend-error-design/SKILL.md +221 -221
  104. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  105. package/habilidades/calidad-anti-patrones-universales/SKILL.md +105 -1
  106. package/habilidades/calidad-contract-testing/SKILL.md +165 -165
  107. package/habilidades/calidad-mutation-testing/SKILL.md +25 -1
  108. package/habilidades/changelog-generator/SKILL.md +174 -174
  109. package/habilidades/checklist-seguridad/recursos/stride-cobertura.md +60 -60
  110. package/habilidades/ci-cd-pipelines/SKILL.md +5 -1
  111. package/habilidades/compactacion-contexto/SKILL.md +2 -1
  112. package/habilidades/contenedores-docker/SKILL.md +4 -2
  113. package/habilidades/css-moderno/SKILL.md +7 -1
  114. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  115. package/habilidades/doubt-driven-review/SKILL.md +207 -207
  116. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  117. package/habilidades/drift-detection/SKILL.md +1 -1
  118. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  119. package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -57
  120. package/habilidades/extractor-de-aprendizajes/SKILL.md +12 -2
  121. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
  122. package/habilidades/git-worktrees-paralelo/SKILL.md +19 -1
  123. package/habilidades/harness-claude-code/SKILL.md +315 -314
  124. package/habilidades/instalar-sistema/SKILL.md +227 -227
  125. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  126. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  127. package/habilidades/perfil-usuario/SKILL.md +200 -200
  128. package/habilidades/planear-fase/SKILL.md +358 -358
  129. package/habilidades/prevencion-sobreingenieria/recursos/EXAMPLES.md +580 -580
  130. package/habilidades/proceso-ddia-streaming/SKILL.md +231 -231
  131. package/habilidades/proceso-discovery-machote/SKILL.md +157 -157
  132. package/habilidades/proceso-dynamic-workflows/SKILL.md +60 -0
  133. package/habilidades/proceso-dynamic-workflows/recursos/template-adversarial-verify.js +65 -65
  134. package/habilidades/proceso-dynamic-workflows/recursos/template-triage.js +65 -65
  135. package/habilidades/proceso-ingenieria-requerimientos/SKILL.md +147 -147
  136. package/habilidades/proceso-intent-engineering/SKILL.md +269 -269
  137. package/habilidades/proceso-modular-split/SKILL.md +256 -256
  138. package/habilidades/release-semver/SKILL.md +2 -2
  139. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
  140. package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -83
  141. package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -85
  142. package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -94
  143. package/habilidades/tdd-workflow/SKILL.md +749 -749
  144. package/habilidades/tdd-workflow/recursos/gherkin-bdd.md +111 -111
  145. package/hooks/agente-lifecycle.js +1 -1
  146. package/hooks/audit-trail.js +1 -1
  147. package/hooks/auto-consolidacion.js +1 -1
  148. package/hooks/calidad-pre-commit.js +159 -10
  149. package/hooks/captura-acciones-post.js +1 -1
  150. package/hooks/captura-acciones-session.js +1 -1
  151. package/hooks/captura-feedback-usuario.js +1 -1
  152. package/hooks/ciclo-evolucion-subagente.js +26 -26
  153. package/hooks/ciclo-evolucion.js +26 -26
  154. package/hooks/contexto-iteracion.js +1 -1
  155. package/hooks/degradacion-instintos.js +1 -1
  156. package/hooks/grafo-contexto.js +1 -1
  157. package/hooks/guardrail-modelo.js +1 -1
  158. package/hooks/inbox-aviso.js +1 -1
  159. package/hooks/inyeccion-contexto.js +1 -1
  160. package/hooks/lib/agent-matcher.js +1 -1
  161. package/hooks/lib/agent-routing.js +1 -1
  162. package/hooks/lib/auto-consolidator.js +335 -335
  163. package/hooks/lib/captura-acciones.js +1 -1
  164. package/hooks/lib/ciclo-evolucion.js +47 -47
  165. package/hooks/lib/deep-links.js +185 -185
  166. package/hooks/lib/error-classifier.js +308 -308
  167. package/hooks/lib/etapa-metricas.js +1 -1
  168. package/hooks/lib/evolution-tracker.js +1 -1
  169. package/hooks/lib/gateway-notify.js +193 -193
  170. package/hooks/lib/mcp-health.js +1 -1
  171. package/hooks/lib/notificacion-formato.js +92 -0
  172. package/hooks/lib/nudge-tracker.js +1 -1
  173. package/hooks/lib/otlp-exporter.js +1 -1
  174. package/hooks/lib/propose-step.js +1 -1
  175. package/hooks/lib/provenance-tracker.js +191 -191
  176. package/hooks/lib/raiz-proyecto.js +158 -102
  177. package/hooks/lib/resource-quota.js +122 -122
  178. package/hooks/lib/retry-jitter.js +165 -165
  179. package/hooks/lib/run-log.js +1 -1
  180. package/hooks/lib/security-net.js +201 -201
  181. package/hooks/lib/singleton-guard.js +20 -13
  182. package/hooks/lib/skill-auditor.js +588 -588
  183. package/hooks/lib/sync-status.js +228 -228
  184. package/hooks/lib/taint-tracker.js +107 -107
  185. package/hooks/lib/telegram-cliente.js +11 -3
  186. package/hooks/lib/text-similarity.js +241 -241
  187. package/hooks/lib/toon-compressor.js +245 -245
  188. package/hooks/notificacion-telegram.js +17 -13
  189. package/hooks/preservar-estado-pre-compact.js +1 -1
  190. package/hooks/registro-turnos.js +1 -1
  191. package/hooks/resumen-sesion.js +1 -1
  192. package/hooks/risk-scoring.js +1 -1
  193. package/hooks/session-briefing.js +13 -5
  194. package/hooks/spec-gate.js +1 -1
  195. package/hooks/sugerir-regenerar-inventario.js +1 -1
  196. package/hooks/tdd-gate.js +1 -1
  197. package/hooks/telemetria-agentes.js +1 -1
  198. package/hooks/telemetria-skill-routing.js +1 -1
  199. package/hooks/tracking-costos.js +1 -1
  200. package/hooks/validar-formato-post-subagente.js +1 -1
  201. package/hooks/validar-intent-spec.js +1 -1
  202. package/hooks/validar-planning-paths.js +1 -1
  203. package/instintos/autonomia.yaml +27 -27
  204. package/instintos/prompt-appendices.yaml +57 -57
  205. package/llms.txt +29 -29
  206. package/manifiestos/agent-output-schemas.json +57 -57
  207. package/manifiestos/canonical-hashes.json +6250 -5257
  208. package/manifiestos/harness-ir.json +47536 -0
  209. package/manifiestos/modulos.json +1429 -1428
  210. package/manifiestos/policy-bundle.json +2065 -0
  211. package/manifiestos/policy-corpus-w2.json +3926 -0
  212. package/manifiestos/runtime-adapters-core3.json +208 -0
  213. package/manifiestos/runtime-conformance.json +139 -0
  214. package/manifiestos/skills-lock.json +1275 -1275
  215. package/package.json +94 -94
  216. package/plantillas/auditor-veto-template.md +105 -105
  217. package/plantillas/github-workflows/release-please.yml +44 -44
  218. package/plantillas/github-workflows/swl-ci.yml +107 -107
  219. package/plantillas/github-workflows/swl-security.yml +51 -51
  220. package/plugin.json +369 -369
  221. package/reglas/accesibilidad.md +10 -10
  222. package/reglas/auditorias-documentales-estructurales.md +7 -7
  223. package/reglas/cloud-infra.md +8 -8
  224. package/reglas/consultar-vault-primero.md +195 -195
  225. package/reglas/git-workflow.md +1 -0
  226. package/reglas/hooks.md +6 -6
  227. package/reglas/intent-engineering.md +218 -218
  228. package/reglas/markitdown.md +8 -8
  229. package/reglas/monitor-ci.md +12 -0
  230. package/reglas/patrones.md +6 -6
  231. package/reglas/testing.md +7 -7
  232. package/reglas/tests-cleanup.md +224 -224
  233. package/schemas/agent-message.schema.json +73 -73
  234. package/schemas/agent-output-implementacion.schema.json +114 -114
  235. package/schemas/agent-output-planificacion.schema.json +150 -150
  236. package/schemas/agent-output-review.schema.json +98 -98
  237. package/schemas/diary-entry.schema.json +112 -112
  238. package/schemas/gate-state.schema.json +76 -0
  239. package/schemas/harness-ir.schema.json +369 -0
  240. package/schemas/hook-profiles.schema.json +54 -54
  241. package/schemas/hooks-config.schema.json +89 -89
  242. package/schemas/legacy-gates.schema.json +45 -0
  243. package/schemas/modulos.schema.json +38 -38
  244. package/schemas/perfiles.schema.json +36 -36
  245. package/schemas/plugin.schema.json +77 -77
  246. package/schemas/policy-bundle.schema.json +140 -0
  247. package/schemas/policy-enforcement.schema.json +117 -0
  248. package/schemas/policy-operation.schema.json +261 -0
  249. package/schemas/runtime-adapter.schema.json +176 -0
  250. package/schemas/runtime-build-attestation.schema.json +100 -0
  251. package/schemas/runtime-conformance.schema.json +239 -0
  252. package/schemas/runtime-diagnostic.schema.json +395 -0
  253. package/schemas/skill-evals.schema.json +119 -119
  254. package/schemas/skill-frontmatter.schema.json +245 -245
  255. package/schemas/w4-certification-request.schema.json +72 -0
  256. package/schemas/w4-certification-verdict.schema.json +224 -0
  257. package/schemas/w4-corpus.schema.json +172 -0
  258. package/schemas/w4-mutation-report.schema.json +116 -0
  259. package/schemas/w4-replay-result.schema.json +164 -0
  260. package/schemas/w4-scoring-report.schema.json +89 -0
  261. package/scripts/audit-tools/audit-history.js +330 -330
  262. package/scripts/audit-tools/bundle-tracker.js +290 -290
  263. package/scripts/audit-tools/canary-monitor.js +352 -352
  264. package/scripts/audit-tools/code-profiler.js +605 -605
  265. package/scripts/audit-tools/dep-doctor.js +320 -320
  266. package/scripts/audit-tools/env-validator.js +206 -206
  267. package/scripts/audit-tools/lib/fs-walk.js +48 -48
  268. package/scripts/audit-tools/lib/output.js +23 -23
  269. package/scripts/audit-tools/migration-checker.js +392 -392
  270. package/scripts/audit-tools/pentest-scanner.js +1436 -1436
  271. package/scripts/auditar-clases-conocidas.js +134 -134
  272. package/scripts/bootstrap-instintos.js +88 -14
  273. package/scripts/canario-hooks.js +166 -166
  274. package/scripts/cli/aprobar-plan.js +73 -73
  275. package/scripts/cli/autonomia.js +23 -23
  276. package/scripts/cli/benchmark-memoria.js +37 -37
  277. package/scripts/cli/briefing.js +23 -23
  278. package/scripts/cli/ciclo-autonomo.js +73 -73
  279. package/scripts/cli/ciclo-evolucion.js +26 -26
  280. package/scripts/cli/ciclo-fase-b.js +102 -102
  281. package/scripts/cli/derivar-feature-list.js +25 -25
  282. package/scripts/cli/detectar-host.js +27 -27
  283. package/scripts/cli/diary-entry.js +69 -69
  284. package/scripts/cli/execution-state.js +18 -18
  285. package/scripts/cli/gateway-notify.js +41 -41
  286. package/scripts/cli/guardrail-metrics.js +39 -39
  287. package/scripts/cli/liberar-fase.js +42 -42
  288. package/scripts/cli/mark-evolved.js +56 -56
  289. package/scripts/cli/memoria-search.js +69 -69
  290. package/scripts/cli/metricas-dora.js +26 -26
  291. package/scripts/cli/near-duplicate.js +55 -55
  292. package/scripts/cli/notificaciones.js +123 -123
  293. package/scripts/cli/nudge-accionar.js +39 -39
  294. package/scripts/cli/propose-step.js +29 -29
  295. package/scripts/cli/run-eval.js +38 -38
  296. package/scripts/cli/schedule-parse.js +19 -19
  297. package/scripts/cli/sugerir-modelo.js +20 -20
  298. package/scripts/cli/verificar-plan.js +36 -36
  299. package/scripts/cli/verificar-trazabilidad.js +35 -35
  300. package/scripts/comandos/install-asistido.js +8 -7
  301. package/scripts/configurar-branch-protection.js +418 -418
  302. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  303. package/scripts/doctor.js +61 -13
  304. package/scripts/evidencia-valor.js +101 -101
  305. package/scripts/field-report.js +16 -16
  306. package/scripts/generar-checklists-consolidados.js +273 -273
  307. package/scripts/generar-claims-runtime.js +1342 -0
  308. package/scripts/generar-harness-ir.js +257 -0
  309. package/scripts/generar-inventario.js +52 -54
  310. package/scripts/generar-policy-bundle.js +202 -0
  311. package/scripts/instalador.js +39 -7
  312. package/scripts/lib/activar-hooks-proyecto.js +116 -116
  313. package/scripts/lib/approval-receipts.js +190 -0
  314. package/scripts/lib/artefactos-python.js +43 -43
  315. package/scripts/lib/benchmark-metrics.js +160 -160
  316. package/scripts/lib/budget-enforcer.js +252 -252
  317. package/scripts/lib/certificacion-loop-state.js +421 -0
  318. package/scripts/lib/ci-reader.js +193 -193
  319. package/scripts/lib/ciclo-autonomo/candidatos.js +174 -174
  320. package/scripts/lib/ciclo-autonomo/config.js +165 -165
  321. package/scripts/lib/ciclo-autonomo/drenador-feedback.js +174 -174
  322. package/scripts/lib/ciclo-autonomo/fallback.js +77 -77
  323. package/scripts/lib/ciclo-autonomo/guard-convivencia.js +139 -139
  324. package/scripts/lib/ciclo-autonomo/higiene-nudges.js +112 -112
  325. package/scripts/lib/ciclo-autonomo/index.js +301 -301
  326. package/scripts/lib/ciclo-autonomo/lock.js +124 -124
  327. package/scripts/lib/ciclo-autonomo/presupuesto.js +122 -122
  328. package/scripts/lib/ciclo-autonomo/puente-degradacion.js +240 -240
  329. package/scripts/lib/ciclo-autonomo/runner-fase-b.js +248 -248
  330. package/scripts/lib/ciclo-autonomo/writer-instintos.js +190 -190
  331. package/scripts/lib/ciclo-autonomo/yaml-instintos.js +591 -535
  332. package/scripts/lib/clasificar-directorio.js +92 -0
  333. package/scripts/lib/contadores-inventario.js +217 -217
  334. package/scripts/lib/detectar-host-swl.js +175 -175
  335. package/scripts/lib/detectar-runtime.js +29 -20
  336. package/scripts/lib/detectar-stack-detallado.js +307 -307
  337. package/scripts/lib/detector-autoduplicacion-intra-archivo.js +234 -234
  338. package/scripts/lib/detector-reglas-duplicadas.js +220 -220
  339. package/scripts/lib/eval-metrics-store.js +218 -218
  340. package/scripts/lib/eval-quality.js +171 -171
  341. package/scripts/lib/eval-schemas.js +144 -144
  342. package/scripts/lib/eval-self-correct.js +106 -106
  343. package/scripts/lib/eval-validator.js +185 -185
  344. package/scripts/lib/evidence-verifier.js +192 -0
  345. package/scripts/lib/evidencia-release.js +322 -322
  346. package/scripts/lib/evidencia-valor.js +228 -228
  347. package/scripts/lib/expandir-targets.js +71 -71
  348. package/scripts/lib/frontmatter-canonico.js +509 -0
  349. package/scripts/lib/gate-engine.js +871 -0
  350. package/scripts/lib/gate-hooks-requires.js +249 -249
  351. package/scripts/lib/gate-licencias.js +212 -212
  352. package/scripts/lib/git-config-preflight.js +48 -0
  353. package/scripts/lib/git-metricas.js +257 -257
  354. package/scripts/lib/harness-ir.js +778 -0
  355. package/scripts/lib/harness-source-snapshot.js +309 -0
  356. package/scripts/lib/integrity-ledger.js +1147 -0
  357. package/scripts/lib/jaccard-similarity.js +98 -98
  358. package/scripts/lib/legacy-gate-migration.js +324 -0
  359. package/scripts/lib/limpiar-basura-global.js +204 -0
  360. package/scripts/lib/longmemeval-runner.js +125 -125
  361. package/scripts/lib/metricas-dora.js +204 -204
  362. package/scripts/lib/notificaciones-telegram.js +1 -0
  363. package/scripts/lib/npm-version.js +1 -0
  364. package/scripts/lib/paquetes-conocidos.js +50 -50
  365. package/scripts/lib/plan-lock.js +61 -13
  366. package/scripts/lib/policy-broker.js +338 -0
  367. package/scripts/lib/policy-bundle.js +342 -0
  368. package/scripts/lib/policy-context-provider.js +310 -0
  369. package/scripts/lib/policy-contract.js +479 -0
  370. package/scripts/lib/policy-verifier-utils.js +65 -0
  371. package/scripts/lib/pr-analyzer.js +399 -399
  372. package/scripts/lib/principal-verifier.js +178 -0
  373. package/scripts/lib/prompt-builder.js +264 -264
  374. package/scripts/lib/resolver-plan-fase.js +37 -37
  375. package/scripts/lib/rrf-fusion.js +175 -175
  376. package/scripts/lib/runtime-adapter-contract.js +267 -0
  377. package/scripts/lib/runtime-artifact-verifier.js +426 -0
  378. package/scripts/lib/runtime-build-attestation.js +127 -0
  379. package/scripts/lib/runtime-bundle-installer.js +586 -0
  380. package/scripts/lib/runtime-compiler.js +327 -0
  381. package/scripts/lib/runtime-conformance.js +202 -0
  382. package/scripts/lib/runtime-doctor-core3.js +567 -0
  383. package/scripts/lib/runtime-doctor-input.js +59 -0
  384. package/scripts/lib/runtime-operation-adapter.js +267 -0
  385. package/scripts/lib/schema-version.js +164 -164
  386. package/scripts/lib/semantic-search.js +252 -252
  387. package/scripts/lib/signed-envelope.js +545 -0
  388. package/scripts/lib/single-use-store.js +359 -0
  389. package/scripts/lib/skills-externas.js +31 -0
  390. package/scripts/lib/toml-merge.js +204 -204
  391. package/scripts/lib/transformadores/codex.js +15 -8
  392. package/scripts/lib/transformadores/gemini.js +79 -5
  393. package/scripts/lib/w4-attestation-adapter.js +158 -0
  394. package/scripts/lib/w4-canario.js +337 -0
  395. package/scripts/lib/w4-claims.js +182 -0
  396. package/scripts/lib/w4-corpus-generador.js +542 -0
  397. package/scripts/lib/w4-gate-c5.js +115 -0
  398. package/scripts/lib/w4-harness-bajo-prueba.js +155 -0
  399. package/scripts/lib/w4-matriz-combos.js +55 -0
  400. package/scripts/lib/w4-motor-mutacion.js +1348 -0
  401. package/scripts/lib/w4-motor-replay.js +735 -0
  402. package/scripts/lib/w4-pin-origen.js +54 -0
  403. package/scripts/lib/w4-publicar-request.js +132 -0
  404. package/scripts/lib/w4-revocacion.js +62 -0
  405. package/scripts/lib/w4-runtimes-core3.js +38 -0
  406. package/scripts/lib/w4-scorer-certificacion.js +692 -0
  407. package/scripts/lib/w4-superficie-candidato.js +49 -0
  408. package/scripts/lib/w4-veredicto.js +452 -0
  409. package/scripts/lib/w4-verificar-veredicto.js +302 -0
  410. package/scripts/limpiar-artefactos-python.js +131 -131
  411. package/scripts/mcp-server/auth.js +105 -105
  412. package/scripts/mcp-server/cache.js +106 -106
  413. package/scripts/migrar-csv-a-array.js +168 -168
  414. package/scripts/migrar-fase-dominio.js +200 -200
  415. package/scripts/migrar-gates-legacy.js +108 -0
  416. package/scripts/publicar-certification-request.js +115 -0
  417. package/scripts/runtime-doctor.js +107 -0
  418. package/scripts/tui/componentes/selector-multi.js +189 -189
  419. package/scripts/tui/componentes/selector-unico.js +158 -158
  420. package/scripts/tui/ejecutores.js +375 -375
  421. package/scripts/tui/lib/colores.js +129 -129
  422. package/scripts/tui/lib/render.js +264 -264
  423. package/scripts/tui/lib/teclas.js +113 -113
  424. package/scripts/tui/pantallas/install-wizard.js +408 -403
  425. package/scripts/tui/pantallas/menu-principal.js +52 -52
  426. package/scripts/tui/pantallas/progreso.js +274 -274
  427. package/scripts/tui/pantallas/resumen.js +132 -132
  428. package/scripts/validar-userland-vacio.js +110 -110
  429. package/scripts/verificar-aislamiento-swl-eval.js +87 -0
  430. package/scripts/verificar-empaquetado-downstream.js +375 -0
  431. package/scripts/verificar-loop-constructor.js +215 -0
  432. package/scripts/verificar-trazabilidad.js +13 -6
  433. package/scripts/verificar-veredicto-real.js +84 -0
  434. package/instintos/.backups/perfil-usuario.yaml.2026-07-10-165128.bak +0 -53
  435. package/instintos/.backups/proyecto.yaml.2026-07-10-165128.bak +0 -372
@@ -1,620 +1,620 @@
1
- ---
2
- name: swl:wiki
3
- description: >
4
- Gestiona el wiki de conocimiento del proyecto. Implementa el patrón de
5
- knowledge base persistente y compounding de Andrej Karpathy: tres capas
6
- separadas (raw/wiki/outputs) con index.md y log.md para navegación y
7
- trazabilidad. Subcomandos: init, ingest, query, lint.
8
- allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
9
- ---
10
-
11
- # /swl:wiki — Wiki de conocimiento del proyecto
12
-
13
- Gestiona el knowledge base persistente del proyecto. A diferencia de
14
- `.planning/APRENDIZAJES.md` (patrones técnicos de implementación), el wiki
15
- almacena conocimiento de dominio, decisiones de investigación, arquitectura
16
- conceptual y análisis que deben sobrevivir indefinidamente sin purgarse.
17
-
18
- ## Arquitectura del wiki
19
-
20
- ```
21
- .planning/knowledge/
22
- raw/ ← fuentes crudas INMUTABLES (artículos, docs, notas, outputs de agentes)
23
- wiki/ ← síntesis mantenida por IA (una página .md por topic)
24
- INDEX.md ← catálogo de todas las páginas (actualizado en cada ingest)
25
- log.md ← historial cronológico append-only (parseable con grep)
26
- [topic].md ← página por topic/agente/tecnología/decisión
27
- outputs/ ← respuestas a queries, análisis, comparativas (referencias al wiki)
28
- ```
29
-
30
- **Separación de responsabilidades**:
31
- - `raw/` → NUNCA modificar. Es la fuente de verdad. El LLM solo lee.
32
- - `wiki/` → El LLM escribe y mantiene. El usuario lee.
33
- - `outputs/` → El LLM escribe al responder queries. Se pueden reutilizar como fuentes.
34
-
35
- ---
36
-
37
- ## Subcomando: `init`
38
-
39
- **Uso**: `/swl:wiki init`
40
-
41
- Inicializa la estructura del wiki para el proyecto actual.
42
-
43
- ### Pasos
44
-
45
- 1. **Crear estructura de directorios**:
46
-
47
- ```bash
48
- mkdir -p .planning/knowledge/raw
49
- mkdir -p .planning/knowledge/wiki
50
- mkdir -p .planning/knowledge/outputs
51
- echo "✓ Estructura de directorios creada"
52
- ```
53
-
54
- 2. **Crear INDEX.md** — catálogo inicial:
55
-
56
- ```bash
57
- cat > .planning/knowledge/wiki/INDEX.md << 'EOF'
58
- ---
59
- tipo: indice
60
- actualizado: YYYY-MM-DD
61
- total_paginas: 0
62
- ---
63
-
64
- # Índice del Wiki — [nombre del proyecto]
65
-
66
- > Catálogo de todas las páginas del wiki. Actualizado automáticamente en cada ingest.
67
- > Para navegar: leer esta página primero, luego profundizar en las páginas relevantes.
68
-
69
- ## Páginas por categoría
70
-
71
- ### Arquitectura y decisiones
72
- _(vacío — agregar páginas vía `/swl:wiki ingest`)_
73
-
74
- ### Tecnologías y frameworks
75
- _(vacío)_
76
-
77
- ### Investigaciones y análisis
78
- _(vacío)_
79
-
80
- ### Procesos y metodología
81
- _(vacío)_
82
-
83
- ---
84
- _Wiki inicializado: [FECHA]. Usar `/swl:wiki ingest <archivo>` para agregar contenido._
85
- EOF
86
- ```
87
-
88
- Reemplazar `YYYY-MM-DD` y `[nombre del proyecto]` con los valores reales.
89
-
90
- 3. **Crear log.md** — historial cronológico:
91
-
92
- ```bash
93
- cat > .planning/knowledge/wiki/log.md << 'EOF'
94
- # Log del Wiki — Historial cronológico
95
-
96
- > Registro append-only de operaciones. Parseable:
97
- > `grep "^## \[" .planning/knowledge/wiki/log.md | tail -10`
98
- > `grep "ingest" .planning/knowledge/wiki/log.md`
99
-
100
- EOF
101
- echo "## [$(date +%Y-%m-%d)] init | Wiki inicializado para el proyecto" >> .planning/knowledge/wiki/log.md
102
- ```
103
-
104
- 4. **Crear schema.md** — reglas del wiki para este proyecto:
105
-
106
- ```bash
107
- cat > .planning/knowledge/schema.md << 'EOF'
108
- # Schema del Wiki — Reglas y convenciones
109
-
110
- ## Qué es este wiki
111
- Knowledge base del proyecto [NOMBRE]. Captura conocimiento de dominio,
112
- decisiones técnicas, investigaciones y análisis que deben persistir
113
- indefinidamente como memoria institucional del proyecto.
114
-
115
- ## Diferencia con APRENDIZAJES.md
116
- - APRENDIZAJES.md → patrones de implementación técnica (código, bugs, anti-patrones)
117
- - wiki/ → conocimiento de dominio, arquitectura conceptual, investigación (negocio, decisiones)
118
-
119
- ## Estructura de cada página wiki (patrón Compiled Truth)
120
-
121
- Cada página wiki sigue el patrón **Compiled Truth**: síntesis curada arriba,
122
- evidencia cronológica abajo. La síntesis es el conocimiento compilado y
123
- actualizado; la timeline es el registro inmutable de cómo se llegó ahí.
124
-
125
- Cada archivo en wiki/ debe seguir este formato:
126
-
127
- ```
128
- ---
129
- topic: [nombre del topic]
130
- categoria: arquitectura | tecnologia | investigacion | proceso
131
- actualizado: YYYY-MM-DD
132
- fuentes: [N archivos en raw/ que respaldan esta página]
133
- confianza: alta | media | baja
134
- ---
135
-
136
- # [Título]
137
-
138
- ## Compiled Truth (síntesis curada)
139
-
140
- ### Resumen
141
- [Un párrafo que resume el topic — usado en INDEX.md]
142
-
143
- ### Estado actual
144
- [Qué se sabe HOY sobre este topic. Afirmaciones verificadas con fuentes.
145
- Cada afirmación clave marcada con [F:N] donde N refiere a la fuente en la
146
- sección Timeline.]
147
-
148
- ### Decisiones vigentes
149
- [Decisiones activas sobre este topic, con justificación breve.]
150
-
151
- ### Relaciones
152
- - Relacionado con: [[otro-topic]], [[otro-topic-2]]
153
- - Depende de: [[prerequisito]]
154
- - Referenciado por: [[topic-que-lo-usa]]
155
-
156
- ## Timeline (evidencia cronológica)
157
-
158
- ### [YYYY-MM-DD] [F:1] — [nombre de la fuente]
159
- - Aportó: [qué conocimiento agregó]
160
- - Fuente: raw/YYYYMMDD-nombre-fuente.md
161
-
162
- ### [YYYY-MM-DD] [F:2] — [nombre de la fuente]
163
- - Aportó: [qué conocimiento agregó]
164
- - Cambió: [qué afirmación anterior se actualizó o contradijo]
165
- - Fuente: raw/YYYYMMDD-nombre-fuente.md
166
- ```
167
-
168
- **Reglas del patrón Compiled Truth**:
169
- - La sección **Compiled Truth** es la fuente de verdad actual — se reescribe con cada ingest.
170
- - La sección **Timeline** es append-only — nunca modificar entradas anteriores.
171
- - Si una fuente nueva contradice una anterior, actualizar Compiled Truth Y agregar en Timeline con `Cambió:`.
172
- - El campo `confianza` refleja cuántas fuentes independientes respaldan las afirmaciones: alta (3+), media (2), baja (1).
173
-
174
- ## Convenciones
175
- - Links entre páginas: `[[nombre-archivo-sin-extension]]`
176
- - Una página por topic, no por fuente
177
- - El LLM actualiza wiki/ — el humano lee y valida
178
- - raw/ es inmutable — nunca modificar archivos existentes
179
- - outputs/ contiene respuestas completas — referenciar wiki/ para síntesis
180
- - log.md es append-only — nunca editar entradas existentes
181
-
182
- ## Topics prioritarios para este proyecto
183
- [Completar con los dominios específicos del proyecto — ej: "autenticación", "facturación", "arquitectura de microservicios"]
184
- EOF
185
- ```
186
-
187
- 5. **Confirmación al usuario**:
188
-
189
- ```
190
- ✓ Wiki inicializado en .planning/knowledge/
191
-
192
- Estructura creada:
193
- raw/ → depositar fuentes crudas aquí
194
- wiki/ → el LLM mantiene las páginas
195
- outputs/ → respuestas y análisis guardados
196
- INDEX.md → catálogo de páginas (actualizado automáticamente)
197
- log.md → historial cronológico de operaciones
198
- schema.md → reglas del wiki (editar para personalizar al proyecto)
199
-
200
- Próximos pasos:
201
- /swl:wiki ingest <archivo> → ingerir primera fuente
202
- /swl:wiki query "<pregunta>" → consultar el wiki
203
- /swl:wiki lint → health check periódico
204
- ```
205
-
206
- ---
207
-
208
- ## Subcomando: `ingest`
209
-
210
- **Uso**: `/swl:wiki ingest <ruta-o-url>`
211
-
212
- Ingiere una fuente en el wiki: lee, extrae knowledge, actualiza páginas relevantes,
213
- actualiza INDEX.md y agrega entrada al log.
214
-
215
- ### Tipos de fuente soportados
216
-
217
- | Tipo | Ejemplo | Herramienta |
218
- |------|---------|-------------|
219
- | `.md`, `.txt` (local) | `ingest ./notas/reunion.md` | Read |
220
- | `.pdf` ≤ 20 páginas (local) | `ingest ./docs/guia.pdf` | Read con `pages:` |
221
- | `.pdf` > 20 págs o con tablas | `ingest ./docs/reporte.pdf` | swl-markitdown |
222
- | `.docx`, `.pptx` (local) | `ingest ./docs/arquitectura.docx` | swl-markitdown |
223
- | `.xlsx`, `.xls` (local) | `ingest ./datos/metricas.xlsx` | swl-markitdown |
224
- | `.ipynb` Jupyter (local) | `ingest ./notebooks/analisis.ipynb` | swl-markitdown |
225
- | `.zip` con documentos | `ingest ./docs/documentacion.zip` | swl-markitdown |
226
- | URL estática (HTML simple) | `ingest https://blog.domain.com/post` | WebFetch |
227
- | URL dinámica (SPA, JS heavy) | `ingest https://spa-site.com/docs` | agent-browser |
228
- | URL de YouTube | `ingest https://www.youtube.com/watch?v=...` | swl-markitdown |
229
- | Output de agente previo | `ingest .planning/knowledge/outputs/2026-04-09-investigacion.md` | Read |
230
-
231
- ### Pasos del ingest
232
-
233
- **Paso I.1 — Leer la fuente** (detección automática de herramienta):
234
-
235
- ```bash
236
- PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
237
- CLI_MKD="$PROJECT_ROOT/scripts/vendor/markitdown/cli.py"
238
- FUENTE="[RUTA_O_URL]"
239
-
240
- # Detectar tipo de fuente y elegir herramienta
241
- if echo "$FUENTE" | grep -qE "^https?://"; then
242
- # Fuente web
243
- if echo "$FUENTE" | grep -qE "youtube\.com|youtu\.be"; then
244
- # YouTube: usar swl-markitdown para transcripción
245
- CONTENIDO=$(python "$CLI_MKD" "$FUENTE" 2>/dev/null)
246
- else
247
- # HTML: WebFetch primero, agent-browser como fallback
248
- CONTENIDO=$(# usar WebFetch tool aquí)
249
- PALABRAS=$(echo "$CONTENIDO" | wc -w)
250
- if [ "$PALABRAS" -lt 500 ]; then
251
- CONTENIDO=$(# usar agent-browser como fallback)
252
- fi
253
- fi
254
- else
255
- # Archivo local: elegir según extensión
256
- EXT="${FUENTE##*.}"
257
- case "$EXT" in
258
- md|txt|markdown)
259
- # Read tool directamente
260
- ;;
261
- pdf)
262
- # Read para PDFs cortos; swl-markitdown para PDFs con tablas o > 20 págs
263
- CONTENIDO=$(python "$CLI_MKD" "$FUENTE" 2>/dev/null)
264
- ;;
265
- docx|pptx|xlsx|xls|ipynb|epub|zip|csv)
266
- # swl-markitdown para formatos que Read no soporta
267
- CONTENIDO=$(python "$CLI_MKD" "$FUENTE" 2>/dev/null)
268
- if [ -z "$CONTENIDO" ]; then
269
- echo "Error: swl-markitdown no pudo convertir $FUENTE"
270
- echo "Verificar: python $CLI_MKD --check"
271
- exit 1
272
- fi
273
- ;;
274
- *)
275
- # Intentar con swl-markitdown; si falla, reportar
276
- CONTENIDO=$(python "$CLI_MKD" "$FUENTE" 2>/dev/null)
277
- ;;
278
- esac
279
- fi
280
- ```
281
-
282
- **Paso I.2 — Guardar copia en raw/** (si la fuente es externa o fue convertida):
283
-
284
- ```bash
285
- FECHA=$(date +%Y%m%d)
286
- NOMBRE_LIMPIO=$(echo "[FUENTE]" | sed 's|https://||' | sed 's|[/. ]|-|g' | cut -c1-60)
287
-
288
- # Para archivos Markdown/texto ya en formato correcto
289
- cp "[FUENTE_LOCAL]" ".planning/knowledge/raw/${FECHA}-${NOMBRE_LIMPIO}.md"
290
-
291
- # Para archivos convertidos con swl-markitdown (DOCX, XLSX, PPTX, etc.)
292
- python "$CLI_MKD" "[FUENTE_LOCAL]" > ".planning/knowledge/raw/${FECHA}-${NOMBRE_LIMPIO}.md" 2>/dev/null
293
-
294
- # Para URLs (WebFetch o agent-browser)
295
- # agent-browser get text "article" > ".planning/knowledge/raw/${FECHA}-${NOMBRE_LIMPIO}.md"
296
- ```
297
-
298
- **Paso I.3 — Extraer knowledge de la fuente**:
299
-
300
- Leer la fuente completa e identificar:
301
- - Topics principales cubiertos
302
- - Entidades mencionadas (tecnologías, patrones, decisiones, personas)
303
- - Afirmaciones verificables con su fuente
304
- - Relaciones con topics que ya existen en el wiki
305
-
306
- **Paso I.4 — Actualizar páginas wiki existentes**:
307
-
308
- Para cada topic cubierto en la fuente que ya tiene página en `wiki/`:
309
- - Leer la página existente
310
- - **Compiled Truth**: Reescribir la sección "Estado actual" integrando la información nueva con la existente. No eliminar afirmaciones válidas — solo actualizarlas o expandirlas.
311
- - **Timeline**: Agregar nueva entrada cronológica append-only con `[F:N]` y lo que la fuente aportó. Si contradice algo, incluir `Cambió:` en la entrada.
312
- - Actualizar la fecha `actualizado` y el campo `fuentes` (incrementar) en el frontmatter
313
- - Actualizar `confianza`: baja (1 fuente) → media (2) → alta (3+)
314
- - Si la nueva info contradice la anterior: actualizar Compiled Truth con la versión correcta Y registrar el cambio en Timeline con `Cambió:`
315
-
316
- **Paso I.5 — Crear páginas wiki nuevas** (para topics que no tienen página):
317
-
318
- Para cada topic nuevo identificado que justifique su propia página (criterio: ≥3 afirmaciones distintas sobre el mismo topic):
319
-
320
- ```bash
321
- cat > ".planning/knowledge/wiki/[nombre-topic].md" << 'EOF'
322
- ---
323
- topic: [nombre]
324
- categoria: [arquitectura|tecnologia|investigacion|proceso]
325
- actualizado: YYYY-MM-DD
326
- fuentes: 1
327
- confianza: baja
328
- ---
329
-
330
- # [Título del topic]
331
-
332
- ## Compiled Truth (síntesis curada)
333
-
334
- ### Resumen
335
- [Un párrafo conciso — este texto va al INDEX.md]
336
-
337
- ### Estado actual
338
- [Afirmaciones verificadas, marcadas con [F:1] referenciando la timeline.]
339
-
340
- ### Decisiones vigentes
341
- [Decisiones activas si aplica, o eliminar sección si no hay.]
342
-
343
- ### Relaciones
344
- - Relacionado con: [otros topics del wiki si aplica]
345
-
346
- ## Timeline (evidencia cronológica)
347
-
348
- ### [YYYY-MM-DD] [F:1] — [nombre de la fuente]
349
- - Aportó: [qué conocimiento agregó]
350
- - Fuente: raw/YYYYMMDD-nombre-fuente.md
351
- EOF
352
- ```
353
-
354
- **Paso I.6 — Actualizar INDEX.md**:
355
-
356
- Agregar o actualizar la entrada del topic nuevo en INDEX.md:
357
-
358
- ```bash
359
- # Agregar al INDEX.md bajo la categoría correspondiente:
360
- # | [[nombre-topic]] | [resumen de una línea] | [YYYY-MM-DD] |
361
- ```
362
-
363
- Estructura de la tabla en INDEX.md:
364
- ```markdown
365
- | Página | Resumen | Actualizado |
366
- |--------|---------|-------------|
367
- | [[nombre-topic]] | Resumen de una línea | YYYY-MM-DD |
368
- ```
369
-
370
- **Paso I.7 — Agregar al log**:
371
-
372
- ```bash
373
- echo "## [$(date +%Y-%m-%d)] ingest | [nombre de la fuente] → [N páginas tocadas]" \
374
- >> .planning/knowledge/wiki/log.md
375
- echo " Fuentes en raw: $(ls .planning/knowledge/raw/ | wc -l) total" \
376
- >> .planning/knowledge/wiki/log.md
377
- ```
378
-
379
- **Paso I.8 — Reporte al usuario**:
380
-
381
- ```
382
- Ingest completado: [nombre de la fuente]
383
-
384
- Páginas actualizadas: [N]
385
- - wiki/[topic1].md — [qué se actualizó]
386
- - wiki/[topic2].md — [qué se actualizó]
387
-
388
- Páginas nuevas creadas: [N]
389
- - wiki/[nuevo-topic].md — [descripción]
390
-
391
- INDEX.md actualizado: [N] entradas
392
- log.md: entrada agregada
393
-
394
- [Si hay contradicciones detectadas:]
395
- ⚠ Contradicciones detectadas — revisar antes de continuar:
396
- - wiki/[topic].md contradice raw/[fuente-anterior].md en: [claim]
397
- ```
398
-
399
- ---
400
-
401
- ## Subcomando: `query`
402
-
403
- **Uso**: `/swl:wiki query "<pregunta>"`
404
-
405
- Responde una pregunta usando el knowledge base del wiki. Guarda la respuesta
406
- en `outputs/` para que componga en el knowledge base.
407
-
408
- ### Pasos del query
409
-
410
- **Paso Q.1 — Leer INDEX.md primero**:
411
-
412
- ```bash
413
- cat .planning/knowledge/wiki/INDEX.md
414
- ```
415
-
416
- Identificar qué páginas del wiki son relevantes para la pregunta.
417
- **No cargar todo el wiki** — solo las páginas identificadas en el índice.
418
-
419
- **Paso Q.2 — Leer páginas relevantes**:
420
-
421
- Para cada página identificada como relevante:
422
- ```bash
423
- cat .planning/knowledge/wiki/[topic].md
424
- ```
425
-
426
- Máximo 5-7 páginas por query para mantener el costo bajo.
427
- Si la pregunta requiere más páginas, descomponerla en sub-preguntas.
428
-
429
- **Paso Q.3 — Sintetizar respuesta**:
430
-
431
- Responder la pregunta basándose SOLO en el contenido del wiki.
432
- Si la pregunta no puede responderse con el wiki actual, indicarlo explícitamente:
433
- ```
434
- ⚠ El wiki actual no tiene suficiente información sobre [aspecto].
435
- Fuentes faltantes sugeridas:
436
- - [tipo de fuente que respondería esto]
437
-
438
- ¿Ejecutar investigación con investigador-swl para completar el wiki?
439
- ```
440
-
441
- **Paso Q.4 — Guardar output**:
442
-
443
- ```bash
444
- FECHA=$(date +%Y-%m-%d)
445
- PREGUNTA_SLUG=$(echo "[PREGUNTA]" | tr ' ' '-' | tr '[:upper:]' '[:lower:]' | cut -c1-50)
446
- OUTPUT_PATH=".planning/knowledge/outputs/${FECHA}-query-${PREGUNTA_SLUG}.md"
447
-
448
- cat > "$OUTPUT_PATH" << 'EOF'
449
- ---
450
- fecha: YYYY-MM-DD
451
- tipo: query
452
- pregunta: "[PREGUNTA]"
453
- paginas_consultadas: [LISTA]
454
- ---
455
-
456
- # Respuesta: [PREGUNTA]
457
-
458
- [RESPUESTA COMPLETA]
459
-
460
- ## Fuentes wiki consultadas
461
- - [[topic1]]
462
- - [[topic2]]
463
- EOF
464
-
465
- echo "✓ Respuesta guardada en: $OUTPUT_PATH"
466
- ```
467
-
468
- **Paso Q.5 — Proponer si el output debe incorporarse al wiki**:
469
-
470
- ```
471
- Output guardado en outputs/[archivo].md
472
-
473
- ¿Incorporar esta respuesta al wiki?
474
- [S] Sí — es un análisis valioso que debería estar en wiki/
475
- [N] No — es una respuesta puntual que no suma al wiki
476
- ```
477
-
478
- Si el usuario dice Sí: ejecutar ingest sobre el output para integrarlo al wiki.
479
-
480
- ---
481
-
482
- ## Subcomando: `lint`
483
-
484
- **Uso**: `/swl:wiki lint`
485
-
486
- Health check del wiki. Detecta problemas de calidad antes de que se acumulen.
487
- Ejecutar mensualmente o después de ingestas masivas.
488
-
489
- ### Verificaciones del lint
490
-
491
- **L.1 — Páginas huérfanas** (sin referencias desde otras páginas):
492
-
493
- ```bash
494
- echo "=== Páginas huérfanas ==="
495
- for PAGE in .planning/knowledge/wiki/*.md; do
496
- NOMBRE=$(basename "$PAGE" .md)
497
- [ "$NOMBRE" = "INDEX" ] || [ "$NOMBRE" = "log" ] && continue
498
- REFS=$(grep -r "\[\[$NOMBRE\]\]" .planning/knowledge/wiki/ 2>/dev/null | \
499
- grep -v "^$PAGE:" | wc -l)
500
- INDEX_REF=$(grep "\[\[$NOMBRE\]\]" .planning/knowledge/wiki/INDEX.md 2>/dev/null | wc -l)
501
- TOTAL=$((REFS + INDEX_REF))
502
- [ "$TOTAL" -eq 0 ] && echo " HUERFANA: $NOMBRE"
503
- done
504
- ```
505
-
506
- **L.2 — Páginas fuera del INDEX.md**:
507
-
508
- ```bash
509
- echo "=== Páginas no indexadas ==="
510
- for PAGE in .planning/knowledge/wiki/*.md; do
511
- NOMBRE=$(basename "$PAGE" .md)
512
- [ "$NOMBRE" = "INDEX" ] || [ "$NOMBRE" = "log" ] && continue
513
- INDEXED=$(grep "\[\[$NOMBRE\]\]" .planning/knowledge/wiki/INDEX.md 2>/dev/null | wc -l)
514
- [ "$INDEXED" -eq 0 ] && echo " NO INDEXADA: $NOMBRE"
515
- done
516
- ```
517
-
518
- **L.3 — Páginas con frontmatter desactualizado** (no actualizadas en >60 días):
519
-
520
- ```bash
521
- echo "=== Páginas posiblemente desactualizadas (>60 días) ==="
522
- HACE_60=$(date -d "60 days ago" +%Y-%m-%d 2>/dev/null || \
523
- date -v-60d +%Y-%m-%d 2>/dev/null) # macOS fallback
524
- grep -r "actualizado:" .planning/knowledge/wiki/*.md 2>/dev/null | \
525
- awk -F: '{if ($2 < "'$HACE_60'") print " VIEJA: " $1 " (" $2 ")"}'
526
- ```
527
-
528
- **L.4 — Contradicciones marcadas pendientes**:
529
-
530
- ```bash
531
- echo "=== Contradicciones marcadas sin resolver ==="
532
- grep -r "\[CONTRADICE:" .planning/knowledge/wiki/*.md 2>/dev/null | \
533
- sed 's/:.*//' | sort -u
534
- ```
535
-
536
- **L.5 — Claims sin fuente en raw/**:
537
-
538
- ```bash
539
- echo "=== Páginas wiki sin fuentes en raw/ ==="
540
- for PAGE in .planning/knowledge/wiki/*.md; do
541
- NOMBRE=$(basename "$PAGE" .md)
542
- [ "$NOMBRE" = "INDEX" ] || [ "$NOMBRE" = "log" ] && continue
543
- FUENTES=$(grep "^- raw/" "$PAGE" 2>/dev/null | wc -l)
544
- [ "$FUENTES" -eq 0 ] && echo " SIN FUENTE: $NOMBRE"
545
- done
546
- ```
547
-
548
- **L.6 — Tamaño del wiki** (métricas de salud):
549
-
550
- ```bash
551
- echo "=== Métricas del wiki ==="
552
- echo " Páginas totales: $(ls .planning/knowledge/wiki/*.md 2>/dev/null | grep -v "INDEX\|log" | wc -l)"
553
- echo " Fuentes en raw/: $(ls .planning/knowledge/raw/ 2>/dev/null | wc -l)"
554
- echo " Outputs guardados: $(ls .planning/knowledge/outputs/ 2>/dev/null | wc -l)"
555
- echo " Último ingest: $(grep "^## \[" .planning/knowledge/wiki/log.md 2>/dev/null | tail -1)"
556
- echo " Entradas en log: $(grep "^## \[" .planning/knowledge/wiki/log.md 2>/dev/null | wc -l)"
557
- ```
558
-
559
- ### Acciones recomendadas post-lint
560
-
561
- Basándose en los resultados:
562
-
563
- | Hallazgo | Acción recomendada |
564
- |----------|-------------------|
565
- | Páginas huérfanas | Agregar links desde páginas relacionadas O eliminar si el topic ya no es relevante |
566
- | Páginas sin indexar | Agregar al INDEX.md bajo la categoría correcta |
567
- | Páginas >60 días sin actualizar | Revisar si el contenido sigue siendo válido; marcar como `[REVISAR]` si hay dudas |
568
- | Contradicciones pendientes | Resolver antes del próximo ingest — ver protocolo en `/swl:aprender` Paso 5.5 |
569
- | Páginas sin fuente | Agregar la fuente a `raw/` O marcar el contenido como `[SIN-FUENTE: verificar]` |
570
-
571
- ### Reporte del lint
572
-
573
- ```bash
574
- # Agregar al log
575
- echo "## [$(date +%Y-%m-%d)] lint | health check completado" >> .planning/knowledge/wiki/log.md
576
- echo " Hallazgos: [N huérfanas] huérfanas, [N] sin indexar, [N] contradicciones" \
577
- >> .planning/knowledge/wiki/log.md
578
- ```
579
-
580
- Mostrar al usuario:
581
- ```
582
- Wiki health check completado:
583
-
584
- ✓ Páginas totales: [N]
585
- ✓ Fuentes en raw/: [N]
586
-
587
- Hallazgos:
588
- Páginas huérfanas: [N] → [lista]
589
- Páginas sin indexar: [N] → [lista]
590
- Páginas desactualizadas: [N] → [lista]
591
- Contradicciones: [N] → [lista]
592
- Páginas sin fuente: [N] → [lista]
593
-
594
- [Si todo OK:]
595
- ✓ Wiki en buen estado — sin problemas críticos detectados.
596
-
597
- [Si hay hallazgos:]
598
- ¿Quieres que resuelva los hallazgos ahora? [S/N]
599
- ```
600
-
601
- ---
602
-
603
- ## Integración con otros comandos SWL
604
-
605
- | Comando | Integración con wiki |
606
- |---------|---------------------|
607
- | `/swl:aprender` | Paso 5.5 verifica consistencia con wiki antes de persistir; Fase 4.5 ejecuta lint del wiki |
608
- | `/swl:mapear-codebase` | El mapa del codebase puede ingresarse al wiki como fuente inicial |
609
- | `investigador-swl` | Guarda outputs en `outputs/` y fuentes en `raw/` automáticamente |
610
- | `arquitecto-swl` | Los ADRs pueden ingresarse al wiki como páginas de decisión |
611
- | `/swl:checkpoint` | Puede hacer referencia al INDEX.md del wiki para contexto de sesión |
612
-
613
- ## Reglas del sistema
614
-
615
- - `raw/` es **INMUTABLE** — nunca modificar archivos existentes; solo agregar nuevos.
616
- - `wiki/` es **responsabilidad del LLM** — el humano lee, el LLM escribe y mantiene.
617
- - `log.md` es **append-only** — nunca editar entradas existentes.
618
- - Cada ingest debe tocar entre 1 y 15 páginas wiki como máximo. Si una fuente toca más de 15 temas distintos, dividir en múltiples ingests.
619
- - Un topic que aparece en <3 fuentes no justifica su propia página — agregarlo a una página relacionada.
620
- - Los outputs en `outputs/` son legibles pero no se indexan automáticamente en INDEX.md — solo si el usuario confirma que deben incorporarse al wiki.
1
+ ---
2
+ name: swl:wiki
3
+ description: >
4
+ Gestiona el wiki de conocimiento del proyecto. Implementa el patrón de
5
+ knowledge base persistente y compounding de Andrej Karpathy: tres capas
6
+ separadas (raw/wiki/outputs) con index.md y log.md para navegación y
7
+ trazabilidad. Subcomandos: init, ingest, query, lint.
8
+ allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
9
+ ---
10
+
11
+ # /swl:wiki — Wiki de conocimiento del proyecto
12
+
13
+ Gestiona el knowledge base persistente del proyecto. A diferencia de
14
+ `.planning/APRENDIZAJES.md` (patrones técnicos de implementación), el wiki
15
+ almacena conocimiento de dominio, decisiones de investigación, arquitectura
16
+ conceptual y análisis que deben sobrevivir indefinidamente sin purgarse.
17
+
18
+ ## Arquitectura del wiki
19
+
20
+ ```
21
+ .planning/knowledge/
22
+ raw/ ← fuentes crudas INMUTABLES (artículos, docs, notas, outputs de agentes)
23
+ wiki/ ← síntesis mantenida por IA (una página .md por topic)
24
+ INDEX.md ← catálogo de todas las páginas (actualizado en cada ingest)
25
+ log.md ← historial cronológico append-only (parseable con grep)
26
+ [topic].md ← página por topic/agente/tecnología/decisión
27
+ outputs/ ← respuestas a queries, análisis, comparativas (referencias al wiki)
28
+ ```
29
+
30
+ **Separación de responsabilidades**:
31
+ - `raw/` → NUNCA modificar. Es la fuente de verdad. El LLM solo lee.
32
+ - `wiki/` → El LLM escribe y mantiene. El usuario lee.
33
+ - `outputs/` → El LLM escribe al responder queries. Se pueden reutilizar como fuentes.
34
+
35
+ ---
36
+
37
+ ## Subcomando: `init`
38
+
39
+ **Uso**: `/swl:wiki init`
40
+
41
+ Inicializa la estructura del wiki para el proyecto actual.
42
+
43
+ ### Pasos
44
+
45
+ 1. **Crear estructura de directorios**:
46
+
47
+ ```bash
48
+ mkdir -p .planning/knowledge/raw
49
+ mkdir -p .planning/knowledge/wiki
50
+ mkdir -p .planning/knowledge/outputs
51
+ echo "✓ Estructura de directorios creada"
52
+ ```
53
+
54
+ 2. **Crear INDEX.md** — catálogo inicial:
55
+
56
+ ```bash
57
+ cat > .planning/knowledge/wiki/INDEX.md << 'EOF'
58
+ ---
59
+ tipo: indice
60
+ actualizado: YYYY-MM-DD
61
+ total_paginas: 0
62
+ ---
63
+
64
+ # Índice del Wiki — [nombre del proyecto]
65
+
66
+ > Catálogo de todas las páginas del wiki. Actualizado automáticamente en cada ingest.
67
+ > Para navegar: leer esta página primero, luego profundizar en las páginas relevantes.
68
+
69
+ ## Páginas por categoría
70
+
71
+ ### Arquitectura y decisiones
72
+ _(vacío — agregar páginas vía `/swl:wiki ingest`)_
73
+
74
+ ### Tecnologías y frameworks
75
+ _(vacío)_
76
+
77
+ ### Investigaciones y análisis
78
+ _(vacío)_
79
+
80
+ ### Procesos y metodología
81
+ _(vacío)_
82
+
83
+ ---
84
+ _Wiki inicializado: [FECHA]. Usar `/swl:wiki ingest <archivo>` para agregar contenido._
85
+ EOF
86
+ ```
87
+
88
+ Reemplazar `YYYY-MM-DD` y `[nombre del proyecto]` con los valores reales.
89
+
90
+ 3. **Crear log.md** — historial cronológico:
91
+
92
+ ```bash
93
+ cat > .planning/knowledge/wiki/log.md << 'EOF'
94
+ # Log del Wiki — Historial cronológico
95
+
96
+ > Registro append-only de operaciones. Parseable:
97
+ > `grep "^## \[" .planning/knowledge/wiki/log.md | tail -10`
98
+ > `grep "ingest" .planning/knowledge/wiki/log.md`
99
+
100
+ EOF
101
+ echo "## [$(date +%Y-%m-%d)] init | Wiki inicializado para el proyecto" >> .planning/knowledge/wiki/log.md
102
+ ```
103
+
104
+ 4. **Crear schema.md** — reglas del wiki para este proyecto:
105
+
106
+ ```bash
107
+ cat > .planning/knowledge/schema.md << 'EOF'
108
+ # Schema del Wiki — Reglas y convenciones
109
+
110
+ ## Qué es este wiki
111
+ Knowledge base del proyecto [NOMBRE]. Captura conocimiento de dominio,
112
+ decisiones técnicas, investigaciones y análisis que deben persistir
113
+ indefinidamente como memoria institucional del proyecto.
114
+
115
+ ## Diferencia con APRENDIZAJES.md
116
+ - APRENDIZAJES.md → patrones de implementación técnica (código, bugs, anti-patrones)
117
+ - wiki/ → conocimiento de dominio, arquitectura conceptual, investigación (negocio, decisiones)
118
+
119
+ ## Estructura de cada página wiki (patrón Compiled Truth)
120
+
121
+ Cada página wiki sigue el patrón **Compiled Truth**: síntesis curada arriba,
122
+ evidencia cronológica abajo. La síntesis es el conocimiento compilado y
123
+ actualizado; la timeline es el registro inmutable de cómo se llegó ahí.
124
+
125
+ Cada archivo en wiki/ debe seguir este formato:
126
+
127
+ ```
128
+ ---
129
+ topic: [nombre del topic]
130
+ categoria: arquitectura | tecnologia | investigacion | proceso
131
+ actualizado: YYYY-MM-DD
132
+ fuentes: [N archivos en raw/ que respaldan esta página]
133
+ confianza: alta | media | baja
134
+ ---
135
+
136
+ # [Título]
137
+
138
+ ## Compiled Truth (síntesis curada)
139
+
140
+ ### Resumen
141
+ [Un párrafo que resume el topic — usado en INDEX.md]
142
+
143
+ ### Estado actual
144
+ [Qué se sabe HOY sobre este topic. Afirmaciones verificadas con fuentes.
145
+ Cada afirmación clave marcada con [F:N] donde N refiere a la fuente en la
146
+ sección Timeline.]
147
+
148
+ ### Decisiones vigentes
149
+ [Decisiones activas sobre este topic, con justificación breve.]
150
+
151
+ ### Relaciones
152
+ - Relacionado con: [[otro-topic]], [[otro-topic-2]]
153
+ - Depende de: [[prerequisito]]
154
+ - Referenciado por: [[topic-que-lo-usa]]
155
+
156
+ ## Timeline (evidencia cronológica)
157
+
158
+ ### [YYYY-MM-DD] [F:1] — [nombre de la fuente]
159
+ - Aportó: [qué conocimiento agregó]
160
+ - Fuente: raw/YYYYMMDD-nombre-fuente.md
161
+
162
+ ### [YYYY-MM-DD] [F:2] — [nombre de la fuente]
163
+ - Aportó: [qué conocimiento agregó]
164
+ - Cambió: [qué afirmación anterior se actualizó o contradijo]
165
+ - Fuente: raw/YYYYMMDD-nombre-fuente.md
166
+ ```
167
+
168
+ **Reglas del patrón Compiled Truth**:
169
+ - La sección **Compiled Truth** es la fuente de verdad actual — se reescribe con cada ingest.
170
+ - La sección **Timeline** es append-only — nunca modificar entradas anteriores.
171
+ - Si una fuente nueva contradice una anterior, actualizar Compiled Truth Y agregar en Timeline con `Cambió:`.
172
+ - El campo `confianza` refleja cuántas fuentes independientes respaldan las afirmaciones: alta (3+), media (2), baja (1).
173
+
174
+ ## Convenciones
175
+ - Links entre páginas: `[[nombre-archivo-sin-extension]]`
176
+ - Una página por topic, no por fuente
177
+ - El LLM actualiza wiki/ — el humano lee y valida
178
+ - raw/ es inmutable — nunca modificar archivos existentes
179
+ - outputs/ contiene respuestas completas — referenciar wiki/ para síntesis
180
+ - log.md es append-only — nunca editar entradas existentes
181
+
182
+ ## Topics prioritarios para este proyecto
183
+ [Completar con los dominios específicos del proyecto — ej: "autenticación", "facturación", "arquitectura de microservicios"]
184
+ EOF
185
+ ```
186
+
187
+ 5. **Confirmación al usuario**:
188
+
189
+ ```
190
+ ✓ Wiki inicializado en .planning/knowledge/
191
+
192
+ Estructura creada:
193
+ raw/ → depositar fuentes crudas aquí
194
+ wiki/ → el LLM mantiene las páginas
195
+ outputs/ → respuestas y análisis guardados
196
+ INDEX.md → catálogo de páginas (actualizado automáticamente)
197
+ log.md → historial cronológico de operaciones
198
+ schema.md → reglas del wiki (editar para personalizar al proyecto)
199
+
200
+ Próximos pasos:
201
+ /swl:wiki ingest <archivo> → ingerir primera fuente
202
+ /swl:wiki query "<pregunta>" → consultar el wiki
203
+ /swl:wiki lint → health check periódico
204
+ ```
205
+
206
+ ---
207
+
208
+ ## Subcomando: `ingest`
209
+
210
+ **Uso**: `/swl:wiki ingest <ruta-o-url>`
211
+
212
+ Ingiere una fuente en el wiki: lee, extrae knowledge, actualiza páginas relevantes,
213
+ actualiza INDEX.md y agrega entrada al log.
214
+
215
+ ### Tipos de fuente soportados
216
+
217
+ | Tipo | Ejemplo | Herramienta |
218
+ |------|---------|-------------|
219
+ | `.md`, `.txt` (local) | `ingest ./notas/reunion.md` | Read |
220
+ | `.pdf` ≤ 20 páginas (local) | `ingest ./docs/guia.pdf` | Read con `pages:` |
221
+ | `.pdf` > 20 págs o con tablas | `ingest ./docs/reporte.pdf` | swl-markitdown |
222
+ | `.docx`, `.pptx` (local) | `ingest ./docs/arquitectura.docx` | swl-markitdown |
223
+ | `.xlsx`, `.xls` (local) | `ingest ./datos/metricas.xlsx` | swl-markitdown |
224
+ | `.ipynb` Jupyter (local) | `ingest ./notebooks/analisis.ipynb` | swl-markitdown |
225
+ | `.zip` con documentos | `ingest ./docs/documentacion.zip` | swl-markitdown |
226
+ | URL estática (HTML simple) | `ingest https://blog.domain.com/post` | WebFetch |
227
+ | URL dinámica (SPA, JS heavy) | `ingest https://spa-site.com/docs` | agent-browser |
228
+ | URL de YouTube | `ingest https://www.youtube.com/watch?v=...` | swl-markitdown |
229
+ | Output de agente previo | `ingest .planning/knowledge/outputs/2026-04-09-investigacion.md` | Read |
230
+
231
+ ### Pasos del ingest
232
+
233
+ **Paso I.1 — Leer la fuente** (detección automática de herramienta):
234
+
235
+ ```bash
236
+ PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
237
+ CLI_MKD="$PROJECT_ROOT/scripts/vendor/markitdown/cli.py"
238
+ FUENTE="[RUTA_O_URL]"
239
+
240
+ # Detectar tipo de fuente y elegir herramienta
241
+ if echo "$FUENTE" | grep -qE "^https?://"; then
242
+ # Fuente web
243
+ if echo "$FUENTE" | grep -qE "youtube\.com|youtu\.be"; then
244
+ # YouTube: usar swl-markitdown para transcripción
245
+ CONTENIDO=$(python "$CLI_MKD" "$FUENTE" 2>/dev/null)
246
+ else
247
+ # HTML: WebFetch primero, agent-browser como fallback
248
+ CONTENIDO=$(# usar WebFetch tool aquí)
249
+ PALABRAS=$(echo "$CONTENIDO" | wc -w)
250
+ if [ "$PALABRAS" -lt 500 ]; then
251
+ CONTENIDO=$(# usar agent-browser como fallback)
252
+ fi
253
+ fi
254
+ else
255
+ # Archivo local: elegir según extensión
256
+ EXT="${FUENTE##*.}"
257
+ case "$EXT" in
258
+ md|txt|markdown)
259
+ # Read tool directamente
260
+ ;;
261
+ pdf)
262
+ # Read para PDFs cortos; swl-markitdown para PDFs con tablas o > 20 págs
263
+ CONTENIDO=$(python "$CLI_MKD" "$FUENTE" 2>/dev/null)
264
+ ;;
265
+ docx|pptx|xlsx|xls|ipynb|epub|zip|csv)
266
+ # swl-markitdown para formatos que Read no soporta
267
+ CONTENIDO=$(python "$CLI_MKD" "$FUENTE" 2>/dev/null)
268
+ if [ -z "$CONTENIDO" ]; then
269
+ echo "Error: swl-markitdown no pudo convertir $FUENTE"
270
+ echo "Verificar: python $CLI_MKD --check"
271
+ exit 1
272
+ fi
273
+ ;;
274
+ *)
275
+ # Intentar con swl-markitdown; si falla, reportar
276
+ CONTENIDO=$(python "$CLI_MKD" "$FUENTE" 2>/dev/null)
277
+ ;;
278
+ esac
279
+ fi
280
+ ```
281
+
282
+ **Paso I.2 — Guardar copia en raw/** (si la fuente es externa o fue convertida):
283
+
284
+ ```bash
285
+ FECHA=$(date +%Y%m%d)
286
+ NOMBRE_LIMPIO=$(echo "[FUENTE]" | sed 's|https://||' | sed 's|[/. ]|-|g' | cut -c1-60)
287
+
288
+ # Para archivos Markdown/texto ya en formato correcto
289
+ cp "[FUENTE_LOCAL]" ".planning/knowledge/raw/${FECHA}-${NOMBRE_LIMPIO}.md"
290
+
291
+ # Para archivos convertidos con swl-markitdown (DOCX, XLSX, PPTX, etc.)
292
+ python "$CLI_MKD" "[FUENTE_LOCAL]" > ".planning/knowledge/raw/${FECHA}-${NOMBRE_LIMPIO}.md" 2>/dev/null
293
+
294
+ # Para URLs (WebFetch o agent-browser)
295
+ # agent-browser get text "article" > ".planning/knowledge/raw/${FECHA}-${NOMBRE_LIMPIO}.md"
296
+ ```
297
+
298
+ **Paso I.3 — Extraer knowledge de la fuente**:
299
+
300
+ Leer la fuente completa e identificar:
301
+ - Topics principales cubiertos
302
+ - Entidades mencionadas (tecnologías, patrones, decisiones, personas)
303
+ - Afirmaciones verificables con su fuente
304
+ - Relaciones con topics que ya existen en el wiki
305
+
306
+ **Paso I.4 — Actualizar páginas wiki existentes**:
307
+
308
+ Para cada topic cubierto en la fuente que ya tiene página en `wiki/`:
309
+ - Leer la página existente
310
+ - **Compiled Truth**: Reescribir la sección "Estado actual" integrando la información nueva con la existente. No eliminar afirmaciones válidas — solo actualizarlas o expandirlas.
311
+ - **Timeline**: Agregar nueva entrada cronológica append-only con `[F:N]` y lo que la fuente aportó. Si contradice algo, incluir `Cambió:` en la entrada.
312
+ - Actualizar la fecha `actualizado` y el campo `fuentes` (incrementar) en el frontmatter
313
+ - Actualizar `confianza`: baja (1 fuente) → media (2) → alta (3+)
314
+ - Si la nueva info contradice la anterior: actualizar Compiled Truth con la versión correcta Y registrar el cambio en Timeline con `Cambió:`
315
+
316
+ **Paso I.5 — Crear páginas wiki nuevas** (para topics que no tienen página):
317
+
318
+ Para cada topic nuevo identificado que justifique su propia página (criterio: ≥3 afirmaciones distintas sobre el mismo topic):
319
+
320
+ ```bash
321
+ cat > ".planning/knowledge/wiki/[nombre-topic].md" << 'EOF'
322
+ ---
323
+ topic: [nombre]
324
+ categoria: [arquitectura|tecnologia|investigacion|proceso]
325
+ actualizado: YYYY-MM-DD
326
+ fuentes: 1
327
+ confianza: baja
328
+ ---
329
+
330
+ # [Título del topic]
331
+
332
+ ## Compiled Truth (síntesis curada)
333
+
334
+ ### Resumen
335
+ [Un párrafo conciso — este texto va al INDEX.md]
336
+
337
+ ### Estado actual
338
+ [Afirmaciones verificadas, marcadas con [F:1] referenciando la timeline.]
339
+
340
+ ### Decisiones vigentes
341
+ [Decisiones activas si aplica, o eliminar sección si no hay.]
342
+
343
+ ### Relaciones
344
+ - Relacionado con: [otros topics del wiki si aplica]
345
+
346
+ ## Timeline (evidencia cronológica)
347
+
348
+ ### [YYYY-MM-DD] [F:1] — [nombre de la fuente]
349
+ - Aportó: [qué conocimiento agregó]
350
+ - Fuente: raw/YYYYMMDD-nombre-fuente.md
351
+ EOF
352
+ ```
353
+
354
+ **Paso I.6 — Actualizar INDEX.md**:
355
+
356
+ Agregar o actualizar la entrada del topic nuevo en INDEX.md:
357
+
358
+ ```bash
359
+ # Agregar al INDEX.md bajo la categoría correspondiente:
360
+ # | [[nombre-topic]] | [resumen de una línea] | [YYYY-MM-DD] |
361
+ ```
362
+
363
+ Estructura de la tabla en INDEX.md:
364
+ ```markdown
365
+ | Página | Resumen | Actualizado |
366
+ |--------|---------|-------------|
367
+ | [[nombre-topic]] | Resumen de una línea | YYYY-MM-DD |
368
+ ```
369
+
370
+ **Paso I.7 — Agregar al log**:
371
+
372
+ ```bash
373
+ echo "## [$(date +%Y-%m-%d)] ingest | [nombre de la fuente] → [N páginas tocadas]" \
374
+ >> .planning/knowledge/wiki/log.md
375
+ echo " Fuentes en raw: $(ls .planning/knowledge/raw/ | wc -l) total" \
376
+ >> .planning/knowledge/wiki/log.md
377
+ ```
378
+
379
+ **Paso I.8 — Reporte al usuario**:
380
+
381
+ ```
382
+ Ingest completado: [nombre de la fuente]
383
+
384
+ Páginas actualizadas: [N]
385
+ - wiki/[topic1].md — [qué se actualizó]
386
+ - wiki/[topic2].md — [qué se actualizó]
387
+
388
+ Páginas nuevas creadas: [N]
389
+ - wiki/[nuevo-topic].md — [descripción]
390
+
391
+ INDEX.md actualizado: [N] entradas
392
+ log.md: entrada agregada
393
+
394
+ [Si hay contradicciones detectadas:]
395
+ ⚠ Contradicciones detectadas — revisar antes de continuar:
396
+ - wiki/[topic].md contradice raw/[fuente-anterior].md en: [claim]
397
+ ```
398
+
399
+ ---
400
+
401
+ ## Subcomando: `query`
402
+
403
+ **Uso**: `/swl:wiki query "<pregunta>"`
404
+
405
+ Responde una pregunta usando el knowledge base del wiki. Guarda la respuesta
406
+ en `outputs/` para que componga en el knowledge base.
407
+
408
+ ### Pasos del query
409
+
410
+ **Paso Q.1 — Leer INDEX.md primero**:
411
+
412
+ ```bash
413
+ cat .planning/knowledge/wiki/INDEX.md
414
+ ```
415
+
416
+ Identificar qué páginas del wiki son relevantes para la pregunta.
417
+ **No cargar todo el wiki** — solo las páginas identificadas en el índice.
418
+
419
+ **Paso Q.2 — Leer páginas relevantes**:
420
+
421
+ Para cada página identificada como relevante:
422
+ ```bash
423
+ cat .planning/knowledge/wiki/[topic].md
424
+ ```
425
+
426
+ Máximo 5-7 páginas por query para mantener el costo bajo.
427
+ Si la pregunta requiere más páginas, descomponerla en sub-preguntas.
428
+
429
+ **Paso Q.3 — Sintetizar respuesta**:
430
+
431
+ Responder la pregunta basándose SOLO en el contenido del wiki.
432
+ Si la pregunta no puede responderse con el wiki actual, indicarlo explícitamente:
433
+ ```
434
+ ⚠ El wiki actual no tiene suficiente información sobre [aspecto].
435
+ Fuentes faltantes sugeridas:
436
+ - [tipo de fuente que respondería esto]
437
+
438
+ ¿Ejecutar investigación con investigador-swl para completar el wiki?
439
+ ```
440
+
441
+ **Paso Q.4 — Guardar output**:
442
+
443
+ ```bash
444
+ FECHA=$(date +%Y-%m-%d)
445
+ PREGUNTA_SLUG=$(echo "[PREGUNTA]" | tr ' ' '-' | tr '[:upper:]' '[:lower:]' | cut -c1-50)
446
+ OUTPUT_PATH=".planning/knowledge/outputs/${FECHA}-query-${PREGUNTA_SLUG}.md"
447
+
448
+ cat > "$OUTPUT_PATH" << 'EOF'
449
+ ---
450
+ fecha: YYYY-MM-DD
451
+ tipo: query
452
+ pregunta: "[PREGUNTA]"
453
+ paginas_consultadas: [LISTA]
454
+ ---
455
+
456
+ # Respuesta: [PREGUNTA]
457
+
458
+ [RESPUESTA COMPLETA]
459
+
460
+ ## Fuentes wiki consultadas
461
+ - [[topic1]]
462
+ - [[topic2]]
463
+ EOF
464
+
465
+ echo "✓ Respuesta guardada en: $OUTPUT_PATH"
466
+ ```
467
+
468
+ **Paso Q.5 — Proponer si el output debe incorporarse al wiki**:
469
+
470
+ ```
471
+ Output guardado en outputs/[archivo].md
472
+
473
+ ¿Incorporar esta respuesta al wiki?
474
+ [S] Sí — es un análisis valioso que debería estar en wiki/
475
+ [N] No — es una respuesta puntual que no suma al wiki
476
+ ```
477
+
478
+ Si el usuario dice Sí: ejecutar ingest sobre el output para integrarlo al wiki.
479
+
480
+ ---
481
+
482
+ ## Subcomando: `lint`
483
+
484
+ **Uso**: `/swl:wiki lint`
485
+
486
+ Health check del wiki. Detecta problemas de calidad antes de que se acumulen.
487
+ Ejecutar mensualmente o después de ingestas masivas.
488
+
489
+ ### Verificaciones del lint
490
+
491
+ **L.1 — Páginas huérfanas** (sin referencias desde otras páginas):
492
+
493
+ ```bash
494
+ echo "=== Páginas huérfanas ==="
495
+ for PAGE in .planning/knowledge/wiki/*.md; do
496
+ NOMBRE=$(basename "$PAGE" .md)
497
+ [ "$NOMBRE" = "INDEX" ] || [ "$NOMBRE" = "log" ] && continue
498
+ REFS=$(grep -r "\[\[$NOMBRE\]\]" .planning/knowledge/wiki/ 2>/dev/null | \
499
+ grep -v "^$PAGE:" | wc -l)
500
+ INDEX_REF=$(grep "\[\[$NOMBRE\]\]" .planning/knowledge/wiki/INDEX.md 2>/dev/null | wc -l)
501
+ TOTAL=$((REFS + INDEX_REF))
502
+ [ "$TOTAL" -eq 0 ] && echo " HUERFANA: $NOMBRE"
503
+ done
504
+ ```
505
+
506
+ **L.2 — Páginas fuera del INDEX.md**:
507
+
508
+ ```bash
509
+ echo "=== Páginas no indexadas ==="
510
+ for PAGE in .planning/knowledge/wiki/*.md; do
511
+ NOMBRE=$(basename "$PAGE" .md)
512
+ [ "$NOMBRE" = "INDEX" ] || [ "$NOMBRE" = "log" ] && continue
513
+ INDEXED=$(grep "\[\[$NOMBRE\]\]" .planning/knowledge/wiki/INDEX.md 2>/dev/null | wc -l)
514
+ [ "$INDEXED" -eq 0 ] && echo " NO INDEXADA: $NOMBRE"
515
+ done
516
+ ```
517
+
518
+ **L.3 — Páginas con frontmatter desactualizado** (no actualizadas en >60 días):
519
+
520
+ ```bash
521
+ echo "=== Páginas posiblemente desactualizadas (>60 días) ==="
522
+ HACE_60=$(date -d "60 days ago" +%Y-%m-%d 2>/dev/null || \
523
+ date -v-60d +%Y-%m-%d 2>/dev/null) # macOS fallback
524
+ grep -r "actualizado:" .planning/knowledge/wiki/*.md 2>/dev/null | \
525
+ awk -F: '{if ($2 < "'$HACE_60'") print " VIEJA: " $1 " (" $2 ")"}'
526
+ ```
527
+
528
+ **L.4 — Contradicciones marcadas pendientes**:
529
+
530
+ ```bash
531
+ echo "=== Contradicciones marcadas sin resolver ==="
532
+ grep -r "\[CONTRADICE:" .planning/knowledge/wiki/*.md 2>/dev/null | \
533
+ sed 's/:.*//' | sort -u
534
+ ```
535
+
536
+ **L.5 — Claims sin fuente en raw/**:
537
+
538
+ ```bash
539
+ echo "=== Páginas wiki sin fuentes en raw/ ==="
540
+ for PAGE in .planning/knowledge/wiki/*.md; do
541
+ NOMBRE=$(basename "$PAGE" .md)
542
+ [ "$NOMBRE" = "INDEX" ] || [ "$NOMBRE" = "log" ] && continue
543
+ FUENTES=$(grep "^- raw/" "$PAGE" 2>/dev/null | wc -l)
544
+ [ "$FUENTES" -eq 0 ] && echo " SIN FUENTE: $NOMBRE"
545
+ done
546
+ ```
547
+
548
+ **L.6 — Tamaño del wiki** (métricas de salud):
549
+
550
+ ```bash
551
+ echo "=== Métricas del wiki ==="
552
+ echo " Páginas totales: $(ls .planning/knowledge/wiki/*.md 2>/dev/null | grep -v "INDEX\|log" | wc -l)"
553
+ echo " Fuentes en raw/: $(ls .planning/knowledge/raw/ 2>/dev/null | wc -l)"
554
+ echo " Outputs guardados: $(ls .planning/knowledge/outputs/ 2>/dev/null | wc -l)"
555
+ echo " Último ingest: $(grep "^## \[" .planning/knowledge/wiki/log.md 2>/dev/null | tail -1)"
556
+ echo " Entradas en log: $(grep "^## \[" .planning/knowledge/wiki/log.md 2>/dev/null | wc -l)"
557
+ ```
558
+
559
+ ### Acciones recomendadas post-lint
560
+
561
+ Basándose en los resultados:
562
+
563
+ | Hallazgo | Acción recomendada |
564
+ |----------|-------------------|
565
+ | Páginas huérfanas | Agregar links desde páginas relacionadas O eliminar si el topic ya no es relevante |
566
+ | Páginas sin indexar | Agregar al INDEX.md bajo la categoría correcta |
567
+ | Páginas >60 días sin actualizar | Revisar si el contenido sigue siendo válido; marcar como `[REVISAR]` si hay dudas |
568
+ | Contradicciones pendientes | Resolver antes del próximo ingest — ver protocolo en `/swl:aprender` Paso 5.5 |
569
+ | Páginas sin fuente | Agregar la fuente a `raw/` O marcar el contenido como `[SIN-FUENTE: verificar]` |
570
+
571
+ ### Reporte del lint
572
+
573
+ ```bash
574
+ # Agregar al log
575
+ echo "## [$(date +%Y-%m-%d)] lint | health check completado" >> .planning/knowledge/wiki/log.md
576
+ echo " Hallazgos: [N huérfanas] huérfanas, [N] sin indexar, [N] contradicciones" \
577
+ >> .planning/knowledge/wiki/log.md
578
+ ```
579
+
580
+ Mostrar al usuario:
581
+ ```
582
+ Wiki health check completado:
583
+
584
+ ✓ Páginas totales: [N]
585
+ ✓ Fuentes en raw/: [N]
586
+
587
+ Hallazgos:
588
+ Páginas huérfanas: [N] → [lista]
589
+ Páginas sin indexar: [N] → [lista]
590
+ Páginas desactualizadas: [N] → [lista]
591
+ Contradicciones: [N] → [lista]
592
+ Páginas sin fuente: [N] → [lista]
593
+
594
+ [Si todo OK:]
595
+ ✓ Wiki en buen estado — sin problemas críticos detectados.
596
+
597
+ [Si hay hallazgos:]
598
+ ¿Quieres que resuelva los hallazgos ahora? [S/N]
599
+ ```
600
+
601
+ ---
602
+
603
+ ## Integración con otros comandos SWL
604
+
605
+ | Comando | Integración con wiki |
606
+ |---------|---------------------|
607
+ | `/swl:aprender` | Paso 5.5 verifica consistencia con wiki antes de persistir; Fase 4.5 ejecuta lint del wiki |
608
+ | `/swl:mapear-codebase` | El mapa del codebase puede ingresarse al wiki como fuente inicial |
609
+ | `investigador-swl` | Guarda outputs en `outputs/` y fuentes en `raw/` automáticamente |
610
+ | `arquitecto-swl` | Los ADRs pueden ingresarse al wiki como páginas de decisión |
611
+ | `/swl:checkpoint` | Puede hacer referencia al INDEX.md del wiki para contexto de sesión |
612
+
613
+ ## Reglas del sistema
614
+
615
+ - `raw/` es **INMUTABLE** — nunca modificar archivos existentes; solo agregar nuevos.
616
+ - `wiki/` es **responsabilidad del LLM** — el humano lee, el LLM escribe y mantiene.
617
+ - `log.md` es **append-only** — nunca editar entradas existentes.
618
+ - Cada ingest debe tocar entre 1 y 15 páginas wiki como máximo. Si una fuente toca más de 15 temas distintos, dividir en múltiples ingests.
619
+ - Un topic que aparece en <3 fuentes no justifica su propia página — agregarlo a una página relacionada.
620
+ - Los outputs en `outputs/` son legibles pero no se indexan automáticamente en INDEX.md — solo si el usuario confirma que deben incorporarse al wiki.