@saulwade/swl-ses 1.3.8 → 1.4.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 (128) hide show
  1. package/CLAUDE.md +12 -4
  2. package/README.md +1 -1
  3. package/bin/swl-mcp-server.js +187 -187
  4. package/bin/swl-webhook-server.js +198 -0
  5. package/comandos/swl/.evolved.json +22 -22
  6. package/comandos/swl/adoptar-proyecto.md +21 -1
  7. package/comandos/swl/claudemd.md +14 -1
  8. package/comandos/swl/contribuir.md +233 -233
  9. package/comandos/swl/exportar-vault.md +108 -0
  10. package/comandos/swl/nuevo-proyecto.md +24 -2
  11. package/gateway/adapters/base.js +109 -0
  12. package/gateway/adapters/discord.js +167 -0
  13. package/gateway/adapters/email.js +221 -0
  14. package/gateway/adapters/slack.js +192 -0
  15. package/gateway/adapters/telegram.js +183 -0
  16. package/gateway/adapters/webhook.js +113 -0
  17. package/gateway/adapters/whatsapp.js +214 -0
  18. package/gateway/agent-executor.js +322 -0
  19. package/gateway/command-relay.js +271 -0
  20. package/gateway/cron/jobs.js +263 -0
  21. package/gateway/cron/scheduler.js +322 -0
  22. package/gateway/cron/store.js +335 -0
  23. package/gateway/index.js +320 -0
  24. package/gateway/lib/event-channel.js +191 -0
  25. package/gateway/session.js +131 -0
  26. package/gateway/webhook-server.js +324 -0
  27. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  28. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  29. package/habilidades/build-errors-nextjs/SKILL.md +55 -1
  30. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  31. package/habilidades/doubt-driven-review/SKILL.md +171 -171
  32. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  33. package/habilidades/eval-framework/SKILL.md +212 -212
  34. package/habilidades/extractor-de-aprendizajes/SKILL.md +20 -10
  35. package/habilidades/harness-claude-code/SKILL.md +299 -299
  36. package/habilidades/infra-github-actions/SKILL.md +166 -166
  37. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  38. package/habilidades/manejo-errores/.evolved.json +8 -8
  39. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  40. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  41. package/habilidades/nextjs-testing/SKILL.md +89 -5
  42. package/habilidades/node-experto/SKILL.md +37 -1
  43. package/habilidades/patrones-python/SKILL.md +229 -229
  44. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  45. package/habilidades/planear-fase/SKILL.md +319 -319
  46. package/habilidades/react-experto/SKILL.md +45 -4
  47. package/habilidades/release-semver/.evolved.json +8 -8
  48. package/habilidades/tdd-workflow/SKILL.md +36 -4
  49. package/habilidades/testing-python/SKILL.md +340 -340
  50. package/hooks/claudemd-bloat-detector.js +161 -161
  51. package/hooks/inyeccion-contexto.js +8 -3
  52. package/hooks/lib/agent-routing.js +107 -107
  53. package/hooks/lib/auto-consolidator.js +335 -335
  54. package/hooks/lib/error-classifier.js +308 -308
  55. package/hooks/lib/merkle-audit.js +96 -96
  56. package/hooks/lib/provenance-tracker.js +191 -191
  57. package/hooks/lib/rate-limit-ip.js +177 -0
  58. package/hooks/lib/rate-limit-tracker.js +253 -253
  59. package/hooks/lib/resource-quota.js +122 -122
  60. package/hooks/lib/retry-jitter.js +165 -165
  61. package/hooks/lib/skill-auditor.js +588 -588
  62. package/hooks/lib/sync-status.js +228 -228
  63. package/hooks/lib/taint-tracker.js +107 -107
  64. package/hooks/lib/text-similarity.js +241 -241
  65. package/hooks/lib/toon-compressor.js +245 -245
  66. package/hooks/lib/webhook-dedup.js +184 -0
  67. package/hooks/lib/webhook-verify.js +123 -0
  68. package/hooks/proteccion-rutas.js +120 -15
  69. package/hooks/registro-turnos.js +209 -209
  70. package/hooks/sugerir-regenerar-inventario.js +170 -170
  71. package/hooks/validar-formato-post-subagente.js +140 -140
  72. package/hooks/validar-memoria-hook.js +218 -218
  73. package/instintos/prompt-appendices.yaml +57 -57
  74. package/manifiestos/agent-output-schemas.json +57 -57
  75. package/manifiestos/modulos.json +1 -0
  76. package/manifiestos/skills-lock.json +34 -34
  77. package/package.json +5 -3
  78. package/plantillas/auditor-veto-template.md +105 -105
  79. package/plantillas/github-workflows/README.md +47 -47
  80. package/plantillas/github-workflows/release-please.yml +44 -44
  81. package/plantillas/github-workflows/swl-ci.yml +107 -107
  82. package/plantillas/github-workflows/swl-security.yml +51 -51
  83. package/plugin.json +1 -1
  84. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  85. package/reglas/arreglar-al-detectar.md +147 -147
  86. package/reglas/fragmentos-compartidos.md +152 -152
  87. package/reglas/harness-claude-code.md +213 -213
  88. package/reglas/usar-context7.md +226 -226
  89. package/reglas/usar-sistema-swl.md +251 -0
  90. package/schemas/diary-entry.schema.json +80 -80
  91. package/scripts/benchmark-memoria.js +167 -167
  92. package/scripts/comandos/skills.js +251 -2
  93. package/scripts/configurar-branch-protection.js +418 -418
  94. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  95. package/scripts/field-report.js +199 -199
  96. package/scripts/generar-checklists-consolidados.js +273 -273
  97. package/scripts/generar-inventario.js +420 -420
  98. package/scripts/generar-matriz-lenguajes.js +271 -271
  99. package/scripts/lib/artefactos-python.js +43 -43
  100. package/scripts/lib/benchmark-metrics.js +160 -160
  101. package/scripts/lib/budget-enforcer.js +252 -252
  102. package/scripts/lib/configurar-ci.js +380 -380
  103. package/scripts/lib/contadores-inventario.js +217 -217
  104. package/scripts/lib/detectar-stack-detallado.js +307 -307
  105. package/scripts/lib/diary-entry.js +234 -234
  106. package/scripts/lib/eval-metrics-store.js +218 -218
  107. package/scripts/lib/eval-quality.js +171 -171
  108. package/scripts/lib/eval-schemas.js +144 -144
  109. package/scripts/lib/eval-self-correct.js +106 -106
  110. package/scripts/lib/eval-validator.js +185 -185
  111. package/scripts/lib/jaccard-similarity.js +98 -98
  112. package/scripts/lib/longmemeval-runner.js +125 -125
  113. package/scripts/lib/npm-version.js +261 -261
  114. package/scripts/lib/paquetes-conocidos.js +50 -50
  115. package/scripts/lib/prompt-builder.js +264 -264
  116. package/scripts/lib/rrf-fusion.js +175 -175
  117. package/scripts/lib/scoring-instintos.js +277 -277
  118. package/scripts/lib/semantic-search.js +252 -252
  119. package/scripts/limpiar-artefactos-python.js +131 -131
  120. package/scripts/mcp-server/README.md +128 -128
  121. package/scripts/mcp-server/handlers.js +206 -206
  122. package/scripts/migrar-csv-a-array.js +168 -168
  123. package/scripts/migrar-fase-dominio.js +201 -201
  124. package/scripts/publicar.js +511 -511
  125. package/scripts/run-eval.js +141 -141
  126. package/scripts/validar-manifest.js +195 -195
  127. package/scripts/validar-userland-vacio.js +110 -110
  128. package/scripts/verificar-release.js +110 -0
