@zaip-ai/cli 1.0.7 → 1.0.8

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 (410) hide show
  1. package/README.md +6 -4
  2. package/dist/services/adapters.d.ts +1 -1
  3. package/dist/services/adapters.d.ts.map +1 -1
  4. package/dist/services/adapters.js +15 -5
  5. package/dist/services/adapters.js.map +1 -1
  6. package/dist/services/adapters.test.js +1 -1
  7. package/dist/services/agent-adapters.d.ts +9 -0
  8. package/dist/services/agent-adapters.d.ts.map +1 -1
  9. package/dist/services/agent-adapters.js +38 -3
  10. package/dist/services/agent-adapters.js.map +1 -1
  11. package/dist/services/agent-adapters.test.js +8 -1
  12. package/dist/services/agent-adapters.test.js.map +1 -1
  13. package/dist/services/codex-config-template.d.ts +2 -1
  14. package/dist/services/codex-config-template.d.ts.map +1 -1
  15. package/dist/services/codex-config-template.js +13 -2
  16. package/dist/services/codex-config-template.js.map +1 -1
  17. package/dist/services/codex-rules.d.ts +1 -1
  18. package/dist/services/codex-rules.d.ts.map +1 -1
  19. package/dist/services/codex-rules.js +31 -7
  20. package/dist/services/codex-rules.js.map +1 -1
  21. package/dist/services/codex-subagent-hook-template.d.ts +1 -1
  22. package/dist/services/codex-subagent-hook-template.d.ts.map +1 -1
  23. package/dist/services/codex-subagent-hook-template.js +4 -1
  24. package/dist/services/codex-subagent-hook-template.js.map +1 -1
  25. package/dist/services/doctor.d.ts.map +1 -1
  26. package/dist/services/doctor.js +3 -1
  27. package/dist/services/doctor.js.map +1 -1
  28. package/dist/services/global-codex-config.d.ts +6 -3
  29. package/dist/services/global-codex-config.d.ts.map +1 -1
  30. package/dist/services/global-codex-config.js +82 -13
  31. package/dist/services/global-codex-config.js.map +1 -1
  32. package/dist/services/global-codex-config.test.js +57 -10
  33. package/dist/services/global-codex-config.test.js.map +1 -1
  34. package/dist/services/install-agents-template.d.ts.map +1 -1
  35. package/dist/services/install-agents-template.js +15 -2
  36. package/dist/services/install-agents-template.js.map +1 -1
  37. package/dist/services/logger.js +1 -1
  38. package/dist/services/logger.js.map +1 -1
  39. package/dist/services/logger.test.js +3 -3
  40. package/dist/services/logger.test.js.map +1 -1
  41. package/dist/services/runtime-template.test.js +21 -5
  42. package/dist/services/runtime-template.test.js.map +1 -1
  43. package/dist/services/template-manifest.d.ts.map +1 -1
  44. package/dist/services/template-manifest.js +2 -0
  45. package/dist/services/template-manifest.js.map +1 -1
  46. package/package.json +1 -1
  47. package/templates/.agents/config/agents/catalog.yaml +310 -10
  48. package/templates/.agents/config/clients/codex/agents/zaip-agent-brand-strategist.toml +30 -0
  49. package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +5 -5
  50. package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +1 -1
  51. package/templates/.agents/config/clients/codex/agents/zaip-agent-general-operations.toml +30 -0
  52. package/templates/.agents/config/clients/codex/agents/zaip-agent-governance-compliance.toml +30 -0
  53. package/templates/.agents/config/clients/codex/agents/zaip-agent-growth-strategist.toml +30 -0
  54. package/templates/.agents/config/clients/codex/agents/zaip-agent-marketing-analyst.toml +8 -8
  55. package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +5 -3
  56. package/templates/.agents/config/clients/codex/agents/zaip-agent-sales-specialist.toml +30 -0
  57. package/templates/.agents/config/project.yaml +1 -1
  58. package/templates/.agents/dashboard/.zaip-managed.json +659 -163
  59. package/templates/.agents/dashboard/DATA-DICTIONARY.md +2227 -0
  60. package/templates/.agents/dashboard/README.md +48 -97
  61. package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-Z60df2r-.js +1 -0
  62. package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-Cv-JcoxP.js → DashboardHelpDialog-Cs6dzDmW.js} +294 -109
  63. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-Coc6pA-1.js +1 -0
  64. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-QE1k9yZB.css +1 -0
  65. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-_Pf5DA_A.js +3 -0
  66. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BVlz3DLZ.js +1 -0
  67. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-CaKwQP43.css +1 -0
  68. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-BZ5WdaMN.css +1 -0
  69. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-Cf9ctPVt.js +68 -0
  70. package/templates/.agents/dashboard/apps/frontend/dist/assets/{dashboard-localization-C98LGC-Q.js → dashboard-localization-CLJ0lT9v.js} +1 -1
  71. package/templates/.agents/dashboard/apps/frontend/dist/assets/icons-vendor-DFBuc_qp.js +1 -0
  72. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-8A4DcNXM.js +2 -0
  73. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DK_enB5Z.css +1 -0
  74. package/templates/.agents/dashboard/apps/frontend/dist/assets/react-vendor-CCQOHdVI.js +9 -0
  75. package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-D9-fqq9M.js +1 -0
  76. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-DFY7ZDlu.css +1 -0
  77. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-pC2_0J8x.js +1 -0
  78. package/templates/.agents/dashboard/apps/frontend/dist/index.html +9 -2
  79. package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
  80. package/templates/.agents/dashboard/apps/frontend/src/App.tsx +952 -595
  81. package/templates/.agents/dashboard/apps/frontend/src/AppLoadingBoundary.tsx +48 -0
  82. package/templates/.agents/dashboard/apps/frontend/src/AppLoadingPanels.tsx +2 -0
  83. package/templates/.agents/dashboard/apps/frontend/src/AppOverlays.tsx +247 -0
  84. package/templates/.agents/dashboard/apps/frontend/src/AppRequestGuards.tsx +95 -0
  85. package/templates/.agents/dashboard/apps/frontend/src/AppSetupRoutes.tsx +87 -0
  86. package/templates/.agents/dashboard/apps/frontend/src/CostCalculationGuidePage.tsx +641 -0
  87. package/templates/.agents/dashboard/apps/frontend/src/DashboardAlternateContent.tsx +159 -0
  88. package/templates/.agents/dashboard/apps/frontend/src/DashboardCapabilityNav.tsx +13 -13
  89. package/templates/.agents/dashboard/apps/frontend/src/DashboardGlobalSettings.tsx +56 -0
  90. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +257 -313
  91. package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +149 -0
  92. package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.test.ts +35 -0
  93. package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.tsx +111 -12
  94. package/templates/.agents/dashboard/apps/frontend/src/app-preferences.ts +15 -0
  95. package/templates/.agents/dashboard/apps/frontend/src/app-session-token.ts +20 -0
  96. package/templates/.agents/dashboard/apps/frontend/src/cost-calculation-guide.css +267 -0
  97. package/templates/.agents/dashboard/apps/frontend/src/cost-calculation-guide.test.ts +69 -0
  98. package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +70 -0
  99. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +111 -0
  100. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +432 -13
  101. package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.ts +1 -1
  102. package/templates/.agents/dashboard/apps/frontend/src/main.tsx +1 -0
  103. package/templates/.agents/dashboard/apps/frontend/src/operations-detail-hydration.test.ts +55 -0
  104. package/templates/.agents/dashboard/apps/frontend/src/operations-detail-hydration.ts +36 -0
  105. package/templates/.agents/dashboard/apps/frontend/src/operations-entity-page-projection.test.ts +126 -0
  106. package/templates/.agents/dashboard/apps/frontend/src/operations-entity-page-projection.ts +181 -0
  107. package/templates/.agents/dashboard/apps/frontend/src/operations-period-contract.test.ts +138 -0
  108. package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +105 -0
  109. package/templates/.agents/dashboard/apps/frontend/src/operations-period.test.ts +6 -3
  110. package/templates/.agents/dashboard/apps/frontend/src/operations-period.ts +9 -5
  111. package/templates/.agents/dashboard/apps/frontend/src/overview-status-page.test.ts +24 -0
  112. package/templates/.agents/dashboard/apps/frontend/src/period-transition-overlay.css +44 -0
  113. package/templates/.agents/dashboard/apps/frontend/src/project-settings-model.ts +121 -62
  114. package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +471 -2
  115. package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +84 -17
  116. package/templates/.agents/dashboard/apps/frontend/src/snapshot-banner-semantics.test.ts +44 -0
  117. package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +196 -39
  118. package/templates/.agents/dashboard/apps/frontend/src/snapshot-notice.ts +15 -0
  119. package/templates/.agents/dashboard/apps/frontend/src/sqlite-cost-adapters.ts +26 -0
  120. package/templates/.agents/dashboard/apps/frontend/src/styles.css +14 -2
  121. package/templates/.agents/dashboard/apps/frontend/src/traceability-workspace.css +38 -2
  122. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +187 -0
  123. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +190 -0
  124. package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +121 -0
  125. package/templates/.agents/dashboard/apps/frontend/src/use-app-operations-pages.ts +398 -0
  126. package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-documents.ts +141 -0
  127. package/templates/.agents/dashboard/apps/frontend/src/use-idle-cost-prefetch.ts +45 -0
  128. package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.test.ts +46 -0
  129. package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.ts +37 -0
  130. package/templates/.agents/dashboard/apps/frontend/vite.config.ts +55 -5
  131. package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
  132. package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +47 -6
  133. package/templates/.agents/dashboard/modules/cost-monitor/src/duration-estimate.ts +13 -0
  134. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.test.ts +64 -0
  135. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.tsx +275 -0
  136. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.test.ts +100 -15
  137. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.tsx +131 -40
  138. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostFilters.tsx +137 -19
  139. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostModelsAuditTable.test.ts +2 -0
  140. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostModelsAuditTable.tsx +13 -10
  141. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +303 -0
  142. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.test.ts +226 -6
  143. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +479 -402
  144. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostSummary.tsx +5 -13
  145. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +312 -72
  146. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +373 -321
  147. package/templates/.agents/dashboard/modules/cost-monitor/src/react/MacroCostTable.test.ts +17 -0
  148. package/templates/.agents/dashboard/modules/cost-monitor/src/react/MacroCostTable.tsx +25 -6
  149. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-copy.ts +0 -2
  150. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-helpers.ts +17 -0
  151. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-responsive.css +6 -3
  152. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-row-filters.ts +123 -0
  153. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-summary.ts +8 -3
  154. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-views.ts +32 -0
  155. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor.css +52 -14
  156. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-table-presentation.ts +121 -0
  157. package/templates/.agents/dashboard/modules/cost-monitor/src/react/index.ts +3 -0
  158. package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.test.ts +68 -0
  159. package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +32 -5
  160. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-compact-cost-page.ts +108 -0
  161. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.test.ts +12 -0
  162. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +60 -0
  163. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-run-page.ts +106 -0
  164. package/templates/.agents/dashboard/modules/cost-monitor/src/server/aggregate.test.ts +2 -2
  165. package/templates/.agents/dashboard/modules/cost-monitor/src/server/aggregate.ts +5 -3
  166. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-pricing-fallback.test.ts +53 -0
  167. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.basics.test.ts +34 -0
  168. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.test.ts +168 -137
  169. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.ts +188 -29
  170. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.test.ts +956 -0
  171. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +775 -0
  172. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-terminal-day.test.ts +95 -0
  173. package/templates/.agents/dashboard/modules/cost-monitor/src/server/index.ts +1 -0
  174. package/templates/.agents/dashboard/modules/cost-monitor/src/server/refactor-map-xr9l.json +61 -0
  175. package/templates/.agents/dashboard/modules/cost-monitor/src/task-cost-groups.test.ts +41 -0
  176. package/templates/.agents/dashboard/modules/cost-monitor/src/task-cost-groups.ts +55 -11
  177. package/templates/.agents/dashboard/modules/operations/package.json +2 -1
  178. package/templates/.agents/dashboard/modules/operations/src/contracts.ts +182 -0
  179. package/templates/.agents/dashboard/modules/operations/src/duration-population.test.ts +63 -1
  180. package/templates/.agents/dashboard/modules/operations/src/duration-population.ts +60 -5
  181. package/templates/.agents/dashboard/modules/operations/src/react/EntityDetailsDialog.tsx +14 -3
  182. package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.test.ts +44 -1
  183. package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +325 -18
  184. package/templates/.agents/dashboard/modules/operations/src/react/MacroPlanningDialog.tsx +1 -0
  185. package/templates/.agents/dashboard/modules/operations/src/react/OperationDateFilters.test.ts +9 -5
  186. package/templates/.agents/dashboard/modules/operations/src/react/OperationDateFilters.tsx +2 -2
  187. package/templates/.agents/dashboard/modules/operations/src/react/OperationsMainContent.tsx +168 -0
  188. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.helpers.tsx +95 -6
  189. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +365 -14
  190. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +532 -131
  191. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +314 -358
  192. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageNavigation.tsx +68 -0
  193. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageOverview.tsx +169 -0
  194. package/templates/.agents/dashboard/modules/operations/src/react/PeriodSummaryTable.tsx +51 -8
  195. package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.test.tsx +32 -0
  196. package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.tsx +62 -6
  197. package/templates/.agents/dashboard/modules/operations/src/react/TaskBoard.test.ts +55 -0
  198. package/templates/.agents/dashboard/modules/operations/src/react/TaskBoard.tsx +27 -19
  199. package/templates/.agents/dashboard/modules/operations/src/react/TaskDetailsDialog.tsx +99 -42
  200. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkBoard.priority.test.ts +19 -0
  201. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkBoard.tsx +255 -34
  202. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.test.ts +163 -8
  203. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.tsx +101 -68
  204. package/templates/.agents/dashboard/modules/operations/src/react/conversation-rows.test.ts +72 -1
  205. package/templates/.agents/dashboard/modules/operations/src/react/conversation-rows.ts +78 -16
  206. package/templates/.agents/dashboard/modules/operations/src/react/execution-metrics.ts +6 -4
  207. package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.test.ts +50 -1
  208. package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.tsx +143 -9
  209. package/templates/.agents/dashboard/modules/operations/src/react/export/export-layout.test.ts +29 -4
  210. package/templates/.agents/dashboard/modules/operations/src/react/macro-planning-dialog-content.css +49 -0
  211. package/templates/.agents/dashboard/modules/operations/src/react/macro-planning-dialog.css +93 -50
  212. package/templates/.agents/dashboard/modules/operations/src/react/manual-work-priority.test.ts +82 -0
  213. package/templates/.agents/dashboard/modules/operations/src/react/operation-date-range.test.ts +29 -2
  214. package/templates/.agents/dashboard/modules/operations/src/react/operation-date-range.ts +22 -1
  215. package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.test.ts +77 -4
  216. package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.ts +65 -5
  217. package/templates/.agents/dashboard/modules/operations/src/react/operations-coverage-toast.test.ts +54 -0
  218. package/templates/.agents/dashboard/modules/operations/src/react/operations-global-filters.test.ts +19 -0
  219. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +149 -12
  220. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +27 -0
  221. package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +136 -0
  222. package/templates/.agents/dashboard/modules/operations/src/react/operations-period-scope.test.ts +160 -0
  223. package/templates/.agents/dashboard/modules/operations/src/react/operations-period-scope.ts +47 -0
  224. package/templates/.agents/dashboard/modules/operations/src/react/operations-query.ts +10 -0
  225. package/templates/.agents/dashboard/modules/operations/src/react/operations-responsive.css +3 -0
  226. package/templates/.agents/dashboard/modules/operations/src/react/operations-view-labels.ts +28 -0
  227. package/templates/.agents/dashboard/modules/operations/src/react/operations-view-order.test.ts +24 -7
  228. package/templates/.agents/dashboard/modules/operations/src/react/operations.css +42 -0
  229. package/templates/.agents/dashboard/modules/operations/src/react/period-summary-population.test.ts +54 -0
  230. package/templates/.agents/dashboard/modules/operations/src/react/period-summary-population.ts +32 -0
  231. package/templates/.agents/dashboard/modules/operations/src/react/period-summary.test.ts +165 -6
  232. package/templates/.agents/dashboard/modules/operations/src/react/period-summary.ts +148 -6
  233. package/templates/.agents/dashboard/modules/operations/src/react/popup-localization.test.ts +1 -1
  234. package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.css +132 -0
  235. package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.css.test.ts +13 -0
  236. package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.header.test.ts +16 -0
  237. package/templates/.agents/dashboard/modules/operations/src/react/use-infinite-column.ts +11 -5
  238. package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.test.ts +5 -3
  239. package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.ts +4 -83
  240. package/templates/.agents/dashboard/modules/operations/src/server/build-operations-projection.test.ts +291 -15
  241. package/templates/.agents/dashboard/modules/operations/src/server/build-operations-projection.ts +182 -472
  242. package/templates/.agents/dashboard/modules/operations/src/server/canonical-compat.test.ts +40 -0
  243. package/templates/.agents/dashboard/modules/operations/src/server/canonical-compat.ts +19 -6
  244. package/templates/.agents/dashboard/modules/operations/src/server/canonical-run-projection.ts +31 -6
  245. package/templates/.agents/dashboard/modules/operations/src/server/daily-duration-projection.ts +220 -0
  246. package/templates/.agents/dashboard/modules/operations/src/server/execution-duration-projection.ts +28 -0
  247. package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.test.ts +27 -2
  248. package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.ts +22 -13
  249. package/templates/.agents/dashboard/modules/operations/src/server/filter.test.ts +3 -3
  250. package/templates/.agents/dashboard/modules/operations/src/server/filter.ts +7 -2
  251. package/templates/.agents/dashboard/modules/operations/src/server/index.ts +3 -0
  252. package/templates/.agents/dashboard/modules/operations/src/server/macro.ts +3 -12
  253. package/templates/.agents/dashboard/modules/operations/src/server/manifest-usage.ts +65 -0
  254. package/templates/.agents/dashboard/modules/operations/src/server/operations-projection-aggregates.ts +297 -0
  255. package/templates/.agents/dashboard/modules/operations/src/server/quick-daily-operations-projection.ts +324 -0
  256. package/templates/.agents/dashboard/modules/operations/src/server/quick-operations-projection.test.ts +505 -0
  257. package/templates/.agents/dashboard/modules/operations/src/server/quick-operations-projection.ts +609 -0
  258. package/templates/.agents/dashboard/modules/operations/src/server/runs.ts +18 -19
  259. package/templates/.agents/dashboard/modules/operations/src/work-board-model.ts +76 -0
  260. package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
  261. package/templates/.agents/dashboard/modules/traceability/src/server/build-task-trace.ts +3 -1
  262. package/templates/.agents/dashboard/packages/branding/package.json +1 -1
  263. package/templates/.agents/dashboard/packages/branding/src/index.ts +1 -1
  264. package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
  265. package/templates/.agents/dashboard/packages/contracts/src/index.ts +1 -0
  266. package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
  267. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +1756 -0
  268. package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +1608 -0
  269. package/templates/.agents/dashboard/packages/local-runtime/package.json +8 -3
  270. package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-dashboard.mjs +12 -0
  271. package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +83 -0
  272. package/templates/.agents/dashboard/packages/local-runtime/scripts/rebuild-sqlite-read-model.mjs +28 -0
  273. package/templates/.agents/dashboard/packages/local-runtime/scripts/test-sqlite-read-model.mjs +262 -0
  274. package/templates/.agents/dashboard/packages/local-runtime/scripts/test-unix-launchers.mjs +41 -0
  275. package/templates/.agents/dashboard/packages/local-runtime/scripts/validate-sqlite-read-model.mjs +105 -0
  276. package/templates/.agents/dashboard/packages/local-runtime/server.mjs +1643 -107
  277. package/templates/.agents/dashboard/packages/local-runtime/src/agent-adapter-sync.ts +30 -0
  278. package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.test.ts +3 -2
  279. package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.ts +5 -0
  280. package/templates/.agents/dashboard/packages/local-runtime/src/manifest-runs.ts +72 -33
  281. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +335 -4
  282. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +392 -1
  283. package/templates/.agents/dashboard/packages/local-runtime/src/runtime.mjs +5 -5
  284. package/templates/.agents/dashboard/packages/local-runtime/src/server-board.test.ts +71 -0
  285. package/templates/.agents/dashboard/packages/local-runtime/src/server-board.ts +179 -0
  286. package/templates/.agents/dashboard/packages/local-runtime/src/server-cross-layer-parity.test.ts +245 -0
  287. package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models-route.ts +64 -0
  288. package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models.test.ts +204 -0
  289. package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models.ts +194 -0
  290. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-pages.test.ts +163 -0
  291. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-pages.ts +354 -0
  292. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-runs-route.test.ts +74 -0
  293. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-runs-route.ts +113 -0
  294. package/templates/.agents/dashboard/packages/local-runtime/src/server-overview.test.ts +68 -0
  295. package/templates/.agents/dashboard/packages/local-runtime/src/server-period.ts +47 -0
  296. package/templates/.agents/dashboard/packages/local-runtime/src/server-projections.ts +483 -0
  297. package/templates/.agents/dashboard/packages/local-runtime/src/server-settings.test.ts +5 -2
  298. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot.test.ts +163 -84
  299. package/templates/.agents/dashboard/packages/local-runtime/src/server-workspace.ts +145 -0
  300. package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +551 -266
  301. package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +1145 -308
  302. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.test.ts +53 -0
  303. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.ts +708 -0
  304. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +2232 -0
  305. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +6151 -0
  306. package/templates/.agents/dashboard/packages/local-runtime/src/work-priority-contract.test.ts +33 -0
  307. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-history.mjs +41 -0
  308. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-processes.mjs +210 -0
  309. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +437 -190
  310. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +299 -24
  311. package/templates/.agents/dashboard/packages/ui/package.json +1 -1
  312. package/templates/.agents/dashboard/packages/windows-launcher/LauncherVerificationBehaviorTests.cs +206 -0
  313. package/templates/.agents/dashboard/packages/windows-launcher/Program.cs +95 -8
  314. package/templates/.agents/dashboard/packages/windows-launcher/build-dashboard-launcher.ps1 +2 -2
  315. package/templates/.agents/dashboard/packages/windows-launcher/run-launcher-verification-tests.ps1 +22 -0
  316. package/templates/.agents/dashboard/read-model.dbml +2201 -0
  317. package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
  318. package/templates/.agents/dashboard/tests/e2e/playwright.config.ts +1 -1
  319. package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +214 -41
  320. package/templates/.agents/dashboard/work-priority.json +34 -0
  321. package/templates/.agents/dashboard/zaip-dashboard-linux.sh +45 -0
  322. package/templates/.agents/dashboard/zaip-dashboard-mac.command +3 -0
  323. package/templates/.agents/dashboard/zaip-dashboard-windows.exe +0 -0
  324. package/templates/.agents/design/.zaip-managed.json +3 -3
  325. package/templates/.agents/design/apps/catalog/package.json +1 -1
  326. package/templates/.agents/design/packages/local-runtime/package.json +1 -1
  327. package/templates/.agents/requirements/autonomous-assurance.md +1 -1
  328. package/templates/.agents/requirements/comparative-audit.md +1 -1
  329. package/templates/.agents/requirements/context-engine.md +1 -1
  330. package/templates/.agents/requirements/cost-observability.md +1 -1
  331. package/templates/.agents/requirements/dashboard-launch.md +24 -0
  332. package/templates/.agents/requirements/data-export.md +1 -1
  333. package/templates/.agents/requirements/design-system.md +1 -1
  334. package/templates/.agents/requirements/execution-engine.md +1 -1
  335. package/templates/.agents/requirements/kanban-dashboard.md +4 -3
  336. package/templates/.agents/requirements/model-orchestration.md +1 -1
  337. package/templates/.agents/requirements/public-distribution.md +9 -6
  338. package/templates/.agents/requirements/software-architecture.md +1 -1
  339. package/templates/.agents/requirements/strategic-improvements.md +1 -1
  340. package/templates/.agents/requirements/work-lifecycle.md +9 -3
  341. package/templates/.agents/requirements/zaip-strategic-95.md +4 -4
  342. package/templates/.agents/rules/autonomy-decision.md +15 -0
  343. package/templates/.agents/rules/core.md +1 -1
  344. package/templates/.agents/rules/run-lifecycle-closure.md +1 -1
  345. package/templates/.agents/rules/specialist-routing.md +19 -0
  346. package/templates/.agents/rules/workflow.md +1 -1
  347. package/templates/.agents/runtime/VERSION +1 -1
  348. package/templates/.agents/runtime/bin/zaip.mjs +114 -64
  349. package/templates/.agents/runtime/checksums.sha256 +6 -4
  350. package/templates/.agents/runtime/manifest.json +3 -1
  351. package/templates/.agents/runtime/pnpm-lock.sha256 +1 -0
  352. package/templates/.agents/runtime/provenance.json +11 -0
  353. package/templates/.agents/runtime/sbom.cdx.json +1929 -39
  354. package/templates/.agents/skills/zaip-aios/SKILL.md +1 -1
  355. package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +15 -0
  356. package/templates/.agents/skills/zaip-skill-brand-governance/agents/openai.yaml +4 -0
  357. package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-standards.md +30 -0
  358. package/templates/.agents/skills/zaip-skill-dashboard-sqlite/SKILL.md +25 -0
  359. package/templates/.agents/skills/zaip-skill-dashboard-sqlite/agents/openai.yaml +4 -0
  360. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/SKILL.md +18 -0
  361. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/agents/openai.yaml +6 -0
  362. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/ready-queue-fence.mjs +71 -0
  363. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/ready-queue-fence.test.mjs +60 -0
  364. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/scheduled-ready-queue-contract.test.mjs +111 -0
  365. package/templates/.agents/skills/zaip-skill-execution/SKILL.md +2 -2
  366. package/templates/.agents/skills/zaip-skill-frontend-launcher/references/launcher-contract.md +3 -1
  367. package/templates/.agents/skills/zaip-skill-general-operations/SKILL.md +12 -0
  368. package/templates/.agents/skills/zaip-skill-general-operations/agents/openai.yaml +4 -0
  369. package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +9 -7
  370. package/templates/.agents/skills/zaip-skill-github-deploy/agents/openai.yaml +2 -2
  371. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +11 -38
  372. package/templates/.agents/skills/zaip-skill-governance-compliance/SKILL.md +12 -0
  373. package/templates/.agents/skills/zaip-skill-governance-compliance/agents/openai.yaml +4 -0
  374. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +15 -0
  375. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/agents/openai.yaml +4 -0
  376. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/references/growth-revops-framework.md +25 -0
  377. package/templates/.agents/skills/zaip-skill-instalar-agendamento/SKILL.md +17 -0
  378. package/templates/.agents/skills/zaip-skill-instalar-agendamento/agents/openai.yaml +6 -0
  379. package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +3 -3
  380. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-local-telemetry.mjs +76 -27
  381. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.mjs +128 -24
  382. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.test.mjs +122 -4
  383. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.mjs +66 -19
  384. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.test.mjs +193 -7
  385. package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +14 -0
  386. package/templates/.agents/skills/zaip-skill-sales-methodology/agents/openai.yaml +4 -0
  387. package/templates/.agents/skills/zaip-skill-sales-methodology/references/sales-process-framework.md +77 -0
  388. package/templates/.agents/skills/zaip-skill-setup/SKILL.md +5 -0
  389. package/templates/.agents/skills/zaip-skill-sqlite-read-model/SKILL.md +96 -0
  390. package/templates/.agents/skills/zaip-skill-sqlite-read-model/agents/openai.yaml +4 -0
  391. package/templates/.agents/skills/zaip-skill-sqlite-read-model/scripts/ensure-node.mjs +18 -0
  392. package/templates/.agents/zaip-aios/INDEX.md +1 -0
  393. package/templates/.agents/zaip-aios/README.md +37 -8
  394. package/templates/.agents/zaip-aios/VERSION +1 -1
  395. package/templates/.agents/zaip-aios/guides/09-agentes-e-squads.md +43 -6
  396. package/templates/.agents/zaip-aios/guides/10-seguranca.md +21 -7
  397. package/templates/.agents/zaip-aios/guides/17-como-o-custo-e-calculado.md +32 -0
  398. package/templates/template-manifest.json +945 -214
  399. package/templates/.agents/dashboard/apps/frontend/dist/assets/AgentCatalogSettingsPage-CLYIi7Vo.js +0 -1
  400. package/templates/.agents/dashboard/apps/frontend/dist/assets/AgentCatalogSettingsPage-DTDNVQGX.css +0 -1
  401. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-CzEggcRb.js +0 -1
  402. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-05YKn6Z4.js +0 -3
  403. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-YO3yqtgV.css +0 -1
  404. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-8AzCnl3a.js +0 -77
  405. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DdBYQ_8D.css +0 -1
  406. package/templates/.agents/dashboard/apps/frontend/src/AgentCatalogSettingsPage.tsx +0 -617
  407. package/templates/.agents/dashboard/apps/frontend/src/agent-catalog-settings-page.css +0 -660
  408. package/templates/.agents/dashboard/apps/frontend/src/agent-catalog-settings.test.ts +0 -249
  409. package/templates/.agents/dashboard/dashboard.config.json +0 -4
  410. package/templates/.agents/dashboard/zaip-dashboard.exe +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/dashboard-e2e",
