spine-framework 0.3.145 → 0.4.1

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 +5067 -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="cilfilelistpage_module_header_1784193942" type="module_header" identity="module_header" parent="none"]
2
- // CIL[DOC-MACRO purpose="Import React hooks, UI primitives and icons for the CIL file list page"]
3
- // CIL[DOC-RESPONSIBILITY responsibility="Provide all external dependencies required to render and operate the file list"]
4
- // CIL[DOC-CONTEXT module="cortex:cil-file-list" layer="presentation" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
2
+ // CIL[DOC-MACRO purpose="React admin page for listing and validating CIL files within a project"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Renders the CIL file list UI, fetches project data, and exposes chunk status"]
4
+ // CIL[DOC-CONTEXT module="admin-cil" 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/input.tsx,.framework/src/components/ui/skeleton.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="ES module imports for React, router, internal API, shadcn UI and Lucide icons" notable_decisions="[]"]
7
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
6
+ // CIL[DOC-MICRO logic_summary="Aggregates CIL files, displays badges, supports search and chunk expansion" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
8
  // CIL[DOC-STABILITY stability="stable"]
9
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, .framework/src/pages/admin/RolesPage.tsx, \."]
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"]
10
+
16
11
  import { useEffect, useState, useCallback } from 'react'
17
12
  import { useParams, useNavigate } from 'react-router-dom'
18
13
  import { apiFetch } from '@core/lib/api'
