spine-framework 0.3.144 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/.env.example +76 -0
  2. package/.framework/.spine-manifest.json +19 -0
  3. package/.framework/cli/commands/agents.ts +61 -33
  4. package/.framework/cli/commands/auth.ts +60 -28
  5. package/.framework/cli/commands/create-app.ts +212 -80
  6. package/.framework/cli/commands/dev.ts +184 -68
  7. package/.framework/cli/commands/doctor.ts +324 -152
  8. package/.framework/cli/commands/generate.ts +119 -68
  9. package/.framework/cli/commands/init.ts +141 -242
  10. package/.framework/cli/commands/install-app.ts +1336 -314
  11. package/.framework/cli/commands/items.ts +31 -29
  12. package/.framework/cli/commands/migrate.ts +299 -156
  13. package/.framework/cli/commands/migrations.ts +62 -30
  14. package/.framework/cli/commands/pipelines.ts +31 -29
  15. package/.framework/cli/commands/status.ts +105 -45
  16. package/.framework/cli/commands/system.ts +47 -42
  17. package/.framework/cli/commands/test.ts +161 -102
  18. package/.framework/cli/commands/upgrade.ts +260 -0
  19. package/.framework/cli/commands/validate-app.ts +517 -161
  20. package/.framework/cli/context.ts +117 -85
  21. package/.framework/cli/env-loader.ts +74 -43
  22. package/.framework/cli/index.ts +70 -46
  23. package/.framework/cli/lib/project-files.ts +404 -0
  24. package/.framework/docs/guides/testing-guide.md +1 -1
  25. package/.framework/docs/runtime-types.md +72 -72
  26. package/.framework/functions/_shared/access.ts +84 -0
  27. package/.framework/functions/_shared/agent-runner.ts +5051 -1026
  28. package/.framework/functions/_shared/app-manifest.ts +214 -94
  29. package/.framework/functions/_shared/ast.ts +214 -0
  30. package/.framework/functions/_shared/audit.ts +91 -55
  31. package/.framework/functions/_shared/cil.ts +368 -127
  32. package/.framework/functions/_shared/db.ts +337 -68
  33. package/.framework/functions/_shared/funnel.ts +228 -0
  34. package/.framework/functions/_shared/geo.ts +105 -0
  35. package/.framework/functions/_shared/hash-api-key.ts +94 -17
  36. package/.framework/functions/_shared/index.ts +22 -224
  37. package/.framework/functions/_shared/kb.ts +832 -58
  38. package/.framework/functions/_shared/llm.ts +118 -18
  39. package/.framework/functions/_shared/logging.ts +317 -19
  40. package/.framework/functions/_shared/middleware.ts +701 -131
  41. package/.framework/functions/_shared/notify.ts +70 -0
  42. package/.framework/functions/_shared/outcomes.ts +34 -19
  43. package/.framework/functions/_shared/permissions.ts +501 -315
  44. package/.framework/functions/_shared/pipeline-runner.ts +704 -155
  45. package/.framework/functions/_shared/principal.ts +436 -263
  46. package/.framework/functions/_shared/rate-limit.ts +233 -0
  47. package/.framework/functions/_shared/resolve-credentials.ts +86 -19
  48. package/.framework/functions/_shared/resolve-ids.ts +203 -139
  49. package/.framework/functions/_shared/retry-deliveries.ts +51 -16
  50. package/.framework/functions/_shared/schema-utils.ts +602 -521
  51. package/.framework/functions/_shared/security.ts +345 -0
  52. package/.framework/functions/_shared/testing.ts +197 -172
  53. package/.framework/functions/_shared/tracing.ts +351 -21
  54. package/.framework/functions/_shared/trigger-engine.ts +425 -136
  55. package/.framework/functions/_shared/webhook-registration.ts +71 -70
  56. package/.framework/functions/_shared/webhook-registry.ts +126 -83
  57. package/.framework/functions/account-nodes.ts +30 -30
  58. package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
  59. package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
  60. package/.framework/functions/adapters/openai-outbound.ts +15 -16
  61. package/.framework/functions/admin-data.ts +596 -173
  62. package/.framework/functions/admin-funnel.ts +64 -60
  63. package/.framework/functions/admin-install-funnel.ts +84 -66
  64. package/.framework/functions/admin-signals.ts +69 -51
  65. package/.framework/functions/ai-agents.ts +431 -106
  66. package/.framework/functions/ai-interactions.ts +186 -112
  67. package/.framework/functions/api-keys.ts +107 -107
  68. package/.framework/functions/apps.ts +154 -136
  69. package/.framework/functions/auth.ts +83 -65
  70. package/.framework/functions/cil-agent-ingest.ts +189 -232
  71. package/.framework/functions/cil-agent.ts +433 -177
  72. package/.framework/functions/cil-callmap.ts +642 -430
  73. package/.framework/functions/cil-config.ts +139 -135
  74. package/.framework/functions/cil-context.ts +214 -127
  75. package/.framework/functions/cil-doc.ts +587 -458
  76. package/.framework/functions/cil-embeddings.ts +453 -364
  77. package/.framework/functions/cil-graph.ts +427 -142
  78. package/.framework/functions/cil-ingest.ts +1418 -1154
  79. package/.framework/functions/cil-pipeline.ts +276 -21
  80. package/.framework/functions/cil-project.ts +659 -132
  81. package/.framework/functions/cil-validate.ts +198 -164
  82. package/.framework/functions/debug-auth.ts +57 -55
  83. package/.framework/functions/deliveries.ts +80 -21
  84. package/.framework/functions/embeddings.ts +1023 -318
  85. package/.framework/functions/eval-harness.ts +146 -108
  86. package/.framework/functions/integration-outbound.ts +205 -75
  87. package/.framework/functions/integration-routes.ts +128 -23
  88. package/.framework/functions/integrations.ts +125 -100
  89. package/.framework/functions/invites.ts +1095 -460
  90. package/.framework/functions/item-progress.ts +158 -102
  91. package/.framework/functions/kb.ts +34 -10
  92. package/.framework/functions/logs.ts +133 -133
  93. package/.framework/functions/observability.ts +152 -122
  94. package/.framework/functions/pipeline-executions.ts +147 -132
  95. package/.framework/functions/pipelines.ts +134 -119
  96. package/.framework/functions/prompt-configs.ts +96 -80
  97. package/.framework/functions/roles.ts +112 -82
  98. package/.framework/functions/security.ts +450 -0
  99. package/.framework/functions/system-cron.ts +117 -80
  100. package/.framework/functions/system.ts +158 -98
  101. package/.framework/functions/tests.ts +29 -29
  102. package/.framework/functions/timers.ts +94 -95
  103. package/.framework/functions/trigger-scheduler.ts +10 -0
  104. package/.framework/functions/triggers.ts +179 -149
  105. package/.framework/functions/types.ts +137 -125
  106. package/.framework/mcp/index.ts +133 -0
  107. package/.framework/mcp/load-env.ts +60 -0
  108. package/.framework/mcp/shared/app-manifest.ts +275 -0
  109. package/.framework/mcp/shared/db.ts +477 -0
  110. package/.framework/mcp/shared/kb.ts +118 -0
  111. package/.framework/mcp/tools/architect.ts +431 -0
  112. package/.framework/mcp/tools/cil/context.ts +345 -0
  113. package/.framework/mcp/tools/cil/graph.ts +242 -0
  114. package/.framework/mcp/tools/cil/ingest.ts +1217 -0
  115. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
  116. package/.framework/mcp/tools/cil/pipeline.ts +767 -0
  117. package/.framework/mcp/tools/cil/project.ts +791 -0
  118. package/.framework/mcp/tools/cil/retrieval.ts +336 -0
  119. package/.framework/mcp/tools/cil/search-core.ts +454 -0
  120. package/.framework/mcp/tools/cil/search.ts +97 -0
  121. package/.framework/mcp/tools/cil/suggest.ts +186 -0
  122. package/.framework/mcp/tools/cil/validate.ts +1369 -0
  123. package/.framework/mcp/tools/kb/delete.ts +139 -0
  124. package/.framework/mcp/tools/kb/index.ts +52 -0
  125. package/.framework/mcp/tools/kb/ingest.ts +84 -0
  126. package/.framework/mcp/tools/kb/list-types.ts +102 -0
  127. package/.framework/mcp/tools/kb/publish.ts +100 -0
  128. package/.framework/mcp/tools/kb/reindex.ts +86 -0
  129. package/.framework/mcp/tools/kb/revoke.ts +85 -0
  130. package/.framework/mcp/tools/kb/search.ts +101 -0
  131. package/.framework/mcp/tools/kb/upsert.ts +125 -0
  132. package/.framework/mcp/tools/observability.ts +510 -0
  133. package/.framework/migrations/001_core_schema.sql +15 -0
  134. package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
  135. package/.framework/migrations/003_core_system_data.sql +16 -1
  136. package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
  137. package/.framework/migrations/005_core_observability.sql +17 -1
  138. package/.framework/migrations/006_security_hardening_rls.sql +15 -0
  139. package/.framework/migrations/007_kb_article_list.sql +17 -1
  140. package/.framework/migrations/008_items_target.sql +15 -0
  141. package/.framework/migrations/009_roles_slug_unique.sql +15 -0
  142. package/.framework/migrations/010_auth_user_trigger.sql +15 -0
  143. package/.framework/migrations/011_spine_system_account.sql +16 -0
  144. package/.framework/migrations/012_service_role_grants.sql +16 -0
  145. package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
  146. package/.framework/migrations/014_apps_required_roles.sql +16 -0
  147. package/.framework/migrations/015_types_kind_slug_unique.sql +20 -0
  148. package/.framework/migrations/016_cil_types.sql +281 -0
  149. package/.framework/migrations/017_cil_stable_ids.sql +37 -0
  150. package/.framework/migrations/018_runtime_tables.sql +129 -0
  151. package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
  152. package/.framework/migrations/020_schema_reconciliation.sql +67 -0
  153. package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
  154. package/.framework/migrations/032_cil_status_migration.sql +73 -0
  155. package/.framework/migrations/033_cil_versioning.sql +73 -0
  156. package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
  157. package/.framework/migrations/035_rate_limits.sql +55 -0
  158. package/.framework/migrations/036_demo_record_flags.sql +72 -0
  159. package/.framework/migrations/037_kb_types_canonical.sql +244 -0
  160. package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
  161. package/.framework/migrations/042_registration_hierarchy.sql +309 -0
  162. package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
  163. package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
  164. package/.framework/migrations/045_security_critical_rls.sql +139 -0
  165. package/.framework/migrations/046_security_missing_rls.sql +79 -0
  166. package/.framework/migrations/047_people_updated_by.sql +27 -0
  167. package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
  168. package/.framework/migrations/049_security_blocklist.sql +148 -0
  169. package/.framework/migrations/050_notifications.sql +49 -0
  170. package/.framework/migrations/051_message_agent_fields.sql +74 -0
  171. package/.framework/migrations/052_registration_security.sql +421 -0
  172. package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
  173. package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
  174. package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
  175. package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
  176. package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
  177. package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
  178. package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
  179. package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
  180. package/.framework/migrations/061_fk_dedup.sql +32 -0
  181. package/.framework/public/spine-logo.svg +10 -3
  182. package/.framework/scripts/app-install-cli.ts +190 -93
  183. package/.framework/scripts/assemble-frontend.sh +127 -44
  184. package/.framework/scripts/assemble-functions.sh +128 -30
  185. package/.framework/scripts/boundary-check.sh +6 -2
  186. package/.framework/scripts/build-manifest.sh +24 -68
  187. package/.framework/scripts/check-core-integrity.sh +15 -76
  188. package/.framework/scripts/checksum-manifest.mts +343 -0
  189. package/.framework/scripts/cil-migrate-markers.ts +403 -0
  190. package/.framework/scripts/fix-cil-markers.mjs +176 -0
  191. package/.framework/scripts/verify-integrity.sh +21 -57
  192. package/.framework/scripts/verify-manifest.mts +305 -0
  193. package/.framework/seeds/types/funnel_signal_use.json +74 -21
  194. package/.framework/seeds/types/spine_instance.json +73 -21
  195. package/.framework/src/App.tsx +118 -72
  196. package/.framework/src/apps/admin/index.tsx +855 -58
  197. package/.framework/src/components/AppWrapper.tsx +43 -45
  198. package/.framework/src/components/CustomAppLoader.tsx +160 -116
  199. package/.framework/src/components/admin/AdminListPage.tsx +46 -44
  200. package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
  201. package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
  202. package/.framework/src/components/admin/PageInstructions.tsx +98 -2
  203. package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
  204. package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
  205. package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
  206. package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
  207. package/.framework/src/components/app-sidebar.tsx +42 -45
  208. package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
  209. package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
  210. package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
  211. package/.framework/src/components/kb/KBArticleList.tsx +251 -10
  212. package/.framework/src/components/layout/AppShell.tsx +51 -45
  213. package/.framework/src/components/layout/Header.tsx +42 -43
  214. package/.framework/src/components/layout/Layout.tsx +46 -46
  215. package/.framework/src/components/layout/Sidebar.tsx +196 -96
  216. package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
  217. package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
  218. package/.framework/src/components/runtime/DataFilters.tsx +49 -74
  219. package/.framework/src/components/runtime/DataHeader.tsx +53 -32
  220. package/.framework/src/components/runtime/DataListPage.tsx +51 -155
  221. package/.framework/src/components/runtime/DataStats.tsx +66 -44
  222. package/.framework/src/components/runtime/DataTable.tsx +49 -149
  223. package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
  224. package/.framework/src/components/runtime/index.ts +119 -16
  225. package/.framework/src/components/search-form.tsx +46 -29
  226. package/.framework/src/components/shared/AgentView.tsx +65 -48
  227. package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
  228. package/.framework/src/components/shared/InviteManager.tsx +207 -97
  229. package/.framework/src/components/shared/MemberList.tsx +97 -0
  230. package/.framework/src/components/shared/SchemaFields.tsx +107 -86
  231. package/.framework/src/components/ui/DataTable.tsx +80 -68
  232. package/.framework/src/components/ui/Form.tsx +157 -146
  233. package/.framework/src/components/ui/ItemCard.tsx +74 -67
  234. package/.framework/src/components/ui/ItemListView.tsx +73 -68
  235. package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
  236. package/.framework/src/components/ui/Modal.tsx +78 -68
  237. package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
  238. package/.framework/src/components/ui/accordion.tsx +85 -86
  239. package/.framework/src/components/ui/alert-dialog.tsx +197 -184
  240. package/.framework/src/components/ui/alert.tsx +105 -94
  241. package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
  242. package/.framework/src/components/ui/avatar.tsx +122 -107
  243. package/.framework/src/components/ui/badge.tsx +60 -55
  244. package/.framework/src/components/ui/breadcrumb.tsx +127 -128
  245. package/.framework/src/components/ui/button-group.tsx +86 -72
  246. package/.framework/src/components/ui/button.tsx +71 -50
  247. package/.framework/src/components/ui/calendar.tsx +72 -57
  248. package/.framework/src/components/ui/card.tsx +136 -129
  249. package/.framework/src/components/ui/carousel.tsx +226 -107
  250. package/.framework/src/components/ui/chart.tsx +252 -147
  251. package/.framework/src/components/ui/checkbox.tsx +43 -44
  252. package/.framework/src/components/ui/collapsible.tsx +86 -71
  253. package/.framework/src/components/ui/combobox.tsx +282 -249
  254. package/.framework/src/components/ui/command.tsx +158 -146
  255. package/.framework/src/components/ui/context-menu.tsx +239 -240
  256. package/.framework/src/components/ui/dialog.tsx +174 -157
  257. package/.framework/src/components/ui/direction.tsx +72 -56
  258. package/.framework/src/components/ui/drawer.tsx +168 -169
  259. package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
  260. package/.framework/src/components/ui/empty.tsx +131 -120
  261. package/.framework/src/components/ui/field.tsx +205 -173
  262. package/.framework/src/components/ui/hover-card.tsx +71 -72
  263. package/.framework/src/components/ui/input-group.tsx +148 -133
  264. package/.framework/src/components/ui/input-otp.tsx +99 -86
  265. package/.framework/src/components/ui/input.tsx +43 -41
  266. package/.framework/src/components/ui/item.tsx +207 -185
  267. package/.framework/src/components/ui/kbd.tsx +57 -56
  268. package/.framework/src/components/ui/label.tsx +45 -41
  269. package/.framework/src/components/ui/menubar.tsx +268 -236
  270. package/.framework/src/components/ui/native-select.tsx +85 -86
  271. package/.framework/src/components/ui/navigation-menu.tsx +166 -156
  272. package/.framework/src/components/ui/pagination.tsx +131 -141
  273. package/.framework/src/components/ui/popover.tsx +125 -128
  274. package/.framework/src/components/ui/progress.tsx +47 -44
  275. package/.framework/src/components/ui/radio-group.tsx +60 -55
  276. package/.framework/src/components/ui/resizable.tsx +85 -72
  277. package/.framework/src/components/ui/scroll-area.tsx +57 -58
  278. package/.framework/src/components/ui/select.tsx +182 -169
  279. package/.framework/src/components/ui/separator.tsx +42 -43
  280. package/.framework/src/components/ui/sheet.tsx +170 -159
  281. package/.framework/src/components/ui/sidebar.tsx +395 -398
  282. package/.framework/src/components/ui/skeleton.tsx +42 -43
  283. package/.framework/src/components/ui/slider.tsx +61 -44
  284. package/.framework/src/components/ui/sonner.tsx +44 -44
  285. package/.framework/src/components/ui/spinner.tsx +47 -42
  286. package/.framework/src/components/ui/switch.tsx +56 -42
  287. package/.framework/src/components/ui/table-primitives.tsx +272 -132
  288. package/.framework/src/components/ui/table.tsx +140 -142
  289. package/.framework/src/components/ui/tabs.tsx +110 -93
  290. package/.framework/src/components/ui/textarea.tsx +43 -44
  291. package/.framework/src/components/ui/toggle-group.tsx +87 -71
  292. package/.framework/src/components/ui/toggle.tsx +56 -56
  293. package/.framework/src/components/ui/tooltip.tsx +99 -85
  294. package/.framework/src/contexts/AppContext.tsx +166 -114
  295. package/.framework/src/contexts/AuthContext.tsx +232 -137
  296. package/.framework/src/hooks/use-mobile.ts +43 -44
  297. package/.framework/src/hooks/useApi.ts +185 -172
  298. package/.framework/src/hooks/useAppPath.ts +31 -29
  299. package/.framework/src/hooks/useApps.ts +77 -42
  300. package/.framework/src/hooks/useEntityList.ts +66 -29
  301. package/.framework/src/hooks/useEntityRecord.ts +76 -32
  302. package/.framework/src/hooks/useForm.ts +62 -30
  303. package/.framework/src/hooks/useListSchema.ts +60 -43
  304. package/.framework/src/hooks/useSchemaRecord.ts +115 -95
  305. package/.framework/src/lib/api.ts +258 -134
  306. package/.framework/src/lib/registration.ts +181 -0
  307. package/.framework/src/lib/supabase.ts +118 -81
  308. package/.framework/src/lib/utils.ts +266 -266
  309. package/.framework/src/main.tsx +43 -44
  310. package/.framework/src/pages/DashboardPage.tsx +44 -43
  311. package/.framework/src/pages/NoAppPage.tsx +50 -0
  312. package/.framework/src/pages/NotFoundPage.tsx +32 -29
  313. package/.framework/src/pages/SetupPage.tsx +34 -33
  314. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
  315. package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
  316. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
  317. package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
  318. package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
  319. package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
  320. package/.framework/src/pages/admin/AppsPage.tsx +45 -42
  321. package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
  322. package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
  323. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
  324. package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
  325. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
  326. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
  327. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
  328. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
  329. package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
  330. package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
  331. package/.framework/src/pages/admin/LogsPage.tsx +87 -137
  332. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
  333. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
  334. package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
  335. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
  336. package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
  337. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
  338. package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
  339. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
  340. package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
  341. package/.framework/src/pages/admin/RolesPage.tsx +47 -164
  342. package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
  343. package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
  344. package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
  345. package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
  346. package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
  347. package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
  348. package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
  349. package/.framework/src/pages/admin/TimersPage.tsx +44 -42
  350. package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
  351. package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
  352. package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
  353. package/.framework/src/pages/admin/TypesPage.tsx +45 -42
  354. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
  355. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
  356. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
  357. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
  358. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
  359. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
  360. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
  361. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
  362. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
  363. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
  364. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
  365. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
  366. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  367. package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
  368. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
  369. package/.framework/src/pages/auth/LoginPage.tsx +38 -32
  370. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
  371. package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
  372. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
  373. package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
  374. package/.framework/src/types/auth.ts +101 -93
  375. package/.framework/src/types/types.ts +283 -262
  376. package/.framework/templates/project.json +87 -0
  377. package/.framework/templates/spine.config.neutral.json +7 -0
  378. package/.framework/tests/api/api-surface.test.ts +381 -0
  379. package/.framework/tests/fixtures/seed.ts +427 -0
  380. package/.framework/tests/fixtures/teardown.ts +228 -0
  381. package/.framework/tests/reporter.ts +351 -0
  382. package/.framework/tests/setup.ts +135 -0
  383. package/.framework/tests/ui/ui-sweep.ts +278 -0
  384. package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
  385. package/.framework/tests/unit/agent-runner.test.ts +2389 -0
  386. package/.framework/tests/unit/ai-interactions.test.ts +81 -0
  387. package/.framework/tests/unit/app-manifest.test.ts +359 -0
  388. package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
  389. package/.framework/tests/unit/cil-determinism.test.ts +85 -0
  390. package/.framework/tests/unit/core-isolation.test.ts +153 -0
  391. package/.framework/tests/unit/funnel-signals.test.ts +135 -0
  392. package/.framework/tests/unit/install-app.test.ts +1759 -0
  393. package/.framework/tests/unit/invites-security.test.ts +572 -0
  394. package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
  395. package/.framework/tests/unit/kb-search.test.ts +119 -0
  396. package/.framework/tests/unit/migrate.test.ts +509 -0
  397. package/.framework/tests/unit/notify.test.ts +136 -0
  398. package/.framework/tests/unit/permissions.test.ts +269 -0
  399. package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
  400. package/.framework/tests/unit/principal-cache.test.ts +138 -0
  401. package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
  402. package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
  403. package/.framework/tests/unit/schema-utils.test.ts +225 -0
  404. package/.framework/tests/unit/trigger-engine.test.ts +513 -0
  405. package/.framework/tests/unit/validate-app.test.ts +527 -0
  406. package/README.md +34 -3
  407. package/bin/spine-framework.cjs +1 -0
  408. package/config/tailwind.config.cjs +7 -0
  409. package/config/tsconfig.functions.json +42 -0
  410. package/config/tsconfig.json +37 -9
  411. package/config/vite.config.ts +31 -2
  412. package/netlify.toml +31 -3
  413. package/package.json +46 -29
  414. package/scripts/assemble-frontend.sh +127 -44
  415. package/scripts/assemble-functions.sh +127 -29
  416. package/scripts/boundary-check.sh +6 -2
  417. package/scripts/build-manifest.sh +24 -68
  418. package/scripts/checksum-manifest.mts +345 -0
  419. package/scripts/dev-clean.sh +86 -0
  420. package/scripts/dev-netlify.sh +49 -0
  421. package/scripts/netlify-dev-wrapper.sh +2 -0
  422. package/scripts/verify-install.ts +358 -0
  423. package/scripts/verify-integrity.sh +21 -57
  424. package/scripts/verify-manifest.mts +305 -0
  425. package/templates/project/gitignore +45 -0
  426. package/{config → templates/project}/package-lock.json +22335 -9366
  427. package/vitest.config.ts +46 -0
  428. package/.framework/public/spine.config.json +0 -91
  429. package/config/deno.lock +0 -108
  430. package/config/tsconfig.node.tsbuildinfo +0 -1
  431. package/config/tsconfig.tsbuildinfo +0 -1
  432. package/config/vite.config.d.ts +0 -2
  433. package/custom/.devin/AGENT.md +0 -357
  434. package/custom/.devin/skills/install-app/SKILL.md +0 -39
  435. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
  436. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
  437. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
  438. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
  439. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
  440. package/custom/.devin/workflows/app-install.yaml +0 -83
  441. package/custom/README.md +0 -79
  442. package/docs/README.md +0 -15
  443. package/scripts/app-install-cli.ts +0 -286
  444. package/scripts/check-core-integrity.sh +0 -82
  445. package/scripts/ingest-chunks.cjs +0 -202
  446. package/scripts/kb-chunk-parser.cjs +0 -312
  447. package/scripts/kb-chunk-parser.ts +0 -330
  448. package/scripts/kb-ingest-docs.ts +0 -203
  449. package/scripts/load-test-app-install.ts +0 -484
  450. package/scripts/test-login.js +0 -33
  451. package/spine.config.json +0 -91
