trackops 1.1.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +194 -230
  2. package/bin/trackops.js +54 -28
  3. package/lib/config.js +14 -10
  4. package/lib/control.js +44 -32
  5. package/lib/env.js +18 -1
  6. package/lib/init.js +40 -6
  7. package/lib/opera-bootstrap.js +825 -273
  8. package/lib/opera.js +360 -110
  9. package/lib/preferences.js +74 -0
  10. package/lib/runtime-state.js +144 -0
  11. package/lib/server.js +155 -25
  12. package/locales/en.json +136 -42
  13. package/locales/es.json +136 -42
  14. package/package.json +2 -1
  15. package/scripts/postinstall-locale.js +21 -0
  16. package/scripts/smoke-tests.js +130 -5
  17. package/scripts/validate-skill.js +2 -1
  18. package/skills/trackops/SKILL.md +67 -45
  19. package/skills/trackops/agents/openai.yaml +5 -1
  20. package/skills/trackops/locales/en/SKILL.md +86 -0
  21. package/skills/trackops/locales/en/references/activation.md +73 -0
  22. package/skills/trackops/locales/en/references/troubleshooting.md +49 -0
  23. package/skills/trackops/locales/en/references/workflow.md +26 -0
  24. package/skills/trackops/references/activation.md +53 -19
  25. package/skills/trackops/references/troubleshooting.md +36 -21
  26. package/skills/trackops/references/workflow.md +21 -15
  27. package/skills/trackops/scripts/bootstrap-trackops.js +9 -7
  28. package/skills/trackops/skill.json +4 -4
  29. package/templates/opera/agent.md +10 -9
  30. package/templates/opera/architecture/dependency-graph.md +24 -0
  31. package/templates/opera/architecture/runtime-automation.md +24 -0
  32. package/templates/opera/architecture/runtime-operations.md +34 -0
  33. package/templates/opera/en/agent.md +21 -20
  34. package/templates/opera/en/architecture/dependency-graph.md +24 -0
  35. package/templates/opera/en/architecture/runtime-automation.md +24 -0
  36. package/templates/opera/en/architecture/runtime-operations.md +34 -0
  37. package/templates/opera/en/reviews/delivery-audit.md +18 -0
  38. package/templates/opera/en/reviews/integration-audit.md +18 -0
  39. package/templates/opera/en/router.md +19 -9
  40. package/templates/opera/reviews/delivery-audit.md +18 -0
  41. package/templates/opera/reviews/integration-audit.md +18 -0
  42. package/templates/opera/router.md +15 -5
  43. package/templates/skills/opera-contract-auditor/SKILL.md +38 -0
  44. package/templates/skills/opera-contract-auditor/locales/en/SKILL.md +38 -0
  45. package/templates/skills/opera-policy-guard/SKILL.md +26 -0
  46. package/templates/skills/opera-policy-guard/locales/en/SKILL.md +26 -0
  47. package/templates/skills/project-starter-skill/SKILL.md +89 -164
  48. package/templates/skills/project-starter-skill/locales/en/SKILL.md +104 -24
  49. package/ui/js/views/overview.js +16 -12
  50. package/templates/etapa/agent.md +0 -26
  51. package/templates/etapa/genesis.md +0 -94
  52. package/templates/etapa/references/autonomy-and-recovery.md +0 -117
  53. package/templates/etapa/references/etapa-cycle.md +0 -193
  54. package/templates/etapa/registry.md +0 -28
  55. package/templates/etapa/router.md +0 -39
@@ -1,204 +1,129 @@
1
1
  ---
2
2
  name: "project-starter-skill"
3
- description: "Skill global para inicializar proyectos completos usando el protocolo O.P.E.R.A. (Orquestar, Probar, Estructurar, Refinar, Automatizar). Usa esta skill siempre que el usuario quiera crear un nuevo proyecto, inicializar una estructura de agente, configurar un repositorio, o arrancar cualquier automatización desde cero. También se activa cuando el usuario menciona 'nuevo proyecto', 'iniciar proyecto', 'configurar proyecto', 'opera', 'project starter', 'scaffold', o cualquier intención de comenzar algo nuevo que necesite estructura."
3
+ description: "Skill para discovery y estructuracion inicial de proyectos con TrackOps y OPERA. Usala cuando haya que convertir una idea, notas o documentacion parcial en una especificacion clara, especialmente si el usuario no es tecnico o el proyecto aun esta en fase temprana."
4
4
  metadata:
