trackops 2.0.5 → 2.1.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/locales/es.json CHANGED
@@ -42,10 +42,12 @@
42
42
  "doc.label.completedTasks": "Completadas",
43
43
  "doc.label.inProgressTasks": "En progreso",
44
44
  "doc.label.inReviewTasks": "En revision",
45
- "doc.label.pendingTasks": "Pendientes",
46
- "doc.label.blockedTasks": "Bloqueadas",
47
- "doc.label.findingOpen": "abierto",
48
- "doc.label.findingResolved": "resuelto",
45
+ "doc.label.pendingTasks": "Pendientes",
46
+ "doc.label.blockedTasks": "Bloqueadas",
47
+ "doc.label.awaitingUserTasks": "Esperando confirmacion del usuario",
48
+ "doc.label.agentInboxPending": "Instrucciones pendientes para el agente",
49
+ "doc.label.findingOpen": "abierto",
50
+ "doc.label.findingResolved": "resuelto",
49
51
  "doc.label.findingStatus": "Estado",
50
52
  "doc.label.findingDetail": "Detalle",
51
53
  "doc.label.findingImpact": "Impacto",
@@ -60,7 +62,8 @@
60
62
  "doc.label.noActiveTasks": "No hay tareas en progreso en este momento.",
61
63
  "doc.label.noReviewTasks": "No hay tareas en revision.",
62
64
  "doc.label.noActiveBlockers": "Sin bloqueadores activos.",
63
- "doc.label.noHistory": "Sin movimientos registrados.",
65
+ "doc.label.noHistory": "Sin movimientos registrados.",
66
+ "doc.label.noAgentInbox": "Sin instrucciones pendientes para el agente.",
64
67
 
65
68
  "cli.runtimeUpdated": "Runtime actualizado en {path}",
66
69
  "cli.docsSynced": "Documentacion operativa sincronizada.",
@@ -69,6 +72,16 @@
69
72
  "cli.actionNotSupported": "Accion no soportada: {action}",
70
73
  "cli.mustProvideActionAndId": "Debes indicar accion e id de tarea.",
71
74
  "cli.noReadyTasks": "No hay tareas listas. Revisa bloqueadores y dependencias.",
75
+ "cli.noReadyTasks.blocked": "No hay tareas listas. Hay {count} tarea(s) bloqueada(s). Ejecuta 'trackops status' para ver detalles.",
76
+ "cli.noReadyTasks.allDone": "Todas las tareas estan completadas o canceladas. El proyecto ha alcanzado completitud operativa.",
77
+ "control.circularDependency": "Advertencia: dependencia circular detectada en tarea(s): {taskIds}.",
78
+ "control.taskAlreadyStatus": "La tarea '{taskId}' ya esta en estado '{status}'. Sin cambios.",
79
+ "control.contractStale": "El contrato operativo estaba desactualizado y ha sido revalidado.",
80
+ "control.docsOverwriteWarning": "Advertencia: {file} tiene ediciones manuales y no fue sobreescrito. Usa --force para forzar.",
81
+ "opera.install.bootstrapConfirm": "¿Iniciar bootstrap ahora? [y/N]",
82
+ "opera.install.bootstrapSkipped": "El bootstrap no se inició. Ejecuta 'trackops opera bootstrap' cuando quieras continuar.",
83
+ "skill.installError": "Advertencia: no se pudo instalar la skill '{name}': {error}",
84
+ "cli.help.initFirst": "Ejecuta 'trackops init' para inicializar un proyecto aqui.",
72
85
  "cli.hooksInstalled": "Git hooks instalados en .githooks",
73
86
  "cli.hooksError": "No se pudo configurar core.hooksPath.",
74
87
  "cli.noProjectFound": "No se encontro project_control.json en este directorio ni superiores.",
@@ -83,23 +96,41 @@
83
96
  "cli.status.noReadyTasks": "No hay tareas listas; revisar bloqueadores o dependencias.",
84
97
  "cli.status.blockers": "Bloqueadores:",
85
98
  "cli.status.noBlockers": "Sin bloqueadores.",
86
- "cli.status.decisions": "Decisiones externas:",
87
- "cli.status.noDecisions": "Ninguna.",
88
- "cli.status.repo": "Repositorio:",
99
+ "cli.status.decisions": "Decisiones externas:",
100
+ "cli.status.noDecisions": "Ninguna.",
101
+ "cli.status.agentInbox": "Bandeja del agente:",
102
+ "cli.status.noAgentInbox": "Sin instrucciones pendientes.",
103
+ "cli.status.repo": "Repositorio:",
89
104
  "cli.status.branch": "Rama: {branch} | Arbol: {treeStatus}",
90
105
  "cli.status.treeClean": "limpio",
91
- "cli.status.treeDirty": "sucio ({staged} staged, {unstaged} unstaged, {untracked} untracked)",
106
+ "cli.status.treeDirty": "con cambios ({staged} preparados, {unstaged} sin preparar, {untracked} nuevos)",
92
107
  "cli.status.lastCommit": "Ultimo commit: {hash} {subject}",
93
- "cli.status.divergence": "Divergencia: ahead {ahead}, behind {behind}",
94
- "cli.status.runtime": "Runtime: {path}",
95
- "cli.status.docsSynced": "Documentacion sincronizada: {status}",
96
- "cli.status.docsSyncedYes": "si",
97
- "cli.status.docsSyncedNo": "no ({files})",
98
-
99
- "cli.next.phase": "fase",
100
- "cli.next.priority": "prioridad",
101
- "cli.next.stream": "stream",
102
- "cli.next.summary": "resumen",
108
+ "cli.status.divergence": "Divergencia con remoto: {ahead} por enviar, {behind} por traer",
109
+ "cli.status.runtime": "Runtime: {path}",
110
+ "cli.status.docsSynced": "Documentacion sincronizada: {status}",
111
+ "cli.status.docsSyncedYes": "si",
112
+ "cli.status.docsSyncedNo": "no ({files})",
113
+ "cli.status.layout": "Estructura: {layout} | Raiz: {workspace}",
114
+ "cli.status.appRoot": "App: {path}",
115
+ "cli.status.opsRoot": "Ops: {path}",
116
+ "cli.status.bootstrapMode": "Ruta de bootstrap: {value}",
117
+ "cli.status.bootstrapReason": "Motivo de la ruta: {value}",
118
+ "cli.status.gitState": "Git: {state}",
119
+ "cli.status.gitNotInitialized": "no inicializado",
120
+ "cli.status.gitAction": "Ejecuta 'git init' antes de confiar en el estado del repositorio o en los flujos de release.",
121
+ "cli.status.branchDetached": "HEAD desacoplado",
122
+ "cli.status.noUpstream": "Todavia no hay rama remota configurada.",
123
+ "cli.status.envPresent": "Claves de entorno presentes: {value}",
124
+ "cli.status.envMissing": "Claves de entorno faltantes: {value}",
125
+
126
+ "cli.next.phase": "fase",
127
+ "cli.next.priority": "prioridad",
128
+ "cli.next.stream": "stream",
129
+ "cli.next.summary": "resumen",
130
+ "cli.next.activeTasks": "Trabajo activo:",
131
+ "cli.next.readyQueue": "Siguientes tareas listas en cola:",
132
+ "cli.sync.dryRunWouldUpdate": "Se actualizarian: {files}",
133
+ "cli.sync.dryRunInSync": "Toda la documentacion ya esta sincronizada.",
103
134
 
