spine-framework 0.3.125 → 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 +169 -97
  6. package/.framework/cli/commands/generate.ts +82 -160
  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} +147 -54
  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 +222 -347
  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 +162 -14
  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 +687 -533
  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 +173 -145
  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 +192 -115
  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 +3 -3
  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,49 +1,23 @@
1
- /**
2
- * @module src/types/types
3
- * @audience installer
4
- * @layer frontend-hook
5
- * @stability stable
6
- *
7
- * Core TypeScript type definitions for the Spine frontend. These types
8
- * mirror the `design_schema` and API response shapes used across hooks,
9
- * components, and pages.
10
- *
11
- * **Type hierarchy:**
12
- * ```
13
- * DesignSchema
14
- * ├── fields: Record<string, FieldDefinition>
15
- * ├── views: Record<string, View> ← ListView | DetailView
16
- * ├── record_permissions
17
- * └── functionality?: FunctionalityBindings
18
- * ItemType ← row in v2.types table
19
- * Item ← row in v2.items table
20
- * ```
21
- *
22
- * **`system` flag on `FieldDefinition`:** When `system: true`, the field
23
- * maps to a real DB column (e.g. `title`, `status`). When absent or false,
24
- * the field value lives in the `data` JSONB column.
25
- *
26
- * @seeAlso src/hooks/useSchemaRecord.ts (consumes FieldDefinition[])
27
- * @seeAlso src/hooks/useForm.ts (consumes FieldDefinition[] for validation)
28
- * @seeAlso src/hooks/useListSchema.ts (consumes DesignSchema + View)
29
- * @seeAlso functions/_shared/schema-utils.ts (server-side schema generation)
30
- */
31
-
32
- // ─── FIELD DEFINITIONS ───────────────────────────────────────────────────────────
33
-
34
- /**
35
- * Definition of a single field in a `design_schema`. Drives both UI rendering
36
- * and client-side validation in `useForm`.
37
- *
38
- * @prop data_type - Controls rendering widget and validation rules
39
- * @prop label - Human-readable display label
40
- * @prop required - Whether the field must be non-empty on save
41
- * @prop system - If true, maps to a top-level DB column; false/absent → `data` JSONB
42
- * @prop name - Injected at runtime by hooks; not stored in the schema itself
43
- * @prop validation - Type-specific constraint overrides
44
- * @prop options - Choice list for select/multiselect/radio fields
45
- * @prop permissions - Role-based read/write access map; absent = all roles allowed
46
- */
1
+
2
+ // CIL[BEGIN chunk_id="types_fielddefinition_1783637731" type="interface" identity="FieldDefinition" parent="none"]
3
+ // CIL[DOC-MACRO purpose="Define a single field in a design schema that drives UI rendering and client-side validation"]
4
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent field specifications including data type, validation rules, and role-based permissions"]
5
+ // CIL[DOC-CONTEXT module="src/types/types" layer="frontend-hook" related_files="[\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
6
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
7
+ // CIL[DOC-MICRO logic_summary="Represent field specifications including data type, validation rules, and role-based permissions" notable_decisions="[]"]
8
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
9
+ // CIL[DOC-STABILITY stability="stable"]
10
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, \."]
11
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
12
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
13
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
14
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
15
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
16
+
17
+
18
+
19
+
20
+
47
21
  export interface FieldDefinition {
48
22
  data_type: 'text' | 'textarea' | 'rich_text' | 'email' | 'phone' | 'url' |
49
23
  'number' | 'currency' | 'range' | 'date' | 'datetime' | 'boolean' |
@@ -51,10 +25,10 @@ export interface FieldDefinition {
51
25
  'file' | 'image' | 'json' | 'reference' | 'address'
52
26
  label: string
53
27
  required: boolean
54
- system?: boolean // true = DB column, false/absent = custom field in .data
55
- // Runtime identity — populated by SchemaFields when building field arrays from schema
28
+ system?: boolean
29
+
56
30
  name?: string
57
- // UI hints — informational only, do not affect data contract or permissions
31
+
58
32
  placeholder?: string
59
33
  description?: string
60
34
  rows?: number
@@ -80,23 +54,32 @@ export interface FieldDefinition {
80
54
  reference_kind?: string
81
55
  reference_type?: string
82
56
  }
83
- // Type-specific constraint properties (move out of validation for clarity)
84
- options?: (string | { value: string; label: string })[] // For select/multiselect/radio
57
+
58
+ options?: (string | { value: string; label: string })[]
85
59
  permissions?: {
86
- [role: string]: string[] // Array of actions: ["read", "write"]
60
+ [role: string]: string[]
87
61
  }
88
62
  }
63
+ // CIL[END chunk_id="types_fielddefinition_1783637731"]
64
+ // CIL[BEGIN chunk_id="types_viewfieldconfig_1783637731" type="interface" identity="ViewFieldConfig" parent="none"]
65
+ // CIL[DOC-MACRO purpose="Define per-field display/behaviour config within a view for UI rendering"]
66
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent view-specific field overrides including widget type and interaction flags"]
67
+ // CIL[DOC-CONTEXT module="src/types/types" layer="frontend-hook" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
68
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
69
+ // CIL[DOC-MICRO logic_summary="Represent view-specific field overrides including widget type and interaction flags" notable_decisions="[]"]
70
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
71
+ // CIL[DOC-STABILITY stability="stable"]
72
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, \."]
73
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
74
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
75
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
76
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
77
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
78
+
79
+
80
+
89
81
 
90
- // ─── VIEW TYPES ─────────────────────────────────────────────────────────────────
91
82
 
92
- /**
93
- * Per-field display/behaviour config within a view. Stored as
94
- * `design_schema.views[viewSlug].fields[fieldName]`.
95
- *
96
- * @prop display_type - Override the default widget for this field in this view
97
- * @prop sortable - Whether the column header shows a sort toggle in list views
98
- * @prop searchable - Whether the field is included in free-text search
99
- */
100
83
  export interface ViewFieldConfig {
101
84
  display_type: 'input' | 'textarea' | 'rich_text' | 'select' | 'multiselect' |
102
85
  'radio' | 'checkbox' | 'switch' | 'date_picker' | 'datetime_picker' |
@@ -106,17 +89,24 @@ export interface ViewFieldConfig {
106
89
  sortable?: boolean
107
90
  searchable?: boolean
108
91
  }
92
+ // CIL[END chunk_id="types_viewfieldconfig_1783637731"]
93
+ // CIL[BEGIN chunk_id="types_listview_1783637731" type="interface" identity="ListView" parent="none"]
94
+ // CIL[DOC-MACRO purpose="Define a list view configuration for rendering data as table, card grid, or Kanban board"]
95
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent list display settings including fields, sorting, filters, stats, and grouping"]
96
+ // CIL[DOC-CONTEXT module="src/types/types" layer="frontend-hook" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
97
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
98
+ // CIL[DOC-MICRO logic_summary="Represent list display settings including fields, sorting, filters, stats, and grouping" notable_decisions="[]"]
99
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
100
+ // CIL[DOC-STABILITY stability="stable"]
101
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, \."]
102
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
103
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
104
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
105
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
106
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
107
+
108
+
109
109
 
110
- /**
111
- * A list view definition. Rendered by `DataListPage` as a table, card grid,
112
- * or Kanban board depending on `display`.
113
- *
114
- * @prop fields - Ordered map of field name → `ViewFieldConfig`
115
- * @prop default_sort - Initial sort applied before user interaction
116
- * @prop filters - Field names to expose as filter controls
117
- * @prop stats - Summary stat cards shown above the list
118
- * @prop group_by - Field to use as board column grouping (`display: 'board'` only)
119
- */
120
110
  export interface ListView {
121
111
  type: 'list'
122
112
  display: 'table' | 'card' | 'board'
@@ -134,50 +124,99 @@ export interface ListView {
134
124
  color?: string
135
125
  filter?: Record<string, any>
136
126
  }>
137
- group_by?: string // For board display
127
+ group_by?: string
138
128
  }
129
+ // CIL[END chunk_id="types_listview_1783637731"]
130
+ // CIL[BEGIN chunk_id="types_detailviewsection_1783637731" type="interface" identity="DetailViewSection" parent="none"]
131
+ // CIL[DOC-MACRO purpose="Define a single section within a DetailView that groups related fields"]
132
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent logical groupings of fields with optional titles for detail forms"]
133
+ // CIL[DOC-CONTEXT module="src/types/types" layer="frontend-hook" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
134
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
135
+ // CIL[DOC-MICRO logic_summary="Represent logical groupings of fields with optional titles for detail forms" notable_decisions="[]"]
136
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
137
+ // CIL[DOC-STABILITY stability="stable"]
138
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, .framework/src/components/ui/table-primitives.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
139
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
140
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
141
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
142
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
143
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
144
+
145
+
139
146
 
140
- /**
141
- * A single section within a `DetailView`. Groups related fields under
142
- * an optional title. Field permissions from the schema still apply —
143
- * there are no section-level permission overrides.
144
- */
145
147
  export interface DetailViewSection {
146
148
  title: string
147
149
  fields: Record<string, ViewFieldConfig>
148
- // Note: No view-level permissions - field permissions from schema apply
150
+
149
151
  }
152
+ // CIL[END chunk_id="types_detailviewsection_1783637731"]
153
+ // CIL[BEGIN chunk_id="types_detailview_1783637731" type="interface" identity="DetailView" parent="none"]
154
+ // CIL[DOC-MACRO purpose="Define a detail view configuration for rendering sectioned record forms"]
155
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent detail form layout with multiple field sections"]
156
+ // CIL[DOC-CONTEXT module="src/types/types" layer="frontend-hook" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
157
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
158
+ // CIL[DOC-MICRO logic_summary="Represent detail form layout with multiple field sections" notable_decisions="[]"]
159
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
160
+ // CIL[DOC-STABILITY stability="stable"]
161
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
162
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
163
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
164
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
165
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
166
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
167
+
168
+
150
169
 
151
- /**
152
- * A detail view definition. Rendered by `DataDetailPage` as a sectioned
153
- * record form.
154
- */
155
170
  export interface DetailView {
156
171
  type: 'detail'
157
172
  label: string
158
173
  sections: DetailViewSection[]
159
174
  }
175
+ // CIL[END chunk_id="types_detailview_1783637731"]
176
+ // CIL[BEGIN chunk_id="types_view_1783637731" type="type" identity="View" parent="none"]
177
+ // CIL[DOC-MACRO purpose="Define discriminated union of all supported view types for schema-driven UI"]
178
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent all possible view configurations (list and detail)"]
179
+ // CIL[DOC-CONTEXT module="View" layer="unknown" related_files="[]"]
180
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
181
+ // CIL[DOC-MICRO logic_summary="Implements View" notable_decisions="[]"]
182
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
183
+ // CIL[DOC-STABILITY stability="stable"]
184
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
185
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
186
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
187
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
188
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
189
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
190
+
191
+
160
192
 
161
- /** Discriminated union of all supported view types. */
162
193
  export type View = ListView | DetailView
194
+ // CIL[END chunk_id="types_view_1783637731"]
195
+ // CIL[BEGIN chunk_id="types_functionalitybindings_1783637731" type="interface" identity="FunctionalityBindings" parent="none"]
196
+ // CIL[DOC-MACRO purpose="Define optional automation and integration bindings attached to a DesignSchema"]
197
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent trigger conditions and targets for pipelines, AI agents, embeddings, integrations, and constraints"]
198
+ // CIL[DOC-CONTEXT module="FunctionalityBindings" layer="unknown" related_files="[]"]
199
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
200
+ // CIL[DOC-MICRO logic_summary="Implements FunctionalityBindings" notable_decisions="[]"]
201
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
202
+ // CIL[DOC-STABILITY stability="stable"]
203
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
204
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
205
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
206
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
207
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
208
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
209
+
210
+
211
+
212
+
163
213
 
164
- // ─── FUNCTIONALITY BINDINGS ──────────────────────────────────────────────────────────
165
-
166
- /**
167
- * Optional automation and integration bindings attached to a `DesignSchema`.
168
- * Each array entry describes a trigger condition and the target pipeline,
169
- * agent, embedding, integration, or constraint.
170
- *
171
- * These bindings are evaluated by API handlers and the system cron — not
172
- * by the frontend. They are included here as a type contract so the frontend
173
- * can read and display binding metadata without making blind `any` casts.
174
- */
175
214
  export interface FunctionalityBindings {
176
215
  pipelines?: Array<{
177
216
  pipeline_id: string
178
217
  trigger: 'manual' | 'on_create' | 'on_update' | 'on_field_change' | 'on_delete' | 'scheduled'
179
- field?: string // For on_field_change
180
- condition?: string // Expression string
218
+ field?: string
219
+ condition?: string
181
220
  roles: string[]
182
221
  }>
183
222
  ai_agents?: Array<{
@@ -205,45 +244,61 @@ export interface FunctionalityBindings {
205
244
  }>
206
245
  constraints?: Array<{
207
246
  type: 'unique' | 'conditional_required' | 'immutable'
208
- fields?: string[] // For unique
209
- field?: string // For conditional_required and immutable
210
- condition?: string // For conditional_required
247
+ fields?: string[]
248
+ field?: string
249
+ condition?: string
211
250
  message: string
212
- after?: 'create' | 'update' // For immutable
251
+ after?: 'create' | 'update'
213
252
  }>
214
253
  }
254
+ // CIL[END chunk_id="types_functionalitybindings_1783637731"]
255
+ // CIL[BEGIN chunk_id="types_designschema_1783637731" type="interface" identity="DesignSchema" parent="none"]
256
+ // CIL[DOC-MACRO purpose="Define the complete design schema for a types record stored as JSONB in the database"]
257
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent the full schema definition including fields, views, permissions, and functionality bindings"]
258
+ // CIL[DOC-CONTEXT module="DesignSchema" layer="unknown" related_files="[]"]
259
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
260
+ // CIL[DOC-MICRO logic_summary="Implements DesignSchema" notable_decisions="[]"]
261
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
262
+ // CIL[DOC-STABILITY stability="stable"]
263
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
264
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
265
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
266
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
267
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
268
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
269
+
270
+
271
+
272
+
215
273
 
216
- // ─── DESIGN SCHEMA ────────────────────────────────────────────────────────────────
217
-
218
- /**
219
- * The complete design schema for a `types` record. Stored as a JSONB column
220
- * (`design_schema`) and stamp-copied onto records at create time.
221
- *
222
- * @prop record_permissions - Role → allowed CRUD actions map for the entire record
223
- * @prop fields - All field definitions keyed by field name
224
- * @prop views - Named view definitions (`list`, `detail`, etc.)
225
- * @prop functionality - Optional automation bindings (pipelines, agents, etc.)
226
- */
227
274
  export interface DesignSchema {
228
275
  record_permissions: {
229
- [role: string]: string[] // Array of actions: ["create", "read", "update", "delete"]
276
+ [role: string]: string[]
230
277
  }
231
278
  fields: Record<string, FieldDefinition>
232
279
  views: Record<string, View>
233
280
  functionality?: FunctionalityBindings
234
281
  }
282
+ // CIL[END chunk_id="types_designschema_1783637731"]
283
+ // CIL[BEGIN chunk_id="types_itemtype_1783637731" type="interface" identity="ItemType" parent="none"]
284
+ // CIL[DOC-MACRO purpose="Define a type record from the v2.types table with complete schema and validation configuration"]
285
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent a configurable data type with design schema, validation rules, and metadata"]
286
+ // CIL[DOC-CONTEXT module="ItemType" layer="unknown" related_files="[]"]
287
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
288
+ // CIL[DOC-MICRO logic_summary="Implements ItemType" notable_decisions="[]"]
289
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
290
+ // CIL[DOC-STABILITY stability="stable"]
291
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
292
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
293
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
294
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
295
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
296
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
297
+
298
+
299
+
300
+
235
301
 
236
- // ─── RECORD SHAPES ─────────────────────────────────────────────────────────────────
237
-
238
- /**
239
- * A row from the `v2.types` table. Represents a type definition (item type,
240
- * account type, person type, etc.) including its full `design_schema`.
241
- *
242
- * @prop kind - Discriminator: `'item'` | `'account'` | `'person'` | etc.
243
- * @prop design_schema - Full schema defining fields, views, and functionality
244
- * @prop validation_schema - Auto-generated JSON Schema used for server-side validation
245
- * @prop ownership - `'pack'` | `'tenant'` (pack-ownership tracking)
246
- */
247
302
  export interface ItemType {
248
303
  id: string
249
304
  name: string
@@ -257,7 +312,7 @@ export interface ItemType {
257
312
  fields: Record<string, {
258
313
  data_type: string
259
314
  required?: boolean
260
- [key: string]: any // Type-specific validation properties
315
+ [key: string]: any
261
316
  }>
262
317
  }
263
318
  ownership: string
@@ -267,15 +322,24 @@ export interface ItemType {
267
322
  created_at: string
268
323
  updated_at: string
269
324
  }
325
+ // CIL[END chunk_id="types_itemtype_1783637731"]
326
+ // CIL[BEGIN chunk_id="types_item_1783637731" type="interface" identity="Item" parent="none"]
327
+ // CIL[DOC-MACRO purpose="Define a data item record from the v2.items table representing an instance of a type"]
328
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent a concrete data record with type reference, data payload, and metadata"]
329
+ // CIL[DOC-CONTEXT module="Item" layer="unknown" related_files="[]"]
330
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
331
+ // CIL[DOC-MICRO logic_summary="Implements Item" notable_decisions="[]"]
332
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
333
+ // CIL[DOC-STABILITY stability="stable"]
334
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
335
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
336
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
337
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
338
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
339
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
340
+
341
+
270
342
 
271
- /**
272
- * A row from the `v2.items` table. The `data` JSONB column holds all
273
- * custom field values; system fields (`title`, `status`, etc.) are top-level.
274
- *
275
- * @prop design_schema - Stamp of the type's schema at create time (for resilience
276
- * to schema changes; may be stale relative to `types` table)
277
- * @prop validation_schema - Stamp of the validation schema at create time
278
- */
279
343
  export interface Item {
280
344
  id: string
281
345
  item_type_id: string
@@ -290,19 +354,51 @@ export interface Item {
290
354
  created_by?: string
291
355
  account_id: string
292
356
  app_id?: string
293
- design_schema?: Record<string, any> // Schema snapshot at creation time
294
- validation_schema?: Record<string, any> // Validation schema snapshot at creation time
357
+ design_schema?: Record<string, any>
358
+ validation_schema?: Record<string, any>
295
359
  }
360
+ // CIL[END chunk_id="types_item_1783637731"]
361
+ // CIL[BEGIN chunk_id="types_validationerror_1783637731" type="interface" identity="ValidationError" parent="none"]
362
+ // CIL[DOC-MACRO purpose="Define a validation error for form field validation feedback"]
363
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent field-specific validation errors with messages"]
364
+ // CIL[DOC-CONTEXT module="ValidationError" layer="unknown" related_files="[]"]
365
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
366
+ // CIL[DOC-MICRO logic_summary="Implements ValidationError" notable_decisions="[]"]
367
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
368
+ // CIL[DOC-STABILITY stability="stable"]
369
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
370
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
371
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
372
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
373
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
374
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
375
+
376
+
377
+
296
378
 
297
- // ─── FORM & QUERY TYPES ───────────────────────────────────────────────────────────
298
379
 
299
- /** A field-level validation failure from `useForm` or server-side validation. */
300
380
  export interface ValidationError {
301
381
  field: string
302
382
  message: string
303
383
  }
384
+ // CIL[END chunk_id="types_validationerror_1783637731"]
385
+ // CIL[BEGIN chunk_id="types_formstate_1783637731" type="interface" identity="FormState" parent="none"]
386
+ // CIL[DOC-MACRO purpose="Define form state management for reactive forms with data, errors, and submission status"]
387
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent complete form state including data, validation errors, touched fields, and submission status"]
388
+ // CIL[DOC-CONTEXT module="FormState" layer="unknown" related_files="[]"]
389
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
390
+ // CIL[DOC-MICRO logic_summary="Implements FormState" notable_decisions="[]"]
391
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
392
+ // CIL[DOC-STABILITY stability="stable"]
393
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
394
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
395
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
396
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
397
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
398
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
399
+
400
+
304
401
 
305
- /** Snapshot of form state — used as a shared type between `useForm` and form components. */
306
402
  export interface FormState {
307
403
  data: Record<string, any>
308
404
  errors: Record<string, string>
@@ -310,35 +406,115 @@ export interface FormState {
310
406
  isSubmitting: boolean
311
407
  isValid: boolean
312
408
  }
409
+ // CIL[END chunk_id="types_formstate_1783637731"]
410
+ // CIL[BEGIN chunk_id="types_paginationparams_1783637731" type="interface" identity="PaginationParams" parent="none"]
411
+ // CIL[DOC-MACRO purpose="Define pagination parameters for list queries with limit, offset, and page options"]
412
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent pagination controls for data list APIs"]
413
+ // CIL[DOC-CONTEXT module="PaginationParams" layer="unknown" related_files="[]"]
414
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
415
+ // CIL[DOC-MICRO logic_summary="Implements PaginationParams" notable_decisions="[]"]
416
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
417
+ // CIL[DOC-STABILITY stability="stable"]
418
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
419
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
420
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
421
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
422
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
423
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
424
+
425
+
313
426
 
314
- /** Pagination query parameters for list endpoints. */
315
427
  export interface PaginationParams {
316
428
  limit?: number
317
429
  offset?: number
318
430
  page?: number
319
431
  }
432
+ // CIL[END chunk_id="types_paginationparams_1783637731"]
433
+ // CIL[BEGIN chunk_id="types_sortparams_1783637731" type="interface" identity="SortParams" parent="none"]
434
+ // CIL[DOC-MACRO purpose="Define sorting parameters for list queries with field and direction"]
435
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent sorting controls for ordered data display"]
436
+ // CIL[DOC-CONTEXT module="SortParams" layer="unknown" related_files="[]"]
437
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
438
+ // CIL[DOC-MICRO logic_summary="Implements SortParams" notable_decisions="[]"]
439
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
440
+ // CIL[DOC-STABILITY stability="stable"]
441
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
442
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
443
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
444
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
445
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
446
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
447
+
448
+
320
449
 
321
- /** Sort order specification for list endpoints. */
322
450
  export interface SortParams {
323
451
  field: string
324
452
  direction: 'asc' | 'desc'
325
453
  }
454
+ // CIL[END chunk_id="types_sortparams_1783637731"]
455
+ // CIL[BEGIN chunk_id="types_filterparams_1783637731" type="interface" identity="FilterParams" parent="none"]
456
+ // CIL[DOC-MACRO purpose="Define filter parameters for list queries with flexible key-value filtering"]
457
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent filter controls for data list APIs"]
458
+ // CIL[DOC-CONTEXT module="FilterParams" layer="unknown" related_files="[]"]
459
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
460
+ // CIL[DOC-MICRO logic_summary="Implements FilterParams" notable_decisions="[]"]
461
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
462
+ // CIL[DOC-STABILITY stability="stable"]
463
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
464
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
465
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
466
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
467
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
468
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
469
+
470
+
326
471
 
327
- /** Arbitrary key→value filter map for list endpoints. */
328
472
  export interface FilterParams {
329
473
  [key: string]: any
330
474
  }
475
+ // CIL[END chunk_id="types_filterparams_1783637731"]
476
+ // CIL[BEGIN chunk_id="types_searchparams_1783637731" type="interface" identity="SearchParams" parent="none"]
477
+ // CIL[DOC-MACRO purpose="Define comprehensive search parameters combining pagination, search, sort, and filters"]
478
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent complete search controls for data list APIs"]
479
+ // CIL[DOC-CONTEXT module="SearchParams" layer="unknown" related_files="[]"]
480
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
481
+ // CIL[DOC-MICRO logic_summary="Implements SearchParams" notable_decisions="[]"]
482
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
483
+ // CIL[DOC-STABILITY stability="stable"]
484
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
485
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
486
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
487
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
488
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
489
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
490
+
491
+
331
492
 
332
- /** Combined search, sort, filter, and pagination params for list queries. */
333
493
  export interface SearchParams extends PaginationParams {
334
494
  search?: string
335
495
  sort?: SortParams
336
496
  filters?: FilterParams
337
497
  }
498
+ // CIL[END chunk_id="types_searchparams_1783637731"]
499
+ // CIL[BEGIN chunk_id="types_entitycolumn_1783637731" type="interface" identity="EntityColumn" parent="none"]
500
+ // CIL[DOC-MACRO purpose="Define column configuration for entity list display with sorting and display options"]
501
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent column metadata for data table rendering"]
502
+ // CIL[DOC-CONTEXT module="EntityColumn" layer="unknown" related_files="[]"]
503
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
504
+ // CIL[DOC-MICRO logic_summary="Implements EntityColumn" notable_decisions="[]"]
505
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
506
+ // CIL[DOC-STABILITY stability="stable"]
507
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
508
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
509
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
510
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
511
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
512
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
513
+
514
+
515
+
338
516
 
339
- // ─── UI DISPLAY TYPES ────────────────────────────────────────────────────────────────
340
517
 
341
- /** A rendered column descriptor for list/table UI components. */
342
518
  export interface EntityColumn {
343
519
  key: string
344
520
  label: string
@@ -348,8 +524,24 @@ export interface EntityColumn {
348
524
  badgeColors?: Record<string, string>
349
525
  maxLength?: number
350
526
  }
527
+ // CIL[END chunk_id="types_entitycolumn_1783637731"]
528
+ // CIL[BEGIN chunk_id="types_entitystat_1783637731" type="interface" identity="EntityStat" parent="none"]
529
+ // CIL[DOC-MACRO purpose="Define stat card configuration for entity list summaries with counts and filters"]
530
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent summary statistics display for data lists"]
531
+ // CIL[DOC-CONTEXT module="EntityStat" layer="unknown" related_files="[]"]
532
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
533
+ // CIL[DOC-MICRO logic_summary="Implements EntityStat" notable_decisions="[]"]
534
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
535
+ // CIL[DOC-STABILITY stability="stable"]
536
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
537
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
538
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
539
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
540
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
541
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
542
+
543
+
351
544
 
352
- /** A stat card shown above entity list pages (count or filtered count). */
353
545
  export interface EntityStat {
354
546
  title: string
355
547
  type: 'count' | 'filter_count'
@@ -357,27 +549,50 @@ export interface EntityStat {
357
549
  color: string
358
550
  filter?: Record<string, any>
359
551
  }
552
+ // CIL[END chunk_id="types_entitystat_1783637731"]
553
+ // CIL[BEGIN chunk_id="types_entityfilter_1783637731" type="interface" identity="EntityFilter" parent="none"]
554
+ // CIL[DOC-MACRO purpose="Define filter configuration for entity lists with search, enum, and boolean filter types"]
555
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent filter controls for data list filtering"]
556
+ // CIL[DOC-CONTEXT module="EntityFilter" layer="unknown" related_files="[]"]
557
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
558
+ // CIL[DOC-MICRO logic_summary="Implements EntityFilter" notable_decisions="[]"]
559
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
560
+ // CIL[DOC-STABILITY stability="stable"]
561
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
562
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
563
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
564
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
565
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
566
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
567
+
568
+
360
569
 
361
- /** A filter control definition for entity list pages. */
362
570
  export interface EntityFilter {
363
571
  key: string
364
572
  label: string
365
573
  type: 'search' | 'enum' | 'boolean'
366
574
  options?: string[]
367
575
  }
576
+ // CIL[END chunk_id="types_entityfilter_1783637731"]
577
+ // CIL[BEGIN chunk_id="types_itemprogress_1783637731" type="interface" identity="ItemProgress" parent="none"]
578
+ // CIL[DOC-MACRO purpose="Define progress tracking for items with status, scoring, and detailed progress data"]
579
+ // CIL[DOC-RESPONSIBILITY responsibility="Represent user progress through items with completion status and metadata"]
580
+ // CIL[DOC-CONTEXT module="ItemProgress" layer="unknown" related_files="[]"]
581
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
582
+ // CIL[DOC-MICRO logic_summary="Implements ItemProgress" notable_decisions="[]"]
583
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
584
+ // CIL[DOC-STABILITY stability="stable"]
585
+ // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
586
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
587
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
588
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
589
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
590
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
591
+
592
+
593
+
594
+
368
595
 
369
- // ─── ITEM PROGRESS ───────────────────────────────────────────────────────────
370
-
371
- /**
372
- * A per-person, per-item progress record. Tracks pipeline status, score, and
373
- * arbitrary interaction data for courses, onboarding, tasks, and quizzes.
374
- *
375
- * `title` is auto-composed as "<item title> — <person name>".
376
- * `description` is auto-composed as "Completed · score 85 · 2 attempts".
377
- * `data` holds extensible fields: attempts, time_spent, last_position, etc.
378
- *
379
- * INVARIANT: (person_id, item_id) is unique — state, not a log.
380
- */
381
596
  export interface ItemProgress {
382
597
  id: string
383
598
  type_id: string
@@ -405,3 +620,4 @@ export interface ItemProgress {
405
620
  created_at: string
406
621
  updated_at: string
407
622
  }
623
+ // CIL[END chunk_id="types_itemprogress_1783637731"]