5
- version: "3.0"
5
+ version: "4.0"
6
6
  type: "global"
7
7
  triggers:
8
- - "iniciar proyecto"
9
8
  - "nuevo proyecto"
10
- - "configurar proyecto"
11
- - "opera"
9
+ - "iniciar proyecto"
12
10
  - "project starter"
13
11
  - "scaffold"
14
- - "inicializar"
15
- ---
16
-
17
- # 🚀 ProjectStarterSkill — O.P.E.R.A. v3.0
18
-
19
- ## Identidad
20
-
21
- Eres el **Piloto del Sistema**. Tu misión es construir automatización determinista y autorreparable usando el protocolo O.P.E.R.A.
22
-
23
- ## Filosofía
24
-
25
- - Fiabilidad sobre velocidad. Nunca adivines lógica de negocio.
26
- - Los LLMs son probabilísticos, pero tu código debe ser **determinista**.
27
- - Cada fase tiene un **Definition of Done** verificable. No avanzas sin cumplirlo.
28
- - `genesis.md` es la ley. Si un script la contradice, el script está mal.
29
-
12
+ - "idea de proyecto"
13
+ - "spec dossier"
30
14
  ---
31
15
 
32
- ## Protocolo de Inicialización
33
-
34
- Este protocolo se ejecuta secuencialmente y sin excepciones al crear un nuevo proyecto.
35
-
36
- ### Paso 1 — Descubrimiento
37
-
38
- Antes de crear cualquier archivo, haz al usuario estas preguntas:
39
-
40
- | # | Pregunta | Propósito |
41
- |---|----------|-----------|
42
- | 1 | ¿Cuál es el resultado singular deseado? | Directriz principal |
43
- | 2 | ¿Qué servicios externos necesitamos? ¿Están listas las claves? | Integraciones |
44
- | 3 | ¿Dónde viven los datos primarios? | Fuente de la verdad |
45
- | 4 | ¿Cómo y dónde debe entregarse el resultado final? | Carga útil |
46
- | 5 | ¿Restricciones, tono o reglas específicas? | Reglas de comportamiento |
47
-
48
- También pregunta:
49
- - ¿Repositorio **público o privado**?
50
- - ¿Tipo de **licencia**? (MIT, Apache 2.0, GPL v3, Propietario)
51
-
52
- ### Paso 2 — Inicialización con Ops
53
-
54
- Ejecuta la inicialización del sistema operativo:
55
-
56
- ```bash
57
- npx trackops init --with-opera
58
- ```
16
+ # Project Starter Skill
59
17
 
60
- Esto crea `project_control.json`, instala OPERA y registra el proyecto.
18
+ Tu trabajo es convertir una idea o una documentacion parcial en un proyecto estructurado y explicable.
61
19
 
62
- ### Paso 3 — Poblar genesis.md
20
+ ## Regla principal
63
21
 
64
- Con las respuestas del descubrimiento, completa `genesis.md` con:
22
+ Empieza siempre por la persona, no por la arquitectura.
65
23
 
66
- 1. **Esquema de Datos JSON** (Input/Output) — esto es obligatorio antes de escribir código.
67
- 2. **Reglas de comportamiento** restricciones de negocio.
68
- 3. **Invariantes arquitectónicas** decisiones técnicas inamovibles.
24
+ - identifica el nivel tecnico del usuario
25
+ - adapta el lenguaje y la profundidad a ese nivel
26
+ - si ya existe documentacion, leela y consolidala
27
+ - si no existe documentacion, construye la primera especificacion util desde la idea
69
28
 
70
- Esto es la regla "Datos-Primero": si el schema no está definido en `genesis.md`, no se escribe código.
29
+ ## Cuando TrackOps ya esta instalado
71
30
 
72
- ### Paso 4 Completar task_plan.md
31
+ Si el repo ya contiene TrackOps u OPERA:
73
32
 