3
- "version": "1.0.0",
3
+ "version": "1.0.8",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -18,7 +18,7 @@ export default defineConfig({
18
18
  },
19
19
  projects: [{ name: "chromium", use: { ...devices["Desktop Chrome"] } }],
20
20
  webServer: {
21
- command: "node .agents/dashboard/packages/local-runtime/dist/server.js",
21
+ command: "node .agents/dashboard/packages/local-runtime/dist/server.cjs",
22
22
  cwd: workspaceRoot,
23
23
  url: `${baseURL}/api/v2/health`,
24
24
  reuseExistingServer: false,
@@ -85,12 +85,19 @@ test("exports the active Cost Monitor, Operations table, and Kanban view through
85
85
  .getByRole("textbox", { name: "Busca" });
86
86
  await globalSearch.fill("EXEC-");
87
87
  await page.getByRole("button", { exact: true, name: "Execuções" }).click();
88
- await expect(page.getByRole("columnheader", { name: /Execução/ })).toBeVisible();
88
+ const executionRows = page.locator(".ui-table-row-action");
89
+ if ((await executionRows.count()) === 0) {
90
+ await expect(page.locator(".ui-empty")).toBeVisible();
91
+ } else {
92
+ await expect(page.getByRole("columnheader", { name: /Execução/ })).toBeVisible();
93
+ }
89
94
  await expect(page.locator(".export-progress")).toContainText(/\d+%/);
90
- await page.locator(".ui-table-row-action").first().click();
91
- const executionDialog = page.getByRole("dialog", { name: "Detalhes de Execução ZAIP" });
92
- await expect(executionDialog).toBeVisible();
93
- await executionDialog.getByRole("button", { name: "Fechar" }).click();
95
+ if ((await executionRows.count()) > 0) {
96
+ await executionRows.first().click();
97
+ const executionDialog = page.getByRole("dialog", { name: "Detalhes de Execução ZAIP" });
98
+ await expect(executionDialog).toBeVisible();
99
+ await executionDialog.getByRole("button", { name: "Fechar" }).click();
100
+ }
94
101
  await page.evaluate(() => {
95
102
  (
96
103
  window as Window & {
@@ -229,7 +236,9 @@ test("renders the modern read-only dashboard and meets accessibility gates", asy
229
236
  const period = globalControls.getByRole("combobox", { name: "Período" });
230
237
  await expect(startDate).toHaveValue(/^\d{4}-\d{2}-\d{2}$/);
231
238
  await expect(endDate).toHaveValue(/^\d{4}-\d{2}-\d{2}$/);
232
- await expect(period).toHaveValue("this-month");
239
+ await expect(period).toHaveValue("all");
240
+ await expect(startDate).toBeDisabled();
241
+ await expect(endDate).toBeDisabled();
233
242
  const initialStart = await startDate.inputValue();
234
243
  const today = await endDate.inputValue();
235
244
  await expect(page.getByLabel("Data inicial nos filtros")).toHaveValue(initialStart);
@@ -251,9 +260,9 @@ test("renders the modern read-only dashboard and meets accessibility gates", asy
251
260
  await expect(period).toHaveValue("custom");
252
261
  await period.selectOption("all");
253
262
  await expect(period).toHaveValue("all");
254
- await expect(startDate).toHaveValue("");
263
+ await expect(startDate).toHaveValue(/^\d{4}-\d{2}-\d{2}$/);
255
264
  await expect(startDate).toBeDisabled();
256
- await expect(endDate).toHaveValue("");
265
+ await expect(endDate).toHaveValue(/^\d{4}-\d{2}-\d{2}$/);
257
266
  await expect(endDate).toBeDisabled();
258
267
 
259
268
  await page.getByLabel("Risco").selectOption("critical");
@@ -261,17 +270,34 @@ test("renders the modern read-only dashboard and meets accessibility gates", asy
261
270
  page.locator(".operations-task-card .operations-risk:not(.is-critical)"),
262
271
  ).toHaveCount(0);
263
272
  await expect(page.locator(".operations-risk.is-critical").first()).toBeVisible();
273
+ const filteredTaskTotal = Number(
274
+ await page
275
+ .getByRole("button", { name: /Tarefas:/ })
276
+ .first()
277
+ .locator("strong")
278
+ .textContent(),
279
+ );
280
+ const filteredStatusCounts = (
281
+ await page.locator(".operations-panel-wide .operations-legend-value strong").allTextContents()
282
+ ).map(Number);
283
+ const filteredRiskCounts = (
284
+ await page.locator(".operations-panel-risk .operations-legend-value strong").allTextContents()
285
+ ).map(Number);
286
+ expect(filteredStatusCounts.reduce((sum, value) => sum + value, 0)).toBe(filteredTaskTotal);
287
+ expect(filteredRiskCounts.reduce((sum, value) => sum + value, 0)).toBe(filteredTaskTotal);
264
288
  await page.getByRole("button", { name: "Limpar filtros" }).click();
265
289
  await expect(page.getByRole("dialog", { name: "Atualizar dashboard" })).toHaveCount(0);
266
290
  await expect(startDate).toHaveValue(initialStart);
267
- await expect(period).toHaveValue("this-month");
291
+ await expect(period).toHaveValue("all");
292
+ await expect(startDate).toBeDisabled();
293
+ await expect(endDate).toBeDisabled();
268
294
  await expect(page.getByLabel("Risco")).toHaveValue("");
269
295
 
270
296
  const results = await new AxeBuilder({ page }).analyze();
271
297
  expect(results.violations).toEqual([]);
272
298
  });
273
299
 
274
- test("loads one overview first and one full Operations projection only after selection", async ({
300
+ test("loads a quick Operations summary and never hydrates full detail on selection", async ({
275
301
  page,
276
302
  }) => {
277
303
  const operationsRequests: string[] = [];
@@ -282,22 +308,60 @@ test("loads one overview first and one full Operations projection only after sel
282
308
  });
283
309
 
284
310
  await openDashboard(page);
285
- expect(operationsRequests).toHaveLength(1);
286
- expect(operationsRequests[0]).toContain("scope=overview");
311
+ expect(operationsRequests.some((url) => url.includes("scope=quick"))).toBe(true);
312
+ expect(operationsRequests.some((url) => url.includes("scope=detail"))).toBe(false);
313
+ expect(operationsRequests.some((url) => url.includes("/snapshot"))).toBe(false);
314
+
315
+ const requestsBeforeMacroSelection = operationsRequests.length;
316
+ await page.getByRole("button", { name: /^SPECs:/ }).click();
317
+ await expect(page.getByRole("heading", { name: "Status das SPECs" })).toBeVisible();
318
+ await expect(page.getByRole("heading", { name: "Top 5 SPECs" })).toBeVisible();
319
+ await expect(page.locator(".operations-run-bar")).toHaveCount(5);
320
+ expect(
321
+ (await page.locator(".operations-panel-wide .operations-legend-value strong").allTextContents())
322
+ .map(Number)
323
+ .reduce((sum, value) => sum + value, 0),
324
+ ).toBe(32);
325
+ expect(
326
+ (await page.locator(".operations-panel-risk .operations-legend-value strong").allTextContents())
327
+ .map(Number)
328
+ .reduce((sum, value) => sum + value, 0),
329
+ ).toBe(32);
330
+ await page.getByRole("button", { name: /^PRDs:/ }).click();
331
+ await expect(page.getByRole("heading", { name: "Status das PRDs" })).toBeVisible();
332
+ await expect(page.getByRole("heading", { name: "Top 5 PRDs" })).toBeVisible();
333
+ await expect(page.locator(".operations-run-bar")).toHaveCount(5);
334
+ expect(
335
+ (await page.locator(".operations-panel-wide .operations-legend-value strong").allTextContents())
336
+ .map(Number)
337
+ .reduce((sum, value) => sum + value, 0),
338
+ ).toBe(12);
339
+ expect(
340
+ (await page.locator(".operations-panel-risk .operations-legend-value strong").allTextContents())
341
+ .map(Number)
342
+ .reduce((sum, value) => sum + value, 0),
343
+ ).toBe(12);
344
+ expect(operationsRequests).toHaveLength(requestsBeforeMacroSelection);
287
345
 
288
346
  await selectOperations(page);
289
347
  await expect(page.getByLabel("Kanban de trabalho")).toBeVisible();
290
- expect(operationsRequests).toHaveLength(2);
291
- expect(operationsRequests[1]).not.toContain("scope=overview");
348
+ expect(operationsRequests.some((url) => url.includes("scope=detail"))).toBe(false);
349
+ expect(operationsRequests.some((url) => url.includes("/snapshot"))).toBe(false);
292
350
 
293
351
  await page
294
352
  .getByRole("navigation", { name: "Áreas do dashboard" })
295
353
  .getByRole("button", { name: /Operação/ })
296
354
  .click();
297
- expect(operationsRequests).toHaveLength(2);
355
+ expect(operationsRequests.some((url) => url.includes("scope=detail"))).toBe(false);
298
356
  });
299
357
 
300
358
  test("integrates the detailed cost monitor into the main dashboard", async ({ page }) => {
359
+ const costRequests: string[] = [];
360
+ const pageErrors: string[] = [];
361
+ page.on("request", (request) => {
362
+ if (request.url().includes("/api/v2/")) costRequests.push(request.url());
363
+ });
364
+ page.on("pageerror", (error) => pageErrors.push(error.message));
301
365
  await openDashboard(page);
302
366
  const capabilityNav = page.getByRole("navigation", { name: "Áreas do dashboard" });
303
367
  const globalControls = page.locator(".dashboard-global-controls");
@@ -333,9 +397,9 @@ test("integrates the detailed cost monitor into the main dashboard", async ({ pa
333
397
  const modelHeader = page.getByRole("columnheader", { name: /Modelo/ });
334
398
  if ((await modelHeader.count()) > 0) {
335
399
  await expect(modelHeader).toBeVisible();
336
- await expect(page.getByRole("columnheader", { name: /Invocações de Agentes/ })).toBeVisible();
337
- await expect(page.getByRole("columnheader", { name: /Total de tokens/ })).toBeVisible();
338
- await expect(page.getByRole("columnheader", { name: /Custo Final atual/ })).toBeVisible();
400
+ await expect(page.getByRole("columnheader", { name: /^Invocações / })).toBeVisible();
401
+ await expect(page.getByRole("columnheader", { name: /^Tokens / })).toBeVisible();
402
+ await expect(page.getByRole("columnheader", { name: /^Custo / })).toBeVisible();
339
403
  } else {
340
404
  await expect(page.locator(".cost-content-models .ui-empty")).toBeVisible();
341
405
  }
@@ -346,10 +410,41 @@ test("integrates the detailed cost monitor into the main dashboard", async ({ pa
346
410
  await expect(page.getByRole("button", { name: "Zaip Agentes" })).toBeVisible();
347
411
  await expect(page.getByRole("button", { exact: true, name: "Conversas" })).toBeVisible();
348
412
 
413
+ for (const [tab, kind] of [
414
+ ["Execuções", "executions"],
415
+ ["Conversas", "conversations"],
416
+ ["Tarefas", "tasks"],
417
+ ["SPEC", "specs"],
418
+ ["PRD", "prds"],
419
+ ] as const) {
420
+ const response = page.waitForResponse(
421
+ (candidate) =>
422
+ candidate.url().includes("/api/v2/sqlite-views?") &&
423
+ candidate.url().includes(`view=cost_monitor_${kind}`),
424
+ );
425
+ await page.locator(".cost-tabs").getByRole("button", { exact: true, name: tab }).click();
426
+ expect((await response).status()).toBe(200);
427
+ await expect(
428
+ page
429
+ .getByRole("columnheader", { name: /Tempo observado/ })
430
+ .or(page.locator(".ui-empty")),
431
+ ).toBeVisible();
432
+ await expect(
433
+ page.getByRole("navigation", { name: "Paginação dos dados agregados" }),
434
+ ).toBeVisible();
435
+ expect(pageErrors).toEqual([]);
436
+ await expect(page.locator(".cost-tabs")).toBeVisible();
437
+ }
438
+ expect(costRequests.some((url) => url.includes("scope=detail"))).toBe(false);
439
+
349
440
  await capabilityNav.getByRole("button", { name: /Operação/ }).click();
350
441
  await page.getByRole("button", { exact: true, name: "Invocações de agentes" }).click();
351
442
  await page.getByRole("button", { exact: true, name: "Execuções" }).click();
352
- await expect(page.getByRole("columnheader", { name: /Execução/ })).toBeVisible();
443
+ await expect(
444
+ page
445
+ .getByRole("columnheader", { name: /Execução/ })
446
+ .or(page.getByRole("status").filter({ hasText: /Aguardando linhas canônicas de execuções/ })),
447
+ ).toBeVisible();
353
448
  await page.getByRole("button", { exact: true, name: "Invocações de agentes" }).click();
354
449
 
355
450
  await page.getByRole("button", { name: "PT-BR" }).click();
@@ -362,11 +457,27 @@ test("integrates the detailed cost monitor into the main dashboard", async ({ pa
362
457
  await expect(runRow).toBeVisible();
363
458
  const initialRunCount = await runRows.count();
364
459
  const englishStartDate = globalControls.getByLabel("Start date");
460
+ const narrowedResponse = page.waitForResponse(
461
+ (candidate) =>
462
+ candidate.status() === 200 &&
463
+ candidate.url().includes("/api/v2/sqlite-views?") &&
464
+ candidate.url().includes("view=operations_agent_invocations"),
465
+ );
365
466
  await englishStartDate.fill(initialEnd);
467
+ await narrowedResponse;
366
468
  await expect(englishStartDate).toHaveValue(initialEnd);
367
469
  expect(await runRows.count()).toBeLessThanOrEqual(initialRunCount);
470
+ const restoredResponse = page.waitForResponse(
471
+ (candidate) =>
472
+ candidate.status() === 200 &&
473
+ candidate.url().includes("/api/v2/sqlite-views?") &&
474
+ candidate.url().includes("view=operations_agent_invocations"),
475
+ );
368
476
  await englishStartDate.fill(initialStart);
369
- await page.locator(".ui-table-row-action").first().click();
477
+ const restoredPage = await restoredResponse;
478
+ expect(((await restoredPage.json()) as { rows: unknown[] }).rows.length).toBeGreaterThan(0);
479
+ await expect(runRows.first()).toBeVisible();
480
+ await runRows.first().click();
370
481
  const runDetails = page.getByRole("dialog", { name: "Details for Agent Invocation" });
371
482
  await expect(runDetails).toBeVisible();
372
483
  await runDetails.getByRole("button", { name: "Close" }).click();
@@ -406,9 +517,10 @@ test("embeds traceability and keeps global settings and help available", async (
406
517
 
407
518
  await page.getByRole("button", { name: "Configurações" }).click();
408
519
  await page.getByLabel("Moeda").selectOption("USD");
409
- await page.getByRole("button", { name: "Abrir ajuda e guides" }).click();
520
+ await page.getByRole("button", { name: "Central de Ajuda" }).click();
410
521
  await expect(page.getByRole("dialog", { name: "Ajuda do ZAIP-AIOS" })).toBeVisible();
411
522
  await expect(page.getByRole("button", { name: "README · ZAIP-AIOS" })).toBeVisible();
523
+ await expect(page.getByRole("button", { name: "Como o custo é calculado" })).toBeVisible();
412
524
  await expect(page.getByText("Aprofundar no framework")).toBeVisible();
413
525
  const helpDialog = page.getByRole("dialog", { name: "Ajuda do ZAIP-AIOS" });
414
526
  await expect(
@@ -426,6 +538,7 @@ test("groups macro work in All and reveals descendant Tasks only in Tasks", asyn
426
538
  await openDashboard(page);
427
539
  await selectOperations(page);
428
540
  const board = page.getByLabel("Kanban de trabalho");
541
+ await expect(board.locator(".operations-task-card").first()).toBeVisible();
429
542
  const allItemCount = await boardItemCount(board);
430
543
 
431
544
  await page.getByRole("button", { exact: true, name: "Tarefas" }).click();
@@ -437,23 +550,75 @@ test("groups macro work in All and reveals descendant Tasks only in Tasks", asyn
437
550
  .locator(".operations-work-card")
438
551
  .filter({ has: page.locator(".operations-work-kind.is-spec") })
439
552
  .first();
440
- await expect(spec).toBeVisible();
441
- await expect(spec.locator(".operations-work-card-counts")).toHaveText(/Tasks \d+\/\d+/);
442
- await spec.click();
443
- await expect(page.getByRole("dialog", { name: "Detalhes do SPEC" })).toBeVisible();
444
- await page.getByRole("button", { name: "Fechar" }).click();
553
+ if ((await spec.count()) === 0) {
554
+ await expect(page.getByLabel("Kanban de trabalho").locator(".operations-task-card")).toHaveCount(0);
555
+ } else {
556
+ await expect(spec).toBeVisible();
557
+ await expect(spec.locator(".operations-work-card-counts")).toHaveText(/Tasks \d+\/\d+/);
558
+ await spec.locator(".operations-work-card-open").click();
559
+ await expect(page.getByRole("dialog", { name: "Detalhes do SPEC" })).toBeVisible();
560
+ await page.getByRole("button", { name: "Fechar" }).click();
561
+ }
445
562
 
446
563
  await page.getByRole("button", { exact: true, name: "PRDs" }).click();
447
564
  const prd = page
448
565
  .locator(".operations-work-card")
449
566
  .filter({ has: page.locator(".operations-work-kind.is-prd") })
450
567
  .first();
451
- await expect(prd).toBeVisible();
452
- await expect(prd.locator(".operations-work-card-counts")).toHaveText(
453
- /SPECs \d+\/\d+ · Tasks \d+\/\d+/,
454
- );
455
- await prd.click();
456
- await expect(page.getByRole("dialog", { name: "Detalhes do PRD" })).toBeVisible();
568
+ if ((await prd.count()) === 0) {
569
+ await expect(page.getByLabel("Kanban de trabalho").locator(".operations-task-card")).toHaveCount(0);
570
+ } else {
571
+ await expect(prd).toBeVisible();
572
+ await expect(prd.locator(".operations-work-card-counts")).toHaveText(
573
+ /SPECs \d+\/\d+ · Tasks \d+\/\d+/,
574
+ );
575
+ await prd.locator(".operations-work-card-open").click();
576
+ await expect(page.getByRole("dialog", { name: "Detalhes do PRD" })).toBeVisible();
577
+ }
578
+ });
579
+
580
+ test("loads monthly overview quickly and keeps PRD and SPEC chart totals reconciled", async ({
581
+ page,
582
+ }) => {
583
+ const openedAt = Date.now();
584
+ await openDashboard(page);
585
+ expect(Date.now() - openedAt).toBeLessThan(3_000);
586
+
587
+ const period = page.getByRole("combobox", { name: /Per/ }).first();
588
+ for (const preset of ["last-month", "this-month"] as const) {
589
+ const response = page.waitForResponse(
590
+ (candidate) =>
591
+ candidate.status() === 200 &&
592
+ candidate.url().includes("/api/v2/operations") &&
593
+ candidate.url().includes("scope=quick"),
594
+ );
595
+ const selectedAt = Date.now();
596
+ await period.selectOption(preset);
597
+ await response;
598
+ expect(Date.now() - selectedAt).toBeLessThan(3_000);
599
+
600
+ for (const kind of ["SPECs", "PRDs"] as const) {
601
+ const selector = page.locator(".operations-kpi.is-selectable").filter({ hasText: kind });
602
+ const cardCount = Number(await selector.locator("strong").textContent());
603
+ await selector.click();
604
+
605
+ const panels = page.locator(".operations-chart-grid > .operations-panel");
606
+ const donutCount = Number(
607
+ await panels.nth(1).locator(".operations-donut-wrap strong").textContent(),
608
+ );
609
+ const statusCounts = await panels
610
+ .nth(0)
611
+ .locator(".operations-legend-value strong")
612
+ .allTextContents();
613
+ const classificationCounts = await panels
614
+ .nth(1)
615
+ .locator(".operations-legend-value strong")
616
+ .allTextContents();
617
+ expect(donutCount).toBe(cardCount);
618
+ expect(statusCounts.reduce((sum, value) => sum + Number(value), 0)).toBe(cardCount);
619
+ expect(classificationCounts.reduce((sum, value) => sum + Number(value), 0)).toBe(cardCount);
620
+ }
621
+ }
457
622
  });
458
623
 
459
624
  async function boardItemCount(board: Locator): Promise<number> {
@@ -475,7 +640,12 @@ test("opens entity-specific details for changes decisions executions and runs",
475
640
 
476
641
  for (const [tab, dialogName, detailLabel] of cases) {
477
642
  await page.getByRole("button", { exact: true, name: tab }).click();
478
- await page.locator(".ui-table-row-action").first().click();
643
+ const rows = page.locator(".ui-table-row-action");
644
+ if ((await rows.count()) === 0) {
645
+ await expect(page.locator(".ui-empty")).toBeVisible();
646
+ continue;
647
+ }
648
+ await rows.first().click();
479
649
  const dialog = page.getByRole("dialog", { name: dialogName });
480
650
  await expect(dialog).toBeVisible();
481
651
  await expect(dialog.getByText(detailLabel, { exact: true })).toBeVisible();
@@ -484,6 +654,16 @@ test("opens entity-specific details for changes decisions executions and runs",
484
654
  }
485
655
  });
486
656
 
657
+ test("keeps aggregate KPIs visible without an obsolete coverage overlay", async ({ page }) => {
658
+ await openDashboard(page);
659
+
660
+ await expect(page.getByText(/Agregados do manifesto/)).toHaveCount(0);
661
+ await expect(page.locator(".operations-coverage-toast")).toHaveCount(0);
662
+ await expect(page.getByRole("article", { name: /Tempo total de execu/ })).toBeVisible();
663
+ await expect(page.getByRole("article", { name: /Tokens gastos/ })).toBeVisible();
664
+ await expect(page.getByRole("article", { name: /Custo Estimado/ })).toBeVisible();
665
+ });
666
+
487
667
  async function globalThisScrollPosition(page: import("@playwright/test").Page) {
488
668
  return page.evaluate("window.scrollY");
489
669
  }
@@ -493,24 +673,17 @@ async function openDashboard(page: import("@playwright/test").Page) {
493
673
  (response) =>
494
674
  response.status() === 200 &&
495
675
  response.url().includes("/api/v2/operations") &&
496
- response.url().includes("scope=overview"),
676
+ response.url().includes("scope=quick"),
497
677
  );
498
678
  await page.goto("/?token=e2e-token");
499
679
  await operations;
500
680
  }
501
681
 
502
682
  async function selectOperations(page: import("@playwright/test").Page) {
503
- const operations = page.waitForResponse(
504
- (response) =>
505
- response.status() === 200 &&
506
- response.url().includes("/api/v2/operations") &&
507
- !response.url().includes("scope=overview"),
508
- );
509
683
  await page
510
684
  .getByRole("navigation", { name: "Áreas do dashboard" })
511
685
  .getByRole("button", { name: /Operação/ })
512
686
  .click();
513
- await operations;
514
687
  }
515
688
 
516
689
  test("protects dashboard reads and rejects mutating methods", async ({ request }) => {
@@ -0,0 +1,34 @@
1
+ {
2
+ "schema_version": 1,
3
+ "item_ids": [
4
+ "TASK-2026-07-17-09-15-AUDITORIA-ESTRUTURAL-ZAIP-AIOS-JL7U",
5
+ "TASK-2026-07-17-22-37-INTAKE-OUTCOMES-V3-GA4Q",
6
+ "TASK-2026-07-18-11-54-LIBERAR-ACESSO-TOTAL-CODEX-KKP3",
7
+ "TASK-2026-07-18-12-26-FORMATAR-CUSTOS-CARD-XGRU",
8
+ "TASK-2026-07-18-12-42-REMOVE-OBSOLETE-TASKS-9RBB",
9
+ "TASK-2026-07-18-13-11-ALIGN-CODEX-FULL-ACCESS-A7C5",
10
+ "TASK-2026-07-22-00-26-GLOBAL-CODEX-CONFIG-W7R9",
11
+ "TASK-2026-08-09-11-12-DASHBOARD-FRESH-PORT-HANDOFF-GCAA",
12
+ "TASK-2026-08-09-18-59-REQUALIFICAR-CANDIDATO-ESCOPADO-T8WS",
13
+ "TASK-2026-08-09-20-01-FECHAR-LINT-SHA-LIMPO-RFWB",
14
+ "TASK-2026-08-10-09-42-SINCRONIZAR-EVIDENCIA-HAQ3-2WBT",
15
+ "TASK-2026-08-12-01-15-API-SQLITE-PAGINACAO-6D8V",
16
+ "TASK-2026-08-12-01-15-ASSURANCE-SQLITE-BROWSER-5K9T",
17
+ "TASK-2026-08-12-01-15-CONTRATO-INVENTARIO-SQLITE-METRICAS-9A2R",
18
+ "TASK-2026-08-12-01-15-EXPORTACAO-SQLITE-PARIDADE-7H3S",
19
+ "TASK-2026-08-12-01-15-PROJECAO-SQLITE-SEMANTICA-4C7P",
20
+ "PRD-2026-08-12-01-25-AUDITORIA-INTEGRAL-DASHBOARD-SQLITE-Q7MK",
21
+ "SPEC-2026-08-12-01-15-AUDITORIA-DASHBOARD-SQLITE-METRICAS-N5QK",
22
+ "TASK-2026-08-12-19-43-ADICIONAR-HERMES-README-5V8V",
23
+ "TASK-2026-08-12-22-14-COST-LIFECYCLE-SUBTOTAL-PARITY-LJTE",
24
+ "TASK-2026-08-12-23-43-RECONCILE-OPEN-ITEMS-CURRENT-TELEMETRY-XUH8",
25
+ "TASK-2026-08-12-23-54-RECALIBRAR-OPENCLAW-ECONOMIA-ZRXN",
26
+ "TASK-2026-08-13-00-02-COST-MONITOR-OVERVIEW-RECONCILIATION-T9RX",
27
+ "TASK-2026-08-13-00-15-CORRIGIR-PRIORIDADE-KANBAN-SQLITE-9D72",
28
+ "TASK-2026-08-13-00-17-RECALIBRAR-ZAIP-NOTA-95-GWHV",
29
+ "TASK-2026-08-13-00-28-RECALIBRAR-TRAYCER-HERMES-KDZB",
30
+ "TASK-2026-08-13-00-30-COST-DAILY-DURATION-PARITY-JMBS",
31
+ "TASK-2026-08-13-00-33-PADRONIZAR-METRICAS-LISTA-OPERACIONAL-YSS8"
32
+ ],
33
+ "updated_at": "2026-08-13T12:46:29.552Z"
34
+ }
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env sh
2
+ # Linux launcher for the local, loopback-only ZAIP SQLite dashboard.
3
+ set -eu
4
+
5
+ launcher_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
6
+ workspace_root=$(CDPATH= cd -- "$launcher_dir/../.." && pwd)
7
+ runtime="$workspace_root/.agents/dashboard/packages/local-runtime/start-dashboard.mjs"
8
+
9
+ if [ ! -f "$runtime" ]; then
10
+ printf '%s\n' "Erro: o runtime do ZAIP Dashboard não foi encontrado. Reinstale ou reconstrua o ZAIP-AIOS." >&2
11
+ exit 1
12
+ fi
13
+
14
+ node_bin=${ZAIP_NODE:-}
15
+ if [ -n "$node_bin" ]; then
16
+ if [ ! -x "$node_bin" ]; then
17
+ printf '%s\n' "Erro: ZAIP_NODE não aponta para um executável Node.js: $node_bin" >&2
18
+ exit 1
19
+ fi
20
+ elif node_bin=$(command -v node 2>/dev/null); then
21
+ :
22
+ else
23
+ printf '%s\n' "Erro: Node.js 22 ou superior não foi encontrado no PATH. Instale-o e tente novamente." >&2
24
+ exit 1
25
+ fi
26
+
27
+ node_major=$("$node_bin" -p "process.versions.node.split('.')[0]" 2>/dev/null || true)
28
+ case "$node_major" in
29
+ ''|*[!0-9]*)
30
+ printf '%s\n' "Erro: não foi possível determinar a versão do Node.js em $node_bin." >&2
31
+ exit 1
32
+ ;;
33
+ esac
34
+ if [ "$node_major" -lt 22 ]; then
35
+ printf '%s\n' "Erro: o Dashboard SQLite requer Node.js 22 ou superior; encontrado Node.js $node_major." >&2
36
+ exit 1
37
+ fi
38
+
39
+ if ! "$node_bin" -e "const { builtinModules } = require('node:module'); process.exit(builtinModules.includes('node:sqlite') ? 0 : 1)" >/dev/null 2>&1; then
40
+ printf '%s\n' "Erro: este Node.js não disponibiliza node:sqlite. Reinstale o Node.js 22 ou superior." >&2
41
+ exit 1
42
+ fi
43
+
44
+ cd "$workspace_root"
45
+ exec "$node_bin" "$runtime" "$@"
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env sh
2
+ # macOS Finder-compatible launcher. Keep the Linux contract in the sibling .sh.
3
+ exec "$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)/zaip-dashboard-linux.sh" "$@"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "1.0.0",
3
+ "version": "1.0.8",
4
4
  "files": [
5
5
  {
6
6
  "path": "apps/catalog/.storybook/main.ts",
@@ -220,7 +220,7 @@
220
220
  },
221
221
  {
222
222
  "path": "apps/catalog/package.json",
223
- "sha256": "6ed07adcaa1075aba5a41ca157b5f5aad70bae02b3f01914c4efe85181969013"
223
+ "sha256": "cad5056abeda7f5134e9f5ef61bba5238439b9ec670b25f4cd245157e5b8ffdb"
224
224
  },
225
225
  {
226
226
  "path": "apps/catalog/public/logo_novo_azul.png",
@@ -304,7 +304,7 @@
304
304
  },
305
305
  {
306
306
  "path": "packages/local-runtime/package.json",
307
- "sha256": "f00e4ab953a4c1fd2b91b6f510799d5407aa2fe5e61204b9cc80ccef564effef"
307
+ "sha256": "62dc180ef9f26346fd1cca07f435719de48342575a9463014d4e854e1024a69f"
308
308
  },
309
309
  {
310
310
  "path": "packages/local-runtime/runtime.mjs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/design-catalog",
3
- "version": "1.0.0",
3
+ "version": "1.0.8",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/design-local-runtime",
3
- "version": "1.0.0",
3
+ "version": "1.0.8",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -6,7 +6,7 @@ title: Garantia adaptativa e execução autônoma
6
6
  status: active
7
7
  version: 2
8
8
  source_change: null
9
- source_release: "1.0.7"
9
+ source_release: "1.0.8"
10
10
  ---
11
11
 
12
12
  # Garantia adaptativa e execução autônoma
@@ -6,7 +6,7 @@ title: Auditoria comparativa e plano de evolução
6
6
  status: active
7
7
  version: 1
8
8
  source_change: null
9
- source_release: "1.0.7"
9
+ source_release: "1.0.8"
10
10
  ---
11
11
 
12
12
  # Auditoria comparativa e plano de evolução
@@ -6,7 +6,7 @@ title: Contexto mínimo, seguro e navegável
6
6
  status: active
7
7
  version: 8
8
8
  source_change: null
9
- source_release: "1.0.7"
9
+ source_release: "1.0.8"
10
10
  ---
11
11
 
12
12
  # Context engine
@@ -6,7 +6,7 @@ title: Tokens, custos e cobertura
6
6
  status: active
7
7
  version: 10
8
8
  source_change: null
9
- source_release: "1.0.7"
9
+ source_release: "1.0.8"
10
10
  ---
11
11
 
12
12
  # Cost observability
@@ -0,0 +1,24 @@
1
+ ---
2
+ schema_version: 2
3
+ id: REQUIREMENTS-ZAIP-DASHBOARD-LAUNCH
4
+ area: dashboard-launch
5
+ title: Inicialização e hidratação confiável do dashboard
6
+ status: active
7
+ version: 1
8
+ source_change: null
9
+ source_release: "1.0.8"
10
+ ---
11
+
12
+ # Inicialização e hidratação confiável do dashboard
13
+
14
+ ## REQ-ZAIP-DASHBOARD-LAUNCH-001 — Sessão local previsível
15
+
16
+ O dashboard local deve abrir uma única sessão saudável, preservar processos que não pertencem ao launcher e distinguir carregamento, ausência de dados e falha.
17
+
18
+ - `AC-ZAIP-DASHBOARD-LAUNCH-001`: a cada lançamento sequencial, o executável abre imediatamente uma aba de preparação em nova porta e inicia uma nova instância; somente após o handoff saudável dessa aba a instância anterior inequivocamente pertencente ao mesmo workspace pode ser encerrada. Invocações concorrentes do mesmo lançamento podem coalescer para a nova sessão saudável, redirecionando a própria aba de preparação sem deixá-la morta. Processos de outro proprietário nunca são encerrados.
19
+ - `AC-ZAIP-DASHBOARD-LAUNCH-002`: o launcher só reporta sucesso depois de observar a resposta saudável da instância escolhida e fornece erro acionável quando a inicialização ou o handoff para o navegador falha.
20
+ - `AC-ZAIP-DASHBOARD-LAUNCH-003`: a interface representa hidratação parcial com estado explícito de carregamento e retry, sem apresentar agregados ainda indisponíveis como zeros válidos.
21
+
22
+ ## Verificação
23
+
24
+ Validar com testes do launcher, runtime local e projeções quick/detail, além de typecheck, teste do dashboard e paridade entre fonte, runtime instalado e distribuição.
@@ -6,7 +6,7 @@ title: Exportação contextual de dados para Excel
6
6
  status: proposed
7
7
  version: 2
8
8
  source_change: null
9
- source_release: "1.0.7"
9
+ source_release: "1.0.8"
10
10
  ---
11
11
 
12
12
  # Exportação contextual de dados
@@ -6,7 +6,7 @@ title: Contrato visual e catálogo executável
6
6
  status: active
7
7
  version: 3
8
8
  source_change: null
9
- source_release: "1.0.7"
9
+ source_release: "1.0.8"
10
10
  ---
11
11
 
12
12
  # Design system
@@ -6,7 +6,7 @@ title: Preparação, materialização e DAG
6
6
  status: active
7
7
  version: 10
8
8
  source_change: null
9
- source_release: "1.0.7"
9
+ source_release: "1.0.8"
10
10
  ---
11
11
 
12
12
  # Execution engine