104
135
  "cli.help.title": "Control operativo del proyecto",
105
136
  "cli.help.usage": "Uso:",
@@ -120,11 +151,13 @@
120
151
  "cli.help.task.desc": "Acciones: start, review, complete, block, pending, cancel, note.",
121
152
  "cli.help.opera.desc": "Gestiona OPERA.",
122
153
  "cli.help.opera.upgradeHint": "Upgrade: trackops opera upgrade --stable [--reset]",
123
- "cli.help.locale.desc": "Muestra o actualiza el idioma global de TrackOps.",
124
- "cli.help.doctor.desc": "Explica el origen efectivo del idioma para esta maquina/proyecto.",
125
- "cli.help.skill.desc": "Gestiona skills.",
126
- "cli.help.help.desc": "Muestra esta ayuda.",
127
- "cli.help.globalWorkflow": "Flujo global del agente:",
154
+ "cli.help.locale.desc": "Muestra o actualiza el idioma global de TrackOps.",
155
+ "cli.help.doctor.desc": "Explica el origen efectivo del idioma para esta maquina/proyecto.",
156
+ "cli.help.skill.desc": "Gestiona skills.",
157
+ "cli.help.help.desc": "Muestra esta ayuda.",
158
+ "cli.help.globalFlags": "Flags globales:",
159
+ "cli.help.globalFlags.line1": "Usa '--plain' (o '--a11y') para desactivar el formato con Unicode y facilitar lectores de pantalla, logs o terminales limitadas.",
160
+ "cli.help.globalWorkflow": "Flujo global del agente:",
128
161
  "cli.help.globalWorkflow.line1": "Instala la skill con 'npx skills add Baxahaun/trackops' y luego el runtime con 'npm install -g trackops'.",
129
162
  "cli.help.globalWorkflow.line2": "Despues verifica con 'trackops --version' y usa 'trackops init' y 'trackops opera install' de forma explicita dentro de cada proyecto.",
130
163
  "cli.usage.workspace": "Uso: trackops workspace <status|migrate>",
@@ -174,19 +207,33 @@
174
207
  "server.invalidJson": "JSON invalido.",
175
208
  "server.sessionNotFound": "Sesion no encontrada.",
176
209
  "server.noActiveSession": "No hay sesion activa para iniciar stream.",
177
- "server.commandRequired": "Se requiere un comando.",
178
- "server.projectNotResolved": "No se pudo resolver el proyecto.",
179
- "server.invalidLocale": "Idioma invalido: {value}.",
180
-
181
- "init.welcome": "Proyecto inicializado con trackops.",
210
+ "server.commandRequired": "Se requiere un comando.",
211
+ "server.projectNotResolved": "No se pudo resolver el proyecto.",
212
+ "server.invalidLocale": "Idioma invalido: {value}.",
213
+ "server.timeTaskRequired": "Debes indicar una tarea para iniciar el cronometro.",
214
+ "server.timeTaskNotFound": "No existe la tarea '{taskId}'.",
215
+ "server.timeParentTask": "Solo puedes registrar tiempo en tareas hoja. Divide el trabajo y arranca el timer en una subtarea accionable.",
216
+ "server.timeStartedNote": "Cronometro iniciado desde el dashboard.",
217
+ "server.timeEntryNotFound": "No se encontro el registro de tiempo.",
218
+ "server.agentExecutionStarted": "Ejecucion del agente iniciada desde la consola.",
219
+
220
+ "agentInbox.awaitUser.message": "La tarea '{title}' ({taskId}) queda en {status} desde {source}. El agente debe esperar la confirmacion del usuario y continuar cuando haya resultado real.",
221
+ "agentInbox.awaitUser.resolved": "La espera de confirmacion del usuario ha quedado resuelta.",
222
+ "agentInbox.verify.message": "El usuario ha dejado la tarea '{title}' ({taskId}) en estado {status} desde {source}. El agente debe comprobar el estado real antes de continuar.",
223
+ "agentInbox.verify.resolved": "La verificacion del estado real ya ha sido atendida.",
224
+
225
+ "init.welcome": "Proyecto inicializado con trackops.",
182
226
  "init.opsExists": "Ops ya esta instalado en este proyecto.",
183
- "init.created": "Creado {file}",
184
- "init.updated": "Actualizado {file}",
185
- "init.registered": "Proyecto registrado en el portfolio global.",
186
- "init.defaultFocus": "Bootstrap operativo del proyecto",
187
- "init.defaultTarget": "Proyecto gestionado con trackops",
188
- "init.defaultTaskTitle": "Configurar proyecto con trackops",
189
- "init.defaultTaskSummary": "Verificar estructura inicial, ajustar fases y confirmar integracion operativa.",
227
+ "init.created": "Creado {file}",
228
+ "init.updated": "Actualizado {file}",
229
+ "init.adoptedExistingRepo": "El contenido del repositorio existente se movio a {dir}/.",
230
+ "init.registered": "Proyecto registrado en el portfolio global.",
231
+ "init.defaultFocus": "Bootstrap operativo del proyecto",
232
+ "init.defaultTarget": "Proyecto gestionado con trackops",
233
+ "init.defaultTaskTitle": "Configurar proyecto con trackops",
234
+ "init.defaultTaskSummary": "Verificar estructura inicial, ajustar fases y confirmar integracion operativa.",
235
+ "init.error.legacyDetected": "Se detectó un proyecto TrackOps legacy. Ejecuta 'trackops workspace migrate' en lugar de 'trackops init'.",
236
+ "init.error.reservedConflict": "No se puede inicializar TrackOps aqui porque estas entradas reservadas ya existen sin un workspace TrackOps valido: {entries}. Resuelvelas o renómbralas primero.",
190
237
 