@@ -42,21 +37,22 @@ import {
42
37
 
43
38
 
44
39
  import { PageInstructions } from '../../../components/admin/PageInstructions'
45
- // CIL[END chunk_id="cilfilelistpage_module_header_1784193942"]
46
- // CIL[BEGIN chunk_id="cilfilelistpage_cilfile_1784193942" type="interface" identity="CILFile" parent="none"]
47
- // CIL[DOC-MACRO purpose="Describe the shape of a CIL file record displayed in the list"]
48
- // CIL[DOC-RESPONSIBILITY responsibility="Type-check file metadata returned by the CIL ingestion backend"]
49
- // CIL[DOC-CONTEXT module="cortex:cil-file-list" layer="presentation" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
50
- // CIL[DOC-CONTRACT inputs="none" outputs="CILFile type shape" errors="none" side_effects="none"]
51
- // CIL[DOC-MICRO logic_summary="Interface covering id, title, data payload and updated_at timestamp" notable_decisions="[]"]
52
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
53
- // CIL[DOC-STABILITY stability="stable"]
54
- // 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/functions/_shared/principal.ts, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
55
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
56
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
57
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
40
+ // CIL[DOC-VECTOR type="context" content="purpose='React admin page for listing and validating CIL files within a project'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
41
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
42
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
43
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
58
44
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
59
45
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
46
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:module_header:module_header"]
47
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFile:interface" type="interface" identity="CILFile" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
48
+ // CIL[DOC-MACRO purpose="Defines the CILFile record shape used by the file list"]
49
+ // CIL[DOC-RESPONSIBILITY responsibility="Describes the data model for an indexed CIL source file"]
50
+ // CIL[DOC-CONTEXT module="admin-cil" layer="data-model" 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/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
51
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
52
+ // CIL[DOC-MICRO logic_summary="Lists metadata fields including chunk_count, ingestion_pass, and dead-code flags" notable_decisions="[]"]
53
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
54
+ // CIL[DOC-STABILITY stability="stable"]
55
+
60
56
  interface CILFile {
61
57
  id: string
62
58
  title: string
@@ -75,22 +71,24 @@ interface CILFile {
75
71
  }
76
72
  updated_at: string
77
73
  }
78
-
79
- // CIL[END chunk_id="cilfilelistpage_cilfile_1784193942"]
80
- // CIL[BEGIN chunk_id="cilfilelistpage_cilchunk_1784193942" type="interface" identity="CILChunk" parent="none"]
81
- // CIL[DOC-MACRO purpose="Describe the shape of a single indexed CIL chunk"]
82
- // CIL[DOC-RESPONSIBILITY responsibility="Type-check chunk metadata used when expanding a file's chunk list"]
83
- // CIL[DOC-CONTEXT module="cortex:cil-file-list" layer="presentation" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
84
- // CIL[DOC-CONTRACT inputs="none" outputs="CILChunk type shape" errors="none" side_effects="none"]
85
- // CIL[DOC-MICRO logic_summary="Interface for chunk identity, type, line range, macro and confidence fields" notable_decisions="[]"]
86
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
87
- // CIL[DOC-STABILITY stability="stable"]
88
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
89
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
90
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
91
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
74
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the CILFile record shape used by the file list'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
75
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
76
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
77
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
92
78
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
93
79
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
80
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFile:interface"]
81
+
82
+
83
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILChunk:interface" type="interface" identity="CILChunk" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
84
+ // CIL[DOC-MACRO purpose="Defines the CILChunk record shape"]
85
+ // CIL[DOC-RESPONSIBILITY responsibility="Describes the data model for a CIL chunk"]
86
+ // CIL[DOC-CONTEXT module="admin-cil" layer="data-model" 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/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
87
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
88
+ // CIL[DOC-MICRO logic_summary="Exposes chunk_name, chunk_type, line range, and stability fields" notable_decisions="[]"]
89
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
90
+ // CIL[DOC-STABILITY stability="stable"]
91
+
94
92
  interface CILChunk {
95
93
  id: string
96
94
  chunk_name: string
@@ -106,22 +104,24 @@ interface CILChunk {
106
104
  file_path: string
107
105
  project_id: string
108
106
  }
109
-
110
- // CIL[END chunk_id="cilfilelistpage_cilchunk_1784193942"]
111
- // CIL[BEGIN chunk_id="cilfilelistpage_validationsummary_1784193942" type="interface" identity="ValidationSummary" parent="none"]
112
- // CIL[DOC-MACRO purpose="Describe the shape of a file validation summary"]
113
- // CIL[DOC-RESPONSIBILITY responsibility="Type-check counts and trust rating returned by the validate endpoint"]
114
- // CIL[DOC-CONTEXT module="cortex:cil-file-list" layer="presentation" related_files="[\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
115
- // CIL[DOC-CONTRACT inputs="none" outputs="ValidationSummary type shape" errors="none" side_effects="none"]
116
- // CIL[DOC-MICRO logic_summary="Interface for total, current, drift_detected, not_found and trust_rating" notable_decisions="[]"]
117
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
118
- // CIL[DOC-STABILITY stability="stable"]
119
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/principal.ts, .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
120
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
121
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
122
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
107
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the CILChunk record shape'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
108
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
109
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
110
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
123
111
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
124
112
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
113
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILChunk:interface"]
114
+
115
+
116
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:ValidationSummary:interface" type="interface" identity="ValidationSummary" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
117
+ // CIL[DOC-MACRO purpose="Defines the validation summary shape"]
118
+ // CIL[DOC-RESPONSIBILITY responsibility="Describes aggregate validation trust metrics"]
119
+ // CIL[DOC-CONTEXT module="admin-cil" layer="data-model" 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/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
120
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
121
+ // CIL[DOC-MICRO logic_summary="Contains total, current, drift_detected, not_found, and trust_rating fields" notable_decisions="[]"]
122
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
123
+ // CIL[DOC-STABILITY stability="stable"]
124
+
125
125
  interface ValidationSummary {
126
126
  total: number
127
127
  current: number
@@ -129,46 +129,50 @@ interface ValidationSummary {
129
129
  not_found: number
130
130
  trust_rating: number
131
131
  }
132
-
133
- // CIL[END chunk_id="cilfilelistpage_validationsummary_1784193942"]
134
- // CIL[BEGIN chunk_id="cilfilelistpage_filevalidation_1784193942" type="interface" identity="FileValidation" parent="none"]
135
- // CIL[DOC-MACRO purpose="Describe the local validation state for a single file"]
136
- // CIL[DOC-RESPONSIBILITY responsibility="Track loading, summary and error state while validating a file"]
137
- // CIL[DOC-CONTEXT module="cortex:cil-file-list" layer="presentation" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
138
- // CIL[DOC-CONTRACT inputs="none" outputs="FileValidation type shape" errors="none" side_effects="none"]
139
- // CIL[DOC-MICRO logic_summary="Interface bundling fileId, summary, loading flag and error string" notable_decisions="[]"]
140
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
141
- // CIL[DOC-STABILITY stability="stable"]
142
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/principal.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
143
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
144
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
145
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
132
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the validation summary shape'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
133
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
134
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
135
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
146
136
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
147
137
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
138
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:ValidationSummary:interface"]
139
+
140
+
141
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:FileValidation:interface" type="interface" identity="FileValidation" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
142
+ // CIL[DOC-MACRO purpose="Defines per-file validation state"]
143
+ // CIL[DOC-RESPONSIBILITY responsibility="Describes the validation result for a single CIL file"]
144
+ // CIL[DOC-CONTEXT module="admin-cil" layer="data-model" 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/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
145
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
146
+ // CIL[DOC-MICRO logic_summary="Includes summary, loading flag, and error message" notable_decisions="[]"]
147
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
148
+ // CIL[DOC-STABILITY stability="stable"]
149
+
148
150
  interface FileValidation {
149
151
  fileId: string
150
152
  summary: ValidationSummary | null
151
153
  loading: boolean
152
154
  error: string | null
153
155
  }
156
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines per-file validation state'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
157
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
158
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
159
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
160
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
161
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
162
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:FileValidation:interface"]
154
163
 
155
164
 
156
165
 
157
- // CIL[END chunk_id="cilfilelistpage_filevalidation_1784193942"]
158
- // CIL[BEGIN chunk_id="cilfilelistpage_passbadge_1784193942" type="function" identity="PassBadge" parent="none"]
159
- // CIL[DOC-MACRO purpose="Render a badge that shows a CIL file's ingestion pass status"]
160
- // CIL[DOC-RESPONSIBILITY responsibility="Display a compact, color-coded label for the pass number"]
161
- // CIL[DOC-CONTEXT module="cortex:cil-file-list" layer="presentation" related_files="[]"]
162
- // CIL[DOC-CONTRACT inputs="none" outputs="Badge JSX element" errors="none" side_effects="none"]
163
- // CIL[DOC-MICRO logic_summary="Returns outline, emerald or secondary Badge variants based on pass value" notable_decisions="[]"]
164
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
166
+
167
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:PassBadge:component" type="component" identity="PassBadge" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
168
+ // CIL[DOC-MACRO purpose="Badge component showing ingestion pass status"]
169
+ // CIL[DOC-RESPONSIBILITY responsibility="Renders a label for the current ingestion pass"]
170
+ // CIL[DOC-CONTEXT module="admin-cil" 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/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
171
+ // CIL[DOC-CONTRACT inputs="pass: number" outputs="Badge React element" errors="none" side_effects="none"]
172
+ // CIL[DOC-MICRO logic_summary="Shows Not ingested, Pass n, or Pass n complete variants" notable_decisions="[]"]
173
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
165
174
  // CIL[DOC-STABILITY stability="stable"]
166
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
167
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
168
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
169
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
170
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
171
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
175
+
172
176
  function PassBadge({ pass }: { pass: number }) {
173
177
  if (!pass || pass < 1) {
174
178
  return <Badge variant="outline" className="text-xs text-muted-foreground">Not ingested</Badge>
@@ -178,24 +182,26 @@ function PassBadge({ pass }: { pass: number }) {
178
182
  }
179
183
  return <Badge variant="secondary" className="text-xs">Pass {pass}</Badge>
180
184
  }
185
+ // CIL[DOC-VECTOR type="context" content="purpose='Badge component showing ingestion pass status'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
186
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
187
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
188
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
189
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
190
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
191
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:PassBadge:component"]
192
+
181
193
 
182
194
 
183
195
 
184
- // CIL[END chunk_id="cilfilelistpage_passbadge_1784193942"]
185
- // CIL[BEGIN chunk_id="cilfilelistpage_trustbadge_1784193942" type="function" identity="TrustBadge" parent="none"]
186
- // CIL[DOC-MACRO purpose="Render a badge that shows validation trust and drift warnings"]
187
- // CIL[DOC-RESPONSIBILITY responsibility="Display trust rating or drift count for a validated file"]
188
- // CIL[DOC-CONTEXT module="cortex:cil-file-list" layer="presentation" related_files="[]"]
189
- // CIL[DOC-CONTRACT inputs="none" outputs="Badge JSX element or null" errors="none" side_effects="none"]
190
- // CIL[DOC-MICRO logic_summary="Shows ShieldCheck when trusted or ShieldAlert when drift is detected" notable_decisions="[]"]
191
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
196
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:TrustBadge:component" type="component" identity="TrustBadge" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
197
+ // CIL[DOC-MACRO purpose="Badge component showing validation trust"]
198
+ // CIL[DOC-RESPONSIBILITY responsibility="Renders a trust rating and drift count badge"]
199
+ // CIL[DOC-CONTEXT module="admin-cil" 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/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
200
+ // CIL[DOC-CONTRACT inputs="summary: ValidationSummary | null" outputs="Badge or null" errors="none" side_effects="none"]
201
+ // CIL[DOC-MICRO logic_summary="Displays destructive badge when drift detected, otherwise trusted percentage" notable_decisions="[]"]
202
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
192
203
  // CIL[DOC-STABILITY stability="stable"]
193
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
194
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
195
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
196
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
197
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
198
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
204
+
199
205
  function TrustBadge({ summary }: { summary: ValidationSummary | null }) {
200
206
  if (!summary) return null
201
207
  const { trust_rating, drift_detected } = summary
@@ -214,24 +220,26 @@ function TrustBadge({ summary }: { summary: ValidationSummary | null }) {
214
220
  </Badge>
215
221
  )
216
222
  }
223
+ // CIL[DOC-VECTOR type="context" content="purpose='Badge component showing validation trust'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
224
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
225
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
226
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
227
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
228
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
229
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:TrustBadge:component"]
217
230
 
218
231
 
219
232
 
220
- // CIL[END chunk_id="cilfilelistpage_trustbadge_1784193942"]
221
- // CIL[BEGIN chunk_id="cilfilelistpage_cilfilelistpage_1784193942" type="component" identity="CILFileListPage" parent="none"]
222
- // CIL[DOC-MACRO purpose="Render the CIL file list page for a project"]
223
- // CIL[DOC-RESPONSIBILITY responsibility="Fetch and display CIL files, run validation, and expand chunk details"]
224
- // CIL[DOC-CONTEXT module="cortex:cil-file-list" layer="presentation" related_files="[]"]
225
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX page with file list" errors="silent fetch errors, validation errors" side_effects="GET project/files, GET/POST validate and graph endpoints, navigation"]
226
- // CIL[DOC-MICRO logic_summary="Loads project and files, filters by search, validates files and toggles chunk expansion" notable_decisions="[]"]
227
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
233
+
234
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFileListPage:component" type="component" identity="CILFileListPage" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
235
+ // CIL[DOC-MACRO purpose="Main page component for the CIL file list"]
236
+ // CIL[DOC-RESPONSIBILITY responsibility="Fetches and renders CIL files for a project"]
237
+ // CIL[DOC-CONTEXT module="admin-cil" 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/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
238
+ // CIL[DOC-CONTRACT inputs="projectId from useParams" outputs="React page JSX" errors="Error messages displayed via validations" side_effects="Fetches project and files, manages React state, navigates"]
239
+ // CIL[DOC-MICRO logic_summary="Implements search, summary cards, file chunk expansion, and validation actions" notable_decisions="[]"]
240
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
228
241
  // CIL[DOC-STABILITY stability="stable"]
229
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
230
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
231
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
232
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
233
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
234
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
242
+
235
243
  export default function CILFileListPage() {
236
244
  const { id: projectId } = useParams<{ id: string }>()
237
245
  const navigate = useNavigate()
@@ -469,15 +477,33 @@ export default function CILFileListPage() {
469
477
  ) : (
470
478
  <div className="space-y-2">
471
479
  {filteredFiles.map(file => {
480
+
481
+
472
482
  const d = file.data || {}
483
+
484
+
485
+
473
486
  const filePath: string = d.file_path || file.title
487
+
488
+
489
+
474
490
  const shortName = filePath.split('/').pop() || filePath
491
+
492
+
493
+
475
494
  const dirPath = filePath.includes('/')
476
495
  ? filePath.split('/').slice(0, -1).join('/')
477
496
  : ''
497
+
498
+
499
+
478
500
  const val = validations[file.id]
501
+
502
+
503
+
479
504
  const isValidating = val?.loading === true
480
505
 
506
+
481
507
  return (
482
508
  <Card key={file.id} className="hover:bg-muted/30 transition-colors">
483
509
  <CardContent className="p-4">
@@ -539,6 +565,12 @@ export default function CILFileListPage() {
539
565
  ? <ChevronDown className="h-3.5 w-3.5" />
540
566
  : <ChevronRight className="h-3.5 w-3.5" />
541
567
  }
568
+
569
+
570
+
571
+
572
+
573
+
542
574
  </Button>
543
575
  )}
544
576
  <Button
@@ -582,7 +614,10 @@ export default function CILFileListPage() {
582
614
 
583
615
  {}
584
616
  {expandedFiles.has(file.id) && (() => {
617
+
618
+
585
619
  const fc = fileChunks[file.id]
620
+
586
621
  if (!fc || fc.loading) return (
587
622
  <div className="mt-3 pt-3 border-t space-y-1.5">
588
623
  {[...Array(3)].map((_, i) => (
@@ -594,6 +629,8 @@ export default function CILFileListPage() {
594
629
  <div className="mt-3 pt-3 border-t text-xs text-muted-foreground">No chunks indexed for this file.</div>
595
630
  )
596
631
 
632
+
633
+
597
634
  const CHUNK_TYPE_COLORS: Record<string, string> = {
598
635
  function: 'bg-indigo-100 text-indigo-700',
599
636
  class: 'bg-violet-100 text-violet-700',
@@ -604,10 +641,16 @@ export default function CILFileListPage() {
604
641
  route: 'bg-red-100 text-red-700',
605
642
  }
606
643
 
644
+
645
+
646
+
607
647
  return (
608
648
  <div className="mt-3 pt-3 border-t space-y-1">
609
649
  {fc.chunks.map(chunk => {
650
+
651
+
610
652
  const typeClass = CHUNK_TYPE_COLORS[chunk.chunk_type] || 'bg-slate-100 text-slate-600'
653
+
611
654
  return (
612
655
  <a
613
656
  key={chunk.id}
@@ -643,5 +686,11 @@ export default function CILFileListPage() {
643
686
  </div>
644
687
  )
645
688
  }
689
+ // CIL[DOC-VECTOR type="context" content="purpose='Main page component for the CIL file list'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
690
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
691
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
692
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
693
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
694
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
695
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFileListPage:component"]
646
696
 
647
- // CIL[END chunk_id="cilfilelistpage_cilfilelistpage_1784193942"]