spine-framework 0.1.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 (385) hide show
  1. package/.framework/README.md +129 -0
  2. package/.framework/cli/bin.cjs +14 -0
  3. package/.framework/cli/commands/agents.ts +153 -0
  4. package/.framework/cli/commands/auth.ts +94 -0
  5. package/.framework/cli/commands/create-app.ts +185 -0
  6. package/.framework/cli/commands/dev.ts +295 -0
  7. package/.framework/cli/commands/doctor.ts +442 -0
  8. package/.framework/cli/commands/generate.ts +332 -0
  9. package/.framework/cli/commands/init.ts +272 -0
  10. package/.framework/cli/commands/install-app.ts +391 -0
  11. package/.framework/cli/commands/items.ts +253 -0
  12. package/.framework/cli/commands/migrations.ts +141 -0
  13. package/.framework/cli/commands/pipelines.ts +166 -0
  14. package/.framework/cli/commands/status.ts +197 -0
  15. package/.framework/cli/commands/system.ts +184 -0
  16. package/.framework/cli/commands/test.ts +227 -0
  17. package/.framework/cli/commands/uninstall-app.ts +166 -0
  18. package/.framework/cli/context.ts +268 -0
  19. package/.framework/cli/env-loader.ts +36 -0
  20. package/.framework/cli/index.ts +106 -0
  21. package/.framework/cli/welcome.cjs +45 -0
  22. package/.framework/docs/API.md +384 -0
  23. package/.framework/docs/STABILITY.md +52 -0
  24. package/.framework/docs/admin-routes.md +76 -0
  25. package/.framework/docs/api-docs-progress.md +38 -0
  26. package/.framework/docs/api-governance.md +146 -0
  27. package/.framework/docs/api-testing-results.md +212 -0
  28. package/.framework/docs/apis/admin-configs.md +567 -0
  29. package/.framework/docs/apis/admin-data.md +272 -0
  30. package/.framework/docs/apis/index.md +231 -0
  31. package/.framework/docs/apis/internal.md +295 -0
  32. package/.framework/docs/apis/runtime.md +537 -0
  33. package/.framework/docs/assembly-launch-guide.md +138 -0
  34. package/.framework/docs/audit-results.md +590 -0
  35. package/.framework/docs/authorization-model.md +170 -0
  36. package/.framework/docs/db-api-inventory.md +95 -0
  37. package/.framework/docs/examples/custom-app/README.md +77 -0
  38. package/.framework/docs/examples/custom-function/README.md +27 -0
  39. package/.framework/docs/examples/custom-function/handler.ts +48 -0
  40. package/.framework/docs/examples/custom-webhook/README.md +68 -0
  41. package/.framework/docs/gap-remediation-backlog.md +103 -0
  42. package/.framework/docs/guides/cli-guide.md +224 -0
  43. package/.framework/docs/guides/getting-started.md +103 -0
  44. package/.framework/docs/guides/import-guide.md +193 -0
  45. package/.framework/docs/guides/testing-guide.md +229 -0
  46. package/.framework/docs/permission-examples.md +326 -0
  47. package/.framework/docs/ui-adoption-verification.md +111 -0
  48. package/.framework/docs/ui-api-coverage.md +84 -0
  49. package/.framework/docs/v2-compatibility-audit.md +228 -0
  50. package/.framework/functions/.gitkeep +1 -0
  51. package/.framework/functions/_shared/agent-runner.ts +1097 -0
  52. package/.framework/functions/_shared/app-manifest.ts +184 -0
  53. package/.framework/functions/_shared/audit.ts +150 -0
  54. package/.framework/functions/_shared/db.ts +174 -0
  55. package/.framework/functions/_shared/index.ts +382 -0
  56. package/.framework/functions/_shared/middleware.ts +490 -0
  57. package/.framework/functions/_shared/permissions.ts +1325 -0
  58. package/.framework/functions/_shared/pipeline-runner.ts +731 -0
  59. package/.framework/functions/_shared/principal.ts +760 -0
  60. package/.framework/functions/_shared/schema-utils.ts +967 -0
  61. package/.framework/functions/_shared/testing.ts +258 -0
  62. package/.framework/functions/_shared/trigger-engine.ts +425 -0
  63. package/.framework/functions/_shared/webhook-registration.ts +168 -0
  64. package/.framework/functions/_shared/webhook-registry.ts +129 -0
  65. package/.framework/functions/account-nodes.ts +111 -0
  66. package/.framework/functions/admin-data.ts +606 -0
  67. package/.framework/functions/ai-agents.ts +323 -0
  68. package/.framework/functions/api-keys.ts +376 -0
  69. package/.framework/functions/apps.ts +483 -0
  70. package/.framework/functions/auth.ts +196 -0
  71. package/.framework/functions/debug-auth.ts +107 -0
  72. package/.framework/functions/embeddings.ts +556 -0
  73. package/.framework/functions/integration-routes.ts +523 -0
  74. package/.framework/functions/integrations.ts +319 -0
  75. package/.framework/functions/item-progress.ts +272 -0
  76. package/.framework/functions/logs.ts +438 -0
  77. package/.framework/functions/observability.ts +275 -0
  78. package/.framework/functions/pipeline-executions.ts +494 -0
  79. package/.framework/functions/pipelines.ts +485 -0
  80. package/.framework/functions/prompt-configs.ts +339 -0
  81. package/.framework/functions/roles.ts +387 -0
  82. package/.framework/functions/system-cron.ts +742 -0
  83. package/.framework/functions/system.ts +323 -0
  84. package/.framework/functions/tests.ts +119 -0
  85. package/.framework/functions/timers.ts +357 -0
  86. package/.framework/functions/triggers.ts +563 -0
  87. package/.framework/functions/types.ts +604 -0
  88. package/.framework/migrations/000_foundation.sql +1256 -0
  89. package/.framework/migrations/001_seed.sql +92 -0
  90. package/.framework/migrations/002_seed_constraints.sql +13 -0
  91. package/.framework/migrations/003_auth_user_trigger.sql +59 -0
  92. package/.framework/src/App.tsx +126 -0
  93. package/.framework/src/apps/admin/index.tsx +173 -0
  94. package/.framework/src/components/AppWrapper.tsx +56 -0
  95. package/.framework/src/components/CustomAppLoader.tsx +116 -0
  96. package/.framework/src/components/admin/AdminListPage.tsx +151 -0
  97. package/.framework/src/components/admin/AdminSidebar.tsx +166 -0
  98. package/.framework/src/components/admin/AdminStatsCard.tsx +62 -0
  99. package/.framework/src/components/admin/SortableTableHeader.tsx +42 -0
  100. package/.framework/src/components/app-shell/GenericAppShell.tsx +181 -0
  101. package/.framework/src/components/app-shell/GenericDetailPage.tsx +200 -0
  102. package/.framework/src/components/app-shell/GenericListPage.tsx +116 -0
  103. package/.framework/src/components/app-sidebar.tsx +228 -0
  104. package/.framework/src/components/auth/ProtectedRoute.tsx +88 -0
  105. package/.framework/src/components/layout/AppShell.tsx +91 -0
  106. package/.framework/src/components/layout/Header.tsx +88 -0
  107. package/.framework/src/components/layout/Layout.tsx +95 -0
  108. package/.framework/src/components/layout/Sidebar.tsx +329 -0
  109. package/.framework/src/components/runtime/DataDetailHeader.tsx +77 -0
  110. package/.framework/src/components/runtime/DataDetailPage.tsx +171 -0
  111. package/.framework/src/components/runtime/DataFilters.tsx +91 -0
  112. package/.framework/src/components/runtime/DataHeader.tsx +68 -0
  113. package/.framework/src/components/runtime/DataListPage.tsx +124 -0
  114. package/.framework/src/components/runtime/DataStats.tsx +70 -0
  115. package/.framework/src/components/runtime/DataTable.tsx +174 -0
  116. package/.framework/src/components/runtime/SchemaDetailForm.tsx +134 -0
  117. package/.framework/src/components/runtime/index.ts +18 -0
  118. package/.framework/src/components/search-form.tsx +29 -0
  119. package/.framework/src/components/shared/AgentView.tsx +213 -0
  120. package/.framework/src/components/shared/FieldRenderer.tsx +478 -0
  121. package/.framework/src/components/shared/SchemaFields.tsx +226 -0
  122. package/.framework/src/components/ui/DataTable.tsx +343 -0
  123. package/.framework/src/components/ui/Form.tsx +281 -0
  124. package/.framework/src/components/ui/ItemCard.tsx +296 -0
  125. package/.framework/src/components/ui/ItemListView.tsx +308 -0
  126. package/.framework/src/components/ui/LoadingSpinner.tsx +52 -0
  127. package/.framework/src/components/ui/Modal.tsx +61 -0
  128. package/.framework/src/components/ui/RichTextEditor.tsx +210 -0
  129. package/.framework/src/components/ui/accordion.tsx +82 -0
  130. package/.framework/src/components/ui/alert-dialog.tsx +197 -0
  131. package/.framework/src/components/ui/alert.tsx +76 -0
  132. package/.framework/src/components/ui/aspect-ratio.tsx +11 -0
  133. package/.framework/src/components/ui/avatar.tsx +110 -0
  134. package/.framework/src/components/ui/badge.tsx +49 -0
  135. package/.framework/src/components/ui/breadcrumb.tsx +122 -0
  136. package/.framework/src/components/ui/button-group.tsx +83 -0
  137. package/.framework/src/components/ui/button.tsx +65 -0
  138. package/.framework/src/components/ui/calendar.tsx +222 -0
  139. package/.framework/src/components/ui/card.tsx +100 -0
  140. package/.framework/src/components/ui/carousel.tsx +240 -0
  141. package/.framework/src/components/ui/chart.tsx +373 -0
  142. package/.framework/src/components/ui/checkbox.tsx +31 -0
  143. package/.framework/src/components/ui/collapsible.tsx +33 -0
  144. package/.framework/src/components/ui/combobox.tsx +299 -0
  145. package/.framework/src/components/ui/command.tsx +193 -0
  146. package/.framework/src/components/ui/context-menu.tsx +261 -0
  147. package/.framework/src/components/ui/dialog.tsx +165 -0
  148. package/.framework/src/components/ui/direction.tsx +22 -0
  149. package/.framework/src/components/ui/drawer.tsx +132 -0
  150. package/.framework/src/components/ui/dropdown-menu.tsx +269 -0
  151. package/.framework/src/components/ui/empty.tsx +104 -0
  152. package/.framework/src/components/ui/field.tsx +238 -0
  153. package/.framework/src/components/ui/hover-card.tsx +42 -0
  154. package/.framework/src/components/ui/input-group.tsx +153 -0
  155. package/.framework/src/components/ui/input-otp.tsx +87 -0
  156. package/.framework/src/components/ui/input.tsx +19 -0
  157. package/.framework/src/components/ui/item.tsx +196 -0
  158. package/.framework/src/components/ui/kbd.tsx +26 -0
  159. package/.framework/src/components/ui/label.tsx +22 -0
  160. package/.framework/src/components/ui/menubar.tsx +277 -0
  161. package/.framework/src/components/ui/native-select.tsx +61 -0
  162. package/.framework/src/components/ui/navigation-menu.tsx +164 -0
  163. package/.framework/src/components/ui/pagination.tsx +129 -0
  164. package/.framework/src/components/ui/popover.tsx +87 -0
  165. package/.framework/src/components/ui/progress.tsx +31 -0
  166. package/.framework/src/components/ui/radio-group.tsx +42 -0
  167. package/.framework/src/components/ui/resizable.tsx +50 -0
  168. package/.framework/src/components/ui/scroll-area.tsx +53 -0
  169. package/.framework/src/components/ui/select.tsx +195 -0
  170. package/.framework/src/components/ui/separator.tsx +26 -0
  171. package/.framework/src/components/ui/sheet.tsx +145 -0
  172. package/.framework/src/components/ui/sidebar.tsx +706 -0
  173. package/.framework/src/components/ui/skeleton.tsx +13 -0
  174. package/.framework/src/components/ui/slider.tsx +59 -0
  175. package/.framework/src/components/ui/sonner.tsx +47 -0
  176. package/.framework/src/components/ui/spinner.tsx +10 -0
  177. package/.framework/src/components/ui/switch.tsx +33 -0
  178. package/.framework/src/components/ui/table-primitives.tsx +141 -0
  179. package/.framework/src/components/ui/table.tsx +114 -0
  180. package/.framework/src/components/ui/tabs.tsx +90 -0
  181. package/.framework/src/components/ui/textarea.tsx +18 -0
  182. package/.framework/src/components/ui/toggle-group.tsx +89 -0
  183. package/.framework/src/components/ui/toggle.tsx +45 -0
  184. package/.framework/src/components/ui/tooltip.tsx +57 -0
  185. package/.framework/src/contexts/AppContext.tsx +133 -0
  186. package/.framework/src/contexts/AuthContext.tsx +371 -0
  187. package/.framework/src/hooks/use-mobile.ts +19 -0
  188. package/.framework/src/hooks/useApi.ts +526 -0
  189. package/.framework/src/hooks/useApps.ts +114 -0
  190. package/.framework/src/hooks/useEntityList.ts +190 -0
  191. package/.framework/src/hooks/useEntityRecord.ts +308 -0
  192. package/.framework/src/hooks/useForm.ts +307 -0
  193. package/.framework/src/hooks/useListSchema.ts +264 -0
  194. package/.framework/src/hooks/useSchemaRecord.ts +223 -0
  195. package/.framework/src/index.css +128 -0
  196. package/.framework/src/lib/api.ts +156 -0
  197. package/.framework/src/lib/supabase.ts +94 -0
  198. package/.framework/src/lib/utils.ts +317 -0
  199. package/.framework/src/main.tsx +27 -0
  200. package/.framework/src/pages/DashboardPage.tsx +181 -0
  201. package/.framework/src/pages/NotFoundPage.tsx +39 -0
  202. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +161 -0
  203. package/.framework/src/pages/admin/AIAgentsPage.tsx +318 -0
  204. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +199 -0
  205. package/.framework/src/pages/admin/APIKeysPage.tsx +303 -0
  206. package/.framework/src/pages/admin/AlertsConfigPage.tsx +523 -0
  207. package/.framework/src/pages/admin/AppDetailPage.tsx +493 -0
  208. package/.framework/src/pages/admin/AppsPage.tsx +355 -0
  209. package/.framework/src/pages/admin/DesignedPage.tsx +491 -0
  210. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +534 -0
  211. package/.framework/src/pages/admin/EmbeddingsPage.tsx +424 -0
  212. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +176 -0
  213. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +109 -0
  214. package/.framework/src/pages/admin/IntegratedDashboard.tsx +402 -0
  215. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +187 -0
  216. package/.framework/src/pages/admin/IntegrationsPage.tsx +301 -0
  217. package/.framework/src/pages/admin/LogsPage.tsx +283 -0
  218. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +85 -0
  219. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +470 -0
  220. package/.framework/src/pages/admin/PipelineDetailPage.tsx +183 -0
  221. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +279 -0
  222. package/.framework/src/pages/admin/PipelinesPage.tsx +390 -0
  223. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +299 -0
  224. package/.framework/src/pages/admin/PromptConfigsPage.tsx +292 -0
  225. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +434 -0
  226. package/.framework/src/pages/admin/RoleDetailPage.tsx +273 -0
  227. package/.framework/src/pages/admin/RolesPage.tsx +292 -0
  228. package/.framework/src/pages/admin/SelectTestPage.tsx +61 -0
  229. package/.framework/src/pages/admin/ShadcnTestPage.tsx +588 -0
  230. package/.framework/src/pages/admin/SimpleDashboard.tsx +387 -0
  231. package/.framework/src/pages/admin/TestRunDetailPage.tsx +172 -0
  232. package/.framework/src/pages/admin/TestingDashboard.tsx +257 -0
  233. package/.framework/src/pages/admin/TimerDetailPage.tsx +151 -0
  234. package/.framework/src/pages/admin/TimersPage.tsx +376 -0
  235. package/.framework/src/pages/admin/TriggerDetailPage.tsx +149 -0
  236. package/.framework/src/pages/admin/TriggersPage.tsx +381 -0
  237. package/.framework/src/pages/admin/TypeDetailPage.tsx +694 -0
  238. package/.framework/src/pages/admin/TypesPage.tsx +295 -0
  239. package/.framework/src/pages/auth/LoginPage.tsx +188 -0
  240. package/.framework/src/pages/auth/RegisterPage.tsx +163 -0
  241. package/.framework/src/pages/spine-framework/APIPage.tsx +17 -0
  242. package/.framework/src/pages/spine-framework/CLIPage.tsx +25 -0
  243. package/.framework/src/types/auth.ts +125 -0
  244. package/.framework/src/types/types.ts +407 -0
  245. package/STRUCTURE.md +150 -0
  246. package/config/components.json +25 -0
  247. package/config/deno.lock +108 -0
  248. package/config/package-lock.json +17183 -0
  249. package/config/postcss.config.cjs +10 -0
  250. package/config/tailwind.config.cjs +78 -0
  251. package/config/tsconfig.build.json +32 -0
  252. package/config/tsconfig.cli.json +18 -0
  253. package/config/tsconfig.json +41 -0
  254. package/config/tsconfig.node.json +17 -0
  255. package/config/tsconfig.node.tsbuildinfo +1 -0
  256. package/config/tsconfig.tsbuildinfo +1 -0
  257. package/config/typedoc.json +16 -0
  258. package/config/vite.config.d.ts +2 -0
  259. package/config/vite.config.ts +72 -0
  260. package/dist/cli/commands/agents.d.ts +39 -0
  261. package/dist/cli/commands/agents.d.ts.map +1 -0
  262. package/dist/cli/commands/auth.d.ts +36 -0
  263. package/dist/cli/commands/auth.d.ts.map +1 -0
  264. package/dist/cli/commands/create-app.d.ts +23 -0
  265. package/dist/cli/commands/create-app.d.ts.map +1 -0
  266. package/dist/cli/commands/dev.d.ts +39 -0
  267. package/dist/cli/commands/dev.d.ts.map +1 -0
  268. package/dist/cli/commands/doctor.d.ts +42 -0
  269. package/dist/cli/commands/doctor.d.ts.map +1 -0
  270. package/dist/cli/commands/generate.d.ts +36 -0
  271. package/dist/cli/commands/generate.d.ts.map +1 -0
  272. package/dist/cli/commands/init.d.ts +30 -0
  273. package/dist/cli/commands/init.d.ts.map +1 -0
  274. package/dist/cli/commands/install-app.d.ts +30 -0
  275. package/dist/cli/commands/install-app.d.ts.map +1 -0
  276. package/dist/cli/commands/items.d.ts +45 -0
  277. package/dist/cli/commands/items.d.ts.map +1 -0
  278. package/dist/cli/commands/migrations.d.ts +41 -0
  279. package/dist/cli/commands/migrations.d.ts.map +1 -0
  280. package/dist/cli/commands/pipelines.d.ts +40 -0
  281. package/dist/cli/commands/pipelines.d.ts.map +1 -0
  282. package/dist/cli/commands/status.d.ts +23 -0
  283. package/dist/cli/commands/status.d.ts.map +1 -0
  284. package/dist/cli/commands/system.d.ts +29 -0
  285. package/dist/cli/commands/system.d.ts.map +1 -0
  286. package/dist/cli/commands/test.d.ts +46 -0
  287. package/dist/cli/commands/test.d.ts.map +1 -0
  288. package/dist/cli/commands/uninstall-app.d.ts +23 -0
  289. package/dist/cli/commands/uninstall-app.d.ts.map +1 -0
  290. package/dist/cli/context.d.ts +88 -0
  291. package/dist/cli/context.d.ts.map +1 -0
  292. package/dist/cli/env-loader.d.ts +14 -0
  293. package/dist/cli/env-loader.d.ts.map +1 -0
  294. package/dist/cli/index.d.ts +41 -0
  295. package/dist/cli/index.d.ts.map +1 -0
  296. package/dist/functions/_shared/agent-runner.d.ts +156 -0
  297. package/dist/functions/_shared/agent-runner.d.ts.map +1 -0
  298. package/dist/functions/_shared/app-manifest.d.ts +68 -0
  299. package/dist/functions/_shared/app-manifest.d.ts.map +1 -0
  300. package/dist/functions/_shared/audit.d.ts +91 -0
  301. package/dist/functions/_shared/audit.d.ts.map +1 -0
  302. package/dist/functions/_shared/db.d.ts +125 -0
  303. package/dist/functions/_shared/db.d.ts.map +1 -0
  304. package/dist/functions/_shared/index.d.ts +298 -0
  305. package/dist/functions/_shared/index.d.ts.map +1 -0
  306. package/dist/functions/_shared/middleware.d.ts +315 -0
  307. package/dist/functions/_shared/middleware.d.ts.map +1 -0
  308. package/dist/functions/_shared/permissions.d.ts +626 -0
  309. package/dist/functions/_shared/permissions.d.ts.map +1 -0
  310. package/dist/functions/_shared/pipeline-runner.d.ts +124 -0
  311. package/dist/functions/_shared/pipeline-runner.d.ts.map +1 -0
  312. package/dist/functions/_shared/principal.d.ts +284 -0
  313. package/dist/functions/_shared/principal.d.ts.map +1 -0
  314. package/dist/functions/_shared/schema-utils.d.ts +181 -0
  315. package/dist/functions/_shared/schema-utils.d.ts.map +1 -0
  316. package/dist/functions/_shared/testing.d.ts +172 -0
  317. package/dist/functions/_shared/testing.d.ts.map +1 -0
  318. package/dist/functions/_shared/trigger-engine.d.ts +140 -0
  319. package/dist/functions/_shared/trigger-engine.d.ts.map +1 -0
  320. package/dist/functions/_shared/webhook-registration.d.ts +81 -0
  321. package/dist/functions/_shared/webhook-registration.d.ts.map +1 -0
  322. package/dist/functions/_shared/webhook-registry.d.ts +57 -0
  323. package/dist/functions/_shared/webhook-registry.d.ts.map +1 -0
  324. package/dist/functions/account-nodes.d.ts +48 -0
  325. package/dist/functions/account-nodes.d.ts.map +1 -0
  326. package/dist/functions/admin-data.d.ts +178 -0
  327. package/dist/functions/admin-data.d.ts.map +1 -0
  328. package/dist/functions/ai-agents.d.ts +125 -0
  329. package/dist/functions/ai-agents.d.ts.map +1 -0
  330. package/dist/functions/api-keys.d.ts +140 -0
  331. package/dist/functions/api-keys.d.ts.map +1 -0
  332. package/dist/functions/apps.d.ts +163 -0
  333. package/dist/functions/apps.d.ts.map +1 -0
  334. package/dist/functions/auth.d.ts +74 -0
  335. package/dist/functions/auth.d.ts.map +1 -0
  336. package/dist/functions/debug-auth.d.ts +33 -0
  337. package/dist/functions/debug-auth.d.ts.map +1 -0
  338. package/dist/functions/embeddings.d.ts +205 -0
  339. package/dist/functions/embeddings.d.ts.map +1 -0
  340. package/dist/functions/integration-routes.d.ts +45 -0
  341. package/dist/functions/integration-routes.d.ts.map +1 -0
  342. package/dist/functions/integrations.d.ts +124 -0
  343. package/dist/functions/integrations.d.ts.map +1 -0
  344. package/dist/functions/item-progress.d.ts +41 -0
  345. package/dist/functions/item-progress.d.ts.map +1 -0
  346. package/dist/functions/logs.d.ts +162 -0
  347. package/dist/functions/logs.d.ts.map +1 -0
  348. package/dist/functions/observability.d.ts +123 -0
  349. package/dist/functions/observability.d.ts.map +1 -0
  350. package/dist/functions/pipeline-executions.d.ts +190 -0
  351. package/dist/functions/pipeline-executions.d.ts.map +1 -0
  352. package/dist/functions/pipelines.d.ts +171 -0
  353. package/dist/functions/pipelines.d.ts.map +1 -0
  354. package/dist/functions/prompt-configs.d.ts +125 -0
  355. package/dist/functions/prompt-configs.d.ts.map +1 -0
  356. package/dist/functions/roles.d.ts +118 -0
  357. package/dist/functions/roles.d.ts.map +1 -0
  358. package/dist/functions/system-cron.d.ts +65 -0
  359. package/dist/functions/system-cron.d.ts.map +1 -0
  360. package/dist/functions/system.d.ts +29 -0
  361. package/dist/functions/system.d.ts.map +1 -0
  362. package/dist/functions/tests.d.ts +28 -0
  363. package/dist/functions/tests.d.ts.map +1 -0
  364. package/dist/functions/timers.d.ts +139 -0
  365. package/dist/functions/timers.d.ts.map +1 -0
  366. package/dist/functions/triggers.d.ts +203 -0
  367. package/dist/functions/triggers.d.ts.map +1 -0
  368. package/dist/functions/types.d.ts +151 -0
  369. package/dist/functions/types.d.ts.map +1 -0
  370. package/dist/src/types/types.d.ts +364 -0
  371. package/dist/src/types/types.d.ts.map +1 -0
  372. package/package.json +192 -0
  373. package/scripts/app-install-cli.ts +286 -0
  374. package/scripts/assemble-frontend.sh +79 -0
  375. package/scripts/assemble-functions.sh +62 -0
  376. package/scripts/assemble.sh +35 -0
  377. package/scripts/boundary-check.sh +106 -0
  378. package/scripts/build-manifest.sh +80 -0
  379. package/scripts/check-core-integrity.sh +82 -0
  380. package/scripts/ingest-chunks.cjs +202 -0
  381. package/scripts/kb-chunk-parser.cjs +312 -0
  382. package/scripts/kb-chunk-parser.ts +330 -0
  383. package/scripts/load-test-app-install.ts +484 -0
  384. package/scripts/netlify-dev-wrapper.sh +22 -0
  385. package/scripts/verify-integrity.sh +69 -0
