@saulwade/swl-ses 1.6.1 → 1.6.5

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 (85) hide show
  1. package/CLAUDE.md +3 -3
  2. package/README.md +4 -4
  3. package/agentes/_intent-spec.md +73 -0
  4. package/agentes/auto-evolucion-swl.md +24 -0
  5. package/agentes/cloud-infra-swl.md +25 -0
  6. package/agentes/datos-swl.md +23 -0
  7. package/agentes/devops-ci-swl.md +24 -0
  8. package/agentes/gh-fix-ci-swl.md +275 -0
  9. package/agentes/migrador-swl.md +22 -0
  10. package/agentes/nemesis-auditor-swl.md +90 -1
  11. package/agentes/pagos-swl.md +25 -0
  12. package/agentes/release-manager-swl.md +24 -0
  13. package/agentes/sre-swl.md +24 -0
  14. package/comandos/swl/exportar-vault.md +106 -14
  15. package/comandos/swl/nemesis.md +70 -3
  16. package/comandos/swl/planear-fase.md +16 -0
  17. package/comandos/swl/release.md +62 -2
  18. package/comandos/swl/salud.md +32 -0
  19. package/comandos/swl/verificar.md +116 -2
  20. package/habilidades/agent-browser/SKILL.md +111 -4
  21. package/habilidades/agent-deep-links/SKILL.md +148 -0
  22. package/habilidades/aprender-de-git-diff/SKILL.md +288 -0
  23. package/habilidades/backend-async-postgres-testing/SKILL.md +215 -0
  24. package/habilidades/backend-error-design/SKILL.md +221 -0
  25. package/habilidades/browser-interaction-patterns/SKILL.md +514 -0
  26. package/habilidades/browser-research-domains/SKILL.md +635 -0
  27. package/habilidades/changelog-generator/SKILL.md +172 -0
  28. package/habilidades/changelog-generator/scripts/parse-commits.js +354 -0
  29. package/habilidades/devsecops-pipeline-security/SKILL.md +3 -0
  30. package/habilidades/diseno-herramientas-agente/SKILL.md +17 -1
  31. package/habilidades/fastapi-experto/SKILL.md +49 -4
  32. package/habilidades/harness-claude-code/SKILL.md +4 -1
  33. package/habilidades/meta-skills-estandar/SKILL.md +6 -0
  34. package/habilidades/meta-skills-estandar/recursos/skill-judge-rubrica.md +281 -0
  35. package/habilidades/postgresql-experto/SKILL.md +80 -4
  36. package/habilidades/proceso-autoverificacion-evidencias/SKILL.md +258 -0
  37. package/habilidades/proceso-confianza-pre-implementacion/SKILL.md +246 -0
  38. package/habilidades/proceso-ddia-fundamentos/SKILL.md +255 -0
  39. package/habilidades/proceso-ddia-streaming/SKILL.md +231 -0
  40. package/habilidades/proceso-discovery-machote/SKILL.md +157 -0
  41. package/habilidades/proceso-intent-engineering/SKILL.md +269 -0
  42. package/habilidades/proceso-modular-split/SKILL.md +256 -0
  43. package/habilidades/reducir-entropia/SKILL.md +219 -0
  44. package/habilidades/tdd-workflow/SKILL.md +12 -5
  45. package/hooks/extraccion-aprendizajes.js +8 -0
  46. package/hooks/lib/deep-links.js +185 -0
  47. package/hooks/lib/evolution-tracker.js +115 -18
  48. package/hooks/lib/gateway-notify.js +70 -7
  49. package/hooks/lib/task-budget.js +218 -0
  50. package/hooks/validar-intent-spec.js +222 -0
  51. package/manifiestos/hooks-config.json +9 -0
  52. package/manifiestos/modulos.json +22 -3
  53. package/manifiestos/skills-lock.json +1247 -1142
  54. package/package.json +3 -3
  55. package/plugin.json +18 -2
  56. package/reglas/arquitectura.md +38 -0
  57. package/reglas/arreglar-al-detectar.md +93 -0
  58. package/reglas/auditorias-documentales-estructurales.md +38 -0
  59. package/reglas/fragmentos-compartidos.md +26 -0
  60. package/reglas/intent-engineering.md +214 -0
  61. package/reglas/registro-componentes-nuevos.md +52 -0
  62. package/reglas/tests-cleanup.md +220 -0
  63. package/schemas/agent-frontmatter.schema.json +294 -167
  64. package/schemas/agent-message.schema.json +73 -53
  65. package/schemas/agent-output-implementacion.schema.json +114 -85
  66. package/schemas/agent-output-planificacion.schema.json +150 -113
  67. package/schemas/agent-output-review.schema.json +98 -78
  68. package/schemas/diary-entry.schema.json +42 -10
  69. package/schemas/hook-profiles.schema.json +54 -39
  70. package/schemas/hooks-config.schema.json +89 -74
  71. package/schemas/instinct.schema.json +152 -115
  72. package/schemas/modulos.schema.json +38 -29
  73. package/schemas/perfiles.schema.json +36 -28
  74. package/schemas/plugin.schema.json +77 -64
  75. package/schemas/skill-evals.schema.json +119 -95
  76. package/schemas/skill-frontmatter.schema.json +245 -170
  77. package/scripts/generar-inventario.js +3 -1
  78. package/scripts/lib/mcp_config.py +29 -14
  79. package/scripts/lib/schema-version.js +164 -0
  80. package/scripts/mcp-orchestrator.py +153 -131
  81. package/scripts/mcp-pool-manager.py +132 -107
  82. package/scripts/mcp-telemetry.py +139 -120
  83. package/scripts/validar-manifest.js +1 -1
  84. package/scripts/validar.js +3 -2
  85. package/scripts/verificar-release.js +199 -1
