spine-framework 0.3.145 → 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 +15 -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,18 +1,13 @@
1
- // CIL[BEGIN chunk_id="cilchunkdetailpage_module_header_1784193942" type="module_header" identity="module_header" parent="none"]
2
- // CIL[DOC-MACRO purpose="Import dependencies and icons for the CIL chunk detail page"]
3
- // CIL[DOC-RESPONSIBILITY responsibility="Provides React hooks, router, apiFetch, app path hook, UI components, and lucide icons used by the page"]
4
- // CIL[DOC-CONTEXT module="cortex:cil-chunk-detail" layer="presentation" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
2
+ // CIL[DOC-MACRO purpose="Imports and page scaffolding for the CIL chunk detail admin page"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Set up dependencies and shared UI primitives for CILChunkDetailPage"]
4
+ // CIL[DOC-CONTEXT module="CIL admin UI" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tabs.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts"]
5
5
  // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
6
- // CIL[DOC-MICRO logic_summary="Imports useEffect, useState, useCallback, useParams, apiFetch, useAppPath, card/button/badge/skeleton/textarea/label/select/tabs components, and lucide icons" notable_decisions="[]"]
7
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
6
+ // CIL[DOC-MICRO logic_summary="Aggregates React hooks, router, API, UI components, icons, and PageInstructions for the page" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
8
  // CIL[DOC-STABILITY stability="stable"]
9
- // CIL[DOC-AUDIENCE audience="developer"]
10
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .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"]
9
+ // CIL[DOC-AUDIENCE audience="spine maintainers and CIL UI developers"]
10
+
16
11
  import { useEffect, useState, useCallback } from 'react'
17
12
  import { useParams } from 'react-router-dom'
18
13
  import { apiFetch } from '@core/lib/api'
