spine-framework 0.3.124 → 0.3.126

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 (319) hide show
  1. package/.framework/cli/commands/agents.ts +35 -37
  2. package/.framework/cli/commands/auth.ts +35 -34
  3. package/.framework/cli/commands/create-app.ts +104 -40
  4. package/.framework/cli/commands/dev.ts +104 -69
  5. package/.framework/cli/commands/doctor.ts +179 -69
  6. package/.framework/cli/commands/generate.ts +83 -143
  7. package/.framework/cli/commands/init.ts +72 -34
  8. package/.framework/cli/commands/install-app.ts +260 -125
  9. package/.framework/cli/commands/items.ts +33 -44
  10. package/.framework/cli/commands/migrate.ts +122 -40
  11. package/.framework/cli/commands/migrations.ts +33 -40
  12. package/.framework/cli/commands/pipelines.ts +31 -39
  13. package/.framework/cli/commands/status.ts +47 -23
  14. package/.framework/cli/commands/system.ts +47 -37
  15. package/.framework/cli/commands/test.ts +112 -68
  16. package/.framework/cli/commands/validate-app.ts +215 -121
  17. package/.framework/cli/context.ts +112 -130
  18. package/.framework/cli/env-loader.ts +47 -18
  19. package/.framework/cli/index.ts +81 -42
  20. package/.framework/docs/runtime-types.md +1024 -0
  21. package/.framework/functions/_shared/agent-runner.ts +1296 -961
  22. package/.framework/functions/_shared/app-manifest.ts +82 -68
  23. package/.framework/functions/_shared/audit.ts +135 -83
  24. package/.framework/functions/_shared/{cil-state.ts → cil.ts} +158 -56
  25. package/.framework/functions/_shared/db.ts +80 -126
  26. package/.framework/functions/_shared/hash-api-key.ts +63 -0
  27. package/.framework/functions/_shared/index.ts +224 -335
  28. package/.framework/functions/_shared/kb.ts +319 -0
  29. package/.framework/functions/_shared/llm.ts +92 -0
  30. package/.framework/functions/_shared/logging.ts +288 -0
  31. package/.framework/functions/_shared/middleware.ts +329 -365
  32. package/.framework/functions/_shared/outcomes.ts +36 -0
  33. package/.framework/functions/_shared/permissions.ts +359 -643
  34. package/.framework/functions/_shared/pipeline-runner.ts +243 -316
  35. package/.framework/functions/_shared/principal.ts +376 -468
  36. package/.framework/functions/_shared/resolve-credentials.ts +102 -0
  37. package/.framework/functions/_shared/resolve-ids.ts +188 -16
  38. package/.framework/functions/_shared/retry-deliveries.ts +104 -0
  39. package/.framework/functions/_shared/schema-utils.ts +611 -373
  40. package/.framework/functions/_shared/testing.ts +207 -137
  41. package/.framework/functions/_shared/tracing.ts +276 -0
  42. package/.framework/functions/_shared/trigger-engine.ts +159 -211
  43. package/.framework/functions/_shared/webhook-registration.ts +95 -81
  44. package/.framework/functions/_shared/webhook-registry.ts +153 -75
  45. package/.framework/functions/account-nodes.ts +31 -53
  46. package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
  47. package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
  48. package/.framework/functions/adapters/openai-outbound.ts +40 -0
  49. package/.framework/functions/admin-data.ts +685 -537
  50. package/.framework/functions/admin-funnel.ts +31 -20
  51. package/.framework/functions/admin-install-funnel.ts +47 -28
  52. package/.framework/functions/admin-signals.ts +47 -29
  53. package/.framework/functions/ai-agents.ts +122 -147
  54. package/.framework/functions/ai-interactions.ts +180 -90
  55. package/.framework/functions/api-keys.ts +250 -192
  56. package/.framework/functions/apps.ts +203 -197
  57. package/.framework/functions/auth.ts +98 -91
  58. package/.framework/functions/cil-agent-ingest.ts +773 -0
  59. package/.framework/functions/cil-agent.ts +592 -0
  60. package/.framework/functions/cil-callmap.ts +1227 -0
  61. package/.framework/functions/cil-config.ts +583 -0
  62. package/.framework/functions/cil-context.ts +445 -0
  63. package/.framework/functions/cil-doc.ts +1752 -0
  64. package/.framework/functions/cil-embeddings.ts +1202 -0
  65. package/.framework/functions/cil-graph.ts +585 -0
  66. package/.framework/functions/cil-ingest.ts +2416 -0
  67. package/.framework/functions/cil-pipeline.ts +318 -0
  68. package/.framework/functions/cil-project.ts +499 -0
  69. package/.framework/functions/cil-validate.ts +469 -0
  70. package/.framework/functions/debug-auth.ts +73 -53
  71. package/.framework/functions/deliveries.ts +117 -0
  72. package/.framework/functions/embeddings.ts +528 -516
  73. package/.framework/functions/eval-harness.ts +158 -106
  74. package/.framework/functions/integration-outbound.ts +311 -0
  75. package/.framework/functions/integration-routes.ts +240 -466
  76. package/.framework/functions/integrations.ts +132 -140
  77. package/.framework/functions/invites.ts +401 -201
  78. package/.framework/functions/item-progress.ts +113 -53
  79. package/.framework/functions/kb.ts +28 -0
  80. package/.framework/functions/logs.ts +239 -222
  81. package/.framework/functions/observability.ts +308 -259
  82. package/.framework/functions/pipeline-executions.ts +179 -235
  83. package/.framework/functions/pipelines.ts +163 -205
  84. package/.framework/functions/prompt-configs.ts +109 -156
  85. package/.framework/functions/roles.ts +97 -147
  86. package/.framework/functions/system-cron.ts +132 -218
  87. package/.framework/functions/system.ts +112 -52
  88. package/.framework/functions/tests.ts +32 -28
  89. package/.framework/functions/timers.ts +162 -210
  90. package/.framework/functions/triggers.ts +282 -346
  91. package/.framework/functions/types.ts +283 -400
  92. package/.framework/migrations/001_core_schema.sql +630 -0
  93. package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
  94. package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
  95. package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
  96. package/.framework/migrations/005_core_observability.sql +598 -0
  97. package/.framework/migrations/006_security_hardening_rls.sql +97 -0
  98. package/.framework/migrations/007_kb_article_list.sql +237 -0
  99. package/.framework/migrations/008_items_target.sql +8 -0
  100. package/.framework/migrations/009_roles_slug_unique.sql +11 -0
  101. package/.framework/public/spine.config.json +91 -0
  102. package/.framework/scripts/app-install-cli.ts +112 -98
  103. package/.framework/src/App.tsx +67 -20
  104. package/.framework/src/apps/admin/index.tsx +97 -27
  105. package/.framework/src/components/AppWrapper.tsx +50 -11
  106. package/.framework/src/components/CustomAppLoader.tsx +131 -22
  107. package/.framework/src/components/admin/AdminListPage.tsx +75 -8
  108. package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
  109. package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
  110. package/.framework/src/components/admin/PageInstructions.tsx +49 -0
  111. package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
  112. package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
  113. package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
  114. package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
  115. package/.framework/src/components/app-sidebar.tsx +50 -3
  116. package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
  117. package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
  118. package/.framework/src/components/kb/KBArticleList.tsx +557 -0
  119. package/.framework/src/components/layout/AppShell.tsx +54 -16
  120. package/.framework/src/components/layout/Header.tsx +50 -38
  121. package/.framework/src/components/layout/Layout.tsx +48 -32
  122. package/.framework/src/components/layout/Sidebar.tsx +167 -16
  123. package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
  124. package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
  125. package/.framework/src/components/runtime/DataFilters.tsx +78 -1
  126. package/.framework/src/components/runtime/DataHeader.tsx +32 -29
  127. package/.framework/src/components/runtime/DataListPage.tsx +161 -2
  128. package/.framework/src/components/runtime/DataStats.tsx +48 -1
  129. package/.framework/src/components/runtime/DataTable.tsx +153 -1
  130. package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
  131. package/.framework/src/components/runtime/index.ts +16 -9
  132. package/.framework/src/components/search-form.tsx +33 -1
  133. package/.framework/src/components/shared/AgentView.tsx +48 -51
  134. package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
  135. package/.framework/src/components/shared/InviteManager.tsx +113 -52
  136. package/.framework/src/components/shared/MemberList.tsx +182 -0
  137. package/.framework/src/components/shared/SchemaFields.tsx +96 -78
  138. package/.framework/src/components/ui/DataTable.tsx +86 -56
  139. package/.framework/src/components/ui/Form.tsx +188 -109
  140. package/.framework/src/components/ui/ItemCard.tsx +86 -58
  141. package/.framework/src/components/ui/ItemListView.tsx +88 -61
  142. package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
  143. package/.framework/src/components/ui/Modal.tsx +81 -4
  144. package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
  145. package/.framework/src/components/ui/accordion.tsx +97 -5
  146. package/.framework/src/components/ui/alert-dialog.tsx +225 -13
  147. package/.framework/src/components/ui/alert.tsx +113 -6
  148. package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
  149. package/.framework/src/components/ui/avatar.tsx +129 -7
  150. package/.framework/src/components/ui/badge.tsx +65 -3
  151. package/.framework/src/components/ui/breadcrumb.tsx +145 -8
  152. package/.framework/src/components/ui/button-group.tsx +81 -4
  153. package/.framework/src/components/ui/button.tsx +49 -2
  154. package/.framework/src/components/ui/calendar.tsx +65 -3
  155. package/.framework/src/components/ui/card.tsx +145 -8
  156. package/.framework/src/components/ui/carousel.tsx +129 -7
  157. package/.framework/src/components/ui/chart.tsx +161 -10
  158. package/.framework/src/components/ui/checkbox.tsx +49 -2
  159. package/.framework/src/components/ui/collapsible.tsx +81 -5
  160. package/.framework/src/components/ui/combobox.tsx +305 -20
  161. package/.framework/src/components/ui/command.tsx +177 -11
  162. package/.framework/src/components/ui/context-menu.tsx +273 -17
  163. package/.framework/src/components/ui/dialog.tsx +209 -27
  164. package/.framework/src/components/ui/direction.tsx +64 -4
  165. package/.framework/src/components/ui/drawer.tsx +193 -12
  166. package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
  167. package/.framework/src/components/ui/empty.tsx +145 -9
  168. package/.framework/src/components/ui/field.tsx +209 -14
  169. package/.framework/src/components/ui/hover-card.tsx +81 -4
  170. package/.framework/src/components/ui/input-group.tsx +162 -10
  171. package/.framework/src/components/ui/input-otp.tsx +98 -5
  172. package/.framework/src/components/ui/input.tsx +49 -2
  173. package/.framework/src/components/ui/item.tsx +225 -13
  174. package/.framework/src/components/ui/kbd.tsx +65 -3
  175. package/.framework/src/components/ui/label.tsx +49 -2
  176. package/.framework/src/components/ui/menubar.tsx +289 -17
  177. package/.framework/src/components/ui/native-select.tsx +97 -5
  178. package/.framework/src/components/ui/navigation-menu.tsx +177 -10
  179. package/.framework/src/components/ui/pagination.tsx +161 -9
  180. package/.framework/src/components/ui/popover.tsx +145 -8
  181. package/.framework/src/components/ui/progress.tsx +49 -2
  182. package/.framework/src/components/ui/radio-group.tsx +65 -3
  183. package/.framework/src/components/ui/resizable.tsx +82 -4
  184. package/.framework/src/components/ui/scroll-area.tsx +65 -3
  185. package/.framework/src/components/ui/select.tsx +193 -11
  186. package/.framework/src/components/ui/separator.tsx +49 -2
  187. package/.framework/src/components/ui/sheet.tsx +193 -11
  188. package/.framework/src/components/ui/sidebar.tsx +481 -38
  189. package/.framework/src/components/ui/skeleton.tsx +49 -2
  190. package/.framework/src/components/ui/slider.tsx +49 -2
  191. package/.framework/src/components/ui/sonner.tsx +49 -2
  192. package/.framework/src/components/ui/spinner.tsx +49 -2
  193. package/.framework/src/components/ui/switch.tsx +49 -2
  194. package/.framework/src/components/ui/table-primitives.tsx +160 -33
  195. package/.framework/src/components/ui/table.tsx +161 -9
  196. package/.framework/src/components/ui/tabs.tsx +113 -6
  197. package/.framework/src/components/ui/textarea.tsx +49 -2
  198. package/.framework/src/components/ui/toggle-group.tsx +81 -4
  199. package/.framework/src/components/ui/toggle.tsx +65 -3
  200. package/.framework/src/components/ui/tooltip.tsx +97 -5
  201. package/.framework/src/contexts/AppContext.tsx +129 -45
  202. package/.framework/src/contexts/AuthContext.tsx +187 -144
  203. package/.framework/src/hooks/use-mobile.ts +48 -2
  204. package/.framework/src/hooks/useApi.ts +208 -159
  205. package/.framework/src/hooks/useAppPath.ts +32 -23
  206. package/.framework/src/hooks/useApps.ts +51 -20
  207. package/.framework/src/hooks/useEntityList.ts +32 -78
  208. package/.framework/src/hooks/useEntityRecord.ts +35 -96
  209. package/.framework/src/hooks/useForm.ts +32 -92
  210. package/.framework/src/hooks/useListSchema.ts +49 -78
  211. package/.framework/src/hooks/useSchemaRecord.ts +114 -105
  212. package/.framework/src/lib/api.ts +195 -116
  213. package/.framework/src/lib/supabase.ts +98 -64
  214. package/.framework/src/lib/utils.ts +287 -151
  215. package/.framework/src/main.tsx +49 -3
  216. package/.framework/src/pages/DashboardPage.tsx +52 -29
  217. package/.framework/src/pages/NotFoundPage.tsx +32 -10
  218. package/.framework/src/pages/SetupPage.tsx +32 -12
  219. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
  220. package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
  221. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
  222. package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
  223. package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
  224. package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
  225. package/.framework/src/pages/admin/AppsPage.tsx +49 -2
  226. package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
  227. package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
  228. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
  229. package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
  230. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
  231. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
  232. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
  233. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
  234. package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
  235. package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
  236. package/.framework/src/pages/admin/LogsPage.tsx +422 -75
  237. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
  238. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
  239. package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
  240. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
  241. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
  242. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
  243. package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
  244. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
  245. package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
  246. package/.framework/src/pages/admin/RolesPage.tsx +171 -18
  247. package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
  248. package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
  249. package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
  250. package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
  251. package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
  252. package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
  253. package/.framework/src/pages/admin/TimersPage.tsx +48 -20
  254. package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
  255. package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
  256. package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
  257. package/.framework/src/pages/admin/TypesPage.tsx +48 -20
  258. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
  259. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
  260. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
  261. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
  262. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
  263. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
  264. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
  265. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
  266. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
  267. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  268. package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
  269. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
  270. package/.framework/src/pages/auth/LoginPage.tsx +50 -23
  271. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
  272. package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
  273. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
  274. package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
  275. package/.framework/src/types/auth.ts +128 -71
  276. package/.framework/src/types/types.ts +373 -157
  277. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
  278. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
  279. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
  280. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
  281. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
  282. package/docs/README.md +9 -130
  283. package/netlify.toml +5 -2
  284. package/package.json +13 -25
  285. package/scripts/kb-ingest-docs.ts +203 -0
  286. package/spine.config.json +65 -4
  287. package/.framework/migrations/001_schema.sql +0 -425
  288. package/.framework/migrations/002_rls_and_functions.sql +0 -763
  289. package/.framework/migrations/004_enhancements.sql +0 -43
  290. package/.framework/migrations/005_auth_user_trigger.sql +0 -105
  291. package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
  292. package/.framework/migrations/016_invites.sql +0 -27
  293. package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
  294. package/.framework/migrations/018_apps_required_roles.sql +0 -17
  295. package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
  296. package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
  297. package/.framework/migrations/021_app_domains.sql +0 -112
  298. package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
  299. package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
  300. package/.framework/migrations/024_messages_account_id.sql +0 -9
  301. package/.framework/migrations/025_retype_threads_messages.sql +0 -240
  302. package/.framework/migrations/026_fix_rls_policies.sql +0 -47
  303. package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
  304. package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
  305. package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
  306. package/.framework/migrations/030_messages_updated_by.sql +0 -6
  307. package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
  308. package/docs/APPS.md +0 -232
  309. package/docs/ARCHITECTURE.md +0 -246
  310. package/docs/INSTALL.md +0 -155
  311. package/docs/design-schema-spec.md +0 -1837
  312. package/docs/dev-guides/01-create-an-app.md +0 -183
  313. package/docs/dev-guides/02-create-a-function.md +0 -178
  314. package/docs/dev-guides/03-create-a-component.md +0 -178
  315. package/docs/dev-guides/04-webhook-handlers.md +0 -129
  316. package/docs/dev-guides/05-testing.md +0 -168
  317. package/docs/dev-guides/README.md +0 -40
  318. package/docs/npm-packages-plan.md +0 -288
  319. package/docs/spine-core--api-reference.md +0 -822