@@ -1,3 +1,13 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Form.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/components/ui/Form.tsx"]
2
+ // CIL[DOC-MACRO purpose="Provides reusable form, field, section, row and column UI primitives"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Aggregate form-building components and their prop types for the shared UI library"]
4
+ // CIL[DOC-CONTEXT module=".framework/src/components/ui" layer="ui" related_files=".framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/button.tsx,.framework/src/lib/utils.ts,.framework/src/types/types.ts"]
5
+ // CIL[DOC-CONTRACT inputs="N/A" outputs="N/A" errors="N/A" side_effects="N/A"]
6
+ // CIL[DOC-MICRO logic_summary="Imports React, local types, FieldRenderer, Button and utility classes; exports five related components" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="UI component consumers and form authors"]
10
+
1
11
 
2
12
 
3
13
 
@@ -21,41 +31,27 @@
21
31
 
22
32
 
23
33
 
24
- // CIL[BEGIN chunk_id="Form_moduleheader_1783907801" type="module_header" identity="imports" parent="none"]
25
- // CIL[DOC-MACRO purpose="Import React and form dependencies"]
26
- // CIL[DOC-RESPONSIBILITY responsibility="Provide all external dependencies for form components"]
27
- // CIL[DOC-CONTEXT module="Form" 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/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
28
- // CIL[DOC-CONTRACT inputs="none" outputs="React, FieldDefinition, FieldRenderer, Button, cn" errors="none" side_effects="none"]
29
- // CIL[DOC-MICRO logic_summary="Imports React, types, field renderer, button component, and utility function" notable_decisions="[]"]
30
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
31
- // CIL[DOC-STABILITY stability="stable"]
32
- // CIL[DOC-AUDIENCE audience="developer"]
33
- // 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/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
34
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
35
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
36
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
37
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
38
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
39
34
  import React from 'react'