191
238
  "opera.installed": "Metodologia OPERA instalada (v{version}).",
192
239
  "opera.alreadyInstalled": "OPERA ya esta instalado en este proyecto (v{version}).",
@@ -194,42 +241,123 @@
194
241
  "opera.upgraded": "OPERA actualizado a v{version}.",
195
242
  "opera.primitiveDetected": "Detectada instalacion OPERA existente (sin gestion por Ops).",
196
243
  "opera.status.version": "OPERA v{version}",
197
- "opera.status.installed": " Instalado: {value}",
198
- "opera.status.skills": " Skills: {value}",
199
- "opera.status.locale": " Idioma: {locale} ({source})",
200
- "opera.status.legacy": " Legacy: {value}",
201
- "opera.status.contractVersion": " Version de contrato: {value}",
202
- "opera.status.contractReadiness": " Readiness del contrato: {value}",
203
- "opera.status.bootstrap": " Bootstrap: {value}",
204
- "opera.status.mode": " Modo: {value}",
205
- "opera.status.route": " Ruta: {value}",
206
- "opera.status.ownership": " Ownership: {value}",
207
- "opera.status.missing": " Faltan: {value}",
208
- "opera.status.resume": " Reanudar: trackops opera bootstrap --resume",
209
- "opera.status.handoff": " Handoff: {value}",
210
- "opera.status.qualityReport": " Quality report: {value}",
211
- "opera.status.structure": " Estructura:",
244
+ "opera.status.installed": " Instalado: {value}",
245
+ "opera.status.skills": " Skills: {value}",
246
+ "opera.status.locale": " Idioma: {locale} ({source})",
247
+ "opera.status.legacy": " Compatibilidad: {value}",
248
+ "opera.status.contractVersion": " Version de contrato: {value}",
249
+ "opera.status.contractReadiness": " Madurez del contrato: {value}",
250
+ "opera.status.bootstrap": " Estado del bootstrap: {value}",
251
+ "opera.status.mode": " Modo: {value}",
252
+ "opera.status.route": " Ruta: {value}",
253
+ "opera.status.ownership": " Responsable de decisiones: {value}",
254
+ "opera.status.missing": " Faltan: {value}",
255
+ "opera.status.awaitingAgentExplanation": " TrackOps esta esperando que el agente produzca los archivos de bootstrap.",
256
+ "opera.status.awaitingAgentAction": " Accion: ejecuta 'trackops opera handoff --print', entrega ese contexto a tu agente y espera a que cree los archivos solicitados.",
257
+ "opera.status.directExplanation": " El bootstrap guiado todavia esta incompleto.",
258
+ "opera.status.directAction": " Accion: completa {intake} y {spec}, luego reanuda.",
259
+ "opera.status.contractNotGenerated": " El contrato operativo no se genera hasta completar el bootstrap.",
260
+ "opera.status.resume": " Reanudar: trackops opera bootstrap --resume",
261
+ "opera.status.handoff": " Contexto para agente: {value}",
262
+ "opera.status.intake": " Intake: {value}",
263
+ "opera.status.specDossier": " Dossier de especificacion: {value}",
264
+ "opera.status.openQuestions": " Preguntas abiertas: {value}",
265
+ "opera.status.qualityReport": " Informe de calidad: {value}",
266
+ "opera.status.structure": " Estructura:",
212
267
  "opera.configure.invalidPhases": "JSON de fases invalido.",
213
268
  "opera.configure.updated": "Configuracion actualizada.",
214
269
  "opera.upgrade.runInstallFirst": "Ejecuta 'trackops opera install' primero.",
