spine-framework 0.4.4 → 0.5.0-rc.4

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 (283) hide show
  1. package/.env.example +13 -3
  2. package/.framework/cli/commands/bootstrap.ts +392 -0
  3. package/.framework/cli/commands/dev.ts +91 -218
  4. package/.framework/cli/commands/doctor.ts +132 -26
  5. package/.framework/cli/commands/generate.ts +38 -298
  6. package/.framework/cli/commands/init.ts +20 -1
  7. package/.framework/cli/commands/migrate.ts +36 -30
  8. package/.framework/cli/commands/migrations.ts +16 -56
  9. package/.framework/cli/commands/upgrade.ts +35 -0
  10. package/.framework/cli/commands/validate-schema.ts +147 -0
  11. package/.framework/cli/context.ts +223 -110
  12. package/.framework/cli/index.ts +6 -0
  13. package/.framework/cli/lib/project-files.ts +241 -1
  14. package/.framework/functions/_shared/hash-api-key.ts +183 -79
  15. package/.framework/functions/_shared/logging.ts +562 -224
  16. package/.framework/functions/_shared/middleware.ts +47 -44
  17. package/.framework/functions/admin-data.ts +39 -28
  18. package/.framework/functions/ai-agents.ts +10 -6
  19. package/.framework/functions/api-keys.ts +301 -122
  20. package/.framework/functions/apps.ts +43 -26
  21. package/.framework/functions/cil-ingest.ts +48 -15
  22. package/.framework/functions/debug-auth.ts +14 -8
  23. package/.framework/functions/deliveries.ts +39 -12
  24. package/.framework/functions/embeddings.ts +145 -76
  25. package/.framework/functions/integration-outbound.ts +67 -27
  26. package/.framework/functions/integrations.ts +254 -127
  27. package/.framework/functions/logs.ts +273 -133
  28. package/.framework/functions/observability.ts +277 -147
  29. package/.framework/functions/pipeline-executions.ts +1 -1
  30. package/.framework/functions/pipelines.ts +14 -9
  31. package/.framework/functions/prompt-configs.ts +7 -4
  32. package/.framework/functions/roles.ts +8 -5
  33. package/.framework/functions/security.ts +30 -17
  34. package/.framework/functions/system-cron.ts +240 -127
  35. package/.framework/functions/tests.ts +7 -6
  36. package/.framework/functions/timers.ts +310 -107
  37. package/.framework/functions/triggers.ts +28 -13
  38. package/.framework/functions/types.ts +13 -10
  39. package/.framework/migrations/069_log_stats_window.sql +54 -0
  40. package/.framework/migrations/070_app_type_schema_rpcs.sql +166 -0
  41. package/.framework/migrations/071_timer_interval_keys.sql +96 -0
  42. package/.framework/migrations/072_slug_autofill.sql +77 -0
  43. package/.framework/migrations/073_seed_member_roles.sql +26 -0
  44. package/.framework/src/apps/admin/index.tsx +1141 -775
  45. package/.framework/src/components/ErrorBoundary.tsx +136 -0
  46. package/.framework/src/components/admin/AdminListPage.tsx +81 -73
  47. package/.framework/src/components/admin/AdminSidebar.tsx +88 -79
  48. package/.framework/src/components/admin/EntitySelect.tsx +181 -0
  49. package/.framework/src/components/admin/PageInstructions.tsx +86 -127
  50. package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
  51. package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
  52. package/.framework/src/components/layout/Sidebar.tsx +300 -177
  53. package/.framework/src/components/runtime/DataDetailPage.tsx +67 -35
  54. package/.framework/src/components/runtime/DataHeader.tsx +96 -48
  55. package/.framework/src/components/runtime/DataListPage.tsx +3 -26
  56. package/.framework/src/components/runtime/DataStats.tsx +10 -10
  57. package/.framework/src/components/runtime/DataTable.tsx +12 -10
  58. package/.framework/src/components/ui/sheet.tsx +24 -26
  59. package/.framework/src/components/ui/textarea.tsx +74 -48
  60. package/.framework/src/hooks/useEntityList.ts +12 -9
  61. package/.framework/src/hooks/useListSchema.ts +108 -58
  62. package/.framework/src/instructions/README.md +57 -0
  63. package/.framework/src/instructions/ai-agents.md +69 -0
  64. package/.framework/src/instructions/alerts.md +80 -0
  65. package/.framework/src/instructions/api-keys.md +87 -0
  66. package/.framework/src/instructions/apps.md +77 -0
  67. package/.framework/src/instructions/concepts/ai-and-prompts.md +150 -0
  68. package/.framework/src/instructions/concepts/apps-and-renderers.md +162 -0
  69. package/.framework/src/instructions/concepts/auth-and-api-keys.md +133 -0
  70. package/.framework/src/instructions/concepts/automation.md +186 -0
  71. package/.framework/src/instructions/concepts/concurrency-and-idempotency.md +125 -0
  72. package/.framework/src/instructions/concepts/core-vs-custom.md +124 -0
  73. package/.framework/src/instructions/concepts/design-schema.md +152 -0
  74. package/.framework/src/instructions/concepts/integrations-and-webhooks.md +127 -0
  75. package/.framework/src/instructions/concepts/observability.md +116 -0
  76. package/.framework/src/instructions/concepts/permissions.md +150 -0
  77. package/.framework/src/instructions/concepts/runtime-records.md +111 -0
  78. package/.framework/src/instructions/concepts/scope-and-accounts.md +112 -0
  79. package/.framework/src/instructions/concepts/spine-way.md +172 -0
  80. package/.framework/src/instructions/deliveries.md +59 -0
  81. package/.framework/src/instructions/guide/00-orientation.md +106 -0
  82. package/.framework/src/instructions/guide/01-install-and-first-run.md +253 -0
  83. package/.framework/src/instructions/guide/02-project-map.md +147 -0
  84. package/.framework/src/instructions/guide/03-domain-model.md +223 -0
  85. package/.framework/src/instructions/guide/04-first-app.md +227 -0
  86. package/.framework/src/instructions/guide/05-glossary.md +183 -0
  87. package/.framework/src/instructions/integrations.md +96 -0
  88. package/.framework/src/instructions/internal/cil-markers.md +83 -0
  89. package/.framework/src/instructions/invites.md +60 -0
  90. package/.framework/src/instructions/kb.md +80 -0
  91. package/.framework/src/instructions/logs.md +77 -0
  92. package/.framework/src/instructions/observability.md +61 -0
  93. package/.framework/src/instructions/operations/deployment.md +115 -0
  94. package/.framework/src/instructions/operations/migrations.md +125 -0
  95. package/.framework/src/instructions/operations/security-checklist.md +148 -0
  96. package/.framework/src/instructions/operations/troubleshooting.md +170 -0
  97. package/.framework/src/instructions/operations/upgrade.md +116 -0
  98. package/.framework/src/instructions/pipeline-executions.md +62 -0
  99. package/.framework/src/instructions/pipelines.md +78 -0
  100. package/.framework/src/instructions/prompts.md +95 -0
  101. package/.framework/src/instructions/reference/api/admin-data.md +162 -0
  102. package/.framework/src/instructions/reference/api/auth.md +113 -0
  103. package/.framework/src/instructions/reference/api/errors-and-envelopes.md +113 -0
  104. package/.framework/src/instructions/reference/app-manifest.md +150 -0
  105. package/.framework/src/instructions/reference/cli.md +124 -0
  106. package/.framework/src/instructions/reference/database.md +132 -0
  107. package/.framework/src/instructions/reference/design-schema.md +280 -0
  108. package/.framework/src/instructions/reference/env-vars.md +133 -0
  109. package/.framework/src/instructions/reference/functions/account-nodes.md +75 -0
  110. package/.framework/src/instructions/reference/functions/admin-data.md +195 -0
  111. package/.framework/src/instructions/reference/functions/admin-funnel.md +90 -0
  112. package/.framework/src/instructions/reference/functions/admin-install-funnel.md +107 -0
  113. package/.framework/src/instructions/reference/functions/admin-signals.md +102 -0
  114. package/.framework/src/instructions/reference/functions/ai-agents.md +148 -0
  115. package/.framework/src/instructions/reference/functions/ai-interactions.md +156 -0
  116. package/.framework/src/instructions/reference/functions/api-keys.md +130 -0
  117. package/.framework/src/instructions/reference/functions/apps.md +140 -0
  118. package/.framework/src/instructions/reference/functions/auth.md +99 -0
  119. package/.framework/src/instructions/reference/functions/debug-auth.md +91 -0
  120. package/.framework/src/instructions/reference/functions/deliveries.md +110 -0
  121. package/.framework/src/instructions/reference/functions/embeddings.md +166 -0
  122. package/.framework/src/instructions/reference/functions/eval-harness.md +149 -0
  123. package/.framework/src/instructions/reference/functions/index.md +103 -0
  124. package/.framework/src/instructions/reference/functions/integration-outbound.md +200 -0
  125. package/.framework/src/instructions/reference/functions/integration-routes.md +151 -0
  126. package/.framework/src/instructions/reference/functions/integrations.md +130 -0
  127. package/.framework/src/instructions/reference/functions/invites.md +182 -0
  128. package/.framework/src/instructions/reference/functions/item-progress.md +107 -0
  129. package/.framework/src/instructions/reference/functions/kb.md +166 -0
  130. package/.framework/src/instructions/reference/functions/logs.md +141 -0
  131. package/.framework/src/instructions/reference/functions/observability.md +105 -0
  132. package/.framework/src/instructions/reference/functions/pipeline-executions.md +132 -0
  133. package/.framework/src/instructions/reference/functions/pipeline-runner-background.md +121 -0
  134. package/.framework/src/instructions/reference/functions/pipelines.md +136 -0
  135. package/.framework/src/instructions/reference/functions/prompt-configs.md +121 -0
  136. package/.framework/src/instructions/reference/functions/roles.md +121 -0
  137. package/.framework/src/instructions/reference/functions/security.md +140 -0
  138. package/.framework/src/instructions/reference/functions/system-cron.md +136 -0
  139. package/.framework/src/instructions/reference/functions/system.md +106 -0
  140. package/.framework/src/instructions/reference/functions/tests.md +97 -0
  141. package/.framework/src/instructions/reference/functions/timers.md +117 -0
  142. package/.framework/src/instructions/reference/functions/trigger-scheduler.md +102 -0
  143. package/.framework/src/instructions/reference/functions/triggers.md +140 -0
  144. package/.framework/src/instructions/reference/functions/types.md +146 -0
  145. package/.framework/src/instructions/reference/seeds.md +126 -0
  146. package/.framework/src/instructions/reference/shared-modules.md +127 -0
  147. package/.framework/src/instructions/reference/spine-config.md +114 -0
  148. package/.framework/src/instructions/roles.md +80 -0
  149. package/.framework/src/instructions/runtime-detail.md +70 -0
  150. package/.framework/src/instructions/runtime-list.md +77 -0
  151. package/.framework/src/instructions/security.md +67 -0
  152. package/.framework/src/instructions/tasks/add-a-pipeline.md +110 -0
  153. package/.framework/src/instructions/tasks/add-a-role.md +96 -0
  154. package/.framework/src/instructions/tasks/add-a-timer.md +114 -0
  155. package/.framework/src/instructions/tasks/add-a-trigger.md +106 -0
  156. package/.framework/src/instructions/tasks/add-a-type.md +151 -0
  157. package/.framework/src/instructions/tasks/add-a-webhook.md +108 -0
  158. package/.framework/src/instructions/tasks/add-an-ai-agent.md +108 -0
  159. package/.framework/src/instructions/tasks/add-an-integration.md +124 -0
  160. package/.framework/src/instructions/tasks/build-a-custom-page.md +118 -0
  161. package/.framework/src/instructions/tasks/package-and-install-an-app.md +127 -0
  162. package/.framework/src/instructions/tasks/test-your-code.md +108 -0
  163. package/.framework/src/instructions/tasks/write-a-function.md +132 -0
  164. package/.framework/src/instructions/tasks/write-a-migration.md +110 -0
  165. package/.framework/src/instructions/testing.md +59 -0
  166. package/.framework/src/instructions/timers.md +82 -0
  167. package/.framework/src/instructions/triggers.md +69 -0
  168. package/.framework/src/instructions/types.md +93 -0
  169. package/.framework/src/pages/NotFoundPage.tsx +62 -31
  170. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +117 -106
  171. package/.framework/src/pages/admin/AIAgentsPage.tsx +86 -48
  172. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +153 -152
  173. package/.framework/src/pages/admin/APIKeysPage.tsx +91 -90
  174. package/.framework/src/pages/admin/AlertsConfigPage.tsx +29 -18
  175. package/.framework/src/pages/admin/AppDetailPage.tsx +6 -60
  176. package/.framework/src/pages/admin/AppsPage.tsx +104 -66
  177. package/.framework/src/pages/admin/DeliveriesPage.tsx +5 -5
  178. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +5 -23
  179. package/.framework/src/pages/admin/EmbeddingsPage.tsx +5 -26
  180. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +7 -7
  181. package/.framework/src/pages/admin/IntegrationsPage.tsx +85 -43
  182. package/.framework/src/pages/admin/LogsPage.tsx +144 -76
  183. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +223 -140
  184. package/.framework/src/pages/admin/PipelineDetailPage.tsx +134 -113
  185. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +108 -45
  186. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -115
  187. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +96 -98
  188. package/.framework/src/pages/admin/PromptConfigsPage.tsx +101 -59
  189. package/.framework/src/pages/admin/RoleDetailPage.tsx +90 -79
  190. package/.framework/src/pages/admin/RolesPage.tsx +86 -43
  191. package/.framework/src/pages/admin/SecurityPage.tsx +1 -1
  192. package/.framework/src/pages/admin/TestingDashboard.tsx +16 -28
  193. package/.framework/src/pages/admin/TimerDetailPage.tsx +117 -100
  194. package/.framework/src/pages/admin/TimersPage.tsx +90 -62
  195. package/.framework/src/pages/admin/TriggerDetailPage.tsx +90 -83
  196. package/.framework/src/pages/admin/TriggersPage.tsx +124 -99
  197. package/.framework/src/pages/admin/TypeDetailPage.tsx +152 -138
  198. package/.framework/src/pages/admin/TypesPage.tsx +90 -48
  199. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +17 -25
  200. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +17 -27
  201. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +72 -40
  202. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +321 -129
  203. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +18 -29
  204. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +26 -38
  205. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +34 -46
  206. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +189 -103
  207. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +246 -136
  208. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +11 -22
  209. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +9 -20
  210. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +26 -38
  211. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +7 -26
  212. package/.framework/templates/agent/AGENTS.md +150 -0
  213. package/.framework/templates/agent/skills/spine-add-ai-agent/SKILL.md +58 -0
  214. package/.framework/templates/agent/skills/spine-add-automation/SKILL.md +62 -0
  215. package/.framework/templates/agent/skills/spine-add-integration/SKILL.md +63 -0
  216. package/.framework/templates/agent/skills/spine-architect/SKILL.md +86 -0
  217. package/.framework/templates/agent/skills/spine-install-app/SKILL.md +72 -0
  218. package/.framework/templates/agent/skills/spine-migration/SKILL.md +75 -0
  219. package/.framework/templates/agent/skills/spine-new-app/SKILL.md +67 -0
  220. package/.framework/templates/agent/skills/spine-new-function/SKILL.md +65 -0
  221. package/.framework/templates/agent/skills/spine-new-type/SKILL.md +65 -0
  222. package/.framework/templates/agent/skills/spine-schema/SKILL.md +77 -0
  223. package/.framework/templates/agent/skills/spine-test/SKILL.md +67 -0
  224. package/.framework/templates/agent/skills/spine-troubleshoot/SKILL.md +74 -0
  225. package/.framework/templates/agent/skills/spine-upgrade/SKILL.md +69 -0
  226. package/.framework/templates/project.json +4 -1
  227. package/.framework/tests/unit/account-scoping-gates.test.ts +392 -0
  228. package/.framework/tests/unit/agent-files.test.ts +355 -0
  229. package/.framework/tests/unit/agent-runner.test.ts +479 -44
  230. package/.framework/tests/unit/api-keys-create-scope-gate.test.ts +160 -0
  231. package/.framework/tests/unit/api-keys-omit-secret-fields.test.ts +38 -0
  232. package/.framework/tests/unit/bootstrap.test.ts +242 -0
  233. package/.framework/tests/unit/cli-context-api-key.test.ts +114 -0
  234. package/.framework/tests/unit/debug-auth.test.ts +38 -0
  235. package/.framework/tests/unit/deliveries-account-scoping.test.ts +185 -0
  236. package/.framework/tests/unit/integration-outbound-credentials.test.ts +167 -0
  237. package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
  238. package/.framework/tests/unit/logging-app-id.test.ts +75 -0
  239. package/.framework/tests/unit/system-context-denial.test.ts +145 -0
  240. package/.framework/tests/unit/system-cron.test.ts +240 -0
  241. package/.framework/tests/unit/timers.test.ts +159 -0
  242. package/README.md +125 -166
  243. package/config/tsconfig.cli.json +2 -2
  244. package/package.json +15 -4
  245. package/templates/project/package-lock.json +2 -2
  246. package/.framework/docs/admin-routes.md +0 -76
  247. package/.framework/docs/api-docs-progress.md +0 -38
  248. package/.framework/docs/api-governance.md +0 -146
  249. package/.framework/docs/api-testing-results.md +0 -212
  250. package/.framework/docs/assembly-launch-guide.md +0 -138
  251. package/.framework/docs/audit-results.md +0 -590
  252. package/.framework/docs/db-api-inventory.md +0 -95
  253. package/.framework/docs/gap-remediation-backlog.md +0 -103
  254. package/.framework/docs/ui-adoption-verification.md +0 -111
  255. package/.framework/docs/ui-api-coverage.md +0 -84
  256. package/.framework/docs/v2-compatibility-audit.md +0 -228
  257. package/.framework/mcp/index.ts +0 -133
  258. package/.framework/mcp/load-env.ts +0 -60
  259. package/.framework/mcp/shared/app-manifest.ts +0 -275
  260. package/.framework/mcp/shared/db.ts +0 -477
  261. package/.framework/mcp/shared/kb.ts +0 -118
  262. package/.framework/mcp/tools/architect.ts +0 -431
  263. package/.framework/mcp/tools/cil/context.ts +0 -345
  264. package/.framework/mcp/tools/cil/graph.ts +0 -242
  265. package/.framework/mcp/tools/cil/ingest.ts +0 -1217
  266. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +0 -693
  267. package/.framework/mcp/tools/cil/pipeline.ts +0 -767
  268. package/.framework/mcp/tools/cil/project.ts +0 -791
  269. package/.framework/mcp/tools/cil/retrieval.ts +0 -336
  270. package/.framework/mcp/tools/cil/search-core.ts +0 -454
  271. package/.framework/mcp/tools/cil/search.ts +0 -97
  272. package/.framework/mcp/tools/cil/suggest.ts +0 -186
  273. package/.framework/mcp/tools/cil/validate.ts +0 -1369
  274. package/.framework/mcp/tools/kb/delete.ts +0 -139
  275. package/.framework/mcp/tools/kb/index.ts +0 -52
  276. package/.framework/mcp/tools/kb/ingest.ts +0 -84
  277. package/.framework/mcp/tools/kb/list-types.ts +0 -102
  278. package/.framework/mcp/tools/kb/publish.ts +0 -100
  279. package/.framework/mcp/tools/kb/reindex.ts +0 -86
  280. package/.framework/mcp/tools/kb/revoke.ts +0 -85
  281. package/.framework/mcp/tools/kb/search.ts +0 -101
  282. package/.framework/mcp/tools/kb/upsert.ts +0 -125
  283. package/.framework/mcp/tools/observability.ts +0 -510
