ostacky 0.6.1 → 0.6.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/README.md +9 -9
- package/assets/agents/ostacky.md +311 -310
- package/assets/commands/install-stack.md +510 -536
- package/assets/commands/opsx-sync.md +26 -26
- package/assets/mcp/ostacky-controller/index.js +989 -994
- package/assets/mcp/ostacky-controller/package.json +10 -10
- package/assets/plugins/engram.ts +537 -537
- package/assets/skills/brainstorming/SKILL.md +197 -197
- package/assets/skills/dispatching-parallel-agents/SKILL.md +182 -182
- package/assets/skills/execution-mode-evaluation/SKILL.md +189 -189
- package/assets/skills/graceful-degradation/SKILL.md +235 -235
- package/assets/skills/openspec-apply-change/SKILL.md +167 -167
- package/assets/skills/openspec-archive-change/SKILL.md +114 -114
- package/assets/skills/openspec-explore/SKILL.md +288 -288
- package/assets/skills/openspec-propose/SKILL.md +114 -114
- package/assets/skills/receiving-code-review/SKILL.md +213 -213
- package/assets/skills/review/SKILL.md +216 -216
- package/assets/skills/subagent-driven-development/SKILL.md +302 -302
- package/assets/skills/tdd/SKILL.md +371 -371
- package/assets/skills/using-git-worktrees/SKILL.md +212 -212
- package/assets/skills/using-superpowers/SKILL.md +111 -111
- package/assets/skills/writing-plans/SKILL.md +149 -149
- package/assets/skills/writing-skills/SKILL.md +655 -655
- package/dist/cli.js +2354 -2052
- package/manifest.json +158 -158
- package/package.json +1 -1
|
@@ -1,189 +1,189 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: execution-mode-evaluation
|
|
3
|
-
description: Decide entre ejecución inline o subagent-driven según el análisis de CodeGraph. Úsalo cuando tengas tasks de implementación y necesites determinar el modo de ejecución óptimo.
|
|
4
|
-
license: MIT
|
|
5
|
-
compatibility: Requires CodeGraph MCP server and OpenSpec tasks.md
|
|
6
|
-
metadata:
|
|
7
|
-
author: Ostacky
|
|
8
|
-
version: "2.0"
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
**IMPORTANT:** Engram is an **MCP server**, not a skill. Tools `mem_save`, `mem_search`, `mem_context` are MCP tools. Do NOT use `skill("engram")` — it doesn't exist.
|
|
12
|
-
|
|
13
|
-
# Skill: execution-mode-evaluation
|
|
14
|
-
|
|
15
|
-
Determinar el modo de ejecución óptimo entre **inline** y **subagent-driven** usando datos concretos de CodeGraph. La decisión sigue reglas estrictas en orden de precedencia.
|
|
16
|
-
|
|
17
|
-
## Input necesario
|
|
18
|
-
|
|
19
|
-
| Dato | Fuente | Obligatorio |
|
|
20
|
-
|------|--------|-------------|
|
|
21
|
-
| Tasks del change | `tasks.md` del cambio activo | ✅ |
|
|
22
|
-
| Archivos que modifica cada task | `codegraph_explore` o lectura directa | ✅ |
|
|
23
|
-
| Blast radius por símbolo | `codegraph_impact` | Para alta precisión |
|
|
24
|
-
| Contratos entre tasks | `design.md` | Para evaluar dependencias |
|
|
25
|
-
|
|
26
|
-
## Procedimiento
|
|
27
|
-
|
|
28
|
-
### Paso 0: Verificar datos existentes en contexto
|
|
29
|
-
|
|
30
|
-
Si ya tenés output de `codegraph_explore` para el área del cambio **Y** ese output distingue archivos por task → **saltá al Paso 0.5**. Si no, ejecutá el Paso 1.
|
|
31
|
-
|
|
32
|
-
### Paso 0.1: Consultar Engram por decisiones previas
|
|
33
|
-
|
|
34
|
-
`mem_search` con keywords del cambio (nombre del módulo, área afectada). Si existe una decisión de modo de ejecución anterior para un cambio similar, considerarla como referencia — no como vinculante. Las condiciones pueden haber cambiado.
|
|
35
|
-
|
|
36
|
-
### Paso 0.5: Early exit para cambios pequeños
|
|
37
|
-
|
|
38
|
-
Si el change tiene **≤2 tasks** Y **no comparten archivos entre sí** → devolver directamente:
|
|
39
|
-
|
|
40
|
-
```json
|
|
41
|
-
{
|
|
42
|
-
"recommendation": "INLINE",
|
|
43
|
-
"reasons": ["Cambio pequeño (≤2 tasks independientes sin archivos compartidos)."],
|
|
44
|
-
"codegraphUsed": [], "taskCount": <N>, "sharedFiles": {},
|
|
45
|
-
"fileClusters": [<cada task como cluster>], "clusterCount": <taskCount>,
|
|
46
|
-
"sequentialDeps": [], "estLines": <est>, "hasExplicitContract": false,
|
|
47
|
-
"filesPerTask": {}, "globalRuleTriggered": "early-exit"
|
|
48
|
-
}
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Paso 1: Obtener datos de CodeGraph
|
|
52
|
-
|
|
53
|
-
```
|
|
54
|
-
codegraph_explore con query: "<área del cambio>"
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Si el output es muy general → `codegraph_impact` sobre símbolos centrales para blast radius preciso.
|
|
58
|
-
Si CodeGraph no está inicializado → devolver `{ "recommendation": "INLINE", "confidence": 0.3, "reasons": ["CodeGraph no disponible"], "codegraphUsed": [] }`.
|
|
59
|
-
|
|
60
|
-
### Paso 2: Construir mapa de dependencias
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
taskCount: total tasks de implementación
|
|
64
|
-
sharedFiles: { archivo → [tasks que lo modifican] }
|
|
65
|
-
sequentialDeps: [ [taskA, taskB], ... ] // B necesita que A esté hecho
|
|
66
|
-
fileClusters: componentes conectados por sharedFiles (cierre transitivo)
|
|
67
|
-
filesPerTask: { task → [archivos que modifica] }
|
|
68
|
-
estLines: estimación conservadora (~2-3 config, ~5-10 simple, ~15-30 complejo, ~10-20 tests)
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
**Detección de sequentialDeps:** buscar en tasks.md frases como "extender", "usar lo creado en", "depende de", "modificar el [módulo] de la task anterior".
|
|
72
|
-
|
|
73
|
-
### Paso 3a: Reglas de modo global (en orden, primera que se cumpla decide)
|
|
74
|
-
|
|
75
|
-
| # | Condición | Modo | Razón |
|
|
76
|
-
|---|-----------|------|-------|
|
|
77
|
-
| **1** | `clusterCount == 1` Y cluster tiene tamaño > 1 | INLINE | Todos comparten archivos en un único cluster — imposible paralelizar |
|
|
78
|
-
| **2a** | `clusterCount >= 2` Y hay deps entre clusters Y `hasExplicitContract == false` | INLINE | Deps secuenciales entre clusters sin contrato explícito |
|
|
79
|
-
| **2b** | `clusterCount >= 2` Y (NO hay deps entre clusters O contrato explícito) | SUBAGENT-DRIVEN | Cada cluster → 1 subagente. Tasks intra-cluster van secuenciales |
|
|
80
|
-
| **3a** | `clusterCount == taskCount` Y `taskCount < 3` | INLINE | Muy pocas tasks para amortizar overhead de subagentes |
|
|
81
|
-
| **3b** | `clusterCount == taskCount` Y `estLines < 30` | INLINE | Cambio pequeño — inline más eficiente en tokens |
|
|
82
|
-
| **3c** | `clusterCount == taskCount` (ninguna anterior) | SUBAGENT-DRIVEN | Tasks independientes — subagentes aíslan contexto |
|
|
83
|
-
|
|
84
|
-
**Excepción:** instrucciones explícitas del usuario ("hacé todo inline" / "usá subagentes") tienen prioridad total.
|
|
85
|
-
|
|
86
|
-
**Regla 2b — dispatch por clusters:** el subagente recibe el CLUSTER COMPLETO (no tasks individuales), las resuelve secuencialmente (comparten archivos). Diferentes clusters corren en paralelo.
|
|
87
|
-
|
|
88
|
-
### Paso 3b: Evaluación por fases (solo si modo global es INLINE)
|
|
89
|
-
|
|
90
|
-
Si global es SUBAGENT-DRIVEN → saltar (ya está granularizado por cluster).
|
|
91
|
-
|
|
92
|
-
Para cada fase de `tasks.md`, evaluar intra-fase:
|
|
93
|
-
|
|
94
|
-
| Condición | Modo fase |
|
|
95
|
-
|-----------|-----------|
|
|
96
|
-
| sharedFiles intra-fase > 0 | INLINE |
|
|
97
|
-
| sharedFiles con fases inline > 0 | INLINE |
|
|
98
|
-
| sequentialDeps intra-fase > 0 Y sin contrato | INLINE |
|
|
99
|
-
| taskCount fase < 4 | INLINE |
|
|
100
|
-
| estLines fase < 30 | INLINE |
|
|
101
|
-
| Ninguna anterior | SUBAGENT-DRIVEN |
|
|
102
|
-
|
|
103
|
-
**Orden de ejecución:** fases inline primero (establecen base), luego fases subagent-driven (consumen base).
|
|
104
|
-
|
|
105
|
-
### Paso 4: Output
|
|
106
|
-
|
|
107
|
-
**Snapshot para el controller (JSON):**
|
|
108
|
-
|
|
109
|
-
```json
|
|
110
|
-
{
|
|
111
|
-
"recommendation": "INLINE" | "SUBAGENT_DRIVEN",
|
|
112
|
-
"reasons": ["razón principal", "razón secundaria"],
|
|
113
|
-
"codegraphUsed": ["codegraph_explore"],
|
|
114
|
-
"taskCount": <N>,
|
|
115
|
-
"sharedFiles": { "src/archivo.ts": ["task1", "task2"] },
|
|
116
|
-
"fileClusters": [["task1", "task2"], ["task3"]],
|
|
117
|
-
"clusterCount": <N>,
|
|
118
|
-
"sequentialDeps": [],
|
|
119
|
-
"estLines": <N>,
|
|
120
|
-
"hasExplicitContract": false,
|
|
121
|
-
"filesPerTask": { "task1": ["src/archivo.ts"] },
|
|
122
|
-
"globalRuleTriggered": "1" | "2a" | "2b" | "3a" | "3b" | "3c" | "early-exit",
|
|
123
|
-
"phaseRecommendations": []
|
|
124
|
-
}
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
**Output para el usuario (mostrar en lenguaje natural):**
|
|
128
|
-
|
|
129
|
-
```markdown
|
|
130
|
-
## Análisis de modo de ejecución
|
|
131
|
-
|
|
132
|
-
**Recomendación:** INLINE / SUBAGENT_DRIVEN
|
|
133
|
-
|
|
134
|
-
### Archivos compartidos entre tasks
|
|
135
|
-
| Archivo | Tasks que lo modifican |
|
|
136
|
-
|---------|------------------------|
|
|
137
|
-
| `src/auth.ts` | task1, task2 |
|
|
138
|
-
| `src/utils.ts` | task3 |
|
|
139
|
-
|
|
140
|
-
### Clusters detectados
|
|
141
|
-
| Cluster | Tasks | Archivos |
|
|
142
|
-
|---------|-------|----------|
|
|
143
|
-
| A | task1, task2 | src/auth.ts |
|
|
144
|
-
| B | task3 | src/utils.ts |
|
|
145
|
-
|
|
146
|
-
### Dependencias secuenciales
|
|
147
|
-
- task2 depende de task1 (usa lo creado en)
|
|
148
|
-
|
|
149
|
-
### Razón principal
|
|
150
|
-
[Regla 2a]: Deps secuenciales entre clusters sin contrato explícito → INLINE
|
|
151
|
-
|
|
152
|
-
### Estimación
|
|
153
|
-
~45 líneas en 2 archivos
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
**Campos del snapshot (contrato con controller):**
|
|
157
|
-
|
|
158
|
-
| Campo | Descripción |
|
|
159
|
-
|-------|-------------|
|
|
160
|
-
| `recommendation` | `INLINE` o `SUBAGENT_DRIVEN` |
|
|
161
|
-
| `reasons` | Array — primera es la principal |
|
|
162
|
-
| `codegraphUsed` | Tools de CodeGraph ejecutados |
|
|
163
|
-
| `filesPerTask` | taskId → [archivos que modifica] |
|
|
164
|
-
| `sharedFiles` | archivo → [tasks que lo tocan] |
|
|
165
|
-
| `fileClusters` | Componentes conectados por sharedFiles |
|
|
166
|
-
| `clusterCount` | `== 1` todo conectado, `== taskCount` todo independiente |
|
|
167
|
-
| `sequentialDeps` | Dependencias secuenciales entre tasks |
|
|
168
|
-
| `estLines` | Estimación conservadora |
|
|
169
|
-
| `hasExplicitContract` | `true` si design.md explicita contratos |
|
|
170
|
-
|
|
171
|
-
**⚠️ Este skill provee ANÁLISIS, no autorización.** El coordinador muestra el snapshot al usuario y pide confirmación en lenguaje natural, luego espera la respuesta.
|
|
172
|
-
|
|
173
|
-
## Ejemplo compacto
|
|
174
|
-
|
|
175
|
-
5 tasks, 3 clusters independientes (A: task1+task2 en `workflow.ts`, B: task3+task4 en `structured.ts`, C: task5 en archivo nuevo), sin deps entre clusters:
|
|
176
|
-
|
|
177
|
-
→ Rule 2b: SUBAGENT-DRIVEN. SA-1 ejecuta cluster A secuencial, SA-2 ejecuta cluster B secuencial, SA-3 ejecuta cluster C. Los 3 corren en paralelo. ✅
|
|
178
|
-
|
|
179
|
-
## Checklist
|
|
180
|
-
|
|
181
|
-
- [ ] Ejecuté `codegraph_explore` (o verifiqué datos existentes)?
|
|
182
|
-
- [ ] Construí mapa de dependencias con `fileClusters`?
|
|
183
|
-
- [ ] Identifiqué clusters (componentes conectados)?
|
|
184
|
-
- [ ] Verifiqué deps ENTRE clusters (no solo intra)?
|
|
185
|
-
- [ ] Apliqué reglas en orden (1→2a/2b→3a/3b/3c)?
|
|
186
|
-
- [ ] Anoté `globalRuleTriggered`?
|
|
187
|
-
- [ ] Si global es inline, ejecuté Paso 3b por fase?
|
|
188
|
-
- [ ] Si global es subagent por clusters (Rule 2b), documenté dispatch?
|
|
189
|
-
- [ ] Output es JSON válido con todos los campos del contrato?
|
|
1
|
+
---
|
|
2
|
+
name: execution-mode-evaluation
|
|
3
|
+
description: Decide entre ejecución inline o subagent-driven según el análisis de CodeGraph. Úsalo cuando tengas tasks de implementación y necesites determinar el modo de ejecución óptimo.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Requires CodeGraph MCP server and OpenSpec tasks.md
|
|
6
|
+
metadata:
|
|
7
|
+
author: Ostacky
|
|
8
|
+
version: "2.0"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
**IMPORTANT:** Engram is an **MCP server**, not a skill. Tools `mem_save`, `mem_search`, `mem_context` are MCP tools. Do NOT use `skill("engram")` — it doesn't exist.
|
|
12
|
+
|
|
13
|
+
# Skill: execution-mode-evaluation
|
|
14
|
+
|
|
15
|
+
Determinar el modo de ejecución óptimo entre **inline** y **subagent-driven** usando datos concretos de CodeGraph. La decisión sigue reglas estrictas en orden de precedencia.
|
|
16
|
+
|
|
17
|
+
## Input necesario
|
|
18
|
+
|
|
19
|
+
| Dato | Fuente | Obligatorio |
|
|
20
|
+
|------|--------|-------------|
|
|
21
|
+
| Tasks del change | `tasks.md` del cambio activo | ✅ |
|
|
22
|
+
| Archivos que modifica cada task | `codegraph_explore` o lectura directa | ✅ |
|
|
23
|
+
| Blast radius por símbolo | `codegraph_impact` | Para alta precisión |
|
|
24
|
+
| Contratos entre tasks | `design.md` | Para evaluar dependencias |
|
|
25
|
+
|
|
26
|
+
## Procedimiento
|
|
27
|
+
|
|
28
|
+
### Paso 0: Verificar datos existentes en contexto
|
|
29
|
+
|
|
30
|
+
Si ya tenés output de `codegraph_explore` para el área del cambio **Y** ese output distingue archivos por task → **saltá al Paso 0.5**. Si no, ejecutá el Paso 1.
|
|
31
|
+
|
|
32
|
+
### Paso 0.1: Consultar Engram por decisiones previas
|
|
33
|
+
|
|
34
|
+
`mem_search` con keywords del cambio (nombre del módulo, área afectada). Si existe una decisión de modo de ejecución anterior para un cambio similar, considerarla como referencia — no como vinculante. Las condiciones pueden haber cambiado.
|
|
35
|
+
|
|
36
|
+
### Paso 0.5: Early exit para cambios pequeños
|
|
37
|
+
|
|
38
|
+
Si el change tiene **≤2 tasks** Y **no comparten archivos entre sí** → devolver directamente:
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"recommendation": "INLINE",
|
|
43
|
+
"reasons": ["Cambio pequeño (≤2 tasks independientes sin archivos compartidos)."],
|
|
44
|
+
"codegraphUsed": [], "taskCount": <N>, "sharedFiles": {},
|
|
45
|
+
"fileClusters": [<cada task como cluster>], "clusterCount": <taskCount>,
|
|
46
|
+
"sequentialDeps": [], "estLines": <est>, "hasExplicitContract": false,
|
|
47
|
+
"filesPerTask": {}, "globalRuleTriggered": "early-exit"
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Paso 1: Obtener datos de CodeGraph
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
codegraph_explore con query: "<área del cambio>"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Si el output es muy general → `codegraph_impact` sobre símbolos centrales para blast radius preciso.
|
|
58
|
+
Si CodeGraph no está inicializado → devolver `{ "recommendation": "INLINE", "confidence": 0.3, "reasons": ["CodeGraph no disponible"], "codegraphUsed": [] }`.
|
|
59
|
+
|
|
60
|
+
### Paso 2: Construir mapa de dependencias
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
taskCount: total tasks de implementación
|
|
64
|
+
sharedFiles: { archivo → [tasks que lo modifican] }
|
|
65
|
+
sequentialDeps: [ [taskA, taskB], ... ] // B necesita que A esté hecho
|
|
66
|
+
fileClusters: componentes conectados por sharedFiles (cierre transitivo)
|
|
67
|
+
filesPerTask: { task → [archivos que modifica] }
|
|
68
|
+
estLines: estimación conservadora (~2-3 config, ~5-10 simple, ~15-30 complejo, ~10-20 tests)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Detección de sequentialDeps:** buscar en tasks.md frases como "extender", "usar lo creado en", "depende de", "modificar el [módulo] de la task anterior".
|
|
72
|
+
|
|
73
|
+
### Paso 3a: Reglas de modo global (en orden, primera que se cumpla decide)
|
|
74
|
+
|
|
75
|
+
| # | Condición | Modo | Razón |
|
|
76
|
+
|---|-----------|------|-------|
|
|
77
|
+
| **1** | `clusterCount == 1` Y cluster tiene tamaño > 1 | INLINE | Todos comparten archivos en un único cluster — imposible paralelizar |
|
|
78
|
+
| **2a** | `clusterCount >= 2` Y hay deps entre clusters Y `hasExplicitContract == false` | INLINE | Deps secuenciales entre clusters sin contrato explícito |
|
|
79
|
+
| **2b** | `clusterCount >= 2` Y (NO hay deps entre clusters O contrato explícito) | SUBAGENT-DRIVEN | Cada cluster → 1 subagente. Tasks intra-cluster van secuenciales |
|
|
80
|
+
| **3a** | `clusterCount == taskCount` Y `taskCount < 3` | INLINE | Muy pocas tasks para amortizar overhead de subagentes |
|
|
81
|
+
| **3b** | `clusterCount == taskCount` Y `estLines < 30` | INLINE | Cambio pequeño — inline más eficiente en tokens |
|
|
82
|
+
| **3c** | `clusterCount == taskCount` (ninguna anterior) | SUBAGENT-DRIVEN | Tasks independientes — subagentes aíslan contexto |
|
|
83
|
+
|
|
84
|
+
**Excepción:** instrucciones explícitas del usuario ("hacé todo inline" / "usá subagentes") tienen prioridad total.
|
|
85
|
+
|
|
86
|
+
**Regla 2b — dispatch por clusters:** el subagente recibe el CLUSTER COMPLETO (no tasks individuales), las resuelve secuencialmente (comparten archivos). Diferentes clusters corren en paralelo.
|
|
87
|
+
|
|
88
|
+
### Paso 3b: Evaluación por fases (solo si modo global es INLINE)
|
|
89
|
+
|
|
90
|
+
Si global es SUBAGENT-DRIVEN → saltar (ya está granularizado por cluster).
|
|
91
|
+
|
|
92
|
+
Para cada fase de `tasks.md`, evaluar intra-fase:
|
|
93
|
+
|
|
94
|
+
| Condición | Modo fase |
|
|
95
|
+
|-----------|-----------|
|
|
96
|
+
| sharedFiles intra-fase > 0 | INLINE |
|
|
97
|
+
| sharedFiles con fases inline > 0 | INLINE |
|
|
98
|
+
| sequentialDeps intra-fase > 0 Y sin contrato | INLINE |
|
|
99
|
+
| taskCount fase < 4 | INLINE |
|
|
100
|
+
| estLines fase < 30 | INLINE |
|
|
101
|
+
| Ninguna anterior | SUBAGENT-DRIVEN |
|
|
102
|
+
|
|
103
|
+
**Orden de ejecución:** fases inline primero (establecen base), luego fases subagent-driven (consumen base).
|
|
104
|
+
|
|
105
|
+
### Paso 4: Output
|
|
106
|
+
|
|
107
|
+
**Snapshot para el controller (JSON):**
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"recommendation": "INLINE" | "SUBAGENT_DRIVEN",
|
|
112
|
+
"reasons": ["razón principal", "razón secundaria"],
|
|
113
|
+
"codegraphUsed": ["codegraph_explore"],
|
|
114
|
+
"taskCount": <N>,
|
|
115
|
+
"sharedFiles": { "src/archivo.ts": ["task1", "task2"] },
|
|
116
|
+
"fileClusters": [["task1", "task2"], ["task3"]],
|
|
117
|
+
"clusterCount": <N>,
|
|
118
|
+
"sequentialDeps": [],
|
|
119
|
+
"estLines": <N>,
|
|
120
|
+
"hasExplicitContract": false,
|
|
121
|
+
"filesPerTask": { "task1": ["src/archivo.ts"] },
|
|
122
|
+
"globalRuleTriggered": "1" | "2a" | "2b" | "3a" | "3b" | "3c" | "early-exit",
|
|
123
|
+
"phaseRecommendations": []
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Output para el usuario (mostrar en lenguaje natural):**
|
|
128
|
+
|
|
129
|
+
```markdown
|
|
130
|
+
## Análisis de modo de ejecución
|
|
131
|
+
|
|
132
|
+
**Recomendación:** INLINE / SUBAGENT_DRIVEN
|
|
133
|
+
|
|
134
|
+
### Archivos compartidos entre tasks
|
|
135
|
+
| Archivo | Tasks que lo modifican |
|
|
136
|
+
|---------|------------------------|
|
|
137
|
+
| `src/auth.ts` | task1, task2 |
|
|
138
|
+
| `src/utils.ts` | task3 |
|
|
139
|
+
|
|
140
|
+
### Clusters detectados
|
|
141
|
+
| Cluster | Tasks | Archivos |
|
|
142
|
+
|---------|-------|----------|
|
|
143
|
+
| A | task1, task2 | src/auth.ts |
|
|
144
|
+
| B | task3 | src/utils.ts |
|
|
145
|
+
|
|
146
|
+
### Dependencias secuenciales
|
|
147
|
+
- task2 depende de task1 (usa lo creado en)
|
|
148
|
+
|
|
149
|
+
### Razón principal
|
|
150
|
+
[Regla 2a]: Deps secuenciales entre clusters sin contrato explícito → INLINE
|
|
151
|
+
|
|
152
|
+
### Estimación
|
|
153
|
+
~45 líneas en 2 archivos
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Campos del snapshot (contrato con controller):**
|
|
157
|
+
|
|
158
|
+
| Campo | Descripción |
|
|
159
|
+
|-------|-------------|
|
|
160
|
+
| `recommendation` | `INLINE` o `SUBAGENT_DRIVEN` |
|
|
161
|
+
| `reasons` | Array — primera es la principal |
|
|
162
|
+
| `codegraphUsed` | Tools de CodeGraph ejecutados |
|
|
163
|
+
| `filesPerTask` | taskId → [archivos que modifica] |
|
|
164
|
+
| `sharedFiles` | archivo → [tasks que lo tocan] |
|
|
165
|
+
| `fileClusters` | Componentes conectados por sharedFiles |
|
|
166
|
+
| `clusterCount` | `== 1` todo conectado, `== taskCount` todo independiente |
|
|
167
|
+
| `sequentialDeps` | Dependencias secuenciales entre tasks |
|
|
168
|
+
| `estLines` | Estimación conservadora |
|
|
169
|
+
| `hasExplicitContract` | `true` si design.md explicita contratos |
|
|
170
|
+
|
|
171
|
+
**⚠️ Este skill provee ANÁLISIS, no autorización.** El coordinador muestra el snapshot al usuario y pide confirmación en lenguaje natural, luego espera la respuesta.
|
|
172
|
+
|
|
173
|
+
## Ejemplo compacto
|
|
174
|
+
|
|
175
|
+
5 tasks, 3 clusters independientes (A: task1+task2 en `workflow.ts`, B: task3+task4 en `structured.ts`, C: task5 en archivo nuevo), sin deps entre clusters:
|
|
176
|
+
|
|
177
|
+
→ Rule 2b: SUBAGENT-DRIVEN. SA-1 ejecuta cluster A secuencial, SA-2 ejecuta cluster B secuencial, SA-3 ejecuta cluster C. Los 3 corren en paralelo. ✅
|
|
178
|
+
|
|
179
|
+
## Checklist
|
|
180
|
+
|
|
181
|
+
- [ ] Ejecuté `codegraph_explore` (o verifiqué datos existentes)?
|
|
182
|
+
- [ ] Construí mapa de dependencias con `fileClusters`?
|
|
183
|
+
- [ ] Identifiqué clusters (componentes conectados)?
|
|
184
|
+
- [ ] Verifiqué deps ENTRE clusters (no solo intra)?
|
|
185
|
+
- [ ] Apliqué reglas en orden (1→2a/2b→3a/3b/3c)?
|
|
186
|
+
- [ ] Anoté `globalRuleTriggered`?
|
|
187
|
+
- [ ] Si global es inline, ejecuté Paso 3b por fase?
|
|
188
|
+
- [ ] Si global es subagent por clusters (Rule 2b), documenté dispatch?
|
|
189
|
+
- [ ] Output es JSON válido con todos los campos del contrato?
|