@@ -0,0 +1,229 @@
1
+ # Testing Guide
2
+
3
+ Spine's test suite covers four surfaces: **unit**, **integration**, **API**, and **UI (Playwright)**.
4
+ All tests target the **public schema** (`DB_SCHEMA=public`). Results are persisted to
5
+ `public.test_runs` / `public.test_results` and surfaced in the admin UI at `/admin/testing`.
6
+
7
+ The primary purpose of running tests against the public schema is to discover **day-zero gaps** —
8
+ missing seed data, structural issues, or RLS mismatches that must be resolved before production.
9
+
10
+ ---
11
+
12
+ ## Running Tests
13
+
14
+ ```bash
15
+ # All tests (unit + integration + api)
16
+ npm test
17
+
18
+ # Unit tests only (fast, no network)
19
+ npm run test:unit
20
+
21
+ # Integration tests (requires SUPABASE_URL + SUPABASE_SERVICE_ROLE_KEY + SPINE_TEST_ACCOUNT_ID)
22
+ npm run test:integration
23
+
24
+ # API tests (requires dev server running + SPINE_DEV_JWT)
25
+ SPINE_DEV_JWT=<jwt> vitest run v2-core/tests/api
26
+
27
+ # UI sweep (requires dev server + playwright)
28
+ tsx v2-core/tests/ui/ui-sweep.ts
29
+ ```
30
+
31
+ See `.windsurf/workflows/run-tests.md` for the full step-by-step workflow.
32
+
33
+ ---
34
+
35
+ ## Environment Setup
36
+
37
+ Integration, API, and UI tests need credentials in `v2-core/.xenv` or `v2-core/.xenv.test`:
38
+
39
+ ```env
40
+ SUPABASE_URL=https://uyokuiibztwfasdprsov.supabase.co
41
+ SUPABASE_SERVICE_ROLE_KEY=<service-role-key>
42
+ SPINE_TEST_ACCOUNT_ID=<uuid>
43
+ DB_SCHEMA=public
44
+ # For API tests:
45
+ SPINE_DEV_JWT=<user-jwt>
46
+ SPINE_DEV_URL=http://localhost:8888
47
+ ```
48
+
49
+ ---
50
+
51
+ ## Test Suites
52
+
53
+ ### Unit Tests (`v2-core/tests/unit/`)
54
+
55
+ Pure function tests — no network, no DB. Mock `db.ts` with `vi.mock`.
56
+
57
+ ```ts
58
+ // v2-core/tests/unit/pipeline-runner.test.ts
59
+ import { describe, it, expect, vi, beforeEach } from 'vitest'
60
+ import { runPipeline } from '../../functions/_shared/pipeline-runner.ts'
61
+ import { SYSTEM_PRINCIPAL } from '../../functions/_shared/principal.ts'
62
+ import type { CoreContext } from '../../functions/_shared/middleware.ts'
63
+
64
+ // Mock adminDb
65
+ vi.mock('../../functions/_shared/db.ts', () => ({
66
+ adminDb: {
67
+ from: vi.fn().mockReturnThis(),
68
+ select: vi.fn().mockReturnThis(),
69
+ insert: vi.fn().mockReturnThis(),
70
+ update: vi.fn().mockReturnThis(),
71
+ eq: vi.fn().mockReturnThis(),
72
+ single: vi.fn()
73
+ }
74
+ }))
75
+
76
+ function makeCtx(overrides: Partial<CoreContext> = {}): CoreContext {
77
+ return {
78
+ principal: SYSTEM_PRINCIPAL,
79
+ accountId: 'test-account-id',
80
+ db: {}, // mocked via vi.mock above
81
+ requestId: 'test-request-id',
82
+ ...overrides
83
+ }
84
+ }
85
+ ```
86
+
87
+ ### Example unit test
88
+
89
+ ```ts
90
+ describe('runPipeline', () => {
91
+ it('throws when pipeline not found', async () => {
92
+ const { adminDb } = await import('../../functions/_shared/db.ts')
93
+ vi.mocked(adminDb.from('pipelines').select('*').eq('id', 'x').eq('is_active', true).single)
94
+ .mockResolvedValue({ data: null, error: { message: 'Not found' } })
95
+
96
+ await expect(
97
+ runPipeline('nonexistent-id', {}, makeCtx())
98
+ ).rejects.toThrow('Pipeline not found or inactive')
99
+ })
100
+ })
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Integration Tests (`v2-core/tests/integration/`)
106
+
107
+ Run against the live Supabase public schema via `adminDb`. Failures are **day-zero gaps**.
108
+
109
+ Key files:
110
+ - `helpers.ts` — `adminDb`, `makeTestCtx()`, `TEST_ACCOUNT_ID`
111
+ - `admin-data-accounts.test.ts` — accounts table shape + HTTP endpoint
112
+ - `admin-data-people.test.ts` — people table shape + HTTP endpoint
113
+ - `schema-validation.test.ts` — `design_schema` completeness across all types
114
+ - `custom-integrity.test.ts` — public schema connectivity, RLS isolation, export surface
115
+
116
+ Tests use `describe.skipIf(!TEST_ACCOUNT_ID)` to skip gracefully when env is not configured.
117
+
118
+ ```ts
119
+ describe.skipIf(!TEST_ACCOUNT_ID)('my integration test', () => {
120
+ it('checks something in public schema', async () => {
121
+ const { data, error } = await adminDb.from('types').select('*').limit(1)
122
+ expect(error).toBeNull()
123
+ // Gap warning pattern:
124
+ if (!data?.length) console.warn('[gap] public.types is empty')
125
+ })
126
+ })
127
+ ```
128
+
129
+ ---
130
+
131
+ ## API Tests (`v2-core/tests/api/`)
132
+
133
+ HTTP fetch tests against the local dev server. Requires `SPINE_DEV_JWT`.
134
+
135
+ - `api-surface.test.ts` — auth matrix, CRUD lifecycle, error handling across all entities
136
+
137
+ ```bash
138
+ SPINE_DEV_JWT=<jwt> vitest run v2-core/tests/api
139
+ ```
140
+
141
+ ---
142
+
143
+ ## UI Tests (`v2-core/tests/ui/`)
144
+
145
+ Playwright sweep over all admin routes. Checks for zero console errors per page.
146
+
147
+ ```bash
148
+ tsx v2-core/tests/ui/ui-sweep.ts
149
+ ```
150
+
151
+ Results written to `public.test_runs` with `suite='ui'`.
152
+
153
+ ---
154
+
155
+ ## Result Reporter
156
+
157
+ `tests/reporter.ts` is a Vitest custom reporter that persists results to `public.test_runs`
158
+ and `public.test_results` after every test run. Also exports `writeRunResults()` for use
159
+ by non-Vitest runners (UI sweep, API tests).
160
+
161
+ It is registered in `vitest.config.ts`:
162
+ ```ts
163
+ reporters: ['default', './v2-core/tests/reporter.ts']
164
+ ```
165
+
166
+ View results in the admin UI at `/admin/testing`.
167
+
168
+ ---
169
+
170
+ ## Fixtures
171
+
172
+ ```bash
173
+ # Seed test data into public schema (idempotent)
174
+ tsx v2-core/tests/fixtures/seed.ts
175
+
176
+ # Remove test-* rows from public schema
177
+ tsx v2-core/tests/fixtures/teardown.ts
178
+ ```
179
+
180
+ ---
181
+
182
+ ## Gap Report
183
+
184
+ After running integration + API + UI tests, document every failure in
185
+ `v2-core/docs/dayzero-gap-report.md`:
186
+
187
+ ```markdown
188
+ ## Gap: public.types is empty
189
+ - **Test**: schema-validation.test.ts — "all active types have a non-empty design_schema"
190
+ - **Root cause**: `migrations_dayzero/007_seeds.sql` not yet applied to public schema
191
+ - **Fix**: Apply seeds or add missing type rows
192
+ ```
193
+
194
+ ---
195
+
196
+ ## Testing Custom Code
197
+
198
+ Import from the stable `_shared` index:
199
+
200
+ ```ts
201
+ import { runPipeline, adminDb, SYSTEM_PRINCIPAL, CoreContext } from '../../_shared/index.ts'
202
+ ```
203
+
204
+ ---
205
+
206
+ ## Test File Structure
207
+
208
+ ```
209
+ v2-core/tests/
210
+ unit/
211
+ pipeline-runner.test.ts
212
+ permissions.test.ts
213
+ schema-utils.test.ts
214
+ principal.test.ts
215
+ integration/
216
+ auth.test.ts
217
+ isolation.test.ts
218
+ permissions.test.ts
219
+ pipeline.test.ts
220
+ machine-principal.test.ts
221
+ cli-smoke.test.ts
222
+ helpers.ts
223
+ ```
224
+
225
+ ---
226
+
227
+ ## CI Integration
228
+
229
+ Tests run automatically in GitHub Actions via `.github/workflows/smoke-test.yml`. Unit tests run on every push; integration tests run on PRs against `main` using the Supabase staging branch credentials stored in GitHub Secrets.
@@ -0,0 +1,326 @@
1
+ # Permission Examples
2
+
3
+ ## Support Ticket Use Case
4
+
5
+ ### Customer (user role)
6
+ - Can create tickets in their own account
7
+ - Can only see/update their own tickets
8
+ - Cannot see ARR field
9
+
10
+ ### Master Support Agent (master-support role)
11
+ - Assigned to client accounts via v2.people_roles
12
+ - Can read all client tickets
13
+ - Can update most ticket fields
14
+ - Cannot see ARR field (field override)
15
+
16
+ ### Master CSM (master-csm role)
17
+ - Assigned to client accounts via v2.people_roles
18
+ - Can read all client tickets
19
+ - Can update ARR field (field override)
20
+ - Cannot delete tickets
21
+
22
+ ## Schema Example
23
+
24
+ ```json
25
+ {
26
+ "record_permissions": {
27
+ "user": {
28
+ "create": true,
29
+ "read": "own",
30
+ "update": "own",
31
+ "delete": false
32
+ },
33
+ "master-support": {
34
+ "create": false,
35
+ "read": "all",
36
+ "update": "all",
37
+ "delete": false
38
+ },
39
+ "master-csm": {
40
+ "create": false,
41
+ "read": "all",
42
+ "update": false,
43
+ "delete": false
44
+ }
45
+ },
46
+ "fields": {
47
+ "arr": {
48
+ "type": "number",
49
+ "permissions": {
50
+ "master-support": {
51
+ "read": false,
52
+ "write": false
53
+ },
54
+ "master-csm": {
55
+ "read": true,
56
+ "write": true
57
+ }
58
+ }
59
+ }
60
+ }
61
+ }
62
+ ```
63
+
64
+ ## API Behavior Examples
65
+
66
+ ### Creating a Ticket
67
+
68
+ **Customer Request:**
69
+ ```typescript
70
+ POST /functions/items
71
+ {
72
+ "item_type": "support_ticket",
73
+ "title": "Login issue",
74
+ "data": {
75
+ "description": "Cannot login to account",
76
+ "priority": "high"
77
+ }
78
+ }
79
+ ```
80
+
81
+ **Permission Check:**
82
+ - User has `user` role
83
+ - `record_permissions.user.create` is `true`
84
+ - **Result:** Ticket created successfully
85
+
86
+ **Master Support Request:**
87
+ ```typescript
88
+ POST /functions/items
89
+ {
90
+ "item_type": "support_ticket",
91
+ "title": "System maintenance",
92
+ "data": {
93
+ "description": "Scheduled maintenance",
94
+ "priority": "low"
95
+ }
96
+ }
97
+ ```
98
+
99
+ **Permission Check:**
100
+ - User has `master-support` role
101
+ - `record_permissions.master-support.create` is `false`
102
+ - **Result:** Permission denied
103
+
104
+ ### Reading Tickets
105
+
106
+ **Customer Reading Their Own Ticket:**
107
+ ```typescript
108
+ GET /functions/items?id=customer-ticket-123
109
+ ```
110
+
111
+ **Permission Check:**
112
+ - User has `user` role
113
+ - `record_permissions.user.read` is `"own"`
114
+ - Ticket was created by this user
115
+ - **Result:** Returns ticket with all fields visible to user
116
+
117
+ **Customer Reading Another Customer's Ticket:**
118
+ ```typescript
119
+ GET /functions/items?id=other-customer-ticket-456
120
+ ```
121
+
122
+ **Permission Check:**
123
+ - User has `user` role
124
+ - `record_permissions.user.read` is `"own"`
125
+ - Ticket was NOT created by this user
126
+ - **Result:** Permission denied
127
+
128
+ **Master Support Reading Any Client Ticket:**
129
+ ```typescript
130
+ GET /functions/items?id=client-ticket-789
131
+ ```
132
+
133
+ **Permission Check:**
134
+ - User has `master-support` role
135
+ - `record_permissions.master-support.read` is `"all"`
136
+ - **Result:** Returns ticket, but ARR field is filtered out due to field override
137
+
138
+ ### Updating Tickets
139
+
140
+ **Customer Updating Their Own Ticket:**
141
+ ```typescript
142
+ PATCH /functions/items?id=customer-ticket-123
143
+ {
144
+ "data": {
145
+ "description": "Updated description"
146
+ }
147
+ }
148
+ ```
149
+
150
+ **Permission Check:**
151
+ - User has `user` role
152
+ - `record_permissions.user.update` is `"own"`
153
+ - Ticket was created by this user
154
+ - Field has no specific override for `user` role
155
+ - **Result:** Update successful
156
+
157
+ **Customer Trying to Update ARR Field:**
158
+ ```typescript
159
+ PATCH /functions/items?id=customer-ticket-123
160
+ {
161
+ "data": {
162
+ "arr": 50000
163
+ }
164
+ }
165
+ ```
166
+
167
+ **Permission Check:**
168
+ - User has `user` role
169
+ - `record_permissions.user.update` is `"own"`
170
+ - Ticket was created by this user
171
+ - Field `arr` has no permission override for `user` role
172
+ - Falls back to record-level permission: `"own"` allows update
173
+ - **Result:** Update successful (if this is desired behavior, add field override to prevent)
174
+
175
+ **Master CSM Updating ARR Field:**
176
+ ```typescript
177
+ PATCH /functions/items?id=client-ticket-789
178
+ {
179
+ "data": {
180
+ "arr": 75000
181
+ }
182
+ }
183
+ ```
184
+
185
+ **Permission Check:**
186
+ - User has `master-csm` role
187
+ - `record_permissions.master-csm.update` is `false`
188
+ - Field `arr` has override: `permissions.master-csm.write` is `true`
189
+ - **Result:** Update successful due to field override
190
+
191
+ **Master Support Trying to Update ARR Field:**
192
+ ```typescript
193
+ PATCH /functions/items?id=client-ticket-789
194
+ {
195
+ "data": {
196
+ "arr": 75000
197
+ }
198
+ }
199
+ ```
200
+
201
+ **Permission Check:**
202
+ - User has `master-support` role
203
+ - `record_permissions.master-support.update` is `"all"`
204
+ - Field `arr` has override: `permissions.master-support.write` is `false`
205
+ - **Result:** Permission denied due to field override
206
+
207
+ ## List Endpoint Behavior
208
+
209
+ **Customer Listing Tickets:**
210
+ ```typescript
211
+ GET /functions/items?item_type=support_ticket
212
+ ```
213
+
214
+ **Permission Check:**
215
+ - Returns only tickets user can read
216
+ - Filters out fields user cannot see
217
+ - **Result:** List of user's own tickets with appropriate field filtering
218
+
219
+ **Master Support Listing Tickets:**
220
+ ```typescript
221
+ GET /functions/items?item_type=support_ticket
222
+ ```
223
+
224
+ **Permission Check:**
225
+ - Returns all tickets in account
226
+ - Filters out ARR field for all tickets
227
+ - **Result:** All client tickets with ARR field removed
228
+
229
+ ## System Admin Behavior
230
+
231
+ **System Admin Any Operation:**
232
+ ```typescript
233
+ // Any operation as system admin
234
+ GET /functions/items?id=any-ticket
235
+ PATCH /functions/items?id=any-ticket
236
+ DELETE /functions/items?id=any-ticket
237
+ ```
238
+
239
+ **Permission Check:**
240
+ - `systemRole === 'system_admin'`
241
+ - **Result:** All operations succeed, no field filtering, full audit trail maintained
242
+
243
+ ## Multi-Role User Behavior
244
+
245
+ **User with Both user and master-support Roles:**
246
+ ```typescript
247
+ GET /functions/items?id=other-user-ticket
248
+ ```
249
+
250
+ **Permission Check:**
251
+ - User has `user` role: `record_permissions.user.read` is `"own"` - denied
252
+ - User has `master-support` role: `record_permissions.master-support.read` is `"all"` - allowed
253
+ - **Result:** Access granted (highest effective permission wins)
254
+
255
+ ## Error Messages
256
+
257
+ ### Permission Denied Errors
258
+ - `"Insufficient permissions to create this type of item"`
259
+ - `"Insufficient permissions to update this item"`
260
+ - `"Insufficient permissions to delete this item"`
261
+ - `"Insufficient permissions to view this item"`
262
+ - `"Insufficient permissions to update field 'field_name'"`
263
+
264
+ ### Context Errors
265
+ - `"Authentication required"`
266
+ - `"Account context required"`
267
+ - `"Item not found"`
268
+
269
+ ## Debugging Permission Issues
270
+
271
+ ### Step 1: Check Authentication
272
+ ```sql
273
+ -- Verify user is authenticated
274
+ SELECT person_id, system_role FROM v2.people WHERE auth_uid = 'user_auth_uid';
275
+ ```
276
+
277
+ ### Step 2: Check Account Membership
278
+ ```sql
279
+ -- Verify user is member of account
280
+ SELECT * FROM v2.people_accounts
281
+ WHERE person_id = 'user_person_id' AND account_id = 'target_account_id' AND is_active = true;
282
+ ```
283
+
284
+ ### Step 3: Check Role Assignments
285
+ ```sql
286
+ -- Verify user has required roles
287
+ SELECT pr.role_slug, r.name
288
+ FROM v2.people_roles pr
289
+ JOIN v2.roles r ON pr.role_id = r.id
290
+ WHERE pr.person_id = 'user_person_id' AND pr.account_id = 'target_account_id' AND pr.is_active = true;
291
+ ```
292
+
293
+ ### Step 4: Check Type Schema
294
+ ```sql
295
+ -- Verify type schema has permissions for user's roles
296
+ SELECT schema FROM v2.types
297
+ WHERE slug = 'support_ticket' AND is_active = true;
298
+ ```
299
+
300
+ ### Step 5: Check System Admin Override
301
+ ```sql
302
+ -- Verify system admin status
303
+ SELECT system_role FROM v2.people WHERE id = 'user_person_id';
304
+ ```
305
+
306
+ ## Common Pitfalls and Solutions
307
+
308
+ ### Pitfall: Missing Role Assignment
309
+ **Problem:** User cannot access records despite having correct schema
310
+ **Solution:** Verify role assignment in v2.people_roles
311
+
312
+ ### Pitfall: Incorrect Account Context
313
+ **Problem:** Permission checks failing for cross-account operations
314
+ **Solution:** Ensure correct account_id in request headers
315
+
316
+ ### Pitfall: Field Override Missing
317
+ **Problem:** Users can see fields they shouldn't
318
+ **Solution:** Add field-level permission overrides
319
+
320
+ ### Pitfall: Access Level Misconfiguration
321
+ **Problem:** Users can't access their own records
322
+ **Solution:** Ensure read access level is set to "own" or "all"
323
+
324
+ ### Pitfall: System Admin Not Working
325
+ **Problem:** System admin still getting permission denied
326
+ **Solution:** Verify systemRole is set correctly in middleware
@@ -0,0 +1,111 @@
1
+ # UI Adoption Verification Report
2
+
3
+ ## Data Management UIs (admin/data/*)
4
+
5
+ ### Accounts Management
6
+ - **AccountsPage**: Uses `apiFetch('/.netlify/functions/accounts')` - ADOPTED
7
+ - **AccountCreatePage**: Uses accounts API - ADOPTED
8
+ - **AccountDetailPage**: Uses accounts API - ADOPTED
9
+ - **Status**: Complete API adoption
10
+
11
+ ### People Management
12
+ - **PeoplePage**: Uses `apiFetch('/.netlify/functions/people')` - ADOPTED
13
+ - **PersonCreatePage**: Uses people API - ADOPTED
14
+ - **PersonDetailPage**: Uses people API - ADOPTED
15
+ - **Status**: Complete API adoption
16
+
17
+ ### Items Management
18
+ - **ItemsPage**: Uses `apiFetch('/.netlify/functions/items')` - ADOPTED
19
+ - **ItemCreatePage**: Uses items API - ADOPTED
20
+ - **ItemDetailPage**: Uses items API - ADOPTED
21
+ - **Status**: Complete API adoption
22
+
23
+ ## Configuration Management UIs (admin/configs/*)
24
+
25
+ ### Type Definitions
26
+ - **TypesPage**: Uses `apiFetch('/.netlify/functions/types')` - ADOPTED
27
+ - **TypeDetailPage**: Uses types API - ADOPTED
28
+ - **AccountTypesPage**: Uses `apiFetch('/.netlify/functions/types')` - ADOPTED
29
+ - **AccountTypeDetailPage**: Uses types API - ADOPTED
30
+ - **PersonTypesPage**: Uses `apiFetch('/.netlify/functions/types')` - ADOPTED
31
+ - **PersonTypeDetailPage**: Uses types API - ADOPTED
32
+ - **Status**: Complete API adoption
33
+
34
+ ### App Definitions
35
+ - **AppsPage**: Uses `apiFetch('/.netlify/functions/apps')` - ADOPTED
36
+ - **AppDetailPage**: Uses apps API - ADOPTED
37
+ - **Status**: Complete API adoption
38
+
39
+ ### Workflow Definitions
40
+ - **PipelinesPage**: Uses `apiFetch('/.netlify/functions/pipelines')` - ADOPTED
41
+ - **PipelineDetailPage**: Uses pipelines API - ADOPTED
42
+ - **TriggersPage**: Uses `apiFetch('/.netlify/functions/triggers')` - ADOPTED
43
+ - **TriggerDetailPage**: Uses triggers API - ADOPTED
44
+ - **Status**: Complete API adoption
45
+
46
+ ### AI & Integration Definitions
47
+ - **AIAgentsPage**: Uses `apiFetch('/.netlify/functions/ai-agents')` - ADOPTED
48
+ - **AIAgentDetailPage**: Uses ai-agents API - ADOPTED
49
+ - **EmbeddingsPage**: Uses `apiFetch('/.netlify/functions/embeddings')` - ADOPTED
50
+ - **EmbeddingDetailPage**: Uses embeddings API - ADOPTED
51
+ - **IntegrationsPage**: Uses `apiFetch('/.netlify/functions/integrations')` - ADOPTED
52
+ - **IntegrationDetailPage**: Uses integrations API - ADOPTED
53
+ - **Status**: Complete API adoption
54
+
55
+ ### Scheduling Definitions
56
+ - **TimersPage**: Previously used mock data - NOW ADOPTED
57
+ - **TimerDetailPage**: Uses timers API - ADOPTED
58
+ - **Status**: Complete API adoption (FIXED)
59
+
60
+ ## Legacy Routes (Removed)
61
+
62
+ All legacy routes have been removed from routing and will now return 404:
63
+ - ~~`/admin/accounts`~~ -> Use `/admin/data/accounts`
64
+ - ~~`/admin/people`~~ -> Use `/admin/data/people`
65
+ - ~~`/admin/types`~~ -> Use `/admin/configs/types`
66
+ - ~~`/admin/apps`~~ -> Use `/admin/configs/apps`
67
+ - ~~`/admin/pipelines`~~ -> Use `/admin/configs/pipelines`
68
+ - ~~`/admin/triggers`~~ -> Use `/admin/configs/triggers`
69
+ - ~~`/admin/ai-agents`~~ -> Use `/admin/configs/ai-agents`
70
+ - ~~`/admin/embeddings`~~ -> Use `/admin/configs/embeddings`
71
+ - ~~`/admin/timers`~~ -> Use `/admin/configs/timers`
72
+
73
+ **Status**: All legacy routes removed - will return 404
74
+
75
+ ## Issues Resolved
76
+
77
+ ### Fixed: TimersPage Mock Data
78
+ - **Issue**: TimersPage was using mock data instead of API
79
+ - **Action**: Replaced mock data with `fetch('/.netlify/functions/timers')`
80
+ - **Status**: RESOLVED
81
+ - **Impact**: TimersPage now properly uses timers API
82
+
83
+ ## Compliance Status
84
+
85
+ ### Complete Adoption: 100%
86
+ - All 25 active admin UI routes now use proper APIs
87
+ - No remaining mock data usage
88
+ - All CRUD operations go through API layer
89
+ - Proper error handling implemented
90
+
91
+ ### Security Status: Good
92
+ - Config endpoints have admin-only role guards
93
+ - Data endpoints respect account scoping
94
+ - Auth middleware applied where needed
95
+
96
+ ### Standards Compliance: Good
97
+ - All endpoints use soft delete
98
+ - Consistent response formats
99
+ - Proper audit logging
100
+ - v2 schema compliance verified
101
+
102
+ ## Recommendations
103
+
104
+ 1. **Redirect Legacy Routes**: Consider adding redirects from legacy to new routes
105
+ 2. **Monitor API Usage**: Track which endpoints are actually used by UIs
106
+ 3. **Performance Review**: Ensure API calls are properly cached/debounced
107
+ 4. **Error Handling**: Verify consistent error handling across all UIs
108
+
109
+ ## Summary
110
+
111
+ All admin UIs are now properly adopting APIs with no mock data remaining. The critical issue with TimersPage has been resolved. The system is ready for production use with proper API-driven architecture.