cmp-standards 2.7.0 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +633 -633
- package/dist/cache/EmbeddingCache.d.ts +110 -0
- package/dist/cache/EmbeddingCache.d.ts.map +1 -0
- package/dist/cache/EmbeddingCache.js +239 -0
- package/dist/cache/EmbeddingCache.js.map +1 -0
- package/dist/cache/index.d.ts +6 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +6 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cli/index.js +0 -0
- package/dist/db/cloud.d.ts +1 -0
- package/dist/db/cloud.d.ts.map +1 -1
- package/dist/db/drizzle-client.d.ts +10 -1
- package/dist/db/drizzle-client.d.ts.map +1 -1
- package/dist/db/drizzle-client.js +57 -3
- package/dist/db/drizzle-client.js.map +1 -1
- package/dist/db/errors.d.ts +13 -1
- package/dist/db/errors.d.ts.map +1 -1
- package/dist/db/errors.js +49 -5
- package/dist/db/errors.js.map +1 -1
- package/dist/db/migrations.d.ts +42 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +173 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/turso-client.d.ts +15 -3
- package/dist/db/turso-client.d.ts.map +1 -1
- package/dist/db/turso-client.js +50 -39
- package/dist/db/turso-client.js.map +1 -1
- package/dist/eslint/rules/no-async-useeffect.js +6 -6
- package/dist/events/EventBus.d.ts +97 -0
- package/dist/events/EventBus.d.ts.map +1 -0
- package/dist/events/EventBus.js +256 -0
- package/dist/events/EventBus.js.map +1 -0
- package/dist/events/index.d.ts +7 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +9 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +989 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +136 -0
- package/dist/events/types.js.map +1 -0
- package/dist/experts/ConsensusEngine.d.ts +57 -0
- package/dist/experts/ConsensusEngine.d.ts.map +1 -0
- package/dist/experts/ConsensusEngine.js +146 -0
- package/dist/experts/ConsensusEngine.js.map +1 -0
- package/dist/experts/ExpertPanelService.d.ts +84 -0
- package/dist/experts/ExpertPanelService.d.ts.map +1 -0
- package/dist/experts/ExpertPanelService.js +204 -0
- package/dist/experts/ExpertPanelService.js.map +1 -0
- package/dist/experts/ExpertRouter.d.ts +68 -0
- package/dist/experts/ExpertRouter.d.ts.map +1 -0
- package/dist/experts/ExpertRouter.js +374 -0
- package/dist/experts/ExpertRouter.js.map +1 -0
- package/dist/experts/VoteCollector.d.ts +58 -0
- package/dist/experts/VoteCollector.d.ts.map +1 -0
- package/dist/experts/VoteCollector.js +146 -0
- package/dist/experts/VoteCollector.js.map +1 -0
- package/dist/experts/index.d.ts +9 -0
- package/dist/experts/index.d.ts.map +1 -0
- package/dist/experts/index.js +13 -0
- package/dist/experts/index.js.map +1 -0
- package/dist/hooks/cloud-pre-tool-use.js +20 -20
- package/dist/hooks/expert-review.d.ts +74 -0
- package/dist/hooks/expert-review.d.ts.map +1 -0
- package/dist/hooks/expert-review.js +220 -0
- package/dist/hooks/expert-review.js.map +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/index.d.ts +450 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +50 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/mcp/schemas.d.ts +278 -0
- package/dist/mcp/schemas.d.ts.map +1 -0
- package/dist/mcp/schemas.js +166 -0
- package/dist/mcp/schemas.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +14 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/patterns/feedback-loop.d.ts +264 -0
- package/dist/patterns/feedback-loop.d.ts.map +1 -0
- package/dist/patterns/feedback-loop.js +329 -0
- package/dist/patterns/feedback-loop.js.map +1 -0
- package/dist/patterns/index.d.ts +9 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +9 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/patterns/lifecycle.d.ts +88 -0
- package/dist/patterns/lifecycle.d.ts.map +1 -0
- package/dist/patterns/lifecycle.js +284 -0
- package/dist/patterns/lifecycle.js.map +1 -0
- package/dist/patterns/registry.d.ts +142 -0
- package/dist/patterns/registry.d.ts.map +1 -0
- package/dist/patterns/registry.js +442 -0
- package/dist/patterns/registry.js.map +1 -0
- package/dist/performance/Debouncer.d.ts +91 -0
- package/dist/performance/Debouncer.d.ts.map +1 -0
- package/dist/performance/Debouncer.js +198 -0
- package/dist/performance/Debouncer.js.map +1 -0
- package/dist/performance/MemoryDecay.d.ts +82 -0
- package/dist/performance/MemoryDecay.d.ts.map +1 -0
- package/dist/performance/MemoryDecay.js +153 -0
- package/dist/performance/MemoryDecay.js.map +1 -0
- package/dist/performance/index.d.ts +7 -0
- package/dist/performance/index.d.ts.map +1 -0
- package/dist/performance/index.js +9 -0
- package/dist/performance/index.js.map +1 -0
- package/dist/schema/expert-types.d.ts +395 -0
- package/dist/schema/expert-types.d.ts.map +1 -0
- package/dist/schema/expert-types.js +250 -0
- package/dist/schema/expert-types.js.map +1 -0
- package/dist/services/ContextGenerator.js +7 -7
- package/dist/services/PlanManager.d.ts +1 -1
- package/dist/services/PlanManager.d.ts.map +1 -1
- package/dist/services/PlanManager.js +26 -6
- package/dist/services/PlanManager.js.map +1 -1
- package/dist/services/ProjectScaffold.js +76 -76
- package/dist/services/memory-router.js +35 -35
- package/dist/services/pattern-tracker.js +90 -90
- package/dist/services/semantic-search.js +2 -2
- package/package.json +105 -104
- package/standards/README.md +50 -50
- package/standards/experts/expert-routing.md +215 -215
- package/standards/general/code-quality.md +86 -86
- package/standards/general/memory-usage.md +205 -205
- package/standards/general/sync-workflow.md +235 -235
- package/standards/general/workflow.md +82 -82
- package/standards/hooks/mandatory-tracking.md +446 -446
- package/standards/infrastructure/cloud-database.md +287 -287
- package/standards/mcp/server-design.md +243 -243
- package/standards/mcp/tool-patterns.md +354 -354
- package/standards/skills/skill-structure.md +286 -286
- package/standards/skills/workflow-design.md +323 -323
- package/standards/tools/tool-design.md +297 -297
- package/templates/agents/architecture-expert.md +61 -61
- package/templates/agents/database-expert.md +62 -62
- package/templates/agents/documentation-expert.md +57 -57
- package/templates/agents/memory-expert.md +88 -88
- package/templates/agents/performance-expert.md +61 -61
- package/templates/agents/security-expert.md +59 -59
- package/templates/agents/ux-expert.md +63 -63
- package/templates/agents/worker.md +75 -75
- package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
- package/templates/claude-settings.json +72 -72
- package/templates/commands/experts.md +138 -138
- package/templates/hooks/README.md +158 -158
- package/templates/hooks/project.config.json.template +77 -77
- package/templates/hooks/settings.local.json.template +57 -57
- package/templates/memory-config.json +56 -56
- package/templates/memory-config.schema.json +212 -212
- package/templates/settings.json +58 -58
- package/templates/skills/continue.md +205 -205
- package/templates/workflows/business-improvement.md +264 -264
- package/templates/workflows/expert-review.md +153 -153
- package/templates/workflows/internal-app.md +245 -245
- package/templates/workflows/sync-docs.md +187 -187
|
@@ -1,215 +1,215 @@
|
|
|
1
|
-
# Expert Routing - Cuándo Consultar Expertos
|
|
2
|
-
|
|
3
|
-
## Principio
|
|
4
|
-
|
|
5
|
-
Los expertos (`/experts`) validan código crítico. No todo código necesita revisión de expertos.
|
|
6
|
-
|
|
7
|
-
## Cuándo Consultar
|
|
8
|
-
|
|
9
|
-
### SIEMPRE Consultar
|
|
10
|
-
|
|
11
|
-
| Área | Expertos | Por qué |
|
|
12
|
-
|------|----------|---------|
|
|
13
|
-
| **Finanzas** | Security, Architecture | Dinero real, dual-write requerido |
|
|
14
|
-
| **Autenticación** | Security, Architecture | Seguridad crítica |
|
|
15
|
-
| **Schema DB** | Database, Architecture | Cambios irreversibles |
|
|
16
|
-
| **Pagos externos** | Security, Performance | Integraciones sensibles |
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# Ejemplos de rutas críticas
|
|
20
|
-
src/server/api/routers/finances/**
|
|
21
|
-
src/server/api/routers/auth/**
|
|
22
|
-
src/server/schema/**
|
|
23
|
-
drizzle/migrations/**
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### CONSIDERAR Consultar
|
|
27
|
-
|
|
28
|
-
| Área | Expertos | Cuándo |
|
|
29
|
-
|------|----------|--------|
|
|
30
|
-
| **APIs** | Performance, Architecture | Si es nueva o cambia contrato |
|
|
31
|
-
| **Componentes UI** | UX, Performance | Si es core o afecta muchos usuarios |
|
|
32
|
-
| **Refactoring** | Architecture | Si toca múltiples dominios |
|
|
33
|
-
|
|
34
|
-
### NO Consultar
|
|
35
|
-
|
|
36
|
-
- Typos y fixes menores
|
|
37
|
-
- Documentación
|
|
38
|
-
- Tests
|
|
39
|
-
- Código experimental/WIP
|
|
40
|
-
- Generado automáticamente
|
|
41
|
-
|
|
42
|
-
## Proceso de Consulta
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
1. Identificar cambios críticos
|
|
46
|
-
↓
|
|
47
|
-
2. Ejecutar /experts [archivos]
|
|
48
|
-
↓
|
|
49
|
-
3. Esperar consenso
|
|
50
|
-
↓
|
|
51
|
-
4. Si APPROVED → continuar
|
|
52
|
-
Si REJECTED → aplicar feedback → volver a 2
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## Decisiones por Experto
|
|
56
|
-
|
|
57
|
-
### Security Expert
|
|
58
|
-
|
|
59
|
-
**Consultar cuando:**
|
|
60
|
-
- Input de usuario no validado
|
|
61
|
-
- Queries a base de datos
|
|
62
|
-
- Operaciones financieras
|
|
63
|
-
- Cambios de permisos
|
|
64
|
-
|
|
65
|
-
**Busca:**
|
|
66
|
-
- SQL injection
|
|
67
|
-
- XSS vulnerabilities
|
|
68
|
-
- Missing Zod validation
|
|
69
|
-
- Finance dual-write violations
|
|
70
|
-
|
|
71
|
-
### Performance Expert
|
|
72
|
-
|
|
73
|
-
**Consultar cuando:**
|
|
74
|
-
- Loops con await
|
|
75
|
-
- Queries en componentes
|
|
76
|
-
- Imports de librerías pesadas
|
|
77
|
-
- Cambios en data fetching
|
|
78
|
-
|
|
79
|
-
**Busca:**
|
|
80
|
-
- N+1 queries
|
|
81
|
-
- API waterfalls
|
|
82
|
-
- Missing lazy loading
|
|
83
|
-
- Unnecessary re-renders
|
|
84
|
-
|
|
85
|
-
### Architecture Expert
|
|
86
|
-
|
|
87
|
-
**Consultar cuando:**
|
|
88
|
-
- Nuevos módulos/dominios
|
|
89
|
-
- Cambios de estructura
|
|
90
|
-
- Tipos compartidos
|
|
91
|
-
- Imports cross-domain
|
|
92
|
-
|
|
93
|
-
**Busca:**
|
|
94
|
-
- Type inference chain breaks
|
|
95
|
-
- Circular dependencies
|
|
96
|
-
- SOLID violations
|
|
97
|
-
- ADR misalignment
|
|
98
|
-
|
|
99
|
-
### Database Expert
|
|
100
|
-
|
|
101
|
-
**Consultar cuando:**
|
|
102
|
-
- Cambios de schema
|
|
103
|
-
- Nuevas migraciones
|
|
104
|
-
- Queries complejas
|
|
105
|
-
- Relaciones entre tablas
|
|
106
|
-
|
|
107
|
-
**Busca:**
|
|
108
|
-
- Missing constraints
|
|
109
|
-
- Type sync issues
|
|
110
|
-
- Unsafe migrations
|
|
111
|
-
- N+1 patterns
|
|
112
|
-
|
|
113
|
-
### UX Expert
|
|
114
|
-
|
|
115
|
-
**Consultar cuando:**
|
|
116
|
-
- Componentes de formulario
|
|
117
|
-
- Navegación
|
|
118
|
-
- Modales/overlays
|
|
119
|
-
- Responsive design
|
|
120
|
-
|
|
121
|
-
**Busca:**
|
|
122
|
-
- Missing ARIA
|
|
123
|
-
- Touch target size
|
|
124
|
-
- Hardcoded colors
|
|
125
|
-
- i18n issues
|
|
126
|
-
|
|
127
|
-
## Reglas de Consenso
|
|
128
|
-
|
|
129
|
-
### Código Crítico (Unanimidad)
|
|
130
|
-
|
|
131
|
-
Todos los expertos deben aprobar:
|
|
132
|
-
|
|
133
|
-
```
|
|
134
|
-
✅ Security: APPROVE
|
|
135
|
-
✅ Architecture: APPROVE
|
|
136
|
-
✅ Database: APPROVE
|
|
137
|
-
⊝ Memory: ABSTAIN
|
|
138
|
-
|
|
139
|
-
Result: APPROVED (3/3 voting approved)
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### Código Normal (Mayoría)
|
|
143
|
-
|
|
144
|
-
≥3 de 5 expertos aprueban:
|
|
145
|
-
|
|
146
|
-
```
|
|
147
|
-
✅ Security: APPROVE
|
|
148
|
-
✅ Architecture: APPROVE
|
|
149
|
-
❌ Performance: REJECT
|
|
150
|
-
✅ UX: APPROVE
|
|
151
|
-
⊝ Memory: ABSTAIN
|
|
152
|
-
|
|
153
|
-
Result: APPROVED (3/4 voting approved, 1 rejected)
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
## Integración en Workflow
|
|
157
|
-
|
|
158
|
-
```markdown
|
|
159
|
-
## Después de implementar
|
|
160
|
-
|
|
161
|
-
1. Verificar si cambios son críticos:
|
|
162
|
-
- ¿Toca finanzas/auth/schema?
|
|
163
|
-
- ¿Nuevo dominio o refactoring grande?
|
|
164
|
-
|
|
165
|
-
2. Si es crítico:
|
|
166
|
-
/experts [archivos modificados]
|
|
167
|
-
|
|
168
|
-
3. Esperar resultado:
|
|
169
|
-
- APPROVED → commit
|
|
170
|
-
- REJECTED → aplicar fixes → volver a consultar
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
## Memory Expert (Especial)
|
|
174
|
-
|
|
175
|
-
El Memory Expert **nunca rechaza** - su rol es aprender:
|
|
176
|
-
|
|
177
|
-
- Detecta patrones repetidos (3+ = auto-improve)
|
|
178
|
-
- Genera reglas ESLint automáticamente
|
|
179
|
-
- Crea memorias de gotchas
|
|
180
|
-
- Propone ADRs para decisiones
|
|
181
|
-
|
|
182
|
-
Siempre vota ABSTAIN pero captura aprendizajes.
|
|
183
|
-
|
|
184
|
-
## Comandos Rápidos
|
|
185
|
-
|
|
186
|
-
```bash
|
|
187
|
-
# Review archivos específicos
|
|
188
|
-
/experts src/server/api/routers/finances/expenses.ts
|
|
189
|
-
|
|
190
|
-
# Review directorio
|
|
191
|
-
/experts src/server/api/routers/finances/
|
|
192
|
-
|
|
193
|
-
# Solo expertos específicos
|
|
194
|
-
/experts src/file.ts --only security,architecture
|
|
195
|
-
|
|
196
|
-
# Modo verbose
|
|
197
|
-
/experts src/file.ts --verbose
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
## Ejemplo de Flujo
|
|
201
|
-
|
|
202
|
-
```
|
|
203
|
-
Tarea: Agregar endpoint de pago
|
|
204
|
-
|
|
205
|
-
1. Implementar endpoint
|
|
206
|
-
2. Detectar: es código financiero → CRÍTICO
|
|
207
|
-
3. Ejecutar: /experts src/server/api/routers/payments/...
|
|
208
|
-
4. Resultado:
|
|
209
|
-
❌ REJECTED - Security Expert
|
|
210
|
-
"Missing LedgerService.createEntry() for dual-write"
|
|
211
|
-
5. Aplicar fix
|
|
212
|
-
6. Re-ejecutar: /experts ...
|
|
213
|
-
7. ✅ APPROVED
|
|
214
|
-
8. Commit
|
|
215
|
-
```
|
|
1
|
+
# Expert Routing - Cuándo Consultar Expertos
|
|
2
|
+
|
|
3
|
+
## Principio
|
|
4
|
+
|
|
5
|
+
Los expertos (`/experts`) validan código crítico. No todo código necesita revisión de expertos.
|
|
6
|
+
|
|
7
|
+
## Cuándo Consultar
|
|
8
|
+
|
|
9
|
+
### SIEMPRE Consultar
|
|
10
|
+
|
|
11
|
+
| Área | Expertos | Por qué |
|
|
12
|
+
|------|----------|---------|
|
|
13
|
+
| **Finanzas** | Security, Architecture | Dinero real, dual-write requerido |
|
|
14
|
+
| **Autenticación** | Security, Architecture | Seguridad crítica |
|
|
15
|
+
| **Schema DB** | Database, Architecture | Cambios irreversibles |
|
|
16
|
+
| **Pagos externos** | Security, Performance | Integraciones sensibles |
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Ejemplos de rutas críticas
|
|
20
|
+
src/server/api/routers/finances/**
|
|
21
|
+
src/server/api/routers/auth/**
|
|
22
|
+
src/server/schema/**
|
|
23
|
+
drizzle/migrations/**
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### CONSIDERAR Consultar
|
|
27
|
+
|
|
28
|
+
| Área | Expertos | Cuándo |
|
|
29
|
+
|------|----------|--------|
|
|
30
|
+
| **APIs** | Performance, Architecture | Si es nueva o cambia contrato |
|
|
31
|
+
| **Componentes UI** | UX, Performance | Si es core o afecta muchos usuarios |
|
|
32
|
+
| **Refactoring** | Architecture | Si toca múltiples dominios |
|
|
33
|
+
|
|
34
|
+
### NO Consultar
|
|
35
|
+
|
|
36
|
+
- Typos y fixes menores
|
|
37
|
+
- Documentación
|
|
38
|
+
- Tests
|
|
39
|
+
- Código experimental/WIP
|
|
40
|
+
- Generado automáticamente
|
|
41
|
+
|
|
42
|
+
## Proceso de Consulta
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
1. Identificar cambios críticos
|
|
46
|
+
↓
|
|
47
|
+
2. Ejecutar /experts [archivos]
|
|
48
|
+
↓
|
|
49
|
+
3. Esperar consenso
|
|
50
|
+
↓
|
|
51
|
+
4. Si APPROVED → continuar
|
|
52
|
+
Si REJECTED → aplicar feedback → volver a 2
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Decisiones por Experto
|
|
56
|
+
|
|
57
|
+
### Security Expert
|
|
58
|
+
|
|
59
|
+
**Consultar cuando:**
|
|
60
|
+
- Input de usuario no validado
|
|
61
|
+
- Queries a base de datos
|
|
62
|
+
- Operaciones financieras
|
|
63
|
+
- Cambios de permisos
|
|
64
|
+
|
|
65
|
+
**Busca:**
|
|
66
|
+
- SQL injection
|
|
67
|
+
- XSS vulnerabilities
|
|
68
|
+
- Missing Zod validation
|
|
69
|
+
- Finance dual-write violations
|
|
70
|
+
|
|
71
|
+
### Performance Expert
|
|
72
|
+
|
|
73
|
+
**Consultar cuando:**
|
|
74
|
+
- Loops con await
|
|
75
|
+
- Queries en componentes
|
|
76
|
+
- Imports de librerías pesadas
|
|
77
|
+
- Cambios en data fetching
|
|
78
|
+
|
|
79
|
+
**Busca:**
|
|
80
|
+
- N+1 queries
|
|
81
|
+
- API waterfalls
|
|
82
|
+
- Missing lazy loading
|
|
83
|
+
- Unnecessary re-renders
|
|
84
|
+
|
|
85
|
+
### Architecture Expert
|
|
86
|
+
|
|
87
|
+
**Consultar cuando:**
|
|
88
|
+
- Nuevos módulos/dominios
|
|
89
|
+
- Cambios de estructura
|
|
90
|
+
- Tipos compartidos
|
|
91
|
+
- Imports cross-domain
|
|
92
|
+
|
|
93
|
+
**Busca:**
|
|
94
|
+
- Type inference chain breaks
|
|
95
|
+
- Circular dependencies
|
|
96
|
+
- SOLID violations
|
|
97
|
+
- ADR misalignment
|
|
98
|
+
|
|
99
|
+
### Database Expert
|
|
100
|
+
|
|
101
|
+
**Consultar cuando:**
|
|
102
|
+
- Cambios de schema
|
|
103
|
+
- Nuevas migraciones
|
|
104
|
+
- Queries complejas
|
|
105
|
+
- Relaciones entre tablas
|
|
106
|
+
|
|
107
|
+
**Busca:**
|
|
108
|
+
- Missing constraints
|
|
109
|
+
- Type sync issues
|
|
110
|
+
- Unsafe migrations
|
|
111
|
+
- N+1 patterns
|
|
112
|
+
|
|
113
|
+
### UX Expert
|
|
114
|
+
|
|
115
|
+
**Consultar cuando:**
|
|
116
|
+
- Componentes de formulario
|
|
117
|
+
- Navegación
|
|
118
|
+
- Modales/overlays
|
|
119
|
+
- Responsive design
|
|
120
|
+
|
|
121
|
+
**Busca:**
|
|
122
|
+
- Missing ARIA
|
|
123
|
+
- Touch target size
|
|
124
|
+
- Hardcoded colors
|
|
125
|
+
- i18n issues
|
|
126
|
+
|
|
127
|
+
## Reglas de Consenso
|
|
128
|
+
|
|
129
|
+
### Código Crítico (Unanimidad)
|
|
130
|
+
|
|
131
|
+
Todos los expertos deben aprobar:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
✅ Security: APPROVE
|
|
135
|
+
✅ Architecture: APPROVE
|
|
136
|
+
✅ Database: APPROVE
|
|
137
|
+
⊝ Memory: ABSTAIN
|
|
138
|
+
|
|
139
|
+
Result: APPROVED (3/3 voting approved)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Código Normal (Mayoría)
|
|
143
|
+
|
|
144
|
+
≥3 de 5 expertos aprueban:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
✅ Security: APPROVE
|
|
148
|
+
✅ Architecture: APPROVE
|
|
149
|
+
❌ Performance: REJECT
|
|
150
|
+
✅ UX: APPROVE
|
|
151
|
+
⊝ Memory: ABSTAIN
|
|
152
|
+
|
|
153
|
+
Result: APPROVED (3/4 voting approved, 1 rejected)
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Integración en Workflow
|
|
157
|
+
|
|
158
|
+
```markdown
|
|
159
|
+
## Después de implementar
|
|
160
|
+
|
|
161
|
+
1. Verificar si cambios son críticos:
|
|
162
|
+
- ¿Toca finanzas/auth/schema?
|
|
163
|
+
- ¿Nuevo dominio o refactoring grande?
|
|
164
|
+
|
|
165
|
+
2. Si es crítico:
|
|
166
|
+
/experts [archivos modificados]
|
|
167
|
+
|
|
168
|
+
3. Esperar resultado:
|
|
169
|
+
- APPROVED → commit
|
|
170
|
+
- REJECTED → aplicar fixes → volver a consultar
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Memory Expert (Especial)
|
|
174
|
+
|
|
175
|
+
El Memory Expert **nunca rechaza** - su rol es aprender:
|
|
176
|
+
|
|
177
|
+
- Detecta patrones repetidos (3+ = auto-improve)
|
|
178
|
+
- Genera reglas ESLint automáticamente
|
|
179
|
+
- Crea memorias de gotchas
|
|
180
|
+
- Propone ADRs para decisiones
|
|
181
|
+
|
|
182
|
+
Siempre vota ABSTAIN pero captura aprendizajes.
|
|
183
|
+
|
|
184
|
+
## Comandos Rápidos
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
# Review archivos específicos
|
|
188
|
+
/experts src/server/api/routers/finances/expenses.ts
|
|
189
|
+
|
|
190
|
+
# Review directorio
|
|
191
|
+
/experts src/server/api/routers/finances/
|
|
192
|
+
|
|
193
|
+
# Solo expertos específicos
|
|
194
|
+
/experts src/file.ts --only security,architecture
|
|
195
|
+
|
|
196
|
+
# Modo verbose
|
|
197
|
+
/experts src/file.ts --verbose
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Ejemplo de Flujo
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
Tarea: Agregar endpoint de pago
|
|
204
|
+
|
|
205
|
+
1. Implementar endpoint
|
|
206
|
+
2. Detectar: es código financiero → CRÍTICO
|
|
207
|
+
3. Ejecutar: /experts src/server/api/routers/payments/...
|
|
208
|
+
4. Resultado:
|
|
209
|
+
❌ REJECTED - Security Expert
|
|
210
|
+
"Missing LedgerService.createEntry() for dual-write"
|
|
211
|
+
5. Aplicar fix
|
|
212
|
+
6. Re-ejecutar: /experts ...
|
|
213
|
+
7. ✅ APPROVED
|
|
214
|
+
8. Commit
|
|
215
|
+
```
|
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
# Estándares de Calidad de Código
|
|
2
|
-
|
|
3
|
-
## TypeScript
|
|
4
|
-
|
|
5
|
-
### Tipos
|
|
6
|
-
- **NO usar `any`** - Usar tipos específicos o `unknown` con validación
|
|
7
|
-
- **NO usar `as` casting** innecesario - Preferir type guards
|
|
8
|
-
- **Inferir tipos** cuando sea posible - No duplicar tipos manualmente
|
|
9
|
-
|
|
10
|
-
```typescript
|
|
11
|
-
// MAL
|
|
12
|
-
const data: any = await fetch(...)
|
|
13
|
-
const user = response as User
|
|
14
|
-
|
|
15
|
-
// BIEN
|
|
16
|
-
const data: unknown = await fetch(...)
|
|
17
|
-
if (isUser(data)) {
|
|
18
|
-
// data es User aquí
|
|
19
|
-
}
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### Imports
|
|
23
|
-
- Usar **barrel exports** (`index.ts`)
|
|
24
|
-
- Imports **absolutos** con aliases (`@/components/...`)
|
|
25
|
-
- NO importar tipos con `import type` a menos que sea necesario para evitar ciclos
|
|
26
|
-
|
|
27
|
-
### Async/Await
|
|
28
|
-
- **NO await en loops** - Usar `Promise.all` o `Promise.allSettled`
|
|
29
|
-
- Manejar errores con try/catch o `.catch()`
|
|
30
|
-
|
|
31
|
-
```typescript
|
|
32
|
-
// MAL
|
|
33
|
-
for (const item of items) {
|
|
34
|
-
await processItem(item) // N+1 pattern
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// BIEN
|
|
38
|
-
await Promise.all(items.map(item => processItem(item)))
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## React
|
|
42
|
-
|
|
43
|
-
### Componentes
|
|
44
|
-
- **Server Components por defecto** - Solo usar Client cuando necesites interactividad
|
|
45
|
-
- **NO inline functions en JSX** para event handlers
|
|
46
|
-
- Usar **hooks personalizados** para lógica reutilizable
|
|
47
|
-
|
|
48
|
-
```tsx
|
|
49
|
-
// MAL
|
|
50
|
-
<Button onClick={() => setOpen(true)} />
|
|
51
|
-
|
|
52
|
-
// BIEN
|
|
53
|
-
const handleOpen = useCallback(() => setOpen(true), [])
|
|
54
|
-
<Button onClick={handleOpen} />
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### Estado
|
|
58
|
-
- **Mínimo estado local** - Preferir server state (React Query/tRPC)
|
|
59
|
-
- **NO prop drilling** - Usar Context o composición
|
|
60
|
-
|
|
61
|
-
## Base de Datos (Drizzle)
|
|
62
|
-
|
|
63
|
-
### Queries
|
|
64
|
-
- Siempre **filtrar por sistema** en tablas compartidas
|
|
65
|
-
- Usar **transacciones** para operaciones múltiples
|
|
66
|
-
- Evitar **N+1 queries** - Usar joins o Promise.all
|
|
67
|
-
|
|
68
|
-
```typescript
|
|
69
|
-
// MAL
|
|
70
|
-
const items = await db.select().from(devItems)
|
|
71
|
-
|
|
72
|
-
// BIEN
|
|
73
|
-
const items = await db.select().from(devItems)
|
|
74
|
-
.where(eq(devItems.system, 'MYPROJECT'))
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### Migraciones
|
|
78
|
-
- **Nunca** modificar migraciones ya ejecutadas
|
|
79
|
-
- Siempre revisar el SQL generado antes de push
|
|
80
|
-
- Usar `tablesFilter` para no afectar tablas de otros proyectos
|
|
81
|
-
|
|
82
|
-
## Tests
|
|
83
|
-
|
|
84
|
-
- Tests para **lógica crítica** (pagos, auth, cálculos)
|
|
85
|
-
- **NO tests para código trivial**
|
|
86
|
-
- Preferir **integration tests** sobre unit tests para APIs
|
|
1
|
+
# Estándares de Calidad de Código
|
|
2
|
+
|
|
3
|
+
## TypeScript
|
|
4
|
+
|
|
5
|
+
### Tipos
|
|
6
|
+
- **NO usar `any`** - Usar tipos específicos o `unknown` con validación
|
|
7
|
+
- **NO usar `as` casting** innecesario - Preferir type guards
|
|
8
|
+
- **Inferir tipos** cuando sea posible - No duplicar tipos manualmente
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
// MAL
|
|
12
|
+
const data: any = await fetch(...)
|
|
13
|
+
const user = response as User
|
|
14
|
+
|
|
15
|
+
// BIEN
|
|
16
|
+
const data: unknown = await fetch(...)
|
|
17
|
+
if (isUser(data)) {
|
|
18
|
+
// data es User aquí
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Imports
|
|
23
|
+
- Usar **barrel exports** (`index.ts`)
|
|
24
|
+
- Imports **absolutos** con aliases (`@/components/...`)
|
|
25
|
+
- NO importar tipos con `import type` a menos que sea necesario para evitar ciclos
|
|
26
|
+
|
|
27
|
+
### Async/Await
|
|
28
|
+
- **NO await en loops** - Usar `Promise.all` o `Promise.allSettled`
|
|
29
|
+
- Manejar errores con try/catch o `.catch()`
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
// MAL
|
|
33
|
+
for (const item of items) {
|
|
34
|
+
await processItem(item) // N+1 pattern
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// BIEN
|
|
38
|
+
await Promise.all(items.map(item => processItem(item)))
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## React
|
|
42
|
+
|
|
43
|
+
### Componentes
|
|
44
|
+
- **Server Components por defecto** - Solo usar Client cuando necesites interactividad
|
|
45
|
+
- **NO inline functions en JSX** para event handlers
|
|
46
|
+
- Usar **hooks personalizados** para lógica reutilizable
|
|
47
|
+
|
|
48
|
+
```tsx
|
|
49
|
+
// MAL
|
|
50
|
+
<Button onClick={() => setOpen(true)} />
|
|
51
|
+
|
|
52
|
+
// BIEN
|
|
53
|
+
const handleOpen = useCallback(() => setOpen(true), [])
|
|
54
|
+
<Button onClick={handleOpen} />
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Estado
|
|
58
|
+
- **Mínimo estado local** - Preferir server state (React Query/tRPC)
|
|
59
|
+
- **NO prop drilling** - Usar Context o composición
|
|
60
|
+
|
|
61
|
+
## Base de Datos (Drizzle)
|
|
62
|
+
|
|
63
|
+
### Queries
|
|
64
|
+
- Siempre **filtrar por sistema** en tablas compartidas
|
|
65
|
+
- Usar **transacciones** para operaciones múltiples
|
|
66
|
+
- Evitar **N+1 queries** - Usar joins o Promise.all
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
// MAL
|
|
70
|
+
const items = await db.select().from(devItems)
|
|
71
|
+
|
|
72
|
+
// BIEN
|
|
73
|
+
const items = await db.select().from(devItems)
|
|
74
|
+
.where(eq(devItems.system, 'MYPROJECT'))
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Migraciones
|
|
78
|
+
- **Nunca** modificar migraciones ya ejecutadas
|
|
79
|
+
- Siempre revisar el SQL generado antes de push
|
|
80
|
+
- Usar `tablesFilter` para no afectar tablas de otros proyectos
|
|
81
|
+
|
|
82
|
+
## Tests
|
|
83
|
+
|
|
84
|
+
- Tests para **lógica crítica** (pagos, auth, cálculos)
|
|
85
|
+
- **NO tests para código trivial**
|
|
86
|
+
- Preferir **integration tests** sobre unit tests para APIs
|