@@ -0,0 +1,246 @@
1
+ ---
2
+ name: proceso-confianza-pre-implementacion
3
+ description: >
4
+ Evaluación de confianza pre-implementación con scoring de 5 dimensiones
5
+ (sin duplicación 25%, cumplimiento de arquitectura 25%, docs oficiales 20%,
6
+ referencias OSS 15%, causa raíz identificada 15%) y umbrales 0.9 / 0.7 / <0.7.
7
+ Cargar antes de escribir la primera línea de una feature, refactor o fix no
8
+ trivial — especialmente cuando la tarea cruza >1 archivo o introduce un patrón
9
+ nuevo. Adaptación del patrón ConfidenceChecker de SuperClaude_Framework.
10
+ version: "1.0.0"
11
+ herramientasPermitidas: [Read, Grep, Glob, Bash]
12
+ exclusiones:
13
+ - "No cargar para fixes triviales (typo, rename, comentario) — el overhead supera el valor."
14
+ - "No cargar cuando ya se ejecutó `/swl:discutir-fase` y existe `CONTEXTO.md` con decisiones cerradas — ese flujo ya cubre la verificación previa."
15
+ - "No cargar para tareas exploratorias (`/swl:explorar`, scouting de codebase) donde el objetivo es entender, no implementar."
16
+ - "No cargar para fixes urgentes de producción con incidente activo — aplicar fix mínimo, este protocolo queda para el post-mortem."
17
+ evolvable: true
18
+ ---
19
+
20
+ # Habilidad: Evaluación de confianza pre-implementación
21
+
22
+ ## Propósito
23
+
24
+ Detener el "wrong-direction execution" antes de empezar. El costo de implementar
25
+ una solución incorrecta supera siempre el costo de la verificación previa: el
26
+ material analizado (SuperClaude_Framework `pm_agent/confidence.py`) reporta
27
+ ROI **25-250×** en token savings cuando este check detiene una iteración
28
+ equivocada. SWL ya tiene la regla `analisis-previo-tareas-grandes.md` con el
29
+ espíritu correcto; este skill la operacionaliza con scoring objetivo y umbrales
30
+ de acción.
31
+
32
+ ## Cuándo cargar
33
+
34
+ - Antes de escribir la primera línea de una feature nueva > 50 LOC.
35
+ - Antes de un refactor que cruza >1 archivo o >1 módulo.
36
+ - Antes de fix de bug donde la causa raíz no está identificada todavía.
37
+ - Antes de adoptar una librería externa nueva.
38
+ - Cuando el usuario dice "implementa X" sin contexto previo y el agente
39
+ no tiene certeza ≥90% de qué hacer.
40
+
41
+ ## Cuándo NO cargar
42
+
43
+ Listado en el campo `exclusiones` del frontmatter — incluye fixes triviales,
44
+ fases con `CONTEXTO.md` ya cerrado, tareas exploratorias e incidentes
45
+ urgentes.
46
+
47
+ ---
48
+
49
+ ## Protocolo de evaluación (5 checks ponderados)
50
+
51
+ Antes de tocar código, el agente responde estos 5 checks. Cada uno aporta una
52
+ porción del score total (0.0 a 1.0).
53
+
54
+ ### Check 1 — Sin duplicación (peso 0.25)
55
+
56
+ ¿Existe ya en el codebase una función, clase, módulo o utilidad que resuelva
57
+ el mismo problema?
58
+
59
+ - Ejecutar `Grep` con palabras clave del nombre tentativo de la nueva entidad.
60
+ - Revisar `INVENTARIO.md` para componentes SWL ya registrados.
61
+ - Buscar imports/usos que sugieran que ya hay solución.
62
+
63
+ **Pasa** si la búsqueda confirma que no existe equivalente o el equivalente
64
+ está deprecado/marcado para eliminación. **No pasa** si hay duda o si existe
65
+ algo que con extensión menor cubriría el caso.
66
+
67
+ ### Check 2 — Cumplimiento de arquitectura (peso 0.25)
68
+
69
+ ¿La solución propuesta usa el stack y los patrones ya definidos del proyecto?
70
+
71
+ - Leer `CLAUDE.md` del proyecto (sección "Stack" y "Convenciones").
72
+ - Revisar ADRs vigentes (`docs/adr/` o `.planning/adrs/`).
73
+ - Verificar reglas globales (`~/.claude/rules/`) y del proyecto (`reglas/`).
74
+
75
+ **Pasa** si la solución se alinea con el stack declarado y no contradice
76
+ ningún ADR vigente. **No pasa** si introduce dependencia nueva no justificada,
77
+ si rompe una invariante documentada o si elige un patrón distinto al que el
78
+ proyecto ya estandariza para el mismo problema.
79
+
80
+ ### Check 3 — Documentación oficial verificada (peso 0.20)
81
+
82
+ ¿Se consultó documentación oficial actualizada de la librería/API/patrón
83
+ relevante?
84
+
85
+ - Para librerías de terceros: regla `usar-context7.md` obliga consultar
86
+ Context7 antes de generar código que las use.
87
+ - Para APIs internas: leer el módulo objetivo, no asumir su contrato por
88
+ el nombre.
89
+ - Para patrones del framework: documentación oficial vigente (no copiar
90
+ ejemplos de StackOverflow sin verificar versión).
91
+
92
+ **Pasa** si la doc oficial está leída y la API/patrón coincide con lo
93
+ planeado. **No pasa** si se asume la API por memoria del modelo o si la
94
+ documentación está desactualizada.
95
+
96
+ ### Check 4 — Referencia OSS funcional (peso 0.15)
97
+
98
+ ¿Existe una implementación open-source madura que resuelva el problema y
99
+ se haya consultado?
100
+
101
+ - Buscar en repos de referencia (`temp/`, `respositorios-git/`, GitHub).
102
+ - Si hay implementación OSS validada, su patrón es la base; SWL adapta,
103
+ no reescribe.
104
+ - Si no hay OSS de referencia, documentar **por qué** se prefiere solución
105
+ custom.
106
+
107
+ **Pasa** si se identificó OSS de referencia o se justificó la ausencia.
108
+ **No pasa** si simplemente no se buscó.
109
+
110
+ ### Check 5 — Causa raíz identificada (peso 0.15)
111
+
112
+ Aplicable a bugfixes y refactors motivados por un problema observado.
113
+ ¿Se identificó la causa raíz con certeza, o se está parchando un síntoma?
114
+
115
+ - Reproducir el bug en localhost o con test mínimo.
116
+ - Aislar la línea/función responsable, no solo el módulo.
117
+ - Verificar que la solución elimina la causa, no esconde el síntoma.
118
+
119
+ **Pasa** si la causa raíz está localizada con archivo:línea o función
120
+ específica, sin lenguaje vago ("posiblemente", "creo que", "tal vez").
121
+ **No pasa** si hay incertidumbre o si el fix es "agregar try/catch para que
122
+ no falle".
123
+
124
+ Para tareas que no son bugfix (features nuevas, refactors planeados),
125
+ este check se da por pasado automáticamente — pero documentar en el
126
+ output que "no aplica causa raíz, es trabajo nuevo".
127
+
128
+ ---
129
+
130
+ ## Umbrales y acción recomendada
131
+
132
+ Tras sumar los pesos de los checks que pasan:
133
+
134
+ | Score | Nivel | Acción |
135
+ |---|---|---|
136
+ | **≥ 0.9** | Alta confianza | Proceder con la implementación. La inversión de los checks ya está pagada. |
137
+ | **0.7 – 0.89** | Media confianza | **No implementar todavía**. Presentar al usuario las opciones específicas que cierran los gaps. Esperar elección. |
138
+ | **< 0.7** | Baja confianza | **DETENERSE**. La investigación está incompleta. Volver a investigar — no implementar bajo este nivel. |
139
+
140
+ El skill `analisis-previo-tareas-grandes` aplica cuando el score es 0.7-0.89
141
+ y la tarea es grande: produce tabla comparativa + 3 opciones para el usuario.
142
+
143
+ ---
144
+
145
+ ## Formato de reporte obligatorio
146
+
147
+ Antes de cualquier escritura de código, emitir al usuario (o registrar en
148
+ `.planning/sessions/`) el siguiente formato:
149
+
150
+ ```
151
+ ### Confianza pre-implementación
152
+
153
+ - ✅/❌ Check 1 — Sin duplicación: <descripción de qué se buscó y resultado>
154
+ - ✅/❌ Check 2 — Arquitectura: <ADRs/reglas/stack verificados>
155
+ - ✅/❌ Check 3 — Docs oficiales: <fuente consultada o "no aplica">
156
+ - ✅/❌ Check 4 — Referencia OSS: <repo/módulo de referencia o justificación>
157
+ - ✅/❌ Check 5 — Causa raíz: <archivo:línea o "no aplica (trabajo nuevo)">
158
+
159
+ **Score**: 0.XX
160
+ **Nivel**: Alto / Medio / Bajo
161
+ **Acción**: <Procedo / Presento opciones / Detengo y re-investigo>
162
+ ```
163
+
164
+ El reporte NO es opcional cuando el skill se carga. Si el agente decide
165
+ saltarlo "por brevedad", está violando el contrato del skill — y la regla
166
+ `debatir-antes-de-aceptar.md` exige justificar la omisión, no esquivarla.
167
+
168
+ ---
169
+
170
+ ## Reglas obligatorias
171
+
172
+ 1. **Score honesto**: no inflar checks "para superar el umbral". Si un check
173
+ no se hizo, marcar ❌. **Por qué**: inflar destruye el ROI del 25-250× —
174
+ un score artificial alto hace que el agente proceda con baja confianza
175
+ real, y el costo de la corrección posterior anula el ahorro.
176
+
177
+ 2. **Reportar antes de implementar**: el reporte se entrega ANTES del primer
178
+ `Write` o `Edit`, no después. **Por qué**: si se reporta después es
179
+ justificación, no verificación.
180
+
181
+ 3. **No saltar checks "porque obvio"**: el Check 1 (duplicación) es el más
182
+ tentador de saltar porque "obvio que no existe". `Grep` es de 2 segundos;
183
+ la duplicación silenciosa cuesta horas (ver `arreglar-al-detectar.md`).
184
+
185
+ 4. **Lenguaje específico, no vago**: cuando se marca ✅ un check, decir QUÉ
186
+ se verificó. "Grep en `backend/auth/` con patrón `verifyToken` — 0
187
+ resultados" es válido. "Revisé que no existe" no.
188
+
189
+ 5. **Si el usuario insiste en proceder con score bajo**, la regla
190
+ `debatir-antes-de-aceptar.md` aplica: presentar el costo conocido,
191
+ esperar confirmación informada, registrar la excepción en la sesión.
192
+ No proceder silenciosamente.
193
+
194
+ ---
195
+
196
+ ## Relación con otras herramientas SWL
197
+
198
+ - **Skill `analisis-previo-tareas-grandes` (regla global)**: cubre el caso
199
+ específico de tarea grande con score 0.7-0.89. Produce tabla comparativa
200
+ y 3 opciones. Este skill (confianza pre-implementación) es más general:
201
+ cubre cualquier tarea no trivial.
202
+ - **Skill `proceso-autoverificacion-evidencias`**: aplica al CIERRE del
203
+ trabajo (post-implementación), con las Four Questions. Este skill aplica
204
+ al INICIO.
205
+ - **Skill `discutir-fase`**: cuando hay HOJA-RUTA.md y CONTEXTO.md formal,
206
+ ese flujo absorbe el rol de este skill — no cargar ambos.
207
+ - **Regla `verificar-citas-normativas.md`**: aplica a citas verificables
208
+ durante el trabajo. Este skill aplica al inicio del trabajo.
209
+ - **Skill `confidence-check` (oficial SuperClaude)**: si SuperClaude está
210
+ instalado en el sistema, el skill oficial coexiste. Este skill SWL es
211
+ la versión integrada con el resto del flujo SWL (CONTEXTO.md, ADRs,
212
+ `_userland/`, `arreglar-al-detectar.md`). Preferir el SWL dentro de
213
+ proyectos SWL.
214
+
215
+ ---
216
+
217
+ ## Ejemplo de uso
218
+
219
+ Usuario: *"implementa un endpoint POST /facturas/cancelar"*.
220
+
221
+ Agente carga este skill antes del primer `Write`:
222
+
223
+ ```
224
+ ### Confianza pre-implementación
225
+
226
+ - ✅ Check 1 — Sin duplicación: Grep "cancelar.*factura" en backend/app/ → 0 resultados.
227
+ No existe endpoint equivalente. INVENTARIO.md confirma sin overlap.
228
+ - ✅ Check 2 — Arquitectura: CLAUDE.md confirma FastAPI + SQLAlchemy async.
229
+ ADR-0008 establece convención de endpoints "/recursos/accion" para
230
+ acciones que no mapean a CRUD. Esta solución cumple.
231
+ - ✅ Check 3 — Docs oficiales: leí docs/endpoints-existentes/facturas.md;
232
+ el modelo Factura ya tiene método `puede_cancelarse()`.
233
+ - ❌ Check 4 — Referencia OSS: no busqué; es lógica de negocio interna.
234
+ Justificación: no aplica patrón OSS estándar — es flujo del dominio.
235
+ - ✅ Check 5 — Causa raíz: no aplica (trabajo nuevo, no bugfix).
236
+
237
+ **Score**: 0.85 (5×0.25+0.20+0+0.15 = pasan 4 de 5, falla Check 4
238
+ con justificación aceptable)
239
+ **Nivel**: Medio (0.7-0.89)
240
+ **Acción**: Presento opciones al usuario antes de implementar.
241
+
242
+ ¿Procedo con la implementación directa, o prefieres que valide primero
243
+ con un test de aceptación escrito (TDD)?
244
+ ```
245
+
246
+ El usuario decide, no el agente. Score medio → preguntar.
@@ -0,0 +1,255 @@
1
+ ---
2
+ name: proceso-ddia-fundamentos
3
+ description: >
4
+ Conceptos fundamentales del libro "Designing Data-Intensive Applications" de
5
+ Martin Kleppmann aplicables a sistemas no-distribuidos (como SWL): Cap 1
6
+ Reliability/Scalability/Maintainability como framework de evaluación, Cap 4
7
+ Schema Evolution con backward/forward compatibility, Cap 12 End-to-End
8
+ Argument y Trust-but-Verify. Cargar al diseñar manifiestos versionados,
9
+ evaluar arquitectura de un módulo, decidir dónde validar correctitud.
10
+ when_to_use: >
11
+ Usar cuando el usuario menciona schema versioning, backward/forward compat,
12
+ end-to-end verification, trust but verify, reliability scalability
13
+ maintainability, RSM framework, Operability Simplicity Evolvability,
14
+ schema-evolution, evaluar arquitectura, decidir dónde validar.
15
+ ---
16
+
17
+ # DDIA Fundamentos — RSM, Schema Evolution, End-to-End
18
+
19
+ Adaptado de Martin Kleppmann, *"Designing Data-Intensive Applications"*
20
+ (O'Reilly, 2017). Skill cubre los tres ejes del libro que aplican a SWL:
21
+
22
+ - **Capítulo 1** — Reliability, Scalability, Maintainability como framework.
23
+ - **Capítulo 4** — Schema Evolution (back/forward compatibility).
24
+ - **Capítulo 12** — End-to-End Argument + Trust-but-Verify.
25
+
26
+ Los demás capítulos del libro (2-3 data models / storage, 5-10 distributed
27
+ systems) tratan dominios que SWL no es (no es BD, no es sistema distribuido).
28
+ Se descartan por filtro de dominio (regla `arquitectura.md`).
29
+
30
+ ## Cuándo cargar
31
+
32
+ - Diseñar un schema nuevo (manifest, frontmatter, JSON Schema) que
33
+ evolucionará en el tiempo.
34
+ - Auditar un módulo SWL para evaluar Reliability/Scalability/Maintainability.
35
+ - Decidir dónde poner una validación: en cada capa o solo end-to-end.
36
+ - Resolver una duda sobre "¿esto se rompe si actualizo el sistema?" — es
37
+ pregunta de schema compatibility.
38
+
39
+ ## Cuándo NO cargar
40
+
41
+ - Discusiones sobre replication, partitioning, consenso (Paxos/Raft) — esos
42
+ capítulos DDIA no aplican a SWL.
43
+ - Streaming/event sourcing avanzado — cargar `Skill("proceso-ddia-streaming")`.
44
+ - Optimización puntual de query SQL — cargar `Skill("performance-baseline")`.
45
+
46
+ ---
47
+
48
+ ## Parte 1 — Reliability, Scalability, Maintainability (RSM)
49
+
50
+ Cita textual del libro (DDIA p.18, línea 1411-1453):
51
+
52
+ > "It is well known that the majority of the cost of software is not in its
53
+ > initial development, but in its ongoing maintenance — fixing bugs, keeping
54
+ > its systems operational, investigating failures, adapting it to new
55
+ > platforms, modifying it for new use cases, repaying technical debt, and
56
+ > adding new features."
57
+
58
+ ### Las 3 dimensiones del RSM
59
+
60
+ **Reliability** — el sistema sigue funcionando correctamente bajo:
61
+ - Hardware faults
62
+ - Software errors
63
+ - Human errors
64
+
65
+ Tipos de respuesta:
66
+ - **Fault-tolerant**: el sistema absorbe la falla sin propagarla.
67
+ - **Resilient**: degrada con gracia, no en cascada.
68
+
69
+ **Aplicación a SWL**: hooks bloqueantes (`calidad-pre-commit`,
70
+ `escaneo-secretos`) son fault-tolerance. Las escrituras atómicas
71
+ (`hooks/lib/atomic-write.js`) son resilience contra crashes durante write.
72
+
73
+ **Scalability** — cómo cambia el rendimiento cuando crece la carga:
74
+ - Describir **carga** (parámetros: throughput, concurrent users, etc.)
75
+ - Describir **rendimiento** (latencia: p50, p95, p99)
76
+
77
+ **Aplicación a SWL**: las métricas `Skill("performance-baseline")` siguen
78
+ este modelo. Carga = sesiones concurrentes, archivos por proyecto, agentes
79
+ en cadena. Rendimiento = latencia de hooks, tiempo de respuesta de
80
+ validadores.
81
+
82
+ **Maintainability** — tres principios de diseño del libro:
83
+
84
+ > "Operability: Make it easy for operations teams to keep the system running
85
+ > smoothly.
86
+ > Simplicity: Make it easy for new engineers to understand the system, by
87
+ > removing as much complexity as possible from the system. (Note this is
88
+ > not the same as simplicity of the user interface.)
89
+ > Evolvability: Make it easy for engineers to make changes to the system in
90
+ > the future, adapting it for unanticipated use cases as requirements
91
+ > change. Also known as extensibility, modifiability, or plasticity."
92
+ > (DDIA p.18-19, líneas 1435-1449)
93
+
94
+ **Aplicación a SWL**:
95
+
96
+ | Principio DDIA | Implementación SWL |
97
+ |---|---|
98
+ | Operability | `/swl:salud`, `/swl:dashboard`, `/swl:doctor`, runbooks |
99
+ | Simplicity | Skills ≤300 líneas, módulos profundos (Ousterhout), zero-deps en `hooks/lib/` |
100
+ | Evolvability | ADRs versionados, schemas opcionales aditivos, fragments compartidos |
101
+
102
+ ### Cómo usar RSM como rúbrica de evaluación
103
+
104
+ Antes de declarar un módulo "listo", pregúntate:
105
+
106
+ 1. **Reliability**: ¿qué pasa si una entrada inesperada llega? ¿Si un hook
107
+ externo falla? ¿Si el filesystem se llena?
108
+ 2. **Scalability**: ¿el módulo escala con el tamaño del proyecto del
109
+ usuario? Si tiene 1000 archivos vs 10, ¿degrada linealmente o se
110
+ cuadratiza?
111
+ 3. **Maintainability** (los 3 sub-principios):
112
+ - ¿Un operario nuevo puede operarlo sin leer todo el código?
113
+ - ¿Un ingeniero nuevo puede entenderlo sin un curso?
114
+ - ¿Un cambio de requisito se acomoda sin reescribir?
115
+
116
+ Si la respuesta es "no" a más de uno, el módulo necesita refactor antes de
117
+ release.
118
+
119
+ ---
120
+
121
+ ## Parte 2 — Schema Evolution (Cap 4)
122
+
123
+ Cita textual del libro (DDIA p.112, línea 5706-5719):
124
+
125
+ > "Backward compatibility — Newer code can read data that was written by
126
+ > older code.
127
+ >
128
+ > Forward compatibility — Older code can read data that was written by
129
+ > newer code.
130
+ >
131
+ > Backward compatibility is normally not hard to achieve: as author of the
132
+ > newer code, you know the format of data written by older code, and so
133
+ > you can explicitly handle it (if necessary by simply keeping the old code
134
+ > to read the old data). Forward compatibility can be trickier, because it
135
+ > requires older code to ignore additions made by a newer version of the
136
+ > code."
137
+
138
+ ### Las 2 direcciones de compatibilidad
139
+
140
+ Cuando un schema evoluciona, hay dos preguntas distintas:
141
+
142
+ | Pregunta | Tipo | Difficulty |
143
+ |---|---|---|
144
+ | ¿Código nuevo lee datos viejos? | Backward | Fácil |
145
+ | ¿Código viejo lee datos nuevos? | Forward | Más difícil |
146
+
147
+ **Backward compat es fácil**: el código nuevo conoce ambas versiones del
148
+ schema, puede manejar los dos formatos.
149
+
150
+ **Forward compat es difícil**: el código viejo NO sabe que existe el campo
151
+ nuevo. Para que funcione, el código viejo debe **ignorar campos
152
+ desconocidos** sin romperse.
153
+
154
+ ### Aplicación a schemas SWL
155
+
156
+ SWL tiene 14 archivos `schemas/*.schema.json`. Reglas operativas:
157
+
158
+ 1. **Campos nuevos siempre opcionales**: agregar `myField: { type: "..." }`
159
+ sin marcarlo `required`. Código viejo lo ignora (forward-compat OK).
160
+ Código nuevo lo usa si está presente (backward-compat OK).
161
+
162
+ 2. **NUNCA renombrar campos en MINOR/PATCH**: rename = breaking. Si hay
163
+ que renombrar, mantener ambos durante 1 release (deprecación) y
164
+ eliminar en el MAJOR siguiente.
165
+
166
+ 3. **NUNCA cambiar tipo de un campo en MINOR/PATCH**: cambiar `string` →
167
+ `array` rompe ambas direcciones. Es MAJOR.
168
+
169
+ 4. **Agregar enum value es compatible**: si `nivelRiesgo` acepta
170
+ `[BAJO, MEDIO, ALTO]`, agregar `CRÍTICO` es backward-compat (código
171
+ nuevo lo entiende, código viejo lo rechaza pero no se rompe).
172
+
173
+ 5. **Eliminar enum value es breaking**: código nuevo rechaza algo que
174
+ código viejo escribía.
175
+
176
+ ### Detección de breaking changes
177
+
178
+ Helper `scripts/lib/schema-version.js` (creado en F4) implementa estas
179
+ reglas. Uso esperado:
180
+
181
+ ```js
182
+ const { verificarCompatibilidad } = require('./scripts/lib/schema-version');
183
+ const r = verificarCompatibilidad(documento, schema);
184
+ // r = { compatible: bool, modo: "backward"|"forward"|"none", advertencias }
185
+ ```
186
+
187
+ Tres modos según versiones:
188
+ - Doc 1.0.0 + Schema 1.0.0 → `modo: "none"` (idénticas).
189
+ - Doc 1.0.0 + Schema 1.1.0 → `modo: "forward"` (dato viejo, código nuevo).
190
+ - Doc 1.1.0 + Schema 1.0.0 → `modo: "backward"` (dato nuevo, código viejo).
191
+ - Doc 2.0.0 + Schema 1.0.0 → `compatible: false` (MAJOR rompe).
192
+
193
+ ---
194
+
195
+ ## Parte 3 — End-to-End Argument (Cap 12)
196
+
197
+ Concepto del libro: la verificación de correctitud debe vivir en la
198
+ frontera del sistema (end-to-end), no en cada capa intermedia.
199
+
200
+ > "The End-to-End Argument for Databases" (DDIA p.516, sección referenciada)
201
+
202
+ ### El principio aplicado
203
+
204
+ Si validas en cada capa intermedia:
205
+ - Capa 1: valida → pasa
206
+ - Capa 2: valida → pasa
207
+ - Capa 3: valida → pasa
208
+ - Resultado: dato corrupto entregado al usuario porque ninguna capa
209
+ verificó la **invariante de negocio** completa.
210
+
211
+ Si validas end-to-end:
212
+ - Capa 1, 2, 3: hacen su trabajo sin validar
213
+ - Frontera del sistema: verifica la invariante completa
214
+ - Resultado: si falla, se detecta antes de entregar al usuario.
215
+
216
+ ### Aplicación a SWL
217
+
218
+ - `/swl:verificar` con goal-backward 4 niveles es end-to-end.
219
+ - Hooks de validación intermedios (`calidad-pre-commit`,
220
+ `escaneo-secretos`) son fault-tolerance, no end-to-end. Detectan
221
+ problemas obvios temprano para reducir blast radius — no reemplazan la
222
+ verificación end-to-end.
223
+ - Las dos capas son complementarias: hooks rápidos en cada step, verifier
224
+ end-to-end al cierre de fase.
225
+
226
+ ### Trust-but-Verify (Cap 12, p.528)
227
+
228
+ El sistema debe **confiar provisionalmente** en sus componentes
229
+ (hooks pasan → asumimos correcto) pero **verificar** la invariante final
230
+ con evidencia, no con auto-reporte de los componentes.
231
+
232
+ Aplicación SWL: regla `verificar-citas-normativas.md` aplica este
233
+ principio a citas archivo:línea — un sub-agente reportó "está
234
+ implementado en X:42"; el padre verifica con `Read`+`grep` antes de
235
+ aceptar.
236
+
237
+ ---
238
+
239
+ ## Resumen — qué se llevó SWL del libro
240
+
241
+ | Concepto DDIA | Dónde vive en SWL |
242
+ |---|---|
243
+ | Reliability/Scalability/Maintainability como framework | Este skill como rúbrica de evaluación |
244
+ | Operability / Simplicity / Evolvability | Skills ≤300 líneas + observabilidad-swl + ADRs |
245
+ | Backward / Forward compat | `$schemaVersion` + `scripts/lib/schema-version.js` (F4) |
246
+ | End-to-End Argument | `/swl:verificar` goal-backward |
247
+ | Trust-but-Verify | regla `verificar-citas-normativas.md` |
248
+
249
+ ## Origen
250
+
251
+ Skill creado el 2026-05-18 como parte de Opción B de integración
252
+ `temp/Designing Data Intensive Applications by Martin Kleppmann.md`. Ver
253
+ ADR-0025 para la decisión de scope. Skill hermano:
254
+ `proceso-ddia-streaming` (Cap 11 event sourcing aplicado a
255
+ `evolucion/*.jsonl`).