74
- Ejecuta `trackops sync` para regenerar `task_plan.md` y luego ajusta:
75
- - Fases y objetivos.
76
- - **Definition of Done** por cada fase (ver referencia `references/opera-cycle.md`).
77
- - Checklist verificable.
33
+ - no ejecutes `trackops init`
34
+ - no recrees `app/`, `ops/` ni el resto del workspace
35
+ - usa `ops/contract/operating-contract.json` como fuente de verdad de maquina si ya existe
36
+ - usa `ops/genesis.md` como vista humana compilada
37
+ - usa `ops/project_control.json` para backlog y estado operativo
38
+ - trabaja sobre `ops/bootstrap/agent-handoff.md`
39
+ - escribe:
40
+ - `ops/bootstrap/intake.json`
41
+ - `ops/bootstrap/spec-dossier.md`
42
+ - `ops/bootstrap/open-questions.md` si quedan vacios importantes
78
43
 
79
- ### Paso 5 Skills Base
44
+ ## Lo que debe producir la skill
80
45
 
81
- 1. Instala las skills obligatorias:
82
- ```bash
83
- trackops skill install commiter
84
- trackops skill install changelog-updater
85
- ```
86
- 2. Analiza la definición del proyecto en `genesis.md`.
87
- 3. Busca skills adicionales con `trackops skill catalog` y **recomienda** (no instales sin aprobación) las que apliquen.
46
+ `ops/bootstrap/intake.json` debe dejar, como minimo:
88
47
 
89
- ### Paso 6 — Repositorio
48
+ - `technicalLevel`
49
+ - `projectState`
50
+ - `documentationState`
51
+ - `decisionOwnership`
52
+ - `problemStatement`
53
+ - `targetUser`
54
+ - `singularDesiredOutcome`
55
+ - `userLanguage`
56
+ - `needsPlainLanguage`
57
+ - `recommendedStack`
58
+ - `externalServices`
59
+ - `sourceOfTruth`
60
+ - `payload`
61
+ - `behaviorRules`
62
+ - `architecturalInvariants`
63
+ - `inputSchema`
64
+ - `outputSchema`
65
+ - `pipeline`
66
+ - `templates`
90
67
 
91
- 1. Crea el repositorio en GitHub (público o privado según elección).
92
- 2. Genera `README.md` con la descripción del proyecto basada en `genesis.md`.
93
- 3. Crea `LICENSE` según la elección del usuario.
94
- 4. Inicializa `CHANGELOG.md` con entrada de creación.
95
- 5. Realiza el primer commit (usa la skill `commiter`).
68
+ `ops/bootstrap/spec-dossier.md` debe explicar:
96
69
 
97
- ### Paso 7 — Freno de Mano 🛑
70
+ - `## Problem statement`
71
+ - `## Target user`
72
+ - `## Singular desired outcome`
73
+ - `## Delivery target`
74
+ - `## Source of truth`
75
+ - flujo funcional principal
76
+ - stack recomendado o stack heredado
77
+ - integraciones externas
78
+ - restricciones relevantes
98
79
 
99
- Tienes **prohibido** escribir scripts en `tools/` hasta que:
80
+ `ops/bootstrap/open-questions.md` debe listar:
100
81
 
101
- - [ ] Las preguntas de descubrimiento estén respondidas.
102
- - [ ] El esquema de datos esté definido en `genesis.md`.
103
- - [ ] `task_plan.md` tenga un plano aprobado con Definition of Done.
104
- - [ ] La estructura `.agent/` y `.agents/` esté creada.
105
- - [ ] El repositorio esté inicializado.
82
+ - preguntas que siguen abiertas
83
+ - contradicciones entre idea, repo y documentacion
84
+ - decisiones que TrackOps u OPERA no deben inventar
106
85
 
107
- ---
86
+ ## Calidad minima antes de entregar
108
87
 
109
- ## El Ciclo O.P.E.R.A.
88
+ No des por cerrado el discovery si falta alguno de estos campos:
110
89
 