@@ -1,3 +1,20 @@
1
+
2
+
3
+ // CIL[BEGIN chunk_id="DataDetailPage_module_header_1783929048" type="module_header" identity="imports" parent="none"]
4
+ // CIL[DOC-MACRO purpose="Import dependencies for entity detail page component"]
5
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage imports for hooks and components"]
6
+ // CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
7
+ // CIL[DOC-CONTRACT inputs="none" outputs="imports" errors="none" side_effects="none"]
8
+ // CIL[DOC-MICRO logic_summary="Imports React hooks, routing, entity hooks, and UI components" notable_decisions="[]"]
9
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
10
+ // CIL[DOC-STABILITY stability="stable"]
11
+ // CIL[DOC-AUDIENCE audience="developer"]
12
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
13
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
14
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
15
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
16
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
17
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1
18
  import { useState, useEffect } from 'react'
2
19
  import { useParams, useSearchParams } from 'react-router-dom'
3
20
  import { useEntityRecord } from '../../hooks/useEntityRecord'
@@ -6,17 +23,88 @@ import { SchemaDetailForm } from './SchemaDetailForm'
6
23
  import { Button } from '../ui/button'
7
24
  import { Card, CardContent } from '../ui/card'
8
25
  import { Skeleton } from '../ui/skeleton'