@@ -1,12 +1,28 @@
1
1
  // CIL[BEGIN stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/ObservabilityDashboard.tsx"]
2
- // CIL[DOC-MACRO purpose="Admin observability dashboard page"]
3
- // CIL[DOC-RESPONSIBILITY responsibility="Provide the top-level React page for visualizing system observability metrics"]
4
- // CIL[DOC-CONTEXT module="observability" layer="page" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts"]
5
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX page" errors="none" side_effects="none"]
6
- // CIL[DOC-MICRO logic_summary="Defines the admin observability dashboard page module and re-exports the component" notable_decisions="[]"]
7
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
- // CIL[DOC-STABILITY stability="stable"]
9
- // CIL[DOC-AUDIENCE audience="maintainer"]
2
+ /**
3
+ * @module ObservabilityDashboard
4
+ * @audience both
5
+ * @layer shared-core
6
+ * @stability stable
7
+ *
8
+ * This module renders the Observability Dashboard, providing visualizations for monitoring system performance and health. It utilizes various chart components to display data fetched from APIs, allowing users to gain insights into application metrics.
9
+ * INVARIANT: The dashboard requires valid API endpoints to function correctly.
10
+ *
11
+ * @seeAlso useApi (for API interaction).
12
+ * @seeAlso LoadingSpinner (for loading states).
13
+ * @seeAlso PageInstructions (for user guidance).
14
+ *
15
+ * @cil-generated
16
+ */
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
10
26
 
