@iaforged/context-code 1.0.84 → 1.0.86

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.
@@ -0,0 +1,161 @@
1
+ # Fase 1: workspaces, agents, teams y topologia
2
+
3
+ Este documento describe la capa organizacional objetivo que se construye encima de la base actual de `provider + profile + SQLite`.
4
+
5
+ No define comandos nuevos ni cambia el runtime por si solo. Su proposito es fijar el vocabulario y la estructura para que la siguiente evolucion del sistema no mezcle conceptos.
6
+
7
+ ## Resumen ejecutivo
8
+
9
+ - `workspace` es la unidad organizacional de un proveedor.
10
+ - `profile` es una cuenta o configuracion concreta dentro de ese workspace.
11
+ - `agent` es un rol operativo o subagente dentro de un workspace o perfil.
12
+ - `team` es una agrupacion transversal que coordina varios workspaces.
13
+ - `topologia` es la relacion entre el orquestador global, los teams, los workspaces, los profiles y los agents.
14
+
15
+ ## Lo que ya existe hoy
16
+
17
+ - `provider profiles` en SQLite.
18
+ - `agentName` reservado como nombre operativo.
19
+ - credenciales de Windows/Linux en SQLite cifrado local.
20
+ - perfiles por proveedor con base URL y ultimo modelo.
21
+
22
+ Eso significa que la fase organizacional no parte desde cero. Parte sobre una capa de estado ya estable.
23
+
24
+ ## Topologia objetivo
25
+
26
+ ```mermaid
27
+ flowchart TD
28
+ GO["Global orchestrator"]
29
+ TM["Team"]
30
+ WS["Workspace / provider"]
31
+ PF["Provider profile"]
32
+ AG["Agent / subagent"]
33
+
34
+ GO --> TM
35
+ TM --> WS
36
+ WS --> PF
37
+ PF --> AG
38
+ ```
39
+
40
+ Lectura del diagrama:
41
+
42
+ - el `Global orchestrator` decide la estrategia general
43
+ - cada `Team` agrupa dominios o lineas de trabajo
44
+ - cada `Workspace` representa un proveedor concreto
45
+ - cada `Profile` representa una cuenta o configuracion dentro del workspace
46
+ - cada `Agent` representa un rol interno, un subagente o una especializacion
47
+
48
+ ## Entidades de la Fase 1
49
+
50
+ ### `provider_workspaces`
51
+
52
+ Representa al proveedor como unidad organizacional.
53
+
54
+ Campos tipicos:
55
+
56
+ - `id`
57
+ - `provider`
58
+ - `display_name`
59
+ - `domain_focus`
60
+ - `is_enabled`
61
+ - `created_at`
62
+ - `updated_at`
63
+
64
+ ### `provider_agents`
65
+
66
+ Representa subagentes o roles internos.
67
+
68
+ Campos tipicos:
69
+
70
+ - `id`
71
+ - `workspace_id`
72
+ - `profile_id`
73
+ - `name`
74
+ - `role_kind`
75
+ - `system_prompt`
76
+ - `model_override`
77
+ - `tool_policy`
78
+ - `autonomy_level`
79
+ - `is_orchestrator`
80
+ - `is_enabled`
81
+ - `created_at`
82
+ - `updated_at`
83
+
84
+ ### `teams`
85
+
86
+ Representa equipos transversales.
87
+
88
+ Campos tipicos:
89
+
90
+ - `id`
91
+ - `name`
92
+ - `description`
93
+ - `global_orchestrator_agent_id`
94
+ - `is_enabled`
95
+ - `created_at`
96
+ - `updated_at`
97
+
98
+ ### `team_domains`
99
+
100
+ Representa dominios de asignacion dentro de un team.
101
+
102
+ Campos tipicos:
103
+
104
+ - `id`
105
+ - `team_id`
106
+ - `domain_name`
107
+ - `workspace_id`
108
+ - `local_orchestrator_agent_id`
109
+ - `lead_agent_id`
110
+ - `selection_mode`
111
+ - `required`
112
+
113
+ ## Regla de separacion
114
+
115
+ - `provider` no es `profile`
116
+ - `profile` no es `agent`
117
+ - `agent` no es `team`
118
+ - `team` no es `workspace`
119
+
120
+ La fase 1 existe precisamente para evitar que esos conceptos se vuelvan a mezclar.
121
+
122
+ ## Criterio de cierre de la fase
123
+
124
+ La fase 1 queda cerrada cuando se pueda:
125
+
126
+ - definir un workspace por proveedor
127
+ - registrar agentes dentro de ese workspace
128
+ - agrupar workspaces en teams
129
+ - inspeccionar la topologia completa desde la CLI o la UI
130
+
131
+ ## Comandos base de la fase
132
+
133
+ La fase ya expone una primera capa manual:
134
+
135
+ - `/workspace`
136
+ - `/workspace show <proveedor>`
137
+ - `/workspace enable <proveedor>`
138
+ - `/workspace disable <proveedor>`
139
+ - `/agent list [proveedor]`
140
+ - `/agent create <proveedor> <name> [profile]`
141
+ - `/agent show <proveedor> <name>`
142
+ - `/agent set-role <proveedor> <name> <role>`
143
+ - `/agent set-orchestrator <proveedor> <name> <true|false>`
144
+ - `/agent set-model <proveedor> <name> <model|clear>`
145
+ - `/team list`
146
+ - `/team create <name>`
147
+ - `/team show <name>`
148
+ - `/team orchestrator <team> <proveedor>/<agente>`
149
+ - `/team domain <team> <domain> <proveedor>/<agente>`
150
+ - `/team add-member <team> <domain> <proveedor>/<agente> [duty]`
151
+
152
+ ## Nota de alcance
153
+
154
+ Esta fase no incluye todavia:
155
+
156
+ - ejecucion real de orquestacion
157
+ - reparto automatico de tareas
158
+ - ranking inteligente de agentes
159
+ - trazabilidad de runs
160
+
161
+ Eso pertenece a fases posteriores.
@@ -0,0 +1,127 @@
1
+ # Fase 2: planning y trazabilidad inicial sobre SQLite
2
+
3
+ Este documento describe la capa inicial de orquestacion que se monta encima de la topologia de providers, profiles, agents y teams.
4
+
5
+ La Fase 1 deja la estructura de configuracion y nomenclatura. La Fase 2 usa esa base para registrar decisiones, runs, tareas y mensajes de orquestacion de forma persistente.
6
+
7
+ ## Objetivo
8
+
9
+ Transformar la definicion de equipos en una topologia planeable:
10
+
11
+ - provider workspace
12
+ - provider profile
13
+ - provider agent
14
+ - team
15
+ - domain
16
+ - member
17
+ - run
18
+ - task
19
+ - message
20
+
21
+ La meta es que SQLite sea la fuente de verdad para el planning y la trazabilidad inicial, mientras que los comandos de Fase 1 siguen sirviendo como superficie de configuracion.
22
+
23
+ ## Base de almacenamiento
24
+
25
+ La orquestacion inicial se apoya en la base SQLite de Context Code:
26
+
27
+ - `~/.context/provider-state.sqlite3`
28
+
29
+ Tablas relevantes:
30
+
31
+ - `provider_workspaces`
32
+ - `provider_profiles`
33
+ - `provider_agents`
34
+ - `teams`
35
+ - `team_domains`
36
+ - `team_domain_members`
37
+ - `orchestration_runs`
38
+ - `orchestration_tasks`
39
+ - `orchestration_messages`
40
+
41
+ ## Flujo inicial de planning
42
+
43
+ El flujo recomendado para montar una corrida planeada es:
44
+
45
+ 1. configurar el proveedor y el perfil activo
46
+ 2. crear un team
47
+ 3. asignar un orchestrator para el team
48
+ 4. declarar dominios de trabajo
49
+ 5. agregar miembros por dominio
50
+ 6. inspeccionar la topologia
51
+ 7. crear la corrida inicial sobre SQLite
52
+
53
+ En la practica:
54
+
55
+ ```sh
56
+ /provider <proveedor> profile <perfil>
57
+ /profile use <proveedor> <perfil>
58
+
59
+ /team create <name>
60
+ /team orchestrator <team> <provider>/<agent>
61
+ /team domain <team> <domain> <provider>/<agent>
62
+ /team add-member <team> <domain> <provider>/<agent> [duty]
63
+
64
+ /team list
65
+ /team show <name>
66
+
67
+ /orchestrate <team> <objetivo>
68
+ ```
69
+
70
+ ## Estados de tarea
71
+
72
+ La Fase 2 usa estados simples para que la inspeccion sea rapida:
73
+
74
+ - `ready`: la tarea quedo lista para ejecutarse
75
+ - `blocked`: falta una dependencia, un dominio o una asignacion valida
76
+
77
+ ## Como inspeccionar una corrida
78
+
79
+ La corrida se revisa desde la CLI con `/run`:
80
+
81
+ - `/run list` muestra los identificadores disponibles
82
+ - `/run show <run-id>` muestra el detalle completo de una corrida
83
+ - `/run tasks <run-id>` muestra tareas por dominio
84
+ - `/run messages <run-id>` muestra la bitacora persistida
85
+ - el detalle debe incluir el team, el objetivo, el orchestrator global y las tareas por dominio
86
+ - cada tarea debe mostrar su estado, de forma que se entienda si quedo `ready` o `blocked`
87
+
88
+ ## Limites de Fase 2
89
+
90
+ La Fase 2 no intenta resolver todo el trabajo de forma automatica. En este punto:
91
+
92
+ - no ejecuta subagentes reales automaticamente
93
+ - no hace consolidacion final por dominio
94
+ - no reemplaza el flujo manual de `/team`, `/workspace` y `/agent`
95
+ - no introduce subdelegacion profunda dentro de cada squad
96
+ - deja el run preparado para que Fase 3 pueda arrancar ejecucion por dominio
97
+
98
+ ## Comandos de Fase 1 que alimentan Fase 2
99
+
100
+ Los comandos de `team` no ejecutan la orquestacion completa por si solos. Sirven para dejar lista la topologia que la capa de orquestacion consumira:
101
+
102
+ - `/team list`
103
+ - `/team create <name>`
104
+ - `/team show <name>`
105
+ - `/team orchestrator <team> <provider>/<agent>`
106
+ - `/team domain <team> <domain> <provider>/<agent>`
107
+ - `/team add-member <team> <domain> <provider>/<agent> [duty]`
108
+
109
+ ## Criterio de cierre
110
+
111
+ La fase queda bien definida cuando se pueda:
112
+
113
+ - guardar la topologia del equipo
114
+ - leer el team completo desde SQLite
115
+ - registrar runs y tareas de orquestacion
116
+ - asignar dominios y miembros sin mezclar provider, profile y agent
117
+ - inspeccionar runs, tareas y mensajes sin depender de estado en memoria
118
+
119
+ ## Relacion con otras fases
120
+
121
+ La Fase 1 define la estructura. La Fase 2 usa esa estructura para planear y trazar trabajo distribuido.
122
+
123
+ En otras palabras:
124
+
125
+ - Fase 1 = configuracion y topologia
126
+ - Fase 2 = planning persistido y trazabilidad sobre SQLite
127
+ - Fase 3 = ejecucion real por dominio y reporte consolidado
@@ -0,0 +1,215 @@
1
+ # Fase 3: ejecucion por dominio y reporte consolidado
2
+
3
+ Este documento describe la Fase 3 del sistema multi-squad de Context Code.
4
+
5
+ La Fase 2 crea runs, tareas y mensajes sobre SQLite. La Fase 3 toma esas corridas y las convierte en ejecucion real por dominio, con reportes de escuadron hacia el orquestador global.
6
+
7
+ ## Objetivo
8
+
9
+ Ejecutar trabajo distribuido con dos niveles de coordinacion:
10
+
11
+ - `orquestador global`: coordina el objetivo completo y consolida resultados
12
+ - `orquestador local`: lidera un dominio o escuadron concreto
13
+ - `miembros del dominio`: ejecutan tareas especializadas dentro del escuadron
14
+ - `SQLite`: guarda el estado de runs, tasks, messages, resultados de tarea y reportes consolidados
15
+
16
+ La meta no es que todos los agentes sean autonomos desde el primer dia. La meta es que cada dominio pueda avanzar, reportar y dejar trazabilidad consistente.
17
+
18
+ ## Flujo de ejecucion
19
+
20
+ El flujo esperado para una corrida de Fase 3 es:
21
+
22
+ 1. El usuario crea o arranca una corrida.
23
+ 2. El orquestador global carga el team y sus dominios desde SQLite.
24
+ 3. Cada dominio recibe una tarea con agente asignado.
25
+ 4. El dominio pasa de `ready` a `in_progress`.
26
+ 5. El runtime resuelve `agente -> workspace -> perfil -> modelo -> credenciales`.
27
+ 6. El dominio termina como `completed`, `failed` o `blocked`.
28
+ 7. El orquestador global consolida los reportes de todos los dominios.
29
+ 8. La corrida termina como `completed`, `failed`, `cancelled` o queda lista para `resume`.
30
+
31
+ ## Comandos principales
32
+
33
+ ### Crear y arrancar una corrida
34
+
35
+ ```sh
36
+ /run start <team> <goal>
37
+ ```
38
+
39
+ Este comando debe:
40
+
41
+ - crear la corrida si todavia no existe
42
+ - mover la corrida a estado de ejecucion
43
+ - registrar mensajes de inicio
44
+ - servir para corridas directas; el flujo multi-dominio recomendado sigue siendo `/orchestrate <team> <goal>` y luego `/run resume <run-id>`
45
+
46
+ Ejemplo:
47
+
48
+ ```sh
49
+ /run start core-dev crear login con UI y API
50
+ ```
51
+
52
+ ### Reanudar una corrida
53
+
54
+ ```sh
55
+ /run resume <run-id>
56
+ ```
57
+
58
+ Este comando debe:
59
+
60
+ - cargar una corrida existente
61
+ - saltar tareas ya completadas
62
+ - procesar tareas `ready`, `blocked` recuperables o `in_progress` que puedan continuar
63
+ - registrar mensajes nuevos sin borrar la bitacora anterior
64
+ - actualizar el estado final de la corrida segun el resultado de sus dominios
65
+
66
+ ### Cancelar una corrida
67
+
68
+ ```sh
69
+ /run cancel <run-id>
70
+ ```
71
+
72
+ Este comando debe:
73
+
74
+ - marcar la corrida como `cancelled`
75
+ - cancelar tareas pendientes cuando aplique
76
+ - registrar un mensaje de cancelacion
77
+ - evitar que `resume` siga ejecutando trabajo activo sin una decision explicita
78
+
79
+ ### Ver tareas por dominio
80
+
81
+ ```sh
82
+ /run tasks <run-id>
83
+ /run task <task-id>
84
+ /run domain <run-id> <domain>
85
+ ```
86
+
87
+ Este comando debe mostrar:
88
+
89
+ - dominio
90
+ - agente asignado
91
+ - estado de tarea
92
+ - resumen de salida
93
+ - bloqueo o error si existe
94
+ - marca de tiempo relevante
95
+
96
+ ### Operaciones manuales de recuperacion
97
+
98
+ ```sh
99
+ /run retry <run-id> [task-id]
100
+ /run cancel-task <task-id>
101
+ /run reassign <task-id> <provider>/<agent>
102
+ ```
103
+
104
+ Estos comandos permiten reintentar, bloquear o reasignar trabajo sin borrar trazabilidad.
105
+
106
+ ### Ver mensajes de la corrida
107
+
108
+ ```sh
109
+ /run messages <run-id>
110
+ ```
111
+
112
+ Este comando debe mostrar la bitacora persistida:
113
+
114
+ - mensajes del orquestador global
115
+ - reportes de escuadron
116
+ - errores
117
+ - decisiones de planning
118
+ - cambios relevantes de estado
119
+
120
+ ## Estados de corrida
121
+
122
+ Los estados esperados son:
123
+
124
+ - `planned`: la corrida existe, pero todavia no ejecuto dominios
125
+ - `in_progress`: la corrida esta procesando dominios
126
+ - `completed`: todos los dominios terminaron correctamente o con resultado aceptado
127
+ - `failed`: la corrida fallo por un error no recuperable
128
+ - `cancelled`: el usuario cancelo la corrida
129
+
130
+ ## Estados de tarea
131
+
132
+ Los estados esperados son:
133
+
134
+ - `ready`: la tarea esta preparada para ejecutar
135
+ - `in_progress`: el dominio esta trabajando
136
+ - `completed`: el dominio reporto resultado
137
+ - `failed`: el dominio fallo durante la ejecucion
138
+ - `blocked`: falta configuracion, agente, credencial o dependencia
139
+ - cuando la corrida se cancela, las tareas abiertas quedan bloqueadas o conservan su estado terminal previo
140
+
141
+ ## Reporte de escuadron
142
+
143
+ Cada escuadron debe reportar al orquestador global con una estructura minima:
144
+
145
+ - `domain`: dominio ejecutado
146
+ - `lead`: agente responsable del dominio
147
+ - `status`: estado final del dominio
148
+ - `summary`: resumen de lo realizado
149
+ - `artifacts`: archivos, decisiones o resultados relevantes
150
+ - `blockers`: bloqueos encontrados
151
+ - `nextAction`: siguiente accion recomendada
152
+
153
+ Ese reporte queda persistido en tres niveles:
154
+
155
+ - `orchestration_messages`: bitacora cronologica de dispatch, bloqueo y reporte.
156
+ - `orchestration_task_results`: salida estructurada por tarea/agente.
157
+ - `orchestration_domain_reports`: resumen actual del dominio para el orquestador global.
158
+
159
+ La tarea correspondiente en `orchestration_tasks` tambien conserva `result_summary` para lectura rapida.
160
+
161
+ ## Reporte consolidado global
162
+
163
+ El orquestador global debe consolidar:
164
+
165
+ - estado general de la corrida
166
+ - dominios completados
167
+ - dominios bloqueados
168
+ - dominios fallidos
169
+ - resumen ejecutivo
170
+ - riesgos pendientes
171
+ - recomendacion de continuar, reintentar, reasignar o cerrar
172
+
173
+ La consolidacion no reemplaza los mensajes. Los mensajes son la bitacora completa; el consolidado se guarda en `orchestration_run_reports` como lectura operativa para decidir el siguiente paso.
174
+
175
+ ## Limites actuales
176
+
177
+ Fase 3 debe mantener estos limites claros:
178
+
179
+ - la ejecucion por dominio sigue siendo guiada por comandos mientras se estabiliza el runtime
180
+ - la llamada real al proveedor ocurre cuando el agente tiene workspace, perfil, modelo y credenciales validas
181
+ - la subdelegacion profunda dentro de cada escuadron puede empezar como reporte del lead local
182
+ - si un dominio no tiene agente, perfil, credencial o modelo valido, debe quedar `blocked`
183
+ - los errores de proveedor no deben reintentarse indefinidamente si son de cuota, autenticacion o modelo invalido
184
+ - el usuario debe poder inspeccionar y retomar sin perder trazabilidad
185
+
186
+ ## Criterio de cierre de Fase 3
187
+
188
+ Fase 3 queda cerrada cuando:
189
+
190
+ - `/run start` crea o arranca una corrida operativa
191
+ - `/run resume` continua una corrida existente
192
+ - `/run cancel` detiene una corrida de forma persistente
193
+ - `/run tasks` muestra el estado por dominio
194
+ - `/run task` y `/run domain` muestran detalle operativo y resultados persistidos
195
+ - `/run retry`, `/run cancel-task` y `/run reassign` permiten recuperacion manual segura
196
+ - `/run messages` muestra la bitacora
197
+ - cada dominio produce un reporte hacia el orquestador global
198
+ - el orquestador global produce un consolidado
199
+ - los resultados quedan persistidos en `orchestration_task_results`, `orchestration_domain_reports` y `orchestration_run_reports`
200
+ - los estados de runs y tasks sobreviven reinicios de la app
201
+
202
+ ## Arranque de Fase 4
203
+
204
+ Cuando Fase 3 este estable, Fase 4 debe agregar autonomia y optimizacion:
205
+
206
+ - seleccion automatica de agentes por capacidades
207
+ - ranking por costo, latencia y calidad
208
+ - fallback entre proveedores cuando un escuadron falle
209
+ - reasignacion automatica de dominios bloqueados
210
+ - politicas de retry por tipo de error
211
+ - autocompletado de teams, agents, dominios y run ids
212
+ - metricas por escuadron y proveedor
213
+ - tests de integracion para runs, tasks, messages y reportes
214
+
215
+ Fase 4 no debe borrar la estructura manual. La configuracion manual debe seguir existiendo como modo explicito y auditable.
@@ -0,0 +1,136 @@
1
+ # Fase 3: validacion de ejecucion por dominio
2
+
3
+ Este documento fija la validacion tecnica actual para la Fase 3 de orquestacion. El repo no tiene un harness unitario propio configurado en `package.json`; por ahora el gate automatizable y reproducible es build, mas pruebas manuales sobre los comandos que escriben en SQLite.
4
+
5
+ ## Alcance validado
6
+
7
+ La Fase 3 cubre:
8
+
9
+ - ciclo operativo de corrida desde `/run`
10
+ - cambio de estados de `orchestration_runs`
11
+ - cambio de estados de `orchestration_tasks`
12
+ - mensajes persistidos en `orchestration_messages`
13
+ - reporte consolidado por escuadron desde `/run show` y `/run report`
14
+ - inspeccion detallada con `/run tasks` y `/run messages`
15
+ - inspeccion puntual con `/run task <task-id>` y `/run domain <run-id> <domain>`
16
+ - operaciones manuales seguras con `/run retry`, `/run cancel-task` y `/run reassign`
17
+
18
+ ## Verificaciones automatizables disponibles
19
+
20
+ Ejecutar:
21
+
22
+ ```sh
23
+ npm run build
24
+ ```
25
+
26
+ Resultado esperado:
27
+
28
+ - `tsc -p tsconfig.json` compila.
29
+ - `scripts/postprocess-build.mjs` termina con `Build postprocess completed.`
30
+
31
+ Tambien se puede ejecutar:
32
+
33
+ ```sh
34
+ npm run typecheck
35
+ ```
36
+
37
+ Estado actual:
38
+
39
+ - no es gate de Fase 3 todavia.
40
+ - falla por deuda global previa en bridge, plugins, secure storage legacy, mensajes SDK y otros modulos fuera del runtime de orquestacion.
41
+ - si se limpia esa deuda, este comando debe pasar a ser gate obligatorio.
42
+
43
+ ## Flujo manual recomendado
44
+
45
+ Preparar topologia minima:
46
+
47
+ ```text
48
+ /provider claude profile main
49
+ /agent create claude frontend-lead main
50
+ /agent set-orchestrator claude frontend-lead true
51
+
52
+ /provider openai profile work
53
+ /agent create openai backend-lead work
54
+
55
+ /team create core-dev
56
+ /team orchestrator core-dev claude/frontend-lead
57
+ /team domain core-dev frontend claude/frontend-lead
58
+ /team domain core-dev backend openai/backend-lead
59
+ /team show core-dev
60
+ ```
61
+
62
+ Crear y revisar planning:
63
+
64
+ ```text
65
+ /orchestrate core-dev crear login con UI y API
66
+ /run list
67
+ /run show <run-id>
68
+ /run tasks <run-id>
69
+ /run messages <run-id>
70
+ /run domain <run-id> frontend
71
+ ```
72
+
73
+ Ejecutar Fase 3:
74
+
75
+ ```text
76
+ /run resume <run-id>
77
+ /run show <run-id>
78
+ /run tasks <run-id>
79
+ /run messages <run-id>
80
+ /run task <task-id>
81
+ ```
82
+
83
+ Cancelar o reiniciar escenarios:
84
+
85
+ ```text
86
+ /run cancel <run-id>
87
+ /run resume <run-id>
88
+ /run retry <run-id>
89
+ /run retry <run-id> <task-id>
90
+ /run cancel-task <task-id>
91
+ /run reassign <task-id> claude/frontend-lead
92
+ ```
93
+
94
+ ## Estados esperados
95
+
96
+ Corridas:
97
+
98
+ - `planned`: creada, sin ejecucion.
99
+ - `in_progress`: ejecucion por dominio en curso.
100
+ - `completed`: todos los dominios ejecutables reportaron resultado.
101
+ - `failed`: hay dominios bloqueados o fallidos.
102
+ - `cancelled`: detenida por el usuario.
103
+
104
+ Tareas:
105
+
106
+ - `pending`: creada pero no lista.
107
+ - `ready`: lista para ejecucion.
108
+ - `in_progress`: asignada a un agente de dominio.
109
+ - `completed`: reporto resultado.
110
+ - `failed`: fallo durante ejecucion.
111
+ - `blocked`: falta agente, workspace, credencial o configuracion.
112
+
113
+ ## Casos que deben cubrirse antes de cerrar Fase 3
114
+
115
+ - `/run resume <run-id>` cambia tareas `ready` a `completed` cuando tienen agente valido.
116
+ - `/run resume <run-id>` marca `blocked` si el agente asignado no existe.
117
+ - `/run cancel <run-id>` marca la corrida `cancelled` y bloquea tareas abiertas.
118
+ - `/run messages <run-id>` muestra `task.dispatch`, `squad.report` y `global.consolidated-report`.
119
+ - `/run show <run-id>` consolida por dominio y muestra el orquestador local o lead asignado.
120
+ - una corrida con dominios incompletos no debe reportarse como `completed`.
121
+ - `/run task <task-id>` muestra estado, agente, dominio, mensajes y resultados persistidos.
122
+ - `/run domain <run-id> <domain>` filtra tareas, mensajes y resultados por dominio.
123
+ - `/run retry <run-id>` mueve tareas `failed` o `blocked` a `ready` si tienen agente asignado.
124
+ - `/run retry <run-id> <task-id>` reintenta solo una tarea de esa corrida.
125
+ - `/run cancel-task <task-id>` detiene la tarea como `blocked` porque el modelo de estados no tiene `cancelled` por tarea.
126
+ - `/run reassign <task-id> <provider>/<agent>` cambia el agente asignado y deja la tarea `ready` si no estaba completada.
127
+
128
+ ## Recomendacion de harness futuro
129
+
130
+ Cuando el repo tenga un harness unitario formal, las primeras pruebas deberian cubrir:
131
+
132
+ - `runStore`: crear/listar/actualizar runs, tasks, messages y reports.
133
+ - `OrchestrationExecutionRuntime`: transiciones validas e invalidas.
134
+ - comandos `/run`: parseo de argumentos, fallback y salida de errores.
135
+ - comandos `/orchestrate`: creacion de tareas `ready` y `blocked`.
136
+ - persistencia SQLite: reinicio de proceso y recuperacion de estado.