215
- "opera.upgrade.usage": "Uso: trackops opera upgrade --stable [--reset]",
216
- "opera.upgrade.legacyUnsupported": "Proyecto OPERA legacy detectado. Ejecuta 'trackops opera upgrade --stable --reset' para moverlo al modelo estable actual.",
217
- "opera.upgrade.backup": "Backup: {path}",
218
- "postinstall.localeSet": "TrackOps ha fijado el idioma en '{locale}' ({source}).",
219
-
220
- "skill.installed": "Skill '{name}' instalada.",
221
- "skill.removed": "Skill '{name}' desinstalada.",
222
- "skill.notFound": "Skill '{name}' no encontrada en el catalogo.",
223
- "skill.alreadyInstalled": "Skill '{name}' ya esta instalada.",
224
- "skill.notInstalled": "Skill '{name}' no esta instalada.",
225
- "skill.catalogTitle": "Skills disponibles:",
226
- "skill.listTitle": "Skills instaladas:",
227
-
228
- "cli.status.bootstrap": "Bootstrap: {status} | Idioma: {locale}",
229
-
230
- "bootstrap.header": "Bootstrap OPERA",
231
- "bootstrap.subtitle": "Primero clasifica al usuario y el estado del proyecto. TrackOps decidira si continuar por terminal o derivar el arranque al agente.",
232
- "bootstrap.instructions": "Responde con low|medium|high|senior o con sus equivalentes bajo|medio|alto. Si no sabes una respuesta, pulsa Enter para aceptar el valor por defecto.",
270
+ "opera.upgrade.usage": "Uso: trackops opera upgrade --stable [--reset]",
271
+ "opera.upgrade.legacyUnsupported": "Proyecto OPERA legacy detectado. Ejecuta 'trackops opera upgrade --stable --reset' para moverlo al modelo estable actual.",
272
+ "opera.upgrade.backup": "Backup: {path}",
273
+ "opera.handoff.summary": "Resumen del bootstrap: {status}",
274
+ "opera.handoff.mode": "Modo: {mode}",
275
+ "opera.handoff.markdown": "Contexto markdown: {value}",
276
+ "opera.handoff.json": "Contexto JSON: {value}",
277
+ "opera.handoff.directTitle": "Bootstrap guiado de OPERA",
278
+ "opera.handoff.directSummary": "Resumen del bootstrap guiado: {status}",
279
+ "opera.handoff.directStatus": "Estado del bootstrap",
280
+ "opera.handoff.directIntake": "Archivo intake",
281
+ "opera.handoff.directSpec": "Dossier de especificacion",
282
+ "opera.handoff.directQuestions": "Preguntas abiertas",
283
+ "opera.handoff.directQuality": "Informe de calidad",
284
+ "opera.handoff.directNext": "Siguiente paso: completa los archivos del bootstrap guiado y ejecuta 'trackops opera bootstrap --resume'.",
285
+ "postinstall.localeSet": "TrackOps ha fijado el idioma en '{locale}' ({source}).",
286
+
287
+ "skill.installed": "Skill '{name}' instalada.",
288
+ "skill.removed": "Skill '{name}' desinstalada.",
289
+ "skill.notFound": "Skill '{name}' no encontrada en el catalogo.",
290
+ "skill.alreadyInstalled": "Skill '{name}' ya esta instalada.",
291
+ "skill.notInstalled": "Skill '{name}' no esta instalada.",
292
+ "skill.catalogTitle": "Skills disponibles:",
293
+ "skill.listTitle": "Skills instaladas:",
294
+ "skill.nameRequired": "Debes indicar el nombre de la skill.",
295
+ "skill.noneInstalled": "No hay skills instaladas.",
296
+ "skill.noneCatalog": "No hay skills disponibles en el catalogo.",
297
+
298
+ "env.status.title": "Entorno:",
299
+ "env.status.rootEnv": " .env raiz: {path}",
300
+ "env.status.example": " Ejemplo: {path}",
301
+ "env.status.appBridge": " Puente app: {path}",
302
+ "env.status.bridgeMode": " Modo de puente: {value}",
303
+ "env.status.required": " Claves requeridas: {value}",
304
+ "env.status.present": " Presentes: {value}",
305
+ "env.status.missing": " Faltantes: {value}",
306
+ "env.sync.updated": "Entorno sincronizado en {path}",
307
+ "env.sync.missing": "Claves requeridas faltantes: {value}",
308
+
309
+ "workspace.status.title": "Workspace:",
310
+ "workspace.status.layout": " Estructura: {value}",
311
+ "workspace.status.root": " Raiz: {path}",
312
+ "workspace.status.app": " App: {path}",
313
+ "workspace.status.ops": " Ops: {path}",
314
+ "workspace.status.manifest": " Manifest: {path}",
315
+ "workspace.status.control": " Control: {path}",
316
+ "workspace.migrate.updated": "Workspace migrado: {path}",
317
+ "workspace.migrate.backup": "Rama de backup: {branch}",
318
+
319
+ "cli.status.bootstrap": "Bootstrap: {status} | Idioma: {locale}",
320
+
321
+ "bootstrap.status.awaiting_intake": "esperando datos guiados",
322
+ "bootstrap.status.awaiting_agent": "esperando al agente",
323
+ "bootstrap.status.completed": "completado",
324
+ "bootstrap.status.blocked": "bloqueado",
325
+ "bootstrap.status.needs_review": "requiere revision",
326
+ "bootstrap.status.legacy_unsupported": "modelo legacy no soportado",
327
+ "bootstrap.mode.agent_handoff": "descubrimiento guiado por agente",
328
+ "bootstrap.mode.direct_cli": "bootstrap guiado por terminal",
329
+ "bootstrap.reason.forced_handoff": "se forzó explícitamente el modo handoff",
330
+ "bootstrap.reason.forced_direct": "se forzó explícitamente el modo guiado por terminal",
331
+ "bootstrap.reason.non_technical_user": "el usuario necesita descubrimiento guiado",
332
+ "bootstrap.reason.idea_stage": "el proyecto sigue en etapa de idea o borrador",
333
+ "bootstrap.reason.insufficient_docs": "no hay documentación suficiente para continuar con seguridad en terminal",
334
+ "bootstrap.reason.agent_owned_decisions": "las decisiones clave quedaron delegadas al agente",
335
+ "bootstrap.reason.technical_existing_project": "el proyecto es técnico, tiene contexto y está listo para bootstrap en terminal",
336
+ "bootstrap.ownership.user": "usuario",
337
+ "bootstrap.ownership.shared": "compartida",
338
+ "bootstrap.ownership.agent": "agente",
339
+ "bootstrap.readiness.hypothesis": "borrador inicial",
340
+ "bootstrap.readiness.provisional": "provisional",
341
+ "bootstrap.readiness.verified": "verificado",
342
+ "bootstrap.readiness.locked": "cerrado",
343
+ "bootstrap.scaffold.specTitle": "Dossier de especificacion",
344
+ "bootstrap.scaffold.problemStatement": "Problema principal",
345
+ "bootstrap.scaffold.targetUser": "Usuario objetivo",
346
+ "bootstrap.scaffold.singularDesiredOutcome": "Resultado singular deseado",
347
+ "bootstrap.scaffold.deliveryTarget": "Objetivo de entrega",
348
+ "bootstrap.scaffold.sourceOfTruth": "Fuente de verdad",
349
+ "bootstrap.scaffold.specPlaceholder": "Usa este archivo para consolidar la especificacion del proyecto antes de que OPERA la procese.",
350
+ "bootstrap.scaffold.openQuestionsTitle": "Preguntas abiertas",
351
+ "bootstrap.scaffold.missingFields": "Campos pendientes",
352
+ "bootstrap.scaffold.contradictions": "Contradicciones",
353
+ "bootstrap.scaffold.none": "Ninguna.",
354
+ "bootstrap.legacy.supported": "modelo estable actual",
355
+ "bootstrap.legacy.legacy_unsupported": "modelo legacy requiere upgrade",
356
+
357
+ "bootstrap.header": "Bootstrap OPERA",
358
+ "bootstrap.subtitle": "Primero clasifica al usuario y el estado del proyecto.\n TrackOps decidirá si continuar por terminal o derivar el arranque al agente.",
359
+ "bootstrap.instructions": "Responde con los valores entre corchetes.\n Si no sabes una respuesta, pulsa Enter para aceptar el valor por defecto.",
360
+ "bootstrap.resultHeader": "Resultado",
233
361
  "bootstrap.question.technicalLevel": "Nivel tecnico del usuario",
234
362
  "bootstrap.question.projectState": "Estado actual del proyecto",
235
363
  "bootstrap.question.docsState": "Documentacion disponible",
@@ -248,12 +376,18 @@
248
376
  "bootstrap.question.templates": "Archivos template (separados por comas)",
249
377
  "bootstrap.question.repoTasks": "¿Incluir tareas opcionales de repo? [y/n]",
250
378
  "bootstrap.completed": "Bootstrap OPERA completado.",