111
- Una vez completada la inicialización, el proyecto avanza a través de las fases definidas. Para el detalle completo de cada fase, lee:
112
- ```
113
- references/opera-cycle.md
114
- ```
90
+ - problema principal
91
+ - usuario objetivo
92
+ - resultado singular deseado
93
+ - objetivo de entrega
94
+ - fuente de verdad
95
+ - schema de entrada y salida, aunque sea provisional
115
96
 
116
- ### Resumen de Fases OPERA
97
+ Si algo sigue incierto, dejalo en `open-questions.md` en lugar de inventarlo.
117
98
 
118
- | Fase | Nombre | Foco | Entregable clave |
119
- |------|--------|------|-------------------|
120
- | **O** | Orquestar | Visión y lógica | Schema JSON en `genesis.md` |
121
- | **P** | Probar | Conectividad | Scripts de test pasando |
122
- | **E** | Estructurar | Construcción en 3 capas | SOPs + tools + tests de integración |
123
- | **R** | Refinar | Refinamiento | Outputs validados contra templates |
124
- | **A** | Automatizar | Despliegue | Triggers configurados + smoke test |
99
+ ## Si TrackOps aun no esta instalado
125
100
 
126
- ### La Arquitectura de 3 Capas
101
+ No improvises una estructura propia.
127
102
 
128
- | Capa | Ubicación | Función |
129
- |------|-----------|---------|
130
- | Arquitectura | `architecture/` | SOPs técnicos en Markdown. Si la lógica cambia, actualiza el SOP **antes** que el código. |
131
- | Navegación | El Agente | Capa de razonamiento. Enruta datos entre SOPs y herramientas. |
132
- | Herramientas | `tools/` | Scripts atómicos y deterministas. Variables en `.env`. Temporales en `.tmp/`. |
103
+ Explica el flujo correcto:
133
104
 
134
- ---
135
-
136
- ## Gobernanza y Recuperación
137
-
138
- Para la matriz de autonomía (semáforo), el protocolo de auto-reparación y el sistema de rollback, lee:
139
- ```
140
- references/autonomy-and-recovery.md
105
+ ```bash
106
+ npx skills add Baxahaun/trackops
107
+ trackops init
108
+ trackops opera install
141
109
  ```
142
110
 
143
- ### Resumen Rápido
144
-
145
- **🔴 NIVEL ROJO** (Pide permiso): Modificar `genesis.md`, eliminar datos persistentes, desplegar a producción, enviar comunicaciones externas, crear repos.
111
+ Si el usuario solo tiene una idea, deja claro que TrackOps puede derivar el bootstrap a una conversacion guiada con el agente.
112
+ - flujo funcional principal
113
+ - decisiones de stack, si ya existen o si hay que proponerlas
114
+ - integraciones externas
115
+ - restricciones relevantes
146
116
 
147
- **🟢 NIVEL VERDE** (Avanza): Crear/editar scripts, leer archivos, ejecutar tests, actualizar logs, auto-reparar (máx. 3 intentos).
117
+ ## Si TrackOps aun no esta instalado
148
118
 
149
- ---
119
+ No improvises una estructura propia.
150
120
 
151
- ## Estructura de Archivos
121
+ Explica el flujo correcto:
152
122
 
123
+ ```bash
124
+ npx skills add Baxahaun/trackops
125
+ trackops init
126
+ trackops opera install
153
127
  ```
154
- proyecto/
155
- ├── .agent/
156
- │ ├── hub/
157
- │ │ ├── agent.md # Instrucciones del agente
158
- │ │ └── router.md # Enrutamiento a skills
159
- │ └── hub/
160
- │ ├── agent.md # Instrucciones del agente
161
- │ └── router.md # Enrutamiento a skills
162
- ├── .agents/
163
- │ └── skills/
164
- │ ├── _registry.md # Índice de skills instaladas
165
- │ └── [skill-name]/
166
- │ └── SKILL.md # Contenido de skills
167
- ├── genesis.md # 📜 La Constitución
168
- ├── task_plan.md # 🗺️ El Mapa (autogenerado)
169
- ├── progress.md # 📓 El Diario (autogenerado)
170
- ├── findings.md # 📖 La Biblioteca (autogenerado)
171
- ├── CHANGELOG.md # 📋 El Historial
172
- ├── architecture/ # 📘 El Manual (SOPs)
173
- ├── tools/ # ⚙️ Los Motores
174
- ├── templates/ # 📐 Las Plantillas
175
- ├── .tmp/ # 🔧 El Taller
176
- ├── .env # 🔑 Las Llaves
177
- ├── project_control.json # 🎛️ Control Operativo
178
- ├── README.md
179
- ├── LICENSE
180
- └── .gitignore
181
- ```
182
-
183
- ---
184
128
 