40
35
  import { FieldDefinition } from '../../types/types'
41
36
  import { FieldRenderer } from '../shared/FieldRenderer'
42
37
  import { Button } from './button'
43
38
  import { cn } from '../../lib/utils'
44
- // CIL[END chunk_id="Form_moduleheader_1783907801"]
45
- // CIL[BEGIN chunk_id="Form_formprops_1783907801" type="interface" identity="FormProps" parent="none"]
46
- // CIL[DOC-MACRO purpose="Define main form component props interface"]
47
- // CIL[DOC-RESPONSIBILITY responsibility="Specify all props needed for Form component configuration"]
48
- // CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
49
- // CIL[DOC-CONTRACT inputs="none" outputs="FormProps interface" errors="none" side_effects="none"]
50
- // CIL[DOC-MICRO logic_summary="Comprehensive props for fields, data, validation, and form actions" notable_decisions="[]"]
51
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
52
- // CIL[DOC-STABILITY stability="stable"]
53
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
54
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
55
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
56
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
39
+ // CIL[DOC-VECTOR type="context" content="purpose='Provides reusable form, field, section, row and column UI primitives'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/button.tsx"]
40
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
41
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
42
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
57
43
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
58
44
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
45
+ // CIL[END stable_id="~/.framework/src/components/ui/Form.tsx:module_header:module_header"]
46
+
47
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Form.tsx:FormProps:interface" type="interface" identity="FormProps" parent="~/.framework/src/components/ui/Form.tsx"]
48
+ // CIL[DOC-MACRO purpose="Defines the prop contract for the Form component"]
49
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare configurable form state, handlers and action labels"]
50
+ // CIL[DOC-CONTEXT module=".framework/src/components/ui" layer="ui" related_files=".framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/Form.tsx,.framework/src/components/ui/button.tsx,.framework/src/lib/utils.ts,.framework/src/types/types.ts"]
51
+ // CIL[DOC-CONTRACT inputs="N/A" outputs="N/A" errors="N/A" side_effects="N/A"]
52
+ // CIL[DOC-MICRO logic_summary="Fields, data, errors, touched, onChange, onBlur, onSubmit, isSubmitting, submit/cancel controls, disabled and className" notable_decisions="[]"]
53
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
54
+ // CIL[DOC-STABILITY stability="stable"]
59
55
  interface FormProps {
60
56
  fields: FieldDefinition[]
61
57
  data: Record<string, any>
@@ -72,21 +68,22 @@ interface FormProps {
72
68
  disabled?: boolean
73
69
  className?: string
74
70
  }
75
- // CIL[END chunk_id="Form_formprops_1783907801"]
76
- // CIL[BEGIN chunk_id="Form_form_1783907801" type="function" identity="Form" parent="none"]
77
- // CIL[DOC-MACRO purpose="Render schema-driven form with validation and actions"]
78
- // CIL[DOC-RESPONSIBILITY responsibility="Handle form submission, field rendering, and error display"]
79
- // CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
80
- // CIL[DOC-CONTRACT inputs="none" outputs="Form element" errors="none" side_effects="Calls onSubmit, onChange, onBlur callbacks"]
81
- // CIL[DOC-MICRO logic_summary="Maps fields to FieldRenderer, shows errors only for touched fields" notable_decisions="[]"]
82
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
83
- // CIL[DOC-STABILITY stability="stable"]
84
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/table-primitives.tsx, \."]
85
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
86
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
87
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
71
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the prop contract for the Form component'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/button.tsx"]
72
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
73
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
74
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
88
75
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
89
76
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
77
+ // CIL[END stable_id="~/.framework/src/components/ui/Form.tsx:FormProps:interface"]
78
+
79
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Form.tsx:Form:component" type="component" identity="Form" parent="~/.framework/src/components/ui/Form.tsx"]
80
+ // CIL[DOC-MACRO purpose="Renders a dynamic form from FieldDefinition objects with validation and action buttons"]
81
+ // CIL[DOC-RESPONSIBILITY responsibility="Map fields to FieldRenderer, manage submit and cancel actions, and apply layout classes"]
82
+ // CIL[DOC-CONTEXT module=".framework/src/components/ui" layer="ui" related_files=".framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/Form.tsx,.framework/src/components/ui/button.tsx,.framework/src/lib/utils.ts,.framework/src/types/types.ts"]
83
+ // CIL[DOC-CONTRACT inputs="fields, data, errors, touched, onChange, onBlur, onSubmit, isSubmitting, submitText, cancelText, onCancel, showCancel, disabled, className" outputs="JSX form element" errors="None" side_effects="Calls onChange, onBlur, onSubmit and onCancel callbacks"]
84
+ // CIL[DOC-MICRO logic_summary="Filters unnamed fields, delegates per-field rendering to FieldRenderer, and renders submit/cancel buttons in a flex action row" notable_decisions="[]"]
85
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
86
+ // CIL[DOC-STABILITY stability="stable"]
90
87
  export function Form({
91
88
  fields,
92
89
  data,
@@ -157,21 +154,22 @@ export function Form({
157
154
  </form>
158
155
  )
159
156
  }
160
- // CIL[END chunk_id="Form_form_1783907801"]
161
- // CIL[BEGIN chunk_id="Form_formfieldprops_1783907801" type="interface" identity="FormFieldProps" parent="none"]
162
- // CIL[DOC-MACRO purpose="Define props for single form field wrapper"]
163
- // CIL[DOC-RESPONSIBILITY responsibility="Specify props needed for individual field rendering"]
164
- // CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
165
- // CIL[DOC-CONTRACT inputs="none" outputs="FormFieldProps interface" errors="none" side_effects="none"]
166
- // CIL[DOC-MICRO logic_summary="Props for field definition, value, error state, and callbacks" notable_decisions="[]"]
167
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
168
- // CIL[DOC-STABILITY stability="stable"]
169
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/portal/pages/ContentPage.tsx, \."]
170
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
171
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
172
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
157
+ // CIL[DOC-VECTOR type="context" content="purpose='Renders a dynamic form from FieldDefinition objects with validation and action buttons'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/button.tsx"]
158
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
159
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
160
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
173
161
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
174
162
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
163
+ // CIL[END stable_id="~/.framework/src/components/ui/Form.tsx:Form:component"]
164
+
165
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Form.tsx:FormFieldProps:interface" type="interface" identity="FormFieldProps" parent="~/.framework/src/components/ui/Form.tsx"]
166
+ // CIL[DOC-MACRO purpose="Defines the per-field prop contract for the FormField wrapper"]
167
+ // CIL[DOC-RESPONSIBILITY responsibility="Describe the inputs consumed by a single FormField instance"]
168
+ // CIL[DOC-CONTEXT module=".framework/src/components/ui" layer="ui" related_files=".framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/Form.tsx,.framework/src/components/ui/button.tsx,.framework/src/lib/utils.ts,.framework/src/types/types.ts"]
169
+ // CIL[DOC-CONTRACT inputs="N/A" outputs="N/A" errors="N/A" side_effects="N/A"]
170
+ // CIL[DOC-MICRO logic_summary="Single field definition, value, optional error, touched flag, onChange, onBlur and readonly flag" notable_decisions="[]"]
171
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
172
+ // CIL[DOC-STABILITY stability="stable"]
175
173
  interface FormFieldProps {
176
174
  field: FieldDefinition
177
175
  value: any
@@ -181,21 +179,22 @@ interface FormFieldProps {
181
179
  onBlur?: () => void
182
180
  readonly?: boolean
183
181
  }
184
- // CIL[END chunk_id="Form_formfieldprops_1783907801"]
185
- // CIL[BEGIN chunk_id="Form_formfield_1783907801" type="function" identity="FormField" parent="none"]
186
- // CIL[DOC-MACRO purpose="Render single form field with touched-gated error display"]
187
- // CIL[DOC-RESPONSIBILITY responsibility="Wrap FieldRenderer with conditional error visibility"]
188
- // CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/db.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
189
- // CIL[DOC-CONTRACT inputs="none" outputs="FieldRenderer component" errors="none" side_effects="Delegates to onChange/onBlur"]
190
- // CIL[DOC-MICRO logic_summary="Passes error to FieldRenderer only when field has been touched" 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: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/db.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
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."]
182
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the per-field prop contract for the FormField wrapper'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/button.tsx"]
183
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
184
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
185
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
197
186
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
198
187
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
188
+ // CIL[END stable_id="~/.framework/src/components/ui/Form.tsx:FormFieldProps:interface"]
189
+
190
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Form.tsx:FormField:component" type="component" identity="FormField" parent="~/.framework/src/components/ui/Form.tsx"]
191
+ // CIL[DOC-MACRO purpose="Wraps FieldRenderer for a single form field value"]
192
+ // CIL[DOC-RESPONSIBILITY responsibility="Forward field props to FieldRenderer with touched-gated error display"]
193
+ // CIL[DOC-CONTEXT module=".framework/src/components/ui" layer="ui" related_files=".framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/Form.tsx,.framework/src/components/ui/button.tsx,.framework/src/lib/utils.ts,.framework/src/types/types.ts"]
194
+ // CIL[DOC-CONTRACT inputs="field, value, error, touched, onChange, onBlur, readonly" outputs="JSX field rendering" errors="None" side_effects="None"]
195
+ // CIL[DOC-MICRO logic_summary="Renders a FieldRenderer and suppresses the error text until the field is touched" notable_decisions="[]"]
196
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
197
+ // CIL[DOC-STABILITY stability="stable"]
199
198
  export function FormField({
200
199
  field,
201
200
  value,
@@ -216,42 +215,44 @@ export function FormField({
216
215
  />
217
216
  )
218
217
  }
219
- // CIL[END chunk_id="Form_formfield_1783907801"]
220
- // CIL[BEGIN chunk_id="Form_formsectionprops_1783907801" type="interface" identity="FormSectionProps" parent="none"]
221
- // CIL[DOC-MACRO purpose="Define props for form section container"]
222
- // CIL[DOC-RESPONSIBILITY responsibility="Specify props for grouping form fields with title/description"]
223
- // CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[]"]
224
- // CIL[DOC-CONTRACT inputs="none" outputs="FormSectionProps interface" errors="none" side_effects="none"]
225
- // CIL[DOC-MICRO logic_summary="Props for optional title, description, children, and styling" notable_decisions="[]"]
226
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
227
- // CIL[DOC-STABILITY stability="stable"]
228
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: none."]
229
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
230
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
231
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
218
+ // CIL[DOC-VECTOR type="context" content="purpose='Wraps FieldRenderer for a single form field value'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/button.tsx"]
219
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
220
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
221
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
232
222
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
233
223
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
224
+ // CIL[END stable_id="~/.framework/src/components/ui/Form.tsx:FormField:component"]
225
+
226
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Form.tsx:FormSectionProps:interface" type="interface" identity="FormSectionProps" parent="~/.framework/src/components/ui/Form.tsx"]
227
+ // CIL[DOC-MACRO purpose="Defines props for a titled form section wrapper"]
228
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare title, description, children and optional className"]
229
+ // CIL[DOC-CONTEXT module=".framework/src/components/ui" layer="ui" related_files=".framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/Form.tsx,.framework/src/components/ui/button.tsx,.framework/src/lib/utils.ts,.framework/src/types/types.ts"]
230
+ // CIL[DOC-CONTRACT inputs="N/A" outputs="N/A" errors="N/A" side_effects="N/A"]
231
+ // CIL[DOC-MICRO logic_summary="Optional section title, optional description, child content and layout className" notable_decisions="[]"]
232
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
233
+ // CIL[DOC-STABILITY stability="stable"]
234
234
  interface FormSectionProps {
235
235
  title?: string
236
236
  description?: string
237
237
  children: React.ReactNode
238
238
  className?: string
239
239
  }
240
- // CIL[END chunk_id="Form_formsectionprops_1783907801"]
241
- // CIL[BEGIN chunk_id="Form_formsection_1783907801" type="function" identity="FormSection" parent="none"]
242
- // CIL[DOC-MACRO purpose="Render titled group container for form fields"]
243
- // CIL[DOC-RESPONSIBILITY responsibility="Display optional title/description with children content"]
244
- // CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[]"]
245
- // CIL[DOC-CONTRACT inputs="none" outputs="Styled div container" errors="none" side_effects="none"]
246
- // CIL[DOC-MICRO logic_summary="Conditionally renders header section when title or description provided" notable_decisions="[]"]
247
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
248
- // CIL[DOC-STABILITY stability="stable"]
249
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: none."]
250
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
251
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
252
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
240
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines props for a titled form section wrapper'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/button.tsx"]
241
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
242
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
243
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
253
244
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
254
245
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
246
+ // CIL[END stable_id="~/.framework/src/components/ui/Form.tsx:FormSectionProps:interface"]
247
+
248
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Form.tsx:FormSection:component" type="component" identity="FormSection" parent="~/.framework/src/components/ui/Form.tsx"]
249
+ // CIL[DOC-MACRO purpose="Renders a container with an optional title and description"]
250
+ // CIL[DOC-RESPONSIBILITY responsibility="Group child fields under a heading with consistent vertical spacing"]
251
+ // CIL[DOC-CONTEXT module=".framework/src/components/ui" layer="ui" related_files=".framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/Form.tsx,.framework/src/components/ui/button.tsx,.framework/src/lib/utils.ts,.framework/src/types/types.ts"]
252
+ // CIL[DOC-CONTRACT inputs="title, description, children, className" outputs="JSX section div" errors="None" side_effects="None"]
253
+ // CIL[DOC-MICRO logic_summary="Conditionally renders a heading and paragraph, then children inside a spaced div" notable_decisions="[]"]
254
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
255
+ // CIL[DOC-STABILITY stability="stable"]
255
256
  export function FormSection({ title, description, children, className }: FormSectionProps) {
256
257
  return (
257
258
  <div className={cn('space-y-4', className)}>
@@ -269,40 +270,42 @@ export function FormSection({ title, description, children, className }: FormSec
269
270
  </div>
270
271
  )
271
272
  }
272
- // CIL[END chunk_id="Form_formsection_1783907801"]
273
- // CIL[BEGIN chunk_id="Form_formrowprops_1783907801" type="interface" identity="FormRowProps" parent="none"]
274
- // CIL[DOC-MACRO purpose="Define props for responsive form row container"]
275
- // CIL[DOC-RESPONSIBILITY responsibility="Specify props for two-column grid layout row"]
276
- // CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[]"]
277
- // CIL[DOC-CONTRACT inputs="none" outputs="FormRowProps interface" errors="none" side_effects="none"]
278
- // CIL[DOC-MICRO logic_summary="Props for children content and optional styling classes" notable_decisions="[]"]
279
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
280
- // CIL[DOC-STABILITY stability="stable"]
281
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: none."]
282
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
283
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
284
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
273
+ // CIL[DOC-VECTOR type="context" content="purpose='Renders a container with an optional title and description'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/button.tsx"]
274
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
275
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
276
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
285
277
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
286
278
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
279
+ // CIL[END stable_id="~/.framework/src/components/ui/Form.tsx:FormSection:component"]
280
+
281
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Form.tsx:FormRowProps:interface" type="interface" identity="FormRowProps" parent="~/.framework/src/components/ui/Form.tsx"]
282
+ // CIL[DOC-MACRO purpose="Defines props for a responsive form row layout"]
283
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare children and optional className for a grid row"]
284
+ // CIL[DOC-CONTEXT module=".framework/src/components/ui" layer="ui" related_files=".framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/Form.tsx,.framework/src/components/ui/button.tsx,.framework/src/lib/utils.ts,.framework/src/types/types.ts"]
285
+ // CIL[DOC-CONTRACT inputs="N/A" outputs="N/A" errors="N/A" side_effects="N/A"]
286
+ // CIL[DOC-MICRO logic_summary="Children to render and an optional className override" notable_decisions="[]"]
287
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
288
+ // CIL[DOC-STABILITY stability="stable"]
287
289
  interface FormRowProps {
288
290
  children: React.ReactNode
289
291
  className?: string
290
292
  }
291
- // CIL[END chunk_id="Form_formrowprops_1783907801"]
292
- // CIL[BEGIN chunk_id="Form_formrow_1783907801" type="function" identity="FormRow" parent="none"]
293
- // CIL[DOC-MACRO purpose="Render two-column responsive grid for form fields"]
294
- // CIL[DOC-RESPONSIBILITY responsibility="Provide responsive grid layout container"]
295
- // CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[]"]
296
- // CIL[DOC-CONTRACT inputs="none" outputs="Grid div container" errors="none" side_effects="none"]
297
- // CIL[DOC-MICRO logic_summary="Uses Tailwind grid classes for responsive two-column layout" notable_decisions="[]"]
298
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
299
- // CIL[DOC-STABILITY stability="stable"]
300
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: none."]
301
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
302
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
303
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
293
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines props for a responsive form row layout'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/button.tsx"]
294
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
295
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
296
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
304
297
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
305
298
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
299
+ // CIL[END stable_id="~/.framework/src/components/ui/Form.tsx:FormRowProps:interface"]
300
+
301
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Form.tsx:FormRow:component" type="component" identity="FormRow" parent="~/.framework/src/components/ui/Form.tsx"]
302
+ // CIL[DOC-MACRO purpose="Provides a responsive grid row for laying out form columns"]
303
+ // CIL[DOC-RESPONSIBILITY responsibility="Render children in a one or two column grid with a gap"]
304
+ // CIL[DOC-CONTEXT module=".framework/src/components/ui" layer="ui" related_files=".framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/Form.tsx,.framework/src/components/ui/button.tsx,.framework/src/lib/utils.ts,.framework/src/types/types.ts"]
305
+ // CIL[DOC-CONTRACT inputs="children, className" outputs="JSX grid div" errors="None" side_effects="None"]
306
+ // CIL[DOC-MICRO logic_summary="Uses a single column on small screens and two columns on the sm breakpoint" notable_decisions="[]"]
307
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
308
+ // CIL[DOC-STABILITY stability="stable"]
306
309
  export function FormRow({ children, className }: FormRowProps) {
307
310
  return (
308
311
  <div className={cn('grid grid-cols-1 sm:grid-cols-2 gap-4', className)}>
@@ -310,41 +313,43 @@ export function FormRow({ children, className }: FormRowProps) {
310
313
  </div>
311
314
  )
312
315
  }
313
- // CIL[END chunk_id="Form_formrow_1783907801"]
314
- // CIL[BEGIN chunk_id="Form_formcolumnprops_1783907801" type="interface" identity="FormColumnProps" parent="none"]
315
- // CIL[DOC-MACRO purpose="Define props for form column within grid row"]
316
- // CIL[DOC-RESPONSIBILITY responsibility="Specify props for column span and content"]
317
- // CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[]"]
318
- // CIL[DOC-CONTRACT inputs="none" outputs="FormColumnProps interface" errors="none" side_effects="none"]
319
- // CIL[DOC-MICRO logic_summary="Props for children, column span (1 or 2), and styling" notable_decisions="[]"]
320
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
321
- // CIL[DOC-STABILITY stability="stable"]
322
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: none."]
323
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
324
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
325
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
316
+ // CIL[DOC-VECTOR type="context" content="purpose='Provides a responsive grid row for laying out form columns'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/button.tsx"]
317
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
318
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
319
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
326
320
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
327
321
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
322
+ // CIL[END stable_id="~/.framework/src/components/ui/Form.tsx:FormRow:component"]
323
+
324
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Form.tsx:FormColumnProps:interface" type="interface" identity="FormColumnProps" parent="~/.framework/src/components/ui/Form.tsx"]
325
+ // CIL[DOC-MACRO purpose="Defines props for a grid column with span control"]
326
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare children, span and optional className for a column"]
327
+ // CIL[DOC-CONTEXT module=".framework/src/components/ui" layer="ui" related_files=".framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/Form.tsx,.framework/src/components/ui/button.tsx,.framework/src/lib/utils.ts,.framework/src/types/types.ts"]
328
+ // CIL[DOC-CONTRACT inputs="N/A" outputs="N/A" errors="N/A" side_effects="N/A"]
329
+ // CIL[DOC-MICRO logic_summary="Children, optional span value of 1 or 2, and layout className" notable_decisions="[]"]
330
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
331
+ // CIL[DOC-STABILITY stability="stable"]
328
332
  interface FormColumnProps {
329
333
  children: React.ReactNode
330
334
  span?: 1 | 2
331
335
  className?: string
332
336
  }
333
- // CIL[END chunk_id="Form_formcolumnprops_1783907801"]
334
- // CIL[BEGIN chunk_id="Form_formcolumn_1783907801" type="function" identity="FormColumn" parent="none"]
335
- // CIL[DOC-MACRO purpose="Render column within FormRow grid with span control"]
336
- // CIL[DOC-RESPONSIBILITY responsibility="Provide column container with configurable span"]
337
- // CIL[DOC-CONTEXT module="Form" layer="frontend-component" related_files="[]"]
338
- // CIL[DOC-CONTRACT inputs="none" outputs="Column div with span classes" errors="none" side_effects="none"]
339
- // CIL[DOC-MICRO logic_summary="Maps span values to Tailwind col-span classes for grid layout" notable_decisions="[]"]
340
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
341
- // CIL[DOC-STABILITY stability="stable"]
342
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: none."]
343
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
344
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
345
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
337
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines props for a grid column with span control'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/button.tsx"]
338
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
339
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
340
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
346
341
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
347
342
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
343
+ // CIL[END stable_id="~/.framework/src/components/ui/Form.tsx:FormColumnProps:interface"]
344
+
345
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Form.tsx:FormColumn:component" type="component" identity="FormColumn" parent="~/.framework/src/components/ui/Form.tsx"]
346
+ // CIL[DOC-MACRO purpose="Renders a grid column with a configurable col-span"]
347
+ // CIL[DOC-RESPONSIBILITY responsibility="Apply the requested tailwind column span class to children"]
348
+ // CIL[DOC-CONTEXT module=".framework/src/components/ui" layer="ui" related_files=".framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/Form.tsx,.framework/src/components/ui/button.tsx,.framework/src/lib/utils.ts,.framework/src/types/types.ts"]
349
+ // CIL[DOC-CONTRACT inputs="children, span, className" outputs="JSX column div" errors="None" side_effects="None"]
350
+ // CIL[DOC-MICRO logic_summary="Maps span to a tailwind col-span class via a lookup and merges an optional className" notable_decisions="[]"]
351
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
352
+ // CIL[DOC-STABILITY stability="stable"]
348
353
  export function FormColumn({ children, span = 1, className }: FormColumnProps) {
349
354
  const spanClasses = {
350
355
  1: 'col-span-1',
@@ -357,4 +362,10 @@ export function FormColumn({ children, span = 1, className }: FormColumnProps) {
357
362
  </div>
358
363
  )
359
364
  }
360
- // CIL[END chunk_id="Form_formcolumn_1783907801"]
365
+ // CIL[DOC-VECTOR type="context" content="purpose='Renders a grid column with a configurable col-span'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/shared/FieldRenderer.tsx,.framework/src/components/ui/button.tsx"]
366
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
367
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
368
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
369
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
370
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
371
+ // CIL[END stable_id="~/.framework/src/components/ui/Form.tsx:FormColumn:component"]