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,38 +1,33 @@
1
- // CIL[BEGIN chunk_id="permissions_moduleheader_1784066609" type="module_header" identity="module_header" parent="none"]
2
- // CIL[DOC-MACRO purpose="Permission system for data access control"]
3
- // CIL[DOC-RESPONSIBILITY responsibility="Manage record and field-level permissions"]
4
- // CIL[DOC-CONTEXT module="_shared/permissions" layer="infrastructure" related_files="[\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
5
- // CIL[DOC-CONTRACT inputs="none" outputs="permission utilities" errors="none" side_effects="access control"]
6
- // CIL[DOC-MICRO logic_summary="Defines PermissionEngine and permission resolution logic" notable_decisions="[]"]
7
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
8
- // CIL[DOC-STABILITY stability="stable"]
9
- // CIL[DOC-AUDIENCE audience="developer"]
10
- // CIL[DOC-VECTOR type="context" content="Layer: infrastructure. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/IntegrationsPage.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"]
16
- // CIL[END chunk_id="permissions_moduleheader_1784066609"]
17
- // CIL[BEGIN chunk_id="permissions_types_1784066609" type="module_header" identity="types" parent="none"]
18
- // CIL[DOC-MACRO purpose="Permission types and interfaces"]
19
- // CIL[DOC-RESPONSIBILITY responsibility="Define permission data structures"]
20
- // CIL[DOC-CONTEXT module="_shared/permissions" layer="infrastructure" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
21
- // CIL[DOC-CONTRACT inputs="none" outputs="type definitions" errors="none" side_effects="type definitions"]
22
- // CIL[DOC-MICRO logic_summary="Defines PermissionResult interface and imports" notable_decisions="[]"]
23
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
1
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/permissions.ts"]
2
+ // CIL[DOC-MACRO purpose="Entry point for the permissions shared module"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Sets up imports and module context for permissions engine"]
4
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports dependencies and declares the permissions module" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
24
8
  // CIL[DOC-STABILITY stability="stable"]
25
- // CIL[DOC-AUDIENCE audience="developer"]
26
- // CIL[DOC-VECTOR type="context" content="Layer: infrastructure. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/components/ui/dialog.tsx, \."]
27
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
28
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
29
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
30
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
31
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
9
+ // CIL[DOC-AUDIENCE audience="developers"]
10
+
32
11
  import { adminDb } from './db'
33
12
  import { Principal } from './principal'
34
13
  import { CoreContext } from './middleware'
14
+ // CIL[DOC-VECTOR type="context" content="purpose='Entry point for the permissions shared module'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
15
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
16
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
17
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
18
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
19
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
20
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:module_header:module_header"]
21
+
35
22
 