379
+ "bootstrap.resumeBlocked": "Bootstrap reanudado pero la calidad esta BLOQUEADA. Faltan los siguientes campos:",
380
+ "bootstrap.resumeNeedsReview": "Bootstrap reanudado pero necesita revision. Los siguientes campos requieren atencion:",
381
+ "bootstrap.resumeAwaitingArtifacts": "Artefactos del agente no encontrados. Asegurate de que existan ops/bootstrap/intake.json y ops/bootstrap/spec-dossier.md.",
382
+ "bootstrap.resumeEmptyArtifacts": "Los artefactos del agente estan vacios. intake.json necesita al menos un campo significativo y spec-dossier.md debe tener contenido.",
383
+ "bootstrap.routingMode": "Routing del bootstrap: {mode} (razon: {reason})",
251
384
  "bootstrap.pending": "Bootstrap OPERA guardado como pendiente. Reanuda con 'trackops opera bootstrap --resume'.",
252
- "bootstrap.awaitingAgent": "Bootstrap OPERA derivado al agente. Completa el handoff y reanuda con 'trackops opera bootstrap --resume'.",
385
+ "bootstrap.awaitingAgent": "Bootstrap OPERA derivado al agente.",
253
386
  "bootstrap.handoffFile": "Archivo de handoff",
254
- "bootstrap.next.handoff": "Siguiente paso: ejecuta 'trackops opera handoff --print', pega el contexto en tu agente y vuelve cuando existan ops/bootstrap/intake.json y ops/bootstrap/spec-dossier.md.",
255
- "bootstrap.next.directCompleted": "Siguiente paso: revisa 'trackops opera status' y continua el trabajo normal con 'trackops next' y 'trackops sync'.",
256
- "bootstrap.next.directPending": "Siguiente paso: completa los datos pendientes y reanuda con 'trackops opera bootstrap --resume'.",
387
+ "bootstrap.next.label": "Siguiente paso",
388
+ "bootstrap.next.handoff": "Ejecuta 'trackops opera handoff --print', pega el contexto en tu agente y vuelve cuando existan ops/bootstrap/intake.json y ops/bootstrap/spec-dossier.md.",
389
+ "bootstrap.next.directCompleted": "Revisa 'trackops opera status' y continúa el trabajo normal con 'trackops next' y 'trackops sync'.",
390
+ "bootstrap.next.directPending": "Completa ops/bootstrap/intake.json y ops/bootstrap/spec-dossier.md, luego reanuda con 'trackops opera bootstrap --resume'.",
257
391
  "bootstrap.infer.envSourceHint": "Detectados archivos de entorno",
258
392
  "bootstrap.noneDefined": "Aun no definido.",
259
393
  "bootstrap.pendingValue": "Pendiente de definir.",
@@ -448,7 +582,229 @@
448
582
  "handoff.instruction.writeIntake": "Escribe `ops/bootstrap/intake.json` con el resultado estructurado del descubrimiento.",
449
583
  "handoff.instruction.writeSpec": "Escribe `ops/bootstrap/spec-dossier.md` con la especificacion narrativa o tecnica que OPERA ingerira.",
450
584
  "handoff.instruction.writeQuestions": "Escribe `ops/bootstrap/open-questions.md` si quedan incertidumbres importantes.",
451
- "handoff.instruction.includeFields": "Incluye campos explicitos para problema, usuario objetivo, resultado deseado, fuente de verdad, entrega y schemas.",
585
+ "handoff.instruction.includeFields": "Incluye campos explicitos en intake.json para: problemStatement, targetUser, singularDesiredOutcome, sourceOfTruth, payload (objetivo de entrega), inputSchema, outputSchema y decisionOwnership.",
586
+ "handoff.instruction.schemaFormat": "Para inputSchema y outputSchema, proporciona un objeto JSON describiendo la forma de los datos con al menos una clave. Un {} vacio no es aceptado. Ejemplo: {\"users\": [{\"id\": \"string\"}]}.",
587
+ "handoff.instruction.decisionOwnership": "Incluye decisionOwnership en intake.json (valores validos: user, shared, agent).",
452
588
  "handoff.instruction.respondInLanguage": "Responde al usuario en {language}.",