11
27
 
12
28
 
@@ -15,6 +31,7 @@
15
31
 
16
32
  import React, { useState, useEffect, useMemo } from 'react'
17
33
  import {
34
+ // CIL[END stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:module_header:module_header"]
18
35
  LineChart,
19
36
  Line,
20
37
  BarChart,
@@ -35,133 +52,185 @@ import { useApi } from '../../hooks/useApi'
35
52
  import { apiFetch } from '../../lib/api'
36
53
  import { formatDateTime } from '../../lib/utils'
37
54
  import { Link } from 'react-router-dom'
38
- import { PageInstructions } from '../../components/admin/PageInstructions'
39
-
40
- // CIL[DOC-VECTOR type="context" content="purpose='Admin observability dashboard page'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts"]
41
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
42
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
43
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
44
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
45
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
46
- // CIL[END stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:module_header:module_header"]
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
47
71
  // CIL[BEGIN stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:MetricData:interface" type="interface" identity="MetricData" parent="~/.framework/src/pages/admin/ObservabilityDashboard.tsx"]
48
- // CIL[DOC-MACRO purpose="Data shape for event volume buckets"]
49
- // CIL[DOC-RESPONSIBILITY responsibility="Describe a single bucketed event count"]
50
- // CIL[DOC-CONTEXT module="observability" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/ObservabilityDashboard.tsx"]
51
- // CIL[DOC-CONTRACT inputs="N/A" outputs="MetricData[]" errors="N/A" side_effects="N/A"]
52
- // CIL[DOC-MICRO logic_summary="bucket and count fields for chart data" notable_decisions="[]"]
53
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
54
- // CIL[DOC-STABILITY stability="stable"]
72
+ /**
73
+ * The MetricData interface defines the structure for metric data used in the observability dashboard. It encapsulates the essential properties needed to represent a metric's bucket and its count.
74
+ *
75
+ * @sideEffects none
76
+ * @stability internal
77
+ * @cil-generated
78
+ */
55
79
  interface MetricData {
56
80
  bucket: string
57
81
  count: number
58
82
  }
59
- // CIL[DOC-VECTOR type="context" content="purpose='Data shape for event volume buckets'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts"]
60
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
61
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
62
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
63
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
64
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
65
83
  // CIL[END stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:MetricData:interface"]
66
84
 
67
85
 
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
68
101
  // CIL[BEGIN stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:ErrorRateData:interface" type="interface" identity="ErrorRateData" parent="~/.framework/src/pages/admin/ObservabilityDashboard.tsx"]
69
- // CIL[DOC-MACRO purpose="Data shape for error rate aggregation"]
70
- // CIL[DOC-RESPONSIBILITY responsibility="Describe total, error, and rate fields"]
71
- // CIL[DOC-CONTEXT module="observability" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/ObservabilityDashboard.tsx"]
72
- // CIL[DOC-CONTRACT inputs="N/A" outputs="ErrorRateData" errors="N/A" side_effects="N/A"]
73
- // CIL[DOC-MICRO logic_summary="total, errors, and rate fields for error summary" notable_decisions="[]"]
74
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
75
- // CIL[DOC-STABILITY stability="stable"]
102
+ /**
103
+ * The ErrorRateData interface defines the structure for representing error rate metrics in the observability dashboard. It provides essential data points for monitoring application performance and reliability.
104
+ *
105
+ * @sideEffects none
106
+ * @stability internal
107
+ * @cil-generated
108
+ */
76
109
  interface ErrorRateData {
77
110
  total: number
78
111
  errors: number
79
112
  rate: number
80
113
  }
81
- // CIL[DOC-VECTOR type="context" content="purpose='Data shape for error rate aggregation'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts"]
82
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
83
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
84
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
85
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
86
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
87
114
  // CIL[END stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:ErrorRateData:interface"]
88
115
 
89
116
 
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
90
132
  // CIL[BEGIN stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:LatencyData:interface" type="interface" identity="LatencyData" parent="~/.framework/src/pages/admin/ObservabilityDashboard.tsx"]
91
- // CIL[DOC-MACRO purpose="Data shape for latency percentiles"]
92
- // CIL[DOC-RESPONSIBILITY responsibility="Describe p50, p90, p95, p99 latency metrics"]
93
- // CIL[DOC-CONTEXT module="observability" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/ObservabilityDashboard.tsx"]
94
- // CIL[DOC-CONTRACT inputs="N/A" outputs="LatencyData" errors="N/A" side_effects="N/A"]
95
- // CIL[DOC-MICRO logic_summary="percentile fields for latency distribution" notable_decisions="[]"]
96
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
97
- // CIL[DOC-STABILITY stability="stable"]
133
+ /**
134
+ * The LatencyData interface defines a structure for capturing latency metrics at various percentiles. It provides a standardized way to represent and access latency statistics in the observability dashboard.
135
+ *
136
+ * @sideEffects none
137
+ * @stability internal
138
+ * @cil-generated
139
+ */
98
140
  interface LatencyData {
99
141
  p50: number
100
142
  p90: number
101
143
  p95: number
102
144
  p99: number
103
145
  }
104
- // CIL[DOC-VECTOR type="context" content="purpose='Data shape for latency percentiles'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts"]
105
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
106
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
107
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
108
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
109
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
110
146
  // CIL[END stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:LatencyData:interface"]
111
147
 
112
148
 
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
113
164
  // CIL[BEGIN stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:PipelineStats:interface" type="interface" identity="PipelineStats" parent="~/.framework/src/pages/admin/ObservabilityDashboard.tsx"]
114
- // CIL[DOC-MACRO purpose="Data shape for pipeline execution statistics"]
115
- // CIL[DOC-RESPONSIBILITY responsibility="Describe per-pipeline success, failure, and duration metrics"]
116
- // CIL[DOC-CONTEXT module="observability" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/ObservabilityDashboard.tsx"]
117
- // CIL[DOC-CONTRACT inputs="N/A" outputs="PipelineStats[]" errors="N/A" side_effects="N/A"]
118
- // CIL[DOC-MICRO logic_summary="pipeline_id, success_count, failure_count, and avg_duration_ms fields" notable_decisions="[]"]
119
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
120
- // CIL[DOC-STABILITY stability="stable"]
165
+ /**
166
+ * The PipelineStats interface defines the structure for tracking the statistics of a data processing pipeline, including its success and failure counts as well as average duration. It exists to provide a standardized way to represent and access these metrics within the observability dashboard.
167
+ *
168
+ * @sideEffects none
169
+ * @stability internal
170
+ * @cil-generated
171
+ */
121
172
  interface PipelineStats {
122
173
  pipeline_id: string
123
174
  success_count: number
124
175
  failure_count: number
125
176
  avg_duration_ms: number
126
177
  }
127
- // CIL[DOC-VECTOR type="context" content="purpose='Data shape for pipeline execution statistics'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts"]
128
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
129
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
130
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
131
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
132
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
133
178
  // CIL[END stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:PipelineStats:interface"]
134
179
 
135
180
 
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
136
196
  // CIL[BEGIN stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:TopActor:interface" type="interface" identity="TopActor" parent="~/.framework/src/pages/admin/ObservabilityDashboard.tsx"]
137
- // CIL[DOC-MACRO purpose="Data shape for top actor counts"]
138
- // CIL[DOC-RESPONSIBILITY responsibility="Describe a principal and its event count"]
139
- // CIL[DOC-CONTEXT module="observability" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/ObservabilityDashboard.tsx"]
140
- // CIL[DOC-CONTRACT inputs="N/A" outputs="TopActor[]" errors="N/A" side_effects="N/A"]
141
- // CIL[DOC-MICRO logic_summary="principal_id and event_count fields" notable_decisions="[]"]
142
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
143
- // CIL[DOC-STABILITY stability="stable"]
197
+ /**
198
+ * The TopActor interface defines the structure for representing an actor in the observability dashboard, including their unique identifier and the count of events associated with them. It facilitates the management and display of actor-related data within the application.
199
+ *
200
+ * @sideEffects none
201
+ * @stability internal
202
+ * @cil-generated
203
+ */
144
204
  interface TopActor {
145
205
  principal_id: string
146
206
  event_count: number
147
207
  }
148
- // CIL[DOC-VECTOR type="context" content="purpose='Data shape for top actor counts'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts"]
149
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
150
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
151
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
152
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
153
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
154
208
  // CIL[END stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:TopActor:interface"]
155
209
 
156
210
 
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
157
226
  // CIL[BEGIN stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:AlertEvent:interface" type="interface" identity="AlertEvent" parent="~/.framework/src/pages/admin/ObservabilityDashboard.tsx"]
158
- // CIL[DOC-MACRO purpose="Data shape for threshold alert events"]
159
- // CIL[DOC-RESPONSIBILITY responsibility="Describe an alert with metric, threshold, actual, and timestamp"]
160
- // CIL[DOC-CONTEXT module="observability" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/ObservabilityDashboard.tsx"]
161
- // CIL[DOC-CONTRACT inputs="N/A" outputs="AlertEvent[]" errors="N/A" side_effects="N/A"]
162
- // CIL[DOC-MICRO logic_summary="id, metric, threshold_value, actual_value, and created_at fields" notable_decisions="[]"]
163
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
164
- // CIL[DOC-STABILITY stability="stable"]
227
+ /**
228
+ * The AlertEvent interface defines the structure of an alert event object used in the observability dashboard. It captures key details about the alert, including its identifier, metric, threshold, actual value, and creation timestamp.
229
+ *
230
+ * @sideEffects none
231
+ * @stability internal
232
+ * @cil-generated
233
+ */
165
234
  interface AlertEvent {
166
235
  id: string
167
236
  metric: string
@@ -169,46 +238,69 @@ interface AlertEvent {
169
238
  actual_value: number
170
239
  created_at: string
171
240
  }
172
- // CIL[DOC-VECTOR type="context" content="purpose='Data shape for threshold alert events'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts"]
173
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
174
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
175
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
176
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
177
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
178
241
  // CIL[END stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:AlertEvent:interface"]
179
242
 
180
243
 
181
244
 
182
245
 
183
246
 
184
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:colors:constant" type="constant" identity="COLORS" parent="~/.framework/src/pages/admin/ObservabilityDashboard.tsx"]
185
- // CIL[DOC-MACRO purpose="Chart color palette"]
186
- // CIL[DOC-RESPONSIBILITY responsibility="Provide default color codes for charts"]
187
- // CIL[DOC-CONTEXT module="observability" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/ObservabilityDashboard.tsx"]
188
- // CIL[DOC-CONTRACT inputs="N/A" outputs="string[]" errors="N/A" side_effects="N/A"]
189
- // CIL[DOC-MICRO logic_summary="static array of hex color values for use in charts" notable_decisions="[]"]
190
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
191
- // CIL[DOC-STABILITY stability="stable"]
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:COLORS:constant" type="constant" identity="COLORS" parent="~/.framework/src/pages/admin/ObservabilityDashboard.tsx"]
263
+ /**
264
+ * COLORS is an array of hex color codes used for visual representation in the Observability Dashboard. It provides a consistent color scheme for various UI elements.
265
+ *
266
+ * @sideEffects none
267
+ * @stability internal
268
+ * @cil-generated
269
+ */
192
270
  const COLORS = ['#3b82f6', '#10b981', '#f59e0b', '#ef4444', '#8b5cf6']
193
- // CIL[DOC-VECTOR type="context" content="purpose='Chart color palette'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts"]
194
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
195
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
196
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
197
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
198
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
199
- // CIL[END stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:colors:constant"]
271
+ // CIL[END stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:COLORS:constant"]
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
200
287
 
201
288
 
202
289
 
203
290
 
204
291
  // CIL[BEGIN stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:ObservabilityDashboard:component" type="component" identity="ObservabilityDashboard" parent="~/.framework/src/pages/admin/ObservabilityDashboard.tsx"]
205
- // CIL[DOC-MACRO purpose="Render the observability dashboard"]
206
- // CIL[DOC-RESPONSIBILITY responsibility="Fetch and display event volume, error rate, latency, pipeline health, top actors, and recent alerts"]
207
- // CIL[DOC-CONTEXT module="observability" layer="component" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/ObservabilityDashboard.tsx"]
208
- // CIL[DOC-CONTRACT inputs="timeRange and refreshInterval from local state" outputs="JSX dashboard" errors="failed API fetches" side_effects="periodic refetch via setInterval"]
209
- // CIL[DOC-MICRO logic_summary="Uses useApi hooks to call observability endpoints, derives chart data and stats, and renders charts and alerts" notable_decisions="[]"]
210
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
211
- // CIL[DOC-STABILITY stability="stable"]
292
+ /**
293
+ * The ObservabilityDashboard component provides a user interface for monitoring various metrics related to system observability, such as event volume, error rates, and latency. It allows users to select time ranges and refresh intervals for the displayed data.
294
+ *
295
+ * @macro UI component for displaying observability metrics.
296
+ * @micro Utilizes multiple asynchronous API calls to fetch and display observability data based on user-selected parameters.
297
+ * @outputSpec JSX.Element — renders the observability dashboard UI.
298
+ * @sideEffects Makes external API calls to fetch observability data.
299
+ * @stability internal
300
+ * @calls useApi, apiFetch
301
+ * @errorHandling returns default values on API call failures.
302
+ * @cil-generated
303
+ */
212
304
  export function ObservabilityDashboard() {
213
305
  const [timeRange, setTimeRange] = useState<'1h' | '24h' | '7d'>('24h')
214
306
  const [refreshInterval, setRefreshInterval] = useState(30)
@@ -311,12 +403,14 @@ export function ObservabilityDashboard() {
311
403
 
312
404
  const { data: recentAlerts } = useApi<AlertEvent[]>(
313
405
  async () => {
314
- const response = await apiFetch('/api/logs?action=account&event=threshold.breached&limit=5')
406
+ const response = await apiFetch(
407
+ `/api/logs?action=account&event=threshold.breached&date_from=${encodeURIComponent(timeParams.from)}&date_to=${encodeURIComponent(timeParams.to)}&limit=5`
408
+ )
315
409
  if (!response.ok) return []
316
410
  const result = await response.json()
317
411
  return (result.data || result || []).slice(0, 5)
318
412
  },
319
- { immediate: true }
413
+ { immediate: true, deps: [timeRange] }
320
414
  )
321
415
 
322
416
 
@@ -363,7 +457,7 @@ export function ObservabilityDashboard() {
363
457
  bgColor: latency && latency.p95 > 2000 ? 'bg-red-50' : 'bg-green-50',
364
458
  },
365
459
  {
366
- title: 'Active Pipelines',
460
+ title: 'Pipelines with runs',
367
461
  value: pipelineStats?.length || 0,
368
462
  icon: RefreshCw,
369
463
  iconColor: 'text-purple-500',
@@ -413,17 +507,6 @@ export function ObservabilityDashboard() {
413
507
  </Button>
414
508
  </div>
415
509
  </div>
416
-
417
- <PageInstructions
418
- description="Review observability metrics and trace summaries."
419
- sections={[
420
- { title: 'What this page is for', content: 'This page shows real-time metrics for event volume, error rates, latency percentiles, and pipeline execution.' },
421
- { title: 'How to read the cards', content: 'The stats cards show Total Events, Error Rate, P95 Latency, and Active Pipelines. Values change color when thresholds are exceeded (e.g., error rate above 5% or p95 above 2000ms).' },
422
- { title: 'How to filter and interpret', content: 'Use the time range selector (1h, 24h, 7d) and refresh interval to control the window. Charts below the cards show trends for events, errors, latency, and pipeline success or failure.' },
423
- { title: 'Important notes', content: 'Alert events are listed when metrics cross their configured thresholds. Top actors show the principals driving the most events.' },
424
- ]}
425
- />
426
-
427
510
  {/* Stats Cards */}
428
511
  <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
429
512
  {statsCards.map((card) => (
@@ -453,7 +536,7 @@ export function ObservabilityDashboard() {
453
536
  <div className="bg-white rounded-lg border border-slate-200 p-6">
454
537
  <h3 className="text-lg font-semibold text-slate-900 mb-4">Event Volume</h3>
455
538
  <div className="h-64">
456
- <ResponsiveContainer width="100%" height="100%">
539
+ <ResponsiveContainer width="100%" height="100%" debounce={50}>
457
540
  <LineChart data={eventVolume || []}>
458
541
  <CartesianGrid strokeDasharray="3 3" stroke="#e2e8f0" />
459
542
  <XAxis dataKey="bucket" tick={{ fontSize: 12 }} />
@@ -514,7 +597,7 @@ export function ObservabilityDashboard() {
514
597
  <h3 className="text-lg font-semibold text-slate-900 mb-4">Pipeline Health</h3>
515
598
  <div className="h-64">
516
599
  {pipelineChartData.length > 0 ? (
517
- <ResponsiveContainer width="100%" height="100%">
600
+ <ResponsiveContainer width="100%" height="100%" debounce={50}>
518
601
  <BarChart data={pipelineChartData}>
519
602
  <CartesianGrid strokeDasharray="3 3" stroke="#e2e8f0" />
520
603
  <XAxis dataKey="name" tick={{ fontSize: 12 }} />
@@ -611,10 +694,10 @@ export function ObservabilityDashboard() {
611
694
  </div>
612
695
  )
613
696
  }
614
- // CIL[DOC-VECTOR type="context" content="purpose='Render the observability dashboard'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts"]
615
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
616
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
617
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
618
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
619
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
620
- // CIL[END stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:ObservabilityDashboard:component"]
697
+ // CIL[END stable_id="~/.framework/src/pages/admin/ObservabilityDashboard.tsx:ObservabilityDashboard:component"]
698
+
699
+
700
+
701
+
702
+
703
+