@@ -0,0 +1,251 @@
1
+ # Regla: Uso obligatorio del sistema SWL
2
+
3
+ Esta regla es **OBLIGATORIA** y aplica a todo trabajo de Claude dentro de
4
+ cualquier proyecto donde el sistema SWL esté instalado (presencia de
5
+ `agentes/`, `habilidades/`, `comandos/swl/`, `reglas/` o `plugin.json` con
6
+ `name: "@saulwade/swl-ses"`).
7
+
8
+ Tiene prioridad sobre la inercia natural del modelo a hacer trabajo directo
9
+ con Read/Write/Edit/Bash cuando existe un agente, skill o comando SWL
10
+ específico para la tarea.
11
+
12
+ ---
13
+
14
+ ## Por qué existe esta regla
15
+
16
+ El sistema SWL se instaló específicamente para que Claude **no haga trabajo
17
+ directo cuando hay un componente especializado**. El patrón recurrente que
18
+ esta regla cierra es:
19
+
20
+ - Implementar con Read/Write/Edit en vez de invocar `implementador-swl` o el
21
+ agente de stack (`backend-python-swl`, `frontend-react-swl`, etc.).
22
+ - Hacer commits sin invocar `revisor-codigo-swl` ni `revisor-seguridad-swl`.
23
+ - Escribir código sin cargar el skill de stack correspondiente
24
+ (`fastapi-experto`, `react-experto`, `angular-moderno`).
25
+ - Implementar features sin pasar por `/swl:discutir-fase` → `/swl:planear-fase`
26
+ → `/swl:ejecutar-fase` cuando el alcance lo justifica.
27
+ - Diferir scope (entregar read-only cuando el plan decía CRUD) sin invocar al
28
+ planificador ni crear DA formal — viola `arreglar-al-detectar.md`.
29
+
30
+ El patrón es costoso y reproducible. La regla `arreglar-al-detectar.md`
31
+ prohíbe la deuda silenciosa; esta regla cierra la causa raíz: saltarse el
32
+ flujo SWL desde el inicio.
33
+
34
+ ---
35
+
36
+ ## Principio
37
+
38
+ > Cuando exista un agente, skill o comando SWL aplicable a la tarea actual,
39
+ > **usarlo es obligatorio**. Hacer trabajo directo con herramientas básicas
40
+ > (Read/Write/Edit/Bash/Grep/Glob) cuando un componente especializado lo
41
+ > cubre mejor es violación de esta regla.
42
+
43
+ El sistema SWL es la herramienta del usuario — saltársela sin justificación
44
+ es decisión que la regla `debatir-antes-de-aceptar.md` exige debatir antes
45
+ de ejecutar.
46
+
47
+ ---
48
+
49
+ ## Matriz operacional: cuándo usar qué
50
+
51
+ ### Para tareas de desarrollo
52
+
53
+ | Tarea | Componente SWL obligatorio | Componente directo NO basta porque |
54
+ |---|---|---|
55
+ | Feature nueva > 50 LOC o multi-archivo | `/swl:discutir-fase` → `/swl:planear-fase` → `/swl:ejecutar-fase` o `orquestador-swl` | Sin discovery el scope queda implícito y diverge en ejecución |
56
+ | Implementación backend Python/Node/Java/Go/Rust/C# | `backend-python-swl` / `backend-node-swl` / etc. + `Skill("<framework>-experto")` | El skill carga gotchas críticos (ej: MissingGreenlet en SQLAlchemy async) |
57
+ | Implementación frontend React/Angular/Vue/Svelte | `frontend-react-swl` / `frontend-angular-swl` / `frontend-swl` + skill correspondiente | Los skills traen patrones modernos (signals, RSC, Suspense) que el modelo no actualiza solo |
58
+ | Implementación mobile Android/iOS/RN/Flutter | `mobile-android-swl` / `mobile-ios-swl` / `mobile-cross-swl` | Casos edge de plataforma (Core Data, baseline profiles) |
59
+ | Bug con stack trace o reproducible | `depurador-swl` con método científico | Saltar al fix sin hipótesis aislada falla con frecuencia |
60
+ | Refactor masivo o migración schema | `migrador-swl` | Exige plan de rollback + expand-contract, no improvisar |
61
+
62
+ ### Para tareas de calidad
63
+
64
+ | Tarea | Componente SWL obligatorio |
65
+ |---|---|
66
+ | Pre-merge a main | `/swl:revisar` o `revisor-codigo-swl` + `revisor-seguridad-swl` |
67
+ | Verificación post-fase | `/swl:verificar` con `Skill("verificar-trabajo")` (goal-backward 4 niveles) |
68
+ | Auditoría de calidad | `Skill("checklist-calidad")` con score ≥9.0 |
69
+ | Tests nuevos | `tdd-qa-swl` (ciclo RED→GREEN→REFACTOR) |
70
+ | Auditoría de seguridad | `Skill("checklist-seguridad")` (OWASP Top 10 + A11) |
71
+ | Detectar funcionalidad duplicada | `Skill("swl-revisar-impacto")` o `revisor-codigo-swl` con veto DRY mayor |
72
+
73
+ ### Para tareas de proceso
74
+
75
+ | Tarea | Componente SWL obligatorio |
76
+ |---|---|
77
+ | Cierre de sesión productiva | `/swl:compactar` + `/swl:aprender` |
78
+ | Capturar aprendizaje recurrente | `/swl:aprender` → APRENDIZAJES.md → posible promoción a regla/skill |
79
+ | Release con bump de versión | `/swl:release` (sincronización de ubicaciones de versión) |
80
+ | Documentación viva post-feature | `documentador-swl` |
81
+ | Diagnóstico del sistema | `/swl:salud` |
82
+
83
+ ### Para tareas de búsqueda y contexto
84
+
85
+ | Tarea | Componente SWL obligatorio |
86
+ |---|---|
87
+ | Contexto de dominio previo | `Skill("memoria-busqueda")` sobre `.planning/sessions/` y APRENDIZAJES.md |
88
+ | Investigación tecnológica | `investigador-swl` con WebSearch/WebFetch + `Skill("agent-browser")` |
89
+ | Verificar dependencia externa | Consultar Context7 (regla `usar-context7.md`) |
90
+ | Decisiones repetibles del proyecto | Revisar `.planning/adrs/`, APRENDIZAJES.md, `instintos/proyecto.yaml` ANTES de proponer solución |
91
+
92
+ ---
93
+
94
+ ## Excepciones legítimas
95
+
96
+ NO aplicar esta regla cuando:
97
+
98
+ 1. **Tarea trivial de 1-2 archivos**: rename, fix de typo, ajuste de comentario,
99
+ formato. El overhead de invocar agente supera el valor.
100
+ 2. **Pregunta de lectura pura**: "¿qué hace este archivo?", "¿dónde se define
101
+ X?". Usar Read/Grep directos.
102
+ 3. **Comando de shell puro**: `git status`, `npm install`, `gh pr list`.
103
+ 4. **Sesión exploratoria explícita**: el usuario pidió "explora", "echa un
104
+ vistazo", "investiga sin tocar nada".
105
+ 5. **Override explícito del usuario**: "no uses agentes, hazlo directo".
106
+ Respetar la instrucción explícita; registrar la excepción si tiene impacto
107
+ en flujo posterior.
108
+ 6. **Fix urgente de producción** con incidente activo: aplicar fix mínimo,
109
+ el agente puede esperar al post-mortem.
110
+ 7. **Proyecto sin SWL instalado**: si no hay `plugin.json` ni `agentes/` en
111
+ el proyecto, la regla no aplica.
112
+
113
+ ---
114
+
115
+ ## Anti-patrones explícitos
116
+
117
+ ### Anti-patrón 1: implementar feature compleja con Read+Write directo
118
+
119
+ ❌ **MAL**: el usuario pide "agrega CRUD para entidad X", Claude empieza a
120
+ escribir el modelo + endpoint + frontend + tests con Read+Write secuenciales,
121
+ sin pasar por `/swl:planear-fase` ni invocar `backend-python-swl`.
122
+
123
+ ✅ **BIEN**: invocar `/swl:discutir-fase` para extraer decisiones,
124
+ `/swl:planear-fase` para descomponer en tareas atómicas, `/swl:ejecutar-fase`
125
+ que delega a `implementador-swl` o agente de stack con skill cargado.
126
+
127
+ ### Anti-patrón 2: commit sin revisión
128
+
129
+ ❌ **MAL**: terminar implementación y hacer `git add . && git commit` sin
130
+ pasar por `revisor-codigo-swl` ni `revisor-seguridad-swl`.
131
+
132
+ ✅ **BIEN**: `/swl:revisar` antes del commit. Score ≥ 9.0 obligatorio. Si
133
+ hay veto items, corregir antes de mergear.
134
+
135
+ ### Anti-patrón 3: divergir del plan sin reconfirmar scope
136
+
137
+ ❌ **MAL**: plan decía "CRUD completo", entregar read-only documentando en
138
+ commit "la edición se agrega en iteración posterior". Es deuda silenciosa
139
+ prohibida por `arreglar-al-detectar.md`.
140
+
141
+ ✅ **BIEN**: si durante ejecución se detecta que el scope original es muy
142
+ grande, pausar, invocar `planificador-swl` para re-planificar, o crear DA
143
+ formal con trigger verificable. NUNCA diferir scope en commit silencioso.
144
+
145
+ ### Anti-patrón 4: implementar con framework sin cargar el skill correspondiente
146
+
147
+ ❌ **MAL**: escribir FastAPI con SQLAlchemy async sin cargar
148
+ `Skill("fastapi-experto")` — alta probabilidad de incurrir en MissingGreenlet
149
+ por lazy loading.
150
+
151
+ ✅ **BIEN**: cargar el skill ANTES de la primera línea. El skill trae los
152
+ gotchas específicos que el modelo no recuerda solo.
153
+
154
+ ### Anti-patrón 5: detectar funcionalidad duplicada y commitearla igual
155
+
156
+ ❌ **MAL**: durante implementación detectar que `/catalogos` ya tiene lo
157
+ mismo que se está agregando en `/catalogos-contratacion` pero commitearlo
158
+ porque "el plan decía implementarlo aquí". Pérdida de DRY.
159
+
160
+ ✅ **BIEN**: pausar, invocar `revisor-codigo-swl` o `Skill("swl-revisar-impacto")`,
161
+ reportar la duplicación al usuario, esperar decisión de scope.
162
+
163
+ ### Anti-patrón 6: usar agente especializado como "etiqueta cosmética"
164
+
165
+ ❌ **MAL**: decir "estoy invocando implementador-swl" pero seguir trabajando
166
+ con Read+Write+Edit personalmente sin lanzar el Agent tool.
167
+
168
+ ✅ **BIEN**: invocación real con el tool Agent. El sub-agente recibe contexto
169
+ acotado, opera con sus permisos declarados y devuelve resultado.
170
+
171
+ ---
172
+
173
+ ## Checklist antes de empezar cualquier tarea
174
+
175
+ Antes de la primera tool call sustantiva:
176
+
177
+ - [ ] **PASO 0 — Consultar memoria previa** (`Skill("memoria-busqueda")`,
178
+ APRENDIZAJES.md, `.planning/adrs/`, vault Obsidian si aplica). El
179
+ proyecto tiene decisiones ya tomadas y patrones validados que se
180
+ repiten. Empezar sin consultar es reabrir decisiones cerradas.
181
+ - [ ] ¿La tarea cabe en alguna fila de la **matriz operacional**?
182
+ - [ ] Si sí: ¿identifiqué el agente, skill o comando SWL correspondiente?
183
+ - [ ] ¿Cargué el skill relevante con `Skill("nombre")` antes de implementar?
184
+ - [ ] Si la tarea es no trivial: ¿pasó por el flujo discutir → planear → ejecutar?
185
+ - [ ] Si voy a hacer trabajo directo: ¿estoy dentro de las **excepciones
186
+ legítimas**? Si no, esta regla me obliga a usar el componente SWL.
187
+ - [ ] Antes de commit: ¿pasé por revisor de código + seguridad?
188
+
189
+ ---
190
+
191
+ ## Cómo recuperarse si ya empecé directo
192
+
193
+ Si avancé con trabajo directo y al revisar esta regla detecto que debí usar
194
+ un componente SWL:
195
+
196
+ 1. **Trabajo trivial y reversible**: aceptar el atajo, registrar la
197
+ excepción mentalmente, terminar.
198
+ 2. **Trabajo sustantivo pero sin commit**: invocar el componente SWL ahora
199
+ (revisor / verificar / planificador retrospectivo) antes del commit. Aún
200
+ se gana cobertura.
201
+ 3. **Ya se commiteó**: ejecutar `/swl:verificar` post-hoc. Si encuentra
202
+ hallazgos, corregir en commit siguiente bajo `arreglar-al-detectar.md`.
203
+ 4. **El patrón se repite en la sesión**: invocar `/swl:aprender` para
204
+ capturar el feedback explícitamente y reforzar el comportamiento futuro.
205
+
206
+ ---
207
+
208
+ ## Aplicabilidad
209
+
210
+ Aplica a:
211
+
212
+ - Claude Code (CLI, Desktop, IDE) operando dentro de proyectos con SWL
213
+ instalado.
214
+ - Sesiones de implementación, debugging, refactor, revisión, planning.
215
+ - Cualquier ciclo GSD (Goal-Seeking Development).
216
+
217
+ NO aplica a:
218
+
219
+ - Proyectos sin SWL instalado.
220
+ - Repos de terceros, exploración de código ajeno (`temp/`, dependencias
221
+ npm/pip).
222
+ - Tareas administrativas puras del sistema (instalar SWL, configurar Claude
223
+ Code).
224
+
225
+ ---
226
+
227
+ ## Relación con otras reglas
228
+
229
+ - `arreglar-al-detectar.md` — la deuda silenciosa de scope (anti-patrón 3
230
+ aquí) es exactamente lo que prohíbe esa regla.
231
+ - `debatir-antes-de-aceptar.md` — saltarse SWL sin justificación es decisión
232
+ que choca con regla documentada → exige debate, no ejecución silenciosa.
233
+ - `brevedad-output.md` — cubre idioma y eficiencia de tokens; esta regla
234
+ cubre flujo de trabajo.
235
+ - `skills-estandar.md` — cubre cómo escribir skills (autor); esta regla
236
+ cubre cómo usarlos (consumidor).
237
+ - `usar-context7.md` — regla hermana: consultar documentación de librerías
238
+ externas antes de implementar.
239
+
240
+ ---
241
+
242
+ ## Checklist de auto-verificación al final del turno
243
+
244
+ Al cerrar un turno con trabajo sustantivo:
245
+
246
+ - [ ] ¿Invoqué los agentes/skills/comandos SWL aplicables o estuve dentro
247
+ de las excepciones legítimas?
248
+ - [ ] Si hice trabajo directo: ¿la decisión está justificada por una
249
+ excepción concreta, no por inercia?
250
+ - [ ] Si detecto que omití un componente que debí usar: ¿lo invoco
251
+ retrospectivamente antes del commit final?
@@ -1,80 +1,80 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://swl-ses.dev/schemas/diary-entry.json",
4
- "title": "SWL Diary Entry",
5
- "description": "Diario estructurado por sesion. Captura logros, decisiones, challenges y aprendizajes clave en formato consumible por /swl:aprender.",
6
- "type": "object",
7
- "required": ["id", "sessionId", "date", "createdAt"],
8
- "properties": {
9
- "id": {
10
- "type": "string",
11
- "pattern": "^diary-\\d{8}-[a-f0-9]+$",
12
- "description": "ID unico del diario: diary-YYYYMMDD-{hash}"
13
- },
14
- "sessionId": {
15
- "type": "string",
16
- "minLength": 1,
17
- "description": "ID de la sesion de Claude Code que origina el diario"
18
- },
19
- "agent": {
20
- "type": ["string", "null"],
21
- "description": "Agente principal de la sesion (si aplica)"
22
- },
23
- "date": {
24
- "type": "string",
25
- "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
26
- "description": "Fecha de la sesion en formato YYYY-MM-DD"
27
- },
28
- "startTime": {
29
- "type": ["string", "null"],
30
- "format": "date-time",
31
- "description": "Inicio de la sesion en ISO 8601"
32
- },
33
- "endTime": {
34
- "type": ["string", "null"],
35
- "format": "date-time",
36
- "description": "Fin de la sesion en ISO 8601 (null si esta abierta)"
37
- },
38
- "accomplishments": {
39
- "type": "array",
40
- "maxItems": 20,
41
- "items": { "type": "string", "maxLength": 500 },
42
- "description": "Logros concretos de la sesion"
43
- },
44
- "decisions": {
45
- "type": "array",
46
- "maxItems": 20,
47
- "items": { "type": "string", "maxLength": 500 },
48
- "description": "Decisiones tomadas con su justificacion breve"
49
- },
50
- "challenges": {
51
- "type": "array",
52
- "maxItems": 20,
53
- "items": { "type": "string", "maxLength": 500 },
54
- "description": "Bloqueos o problemas encontrados"
55
- },
56
- "keyLearnings": {
57
- "type": "array",
58
- "maxItems": 20,
59
- "items": { "type": "string", "maxLength": 500 },
60
- "description": "Aprendizajes clave que alimentan APRENDIZAJES.md o instintos"
61
- },
62
- "tags": {
63
- "type": "array",
64
- "maxItems": 20,
65
- "items": { "type": "string", "maxLength": 500 },
66
- "description": "Etiquetas para clasificacion y busqueda"
67
- },
68
- "sourceAgents": {
69
- "type": "array",
70
- "uniqueItems": true,
71
- "items": { "type": "string" },
72
- "description": "Agentes que contribuyeron a la sesion (cross-agent enrichment)"
73
- },
74
- "createdAt": {
75
- "type": "string",
76
- "format": "date-time",
77
- "description": "Timestamp de creacion del diario"
78
- }
79
- }
80
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://swl-ses.dev/schemas/diary-entry.json",
4
+ "title": "SWL Diary Entry",
5
+ "description": "Diario estructurado por sesion. Captura logros, decisiones, challenges y aprendizajes clave en formato consumible por /swl:aprender.",
6
+ "type": "object",
7
+ "required": ["id", "sessionId", "date", "createdAt"],
8
+ "properties": {
9
+ "id": {
10
+ "type": "string",
11
+ "pattern": "^diary-\\d{8}-[a-f0-9]+$",
12
+ "description": "ID unico del diario: diary-YYYYMMDD-{hash}"
13
+ },
14
+ "sessionId": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "description": "ID de la sesion de Claude Code que origina el diario"
18
+ },
19
+ "agent": {
20
+ "type": ["string", "null"],
21
+ "description": "Agente principal de la sesion (si aplica)"
22
+ },
23
+ "date": {
24
+ "type": "string",
25
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
26
+ "description": "Fecha de la sesion en formato YYYY-MM-DD"
27
+ },
28
+ "startTime": {
29
+ "type": ["string", "null"],
30
+ "format": "date-time",
31
+ "description": "Inicio de la sesion en ISO 8601"
32
+ },
33
+ "endTime": {
34
+ "type": ["string", "null"],
35
+ "format": "date-time",
36
+ "description": "Fin de la sesion en ISO 8601 (null si esta abierta)"
37
+ },
38
+ "accomplishments": {
39
+ "type": "array",
40
+ "maxItems": 20,
41
+ "items": { "type": "string", "maxLength": 500 },
42
+ "description": "Logros concretos de la sesion"
43
+ },
44
+ "decisions": {
45
+ "type": "array",
46
+ "maxItems": 20,
47
+ "items": { "type": "string", "maxLength": 500 },
48
+ "description": "Decisiones tomadas con su justificacion breve"
49
+ },
50
+ "challenges": {
51
+ "type": "array",
52
+ "maxItems": 20,
53
+ "items": { "type": "string", "maxLength": 500 },
54
+ "description": "Bloqueos o problemas encontrados"
55
+ },
56
+ "keyLearnings": {
57
+ "type": "array",
58
+ "maxItems": 20,
59
+ "items": { "type": "string", "maxLength": 500 },
60
+ "description": "Aprendizajes clave que alimentan APRENDIZAJES.md o instintos"
61
+ },
62
+ "tags": {
63
+ "type": "array",
64
+ "maxItems": 20,
65
+ "items": { "type": "string", "maxLength": 500 },
66
+ "description": "Etiquetas para clasificacion y busqueda"
67
+ },
68
+ "sourceAgents": {
69
+ "type": "array",
70
+ "uniqueItems": true,
71
+ "items": { "type": "string" },
72
+ "description": "Agentes que contribuyeron a la sesion (cross-agent enrichment)"
73
+ },
74
+ "createdAt": {
75
+ "type": "string",
76
+ "format": "date-time",
77
+ "description": "Timestamp de creacion del diario"
78
+ }
79
+ }
80
+ }