@@ -52,21 +47,22 @@ import {
52
47
 
53
48
 
54
49
  import { PageInstructions } from '../../../components/admin/PageInstructions'
55
- // CIL[END chunk_id="cilchunkdetailpage_module_header_1784193942"]
56
- // CIL[BEGIN chunk_id="cilchunkdetailpage_chunkcontract_1784193942" type="interface" identity="ChunkContract" parent="none"]
57
- // CIL[DOC-MACRO purpose="Define the shape of a chunk contract"]
58
- // CIL[DOC-RESPONSIBILITY responsibility="Declare the TypeScript interface representing an ingested code chunk and its metadata"]
59
- // CIL[DOC-CONTEXT module="cortex:cil-chunk-detail" layer="presentation" related_files="[\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/migrations/015_simplify_apps_table.sql\",\"\\\"]"]
60
- // CIL[DOC-CONTRACT inputs="none" outputs="ChunkContract type definition" errors="none" side_effects="none"]
61
- // CIL[DOC-MICRO logic_summary="Describes id, name, file path, line range, type, macro/micro docs, input/output specs, side effects, stability, test paths, confidence fields, hash, dead-code flag, and caller/callee lists" notable_decisions="[]"]
62
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
63
- // CIL[DOC-STABILITY stability="stable"]
64
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/migrations/015_simplify_apps_table.sql, \."]
65
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
66
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
67
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
50
+ // CIL[DOC-VECTOR type="context" content="purpose='Imports and page scaffolding for the CIL chunk detail admin page'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
51
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
52
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
53
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
68
54
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
69
55
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
56
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:module_header:module_header"]
57
+
58
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:ChunkContract:interface" type="interface" identity="ChunkContract" parent="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
59
+ // CIL[DOC-MACRO purpose="Defines the data contract for a CIL chunk record"]
60
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a TypeScript shape for chunk contract fields"]
61
+ // CIL[DOC-CONTEXT module="CIL admin UI" layer="domain" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tabs.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
62
+ // CIL[DOC-CONTRACT inputs="none" outputs="TypeScript interface declaration" errors="none" side_effects="none"]
63
+ // CIL[DOC-MICRO logic_summary="Maps all chunk contract fields including identifiers, doc status, tests, call lists, and hashes" notable_decisions="[]"]
64
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
65
+ // CIL[DOC-STABILITY stability="stable"]
70
66
  interface ChunkContract {
71
67
  id: string
72
68
  chunk_name: string
@@ -86,91 +82,88 @@ interface ChunkContract {
86
82
  boundary_confidence: string
87
83
  stored_hash: string | null
88
84
  hash_status: string
85
+ content_hash: string | null
86
+ version_id: string | null
89
87
  is_dead_code: boolean
90
88
  callers: { chunk_id: string; chunk_name: string; file_path: string }[]
91
89
  callees: { chunk_id: string; chunk_name: string; file_path: string }[]
92
90
  }
93
-
94
- // CIL[END chunk_id="cilchunkdetailpage_chunkcontract_1784193942"]
95
- // CIL[BEGIN chunk_id="cilchunkdetailpage_embeddingstatus_1784193942" type="interface" identity="EmbeddingStatus" parent="none"]
96
- // CIL[DOC-MACRO purpose="Define the shape of embedding coverage status"]
97
- // CIL[DOC-RESPONSIBILITY responsibility="Provide a TypeScript type contract for chunk embedding coverage"]
98
- // CIL[DOC-CONTEXT module="cortex:cil-chunk-detail" layer="presentation" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
99
- // CIL[DOC-CONTRACT inputs="none" outputs="EmbeddingStatus type definition" errors="none" side_effects="none"]
100
- // CIL[DOC-MICRO logic_summary="Declares coverage percentage and counts of embedded vs total chunks" notable_decisions="[]"]
101
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
102
- // CIL[DOC-STABILITY stability="stable"]
103
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
104
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
105
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
106
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
91
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the data contract for a CIL chunk record'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
92
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
93
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
94
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
107
95
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
108
96
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
97
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:ChunkContract:interface"]
98
+
99
+
100
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:EmbeddingStatus:interface" type="interface" identity="EmbeddingStatus" parent="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
101
+ // CIL[DOC-MACRO purpose="Tracks vector embedding coverage for a project"]
102
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare the shape of embedding coverage metrics"]
103
+ // CIL[DOC-CONTEXT module="CIL admin UI" layer="domain" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tabs.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
104
+ // CIL[DOC-CONTRACT inputs="none" outputs="TypeScript interface declaration" errors="none" side_effects="none"]
105
+ // CIL[DOC-MICRO logic_summary="Defines coverage_pct, embedded_chunks, and total_chunks fields" notable_decisions="[]"]
106
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
107
+ // CIL[DOC-STABILITY stability="stable"]
109
108
  interface EmbeddingStatus {
110
109
  coverage_pct: number
111
110
  embedded_chunks: number
112
111
  total_chunks: number
113
112
  }
113
+ // CIL[DOC-VECTOR type="context" content="purpose='Tracks vector embedding coverage for a project'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
114
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
115
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
116
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
117
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
118
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
119
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:EmbeddingStatus:interface"]
120
+
114
121
 
115
122
 
116
123
 
117
- // CIL[END chunk_id="cilchunkdetailpage_embeddingstatus_1784193942"]
118
- // CIL[BEGIN chunk_id="cilchunkdetailpage_doc_confidence_config_1784193942" type="constant" identity="DOC_CONFIDENCE_CONFIG" parent="none"]
119
- // CIL[DOC-MACRO purpose="Map doc-confidence levels to badge labels, colors, and icons"]
120
- // CIL[DOC-RESPONSIBILITY responsibility="Provide display metadata for human_verified, ai_generated, and unverified_legacy confidence states"]
121
- // CIL[DOC-CONTEXT module="cortex:cil-chunk-detail" layer="presentation" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
122
- // CIL[DOC-CONTRACT inputs="none" outputs="Record<string, { label, color, icon }>" errors="none" side_effects="none"]
123
- // CIL[DOC-MICRO logic_summary="Associates each confidence key with a UI label, Tailwind color class, and lucide icon component" notable_decisions="[]"]
124
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
124
+
125
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:doc_and_stability:constant" type="constant" identity="doc_and_stability" parent="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
126
+ // CIL[DOC-MACRO purpose="Provides badge configuration for documentation confidence and stability labels"]
127
+ // CIL[DOC-RESPONSIBILITY responsibility="Map doc_confidence and stability enum values to UI labels, colors, and badge variants"]
128
+ // CIL[DOC-CONTEXT module="CIL admin UI" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tabs.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
129
+ // CIL[DOC-CONTRACT inputs="none" outputs="Record objects keyed by doc confidence and stability strings" errors="none" side_effects="none"]
130
+ // CIL[DOC-MICRO logic_summary="Defines DOC_CONFIDENCE_CONFIG with label, color, and icon; STABILITY_BADGE maps stability to Badge variant strings" notable_decisions="[]"]
131
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
125
132
  // CIL[DOC-STABILITY stability="stable"]
126
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/src/components/ui/table-primitives.tsx, \."]
127
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
128
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
129
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
130
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
131
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
132
133
  const DOC_CONFIDENCE_CONFIG: Record<string, { label: string; color: string; icon: React.ElementType }> = {
133
134
  human_verified: { label: 'Human Verified', color: 'text-green-600', icon: CheckCircle2 },
134
135
  ai_generated: { label: 'AI Generated', color: 'text-blue-600', icon: Zap },
135
136
  unverified_legacy: { label: 'Unverified', color: 'text-amber-600', icon: AlertTriangle },
136
137
  }
137
138
 
138
- // CIL[END chunk_id="cilchunkdetailpage_doc_confidence_config_1784193942"]
139
- // CIL[BEGIN chunk_id="cilchunkdetailpage_stability_badge_1784193942" type="constant" identity="STABILITY_BADGE" parent="none"]
140
- // CIL[DOC-MACRO purpose="Map stability levels to badge variants"]
141
- // CIL[DOC-RESPONSIBILITY responsibility="Provide Badge variant values for stable, internal, and experimental stability states"]
142
- // CIL[DOC-CONTEXT module="cortex:cil-chunk-detail" layer="presentation" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\"\\\"]"]
143
- // CIL[DOC-CONTRACT inputs="none" outputs="Record<string, Badge variant union>" errors="none" side_effects="none"]
144
- // CIL[DOC-MICRO logic_summary="Maps stable to default, internal to secondary, and experimental to outline variant names" notable_decisions="[]"]
145
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
146
- // CIL[DOC-STABILITY stability="stable"]
147
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/migrations/025_retype_threads_messages.sql, \."]
148
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
149
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
150
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
151
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
152
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
139
+
140
+
141
+
142
+
153
143
  const STABILITY_BADGE: Record<string, 'default' | 'secondary' | 'outline'> = {
154
144
  stable: 'default',
155
145
  internal: 'secondary',
156
146
  experimental: 'outline',
157
147
  }
158
148
 
159
- // CIL[END chunk_id="cilchunkdetailpage_stability_badge_1784193942"]
160
- // CIL[BEGIN chunk_id="cilchunkdetailpage_hashstatusbadge_1784193942" type="function" identity="HashStatusBadge" parent="none"]
161
- // CIL[DOC-MACRO purpose="Render a badge indicating the current hash validation status"]
162
- // CIL[DOC-RESPONSIBILITY responsibility="Display current, drift_detected, or unknown hash status as a Badge with icon"]
163
- // CIL[DOC-CONTEXT module="cortex:cil-chunk-detail" layer="presentation" related_files="[]"]
164
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="none" side_effects="none"]
165
- // CIL[DOC-MICRO logic_summary="Returns a green Current badge, a destructive Drift Detected badge, or a muted Unknown badge based on status value" notable_decisions="[]"]
166
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
167
- // CIL[DOC-STABILITY stability="stable"]
168
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
169
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
170
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
171
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
149
+
150
+
151
+
152
+ // CIL[DOC-VECTOR type="context" content="purpose='Provides badge configuration for documentation confidence and stability labels'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
153
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
154
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
155
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
172
156
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
173
157
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
158
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:doc_and_stability:constant"]
159
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:HashStatusBadge:component" type="component" identity="HashStatusBadge" parent="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
160
+ // CIL[DOC-MACRO purpose="Render a Badge indicating the current hash status of a CIL chunk"]
161
+ // CIL[DOC-RESPONSIBILITY responsibility="Display current, drift_detected, or unknown hash status with an icon"]
162
+ // CIL[DOC-CONTEXT module="CIL admin UI" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tabs.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
163
+ // CIL[DOC-CONTRACT inputs="status: string — hash status to display (current, drift_detected, unknown)" outputs="JSX Badge element" errors="none" side_effects="none"]
164
+ // CIL[DOC-MICRO logic_summary="Branches on status string and returns a Badge variant with matching icon and label" notable_decisions="[]"]
165
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
166
+ // CIL[DOC-STABILITY stability="stable"]
174
167
  function HashStatusBadge({ status }: { status: string }) {
175
168
  if (status === 'current') return (
176
169
  <Badge variant="default" className="bg-green-600 text-white gap-1">
@@ -188,24 +181,24 @@ function HashStatusBadge({ status }: { status: string }) {
188
181
  </Badge>
189
182
  )
190
183
  }
184
+ // CIL[DOC-VECTOR type="context" content="purpose='Render a Badge indicating the current hash status of a CIL chunk'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
185
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
186
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
187
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
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
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:HashStatusBadge:component"]
191
191
 
192
192
 
193
193
 
194
- // CIL[END chunk_id="cilchunkdetailpage_hashstatusbadge_1784193942"]
195
- // CIL[BEGIN chunk_id="cilchunkdetailpage_chunklinkcard_1784193942" type="function" identity="ChunkLinkCard" parent="none"]
196
- // CIL[DOC-MACRO purpose="Render a navigable card linking to another chunk"]
197
- // CIL[DOC-RESPONSIBILITY responsibility="Display chunk name and file path and link to the chunk detail route"]
198
- // CIL[DOC-CONTEXT module="cortex:cil-chunk-detail" layer="presentation" related_files="[]"]
199
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="none" side_effects="none"]
200
- // CIL[DOC-MICRO logic_summary="Builds a route via useAppPath and renders an anchor with icon, name, path, and hover arrow" notable_decisions="[]"]
201
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
194
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:ChunkLinkCard:component" type="component" identity="ChunkLinkCard" parent="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
195
+ // CIL[DOC-MACRO purpose="Render a clickable card linking to another CIL chunk"]
196
+ // CIL[DOC-RESPONSIBILITY responsibility="Format chunk reference as a compact link card"]
197
+ // CIL[DOC-CONTEXT module="CIL admin UI" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tabs.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
198
+ // CIL[DOC-CONTRACT inputs="chunk, label, projectId strings" outputs="JSX anchor element" errors="none" side_effects="none"]
199
+ // CIL[DOC-MICRO logic_summary="Builds admin path, renders file icon, name, path, and hover arrow" notable_decisions="[]"]
200
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
202
201
  // CIL[DOC-STABILITY stability="stable"]
203
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. 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
202
  function ChunkLinkCard({
210
203
  chunk,
211
204
  label,
@@ -215,6 +208,7 @@ function ChunkLinkCard({
215
208
  label: string
216
209
  projectId: string
217
210
  }) {
211
+
218
212
  const appPath = (path: string) => '/spine-framework/admin' + (path.startsWith('/') ? path : '/' + path)
219
213
  return (
220
214
  <a
@@ -233,21 +227,21 @@ function ChunkLinkCard({
233
227
 
234
228
 
235
229
 
236
- // CIL[END chunk_id="cilchunkdetailpage_chunklinkcard_1784193942"]
237
- // CIL[BEGIN chunk_id="cilchunkdetailpage_contracteditor_1784193942" type="function" identity="ContractEditor" parent="none"]
238
- // CIL[DOC-MACRO purpose="Render and edit a chunk contract form"]
239
- // CIL[DOC-RESPONSIBILITY responsibility="Provide a UI to edit macro, micro, specs, stability, test paths, and doc confidence, then persist via API"]
240
- // CIL[DOC-CONTEXT module="cortex:cil-chunk-detail" layer="presentation" related_files="[]"]
241
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="none" side_effects="PATCH /api/admin-data; calls onSave callback to update parent contract"]
242
- // CIL[DOC-MICRO logic_summary="Initializes form from contract, renders textarea fields and stability/confidence selects, saves changes, and shows saving/saved feedback" notable_decisions="[]"]
243
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
244
- // CIL[DOC-STABILITY stability="stable"]
245
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
246
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
247
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
248
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
230
+ // CIL[DOC-VECTOR type="context" content="purpose='Render a clickable card linking to another CIL chunk'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
231
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
232
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
233
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
249
234
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
250
235
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
236
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:ChunkLinkCard:component"]
237
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:ContractEditor:component" type="component" identity="ContractEditor" parent="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
238
+ // CIL[DOC-MACRO purpose="Edit and persist a CIL chunk contract"]
239
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a controlled form for macro, micro, I/O, side effects, stability, tests, and confidence"]
240
+ // CIL[DOC-CONTEXT module="CIL admin UI" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tabs.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
241
+ // CIL[DOC-CONTRACT inputs="contract: ChunkContract, projectId: string, onSave callback" outputs="JSX form; PATCH updates to admin-data" errors="API failures swallowed in try/finally" side_effects="PATCH /api/admin-data, calls onSave"]
242
+ // CIL[DOC-MICRO logic_summary="Maintains local form state, renders labeled Textareas and Selects, submits a PATCH when user clicks Save" notable_decisions="[]"]
243
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
244
+ // CIL[DOC-STABILITY stability="stable"]
251
245
  function ContractEditor({
252
246
  contract,
253
247
  projectId,
@@ -368,21 +362,21 @@ function ContractEditor({
368
362
 
369
363
 
370
364
 
371
- // CIL[END chunk_id="cilchunkdetailpage_contracteditor_1784193942"]
372
- // CIL[BEGIN chunk_id="cilchunkdetailpage_cilchunkdetailpage_1784193942" type="component" identity="CILChunkDetailPage" parent="none"]
373
- // CIL[DOC-MACRO purpose="Render the CIL chunk detail page"]
374
- // CIL[DOC-RESPONSIBILITY responsibility="Fetch and display a single chunk contract, code content, graph, and blast radius; support hash validation, embedding, and contract editing"]
375
- // CIL[DOC-CONTEXT module="cortex:cil-chunk-detail" layer="presentation" related_files="[]"]
376
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="Renders loading skeleton or not found message; API errors swallowed" side_effects="GET /api/cil-graph, GET /api/admin-data, POST /api/cil-validate, POST /api/cil-embeddings; updates local contract, codeContent, hashStatus, embedResult, blastRadius"]
377
- // CIL[DOC-MICRO logic_summary="Loads chunk contract and stored code, renders header with stability/hash/doc badges, action buttons, and Tabs for contract, graph, code, and blast radius; uses HashStatusBadge, ChunkLinkCard, and ContractEditor subcomponents" notable_decisions="[]"]
378
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
379
- // CIL[DOC-STABILITY stability="stable"]
380
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
381
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
382
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
383
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
365
+ // CIL[DOC-VECTOR type="context" content="purpose='Edit and persist a CIL chunk contract'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.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"]
384
369
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
385
370
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
371
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:ContractEditor:component"]
372
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:CILChunkDetailPage:component" type="component" identity="CILChunkDetailPage" parent="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
373
+ // CIL[DOC-MACRO purpose="Admin page for inspecting a single CIL chunk contract, code, callers, and blast radius"]
374
+ // CIL[DOC-RESPONSIBILITY responsibility="Fetch and display chunk contract, validate hash, embed chunk, render graph and blast radius"]
375
+ // CIL[DOC-CONTEXT module="CIL admin UI" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tabs.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILChunkDetailPage.tsx"]
376
+ // CIL[DOC-CONTRACT inputs="React Router params projectId and chunkId" outputs="JSX admin page" errors="Network/API errors silently handled" side_effects="GET and POST apiFetch calls to CIL endpoints, updates local state"]
377
+ // CIL[DOC-MICRO logic_summary="Loads chunk contract and code, renders hash actions, tabs for contract/graph/code/blast, and link cards for callers/callees" notable_decisions="[]"]
378
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
379
+ // CIL[DOC-STABILITY stability="stable"]
386
380
  export default function CILChunkDetailPage() {
387
381
  const { id: projectId, chunkId } = useParams<{ id: string; chunkId: string }>()
388
382
  const appPath = (path: string) => '/spine-framework/admin' + (path.startsWith('/') ? path : '/' + path)
@@ -546,6 +540,10 @@ export default function CILChunkDetailPage() {
546
540
  {}
547
541
  <div className="flex items-center gap-3 flex-wrap">
548
542
  <HashStatusBadge status={hashStatus} />
543
+ <div className="text-xs text-muted-foreground flex items-center gap-2 flex-wrap">
544
+ <span>content_hash: <span className="font-mono">{contract.content_hash ?? '—'}</span></span>
545
+ <span>version_id: <span className="font-mono">{contract.version_id ?? '—'}</span></span>
546
+ </div>
549
547
  <Button
550
548
  size="sm"
551
549
  variant="outline"
@@ -783,5 +781,11 @@ export default function CILChunkDetailPage() {
783
781
  </div>
784
782
  )
785
783
  }
784
+ // CIL[DOC-VECTOR type="context" content="purpose='Admin page for inspecting a single CIL chunk contract, code, callers, and blast radius'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
785
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
786
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
787
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
788
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
789
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
790
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx:CILChunkDetailPage:component"]
786
791
 
787
- // CIL[END chunk_id="cilchunkdetailpage_cilchunkdetailpage_1784193942"]