@saulwade/swl-ses 1.3.7 → 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 (129) 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 +207 -7
  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 +24 -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/swl-claudemd/SKILL.md +15 -1
  49. package/habilidades/tdd-workflow/SKILL.md +36 -4
  50. package/habilidades/testing-python/SKILL.md +340 -340
  51. package/hooks/claudemd-bloat-detector.js +161 -161
  52. package/hooks/inyeccion-contexto.js +8 -3
  53. package/hooks/lib/agent-routing.js +107 -107
  54. package/hooks/lib/auto-consolidator.js +335 -335
  55. package/hooks/lib/error-classifier.js +308 -308
  56. package/hooks/lib/merkle-audit.js +96 -96
  57. package/hooks/lib/provenance-tracker.js +191 -191
  58. package/hooks/lib/rate-limit-ip.js +177 -0
  59. package/hooks/lib/rate-limit-tracker.js +253 -253
  60. package/hooks/lib/resource-quota.js +122 -122
  61. package/hooks/lib/retry-jitter.js +165 -165
  62. package/hooks/lib/skill-auditor.js +588 -588
  63. package/hooks/lib/sync-status.js +228 -228
  64. package/hooks/lib/taint-tracker.js +107 -107
  65. package/hooks/lib/text-similarity.js +241 -241
  66. package/hooks/lib/toon-compressor.js +245 -245
  67. package/hooks/lib/webhook-dedup.js +184 -0
  68. package/hooks/lib/webhook-verify.js +123 -0
  69. package/hooks/proteccion-rutas.js +120 -15
  70. package/hooks/registro-turnos.js +209 -209
  71. package/hooks/sugerir-regenerar-inventario.js +170 -170
  72. package/hooks/validar-formato-post-subagente.js +140 -140
  73. package/hooks/validar-memoria-hook.js +218 -218
  74. package/instintos/prompt-appendices.yaml +57 -57
  75. package/manifiestos/agent-output-schemas.json +57 -57
  76. package/manifiestos/modulos.json +1 -0
  77. package/manifiestos/skills-lock.json +37 -37
  78. package/package.json +5 -3
  79. package/plantillas/auditor-veto-template.md +105 -105
  80. package/plantillas/github-workflows/README.md +47 -47
  81. package/plantillas/github-workflows/release-please.yml +44 -44
  82. package/plantillas/github-workflows/swl-ci.yml +107 -107
  83. package/plantillas/github-workflows/swl-security.yml +51 -51
  84. package/plugin.json +1 -1
  85. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  86. package/reglas/arreglar-al-detectar.md +147 -147
  87. package/reglas/fragmentos-compartidos.md +152 -152
  88. package/reglas/harness-claude-code.md +213 -213
  89. package/reglas/usar-context7.md +226 -226
  90. package/reglas/usar-sistema-swl.md +251 -0
  91. package/schemas/diary-entry.schema.json +80 -80
  92. package/scripts/benchmark-memoria.js +167 -167
  93. package/scripts/comandos/skills.js +251 -2
  94. package/scripts/configurar-branch-protection.js +418 -418
  95. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  96. package/scripts/field-report.js +199 -199
  97. package/scripts/generar-checklists-consolidados.js +273 -273
  98. package/scripts/generar-inventario.js +420 -420
  99. package/scripts/generar-matriz-lenguajes.js +271 -271
  100. package/scripts/lib/artefactos-python.js +43 -43
  101. package/scripts/lib/benchmark-metrics.js +160 -160
  102. package/scripts/lib/budget-enforcer.js +252 -252
  103. package/scripts/lib/configurar-ci.js +380 -380
  104. package/scripts/lib/contadores-inventario.js +217 -217
  105. package/scripts/lib/detectar-stack-detallado.js +307 -307
  106. package/scripts/lib/diary-entry.js +234 -234
  107. package/scripts/lib/eval-metrics-store.js +218 -218
  108. package/scripts/lib/eval-quality.js +171 -171
  109. package/scripts/lib/eval-schemas.js +144 -144
  110. package/scripts/lib/eval-self-correct.js +106 -106
  111. package/scripts/lib/eval-validator.js +185 -185
  112. package/scripts/lib/jaccard-similarity.js +98 -98
  113. package/scripts/lib/longmemeval-runner.js +125 -125
  114. package/scripts/lib/npm-version.js +261 -261
  115. package/scripts/lib/paquetes-conocidos.js +50 -50
  116. package/scripts/lib/prompt-builder.js +264 -264
  117. package/scripts/lib/rrf-fusion.js +175 -175
  118. package/scripts/lib/scoring-instintos.js +277 -277
  119. package/scripts/lib/semantic-search.js +252 -252
  120. package/scripts/limpiar-artefactos-python.js +131 -131
  121. package/scripts/mcp-server/README.md +128 -128
  122. package/scripts/mcp-server/handlers.js +206 -206
  123. package/scripts/migrar-csv-a-array.js +168 -168
  124. package/scripts/migrar-fase-dominio.js +201 -201
  125. package/scripts/publicar.js +511 -511
  126. package/scripts/run-eval.js +141 -141
  127. package/scripts/validar-manifest.js +195 -195
  128. package/scripts/validar-userland-vacio.js +110 -110
  129. 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
+ }