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,170 @@
1
+ # Authorization Model Overview
2
+
3
+ ## First Surface vs Second Surface
4
+
5
+ ### First Surface (User Interactions)
6
+ - User is the actor
7
+ - Permissions come from type.schema + DB role assignments
8
+ - System admin bypasses all checks
9
+ - Examples: User creates account, user creates ticket, user sends message
10
+
11
+ ### Second Surface (System Interactions)
12
+ - System is the actor
13
+ - Runs with system role
14
+ - Captures triggering user/system UUID for audit
15
+ - Examples: AI agent processes ticket, timer fires, integration syncs data
16
+
17
+ ### System Admin
18
+ - Complete bypass of all restrictions
19
+ - Can read/write/lock/unlock any surface
20
+ - Audit logs still record actions
21
+
22
+ ## Permission Resolution
23
+
24
+ 1. **Authentication** - Validate JWT, resolve personId
25
+ 2. **Account Context** - Determine acting account from headers/membership
26
+ 3. **Role Resolution** - Get active roles from v2.people_accounts + v2.people_roles
27
+ 4. **Schema Loading** - Load type.schema for target record type
28
+ 5. **Permission Evaluation** - Apply record_permissions + field overrides
29
+ 6. **Multi-role Merge** - Use highest effective permission per action
30
+ 7. **System Admin Bypass** - Skip all checks if system_admin
31
+
32
+ ## Master/Client Access
33
+
34
+ Master account users access client records by:
35
+ 1. Being assigned roles in client accounts via v2.people_roles
36
+ 2. Having those roles recognized in client record's type.schema
37
+ 3. No special-case permission logic required
38
+
39
+ ## Type Schema Structure
40
+
41
+ ```json
42
+ {
43
+ "record_permissions": {
44
+ "role_slug": {
45
+ "create": boolean,
46
+ "read": "all" | "account" | "own" | "none",
47
+ "update": "all" | "account" | "own" | "none",
48
+ "delete": boolean
49
+ }
50
+ },
51
+ "fields": {
52
+ "field_name": {
53
+ "type": "field_type",
54
+ "permissions": {
55
+ "role_slug": {
56
+ "read": boolean,
57
+ "write": boolean
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
63
+ ```
64
+
65
+ ## Access Levels
66
+
67
+ ### Record Access Levels
68
+ - **all** - Can access all records regardless of ownership
69
+ - **account** - Can access records within the same account
70
+ - **own** - Can only access records they created
71
+ - **none** - No access
72
+
73
+ ### Field Access Levels
74
+ - **true** - Can access the field
75
+ - **false** - Cannot access the field
76
+
77
+ ## Multi-Role Permission Merging
78
+
79
+ When a user has multiple roles, permissions are merged using the "highest effective permission wins" rule:
80
+
81
+ - For CRUD operations: if any role allows the action, the action is allowed
82
+ - For field access: if any role allows field access, field access is allowed
83
+ - System admin bypasses all permission checks
84
+
85
+ ## Implementation Details
86
+
87
+ ### Shared Permission Resolver
88
+
89
+ The `resolveFirstSurfacePermissions()` function in `v2-core/functions/_shared/permissions.ts` handles:
90
+
91
+ 1. Loading type schema from database
92
+ 2. Resolving user roles for the account context
93
+ 3. Evaluating record permissions for each role
94
+ 4. Merging permissions across multiple roles
95
+ 5. Applying field-level overrides
96
+
97
+ ### API Integration
98
+
99
+ APIs use the permission resolver through these helper functions:
100
+
101
+ - `canAccessRecord()` - Check if user can perform action on a record
102
+ - `sanitizeRecordData()` - Filter record data based on read permissions
103
+ - `validateUpdatePermissions()` - Validate field-level write permissions
104
+
105
+ ### System Admin Override
106
+
107
+ System admin users (`systemRole === 'system_admin'`) bypass all permission checks while maintaining audit trails.
108
+
109
+ ## Examples
110
+
111
+ ### Support Ticket Type Schema
112
+
113
+ ```json
114
+ {
115
+ "record_permissions": {
116
+ "user": {
117
+ "create": true,
118
+ "read": "own",
119
+ "update": "own",
120
+ "delete": false
121
+ },
122
+ "master-support": {
123
+ "create": false,
124
+ "read": "all",
125
+ "update": "all",
126
+ "delete": false
127
+ },
128
+ "master-csm": {
129
+ "create": false,
130
+ "read": "all",
131
+ "update": false,
132
+ "delete": false
133
+ }
134
+ },
135
+ "fields": {
136
+ "arr": {
137
+ "type": "number",
138
+ "permissions": {
139
+ "master-support": {
140
+ "read": false,
141
+ "write": false
142
+ },
143
+ "master-csm": {
144
+ "read": true,
145
+ "write": true
146
+ }
147
+ }
148
+ }
149
+ }
150
+ }
151
+ ```
152
+
153
+ ### Permission Evaluation
154
+
155
+ **Customer (user role):**
156
+ - Can create tickets
157
+ - Can only read/update their own tickets
158
+ - Cannot see ARR field
159
+
160
+ **Master Support (master-support role):**
161
+ - Cannot create tickets
162
+ - Can read all client tickets
163
+ - Can update most ticket fields
164
+ - Cannot see ARR field (field override)
165
+
166
+ **Master CSM (master-csm role):**
167
+ - Cannot create tickets
168
+ - Can read all client tickets
169
+ - Can only update ARR field (field override)
170
+ - Cannot delete tickets
@@ -0,0 +1,95 @@
1
+ # DB-First API Inventory (v2 Schema)
2
+
3
+ ## Core Entity Tables
4
+
5
+ | Table | Endpoint | Domain | Status | Notes |
6
+ |-------|----------|--------|--------|-------|
7
+ | `accounts` | accounts.ts | admin-data | complete | Full CRUD with account scoping |
8
+ | `people` | people.ts | admin-data | complete | Full CRUD with account scoping |
9
+ | `items` | items.ts | admin-data | complete | Full CRUD with type validation |
10
+ | `types` | types.ts | admin-configs | complete | Unified for item/account/person types |
11
+ | `apps` | apps.ts | admin-configs | complete | App definitions with nav items |
12
+ | `roles` | roles.ts | admin-configs | complete | Role definitions and permissions |
13
+ | `links` | links.ts | runtime | complete | Polymorphic entity relationships |
14
+ | `link_types` | link_types.ts | admin-configs | complete | Link type definitions |
15
+
16
+ ## Workflow & Automation Tables
17
+
18
+ | Table | Endpoint | Domain | Status | Notes |
19
+ |-------|----------|--------|--------|-------|
20
+ | `pipelines` | pipelines.ts | admin-configs | complete | Workflow automation pipelines |
21
+ | `pipeline_executions` | pipeline-executions.ts | runtime | complete | Pipeline execution history |
22
+ | `triggers` | triggers.ts | admin-configs | complete | Trigger definitions |
23
+ | `trigger_executions` | trigger_executions | runtime | RPC-only | Accessed via triggers.ts |
24
+ | `timers` | timers.ts | admin-configs | complete | Scheduled/delayed timers |
25
+
26
+ ## Collaboration & Communication Tables
27
+
28
+ | Table | Endpoint | Domain | Status | Notes |
29
+ |-------|----------|--------|--------|-------|
30
+ | `threads` | threads.ts | runtime | complete | Conversation threads |
31
+ | `messages` | messages.ts | runtime | complete | Thread messages |
32
+ | `attachments` | attachments.ts | runtime | complete | File attachments |
33
+ | `watchers` | watchers.ts | runtime | complete | Entity watching/subscriptions |
34
+
35
+ ## Integration & AI Tables
36
+
37
+ | Table | Endpoint | Domain | Status | Notes |
38
+ |-------|----------|--------|--------|-------|
39
+ | `integrations` | integrations.ts | admin-configs | complete | Integration instances |
40
+ | `embeddings` | embeddings.ts | admin-configs | complete | Embedding vectors |
41
+ | `ai_agents` | ai-agents.ts | admin-configs | complete | AI agent definitions |
42
+ | `prompt_configs` | prompt-configs.ts | admin-configs | complete | AI prompt configurations |
43
+
44
+ ## Access Control Tables
45
+
46
+ | Table | Endpoint | Domain | Status | Notes |
47
+ |-------|----------|--------|--------|-------|
48
+ | `people_accounts` | people-accounts.ts | runtime | complete | People-Accounts junction |
49
+ | `people_roles` | people-roles.ts | runtime | complete | People-Roles junction |
50
+ | `account_paths` | account-nodes.ts | internal | RPC-only | Account hierarchy traversal |
51
+
52
+ ## System & Logging Tables
53
+
54
+ | Table | Endpoint | Domain | Status | Notes |
55
+ |-------|----------|--------|--------|-------|
56
+ | `logs` | logs.ts | internal | complete | System and application logs |
57
+
58
+ ## v2-Incompatible Endpoints (Require Remediation)
59
+
60
+ | Endpoint | Referenced Tables | Domain | Status | Action Required |
61
+ |----------|------------------|--------|--------|-----------------|
62
+ | ai-orchestrator.ts | `ai_orchestrator` | internal | v2-incompatible | Table does not exist in v2 schema |
63
+ | pending-actions.ts | `pending_actions` | internal | v2-incompatible | Table does not exist in v2 schema |
64
+ | apps-accounts.ts | `apps_accounts` | internal | v2-incompatible | Table does not exist in v2 schema |
65
+ | apps-integrations.ts | `apps_integrations` | internal | v2-incompatible | Table does not exist in v2 schema |
66
+ | impersonation.ts | `impersonation_sessions`, `impersonation_policies`, `impersonation_logs` | internal | v2-incompatible | Tables do not exist in v2 schema |
67
+ | integration-health.ts | `integration_sync_logs`, `oauth_connections`, `api_keys`, `api_key_usage_logs` | internal | v2-incompatible | Tables do not exist in v2 schema |
68
+ | thread-participants.ts | `thread_participants` | runtime | v2-incompatible | Table does not exist in v2 schema |
69
+ | outbox.ts | `outbox` | internal | v2-incompatible | Table does not exist in v2 schema |
70
+ | webhooks.ts | `webhooks` | internal | v2-incompatible | Table does not exist in v2 schema |
71
+
72
+ ## Summary
73
+
74
+ ### Complete Coverage: 18 tables
75
+ - All core entity tables have proper endpoints
76
+ - All workflow/automation tables are covered
77
+ - All collaboration tables are covered
78
+ - All integration/AI tables are covered
79
+ - Access control tables are covered
80
+ - System logging is covered
81
+
82
+ ### v2-Incompatible: 9 endpoints
83
+ - These endpoints reference tables that don't exist in v2 schema
84
+ - Must be either rewritten to use existing v2 tables or quarantined
85
+ - Priority: High - these will cause runtime errors if called
86
+
87
+ ### Missing Endpoints: 0 tables
88
+ - All v2 schema tables have corresponding endpoints
89
+ - Some tables are accessed via RPC rather than direct queries (trigger_executions, account_paths)
90
+
91
+ ### Recommendations
92
+ 1. Quarantine v2-incompatible endpoints immediately
93
+ 2. Rewrite or remove incompatible endpoints
94
+ 3. Consider if missing functionality should be implemented with existing v2 tables
95
+ 4. Update any UI that might be calling incompatible endpoints
@@ -0,0 +1,77 @@
1
+ # Example: Custom App
2
+
3
+ A minimal React app with manifest and routing, installable via `spine-framework install-app`.
4
+
5
+ ## Directory Structure
6
+
7
+ ```
8
+ custom/apps/my-app/
9
+ ├── manifest.json # App metadata, routes, nav items
10
+ ├── index.tsx # React entry point (default export)
11
+ ├── seed/
12
+ │ ├── types.json # Item types this app provides
13
+ │ └── triggers.json # Automation triggers
14
+ ├── components/
15
+ │ └── Dashboard.tsx # App-specific components
16
+ └── package.json # npm package metadata (optional)
17
+ ```
18
+
19
+ ## manifest.json
20
+
21
+ ```json
22
+ {
23
+ "name": "My App",
24
+ "slug": "my-app",
25
+ "version": "0.1.0",
26
+ "description": "A custom app for demonstration",
27
+ "routes": [
28
+ { "path": "/", "redirect": "/dashboard" },
29
+ { "path": "/dashboard", "component": "Dashboard" }
30
+ ],
31
+ "nav_items": [
32
+ { "label": "Dashboard", "path": "/dashboard", "icon": "LayoutDashboard" }
33
+ ],
34
+ "required_roles": ["member"]
35
+ }
36
+ ```
37
+
38
+ ## index.tsx
39
+
40
+ ```tsx
41
+ import * as React from 'react'
42
+ import { Routes, Route, Navigate } from 'react-router-dom'
43
+
44
+ function Dashboard() {
45
+ return (
46
+ <div className="p-6">
47
+ <h1 className="text-2xl font-bold">My App</h1>
48
+ </div>
49
+ )
50
+ }
51
+
52
+ export default function MyApp() {
53
+ return (
54
+ <Routes>
55
+ <Route path="/" element={<Navigate to="dashboard" replace />} />
56
+ <Route path="dashboard" element={<Dashboard />} />
57
+ </Routes>
58
+ )
59
+ }
60
+ ```
61
+
62
+ ## Installation
63
+
64
+ ```bash
65
+ # Create the app scaffold
66
+ spine-framework create-app my-app
67
+
68
+ # Or install an existing app package
69
+ spine-framework install-app my-app
70
+ ```
71
+
72
+ ## How It Works
73
+
74
+ 1. `CustomAppLoader` discovers apps via `import.meta.glob('custom/apps/*/index.tsx')`
75
+ 2. The app's `manifest.json` provides routing and navigation metadata
76
+ 3. Seed data is applied via `spine-framework install-app` (idempotent upserts)
77
+ 4. The app is isolated — it cannot import from other apps or core internals
@@ -0,0 +1,27 @@
1
+ # Example: Custom Function
2
+
3
+ A minimal Netlify Function using Spine's core context system.
4
+
5
+ ## Setup
6
+
7
+ 1. Create `custom/functions/custom_my-handler.ts`
8
+ 2. Import `createHandler` and `CoreContext` from `spine-framework/_shared`
9
+ 3. Your handler receives a fully-resolved `CoreContext` with:
10
+ - `ctx.principal` — authenticated user/machine identity
11
+ - `ctx.db` — Supabase client (scoped to principal's permissions)
12
+ - `ctx.accountId` — resolved account UUID
13
+ - `ctx.requestId` — unique request trace ID
14
+
15
+ ## Key Points
16
+
17
+ - **Naming convention:** Custom functions MUST be prefixed with `custom_`
18
+ - **No static imports from core:** Use the `spine-framework` package exports
19
+ - **Authentication is automatic:** `createHandler` validates the JWT/API key before your code runs
20
+ - **Database access:** Use `ctx.db` for RLS-scoped queries, or import `adminDb` for service-role operations
21
+
22
+ ## API
23
+
24
+ ```
25
+ GET/POST /.netlify/functions/custom_my-handler?action=list
26
+ Authorization: Bearer <jwt>
27
+ ```
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Example: Custom Netlify Function using Spine core context
3
+ *
4
+ * This demonstrates the minimal pattern for creating a custom function
5
+ * that leverages Spine's authentication, database, and principal system.
6
+ *
7
+ * File: custom/functions/custom_my-handler.ts
8
+ */
9
+
10
+ import { createHandler, adminDb } from 'spine-framework/_shared'
11
+ import type { CoreContext } from 'spine-framework/_shared'
12
+
13
+ /**
14
+ * A simple handler that lists items for the current account.
15
+ */
16
+ async function listAccountItems(ctx: CoreContext) {
17
+ const { data, error } = await ctx.db
18
+ .from('items')
19
+ .select('id, title, type_id, created_at')
20
+ .eq('account_id', ctx.accountId)
21
+ .eq('is_active', true)
22
+ .order('created_at', { ascending: false })
23
+ .limit(50)
24
+
25
+ if (error) {
26
+ return { statusCode: 500, body: JSON.stringify({ error: error.message }) }
27
+ }
28
+
29
+ return {
30
+ statusCode: 200,
31
+ body: JSON.stringify({ items: data }),
32
+ }
33
+ }
34
+
35
+ /**
36
+ * Netlify Function entry point.
37
+ * `createHandler` resolves the principal, validates auth, and provides CoreContext.
38
+ */
39
+ export const handler = createHandler(async (ctx) => {
40
+ const { action } = ctx.params
41
+
42
+ switch (action) {
43
+ case 'list':
44
+ return listAccountItems(ctx)
45
+ default:
46
+ return { statusCode: 400, body: JSON.stringify({ error: 'Unknown action' }) }
47
+ }
48
+ })
@@ -0,0 +1,68 @@
1
+ # Example: Custom Webhook Handler
2
+
3
+ Demonstrates the self-registration pattern for webhook handlers.
4
+
5
+ ## How It Works
6
+
7
+ 1. Create a handler function in `custom/functions/custom_my-webhook.ts`
8
+ 2. Register it by calling `registerWebhookHandler()` in `custom/functions/custom_webhook-handlers.ts`
9
+ 3. Core resolves handlers at runtime via the `webhook_handlers` DB table — no static imports needed
10
+
11
+ ## Handler Function
12
+
13
+ ```ts
14
+ // custom/functions/custom_my-webhook.ts
15
+
16
+ import { createHandler } from 'spine-framework/_shared'
17
+ import type { CoreContext } from 'spine-framework/_shared'
18
+
19
+ export const handler = createHandler(async (ctx: CoreContext) => {
20
+ const payload = ctx.body
21
+
22
+ // Process the webhook payload
23
+ console.log('Received webhook:', payload.event_type)
24
+
25
+ // Do something with the data
26
+ const { error } = await ctx.db
27
+ .from('items')
28
+ .insert({
29
+ title: `Webhook: ${payload.event_type}`,
30
+ type_id: await resolveTypeId('webhook_event'),
31
+ account_id: ctx.accountId,
32
+ data: payload,
33
+ })
34
+
35
+ if (error) {
36
+ return { statusCode: 500, body: JSON.stringify({ error: error.message }) }
37
+ }
38
+
39
+ return { statusCode: 200, body: JSON.stringify({ ok: true }) }
40
+ })
41
+ ```
42
+
43
+ ## Registration
44
+
45
+ ```ts
46
+ // In custom/functions/custom_webhook-handlers.ts
47
+
48
+ import { registerWebhookHandler } from 'spine-framework/_shared/webhook-registration'
49
+
50
+ registerWebhookHandler({
51
+ name: 'my-webhook',
52
+ functionName: 'custom_my-webhook',
53
+ description: 'Handles incoming webhooks from MyService',
54
+ events: ['integration.webhook'],
55
+ }).catch(console.error)
56
+ ```
57
+
58
+ ## Integration Config
59
+
60
+ When configuring an integration in the admin panel, set:
61
+ - `handler.path` = `my-webhook` (matches the `name` in registration)
62
+
63
+ ## Key Points
64
+
65
+ - **Self-registration is idempotent** — safe to call on every module load
66
+ - **No core changes needed** — just add your handler and register it
67
+ - **Runtime resolution** — core looks up handlers from `webhook_handlers` table via `resolveHandler()`
68
+ - **Events array** — currently `['integration.webhook']` is the standard event type
@@ -0,0 +1,103 @@
1
+ # Gap Remediation Backlog
2
+
3
+ ## Priority 1: Critical v2-Incompatible Endpoints
4
+
5
+ ### 1. Quarantine v2-Incompatible Endpoints
6
+ **Files to quarantine:**
7
+ - `ai-orchestrator.ts` - References non-existent `ai_orchestrator` table
8
+ - `pending-actions.ts` - References non-existent `pending_actions` table
9
+ - `apps-accounts.ts` - References non-existent `apps_accounts` table
10
+ - `apps-integrations.ts` - References non-existent `apps_integrations` table
11
+ - `impersonation.ts` - References non-existent impersonation tables
12
+ - `integration-health.ts` - References non-existent integration log tables
13
+ - `thread-participants.ts` - References non-existent `thread_participants` table
14
+ - `outbox.ts` - References non-existent `outbox` table
15
+ - `webhooks.ts` - References non-existent `webhooks` table
16
+
17
+ **Action:**
18
+ 1. Move these files to `v2-core/functions/_quarantine/` directory
19
+ 2. Update any routing that might call these endpoints
20
+ 3. Document what functionality needs replacement
21
+
22
+ ## Priority 2: UI Adoption Issues
23
+
24
+ ### 2. Fix TimersPage Mock Data
25
+ **Issue:** TimersPage uses mock data instead of calling timers.ts API
26
+ **File:** `v2-core/src/pages/admin/TimersPage.tsx`
27
+ **Action:** Replace mock data with `apiFetch('/.netlify/functions/timers')`
28
+
29
+ ## Priority 3: API Standardization
30
+
31
+ ### 3. Add Role Guards to Config Endpoints
32
+ **Files to update:**
33
+ - `types.ts` - Admin-only for create/update/delete
34
+ - `apps.ts` - Admin-only for create/update/delete
35
+ - `pipelines.ts` - Admin-only for create/update/delete
36
+ - `triggers.ts` - Admin-only for create/update/delete
37
+ - `ai-agents.ts` - Admin-only for create/update/delete
38
+ - `embeddings.ts` - Admin-only for create/update/delete
39
+ - `timers.ts` - Admin-only for create/update/delete
40
+ - `integrations.ts` - Admin-only for create/update/delete
41
+ - `prompt-configs.ts` - Admin-only for create/update/delete
42
+ - `roles.ts` - Admin-only for create/update/delete
43
+
44
+ **Action:** Add `requireAuth` middleware to all config mutation endpoints
45
+
46
+ ### 4. Verify Soft Delete Implementation
47
+ **Files to check:**
48
+ - All endpoints should use `is_active=false` for delete
49
+ - Ensure `updated_at` is set on soft delete
50
+ - Verify audit logging before soft delete
51
+
52
+ ## Priority 4: Documentation
53
+
54
+ ### 5. Add Inline API Documentation
55
+ **All endpoint files need:**
56
+ - Purpose and domain documentation
57
+ - Auth requirements
58
+ - Account scoping rules
59
+ - Request/response contracts
60
+ - Soft delete behavior
61
+ - v2 table dependencies
62
+
63
+ ### 6. Generate API Reference Docs
64
+ **Create files in `v2-core/docs/apis/`:**
65
+ - `admin-data.md`
66
+ - `admin-configs.md`
67
+ - `runtime.md`
68
+ - `internal.md`
69
+ - `index.md` (top-level)
70
+
71
+ ## Implementation Order
72
+
73
+ ### Phase 1: Critical Fixes (Immediate)
74
+ 1. Quarantine v2-incompatible endpoints
75
+ 2. Fix TimersPage mock data issue
76
+
77
+ ### Phase 2: Security & Standards (High)
78
+ 1. Add role guards to config endpoints
79
+ 2. Verify soft delete implementation
80
+ 3. Add basic inline documentation
81
+
82
+ ### Phase 3: Documentation (Medium)
83
+ 1. Complete inline documentation for all endpoints
84
+ 2. Generate split API reference docs
85
+ 3. Create top-level index
86
+
87
+ ### Phase 4: Verification (Low)
88
+ 1. Verify UI adoption for all completed APIs
89
+ 2. Final compliance check against API rulebook
90
+
91
+ ## Success Criteria
92
+
93
+ - [ ] No v2-incompatible endpoints in active routing
94
+ - [ ] All admin UIs use proper APIs (no mock data)
95
+ - [ ] All config endpoints have admin-only role guards
96
+ - [ ] All endpoints use soft delete correctly
97
+ - [ ] All endpoints have inline documentation
98
+ - [ ] API reference docs generated and indexed
99
+ - [ ] UI adoption verified for all APIs
100
+
101
+ ## Blocked Items
102
+
103
+ None currently identified.