swl-ses 3.3.2
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.
- package/CLAUDE.md +425 -0
- package/_userland/agentes/.gitkeep +0 -0
- package/_userland/habilidades/.gitkeep +0 -0
- package/agentes/accesibilidad-wcag-swl.md +683 -0
- package/agentes/arquitecto-swl.md +210 -0
- package/agentes/auto-evolucion-swl.md +408 -0
- package/agentes/backend-api-swl.md +442 -0
- package/agentes/backend-node-swl.md +439 -0
- package/agentes/backend-python-swl.md +469 -0
- package/agentes/backend-workers-swl.md +444 -0
- package/agentes/cloud-infra-swl.md +466 -0
- package/agentes/consolidador-swl.md +487 -0
- package/agentes/datos-swl.md +568 -0
- package/agentes/depurador-swl.md +301 -0
- package/agentes/devops-ci-swl.md +352 -0
- package/agentes/disenador-ui-swl.md +546 -0
- package/agentes/documentador-swl.md +323 -0
- package/agentes/frontend-angular-swl.md +603 -0
- package/agentes/frontend-css-swl.md +700 -0
- package/agentes/frontend-react-swl.md +672 -0
- package/agentes/frontend-swl.md +483 -0
- package/agentes/frontend-tailwind-swl.md +808 -0
- package/agentes/implementador-swl.md +235 -0
- package/agentes/investigador-swl.md +274 -0
- package/agentes/investigador-ux-swl.md +482 -0
- package/agentes/migrador-swl.md +389 -0
- package/agentes/mobile-android-swl.md +473 -0
- package/agentes/mobile-cross-swl.md +501 -0
- package/agentes/mobile-ios-swl.md +464 -0
- package/agentes/notificador-swl.md +886 -0
- package/agentes/observabilidad-swl.md +408 -0
- package/agentes/orquestador-swl.md +490 -0
- package/agentes/planificador-swl.md +222 -0
- package/agentes/producto-prd-swl.md +565 -0
- package/agentes/release-manager-swl.md +545 -0
- package/agentes/rendimiento-swl.md +691 -0
- package/agentes/revisor-codigo-swl.md +254 -0
- package/agentes/revisor-seguridad-swl.md +316 -0
- package/agentes/tdd-qa-swl.md +323 -0
- package/agentes/ux-disenador-swl.md +498 -0
- package/bin/swl-ses.js +119 -0
- package/comandos/swl/actualizar.md +117 -0
- package/comandos/swl/aprender.md +348 -0
- package/comandos/swl/auditar-deps.md +390 -0
- package/comandos/swl/autoresearch.md +346 -0
- package/comandos/swl/checkpoint.md +296 -0
- package/comandos/swl/compactar.md +283 -0
- package/comandos/swl/crear-skill.md +609 -0
- package/comandos/swl/discutir-fase.md +230 -0
- package/comandos/swl/ejecutar-fase.md +302 -0
- package/comandos/swl/evolucionar.md +377 -0
- package/comandos/swl/instalar.md +220 -0
- package/comandos/swl/mapear-codebase.md +205 -0
- package/comandos/swl/nuevo-proyecto.md +154 -0
- package/comandos/swl/planear-fase.md +221 -0
- package/comandos/swl/release.md +405 -0
- package/comandos/swl/salud.md +382 -0
- package/comandos/swl/verificar.md +292 -0
- package/habilidades/accesibilidad-a11y/SKILL.md +584 -0
- package/habilidades/angular-avanzado/SKILL.md +491 -0
- package/habilidades/angular-moderno/SKILL.md +326 -0
- package/habilidades/api-rest-diseno/SKILL.md +302 -0
- package/habilidades/api-rest-diseno/recursos/openapi-template.yaml +506 -0
- package/habilidades/aprendizaje-continuo/SKILL.md +369 -0
- package/habilidades/async-python/SKILL.md +474 -0
- package/habilidades/auth-patrones/SKILL.md +488 -0
- package/habilidades/auto-evolucion-protocolo/SKILL.md +376 -0
- package/habilidades/autoresearch/SKILL.md +248 -0
- package/habilidades/autoresearch/recursos/checklist-template.md +191 -0
- package/habilidades/autoresearch/scripts/calcular-score.js +88 -0
- package/habilidades/checklist-calidad/SKILL.md +247 -0
- package/habilidades/checklist-calidad/recursos/quality-report-template.md +148 -0
- package/habilidades/checklist-seguridad/SKILL.md +224 -0
- package/habilidades/checkpoints-verificacion/SKILL.md +309 -0
- package/habilidades/checkpoints-verificacion/recursos/checkpoint-templates.md +360 -0
- package/habilidades/ci-cd-pipelines/SKILL.md +583 -0
- package/habilidades/ci-cd-pipelines/recursos/github-actions-template.yaml +403 -0
- package/habilidades/cloud-aws/SKILL.md +497 -0
- package/habilidades/compactacion-contexto/SKILL.md +201 -0
- package/habilidades/contenedores-docker/SKILL.md +453 -0
- package/habilidades/contenedores-docker/recursos/dockerfile-template.dockerfile +160 -0
- package/habilidades/css-moderno/SKILL.md +463 -0
- package/habilidades/datos-etl/SKILL.md +486 -0
- package/habilidades/dependencias-auditoria/SKILL.md +293 -0
- package/habilidades/deprecacion-migracion/SKILL.md +485 -0
- package/habilidades/design-tokens/SKILL.md +519 -0
- package/habilidades/discutir-fase/SKILL.md +167 -0
- package/habilidades/diseno-responsivo/SKILL.md +326 -0
- package/habilidades/django-experto/SKILL.md +395 -0
- package/habilidades/doc-sync/SKILL.md +259 -0
- package/habilidades/ejecutar-fase/SKILL.md +199 -0
- package/habilidades/estructura-proyecto-claude/SKILL.md +459 -0
- package/habilidades/estructura-proyecto-claude/recursos/claude-md-template.md +261 -0
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +213 -0
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +77 -0
- package/habilidades/estructura-proyecto-claude/recursos/variantes-por-stack.md +177 -0
- package/habilidades/event-driven/SKILL.md +580 -0
- package/habilidades/extractor-de-aprendizajes/SKILL.md +234 -0
- package/habilidades/fastapi-experto/SKILL.md +368 -0
- package/habilidades/frontend-avanzado/SKILL.md +555 -0
- package/habilidades/git-worktrees-paralelo/SKILL.md +246 -0
- package/habilidades/iam-secretos/SKILL.md +511 -0
- package/habilidades/instalar-sistema/SKILL.md +140 -0
- package/habilidades/kubernetes-orquestacion/SKILL.md +549 -0
- package/habilidades/manejo-errores/SKILL.md +512 -0
- package/habilidades/mapear-codebase/SKILL.md +199 -0
- package/habilidades/microservicios/SKILL.md +473 -0
- package/habilidades/mobile-flutter/SKILL.md +566 -0
- package/habilidades/mobile-react-native/SKILL.md +493 -0
- package/habilidades/monitoring-alertas/SKILL.md +447 -0
- package/habilidades/node-experto/SKILL.md +521 -0
- package/habilidades/notificaciones-multicanal/SKILL.md +448 -0
- package/habilidades/notificaciones-multicanal/recursos/config-template.json +115 -0
- package/habilidades/nuevo-proyecto/SKILL.md +183 -0
- package/habilidades/patrones-python/SKILL.md +381 -0
- package/habilidades/performance-baseline/SKILL.md +243 -0
- package/habilidades/planear-fase/SKILL.md +184 -0
- package/habilidades/postgresql-experto/SKILL.md +379 -0
- package/habilidades/react-experto/SKILL.md +434 -0
- package/habilidades/react-optimizacion/SKILL.md +328 -0
- package/habilidades/release-semver/SKILL.md +226 -0
- package/habilidades/release-semver/scripts/generar-changelog.sh +238 -0
- package/habilidades/sql-optimizacion/SKILL.md +314 -0
- package/habilidades/tailwind-experto/SKILL.md +412 -0
- package/habilidades/tdd-workflow/SKILL.md +267 -0
- package/habilidades/testing-python/SKILL.md +350 -0
- package/habilidades/threat-model-lite/SKILL.md +218 -0
- package/habilidades/typescript-avanzado/SKILL.md +454 -0
- package/habilidades/ux-diseno/SKILL.md +488 -0
- package/habilidades/validacion-ci-sistema/SKILL.md +543 -0
- package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +286 -0
- package/habilidades/verificar-trabajo/SKILL.md +208 -0
- package/habilidades/wireframes-flujos/SKILL.md +396 -0
- package/habilidades/workflow-claude-code/SKILL.md +359 -0
- package/hooks/calidad-pre-commit.js +578 -0
- package/hooks/escaneo-secretos.js +302 -0
- package/hooks/extraccion-aprendizajes.js +550 -0
- package/hooks/linea-estado.js +249 -0
- package/hooks/monitor-contexto.js +230 -0
- package/hooks/proteccion-rutas.js +249 -0
- package/manifiestos/hooks-config.json +41 -0
- package/manifiestos/modulos.json +318 -0
- package/manifiestos/perfiles.json +189 -0
- package/package.json +45 -0
- package/plantillas/PROJECT.md +122 -0
- package/plantillas/REQUIREMENTS.md +132 -0
- package/plantillas/ROADMAP.md +143 -0
- package/plantillas/STATE.md +109 -0
- package/plantillas/research/ARCHITECTURE.md +220 -0
- package/plantillas/research/FEATURES.md +175 -0
- package/plantillas/research/PITFALLS.md +299 -0
- package/plantillas/research/STACK.md +233 -0
- package/plantillas/research/SUMMARY.md +165 -0
- package/plugin.json +144 -0
- package/reglas/accesibilidad.md +269 -0
- package/reglas/api-diseno.md +400 -0
- package/reglas/arquitectura.md +183 -0
- package/reglas/cloud-infra.md +247 -0
- package/reglas/docs.md +245 -0
- package/reglas/estilo-codigo.md +179 -0
- package/reglas/git-workflow.md +186 -0
- package/reglas/performance.md +195 -0
- package/reglas/pruebas.md +159 -0
- package/reglas/seguridad.md +151 -0
- package/reglas/skills-estandar.md +473 -0
- package/scripts/actualizar.js +51 -0
- package/scripts/desinstalar.js +86 -0
- package/scripts/doctor.js +222 -0
- package/scripts/inicializar.js +89 -0
- package/scripts/instalador.js +333 -0
- package/scripts/lib/detectar-runtime.js +177 -0
- package/scripts/lib/estado.js +112 -0
- package/scripts/lib/hooks-settings.js +283 -0
- package/scripts/lib/manifiestos.js +138 -0
- package/scripts/lib/seguridad.js +160 -0
- package/scripts/publicar.js +209 -0
- package/scripts/validar.js +120 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aprendizaje-continuo
|
|
3
|
+
description: Sistema de aprendizaje continuo v2 basado en instintos. Cubre observación de sesión via hooks, creación y gestión de instintos con niveles de confianza, scopes de proyecto vs global, promoción a skills/comandos/agentes, evolución (merge, split, deprecate) y protección contra contaminación cross-proyecto.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Aprendizaje Continuo v2 — Sistema de Instintos
|
|
7
|
+
|
|
8
|
+
## Concepto Central
|
|
9
|
+
|
|
10
|
+
Un **instinto** es una unidad de conocimiento aprendido de la experiencia real de sesión.
|
|
11
|
+
A diferencia de las skills (conocimiento declarativo estático), los instintos son
|
|
12
|
+
conocimiento inductivo: emergen de observar patrones repetidos en el comportamiento
|
|
13
|
+
del agente y los resultados que produce.
|
|
14
|
+
|
|
15
|
+
El sistema tiene cuatro capas:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Observación → Instinto (draft) → Instinto (consolidado) → Promoción
|
|
19
|
+
(hook) confianza<0.5 confianza≥0.5 skill/cmd/agente
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 1. Observación via Hooks
|
|
25
|
+
|
|
26
|
+
### Cobertura del 100% de actividad de sesión
|
|
27
|
+
|
|
28
|
+
Todo lo que el agente hace pasa por hooks instrumentados:
|
|
29
|
+
|
|
30
|
+
```jsonc
|
|
31
|
+
// .claude/settings.json — hooks de observación
|
|
32
|
+
{
|
|
33
|
+
"hooks": {
|
|
34
|
+
"PreToolUse": [
|
|
35
|
+
{
|
|
36
|
+
"matcher": ".*",
|
|
37
|
+
"hooks": [{ "type": "command", "command": "node hooks/observe-pre.js" }]
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"PostToolUse": [
|
|
41
|
+
{
|
|
42
|
+
"matcher": ".*",
|
|
43
|
+
"hooks": [{ "type": "command", "command": "node hooks/observe-post.js" }]
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"Stop": [
|
|
47
|
+
{
|
|
48
|
+
"hooks": [{ "type": "command", "command": "node hooks/session-end.js" }]
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Qué observar en cada evento
|
|
56
|
+
|
|
57
|
+
| Evento | Datos relevantes | Señal de instinto |
|
|
58
|
+
|--------|-----------------|-------------------|
|
|
59
|
+
| PreToolUse | tool_name, input | Herramienta usada antes de X |
|
|
60
|
+
| PostToolUse | tool_name, output, duration_ms | Herramienta exitosa/fallida |
|
|
61
|
+
| Stop | session_id, turn_count | Patrón de sesión completa |
|
|
62
|
+
|
|
63
|
+
### Hook de observación mínimo (Node.js)
|
|
64
|
+
|
|
65
|
+
```javascript
|
|
66
|
+
// hooks/observe-post.js
|
|
67
|
+
const fs = require('fs');
|
|
68
|
+
|
|
69
|
+
const input = JSON.parse(fs.readFileSync('/dev/stdin', 'utf8'));
|
|
70
|
+
const { tool_name, tool_input, tool_response } = input;
|
|
71
|
+
|
|
72
|
+
const event = {
|
|
73
|
+
ts: Date.now(),
|
|
74
|
+
tool: tool_name,
|
|
75
|
+
success: !tool_response?.error,
|
|
76
|
+
duration_ms: tool_response?.duration_ms ?? null,
|
|
77
|
+
project: process.env.PROJECT_NAME ?? 'global',
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
// Append al log de observaciones
|
|
81
|
+
const logPath = process.env.OBSERVATIONS_LOG ?? '.claude/observations.jsonl';
|
|
82
|
+
fs.appendFileSync(logPath, JSON.stringify(event) + '\n');
|
|
83
|
+
|
|
84
|
+
// Exit 0 obligatorio — nunca bloquear el flujo
|
|
85
|
+
process.exit(0);
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Regla**: los hooks de observación NUNCA deben producir exit code != 0.
|
|
89
|
+
Un fallo de observación no debe interrumpir el trabajo del agente.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 2. Formato de un Instinto
|
|
94
|
+
|
|
95
|
+
Cada instinto es un archivo Markdown con frontmatter YAML:
|
|
96
|
+
|
|
97
|
+
```yaml
|
|
98
|
+
---
|
|
99
|
+
id: instinto-20240315-001
|
|
100
|
+
titulo: "Siempre usar selectinload en queries con relaciones"
|
|
101
|
+
confianza: 0.75
|
|
102
|
+
scope: proyecto # "proyecto" | "global"
|
|
103
|
+
proyecto: sigaf-backend # solo si scope=proyecto
|
|
104
|
+
observaciones: 7 # cuántas veces se observó
|
|
105
|
+
primera_vez: "2024-03-10"
|
|
106
|
+
ultima_vez: "2024-03-15"
|
|
107
|
+
estado: activo # "draft" | "activo" | "deprecado" | "promovido"
|
|
108
|
+
promovido_a: null # "skill:fastapi-experto" | "comando:fix-selectin" | null
|
|
109
|
+
tags: [sqlalchemy, async, orm]
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Descripción
|
|
113
|
+
|
|
114
|
+
Al usar SQLAlchemy async, cada vez que se accede a una relación en la
|
|
115
|
+
serialización Pydantic sin `selectinload()` se produce `MissingGreenlet`.
|
|
116
|
+
|
|
117
|
+
## Patrón observado
|
|
118
|
+
|
|
119
|
+
En 7 sesiones de trabajo con el modelo `fastapi-experto`, se detectó que
|
|
120
|
+
queries sin eager loading causaban errores en producción que no aparecían
|
|
121
|
+
en tests síncronos.
|
|
122
|
+
|
|
123
|
+
## Acción correctiva
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
# SIEMPRE incluir selectinload para relaciones accedidas
|
|
127
|
+
stmt = select(Modelo).options(selectinload(Modelo.relacion))
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Condiciones de activación
|
|
131
|
+
|
|
132
|
+
- Proyecto usa SQLAlchemy async (detectado en requirements.txt)
|
|
133
|
+
- Se están escribiendo endpoints FastAPI con Pydantic
|
|
134
|
+
|
|
135
|
+
## Evidencia
|
|
136
|
+
|
|
137
|
+
- Sesión 2024-03-10: error MissingGreenlet en endpoint /usuarios
|
|
138
|
+
- Sesión 2024-03-12: mismo error en endpoint /proyectos
|
|
139
|
+
- Sesión 2024-03-15: prevenido al aplicar selectinload preventivamente
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 3. Niveles de Confianza
|
|
145
|
+
|
|
146
|
+
### Escala de confianza (0.0 — 1.0)
|
|
147
|
+
|
|
148
|
+
| Rango | Estado | Significado |
|
|
149
|
+
|-------|--------|-------------|
|
|
150
|
+
| 0.0 – 0.29 | draft | Observado 1-2 veces, no fiable |
|
|
151
|
+
| 0.30 – 0.49 | draft | Patrón emergente, necesita confirmación |
|
|
152
|
+
| 0.50 – 0.69 | activo | Confiable para el scope actual |
|
|
153
|
+
| 0.70 – 0.89 | activo | Alta confianza, considerar promoción |
|
|
154
|
+
| 0.90 – 1.00 | activo | Candidato inmediato a skill/comando |
|
|
155
|
+
|
|
156
|
+
### Algoritmo de actualización de confianza
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
nueva_confianza = confianza_actual + (0.1 × peso_evento)
|
|
160
|
+
|
|
161
|
+
peso_evento:
|
|
162
|
+
confirmacion_exitosa = +1.0
|
|
163
|
+
confirmacion_prevencion = +0.8
|
|
164
|
+
excepcion_encontrada = -0.3
|
|
165
|
+
refutacion_directa = -0.5
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
La confianza nunca supera 0.95 automáticamente — el último 5% requiere
|
|
169
|
+
revisión humana explícita antes de promoción.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 4. Scope: Proyecto vs Global
|
|
174
|
+
|
|
175
|
+
### Scope de proyecto
|
|
176
|
+
|
|
177
|
+
- El instinto aplica solo en el directorio del proyecto
|
|
178
|
+
- Se almacena en `.claude/instintos/`
|
|
179
|
+
- Se activa cuando `PROJECT_NAME` coincide
|
|
180
|
+
- Ejemplo: "En este proyecto, los modelos usan prefijo `tb_`"
|
|
181
|
+
|
|
182
|
+
### Scope global
|
|
183
|
+
|
|
184
|
+
- El instinto aplica en cualquier proyecto
|
|
185
|
+
- Se almacena en `~/.claude/instintos/`
|
|
186
|
+
- Se activa siempre
|
|
187
|
+
- Ejemplo: "Nunca usar `except: pass` en Python"
|
|
188
|
+
|
|
189
|
+
### Regla de promoción de scope
|
|
190
|
+
|
|
191
|
+
Un instinto de proyecto puede ascender a global si:
|
|
192
|
+
1. Se observa en 3+ proyectos distintos con la misma estructura
|
|
193
|
+
2. La confianza es >= 0.7 en todos los proyectos
|
|
194
|
+
3. No contradice ningún instinto global existente
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# Comando para promover scope
|
|
198
|
+
node scripts/instinto-promover-scope.js \
|
|
199
|
+
--id instinto-20240315-001 \
|
|
200
|
+
--de proyecto \
|
|
201
|
+
--a global
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## 5. Promoción de Instintos
|
|
207
|
+
|
|
208
|
+
### A Skill
|
|
209
|
+
|
|
210
|
+
Cuando un instinto tiene confianza >= 0.85 y cubre un dominio técnico bien definido:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# Genera un borrador de SKILL.md a partir del instinto
|
|
214
|
+
node scripts/instinto-a-skill.js \
|
|
215
|
+
--instinto .claude/instintos/instinto-20240315-001.md \
|
|
216
|
+
--skill-dir habilidades/selectinload-sqlalchemy/
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
El instinto se marca `estado: promovido` y `promovido_a: skill:selectinload-sqlalchemy`.
|
|
220
|
+
|
|
221
|
+
### A Comando
|
|
222
|
+
|
|
223
|
+
Cuando el instinto describe una acción repetitiva que puede automatizarse:
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
node scripts/instinto-a-comando.js \
|
|
227
|
+
--instinto .claude/instintos/instinto-20240318-003.md \
|
|
228
|
+
--comando-dir comandos/fix-missing-selectin/
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### A Agente
|
|
232
|
+
|
|
233
|
+
Cuando el instinto describe un workflow completo y recurrente (confianza >= 0.90):
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
node scripts/instinto-a-agente.js \
|
|
237
|
+
--instinto .claude/instintos/instinto-20240320-007.md \
|
|
238
|
+
--agente-dir agentes/revisor-sqlalchemy/
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## 6. Evolución de Instintos
|
|
244
|
+
|
|
245
|
+
### Merge (fusión)
|
|
246
|
+
|
|
247
|
+
Dos instintos con patrones solapados se fusionan:
|
|
248
|
+
|
|
249
|
+
```yaml
|
|
250
|
+
# merge-plan.yaml
|
|
251
|
+
fuente_a: instinto-20240310-001 # "usar selectinload"
|
|
252
|
+
fuente_b: instinto-20240312-003 # "lazy='selectin' en relaciones Usuario"
|
|
253
|
+
resultado: instinto-20240320-010 # "estrategia completa de eager loading async"
|
|
254
|
+
razon: "Ambos instintos cubren el mismo dominio desde ángulos complementarios"
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
Regla: el instinto fusionado hereda `confianza = max(a, b) × 0.9` (penalty por fusión).
|
|
258
|
+
|
|
259
|
+
### Split (división)
|
|
260
|
+
|
|
261
|
+
Un instinto demasiado genérico se divide en instintos más específicos:
|
|
262
|
+
|
|
263
|
+
```yaml
|
|
264
|
+
# split-plan.yaml
|
|
265
|
+
fuente: instinto-20240301-001 # "buenas prácticas SQLAlchemy"
|
|
266
|
+
resultados:
|
|
267
|
+
- instinto-20240320-011 # "eager loading en queries async"
|
|
268
|
+
- instinto-20240320-012 # "session management en endpoints"
|
|
269
|
+
- instinto-20240320-013 # "commit solo en endpoint, nunca en service"
|
|
270
|
+
razon: "El instinto original era demasiado amplio para activación precisa"
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Deprecate (deprecación)
|
|
274
|
+
|
|
275
|
+
Un instinto se depreca cuando:
|
|
276
|
+
- La librería cambió y el patrón ya no aplica
|
|
277
|
+
- Se encontró una mejor práctica que lo reemplaza
|
|
278
|
+
- La confianza cayó por debajo de 0.2 tras múltiples refutaciones
|
|
279
|
+
|
|
280
|
+
```yaml
|
|
281
|
+
estado: deprecado
|
|
282
|
+
deprecado_en: "2024-04-01"
|
|
283
|
+
razon: "SQLAlchemy 2.1 agregó lazy loading seguro en async por defecto"
|
|
284
|
+
reemplazado_por: instinto-20240401-020
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## 7. Protección contra Contaminación Cross-Proyecto
|
|
290
|
+
|
|
291
|
+
### El problema
|
|
292
|
+
|
|
293
|
+
Si los instintos de un proyecto contaminan otro proyecto, se generan
|
|
294
|
+
sugerencias incorrectas. Ejemplo: el prefijo `tb_` de tablas de un proyecto
|
|
295
|
+
legacy no debe aplicarse en un proyecto nuevo con convención `snake_case`.
|
|
296
|
+
|
|
297
|
+
### Mecanismo de aislamiento
|
|
298
|
+
|
|
299
|
+
```javascript
|
|
300
|
+
// hooks/instinto-loader.js
|
|
301
|
+
const projectName = process.env.PROJECT_NAME;
|
|
302
|
+
const instintosGlobales = loadInstintos('~/.claude/instintos/');
|
|
303
|
+
const instintosProyecto = loadInstintos(`.claude/instintos/`);
|
|
304
|
+
|
|
305
|
+
// Los instintos de proyecto NUNCA se exportan a otros proyectos
|
|
306
|
+
const instintosActivos = [
|
|
307
|
+
...instintosGlobales.filter(i => i.scope === 'global'),
|
|
308
|
+
...instintosProyecto.filter(i => i.proyecto === projectName),
|
|
309
|
+
];
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### Cuarentena de instintos sospechosos
|
|
313
|
+
|
|
314
|
+
Cuando un instinto produce una sugerencia que el humano rechaza 3+ veces,
|
|
315
|
+
entra en cuarentena automática:
|
|
316
|
+
|
|
317
|
+
```yaml
|
|
318
|
+
estado: cuarentena
|
|
319
|
+
cuarentena_inicio: "2024-03-20"
|
|
320
|
+
rechazos: 3
|
|
321
|
+
cuarentena_fin: "2024-03-27" # revisión en 7 días
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
Durante la cuarentena, el instinto no se activa pero tampoco se borra —
|
|
325
|
+
se espera revisión humana.
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## 8. Directorio de Instintos
|
|
330
|
+
|
|
331
|
+
Estructura recomendada en el proyecto:
|
|
332
|
+
|
|
333
|
+
```
|
|
334
|
+
.claude/
|
|
335
|
+
└── instintos/
|
|
336
|
+
├── index.yaml # índice de todos los instintos activos
|
|
337
|
+
├── draft/ # instintos con confianza < 0.5
|
|
338
|
+
├── activos/ # instintos con confianza >= 0.5
|
|
339
|
+
├── cuarentena/ # instintos rechazados en revisión
|
|
340
|
+
└── promovidos/ # instintos ya convertidos a skill/cmd/agente
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### index.yaml mínimo
|
|
344
|
+
|
|
345
|
+
```yaml
|
|
346
|
+
version: 2
|
|
347
|
+
ultimo_update: "2024-03-20"
|
|
348
|
+
totales:
|
|
349
|
+
draft: 3
|
|
350
|
+
activos: 12
|
|
351
|
+
cuarentena: 1
|
|
352
|
+
promovidos: 5
|
|
353
|
+
instintos:
|
|
354
|
+
- id: instinto-20240315-001
|
|
355
|
+
titulo: "Siempre usar selectinload en queries con relaciones"
|
|
356
|
+
confianza: 0.75
|
|
357
|
+
scope: proyecto
|
|
358
|
+
estado: activo
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## Anti-patrones
|
|
364
|
+
|
|
365
|
+
- Crear instintos sin evidencia (mínimo 2 observaciones para pasar de draft)
|
|
366
|
+
- Instintos con scope global demasiado específicos a un framework de nicho
|
|
367
|
+
- No actualizar la confianza cuando el instinto previene un error (refuerzo positivo)
|
|
368
|
+
- Fusionar instintos de dominios distintos sin justificación clara
|
|
369
|
+
- Ignorar instintos en cuarentena — siempre revisarlos en la fecha programada
|