spine-framework 0.3.145 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +76 -0
- package/.framework/.spine-manifest.json +19 -0
- package/.framework/cli/commands/agents.ts +61 -33
- package/.framework/cli/commands/auth.ts +60 -28
- package/.framework/cli/commands/create-app.ts +212 -80
- package/.framework/cli/commands/dev.ts +184 -68
- package/.framework/cli/commands/doctor.ts +324 -152
- package/.framework/cli/commands/generate.ts +119 -68
- package/.framework/cli/commands/init.ts +141 -242
- package/.framework/cli/commands/install-app.ts +1336 -314
- package/.framework/cli/commands/items.ts +31 -29
- package/.framework/cli/commands/migrate.ts +299 -156
- package/.framework/cli/commands/migrations.ts +62 -30
- package/.framework/cli/commands/pipelines.ts +31 -29
- package/.framework/cli/commands/status.ts +105 -45
- package/.framework/cli/commands/system.ts +47 -42
- package/.framework/cli/commands/test.ts +161 -102
- package/.framework/cli/commands/upgrade.ts +260 -0
- package/.framework/cli/commands/validate-app.ts +517 -161
- package/.framework/cli/context.ts +117 -85
- package/.framework/cli/env-loader.ts +74 -43
- package/.framework/cli/index.ts +70 -46
- package/.framework/cli/lib/project-files.ts +404 -0
- package/.framework/docs/guides/testing-guide.md +1 -1
- package/.framework/docs/runtime-types.md +72 -72
- package/.framework/functions/_shared/access.ts +84 -0
- package/.framework/functions/_shared/agent-runner.ts +5051 -1026
- package/.framework/functions/_shared/app-manifest.ts +214 -94
- package/.framework/functions/_shared/ast.ts +214 -0
- package/.framework/functions/_shared/audit.ts +91 -55
- package/.framework/functions/_shared/cil.ts +368 -127
- package/.framework/functions/_shared/db.ts +337 -68
- package/.framework/functions/_shared/funnel.ts +228 -0
- package/.framework/functions/_shared/geo.ts +105 -0
- package/.framework/functions/_shared/hash-api-key.ts +94 -17
- package/.framework/functions/_shared/index.ts +22 -224
- package/.framework/functions/_shared/kb.ts +832 -58
- package/.framework/functions/_shared/llm.ts +118 -18
- package/.framework/functions/_shared/logging.ts +317 -19
- package/.framework/functions/_shared/middleware.ts +701 -131
- package/.framework/functions/_shared/notify.ts +70 -0
- package/.framework/functions/_shared/outcomes.ts +34 -19
- package/.framework/functions/_shared/permissions.ts +501 -315
- package/.framework/functions/_shared/pipeline-runner.ts +704 -155
- package/.framework/functions/_shared/principal.ts +436 -263
- package/.framework/functions/_shared/rate-limit.ts +233 -0
- package/.framework/functions/_shared/resolve-credentials.ts +86 -19
- package/.framework/functions/_shared/resolve-ids.ts +203 -139
- package/.framework/functions/_shared/retry-deliveries.ts +51 -16
- package/.framework/functions/_shared/schema-utils.ts +602 -521
- package/.framework/functions/_shared/security.ts +345 -0
- package/.framework/functions/_shared/testing.ts +197 -172
- package/.framework/functions/_shared/tracing.ts +351 -21
- package/.framework/functions/_shared/trigger-engine.ts +425 -136
- package/.framework/functions/_shared/webhook-registration.ts +71 -70
- package/.framework/functions/_shared/webhook-registry.ts +126 -83
- package/.framework/functions/account-nodes.ts +30 -30
- package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
- package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
- package/.framework/functions/adapters/openai-outbound.ts +15 -16
- package/.framework/functions/admin-data.ts +596 -173
- package/.framework/functions/admin-funnel.ts +64 -60
- package/.framework/functions/admin-install-funnel.ts +84 -66
- package/.framework/functions/admin-signals.ts +69 -51
- package/.framework/functions/ai-agents.ts +431 -106
- package/.framework/functions/ai-interactions.ts +186 -112
- package/.framework/functions/api-keys.ts +107 -107
- package/.framework/functions/apps.ts +154 -136
- package/.framework/functions/auth.ts +83 -65
- package/.framework/functions/cil-agent-ingest.ts +189 -232
- package/.framework/functions/cil-agent.ts +433 -177
- package/.framework/functions/cil-callmap.ts +642 -430
- package/.framework/functions/cil-config.ts +139 -135
- package/.framework/functions/cil-context.ts +214 -127
- package/.framework/functions/cil-doc.ts +587 -458
- package/.framework/functions/cil-embeddings.ts +453 -364
- package/.framework/functions/cil-graph.ts +427 -142
- package/.framework/functions/cil-ingest.ts +1418 -1154
- package/.framework/functions/cil-pipeline.ts +276 -21
- package/.framework/functions/cil-project.ts +659 -132
- package/.framework/functions/cil-validate.ts +198 -164
- package/.framework/functions/debug-auth.ts +57 -55
- package/.framework/functions/deliveries.ts +80 -21
- package/.framework/functions/embeddings.ts +1023 -318
- package/.framework/functions/eval-harness.ts +146 -108
- package/.framework/functions/integration-outbound.ts +205 -75
- package/.framework/functions/integration-routes.ts +128 -23
- package/.framework/functions/integrations.ts +125 -100
- package/.framework/functions/invites.ts +1095 -460
- package/.framework/functions/item-progress.ts +158 -102
- package/.framework/functions/kb.ts +34 -10
- package/.framework/functions/logs.ts +133 -133
- package/.framework/functions/observability.ts +152 -122
- package/.framework/functions/pipeline-executions.ts +147 -132
- package/.framework/functions/pipelines.ts +134 -119
- package/.framework/functions/prompt-configs.ts +96 -80
- package/.framework/functions/roles.ts +112 -82
- package/.framework/functions/security.ts +450 -0
- package/.framework/functions/system-cron.ts +117 -80
- package/.framework/functions/system.ts +158 -98
- package/.framework/functions/tests.ts +29 -29
- package/.framework/functions/timers.ts +94 -95
- package/.framework/functions/trigger-scheduler.ts +10 -0
- package/.framework/functions/triggers.ts +179 -149
- package/.framework/functions/types.ts +137 -125
- package/.framework/mcp/index.ts +133 -0
- package/.framework/mcp/load-env.ts +60 -0
- package/.framework/mcp/shared/app-manifest.ts +275 -0
- package/.framework/mcp/shared/db.ts +477 -0
- package/.framework/mcp/shared/kb.ts +118 -0
- package/.framework/mcp/tools/architect.ts +431 -0
- package/.framework/mcp/tools/cil/context.ts +345 -0
- package/.framework/mcp/tools/cil/graph.ts +242 -0
- package/.framework/mcp/tools/cil/ingest.ts +1217 -0
- package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
- package/.framework/mcp/tools/cil/pipeline.ts +767 -0
- package/.framework/mcp/tools/cil/project.ts +791 -0
- package/.framework/mcp/tools/cil/retrieval.ts +336 -0
- package/.framework/mcp/tools/cil/search-core.ts +454 -0
- package/.framework/mcp/tools/cil/search.ts +97 -0
- package/.framework/mcp/tools/cil/suggest.ts +186 -0
- package/.framework/mcp/tools/cil/validate.ts +1369 -0
- package/.framework/mcp/tools/kb/delete.ts +139 -0
- package/.framework/mcp/tools/kb/index.ts +52 -0
- package/.framework/mcp/tools/kb/ingest.ts +84 -0
- package/.framework/mcp/tools/kb/list-types.ts +102 -0
- package/.framework/mcp/tools/kb/publish.ts +100 -0
- package/.framework/mcp/tools/kb/reindex.ts +86 -0
- package/.framework/mcp/tools/kb/revoke.ts +85 -0
- package/.framework/mcp/tools/kb/search.ts +101 -0
- package/.framework/mcp/tools/kb/upsert.ts +125 -0
- package/.framework/mcp/tools/observability.ts +510 -0
- package/.framework/migrations/001_core_schema.sql +15 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
- package/.framework/migrations/003_core_system_data.sql +16 -1
- package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
- package/.framework/migrations/005_core_observability.sql +17 -1
- package/.framework/migrations/006_security_hardening_rls.sql +15 -0
- package/.framework/migrations/007_kb_article_list.sql +17 -1
- package/.framework/migrations/008_items_target.sql +15 -0
- package/.framework/migrations/009_roles_slug_unique.sql +15 -0
- package/.framework/migrations/010_auth_user_trigger.sql +15 -0
- package/.framework/migrations/011_spine_system_account.sql +16 -0
- package/.framework/migrations/012_service_role_grants.sql +16 -0
- package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
- package/.framework/migrations/014_apps_required_roles.sql +16 -0
- package/.framework/migrations/015_types_kind_slug_unique.sql +15 -0
- package/.framework/migrations/016_cil_types.sql +281 -0
- package/.framework/migrations/017_cil_stable_ids.sql +37 -0
- package/.framework/migrations/018_runtime_tables.sql +129 -0
- package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
- package/.framework/migrations/020_schema_reconciliation.sql +67 -0
- package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
- package/.framework/migrations/032_cil_status_migration.sql +73 -0
- package/.framework/migrations/033_cil_versioning.sql +73 -0
- package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
- package/.framework/migrations/035_rate_limits.sql +55 -0
- package/.framework/migrations/036_demo_record_flags.sql +72 -0
- package/.framework/migrations/037_kb_types_canonical.sql +244 -0
- package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
- package/.framework/migrations/042_registration_hierarchy.sql +309 -0
- package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
- package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
- package/.framework/migrations/045_security_critical_rls.sql +139 -0
- package/.framework/migrations/046_security_missing_rls.sql +79 -0
- package/.framework/migrations/047_people_updated_by.sql +27 -0
- package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
- package/.framework/migrations/049_security_blocklist.sql +148 -0
- package/.framework/migrations/050_notifications.sql +49 -0
- package/.framework/migrations/051_message_agent_fields.sql +74 -0
- package/.framework/migrations/052_registration_security.sql +421 -0
- package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
- package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
- package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
- package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
- package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
- package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
- package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
- package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
- package/.framework/migrations/061_fk_dedup.sql +32 -0
- package/.framework/public/spine-logo.svg +10 -3
- package/.framework/scripts/app-install-cli.ts +190 -93
- package/.framework/scripts/assemble-frontend.sh +127 -44
- package/.framework/scripts/assemble-functions.sh +128 -30
- package/.framework/scripts/boundary-check.sh +6 -2
- package/.framework/scripts/build-manifest.sh +24 -68
- package/.framework/scripts/check-core-integrity.sh +15 -76
- package/.framework/scripts/checksum-manifest.mts +343 -0
- package/.framework/scripts/cil-migrate-markers.ts +403 -0
- package/.framework/scripts/fix-cil-markers.mjs +176 -0
- package/.framework/scripts/verify-integrity.sh +21 -57
- package/.framework/scripts/verify-manifest.mts +305 -0
- package/.framework/seeds/types/funnel_signal_use.json +74 -21
- package/.framework/seeds/types/spine_instance.json +73 -21
- package/.framework/src/App.tsx +118 -72
- package/.framework/src/apps/admin/index.tsx +855 -58
- package/.framework/src/components/AppWrapper.tsx +43 -45
- package/.framework/src/components/CustomAppLoader.tsx +160 -116
- package/.framework/src/components/admin/AdminListPage.tsx +46 -44
- package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
- package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
- package/.framework/src/components/admin/PageInstructions.tsx +98 -2
- package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
- package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
- package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
- package/.framework/src/components/app-sidebar.tsx +42 -45
- package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
- package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
- package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
- package/.framework/src/components/kb/KBArticleList.tsx +251 -10
- package/.framework/src/components/layout/AppShell.tsx +51 -45
- package/.framework/src/components/layout/Header.tsx +42 -43
- package/.framework/src/components/layout/Layout.tsx +46 -46
- package/.framework/src/components/layout/Sidebar.tsx +196 -96
- package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
- package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
- package/.framework/src/components/runtime/DataFilters.tsx +49 -74
- package/.framework/src/components/runtime/DataHeader.tsx +53 -32
- package/.framework/src/components/runtime/DataListPage.tsx +51 -155
- package/.framework/src/components/runtime/DataStats.tsx +66 -44
- package/.framework/src/components/runtime/DataTable.tsx +49 -149
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
- package/.framework/src/components/runtime/index.ts +119 -16
- package/.framework/src/components/search-form.tsx +46 -29
- package/.framework/src/components/shared/AgentView.tsx +65 -48
- package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
- package/.framework/src/components/shared/InviteManager.tsx +207 -97
- package/.framework/src/components/shared/MemberList.tsx +97 -0
- package/.framework/src/components/shared/SchemaFields.tsx +107 -86
- package/.framework/src/components/ui/DataTable.tsx +80 -68
- package/.framework/src/components/ui/Form.tsx +157 -146
- package/.framework/src/components/ui/ItemCard.tsx +74 -67
- package/.framework/src/components/ui/ItemListView.tsx +73 -68
- package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
- package/.framework/src/components/ui/Modal.tsx +78 -68
- package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
- package/.framework/src/components/ui/accordion.tsx +85 -86
- package/.framework/src/components/ui/alert-dialog.tsx +197 -184
- package/.framework/src/components/ui/alert.tsx +105 -94
- package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
- package/.framework/src/components/ui/avatar.tsx +122 -107
- package/.framework/src/components/ui/badge.tsx +60 -55
- package/.framework/src/components/ui/breadcrumb.tsx +127 -128
- package/.framework/src/components/ui/button-group.tsx +86 -72
- package/.framework/src/components/ui/button.tsx +71 -50
- package/.framework/src/components/ui/calendar.tsx +72 -57
- package/.framework/src/components/ui/card.tsx +136 -129
- package/.framework/src/components/ui/carousel.tsx +226 -107
- package/.framework/src/components/ui/chart.tsx +252 -147
- package/.framework/src/components/ui/checkbox.tsx +43 -44
- package/.framework/src/components/ui/collapsible.tsx +86 -71
- package/.framework/src/components/ui/combobox.tsx +282 -249
- package/.framework/src/components/ui/command.tsx +158 -146
- package/.framework/src/components/ui/context-menu.tsx +239 -240
- package/.framework/src/components/ui/dialog.tsx +174 -157
- package/.framework/src/components/ui/direction.tsx +72 -56
- package/.framework/src/components/ui/drawer.tsx +168 -169
- package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
- package/.framework/src/components/ui/empty.tsx +131 -120
- package/.framework/src/components/ui/field.tsx +205 -173
- package/.framework/src/components/ui/hover-card.tsx +71 -72
- package/.framework/src/components/ui/input-group.tsx +148 -133
- package/.framework/src/components/ui/input-otp.tsx +99 -86
- package/.framework/src/components/ui/input.tsx +43 -41
- package/.framework/src/components/ui/item.tsx +207 -185
- package/.framework/src/components/ui/kbd.tsx +57 -56
- package/.framework/src/components/ui/label.tsx +45 -41
- package/.framework/src/components/ui/menubar.tsx +268 -236
- package/.framework/src/components/ui/native-select.tsx +85 -86
- package/.framework/src/components/ui/navigation-menu.tsx +166 -156
- package/.framework/src/components/ui/pagination.tsx +131 -141
- package/.framework/src/components/ui/popover.tsx +125 -128
- package/.framework/src/components/ui/progress.tsx +47 -44
- package/.framework/src/components/ui/radio-group.tsx +60 -55
- package/.framework/src/components/ui/resizable.tsx +85 -72
- package/.framework/src/components/ui/scroll-area.tsx +57 -58
- package/.framework/src/components/ui/select.tsx +182 -169
- package/.framework/src/components/ui/separator.tsx +42 -43
- package/.framework/src/components/ui/sheet.tsx +170 -159
- package/.framework/src/components/ui/sidebar.tsx +395 -398
- package/.framework/src/components/ui/skeleton.tsx +42 -43
- package/.framework/src/components/ui/slider.tsx +61 -44
- package/.framework/src/components/ui/sonner.tsx +44 -44
- package/.framework/src/components/ui/spinner.tsx +47 -42
- package/.framework/src/components/ui/switch.tsx +56 -42
- package/.framework/src/components/ui/table-primitives.tsx +272 -132
- package/.framework/src/components/ui/table.tsx +140 -142
- package/.framework/src/components/ui/tabs.tsx +110 -93
- package/.framework/src/components/ui/textarea.tsx +43 -44
- package/.framework/src/components/ui/toggle-group.tsx +87 -71
- package/.framework/src/components/ui/toggle.tsx +56 -56
- package/.framework/src/components/ui/tooltip.tsx +99 -85
- package/.framework/src/contexts/AppContext.tsx +166 -114
- package/.framework/src/contexts/AuthContext.tsx +232 -137
- package/.framework/src/hooks/use-mobile.ts +43 -44
- package/.framework/src/hooks/useApi.ts +185 -172
- package/.framework/src/hooks/useAppPath.ts +31 -29
- package/.framework/src/hooks/useApps.ts +77 -42
- package/.framework/src/hooks/useEntityList.ts +66 -29
- package/.framework/src/hooks/useEntityRecord.ts +76 -32
- package/.framework/src/hooks/useForm.ts +62 -30
- package/.framework/src/hooks/useListSchema.ts +60 -43
- package/.framework/src/hooks/useSchemaRecord.ts +115 -95
- package/.framework/src/lib/api.ts +258 -134
- package/.framework/src/lib/registration.ts +181 -0
- package/.framework/src/lib/supabase.ts +118 -81
- package/.framework/src/lib/utils.ts +266 -266
- package/.framework/src/main.tsx +43 -44
- package/.framework/src/pages/DashboardPage.tsx +44 -43
- package/.framework/src/pages/NoAppPage.tsx +50 -0
- package/.framework/src/pages/NotFoundPage.tsx +32 -29
- package/.framework/src/pages/SetupPage.tsx +34 -33
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
- package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
- package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
- package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
- package/.framework/src/pages/admin/AppsPage.tsx +45 -42
- package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
- package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
- package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
- package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
- package/.framework/src/pages/admin/LogsPage.tsx +87 -137
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
- package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
- package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
- package/.framework/src/pages/admin/RolesPage.tsx +47 -164
- package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
- package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
- package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
- package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
- package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
- package/.framework/src/pages/admin/TimersPage.tsx +44 -42
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
- package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
- package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
- package/.framework/src/pages/admin/TypesPage.tsx +45 -42
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
- package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
- package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
- package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
- package/.framework/src/pages/auth/LoginPage.tsx +38 -32
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
- package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
- package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
- package/.framework/src/types/auth.ts +101 -93
- package/.framework/src/types/types.ts +283 -262
- package/.framework/templates/project.json +87 -0
- package/.framework/templates/spine.config.neutral.json +7 -0
- package/.framework/tests/api/api-surface.test.ts +381 -0
- package/.framework/tests/fixtures/seed.ts +427 -0
- package/.framework/tests/fixtures/teardown.ts +228 -0
- package/.framework/tests/reporter.ts +351 -0
- package/.framework/tests/setup.ts +135 -0
- package/.framework/tests/ui/ui-sweep.ts +278 -0
- package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
- package/.framework/tests/unit/agent-runner.test.ts +2389 -0
- package/.framework/tests/unit/ai-interactions.test.ts +81 -0
- package/.framework/tests/unit/app-manifest.test.ts +359 -0
- package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
- package/.framework/tests/unit/cil-determinism.test.ts +85 -0
- package/.framework/tests/unit/core-isolation.test.ts +153 -0
- package/.framework/tests/unit/funnel-signals.test.ts +135 -0
- package/.framework/tests/unit/install-app.test.ts +1759 -0
- package/.framework/tests/unit/invites-security.test.ts +572 -0
- package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
- package/.framework/tests/unit/kb-search.test.ts +119 -0
- package/.framework/tests/unit/migrate.test.ts +509 -0
- package/.framework/tests/unit/notify.test.ts +136 -0
- package/.framework/tests/unit/permissions.test.ts +269 -0
- package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
- package/.framework/tests/unit/principal-cache.test.ts +138 -0
- package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
- package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
- package/.framework/tests/unit/schema-utils.test.ts +225 -0
- package/.framework/tests/unit/trigger-engine.test.ts +513 -0
- package/.framework/tests/unit/validate-app.test.ts +527 -0
- package/README.md +34 -3
- package/bin/spine-framework.cjs +1 -0
- package/config/tailwind.config.cjs +7 -0
- package/config/tsconfig.functions.json +42 -0
- package/config/tsconfig.json +37 -9
- package/config/vite.config.ts +31 -2
- package/netlify.toml +31 -3
- package/package.json +46 -29
- package/scripts/assemble-frontend.sh +127 -44
- package/scripts/assemble-functions.sh +127 -29
- package/scripts/boundary-check.sh +6 -2
- package/scripts/build-manifest.sh +24 -68
- package/scripts/checksum-manifest.mts +345 -0
- package/scripts/dev-clean.sh +86 -0
- package/scripts/dev-netlify.sh +49 -0
- package/scripts/netlify-dev-wrapper.sh +2 -0
- package/scripts/verify-install.ts +358 -0
- package/scripts/verify-integrity.sh +21 -57
- package/scripts/verify-manifest.mts +305 -0
- package/templates/project/gitignore +45 -0
- package/{config → templates/project}/package-lock.json +22335 -9366
- package/vitest.config.ts +46 -0
- package/.framework/public/spine.config.json +0 -91
- package/config/deno.lock +0 -108
- package/config/tsconfig.node.tsbuildinfo +0 -1
- package/config/tsconfig.tsbuildinfo +0 -1
- package/config/vite.config.d.ts +0 -2
- package/custom/.devin/AGENT.md +0 -357
- package/custom/.devin/skills/install-app/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
- package/custom/.devin/workflows/app-install.yaml +0 -83
- package/custom/README.md +0 -79
- package/docs/README.md +0 -15
- package/scripts/app-install-cli.ts +0 -286
- package/scripts/check-core-integrity.sh +0 -82
- package/scripts/ingest-chunks.cjs +0 -202
- package/scripts/kb-chunk-parser.cjs +0 -312
- package/scripts/kb-chunk-parser.ts +0 -330
- package/scripts/kb-ingest-docs.ts +0 -203
- package/scripts/load-test-app-install.ts +0 -484
- package/scripts/test-login.js +0 -33
- package/spine.config.json +0 -91
|
@@ -1,38 +1,33 @@
|
|
|
1
|
-
// CIL[BEGIN
|
|
2
|
-
// CIL[DOC-MACRO purpose="
|
|
3
|
-
// CIL[DOC-RESPONSIBILITY responsibility="
|
|
4
|
-
// CIL[DOC-CONTEXT module="
|
|
5
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="
|
|
6
|
-
// CIL[DOC-MICRO logic_summary="
|
|
7
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.
|
|
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="
|
|
26
|
-
|
|
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
|
-
|
|
45
|
-
// CIL[
|
|
46
|
-
// CIL[
|
|
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
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
// CIL[
|
|
64
|
-
// CIL[DOC-
|
|
65
|
-
// CIL[DOC-
|
|
66
|
-
// CIL[DOC-
|
|
67
|
-
// CIL[DOC-
|
|
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
|
-
|
|
70
|
-
// CIL[DOC-VECTOR type="
|
|
71
|
-
// CIL[DOC-VECTOR type="
|
|
72
|
-
// CIL[DOC-VECTOR type="
|
|
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[
|
|
127
|
-
|
|
128
|
-
// CIL[DOC-
|
|
129
|
-
// CIL[DOC-
|
|
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
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
.
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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[
|
|
243
|
-
|
|
244
|
-
// CIL[DOC-
|
|
245
|
-
// CIL[DOC-
|
|
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[
|
|
273
|
-
|
|
274
|
-
// CIL[DOC-
|
|
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[
|
|
341
|
-
|
|
342
|
-
// CIL[DOC-
|
|
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[
|
|
364
|
-
|
|
365
|
-
// CIL[DOC-
|
|
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[
|
|
412
|
-
|
|
413
|
-
// CIL[DOC-
|
|
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[
|
|
446
|
-
|
|
447
|
-
// CIL[DOC-
|
|
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[
|
|
469
|
-
|
|
470
|
-
// CIL[DOC-
|
|
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[
|
|
488
|
-
|
|
489
|
-
// CIL[DOC-
|
|
490
|
-
// CIL[DOC-
|
|
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.
|
|
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[
|
|
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
|
-
|
|
532
|
-
// CIL[DOC-MACRO purpose="canAccessFirstSurfaceRecord"]
|
|
533
|
-
// CIL[DOC-RESPONSIBILITY responsibility="
|
|
534
|
-
// CIL[DOC-CONTEXT module="
|
|
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.
|
|
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[
|
|
598
|
-
|
|
599
|
-
// CIL[DOC-
|
|
600
|
-
// CIL[DOC-
|
|
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.
|
|
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[
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
// CIL[DOC-
|
|
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[
|
|
766
|
-
|
|
767
|
-
// CIL[DOC-
|
|
768
|
-
// CIL[DOC-
|
|
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.
|
|
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[
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
// CIL[DOC-
|
|
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[
|
|
920
|
-
|
|
921
|
-
// CIL[DOC-
|
|
922
|
-
// CIL[DOC-
|
|
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.
|
|
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[
|
|
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
|
-
|
|
970
|
-
// CIL[DOC-MACRO purpose="checkMachineScope"]
|
|
971
|
-
// CIL[DOC-RESPONSIBILITY responsibility="
|
|
972
|
-
// CIL[DOC-CONTEXT module="
|
|
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.
|
|
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[
|
|
1007
|
-
|
|
1008
|
-
// CIL[DOC-
|
|
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[
|
|
1044
|
-
// CIL[
|
|
1045
|
-
// CIL[DOC-
|
|
1046
|
-
// CIL[DOC-
|
|
1047
|
-
// CIL[
|
|
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
|
|
1050
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.
|
|
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
|
-
|
|
1053
|
-
// CIL[DOC-VECTOR type="
|
|
1054
|
-
// CIL[DOC-VECTOR type="
|
|
1055
|
-
// CIL[DOC-VECTOR type="
|
|
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[
|
|
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
|
+
|