9
-
26
+ // CIL[END chunk_id="DataDetailPage_module_header_1783929048"]
27
+ // CIL[BEGIN chunk_id="DataDetailPage_datadetailpage_1783929048" type="function" identity="DataDetailPage" parent="none"]
28
+ // CIL[DOC-MACRO purpose="Render main detail page with header and form"]
29
+ // CIL[DOC-RESPONSIBILITY responsibility="Display complete entity detail interface"]
30
+ // CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/migrations/015_simplify_apps_table.sql\"]"]
31
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX detail page" errors="none" side_effects="none"]
32
+ // CIL[DOC-MICRO logic_summary="Render header and form with all edit/create functionality" notable_decisions="[]"]
33
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
34
+ // CIL[DOC-STABILITY stability="stable"]
35
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/migrations/015_simplify_apps_table.sql."]
36
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
37
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
38
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
39
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
40
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
10
41
  export function DataDetailPage() {
42
+ // CIL[BEGIN chunk_id="DataDetailPage_params_1783929048" type="variable_declaration" identity="params" parent="DataDetailPage_datadetailpage_1783929048"]
43
+ // CIL[DOC-MACRO purpose="Extract URL parameters for entity, id, and search params"]
44
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle params"]
45
+ // CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
46
+ // CIL[DOC-CONTRACT inputs="none" outputs="entity,id,typeSlug,searchParams" errors="none" side_effects="none"]
47
+ // CIL[DOC-MICRO logic_summary="Extract entity, id, typeSlug from params and manage search params" notable_decisions="[]"]
48
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
49
+ // CIL[DOC-STABILITY stability="stable"]
50
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
51
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
52
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
53
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
54
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
55
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
11
56
  const { entity, id, typeSlug } = useParams<{ entity: string; id: string; typeSlug?: string }>()
12
57
  const [searchParams, setSearchParams] = useSearchParams()
58
+ // CIL[END chunk_id="DataDetailPage_params_1783929048"]
13
59
 
14
- const isCreating = !id
60
+ // CIL[BEGIN chunk_id="DataDetailPage_stateflags_1783929048" type="variable_declaration" identity="stateFlags" parent="DataDetailPage_datadetailpage_1783929048"]
61
+ // CIL[DOC-MACRO purpose="Determine create/edit mode from URL parameters"]
62
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle stateFlags"]
63
+ // CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
64
+ // CIL[DOC-CONTRACT inputs="none" outputs="isCreating,isEditing" errors="none" side_effects="none"]
65
+ // CIL[DOC-MICRO logic_summary="Set create mode from missing id, edit mode from search param" notable_decisions="[]"]
66
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
67
+ // CIL[DOC-STABILITY stability="stable"]
68
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, \."]
69
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
70
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
71
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
72
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
73
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
74
+ const recordId = id === 'new' ? undefined : id
75
+ const isCreating = !recordId
15
76
  const isEditing = searchParams.get('edit') === 'true' || isCreating
77
+ // CIL[END chunk_id="DataDetailPage_stateflags_1783929048"]
16
78
 
79
+ // CIL[BEGIN chunk_id="DataDetailPage_config_1783929048" type="variable_declaration" identity="config" parent="DataDetailPage_datadetailpage_1783929048"]
80
+ // CIL[DOC-MACRO purpose="Create configuration object for entity record operations"]
81
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle config"]
82
+ // CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
83
+ // CIL[DOC-CONTRACT inputs="none" outputs="config:object" errors="none" side_effects="none"]
84
+ // CIL[DOC-MICRO logic_summary="Configure entity details, API actions, and display settings" notable_decisions="[]"]
85
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
86
+ // CIL[DOC-STABILITY stability="stable"]
87
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, \."]
88
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
89
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
90
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
91
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
92
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
93
+ const defaultTypeSlugs: Record<string, string> = {
94
+ accounts: 'account',
95
+ people: 'person',
96
+ items: 'item',
97
+ threads: 'thread',
98
+ messages: 'message',
99
+ links: 'link',
100
+ attachments: 'attachment',
101
+ watchers: 'watcher',
102
+ item_progress: 'item_progress'
103
+ }
104
+
17
105
  const config = {
18
106
  entity: entity || '',
19
- typeSlug: typeSlug || undefined,
107
+ typeSlug: typeSlug || (entity ? defaultTypeSlugs[entity] : undefined),
20
108
  icon: 'database',
21
109
  displayField: 'display_name',
22
110
  api: {
@@ -26,7 +114,22 @@ export function DataDetailPage() {
26
114
  updateAction: 'update'
27
115
  }
28
116
  }
117
+ // CIL[END chunk_id="DataDetailPage_config_1783929048"]
29
118
 
119
+ // CIL[BEGIN chunk_id="DataDetailPage_entityrecord_1783929048" type="variable_declaration" identity="entityRecord" parent="DataDetailPage_datadetailpage_1783929048"]
120
+ // CIL[DOC-MACRO purpose="Fetch entity record and management functions"]
121
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle entityRecord"]
122
+ // CIL[DOC-CONTEXT module="entityRecord" layer="unknown" related_files="[]"]
123
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
124
+ // CIL[DOC-MICRO logic_summary="Implements entityRecord" notable_decisions="[]"]
125
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
126
+ // CIL[DOC-STABILITY stability="stable"]
127
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
128
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
129
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
130
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
131
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
132
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
30
133
  const {
31
134
  record,
32
135
  fieldPermissions,
@@ -37,19 +140,79 @@ export function DataDetailPage() {
37
140
  delete: deleteRecord,
38
141
  saving,
39
142
  deleting
40
- } = useEntityRecord(entity!, id, config)
143
+ } = useEntityRecord(entity!, recordId, config)
144
+ // CIL[END chunk_id="DataDetailPage_entityrecord_1783929048"]
41
145
 
146
+ // CIL[BEGIN chunk_id="DataDetailPage_schema_1783929048" type="variable_declaration" identity="schema" parent="DataDetailPage_datadetailpage_1783929048"]
147
+ // CIL[DOC-MACRO purpose="Extract schema and view from record data"]
148
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle schema"]
149
+ // CIL[DOC-CONTEXT module="schema" layer="unknown" related_files="[]"]
150
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
151
+ // CIL[DOC-MICRO logic_summary="Implements schema" notable_decisions="[]"]
152
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
153
+ // CIL[DOC-STABILITY stability="stable"]
154
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
155
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
156
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
157
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
158
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
159
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
42
160
  const schema = record?.design_schema || null
43
161
  const view = schema?.views?.default_detail || null
162
+ // CIL[END chunk_id="DataDetailPage_schema_1783929048"]
44
163
 
164
+ // CIL[BEGIN chunk_id="DataDetailPage_title_1783929048" type="variable_declaration" identity="title" parent="DataDetailPage_datadetailpage_1783929048"]
165
+ // CIL[DOC-MACRO purpose="Generate display title for entity record"]
166
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle title"]
167
+ // CIL[DOC-CONTEXT module="title" layer="unknown" related_files="[]"]
168
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
169
+ // CIL[DOC-MICRO logic_summary="Implements title" notable_decisions="[]"]
170
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
171
+ // CIL[DOC-STABILITY stability="stable"]
172
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
173
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
174
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
175
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
176
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
177
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
45
178
  const displayField = schema?.display_field || config.displayField
46
179
  const FALLBACK_FIELDS = ['full_name', 'display_name', 'name', 'title', 'slug', 'email']
47
180
  const recordTitle = record?.[displayField]
48
181
  ?? FALLBACK_FIELDS.map(f => record?.[f]).find(v => v != null)
49
182
  ?? 'Untitled'
183
+ // CIL[END chunk_id="DataDetailPage_title_1783929048"]
50
184
 
185
+ // CIL[BEGIN chunk_id="DataDetailPage_formdata_1783929048" type="variable_declaration" identity="formData" parent="DataDetailPage_datadetailpage_1783929048"]
186
+ // CIL[DOC-MACRO purpose="Manage form state for entity editing"]
187
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle formData"]
188
+ // CIL[DOC-CONTEXT module="formData" layer="unknown" related_files="[]"]
189
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
190
+ // CIL[DOC-MICRO logic_summary="Implements formData" notable_decisions="[]"]
191
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
192
+ // CIL[DOC-STABILITY stability="stable"]
193
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
194
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
195
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
196
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
197
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
198
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
51
199
  const [formData, setFormData] = useState<Record<string, any>>({})
200
+ // CIL[END chunk_id="DataDetailPage_formdata_1783929048"]
52
201
 
202
+ // CIL[BEGIN chunk_id="DataDetailPage_useeffect_1783929048" type="function" identity="useEffect" parent="DataDetailPage_datadetailpage_1783929048"]
203
+ // CIL[DOC-MACRO purpose="Initialize form data when record loads or in create mode"]
204
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle useEffect"]
205
+ // CIL[DOC-CONTEXT module="useEffect" layer="unknown" related_files="[]"]
206
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
207
+ // CIL[DOC-MICRO logic_summary="Implements useEffect" notable_decisions="[]"]
208
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
209
+ // CIL[DOC-STABILITY stability="stable"]
210
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
211
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
212
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
213
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
214
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
215
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
53
216
  useEffect(() => {
54
217
  if (record && view) {
55
218
  const initialData: Record<string, any> = {}
@@ -69,15 +232,60 @@ export function DataDetailPage() {
69
232
  setFormData({})
70
233
  }
71
234
  }, [record, isCreating, view, schema])
235
+ // CIL[END chunk_id="DataDetailPage_useeffect_1783929048"]
72
236
 
237
+ // CIL[BEGIN chunk_id="DataDetailPage_handlefieldchange_1783929048" type="function" identity="handleFieldChange" parent="DataDetailPage_datadetailpage_1783929048"]
238
+ // CIL[DOC-MACRO purpose="Update form field value when user edits"]
239
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle handleFieldChange"]
240
+ // CIL[DOC-CONTEXT module="handleFieldChange" layer="unknown" related_files="[]"]
241
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
242
+ // CIL[DOC-MICRO logic_summary="Implements handleFieldChange" notable_decisions="[]"]
243
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
244
+ // CIL[DOC-STABILITY stability="stable"]
245
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
246
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
247
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
248
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
249
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
250
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
73
251
  const handleFieldChange = (key: string, value: any) => {
74
252
  setFormData((prev) => ({ ...prev, [key]: value }))
75
253
  }
254
+ // CIL[END chunk_id="DataDetailPage_handlefieldchange_1783929048"]
76
255
 
256
+ // CIL[BEGIN chunk_id="DataDetailPage_handleedit_1783929048" type="function" identity="handleEdit" parent="DataDetailPage_datadetailpage_1783929048"]
257
+ // CIL[DOC-MACRO purpose="Enable edit mode for the entity record"]
258
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle handleEdit"]
259
+ // CIL[DOC-CONTEXT module="handleEdit" layer="unknown" related_files="[]"]
260
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
261
+ // CIL[DOC-MICRO logic_summary="Implements handleEdit" notable_decisions="[]"]
262
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
263
+ // CIL[DOC-STABILITY stability="stable"]
264
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
265
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
266
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
267
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
268
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
269
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
77
270
  const handleEdit = () => {
78
271
  setSearchParams({ edit: 'true' })
79
272
  }
273
+ // CIL[END chunk_id="DataDetailPage_handleedit_1783929048"]
80
274
 
275
+ // CIL[BEGIN chunk_id="DataDetailPage_handlecancel_1783929048" type="function" identity="handleCancel" parent="DataDetailPage_datadetailpage_1783929048"]
276
+ // CIL[DOC-MACRO purpose="Handle cancel action with navigation or reset"]
277
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle handleCancel"]
278
+ // CIL[DOC-CONTEXT module="handleCancel" layer="unknown" related_files="[]"]
279
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
280
+ // CIL[DOC-MICRO logic_summary="Implements handleCancel" notable_decisions="[]"]
281
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
282
+ // CIL[DOC-STABILITY stability="stable"]
283
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
284
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
285
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
286
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
287
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
288
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
81
289
  const handleCancel = () => {
82
290
  if (isCreating) {
83
291
  window.location.href = `/spine-framework/admin/runtime/${entity}`
@@ -100,7 +308,22 @@ export function DataDetailPage() {
100
308
  }
101
309
  }
102
310
  }
311
+ // CIL[END chunk_id="DataDetailPage_handlecancel_1783929048"]
103
312
 
313
+ // CIL[BEGIN chunk_id="DataDetailPage_handlesave_1783929048" type="function" identity="handleSave" parent="DataDetailPage_datadetailpage_1783929048"]
314
+ // CIL[DOC-MACRO purpose="Save entity record and handle navigation after save"]
315
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle handleSave"]
316
+ // CIL[DOC-CONTEXT module="handleSave" layer="unknown" related_files="[]"]
317
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
318
+ // CIL[DOC-MICRO logic_summary="Implements handleSave" notable_decisions="[]"]
319
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
320
+ // CIL[DOC-STABILITY stability="stable"]
321
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
322
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
323
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
324
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
325
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
326
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
104
327
  const handleSave = async () => {
105
328
  await save(formData)
106
329
  if (!isCreating) {
@@ -109,14 +332,44 @@ export function DataDetailPage() {
109
332
  window.location.href = `/spine-framework/admin/runtime/${entity}`
110
333
  }
111
334
  }
335
+ // CIL[END chunk_id="DataDetailPage_handlesave_1783929048"]
112
336
 
337
+ // CIL[BEGIN chunk_id="DataDetailPage_handledelete_1783929048" type="function" identity="handleDelete" parent="DataDetailPage_datadetailpage_1783929048"]
338
+ // CIL[DOC-MACRO purpose="handleDelete"]
339
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle handleDelete"]
340
+ // CIL[DOC-CONTEXT module="handleDelete" layer="unknown" related_files="[]"]
341
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
342
+ // CIL[DOC-MICRO logic_summary="Implements handleDelete" notable_decisions="[]"]
343
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
344
+ // CIL[DOC-STABILITY stability="stable"]
345
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
346
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
347
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
348
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
349
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
350
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
113
351
  const handleDelete = async () => {
114
352
  if (confirm(`Are you sure you want to delete this ${config?.entity?.slice(0, -1) || 'record'}?`)) {
115
353
  await deleteRecord()
116
354
  window.location.href = `/spine-framework/admin/runtime/${entity}`
117
355
  }
118
356
  }
357
+ // CIL[END chunk_id="DataDetailPage_handledelete_1783929048"]
119
358
 
359
+ // CIL[BEGIN chunk_id="DataDetailPage_loadingstate_1783929048" type="render_block" identity="loadingState" parent="DataDetailPage_datadetailpage_1783929048"]
360
+ // CIL[DOC-MACRO purpose="Render loading skeleton for record fetching"]
361
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle loadingState"]
362
+ // CIL[DOC-CONTEXT module="loadingState" layer="unknown" related_files="[]"]
363
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
364
+ // CIL[DOC-MICRO logic_summary="Implements loadingState" notable_decisions="[]"]
365
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
366
+ // CIL[DOC-STABILITY stability="stable"]
367
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
368
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
369
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
370
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
371
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
372
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
120
373
  if (loading) {
121
374
  return (
122
375
  <Card>
@@ -128,7 +381,22 @@ export function DataDetailPage() {
128
381
  </Card>
129
382
  )
130
383
  }
384
+ // CIL[END chunk_id="DataDetailPage_loadingstate_1783929048"]
131
385
 
386
+ // CIL[BEGIN chunk_id="DataDetailPage_errorstate_1783929048" type="render_block" identity="errorState" parent="DataDetailPage_datadetailpage_1783929048"]
387
+ // CIL[DOC-MACRO purpose="Render error state for record loading failures"]
388
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle errorState"]
389
+ // CIL[DOC-CONTEXT module="errorState" layer="unknown" related_files="[]"]
390
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
391
+ // CIL[DOC-MICRO logic_summary="Implements errorState" notable_decisions="[]"]
392
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
393
+ // CIL[DOC-STABILITY stability="stable"]
394
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
395
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
396
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
397
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
398
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
399
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
132
400
  if (error || !schema || !view) {
133
401
  return (
134
402
  <Card>
@@ -139,7 +407,22 @@ export function DataDetailPage() {
139
407
  </Card>
140
408
  )
141
409
  }
410
+ // CIL[END chunk_id="DataDetailPage_errorstate_1783929048"]
142
411
 
412
+ // CIL[BEGIN chunk_id="DataDetailPage_mainrender_1783929048" type="render_block" identity="mainRender" parent="DataDetailPage_datadetailpage_1783929048"]
413
+ // CIL[DOC-MACRO purpose="Render main detail page with header and form"]
414
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle mainRender"]
415
+ // CIL[DOC-CONTEXT module="mainRender" layer="unknown" related_files="[]"]
416
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
417
+ // CIL[DOC-MICRO logic_summary="Implements mainRender" notable_decisions="[]"]
418
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
419
+ // CIL[DOC-STABILITY stability="stable"]
420
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
421
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
422
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
423
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
424
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
425
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
143
426
  return (
144
427
  <div className="space-y-6">
145
428
  <DataDetailHeader
@@ -168,4 +451,6 @@ export function DataDetailPage() {
168
451
  />
169
452
  </div>
170
453
  )
454
+ // CIL[END chunk_id="DataDetailPage_mainrender_1783929048"]
171
455
  }
456
+ // CIL[END chunk_id="DataDetailPage_datadetailpage_1783929048"]
@@ -1,3 +1,20 @@
1
+
2
+
3
+ // CIL[BEGIN chunk_id="DataFilters_module_header_1783929048" type="module_header" identity="imports_and_types" parent="none"]
4
+ // CIL[DOC-MACRO purpose="Import dependencies and define filter component types"]
5
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage imports and interface for data filters"]
6
+ // CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
7
+ // CIL[DOC-CONTRACT inputs="none" outputs="types" errors="none" side_effects="none"]
8
+ // CIL[DOC-MICRO logic_summary="Imports EntityFilter type, UI components for filters" notable_decisions="[]"]
9
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
10
+ // CIL[DOC-STABILITY stability="stable"]
11
+ // CIL[DOC-AUDIENCE audience="developer"]
12
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
13
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
14
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
15
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
16
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
17
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1
18
  import { EntityFilter } from '../../types/types'
2
19
  import { Card, CardContent } from '../ui/card'
3
20
  import { Input } from '../ui/input'
@@ -11,14 +28,72 @@ interface DataFiltersProps {
11
28
  onChange: (values: Record<string, any>) => void
12
29
  onClear: () => void
13
30
  }
14
-
31
+ // CIL[END chunk_id="DataFilters_module_header_1783929048"]
32
+ // CIL[BEGIN chunk_id="DataFilters_datafilters_1783929048" type="function" identity="DataFilters" parent="none"]
33
+ // CIL[DOC-MACRO purpose="Render filter UI with search, enum, and boolean inputs"]
34
+ // CIL[DOC-RESPONSIBILITY responsibility="Display all filter controls and clear button"]
35
+ // CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
36
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX filter card" errors="none" side_effects="calls handleFilterChange,onClear"]
37
+ // CIL[DOC-MICRO logic_summary="Map filter types to UI components, show clear button when active" notable_decisions="[]"]
38
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
39
+ // CIL[DOC-STABILITY stability="stable"]
40
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
41
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
42
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
43
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
44
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
45
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
15
46
  export function DataFilters({ filters, values, onChange, onClear }: DataFiltersProps) {
47
+ // CIL[BEGIN chunk_id="DataFilters_handlefilterchange_1783929048" type="function" identity="handleFilterChange" parent="DataFilters_datafilters_1783929048"]
48
+ // CIL[DOC-MACRO purpose="Update filter value and call onChange callback"]
49
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle handleFilterChange"]
50
+ // CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
51
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="calls onChange"]
52
+ // CIL[DOC-MICRO logic_summary="Merge new filter value with existing values and notify parent" notable_decisions="[]"]
53
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
54
+ // CIL[DOC-STABILITY stability="stable"]
55
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 2. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
56
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 2. Total affected: 2."]
57
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
58
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
59
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
60
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
16
61
  const handleFilterChange = (key: string, value: any) => {
17
62
  onChange({ ...values, [key]: value })
18
63
  }
64
+ // CIL[END chunk_id="DataFilters_handlefilterchange_1783929048"]
19
65
 
66
+ // CIL[BEGIN chunk_id="DataFilters_hasactivefilters_1783929048" type="function" identity="hasActiveFilters" parent="DataFilters_datafilters_1783929048"]
67
+ // CIL[DOC-MACRO purpose="Check if any filters have active values"]
68
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle hasActiveFilters"]
69
+ // CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\"\\\"]"]
70
+ // CIL[DOC-CONTRACT inputs="none" outputs="boolean" errors="none" side_effects="none"]
71
+ // CIL[DOC-MICRO logic_summary="Check if any filter values are set (not empty/undefined/all)" notable_decisions="[]"]
72
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
73
+ // CIL[DOC-STABILITY stability="stable"]
74
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, .framework/src/pages/admin/RolesPage.tsx, .framework/migrations/025_retype_threads_messages.sql, \."]
75
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
76
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
77
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
78
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
79
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
20
80
  const hasActiveFilters = Object.values(values).some(v => v !== undefined && v !== '' && v !== 'all')
81
+ // CIL[END chunk_id="DataFilters_hasactivefilters_1783929048"]
21
82
 
83
+ // CIL[BEGIN chunk_id="DataFilters_mainrender_1783929048" type="render_block" identity="mainRender" parent="DataFilters_datafilters_1783929048"]
84
+ // CIL[DOC-MACRO purpose="Render filter UI with search, enum, and boolean inputs"]
85
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle mainRender"]
86
+ // CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
87
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX filter card" errors="none" side_effects="calls handleFilterChange,onClear"]
88
+ // CIL[DOC-MICRO logic_summary="Map filter types to UI components, show clear button when active" notable_decisions="[]"]
89
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
90
+ // CIL[DOC-STABILITY stability="stable"]
91
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
92
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
93
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
94
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
95
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
96
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
22
97
  return (
23
98
  <Card>
24
99
  <CardContent className="p-4">
@@ -88,4 +163,6 @@ export function DataFilters({ filters, values, onChange, onClear }: DataFiltersP
88
163
  </CardContent>
89
164
  </Card>
90
165
  )
166
+ // CIL[END chunk_id="DataFilters_mainrender_1783929048"]
91
167
  }
168
+ // CIL[END chunk_id="DataFilters_datafilters_1783929048"]
@@ -1,43 +1,45 @@
1
- /**
2
- * @module src/components/runtime/DataHeader
3
- * @audience installer
4
- * @layer frontend-component
5
- * @stability stable
6
- *
7
- * Title bar for entity list pages. Renders an entity icon, title,
8
- * description, and a "New" button that navigates to the create route.
9
- * The icon name is resolved dynamically from `@heroicons/react`; falls
10
- * back to `CubeIcon` if the name is unrecognised.
11
- *
12
- * @seeAlso src/components/runtime/DataListPage.tsx (mounts this component)
13
- */
14
1
 
2
+
3
+ // CIL[BEGIN chunk_id="DataHeader_module_header_1783929048" type="module_header" identity="imports_and_types" parent="none"]
4
+ // CIL[DOC-MACRO purpose="Import dependencies and define header component types"]
5
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage imports and interface for data header"]
6
+ // CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
7
+ // CIL[DOC-CONTRACT inputs="none" outputs="types" errors="none" side_effects="none"]
8
+ // CIL[DOC-MICRO logic_summary="Imports React, UI components, defines DataHeaderProps" notable_decisions="[]"]
9
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
10
+ // CIL[DOC-STABILITY stability="stable"]
11
+ // CIL[DOC-AUDIENCE audience="developer"]
12
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
13
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
14
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
15
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
16
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
17
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
15
18
  import React from 'react'
16
19
  import { Button } from '../ui/button'
17
20
  import * as Icons from 'lucide-react'
18
21
 
19
- /**
20
- * Props for `DataHeader`.
21
- *
22
- * @prop title - Entity name (displayed capitalised)
23
- * @prop icon - Heroicon name string (e.g. `'UserIcon'`)
24
- * @prop description - Short subtitle text
25
- * @prop newButtonHref - URL to navigate to when "New" is clicked
26
- */
27
22
  interface DataHeaderProps {
28
23
  title: string
29
24
  icon: string
30
25
  description: string
31
26
  newButtonHref: string
32
27
  }
33
-
34
- /**
35
- * Entity list page header with title, description, and new-record button.
36
- *
37
- * @param props - `DataHeaderProps`
38
- * @returns Header bar JSX
39
- * @sideEffects Navigates via `window.location.href` on button click
40
- */
28
+ // CIL[END chunk_id="DataHeader_module_header_1783929048"]
29
+ // CIL[BEGIN chunk_id="DataHeader_dataheader_1783929048" type="function" identity="DataHeader" parent="none"]
30
+ // CIL[DOC-MACRO purpose="Render entity list header with title and new button"]
31
+ // CIL[DOC-RESPONSIBILITY responsibility="Display header with icon, title, description, and create button"]
32
+ // CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
33
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX header" errors="none" side_effects="navigation"]
34
+ // CIL[DOC-MICRO logic_summary="Renders icon, title, description, and new button with navigation" notable_decisions="[]"]
35
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
36
+ // CIL[DOC-STABILITY stability="stable"]
37
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/principal.ts, \."]
38
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
39
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
40
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
41
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
42
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
41
43
  export function DataHeader({ title, icon, description, newButtonHref }: DataHeaderProps) {
42
44
  // Dynamically get the icon component
43
45
  const IconComponent = (Icons as Record<string, React.ComponentType<{ className?: string }>>)[icon] || Icons.Box
@@ -66,3 +68,4 @@ export function DataHeader({ title, icon, description, newButtonHref }: DataHead
66
68
  </div>
67
69
  )
68
70
  }
71
+ // CIL[END chunk_id="DataHeader_dataheader_1783929048"]