453
- "handoff.label.knownIntention": "Intencion conocida del proyecto"
454
- }
589
+ "handoff.instruction.neverRename": "El framework se llama OPERA. NUNCA uses 'ETAPA', 'E.T.A.P.A.' ni ningun otro nombre alternativo.",
590
+ "handoff.instruction.closure": "Cuando termines de escribir los archivos, dile al usuario exactamente esto: 'Los archivos estan listos. Vuelve a la terminal y ejecuta: trackops opera bootstrap --resume'. No ofrezcas scaffolding, creacion de carpetas ni ningun paso adicional. Tu trabajo termina con los archivos de bootstrap.",
591
+ "handoff.label.knownIntention": "Intencion conocida del proyecto",
592
+ "handoff.section.intakeSchema": "Schema obligatorio de intake.json",
593
+ "handoff.instruction.intakeRequired": "El archivo `ops/bootstrap/intake.json` DEBE incluir TODOS estos campos. Los campos faltantes bloquean el bootstrap. Usa null solo si es genuinamente desconocido tras el descubrimiento.",
594
+
595
+ "cli.help.plan.desc": "Importa planes de implementacion externos en el control del proyecto con reconciliacion preview-first.",
596
+ "cli.help.quality.desc": "Inspeccion continua de calidad, evidencia de verificacion y gates de readiness para release/promocion.",
597
+
598
+ "quality.status.pass": "correcto",
599
+ "quality.status.fail": "fallando",
600
+ "quality.status.warn": "atencion",
601
+ "quality.status.skip": "omitido",
602
+ "quality.status.passed": "superado",
603
+ "quality.status.failed": "fallido",
604
+ "quality.status.skipped": "omitido",
605
+ "quality.status.not_configured": "sin configurar",
606
+ "quality.status.ready": "listo",
607
+ "quality.status.blocked": "bloqueado",
608
+ "quality.status.attention": "atencion",
609
+ "quality.status.unknown": "desconocido",
610
+ "quality.scope.test": "tests",
611
+ "quality.scope.build": "build",
612
+ "quality.scope.smoke": "smoke",
613
+ "quality.scope.review": "revision",
614
+ "quality.scope.all": "todos",
615
+ "quality.value.unknown": "desconocido",
616
+ "quality.value.missing": "faltante",
617
+ "quality.source.intake": "intake.json",
618
+ "quality.source.bootstrap": "bootstrap",
619
+ "quality.source.inferred": "inferencia",
620
+ "quality.source.unknown": "desconocido",
621
+ "quality.message.ok": "{subject}: correcto.",
622
+ "quality.message.notApplicable": "{subject}: no aplica.",
623
+ "quality.message.failDetail": "{subject}: {detail}.",
624
+ "quality.message.fileMissing": "{subject}: falta {path}.",
625
+ "quality.message.missingItems": "{subject}: faltan {items}.",
626
+ "quality.message.outOfSync": "{subject}: desincronizado ({detail}).",
627
+ "quality.message.bridgeMissing": "{subject}: falta el bridge de app.",
628
+ "quality.message.bridgeMismatch": "{subject}: claves desincronizadas ({items}).",
629
+ "quality.message.dirtyTree": "{subject}: hay cambios sin commit.",
630
+ "quality.message.behindRemote": "{subject}: la rama local va {count} commit(s) por detras del remoto.",
631
+ "quality.message.countFail": "{subject}: {count} incidencia(s).",
632
+ "quality.message.staleTasks": "{subject}: {count} tarea(s) sin actividad reciente.",
633
+ "quality.message.recordedFrom": "{subject}: registrado desde {source}.",
634
+ "quality.verification.blocker.missing": "Falta evidencia reciente para {scope}.",
635
+ "quality.verification.blocker.failed": "La ultima verificacion de {scope} no supero el check.",
636
+ "quality.verification.blocker.stale": "La evidencia de {scope} esta desactualizada respecto a la configuracion actual.",
637
+ "quality.verification.blocker.recommendation": "Ejecuta 'trackops quality verify --scope {scope}' antes de continuar.",
638
+ "quality.verify.reviewNoteRequired": "La revision manual requiere --note.",
639
+ "quality.readiness.phase": "Readiness de fase ({phase})",
640
+ "quality.readiness.release": "Readiness de release",
641
+ "quality.readiness.promotion": "Readiness de promocion ({target})",
642
+ "quality.section.blockers": "Bloqueadores:",
643
+ "quality.section.warnings": "Advertencias:",
644
+ "quality.section.waived": "Dispensas:",
645
+ "quality.section.status": "Estado de calidad",
646
+ "quality.section.currentPhase": "Fase actual",
647
+ "quality.section.profiles": "Perfiles",
648
+ "quality.section.probes": "Probes",
649
+ "quality.section.findings": "Hallazgos",
650
+ "quality.section.verification": "Verificacion",
651
+ "quality.usage.title": "Uso:",
652
+ "quality.usage.status": "trackops quality status [--json] [--domain <name>] [--phase current|O|P|E|R|A]",
653
+ "quality.usage.verify": "trackops quality verify [--scope test|build|smoke|review|all] [--json] [--note \"...\"]",
654
+ "quality.usage.phaseReadiness": "trackops quality phase-readiness [--phase current|O|P|E|R|A] [--json]",
655
+ "quality.usage.releaseReadiness": "trackops quality release-readiness [--json]",
656
+ "quality.usage.promoteReadiness": "trackops quality promote-readiness --target staging|production [--json]",
657
+ "quality.usage.waiverList": "trackops quality waiver list [--json]",
658
+ "quality.usage.waiverAdd": "trackops quality waiver add <probe-id> --scope release|promotion --reason ... --approved-by ... --expires-at ...",
659
+ "quality.waivers.none": "No hay dispensas de calidad.",
660
+ "quality.waivers.approvedBy": "aprobado por {approvedBy}",
661
+ "quality.waivers.created": "Dispensa creada: {id}",
662
+ "quality.error.waiverProbeRequired": "quality waiver add requiere un probe id.",
663
+ "quality.error.waiverScope": "quality waiver scope debe ser 'release' o 'promotion'.",
664
+ "quality.error.waiverReason": "quality waiver add requiere --reason.",
665
+ "quality.error.waiverApprovedBy": "quality waiver add requiere --approved-by.",
666
+ "quality.error.waiverExpiry": "Las dispensas de promotion requieren --expires-at.",
667
+ "quality.statusBlock.title": "Calidad",
668
+ "quality.statusBlock.status": "estado",
669
+ "quality.statusBlock.phaseReadiness": "readiness de fase",
670
+ "quality.statusBlock.releaseReadiness": "readiness de release",
671
+ "quality.statusBlock.blocker": "bloqueador",
672
+ "quality.promotion.versionControlRequired": "La promocion a produccion requiere metadata de control de versiones.",
673
+ "quality.promotion.versionControlRecommendation": "Completa versionControl.remote/provider/developmentBranch/releaseBranch en intake.json.",
674
+ "quality.promotion.deploymentRequired": "La promocion a produccion requiere metadata completa de deployment.",
675
+ "quality.promotion.deploymentRecommendation": "Completa deployment.mode/target/smokeCommand en intake.json.",
676
+ "quality.promotion.policyApprovalRequired": "La promocion a produccion requiere una regla explicita de aprobacion en policy.",
677
+ "quality.promotion.policyApprovalRecommendation": "Restaura production_deploy_requires_approval=true en autonomy.json.",
678
+ "quality.phase.O.title": "Orquestar",
679
+ "quality.phase.P.title": "Probar",
680
+ "quality.phase.E.title": "Estructurar",
681
+ "quality.phase.R.title": "Refinar",
682
+ "quality.phase.A.title": "Automatizar",
683
+ "quality.phase.message.pass": "{title}: correcto.",
684
+ "quality.phase.message.fail": "{title}: no cumple.",
685
+ "quality.phase.message.failDetail": "{title}: no cumple ({detail}).",
686
+ "quality.phase.message.warn": "{title}: requiere atencion.",
687
+ "quality.phase.message.warnDetail": "{title}: requiere atencion ({detail}).",
688
+ "quality.phase.message.skip": "{title}: no aplica.",
689
+ "quality.phase.check.bootstrapComplete.title": "Bootstrap completado",
690
+ "quality.phase.check.bootstrapComplete.recommendation": "Completa o reanuda el bootstrap de OPERA antes de cerrar la fase.",
691
+ "quality.phase.check.discoveryCore.title": "Discovery principal definido",
692
+ "quality.phase.check.discoveryCore.recommendation": "Completa problema, usuario, resultado singular y fuente de verdad.",
693
+ "quality.phase.check.bootstrapArtifacts.title": "Artefactos base de bootstrap consistentes",
694
+ "quality.phase.check.bootstrapArtifacts.recommendation": "Asegura intake.json, spec-dossier.md, operating-contract.json y quality-report sin faltantes bloqueantes.",
695
+ "quality.phase.check.versionControl.title": "Metadata de versionado registrada",
696
+ "quality.phase.check.versionControl.recommendation": "Registra remote, provider, developmentBranch y releaseBranch.",
697
+ "quality.phase.check.deployment.title": "Metadata de despliegue registrada",
698
+ "quality.phase.check.deployment.recommendation": "Registra mode, target y smokeCommand.",
699
+ "quality.phase.check.schemas.title": "Schemas de input/output definidos",
700
+ "quality.phase.check.schemas.recommendation": "Define inputSchema y outputSchema con estructura minima util.",
701
+ "quality.phase.check.behaviorRules.title": "Reglas de comportamiento documentadas",
702
+ "quality.phase.check.behaviorRules.recommendation": "Documenta behaviorRules en bootstrap o contrato.",
703
+ "quality.phase.check.taskPlanSynced.title": "task_plan sincronizado",
704
+ "quality.phase.check.taskPlanSynced.recommendation": "Ejecuta 'trackops sync' y revisa task_plan.md.",
705
+ "quality.phase.check.envKeys.title": "Credenciales y entorno verificados",
706
+ "quality.phase.check.envKeys.recommendation": "Completa las claves requeridas en .env y sincroniza el bridge.",
707
+ "quality.phase.check.verificationEvidence.title": "Evidencia de verificacion disponible",
708
+ "quality.phase.check.verificationEvidence.recommendation": "Ejecuta tests o smoke para demostrar viabilidad tecnica real.",
709
+ "quality.phase.check.criticalFindings.title": "Sin findings criticos abiertos",
710
+ "quality.phase.check.criticalFindings.recommendation": "Resuelve o acepta explicitamente cualquier finding critical.",
711
+ "quality.phase.check.blockedTasksDocumented.title": "Bloqueos documentados",
712
+ "quality.phase.check.blockedTasksDocumented.recommendation": "Añade razon de bloqueo a todas las tareas bloqueadas.",
713
+ "quality.phase.check.backlogIntegrity.title": "Backlog sin ciclos ni referencias fantasma",
714
+ "quality.phase.check.backlogIntegrity.recommendation": "Corrige dependencias, padres y ciclos del backlog.",
715
+ "quality.phase.check.requiredAcceptance.title": "Tareas requeridas con acceptance",
716
+ "quality.phase.check.requiredAcceptance.recommendation": "Añade acceptance criteria a cada tarea hoja requerida.",
717
+ "quality.phase.check.taskTracking.title": "Trabajo trazado con TrackOps",
718
+ "quality.phase.check.taskTracking.recommendation": "Inicia, mueve y cierra tareas desde TrackOps para dejar rastro operativo.",
719
+ "quality.phase.check.docsSynced.title": "Docs generados sincronizados",
720
+ "quality.phase.check.docsSynced.recommendation": "Ejecuta 'trackops sync' y revisa drift documental.",
721
+ "quality.phase.check.repoCommitted.title": "Cambios materializados en git",
722
+ "quality.phase.check.repoCommitted.recommendation": "Haz commit de los cambios relevantes antes de cerrar la fase.",
723
+ "quality.phase.check.findingsHighClosed.title": "Sin findings critical/high abiertos",
724
+ "quality.phase.check.findingsHighClosed.recommendation": "Resuelve o acepta los findings de severidad alta antes de cerrar refinement.",
725
+ "quality.phase.check.contractConsistent.title": "Contrato coherente con los artefactos",
726
+ "quality.phase.check.contractConsistent.recommendation": "Ejecuta el auditor o corrige contradicciones entre contrato y bootstrap.",
727
+ "quality.phase.check.reviewEvidence.title": "Revision registrada",
728
+ "quality.phase.check.reviewEvidence.recommendation": "Registra la revision manual con 'trackops quality verify --scope review --note ...'.",
729
+ "quality.phase.check.tmpClean.title": ".tmp limpio",
730
+ "quality.phase.check.tmpClean.recommendation": "Limpia residuos temporales no necesarios antes de automatizar o liberar.",
731
+ "quality.phase.check.deploymentReady.title": "Deployment preparado",
732
+ "quality.phase.check.deploymentReady.recommendation": "Completa la metadata y el destino de despliegue antes de automatizar.",
733
+ "quality.phase.check.smokePassed.title": "Smoke test superado",
734
+ "quality.phase.check.smokePassed.recommendation": "Ejecuta y registra un smoke test valido en el destino.",
735
+ "quality.phase.check.remotePushed.title": "Cambios pusheados al remoto",
736
+ "quality.phase.check.remotePushed.recommendation": "Haz push al remoto cuando versionControl.remote sea true.",
737
+ "quality.phase.check.repoClean.title": "Working tree limpio",
738
+ "quality.phase.check.repoClean.recommendation": "Deja el working tree limpio antes de cerrar automatizacion/release.",
739
+ "quality.probe.bootstrap.complete.title": "Bootstrap",
740
+ "quality.probe.bootstrap.complete.recommendation": "Completa el bootstrap antes de confiar en readiness de fase o release.",
741
+ "quality.probe.contract.exists.title": "Contrato operativo",
742
+ "quality.probe.contract.exists.recommendation": "Genera o restaura ops/contract/operating-contract.json.",
743
+ "quality.probe.contract.valid-json.title": "JSON del contrato",
744
+ "quality.probe.contract.valid-json.recommendation": "Corrige operating-contract.json para que parsee sin error.",
745
+ "quality.probe.contract.intent-complete.title": "Intent del contrato",
746
+ "quality.probe.contract.intent-complete.recommendation": "Completa los campos de intent faltantes.",
747
+ "quality.probe.policy.exists.title": "Politica de autonomia",
748
+ "quality.probe.policy.exists.recommendation": "Genera o restaura ops/policy/autonomy.json.",
749
+ "quality.probe.policy.valid-json.title": "JSON de policy",
750
+ "quality.probe.policy.valid-json.recommendation": "Corrige autonomy.json para que parsee sin error.",
751
+ "quality.probe.docs.drift.title": "Docs generados",
752
+ "quality.probe.docs.drift.recommendation": "Ejecuta 'trackops sync' y revisa los documentos generados.",
753
+ "quality.probe.docs.genesis-exists.title": "genesis.md",
754
+ "quality.probe.docs.genesis-exists.recommendation": "Regenera genesis.md desde el contrato y el bootstrap actuales.",
755
+ "quality.probe.env.missing-keys.title": "Claves de entorno requeridas",
756
+ "quality.probe.env.missing-keys.recommendation": "Completa las claves faltantes en .env.",
757
+ "quality.probe.env.bridge-sync.title": "Bridge de entorno app",
758
+ "quality.probe.env.bridge-sync.recommendation": "Ejecuta 'trackops env sync' para regenerar el bridge.",
759
+ "quality.probe.repo.clean.title": "Working tree",
760
+ "quality.probe.repo.clean.recommendation": "Haz commit, stash o limpia cambios no relacionados antes de liberar.",
761
+ "quality.probe.repo.behind-remote.title": "Sincronizacion con remoto",
762
+ "quality.probe.repo.behind-remote.recommendation": "Trae los ultimos cambios remotos antes de liberar o promocionar.",
763
+ "quality.probe.tasks.circular-deps.title": "Dependencias circulares",
764
+ "quality.probe.tasks.circular-deps.recommendation": "Rompe la cadena circular de dependencias.",
765
+ "quality.probe.tasks.phantom-deps.title": "Dependencias fantasma",
766
+ "quality.probe.tasks.phantom-deps.recommendation": "Corrige referencias a tareas inexistentes.",
767
+ "quality.probe.tasks.phantom-parents.title": "Padres fantasma",
768
+ "quality.probe.tasks.phantom-parents.recommendation": "Reasigna o limpia parentId que apunten a tareas inexistentes.",
769
+ "quality.probe.tasks.hierarchy-cycles.title": "Ciclos jerarquicos",
770
+ "quality.probe.tasks.hierarchy-cycles.recommendation": "Rompe los ciclos padre-hijo del arbol de tareas.",
771
+ "quality.probe.tasks.stale-in-progress.title": "Tareas estancadas en progreso",
772
+ "quality.probe.tasks.stale-in-progress.recommendation": "Actualiza, bloquea o completa las tareas sin actividad reciente.",
773
+ "quality.probe.tasks.blocked-without-note.title": "Bloqueos sin nota",
774
+ "quality.probe.tasks.blocked-without-note.recommendation": "Documenta la razon de bloqueo en cada tarea bloqueada.",
775
+ "quality.probe.tasks.required-without-acceptance.title": "Acceptance faltante",
776
+ "quality.probe.tasks.required-without-acceptance.recommendation": "Añade acceptance criteria a todas las tareas requeridas.",
777
+ "quality.probe.findings.open-critical.title": "Findings criticos abiertos",
778
+ "quality.probe.findings.open-critical.recommendation": "Resuelve o dispensa explicitamente los findings critical antes de release.",
779
+ "quality.probe.findings.open-high.title": "Findings high abiertos",
780
+ "quality.probe.findings.open-high.recommendation": "Resuelve o sigue de forma explicita los findings high antes de cerrar refinement.",
781
+ "quality.probe.bootstrap.version-control.title": "Metadata de versionado en bootstrap",
782
+ "quality.probe.bootstrap.version-control.recommendation": "Captura versionControl.remote/provider/developmentBranch/releaseBranch en intake.json.",
783
+ "quality.probe.bootstrap.deployment.title": "Metadata de deployment en bootstrap",
784
+ "quality.probe.bootstrap.deployment.recommendation": "Captura deployment.mode/target/smokeCommand en intake.json.",
785
+ "quality.probe.verification.configured.title": "Configuracion de verificacion",
786
+ "quality.probe.verification.configured.recommendation": "Declara comandos explicitos en meta.quality.verification si los defaults no bastan.",
787
+ "ui.dashboard.tabQuality": "Calidad",
788
+ "ui.dashboard.quality.kpiQuality": "Calidad",
789
+ "ui.dashboard.quality.failingProbes": "{count} probes fallando",
790
+ "ui.dashboard.quality.kpiPhase": "Readiness de fase",
791
+ "ui.dashboard.quality.blockerCount": "{count} bloqueadores",
792
+ "ui.dashboard.quality.kpiRelease": "Readiness de release",
793
+ "ui.dashboard.quality.kpiPromotion": "Promocion a produccion",
794
+ "ui.dashboard.quality.domainStatus": "Estado por dominio",
795
+ "ui.dashboard.quality.domainCounts": "pass {pass} · fail {fail} · skip {skip}",
796
+ "ui.dashboard.quality.noDomainData": "Sin datos por dominio.",
797
+ "ui.dashboard.quality.latestVerification": "Ultima verificacion",
798
+ "ui.dashboard.quality.noVerificationRuns": "No hay verificaciones registradas.",
799
+ "ui.dashboard.quality.topBlockers": "Bloqueadores principales",
800
+ "ui.dashboard.quality.noFailingProbes": "No hay probes fallando.",
801
+ "ui.dashboard.quality.readinessDetail": "Detalle de readiness",
802
+ "ui.dashboard.quality.kind.phase": "fase",
803
+ "ui.dashboard.quality.kind.release": "release",
804
+ "ui.dashboard.quality.kind.promotion": "promocion",
805
+ "ui.dashboard.quality.kind.readiness": "readiness",
806
+ "ui.dashboard.quality.noBlockers": "Sin bloqueadores",
807
+ "ui.dashboard.quality.activeWaivers": "Dispensas activas",
808
+ "ui.dashboard.quality.waiverSummary": "{scope} · aprobado por {approvedBy}",
809
+ "ui.dashboard.quality.noWaivers": "No hay dispensas activas."
810
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trackops",
3
- "version": "2.0.5",
3
+ "version": "2.1.0",
4
4
  "description": "Local control and coordination system for AI-agent software development",
5
5
  "main": "lib/control.js",
6
6
  "bin": {
@@ -49,10 +49,11 @@
49
49
  "engines": {
50
50
  "node": ">=18"
51
51
  },
52
- "scripts": {
53
- "postinstall": "node scripts/postinstall-locale.js",
54
- "test": "node scripts/smoke-tests.js",
55
- "test:smoke": "node scripts/smoke-tests.js",
52
+ "scripts": {
53
+ "postinstall": "node scripts/postinstall-locale.js",
54
+ "test": "node --test scripts/quality-unit-tests.js && node scripts/smoke-tests.js",
55
+ "test:unit": "node --test scripts/quality-unit-tests.js",
56
+ "test:smoke": "node scripts/smoke-tests.js",
56
57
  "skill:sync-version": "node scripts/sync-skill-version.js",
57
58
  "skill:validate": "node scripts/validate-skill.js",
58
59
  "skill:smoke": "node scripts/skills-marketplace-smoke.js",