185
- ## Checklist de Inicialización
186
-
187
- ```markdown
188
- - [ ] Preguntas de descubrimiento respondidas
189
- - [ ] trackops init ejecutado
190
- - [ ] genesis.md poblado con schema y reglas
191
- - [ ] task_plan.md con Definition of Done por fase
192
- - [ ] progress.md generado
193
- - [ ] findings.md generado
194
- - [ ] .agent/hub/agent.md configurado
195
- - [ ] .agent/hub/router.md configurado
196
- - [ ] .agents/skills/_registry.md creado
197
- - [ ] Skills base instaladas (commiter, changelog-updater)
198
- - [ ] Repositorio GitHub creado
199
- - [ ] README.md generado
200
- - [ ] LICENSE creada
201
- - [ ] CHANGELOG.md inicializado
202
- - [ ] .gitignore configurado
203
- - [ ] Primer commit realizado
204
- ```
129
+ Si el usuario solo tiene una idea, deja claro que TrackOps puede derivar el bootstrap a una conversacion guiada con el agente.
@@ -1,24 +1,104 @@
1
- ---
2
- name: "project-starter-skill"
3
- description: "Global skill to initialize complete projects using the O.P.E.R.A. protocol. Use it when the user wants to start a new project, scaffold a repo, initialize an agent structure, or kick off a new automation."
4
- metadata:
5
- version: "3.0"
6
- type: "global"
7
- ---
8
-
9
- # Project Starter Skill
10
-
11
- You are the system pilot. Your job is to initialize deterministic, recoverable projects under the O.P.E.R.A. protocol.
12
-
13
- ## Protocol
14
-
15
- 1. Ask discovery questions about the desired outcome, integrations, source of truth, payload, and behavior rules.
16
- 2. Run `npx trackops init --with-opera`.
17
- 3. Populate `genesis.md` with schemas, constraints, and invariants.
18
- 4. Regenerate docs with `trackops sync` and refine the plan.
19
- 5. Ensure base skills are present: `commiter` and `changelog-updater`.
20
- 6. Suggest optional repo governance tasks if needed.
21
-
22
- ## Rule
23
-
24
- Do not write delivery code before the data contract exists in `genesis.md`.
1
+ ---
2
+ name: "project-starter-skill"
3
+ description: "Skill for discovery and early project structuring with TrackOps and OPERA. Use it when an idea, notes, or partial documentation must become a clear project specification, especially for non-technical users or early-stage projects."
4
+ metadata:
5
+ version: "4.0"
6
+ type: "global"
7
+ ---
8
+
9
+ # Project Starter Skill
10
+
11
+ Your job is to turn an idea or partial documentation into a structured, explainable project.
12
+
13
+ ## Core rule
14
+
15
+ Start from the person, not from the architecture.
16
+
17
+ - identify the user's technical level
18
+ - adapt language and depth to that level
19
+ - if documentation exists, read it and consolidate it
20
+ - if documentation does not exist, build the first useful specification from the idea
21
+
22
+ ## When TrackOps is already installed
23
+
24
+ If the repository already contains TrackOps or OPERA:
25
+
26
+ - do not run `trackops init`
27
+ - do not recreate `app/`, `ops/`, or the workspace
28
+ - use `ops/contract/operating-contract.json` as the machine source of truth when it already exists
29
+ - use `ops/genesis.md` as the compiled human view
30
+ - use `ops/project_control.json` for backlog and operational state
31
+ - work from `ops/bootstrap/agent-handoff.md`
32
+ - write:
33
+ - `ops/bootstrap/intake.json`
34
+ - `ops/bootstrap/spec-dossier.md`
35
+ - `ops/bootstrap/open-questions.md` when important gaps remain
36
+
37
+ ## What the skill must produce
38
+
39
+ `ops/bootstrap/intake.json` must include at least:
40
+
41
+ - `technicalLevel`
42
+ - `projectState`
43
+ - `documentationState`
44
+ - `decisionOwnership`
45
+ - `problemStatement`
46
+ - `targetUser`
47
+ - `singularDesiredOutcome`
48
+ - `userLanguage`
49
+ - `needsPlainLanguage`
50
+ - `recommendedStack`
51
+ - `externalServices`
52
+ - `sourceOfTruth`
53
+ - `payload`
54
+ - `behaviorRules`
55
+ - `architecturalInvariants`
56
+ - `inputSchema`
57
+ - `outputSchema`
58
+ - `pipeline`
59
+ - `templates`
60
+
61
+ `ops/bootstrap/spec-dossier.md` must explain:
62
+
63
+ - `## Problem statement`
64
+ - `## Target user`
65
+ - `## Singular desired outcome`
66
+ - `## Delivery target`
67
+ - `## Source of truth`
68
+ - the main functional flow
69
+ - recommended or inherited stack
70
+ - external integrations
71
+ - relevant constraints
72
+
73
+ `ops/bootstrap/open-questions.md` must list:
74
+
75
+ - questions still open
76
+ - contradictions between the idea, the repository, and the documents
77
+ - decisions that TrackOps or OPERA must not invent
78
+
79
+ ## Minimum quality bar before handing off
80
+
81
+ Do not treat discovery as complete if any of these are missing:
82
+
83
+ - problem statement
84
+ - target user
85
+ - singular desired outcome
86
+ - delivery target
87
+ - source of truth
88
+ - input and output schema, even if still provisional
89
+
90
+ If something is still uncertain, write it to `open-questions.md` instead of inventing it.
91
+
92
+ ## If TrackOps is not installed yet
93
+
94
+ Do not invent your own structure.
95
+
96
+ Explain the correct flow:
97
+
98
+ ```bash
99
+ npx skills add Baxahaun/trackops
100
+ trackops init
101
+ trackops opera install
102
+ ```
103
+
104
+ If the user only has an idea, make it explicit that TrackOps can route bootstrap into an agent-led discovery conversation.
@@ -21,7 +21,7 @@ export async function render() {
21
21
  </div>`;
22
22
  }
23
23
 
24
- const { derived, runtime, control, project, docsDirty } = payload;
24
+ const { derived, runtime, control, project, docsDirty, opera } = payload;
25
25
 
26
26
  const html = `
27
27
  <div class="view-enter">
@@ -102,8 +102,8 @@ export async function render() {
102
102
  <!-- Salud operativa -->
103
103
  <div class="chart-card stagger-3" aria-label="${t('ui.overview.operationalHealth', {}, 'Operational health')}">
104
104
  <p class="chart-title" style="margin-bottom:var(--space-4)">${t('ui.overview.operationalHealth', {}, 'Operational health')}</p>
105
- ${_renderRepoHealth(runtime, docsDirty, derived)}
106
- </div>
105
+ ${_renderRepoHealth(runtime, docsDirty, derived, opera)}
106
+ </div>
107
107
 
108
108
  </div>
109
109
  </div>
@@ -334,7 +334,7 @@ function _bindPortfolioEvents() {
334
334
 
335
335
  // ─────────────────────────────── REPO HEALTH ────────────────────────────────
336
336
 
337
- function _renderRepoHealth(runtime, docsDirty, derived) {
337
+ function _renderRepoHealth(runtime, docsDirty, derived, opera) {
338
338
  const completionRate = derived.totals.all
339
339
  ? Math.round((derived.totals.completed / derived.totals.all) * 100)
340
340
  : 0;
@@ -343,14 +343,18 @@ function _renderRepoHealth(runtime, docsDirty, derived) {
343
343
  ? Math.round((derived.totals.blocked / derived.totals.all) * 100)
344
344
  : 0;
345
345
 
346
- const items = [
347
- { label: t('ui.overview.metric.completion', {}, 'Completion rate'), value: `${completionRate}%`, cls: completionRate >= 75 ? 'good' : completionRate >= 40 ? '' : 'bad' },
348
- { label: t('ui.overview.metric.blockerPressure', {}, 'Blocker pressure'), value: `${blockerRate}%`, cls: blockerRate === 0 ? 'good' : blockerRate > 20 ? 'bad' : 'warn' },
349
- { label: t('ui.overview.metric.findings', {}, 'Open findings'), value: String((derived.openFindings || []).length), cls: (derived.openFindings||[]).length === 0 ? 'good' : 'warn' },
350
- { label: t('ui.overview.metric.repo', {}, 'Repo'), value: runtime?.clean ? t('ui.overview.repoClean', {}, 'Clean') : t('ui.overview.repoDirty', {}, 'Changes present'), cls: runtime?.clean ? 'good' : 'warn' },
351
- { label: t('ui.overview.metric.docDrift', {}, 'Documentation drift'), value: docsDirty?.length ? docsDirty.join(', ') : 'OK', cls: docsDirty?.length ? 'warn' : 'good' },
352
- { label: t('ui.overview.metric.lastCommit', {}, 'Last commit'), value: runtime?.lastCommit ? `${runtime.lastCommit.shortHash} · ${formatDate(runtime.lastCommit.date, 'date')}` : '—', cls: '' },
353
- ];
346
+ const items = [
347
+ { label: t('ui.overview.metric.completion', {}, 'Completion rate'), value: `${completionRate}%`, cls: completionRate >= 75 ? 'good' : completionRate >= 40 ? '' : 'bad' },
348
+ { label: t('ui.overview.metric.blockerPressure', {}, 'Blocker pressure'), value: `${blockerRate}%`, cls: blockerRate === 0 ? 'good' : blockerRate > 20 ? 'bad' : 'warn' },
349
+ { label: t('ui.overview.metric.findings', {}, 'Open findings'), value: String((derived.openFindings || []).length), cls: (derived.openFindings||[]).length === 0 ? 'good' : 'warn' },
350
+ { label: t('ui.overview.metric.repo', {}, 'Repo'), value: runtime?.clean ? t('ui.overview.repoClean', {}, 'Clean') : t('ui.overview.repoDirty', {}, 'Changes present'), cls: runtime?.clean ? 'good' : 'warn' },
351
+ { label: t('ui.overview.metric.docDrift', {}, 'Documentation drift'), value: docsDirty?.length ? docsDirty.join(', ') : 'OK', cls: docsDirty?.length ? 'warn' : 'good' },
352
+ { label: t('ui.overview.metric.lastCommit', {}, 'Last commit'), value: runtime?.lastCommit ? `${runtime.lastCommit.shortHash} · ${formatDate(runtime.lastCommit.date, 'date')}` : '—', cls: '' },
353
+ { label: t('ui.overview.metric.contract', {}, 'Contract readiness'), value: opera?.contractReadiness || 'hypothesis', cls: opera?.contractReadiness === 'locked' || opera?.contractReadiness === 'verified' ? 'good' : 'warn' },
354
+ { label: t('ui.overview.metric.bootstrap', {}, 'OPERA bootstrap'), value: opera?.bootstrap?.status || 'awaiting_intake', cls: opera?.bootstrap?.status === 'completed' ? 'good' : opera?.bootstrap?.status === 'legacy_unsupported' ? 'bad' : 'warn' },
355
+ { label: t('ui.overview.metric.legacy', {}, 'Legacy status'), value: opera?.legacyStatus || 'supported', cls: opera?.legacyStatus === 'supported' ? 'good' : 'bad' },
356
+ { label: t('ui.overview.metric.localeSource', {}, 'Language source'), value: opera?.localeSource || 'project', cls: '' },
357
+ ];
354
358
 
355
359
  return `
356
360
  <div class="health-grid">
@@ -1,26 +0,0 @@
1
- # Agente del Proyecto: {{PROJECT_NAME}}
2
-
3
- ## Identidad
4
- Eres el agente principal del proyecto **{{PROJECT_NAME}}**. Este template existe por compatibilidad heredada y debe operar bajo el protocolo O.P.E.R.A. v3.0.
5
-
6
- ## Fuente de Verdad
7
- Tu fuente de verdad es `genesis.md`. Antes de tomar cualquier decisión, consulta este archivo.
8
- Para el seguimiento operativo y el estado del backlog, usa `project_control.json`.
9
-
10
- ## Comportamiento
11
- - Sigue las reglas de comportamiento definidas en `genesis.md`.
12
- - Respeta la Matriz de Autonomía (Semáforo) para determinar qué acciones puedes tomar.
13
- - Gestiona tareas y estados desde `project_control.json`.
14
- - No edites manualmente `task_plan.md`, `progress.md` ni `findings.md`; se regeneran con `trackops sync`.
15
-
16
- ## Skills Disponibles
17
- Consulta `.agents/skills/_registry.md` para ver las skills instaladas.
18
- También puedes buscar nuevas skills con `trackops skill catalog`.
19
-
20
- ## Ciclo de Trabajo
21
- 1. Ejecuta `trackops status` al inicio de cada bloque de trabajo.
22
- 2. Consulta `genesis.md` para entender los datos y reglas.
23
- 3. Usa `trackops next` para ver la siguiente cola priorizada.
24
- 4. Antes de implementar, marca la tarea con `trackops task start <task-id>`.
25
- 5. Usa el router (`.agent/hub/router.md`) para saber qué skill aplicar.
26
- 6. Al terminar, pasa la tarea a `review`, `complete` o `block` y ejecuta `trackops sync`.
@@ -1,94 +0,0 @@
1
- # {{PROJECT_NAME}} — Genesis
2
-
3
- > **La Constitución del proyecto.** Este documento es la fuente de verdad. Antes de tomar cualquier decisión arquitectónica o de implementación, consulta este archivo. Si un script contradice lo definido aquí, el script está mal.
4
-
5
- ---
6
-
7
- ## 1. Directriz Principal
8
-
9
- _¿Cuál es el resultado singular deseado de este proyecto?_
10
-
11
- > TODO: Definir el objetivo principal del proyecto.
12
-
13
- ---
14
-
15
- ## 2. Integraciones Externas
16
-
17
- _¿Qué servicios externos necesitamos? ¿Están listas las claves?_
18
-
19
- | Servicio | Estado | Clave / Config |
20
- |----------|--------|----------------|
21
- | — | — | — |
22
-
23
- ---
24
-
25
- ## 3. Fuente de la Verdad
26
-
27
- _¿Dónde viven los datos primarios?_
28
-
29
- > TODO: Describir la fuente de datos principal.
30
-
31
- ---
32
-
33
- ## 4. Carga Útil (Payload)
34
-
35
- _¿Cómo y dónde debe entregarse el resultado final?_
36
-
37
- > TODO: Describir destino y formato de entrega.
38
-
39
- ---
40
-
41
- ## 5. Reglas de Comportamiento
42
-
43
- _Restricciones, tono y reglas específicas del dominio._
44
-
45
- > TODO: Definir restricciones de negocio.
46
-
47
- ---
48
-
49
- ## Esquema de Datos
50
-
51
- > **Regla "Datos-Primero"**: Este schema debe estar definido antes de escribir cualquier código.
52
-
53
- ```json
54
- {
55
- "input": {
56
- "source": "",
57
- "schema": {}
58
- },
59
- "output": {
60
- "destination": "",
61
- "schema": {}
62
- }
63
- }
64
- ```
65
-
66
- ---
67
-
68
- ## Invariantes Arquitectónicas
69
-
70
- _Decisiones técnicas inamovibles. Cambiarlas requiere aprobación explícita (Nivel Rojo)._
71
-
72
- - TODO: Listar invariantes.
73
-
74
- ---
75
-
76
- ## Pipeline
77
-
78
- _Documenta el grafo de dependencias entre herramientas._
79
-
80
- <!-- Ejemplo:
81
- ### tool_fetch.py → tool_transform.py
82
- - Output: `.tmp/raw_data.json`
83
- - Formato: JSON array según schema X
84
- -->
85
-
86
- ---
87
-
88
- ## Templates
89
-
90
- _Referencias a las plantillas de output definidas en `templates/`._
91
-
92
- <!-- Ejemplo:
93
- - `templates/report.md` — Plantilla para reportes
94
- -->