23
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:PermissionResult:interface" type="interface" identity="PermissionResult" parent="~/.framework/functions/_shared/permissions.ts"]
24
+ // CIL[DOC-MACRO purpose="Declares the PermissionResult permission-related type"]
25
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the PermissionResult behavior for permission decisions"]
26
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
27
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
28
+ // CIL[DOC-MICRO logic_summary="Implements the PermissionResult logic for the permissions module" notable_decisions="[]"]
29
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
30
+ // CIL[DOC-STABILITY stability="stable"]
36
31
  export interface PermissionResult {
37
32
  canCreate: boolean
38
33
  canRead: boolean
@@ -40,41 +35,49 @@ export interface PermissionResult {
40
35
  canDelete: boolean
41
36
  fieldPermissions: Record<string, { read: boolean; write: boolean }>
42
37
  }
43
-
44
- type RequestContext = CoreContext
45
- // CIL[END chunk_id="permissions_types_1784066609"]
46
- // CIL[BEGIN chunk_id="permissions_engineclass_1784066609" type="class" identity="_PermissionEngineInternal" parent="none"]
47
- // CIL[DOC-MACRO purpose="Permission engine internal class placeholder"]
48
- // CIL[DOC-RESPONSIBILITY responsibility="Define permission engine structure"]
49
- // CIL[DOC-CONTEXT module="_shared/permissions" layer="infrastructure" related_files="[\".framework/functions/_shared/principal.ts\",\"\\\"]"]
50
- // CIL[DOC-CONTRACT inputs="none" outputs="class definition" errors="none" side_effects="none"]
51
- // CIL[DOC-MICRO logic_summary="Empty class definition for permission engine" 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: infrastructure. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, \."]
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."]
38
+ // CIL[DOC-VECTOR type="context" content="purpose='Declares the PermissionResult permission-related type'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
39
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
40
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
41
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
58
42
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
59
43
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
60
- // CIL[END chunk_id="permissions_engineclass_1784066609"]
61
- // CIL[BEGIN chunk_id="permissions_classification_1784066609" type="class" identity="_PermissionEngineInternal" parent="permissions_engineclass_1784066609"]
62
- // CIL[DOC-MACRO purpose="Permission engine implementation"]
63
- // CIL[DOC-RESPONSIBILITY responsibility="Implement permission resolution logic"]
64
- // CIL[DOC-CONTEXT module="_shared/permissions" layer="infrastructure" related_files="[\".framework/functions/_shared/principal.ts\",\"\\\"]"]
65
- // CIL[DOC-CONTRACT inputs="none" outputs="permission methods" errors="none" side_effects="permission evaluation"]
66
- // CIL[DOC-MICRO logic_summary="Implements singleton permission engine with surface detection" notable_decisions="[]"]
67
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
44
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:PermissionResult:interface"]
45
+
46
+
47
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:RequestContext:type" type="type" identity="RequestContext" parent="~/.framework/functions/_shared/permissions.ts"]
48
+ // CIL[DOC-MACRO purpose="Declares the RequestContext permission-related type"]
49
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the RequestContext behavior for permission decisions"]
50
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
51
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
52
+ // CIL[DOC-MICRO logic_summary="Implements the RequestContext logic for the permissions module" notable_decisions="[]"]
53
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
68
54
  // CIL[DOC-STABILITY stability="stable"]
69
- // CIL[DOC-VECTOR type="context" content="Layer: infrastructure. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, \."]
70
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
71
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
72
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
55
+ type RequestContext = CoreContext
56
+ // CIL[DOC-VECTOR type="context" content="purpose='Declares the RequestContext permission-related type'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
57
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
58
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
59
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
73
60
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
74
61
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
62
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:RequestContext:type"]
63
+
64
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class" type="class" identity="_PermissionEngineInternal" parent="~/.framework/functions/_shared/permissions.ts"]
65
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal class"]
66
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal behavior for permission decisions"]
67
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
68
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
69
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal logic for the permissions module" notable_decisions="[]"]
70
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
71
+ // CIL[DOC-STABILITY stability="stable"]
75
72
  class _PermissionEngineInternal {
76
73
  private static instance: _PermissionEngineInternal
77
74
 
75
+ // personId → role slug, short-TTL. resolveFirstSurfacePermissions runs once
76
+ // per record inside list-sanitize loops — without this cache a 20-message
77
+ // poll is 20 sequential people lookups.
78
+ private roleSlugCache = new Map<string, { slug: string | null; expiresAt: number }>()
79
+ private static readonly ROLE_CACHE_TTL_MS = 60_000
80
+
78
81
  private readonly SECOND_SURFACE_TABLES = new Set([
79
82
  'apps', 'app', 'pipelines', 'triggers', 'ai_agents', 'embeddings',
80
83
  'timers', 'integrations', 'roles', 'types', 'prompt_configs'
@@ -86,7 +89,22 @@ class _PermissionEngineInternal {
86
89
  ])
87
90
 
88
91
  private constructor() {}
89
-
92
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal class'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
93
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
94
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
95
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
96
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
97
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
98
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
99
+
100
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.detectSurface:method" type="method" identity="_PermissionEngineInternal.detectSurface" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
101
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.detectSurface permission method"]
102
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.detectSurface behavior for permission decisions"]
103
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
104
+ // CIL[DOC-CONTRACT inputs="tableName: string" outputs="'first' | 'second' | 'third'" errors="none" side_effects="none"]
105
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.detectSurface logic for the permissions module" notable_decisions="[]"]
106
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
107
+ // CIL[DOC-STABILITY stability="stable"]
90
108
  private detectSurface(tableName: string): 'first' | 'second' | 'third' {
91
109
  if (this.SECOND_SURFACE_TABLES.has(tableName)) {
92
110
  return 'second'
@@ -96,7 +114,22 @@ class _PermissionEngineInternal {
96
114
  }
97
115
  return 'first'
98
116
  }
99
-
117
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.detectSurface permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
118
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
119
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
120
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
121
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
122
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
123
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.detectSurface:method"]
124
+
125
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.extractTableName:method" type="method" identity="_PermissionEngineInternal.extractTableName" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
126
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.extractTableName permission method"]
127
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.extractTableName behavior for permission decisions"]
128
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
129
+ // CIL[DOC-CONTRACT inputs="record: any, typeSlug?: string" outputs="string" errors="none" side_effects="none"]
130
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.extractTableName logic for the permissions module" notable_decisions="[]"]
131
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
132
+ // CIL[DOC-STABILITY stability="stable"]
100
133
  private extractTableName(record: any, typeSlug?: string): string {
101
134
  if (record?.table_name) {
102
135
  return record.table_name
@@ -116,28 +149,44 @@ class _PermissionEngineInternal {
116
149
 
117
150
  return 'unknown'
118
151
  }
119
-
152
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.extractTableName permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
153
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
154
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
155
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
156
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
157
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
158
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.extractTableName:method"]
159
+
160
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.getInstance:method" type="method" identity="_PermissionEngineInternal.getInstance" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
161
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.getInstance permission method"]
162
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.getInstance behavior for permission decisions"]
163
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
164
+ // CIL[DOC-CONTRACT inputs="none" outputs="_PermissionEngineInternal" errors="none" side_effects="none"]
165
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.getInstance logic for the permissions module" notable_decisions="[]"]
166
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
167
+ // CIL[DOC-STABILITY stability="stable"]
120
168
  static getInstance(): _PermissionEngineInternal {
121
169
  if (!_PermissionEngineInternal.instance) {
122
170
  _PermissionEngineInternal.instance = new _PermissionEngineInternal()
123
171
  }
124
172
  return _PermissionEngineInternal.instance
125
173
  }
126
- // CIL[END chunk_id="permissions_classification_1784066609"]
127
- // CIL[BEGIN chunk_id="permissions_resolvefirstsurface_1784066609" type="function" identity="resolveFirstSurfacePermissions" parent="permissions_classification_1784066609"]
128
- // CIL[DOC-MACRO purpose="Resolve first surface permissions"]
129
- // CIL[DOC-RESPONSIBILITY responsibility="Evaluate record and field permissions for runtime data"]
130
- // CIL[DOC-CONTEXT module="_shared/permissions" layer="infrastructure" related_files="[\".framework/migrations/025_retype_threads_messages.sql\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
131
- // CIL[DOC-CONTRACT inputs="none" outputs="PermissionResult" errors="database errors" side_effects="database reads"]
132
- // CIL[DOC-MICRO logic_summary="Resolves permissions based on role and design schema" notable_decisions="[]"]
133
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="complex_dependencies"]
134
- // CIL[DOC-STABILITY stability="stable"]
135
- // CIL[DOC-VECTOR type="context" content="Layer: infrastructure. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/025_retype_threads_messages.sql, .framework/functions/_shared/principal.ts, \."]
136
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
137
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
138
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
174
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.getInstance permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
175
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
176
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
177
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
139
178
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
140
179
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
180
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.getInstance:method"]
181
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.resolveFirstSurfacePermissions:method" type="method" identity="_PermissionEngineInternal.resolveFirstSurfacePermissions" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
182
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.resolveFirstSurfacePermissions permission method"]
183
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.resolveFirstSurfacePermissions behavior for permission decisions"]
184
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
185
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="May return error results or throw on permission resolution failure" side_effects="May log debug information to console"]
186
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.resolveFirstSurfacePermissions logic for the permissions module" notable_decisions="[]"]
187
+ // CIL[DOC-LEARNING topic="invariant" content="record_permissions keys are matched verbatim against the seeded roles.slug — nothing normalizes hyphens. 'system-admin' is a dead key that silently denies system_admin; only real slugs (system_admin, member, support, ...) or the 'all' wildcard are valid. Proven by a shipped downstream-app defect (403 on create for system_admin)."]
188
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
189
+ // CIL[DOC-STABILITY stability="stable"]
141
190
  async resolveFirstSurfacePermissions(
142
191
  personId: string,
143
192
  accountId: string,
@@ -164,15 +213,22 @@ class _PermissionEngineInternal {
164
213
  return defaultResult
165
214
  }
166
215
 
167
- // 2. Get user's role via people.role_id FK
168
- const { data: person } = await adminDb
169
- .from('people')
170
- .select('role:role_id(slug)')
171
- .eq('id', personId)
172
- .eq('is_active', true)
173
- .single()
174
-
175
- const roleSlug = (person?.role as any)?.slug || Array.isArray(person?.role) && (person.role as any)[0]?.slug
216
+ // 2. Get user's role via people.role_id FK — cached by personId so
217
+ // per-record sanitize calls don't each hit the database.
218
+ const cachedRole = this.roleSlugCache.get(personId)
219
+ let roleSlug: string | null | undefined
220
+ if (cachedRole && cachedRole.expiresAt > Date.now()) {
221
+ roleSlug = cachedRole.slug
222
+ } else {
223
+ const { data: person } = await adminDb
224
+ .from('people')
225
+ .select('role:role_id(slug)')
226
+ .eq('id', personId)
227
+ .eq('is_active', true)
228
+ .single()
229
+ roleSlug = (person?.role as any)?.slug || Array.isArray(person?.role) && (person.role as any)[0]?.slug || null
230
+ this.roleSlugCache.set(personId, { slug: roleSlug, expiresAt: Date.now() + _PermissionEngineInternal.ROLE_CACHE_TTL_MS })
231
+ }
176
232
  if (!roleSlug) {
177
233
  return defaultResult
178
234
  }
@@ -239,21 +295,21 @@ class _PermissionEngineInternal {
239
295
  return defaultResult
240
296
  }
241
297
  }
242
- // CIL[END chunk_id="permissions_resolvefirstsurface_1784066609"]
243
- // CIL[BEGIN chunk_id="permissions_canaccessconfig_1784066609" type="function" identity="canAccessConfigObject" parent="permissions_classification_1784066609"]
244
- // CIL[DOC-MACRO purpose="Export permission engine instance and methods"]
245
- // CIL[DOC-RESPONSIBILITY responsibility="Provide public API for permission system"]
246
- // CIL[DOC-CONTEXT module="_shared/permissions" layer="infrastructure" related_files="[]"]
247
- // CIL[DOC-CONTRACT inputs="none" outputs="exports" errors="none" side_effects="module exports"]
248
- // CIL[DOC-MICRO logic_summary="Exports PermissionEngine singleton and bound methods" notable_decisions="[]"]
249
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
250
- // CIL[DOC-STABILITY stability="stable"]
251
- // CIL[DOC-VECTOR type="context" content="Layer: infrastructure. Direct callers: 0. Direct calls: 0. Related files: none."]
252
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
253
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
254
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
298
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.resolveFirstSurfacePermissions permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
299
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
300
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
301
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
255
302
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
256
303
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
304
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.resolveFirstSurfacePermissions:method"]
305
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.canAccessConfigObject:method" type="method" identity="_PermissionEngineInternal.canAccessConfigObject" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
306
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.canAccessConfigObject permission method"]
307
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.canAccessConfigObject behavior for permission decisions"]
308
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
309
+ // CIL[DOC-CONTRACT inputs="ctx: RequestContext, action: 'create' | 'read' | 'update' | 'delete'" outputs="boolean" errors="none" side_effects="none"]
310
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.canAccessConfigObject logic for the permissions module" notable_decisions="[]"]
311
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
312
+ // CIL[DOC-STABILITY stability="stable"]
257
313
  private canAccessConfigObject(ctx: RequestContext, action: 'create' | 'read' | 'update' | 'delete'): boolean {
258
314
  // System admin has full access
259
315
  if (this.isSystemAdmin(ctx)) {
@@ -268,22 +324,22 @@ class _PermissionEngineInternal {
268
324
  // All other access denied
269
325
  return false
270
326
  }
271
-
272
- // CIL[END chunk_id="permissions_canaccessconfig_1784066609"]
273
- // CIL[BEGIN chunk_id="permissions_sanitizeconfig_1784066609" type="function" identity="sanitizeConfigObject" parent="permissions_classification_1784066609"]
274
- // CIL[DOC-MACRO purpose="sanitizeConfigObject"]
275
- // CIL[DOC-RESPONSIBILITY responsibility="Handle sanitizeConfigObject"]
276
- // CIL[DOC-CONTEXT module="sanitizeConfigObject" layer="unknown" related_files="[]"]
277
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
278
- // CIL[DOC-MICRO logic_summary="Implements sanitizeConfigObject" notable_decisions="[]"]
279
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
280
- // CIL[DOC-STABILITY stability="stable"]
281
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
282
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
283
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
284
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
327
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.canAccessConfigObject permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
328
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
329
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
330
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
285
331
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
286
332
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
333
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.canAccessConfigObject:method"]
334
+
335
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.sanitizeConfigObject:method" type="method" identity="_PermissionEngineInternal.sanitizeConfigObject" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
336
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.sanitizeConfigObject permission method"]
337
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.sanitizeConfigObject behavior for permission decisions"]
338
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
339
+ // CIL[DOC-CONTRACT inputs="ctx: RequestContext, record: any" outputs="any" errors="none" side_effects="May log debug information to console"]
340
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.sanitizeConfigObject logic for the permissions module" notable_decisions="[]"]
341
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
342
+ // CIL[DOC-STABILITY stability="stable"]
287
343
  private sanitizeConfigObject(ctx: RequestContext, record: any): any {
288
344
  // Debug logging
289
345
  console.log('sanitizeConfigObject called with record:', {
@@ -336,22 +392,22 @@ class _PermissionEngineInternal {
336
392
  updated_at: record.updated_at
337
393
  }
338
394
  }
339
-
340
- // CIL[END chunk_id="permissions_sanitizeconfig_1784066609"]
341
- // CIL[BEGIN chunk_id="permissions_validateconfig_1784066609" type="function" identity="validateConfigObjectPermissions" parent="permissions_classification_1784066609"]
342
- // CIL[DOC-MACRO purpose="validateConfigObjectPermissions"]
343
- // CIL[DOC-RESPONSIBILITY responsibility="Handle validateConfigObjectPermissions"]
344
- // CIL[DOC-CONTEXT module="validateConfigObjectPermissions" layer="unknown" related_files="[]"]
345
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
346
- // CIL[DOC-MICRO logic_summary="Implements validateConfigObjectPermissions" notable_decisions="[]"]
347
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
348
- // CIL[DOC-STABILITY stability="stable"]
349
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
350
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
351
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
352
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
395
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.sanitizeConfigObject permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
396
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
397
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
398
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
353
399
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
354
400
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
401
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.sanitizeConfigObject:method"]
402
+
403
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.validateConfigObjectPermissions:method" type="method" identity="_PermissionEngineInternal.validateConfigObjectPermissions" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
404
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.validateConfigObjectPermissions permission method"]
405
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.validateConfigObjectPermissions behavior for permission decisions"]
406
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
407
+ // CIL[DOC-CONTRACT inputs="ctx: RequestContext, action: 'create' | 'read' | 'update' | 'delete'" outputs="string }" errors="none" side_effects="none"]
408
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.validateConfigObjectPermissions logic for the permissions module" notable_decisions="[]"]
409
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
410
+ // CIL[DOC-STABILITY stability="stable"]
355
411
  private validateConfigObjectPermissions(ctx: RequestContext, action: 'create' | 'read' | 'update' | 'delete'): { valid: boolean; error?: string } {
356
412
  if (this.canAccessConfigObject(ctx, action)) {
357
413
  return { valid: true }
@@ -359,22 +415,22 @@ class _PermissionEngineInternal {
359
415
 
360
416
  return { valid: false, error: 'Insufficient permissions for this operation' }
361
417
  }
362
-
363
- // CIL[END chunk_id="permissions_validateconfig_1784066609"]
364
- // CIL[BEGIN chunk_id="permissions_canaccesssystem_1784066609" type="function" identity="canAccessSystemMetadata" parent="permissions_classification_1784066609"]
365
- // CIL[DOC-MACRO purpose="canAccessSystemMetadata"]
366
- // CIL[DOC-RESPONSIBILITY responsibility="Handle canAccessSystemMetadata"]
367
- // CIL[DOC-CONTEXT module="canAccessSystemMetadata" layer="unknown" related_files="[]"]
368
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
369
- // CIL[DOC-MICRO logic_summary="Implements canAccessSystemMetadata" notable_decisions="[]"]
370
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
371
- // CIL[DOC-STABILITY stability="stable"]
372
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
373
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
374
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
375
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
418
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.validateConfigObjectPermissions permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
419
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
420
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
421
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
376
422
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
377
423
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
424
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.validateConfigObjectPermissions:method"]
425
+
426
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.canAccessSystemMetadata:method" type="method" identity="_PermissionEngineInternal.canAccessSystemMetadata" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
427
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.canAccessSystemMetadata permission method"]
428
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.canAccessSystemMetadata behavior for permission decisions"]
429
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
430
+ // CIL[DOC-CONTRACT inputs="ctx: RequestContext, record: any, action: 'create' | 'read' | 'update' | 'delete'" outputs="boolean" errors="none" side_effects="none"]
431
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.canAccessSystemMetadata logic for the permissions module" notable_decisions="[]"]
432
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
433
+ // CIL[DOC-STABILITY stability="stable"]
378
434
  private canAccessSystemMetadata(ctx: RequestContext, record: any, action: 'create' | 'read' | 'update' | 'delete'): boolean {
379
435
  // System admin has full access
380
436
  if (this.isSystemAdmin(ctx)) {
@@ -407,22 +463,22 @@ class _PermissionEngineInternal {
407
463
  // Users cannot create/update/delete system metadata
408
464
  return false
409
465
  }
410
-
411
- // CIL[END chunk_id="permissions_canaccesssystem_1784066609"]
412
- // CIL[BEGIN chunk_id="permissions_sanitizesystem_1784066609" type="function" identity="sanitizeSystemMetadata" parent="permissions_classification_1784066609"]
413
- // CIL[DOC-MACRO purpose="sanitizeSystemMetadata"]
414
- // CIL[DOC-RESPONSIBILITY responsibility="Handle sanitizeSystemMetadata"]
415
- // CIL[DOC-CONTEXT module="sanitizeSystemMetadata" layer="unknown" related_files="[]"]
416
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
417
- // CIL[DOC-MICRO logic_summary="Implements sanitizeSystemMetadata" notable_decisions="[]"]
418
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
419
- // CIL[DOC-STABILITY stability="stable"]
420
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
421
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
422
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
423
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
466
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.canAccessSystemMetadata permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
467
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
468
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
469
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
424
470
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
425
471
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
472
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.canAccessSystemMetadata:method"]
473
+
474
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.sanitizeSystemMetadata:method" type="method" identity="_PermissionEngineInternal.sanitizeSystemMetadata" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
475
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.sanitizeSystemMetadata permission method"]
476
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.sanitizeSystemMetadata behavior for permission decisions"]
477
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
478
+ // CIL[DOC-CONTRACT inputs="ctx: RequestContext, record: any" outputs="any" errors="none" side_effects="none"]
479
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.sanitizeSystemMetadata logic for the permissions module" notable_decisions="[]"]
480
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
481
+ // CIL[DOC-STABILITY stability="stable"]
426
482
  private sanitizeSystemMetadata(ctx: RequestContext, record: any): any {
427
483
  // System admin and system role see everything
428
484
  if (this.isSystemAdmin(ctx) || ctx.principal?.type === 'machine') {
@@ -441,22 +497,22 @@ class _PermissionEngineInternal {
441
497
  updated_at: record.updated_at
442
498
  }
443
499
  }
444
-
445
- // CIL[END chunk_id="permissions_sanitizesystem_1784066609"]
446
- // CIL[BEGIN chunk_id="permissions_validatesystem_1784066609" type="function" identity="validateSystemMetadataPermissions" parent="permissions_classification_1784066609"]
447
- // CIL[DOC-MACRO purpose="validateSystemMetadataPermissions"]
448
- // CIL[DOC-RESPONSIBILITY responsibility="Handle validateSystemMetadataPermissions"]
449
- // CIL[DOC-CONTEXT module="validateSystemMetadataPermissions" layer="unknown" related_files="[]"]
450
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
451
- // CIL[DOC-MICRO logic_summary="Implements validateSystemMetadataPermissions" notable_decisions="[]"]
452
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
453
- // CIL[DOC-STABILITY stability="stable"]
454
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
455
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
456
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
457
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
500
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.sanitizeSystemMetadata permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
501
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
502
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
503
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
458
504
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
459
505
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
506
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.sanitizeSystemMetadata:method"]
507
+
508
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.validateSystemMetadataPermissions:method" type="method" identity="_PermissionEngineInternal.validateSystemMetadataPermissions" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
509
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.validateSystemMetadataPermissions permission method"]
510
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.validateSystemMetadataPermissions behavior for permission decisions"]
511
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
512
+ // CIL[DOC-CONTRACT inputs="ctx: RequestContext, record: any, action: 'create' | 'read' | 'update' | 'delete'" outputs="string }" errors="none" side_effects="none"]
513
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.validateSystemMetadataPermissions logic for the permissions module" notable_decisions="[]"]
514
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
515
+ // CIL[DOC-STABILITY stability="stable"]
460
516
  private validateSystemMetadataPermissions(ctx: RequestContext, record: any, action: 'create' | 'read' | 'update' | 'delete'): { valid: boolean; error?: string } {
461
517
  if (this.canAccessSystemMetadata(ctx, record, action)) {
462
518
  return { valid: true }
@@ -464,41 +520,41 @@ class _PermissionEngineInternal {
464
520
 
465
521
  return { valid: false, error: 'Insufficient permissions for this operation' }
466
522
  }
467
-
468
- // CIL[END chunk_id="permissions_validatesystem_1784066609"]
469
- // CIL[BEGIN chunk_id="permissions_issystemadmin_1784066609" type="function" identity="isSystemAdmin" parent="permissions_classification_1784066609"]
470
- // CIL[DOC-MACRO purpose="isSystemAdmin"]
471
- // CIL[DOC-RESPONSIBILITY responsibility="Handle isSystemAdmin"]
472
- // CIL[DOC-CONTEXT module="isSystemAdmin" layer="unknown" related_files="[]"]
473
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
474
- // CIL[DOC-MICRO logic_summary="Implements isSystemAdmin" notable_decisions="[]"]
475
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
476
- // CIL[DOC-STABILITY stability="stable"]
477
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
478
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
479
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
480
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
523
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.validateSystemMetadataPermissions permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
524
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
525
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
526
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
481
527
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
482
528
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
529
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.validateSystemMetadataPermissions:method"]
530
+
531
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.isSystemAdmin:method" type="method" identity="_PermissionEngineInternal.isSystemAdmin" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
532
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.isSystemAdmin permission method"]
533
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.isSystemAdmin behavior for permission decisions"]
534
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
535
+ // CIL[DOC-CONTRACT inputs="ctx: RequestContext" outputs="boolean" errors="none" side_effects="none"]
536
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.isSystemAdmin logic for the permissions module" notable_decisions="[]"]
537
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
538
+ // CIL[DOC-STABILITY stability="stable"]
483
539
  isSystemAdmin(ctx: RequestContext): boolean {
484
540
  return ctx.principal?.roles?.some((r: any) => r?.slug === 'system_admin' || r === 'system_admin') || false
485
541
  }
542
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.isSystemAdmin permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
543
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
544
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
545
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
546
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
547
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
548
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.isSystemAdmin:method"]
486
549
 
487
- // CIL[END chunk_id="permissions_issystemadmin_1784066609"]
488
- // CIL[BEGIN chunk_id="permissions_canaccessrecord_1784066609" type="function" identity="canAccessRecord" parent="permissions_classification_1784066609"]
489
- // CIL[DOC-MACRO purpose="canAccessRecord"]
490
- // CIL[DOC-RESPONSIBILITY responsibility="Handle canAccessRecord"]
491
- // CIL[DOC-CONTEXT module="canAccessRecord" layer="unknown" related_files="[]"]
550
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.canAccessRecord:method" type="method" identity="_PermissionEngineInternal.canAccessRecord" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
551
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.canAccessRecord permission method"]
552
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.canAccessRecord behavior for permission decisions"]
553
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
492
554
  // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
493
- // CIL[DOC-MICRO logic_summary="Implements canAccessRecord" notable_decisions="[]"]
494
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
555
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.canAccessRecord logic for the permissions module" notable_decisions="[]"]
556
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
495
557
  // CIL[DOC-STABILITY stability="stable"]
496
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
497
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
498
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
499
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
500
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
501
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
502
558
  async canAccessRecord(
503
559
  ctx: RequestContext,
504
560
  record: any,
@@ -526,22 +582,22 @@ class _PermissionEngineInternal {
526
582
  return this.canAccessFirstSurfaceRecord(ctx, record, action)
527
583
  }
528
584
  }
529
- // CIL[END chunk_id="permissions_canaccessrecord_1784066609"]
585
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.canAccessRecord permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
586
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
587
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
588
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
589
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
590
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
591
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.canAccessRecord:method"]
530
592
 
531
- // CIL[BEGIN chunk_id="permissions_canaccessfirst_1784066609" type="function" identity="canAccessFirstSurfaceRecord" parent="permissions_classification_1784066609"]
532
- // CIL[DOC-MACRO purpose="canAccessFirstSurfaceRecord"]
533
- // CIL[DOC-RESPONSIBILITY responsibility="Handle canAccessFirstSurfaceRecord"]
534
- // CIL[DOC-CONTEXT module="canAccessFirstSurfaceRecord" layer="unknown" related_files="[]"]
593
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.canAccessFirstSurfaceRecord:method" type="method" identity="_PermissionEngineInternal.canAccessFirstSurfaceRecord" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
594
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.canAccessFirstSurfaceRecord permission method"]
595
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.canAccessFirstSurfaceRecord behavior for permission decisions"]
596
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
535
597
  // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
536
- // CIL[DOC-MICRO logic_summary="Implements canAccessFirstSurfaceRecord" notable_decisions="[]"]
537
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
598
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.canAccessFirstSurfaceRecord logic for the permissions module" notable_decisions="[]"]
599
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
538
600
  // CIL[DOC-STABILITY stability="stable"]
539
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
540
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
541
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
542
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
543
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
544
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
545
601
  private async canAccessFirstSurfaceRecord(
546
602
  ctx: RequestContext,
547
603
  record: any,
@@ -593,22 +649,22 @@ class _PermissionEngineInternal {
593
649
 
594
650
  return true
595
651
  }
652
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.canAccessFirstSurfaceRecord permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
653
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
654
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
655
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
656
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
657
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
658
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.canAccessFirstSurfaceRecord:method"]
596
659
 
597
- // CIL[END chunk_id="permissions_canaccessfirst_1784066609"]
598
- // CIL[BEGIN chunk_id="permissions_saniterecorddata_1784066609" type="function" identity="sanitizeRecordData" parent="permissions_classification_1784066609"]
599
- // CIL[DOC-MACRO purpose="sanitizeRecordData"]
600
- // CIL[DOC-RESPONSIBILITY responsibility="Handle sanitizeRecordData"]
601
- // CIL[DOC-CONTEXT module="sanitizeRecordData" layer="unknown" related_files="[]"]
660
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.sanitizeRecordData:method" type="method" identity="_PermissionEngineInternal.sanitizeRecordData" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
661
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.sanitizeRecordData permission method"]
662
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.sanitizeRecordData behavior for permission decisions"]
663
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
602
664
  // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
603
- // CIL[DOC-MICRO logic_summary="Implements sanitizeRecordData" notable_decisions="[]"]
604
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
665
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.sanitizeRecordData logic for the permissions module" notable_decisions="[]"]
666
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
605
667
  // CIL[DOC-STABILITY stability="stable"]
606
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
607
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
608
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
609
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
610
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
611
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
612
668
  async sanitizeRecordData(
613
669
  ctx: RequestContext,
614
670
  record: any,
@@ -636,24 +692,22 @@ class _PermissionEngineInternal {
636
692
  return this.sanitizeFirstSurfaceRecordData(ctx, record, typeSlug || '')
637
693
  }
638
694
  }
639
- // CIL[END chunk_id="permissions_saniterecorddata_1784066609"]
640
-
641
- // CIL[BEGIN chunk_id="permissions_sanitizerecord_1784066609" type="function" identity="sanitizeFirstSurfaceRecordData" parent="permissions_classification_1784066609"]
642
- // CIL[DOC-LEARNING topic="runtime-type:generic/permissions" content="Record visibility is controlled by record.design_schema.record_permissions and each field's fields[name].permissions. The function checks the current principal role against allowed actions create/read/update/delete. If record_permissions is missing, the record is reduced to {id}."]
643
- // CIL[DOC-NOTE type="design_schema_caveat" content="Every stamped record must carry its type's record_permissions and per-field permissions or users will see empty records. Permissions are inherited from the type at creation time; updating the type does not retroactively update existing records unless migrations run."]
644
- // CIL[DOC-MACRO purpose="sanitizeFirstSurfaceRecordData"]
645
- // CIL[DOC-RESPONSIBILITY responsibility="Handle sanitizeFirstSurfaceRecordData"]
646
- // CIL[DOC-CONTEXT module="sanitizeFirstSurfaceRecordData" layer="unknown" related_files="[]"]
647
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
648
- // CIL[DOC-MICRO logic_summary="Implements sanitizeFirstSurfaceRecordData" notable_decisions="[]"]
649
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
650
- // CIL[DOC-STABILITY stability="stable"]
651
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
652
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
653
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
654
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
695
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.sanitizeRecordData permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
696
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
697
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
698
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
655
699
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
656
700
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
701
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.sanitizeRecordData:method"]
702
+
703
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.sanitizeFirstSurfaceRecordData:method" type="method" identity="_PermissionEngineInternal.sanitizeFirstSurfaceRecordData" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
704
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.sanitizeFirstSurfaceRecordData permission method"]
705
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.sanitizeFirstSurfaceRecordData behavior for permission decisions"]
706
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
707
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="May log debug information to console"]
708
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.sanitizeFirstSurfaceRecordData logic for the permissions module" notable_decisions="[]"]
709
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
710
+ // CIL[DOC-STABILITY stability="stable"]
657
711
  private async sanitizeFirstSurfaceRecordData(
658
712
  ctx: RequestContext,
659
713
  record: any,
@@ -761,22 +815,22 @@ class _PermissionEngineInternal {
761
815
 
762
816
  return sanitized
763
817
  }
818
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.sanitizeFirstSurfaceRecordData permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
819
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
820
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
821
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
822
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
823
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
824
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.sanitizeFirstSurfaceRecordData:method"]
764
825
 
765
- // CIL[END chunk_id="permissions_sanitizerecord_1784066609"]
766
- // CIL[BEGIN chunk_id="permissions_validateupdatepermissions_1784066609" type="function" identity="validateUpdatePermissions" parent="permissions_classification_1784066609"]
767
- // CIL[DOC-MACRO purpose="validateUpdatePermissions"]
768
- // CIL[DOC-RESPONSIBILITY responsibility="Handle validateUpdatePermissions"]
769
- // CIL[DOC-CONTEXT module="validateUpdatePermissions" layer="unknown" related_files="[]"]
826
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.validateUpdatePermissions:method" type="method" identity="_PermissionEngineInternal.validateUpdatePermissions" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
827
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.validateUpdatePermissions permission method"]
828
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.validateUpdatePermissions behavior for permission decisions"]
829
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
770
830
  // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
771
- // CIL[DOC-MICRO logic_summary="Implements validateUpdatePermissions" notable_decisions="[]"]
772
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
831
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.validateUpdatePermissions logic for the permissions module" notable_decisions="[]"]
832
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
773
833
  // CIL[DOC-STABILITY stability="stable"]
774
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
775
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
776
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
777
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
778
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
779
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
780
834
  async validateUpdatePermissions(
781
835
  ctx: RequestContext,
782
836
  updateData: any,
@@ -805,22 +859,22 @@ class _PermissionEngineInternal {
805
859
  return this.validateFirstSurfaceUpdatePermissions(ctx, updateData, existingRecord, typeSlug || '')
806
860
  }
807
861
  }
808
- // CIL[END chunk_id="permissions_validateupdatepermissions_1784066609"]
809
-
810
- // CIL[BEGIN chunk_id="permissions_validatefirstupdate_1784066609" type="function" identity="validateFirstSurfaceUpdatePermissions" parent="permissions_classification_1784066609"]
811
- // CIL[DOC-MACRO purpose="validateFirstSurfaceUpdatePermissions"]
812
- // CIL[DOC-RESPONSIBILITY responsibility="Handle validateFirstSurfaceUpdatePermissions"]
813
- // CIL[DOC-CONTEXT module="validateFirstSurfaceUpdatePermissions" layer="unknown" related_files="[]"]
814
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
815
- // CIL[DOC-MICRO logic_summary="Implements validateFirstSurfaceUpdatePermissions" notable_decisions="[]"]
816
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
817
- // CIL[DOC-STABILITY stability="stable"]
818
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
819
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
820
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
821
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
862
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.validateUpdatePermissions permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
863
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
864
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
865
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
822
866
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
823
867
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
868
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.validateUpdatePermissions:method"]
869
+
870
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.validateFirstSurfaceUpdatePermissions:method" type="method" identity="_PermissionEngineInternal.validateFirstSurfaceUpdatePermissions" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
871
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.validateFirstSurfaceUpdatePermissions permission method"]
872
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.validateFirstSurfaceUpdatePermissions behavior for permission decisions"]
873
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
874
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="May return error results or throw on permission resolution failure" side_effects="none"]
875
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.validateFirstSurfaceUpdatePermissions logic for the permissions module" notable_decisions="[]"]
876
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
877
+ // CIL[DOC-STABILITY stability="stable"]
824
878
  private async validateFirstSurfaceUpdatePermissions(
825
879
  ctx: RequestContext,
826
880
  updateData: any,
@@ -915,22 +969,22 @@ class _PermissionEngineInternal {
915
969
 
916
970
  return { valid: true, sanitizedData }
917
971
  }
972
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.validateFirstSurfaceUpdatePermissions permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
973
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
974
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
975
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
976
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
977
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
978
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.validateFirstSurfaceUpdatePermissions:method"]
918
979
 
919
- // CIL[END chunk_id="permissions_validatefirstupdate_1784066609"]
920
- // CIL[BEGIN chunk_id="permissions_canprincipalaccessrecord_1784066609" type="function" identity="canPrincipalAccessRecord" parent="permissions_classification_1784066609"]
921
- // CIL[DOC-MACRO purpose="canPrincipalAccessRecord"]
922
- // CIL[DOC-RESPONSIBILITY responsibility="Handle canPrincipalAccessRecord"]
923
- // CIL[DOC-CONTEXT module="canPrincipalAccessRecord" layer="unknown" related_files="[]"]
980
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.canPrincipalAccessRecord:method" type="method" identity="_PermissionEngineInternal.canPrincipalAccessRecord" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
981
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.canPrincipalAccessRecord permission method"]
982
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.canPrincipalAccessRecord behavior for permission decisions"]
983
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
924
984
  // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
925
- // CIL[DOC-MICRO logic_summary="Implements canPrincipalAccessRecord" notable_decisions="[]"]
926
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
985
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.canPrincipalAccessRecord logic for the permissions module" notable_decisions="[]"]
986
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
927
987
  // CIL[DOC-STABILITY stability="stable"]
928
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
929
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
930
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
931
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
932
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
933
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
934
988
  async canPrincipalAccessRecord(
935
989
  principal: Principal,
936
990
  record: { account_id: string; type?: string; [key: string]: any },
@@ -964,22 +1018,22 @@ class _PermissionEngineInternal {
964
1018
 
965
1019
  return false
966
1020
  }
967
- // CIL[END chunk_id="permissions_canprincipalaccessrecord_1784066609"]
1021
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.canPrincipalAccessRecord permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
1022
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
1023
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
1024
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
1025
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
1026
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1027
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.canPrincipalAccessRecord:method"]
968
1028
 
969
- // CIL[BEGIN chunk_id="permissions_checkmachinescope_1784066609" type="function" identity="checkMachineScope" parent="permissions_classification_1784066609"]
970
- // CIL[DOC-MACRO purpose="checkMachineScope"]
971
- // CIL[DOC-RESPONSIBILITY responsibility="Handle checkMachineScope"]
972
- // CIL[DOC-CONTEXT module="checkMachineScope" layer="unknown" related_files="[]"]
1029
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.checkMachineScope:method" type="method" identity="_PermissionEngineInternal.checkMachineScope" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
1030
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.checkMachineScope permission method"]
1031
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.checkMachineScope behavior for permission decisions"]
1032
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
973
1033
  // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
974
- // CIL[DOC-MICRO logic_summary="Implements checkMachineScope" notable_decisions="[]"]
975
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
1034
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.checkMachineScope logic for the permissions module" notable_decisions="[]"]
1035
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
976
1036
  // CIL[DOC-STABILITY stability="stable"]
977
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
978
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
979
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
980
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
981
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
982
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
983
1037
  private checkMachineScope(
984
1038
  principal: Principal,
985
1039
  record: any,
@@ -1002,22 +1056,22 @@ class _PermissionEngineInternal {
1002
1056
 
1003
1057
  return false
1004
1058
  }
1005
-
1006
- // CIL[END chunk_id="permissions_checkmachinescope_1784066609"]
1007
- // CIL[BEGIN chunk_id="permissions_getprincipalsummary_1784066609" type="function" identity="getPrincipalPermissionSummary" parent="permissions_classification_1784066609"]
1008
- // CIL[DOC-MACRO purpose="getPrincipalPermissionSummary"]
1009
- // CIL[DOC-RESPONSIBILITY responsibility="Handle getPrincipalPermissionSummary"]
1010
- // CIL[DOC-CONTEXT module="getPrincipalPermissionSummary" layer="unknown" related_files="[]"]
1011
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
1012
- // CIL[DOC-MICRO logic_summary="Implements getPrincipalPermissionSummary" notable_decisions="[]"]
1013
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
1014
- // CIL[DOC-STABILITY stability="stable"]
1015
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
1016
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
1017
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
1018
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
1059
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.checkMachineScope permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
1060
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
1061
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
1062
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
1019
1063
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
1020
1064
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1065
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.checkMachineScope:method"]
1066
+
1067
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.getPrincipalPermissionSummary:method" type="method" identity="_PermissionEngineInternal.getPrincipalPermissionSummary" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
1068
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal.getPrincipalPermissionSummary permission method"]
1069
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal.getPrincipalPermissionSummary behavior for permission decisions"]
1070
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
1071
+ // CIL[DOC-CONTRACT inputs="principal: Principal" outputs="object" errors="none" side_effects="none"]
1072
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal.getPrincipalPermissionSummary logic for the permissions module" notable_decisions="[]"]
1073
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
1074
+ // CIL[DOC-STABILITY stability="stable"]
1021
1075
  getPrincipalPermissionSummary(principal: Principal): object {
1022
1076
  if (principal.type === 'human') {
1023
1077
  return {
@@ -1038,28 +1092,160 @@ class _PermissionEngineInternal {
1038
1092
 
1039
1093
  return { type: 'unknown' }
1040
1094
  }
1041
- }
1042
-
1043
- // CIL[END chunk_id="permissions_getprincipalsummary_1784066609"]
1044
- // CIL[BEGIN chunk_id="permissions_exports_1784066609" type="exports" identity="exports" parent="none"]
1045
- // CIL[DOC-MACRO purpose="exports"]
1046
- // CIL[DOC-RESPONSIBILITY responsibility="Handle exports"]
1047
- // CIL[DOC-CONTEXT module="exports" layer="unknown" related_files="[]"]
1095
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal.getPrincipalPermissionSummary permission method'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
1096
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
1097
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
1098
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
1099
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
1100
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1101
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal.getPrincipalPermissionSummary:method"]
1102
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal_close:class" type="class" identity="_PermissionEngineInternal_close" parent="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal:class"]
1103
+ // CIL[DOC-MACRO purpose="Implements the _PermissionEngineInternal_close class"]
1104
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the _PermissionEngineInternal_close behavior for permission decisions"]
1105
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
1048
1106
  // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
1049
- // CIL[DOC-MICRO logic_summary="Implements exports" notable_decisions="[]"]
1050
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
1107
+ // CIL[DOC-MICRO logic_summary="Implements the _PermissionEngineInternal_close logic for the permissions module" notable_decisions="[]"]
1108
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
1051
1109
  // CIL[DOC-STABILITY stability="stable"]
1052
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
1053
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
1054
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
1055
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
1110
+ }
1111
+ // CIL[DOC-VECTOR type="context" content="purpose='Implements the _PermissionEngineInternal_close class'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
1112
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
1113
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
1114
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
1056
1115
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
1057
1116
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1117
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:_PermissionEngineInternal_close:class"]
1118
+
1119
+
1120
+
1121
+
1122
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:PermissionEngine:constant" type="constant" identity="PermissionEngine" parent="~/.framework/functions/_shared/permissions.ts"]
1123
+ // CIL[DOC-MACRO purpose="Exports the PermissionEngine convenience binding"]
1124
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the PermissionEngine behavior for permission decisions"]
1125
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
1126
+ // CIL[DOC-CONTRACT inputs="none" outputs="_PermissionEngineInternal" errors="none" side_effects="none"]
1127
+ // CIL[DOC-MICRO logic_summary="Implements the PermissionEngine logic for the permissions module" notable_decisions="[]"]
1128
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
1129
+ // CIL[DOC-STABILITY stability="stable"]
1058
1130
  export const PermissionEngine: _PermissionEngineInternal = _PermissionEngineInternal.getInstance()
1131
+ // CIL[DOC-VECTOR type="context" content="purpose='Exports the PermissionEngine convenience binding'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
1132
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
1133
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
1134
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
1135
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
1136
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1137
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:PermissionEngine:constant"]
1138
+
1139
+
1140
+
1059
1141
 
1142
+
1143
+
1144
+
1145
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:resolveFirstSurfacePermissions:constant" type="constant" identity="resolveFirstSurfacePermissions" parent="~/.framework/functions/_shared/permissions.ts"]
1146
+ // CIL[DOC-MACRO purpose="Exports the resolveFirstSurfacePermissions convenience binding"]
1147
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the resolveFirstSurfacePermissions behavior for permission decisions"]
1148
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
1149
+ // CIL[DOC-CONTRACT inputs="PermissionEngine" outputs="none" errors="none" side_effects="none"]
1150
+ // CIL[DOC-MICRO logic_summary="Implements the resolveFirstSurfacePermissions logic for the permissions module" notable_decisions="[]"]
1151
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
1152
+ // CIL[DOC-STABILITY stability="stable"]
1060
1153
  export const resolveFirstSurfacePermissions = PermissionEngine.resolveFirstSurfacePermissions.bind(PermissionEngine)
1154
+ // CIL[DOC-VECTOR type="context" content="purpose='Exports the resolveFirstSurfacePermissions convenience binding'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
1155
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
1156
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
1157
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
1158
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
1159
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1160
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:resolveFirstSurfacePermissions:constant"]
1161
+
1162
+
1163
+
1164
+
1165
+
1166
+
1167
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:isSystemAdmin:constant" type="constant" identity="isSystemAdmin" parent="~/.framework/functions/_shared/permissions.ts"]
1168
+ // CIL[DOC-MACRO purpose="Exports the isSystemAdmin convenience binding"]
1169
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the isSystemAdmin behavior for permission decisions"]
1170
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
1171
+ // CIL[DOC-CONTRACT inputs="PermissionEngine" outputs="none" errors="none" side_effects="none"]
1172
+ // CIL[DOC-MICRO logic_summary="Implements the isSystemAdmin logic for the permissions module" notable_decisions="[]"]
1173
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
1174
+ // CIL[DOC-STABILITY stability="stable"]
1061
1175
  export const isSystemAdmin = PermissionEngine.isSystemAdmin.bind(PermissionEngine)
1176
+ // CIL[DOC-VECTOR type="context" content="purpose='Exports the isSystemAdmin convenience binding'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
1177
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
1178
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
1179
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
1180
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
1181
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1182
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:isSystemAdmin:constant"]
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:canAccessRecord:constant" type="constant" identity="canAccessRecord" parent="~/.framework/functions/_shared/permissions.ts"]
1190
+ // CIL[DOC-MACRO purpose="Exports the canAccessRecord convenience binding"]
1191
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the canAccessRecord behavior for permission decisions"]
1192
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
1193
+ // CIL[DOC-CONTRACT inputs="PermissionEngine" outputs="none" errors="none" side_effects="none"]
1194
+ // CIL[DOC-MICRO logic_summary="Implements the canAccessRecord logic for the permissions module" notable_decisions="[]"]
1195
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
1196
+ // CIL[DOC-STABILITY stability="stable"]
1062
1197
  export const canAccessRecord = PermissionEngine.canAccessRecord.bind(PermissionEngine)
1198
+ // CIL[DOC-VECTOR type="context" content="purpose='Exports the canAccessRecord convenience binding'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
1199
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
1200
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
1201
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
1202
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
1203
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1204
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:canAccessRecord:constant"]
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+
1211
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:sanitizeRecordData:constant" type="constant" identity="sanitizeRecordData" parent="~/.framework/functions/_shared/permissions.ts"]
1212
+ // CIL[DOC-MACRO purpose="Exports the sanitizeRecordData convenience binding"]
1213
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the sanitizeRecordData behavior for permission decisions"]
1214
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
1215
+ // CIL[DOC-CONTRACT inputs="PermissionEngine" outputs="none" errors="none" side_effects="none"]
1216
+ // CIL[DOC-MICRO logic_summary="Implements the sanitizeRecordData logic for the permissions module" notable_decisions="[]"]
1217
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
1218
+ // CIL[DOC-STABILITY stability="stable"]
1063
1219
  export const sanitizeRecordData = PermissionEngine.sanitizeRecordData.bind(PermissionEngine)
1220
+ // CIL[DOC-VECTOR type="context" content="purpose='Exports the sanitizeRecordData convenience binding'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
1221
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
1222
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
1223
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
1224
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
1225
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1226
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:sanitizeRecordData:constant"]
1227
+
1228
+
1229
+
1230
+
1231
+
1232
+
1233
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/permissions.ts:validateUpdatePermissions:constant" type="constant" identity="validateUpdatePermissions" parent="~/.framework/functions/_shared/permissions.ts"]
1234
+ // CIL[DOC-MACRO purpose="Exports the validateUpdatePermissions convenience binding"]
1235
+ // CIL[DOC-RESPONSIBILITY responsibility="Supplies the validateUpdatePermissions behavior for permission decisions"]
1236
+ // CIL[DOC-CONTEXT module="permissions" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
1237
+ // CIL[DOC-CONTRACT inputs="PermissionEngine" outputs="none" errors="none" side_effects="none"]
1238
+ // CIL[DOC-MICRO logic_summary="Implements the validateUpdatePermissions logic for the permissions module" notable_decisions="[]"]
1239
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
1240
+ // CIL[DOC-STABILITY stability="stable"]
1064
1241
  export const validateUpdatePermissions = PermissionEngine.validateUpdatePermissions.bind(PermissionEngine)
1065
- // CIL[END chunk_id="permissions_exports_1784066609"]
1242
+ // CIL[DOC-VECTOR type="context" content="purpose='Exports the validateUpdatePermissions convenience binding'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/middleware.ts"]
1243
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
1244
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
1245
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
1246
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
1247
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1248
+ // CIL[END stable_id="~/.framework/functions/_shared/permissions.ts:validateUpdatePermissions:constant"]
1249
+
1250
+
1251
+