spine-framework 0.3.144 → 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 +20 -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,3 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module trigger-engine
|
|
3
|
+
* @audience internal
|
|
4
|
+
* @layer shared-core
|
|
5
|
+
* @stability stable
|
|
6
|
+
*
|
|
7
|
+
* This module serves as the trigger engine for processing events within the system, coordinating various actions based on incoming triggers. It integrates with core middleware and database functionalities to ensure that events are handled efficiently and securely.
|
|
8
|
+
*
|
|
9
|
+
* INVARIANT: All triggers must be validated before processing to maintain system integrity.
|
|
10
|
+
*
|
|
11
|
+
* @seeAlso middleware.ts (provides core context for event handling).
|
|
12
|
+
* @seeAlso db.ts (handles database interactions necessary for trigger processing).
|
|
13
|
+
* @seeAlso audit.ts (ensures auditing of actions taken during event processing).
|
|
14
|
+
* @seeAlso pipeline-runner.ts (executes the defined processing pipeline for triggers).
|
|
15
|
+
*
|
|
16
|
+
* @cil-generated
|
|
17
|
+
*/
|
|
18
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/trigger-engine.ts"]
|
|
19
|
+
// CIL[DOC-MACRO purpose="This module serves as the trigger engine for processing events within the system, coordinating various actions based on incoming triggers."]
|
|
20
|
+
// CIL[DOC-RESPONSIBILITY responsibility="This module serves as the trigger engine for processing events within the system, coordinating various actions based on incoming triggers. It integrates with core middleware and database functionalities to ensure that events are handled efficiently and securely. INVARIANT: All triggers must be validated before processing to maintain system integrity."]
|
|
21
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="shared-core" related_files="middleware.ts (provides core context for event handling).,db.ts (handles database interactions necessary for trigger processing).,audit.ts (ensures auditing of actions taken during event processing).,pipeline-runner.ts (executes the defined processing pipeline for triggers)."]
|
|
22
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
23
|
+
// CIL[DOC-MICRO logic_summary="This module serves as the trigger engine for processing events within the system, coordinating various actions based on incoming triggers. It integrates with core middleware and database functionalities to ensure that events are handled efficiently and securely. INVARIANT: All triggers must be validated before processing to maintain system integrity." notable_decisions="none"]
|
|
24
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
25
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
26
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
27
|
+
|
|
1
28
|
|
|
2
29
|
|
|
3
30
|
|
|
@@ -7,40 +34,117 @@
|
|
|
7
34
|
|
|
8
35
|
|
|
9
36
|
|
|
10
|
-
// CIL[BEGIN chunk_id="triggerengine_imports_1784020784" type="module_header" identity="imports" parent="none"]
|
|
11
|
-
// CIL[DOC-MACRO purpose="Import dependencies for trigger engine functionality"]
|
|
12
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Import context, database, audit, and pipeline modules"]
|
|
13
|
-
// CIL[DOC-CONTEXT module="trigger-engine" layer="shared" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
|
|
14
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="CoreContext, adminDb, emitAudit, runPipeline" errors="none" side_effects="none"]
|
|
15
|
-
// CIL[DOC-MICRO logic_summary="Import required modules for trigger processing and execution" notable_decisions="[]"]
|
|
16
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
17
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
18
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
19
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
|
|
20
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
21
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
22
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
23
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
24
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
25
37
|
import { CoreContext } from './middleware'
|
|
26
38
|
import { adminDb } from './db'
|
|
27
39
|
import { emitAudit } from './audit'
|
|
28
40
|
import { runPipeline } from './pipeline-runner'
|
|
29
|
-
// CIL[END
|
|
30
|
-
// CIL[
|
|
31
|
-
// CIL[DOC-
|
|
32
|
-
// CIL[DOC-
|
|
33
|
-
// CIL[DOC-
|
|
34
|
-
// CIL[DOC-
|
|
35
|
-
// CIL[DOC-
|
|
36
|
-
|
|
41
|
+
// CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:module_header:module_header"]
|
|
42
|
+
// CIL[DOC-VECTOR type="context" content="purpose='This module serves as the trigger engine for processing events within the system, coordinating various actions based on incoming triggers.'; No verified external callers" status="ready"]
|
|
43
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
44
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
45
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
46
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
47
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
48
|
+
|
|
49
|
+
// Callers pass the runtime table name (plural); seeded triggers and the
|
|
50
|
+
// EventType union use the singular kind. Mirrors ENTITY_TO_KIND in admin-data.
|
|
51
|
+
// CIL[DOC-MACRO purpose="ENTITY_EVENT_NAME is a constant that maps various entity types to their corresponding singular names."]
|
|
52
|
+
// CIL[DOC-RESPONSIBILITY responsibility="ENTITY_EVENT_NAME is a constant that maps various entity types to their corresponding singular names. It exists to provide a standardized reference for entity names throughout the module."]
|
|
53
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
|
|
54
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
55
|
+
// CIL[DOC-MICRO logic_summary="ENTITY_EVENT_NAME is a constant that maps various entity types to their corresponding singular names. It exists to provide a standardized reference for entity names throughout the module." notable_decisions="none"]
|
|
56
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
57
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
58
|
+
/**
|
|
59
|
+
* ENTITY_EVENT_NAME is a constant that maps various entity types to their corresponding singular names. It exists to provide a standardized reference for entity names throughout the module.
|
|
60
|
+
*
|
|
61
|
+
* @sideEffects none
|
|
62
|
+
* @stability stable
|
|
63
|
+
* @cil-generated
|
|
64
|
+
*/
|
|
65
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:entity_event_name:constant" type="constant" identity="ENTITY_EVENT_NAME" parent="~/.framework/functions/_shared/trigger-engine.ts"]
|
|
66
|
+
// CIL[DOC-MACRO purpose="ENTITY_EVENT_NAME constant"]
|
|
67
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the ENTITY_EVENT_NAME constant."]
|
|
68
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
|
|
69
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
70
|
+
// CIL[DOC-MICRO logic_summary="Implements the ENTITY_EVENT_NAME constant." notable_decisions="[]"]
|
|
71
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
72
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
73
|
+
const ENTITY_EVENT_NAME: Record<string, string> = {
|
|
74
|
+
accounts: 'account',
|
|
75
|
+
people: 'person',
|
|
76
|
+
items: 'item',
|
|
77
|
+
threads: 'thread',
|
|
78
|
+
messages: 'message',
|
|
79
|
+
links: 'link',
|
|
80
|
+
attachments: 'attachment',
|
|
81
|
+
watchers: 'watcher',
|
|
82
|
+
item_progress: 'item_progress',
|
|
83
|
+
}
|
|
84
|
+
// CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:entity_event_name:constant"]
|
|
85
|
+
// CIL[DOC-VECTOR type="context" content="purpose='ENTITY_EVENT_NAME is a constant that maps various entity types to their corresponding singular names.'; No verified external callers" status="ready"]
|
|
86
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
87
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
88
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
89
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
90
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
91
|
+
// CIL[DOC-MACRO purpose="This function retrieves the event name associated with a given entity type, defaulting to the entity type itself if no mapping exists."]
|
|
92
|
+
// CIL[DOC-RESPONSIBILITY responsibility="This function retrieves the event name associated with a given entity type, defaulting to the entity type itself if no mapping exists. It exists to provide a consistent way to reference event names throughout the module."]
|
|
93
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
|
|
94
|
+
// CIL[DOC-CONTRACT inputs="entityType: string (required) — the type of the entity for which to retrieve the event name." outputs="string — the event name corresponding to the entity type or the entity type itself if no mapping exists." errors="none" side_effects="none"]
|
|
95
|
+
// CIL[DOC-MICRO logic_summary="This function retrieves the event name associated with a given entity type, defaulting to the entity type itself if no mapping exists. It exists to provide a consistent way to reference event names throughout the module." notable_decisions="none"]
|
|
96
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
97
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
98
|
+
/**
|
|
99
|
+
* This function retrieves the event name associated with a given entity type, defaulting to the entity type itself if no mapping exists. It exists to provide a consistent way to reference event names throughout the module.
|
|
100
|
+
*
|
|
101
|
+
* @inputSpec
|
|
102
|
+
* entityType: string (required) — the type of the entity for which to retrieve the event name.
|
|
103
|
+
* @outputSpec string — the event name corresponding to the entity type or the entity type itself if no mapping exists.
|
|
104
|
+
* @sideEffects none
|
|
105
|
+
* @stability stable
|
|
106
|
+
* @cil-generated
|
|
107
|
+
*/
|
|
108
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:eventnamefor:constant" type="constant" identity="eventNameFor" parent="~/.framework/functions/_shared/trigger-engine.ts"]
|
|
109
|
+
// CIL[DOC-MACRO purpose="eventNameFor constant"]
|
|
110
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the eventNameFor constant."]
|
|
111
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
|
|
112
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
113
|
+
// CIL[DOC-MICRO logic_summary="Implements the eventNameFor constant." notable_decisions="[]"]
|
|
114
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
37
115
|
// CIL[DOC-STABILITY stability="stable"]
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// CIL[
|
|
41
|
-
// CIL[DOC-VECTOR type="
|
|
116
|
+
const eventNameFor = (entityType: string) =>
|
|
117
|
+
ENTITY_EVENT_NAME[entityType] ?? entityType
|
|
118
|
+
// CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:eventnamefor:constant"]
|
|
119
|
+
// CIL[DOC-VECTOR type="context" content="purpose='This function retrieves the event name associated with a given entity type, defaulting to the entity type itself if no mapping exists.'; No verified external callers" status="ready"]
|
|
120
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
121
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
122
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
42
123
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
43
124
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
125
|
+
|
|
126
|
+
// CIL[DOC-MACRO purpose="EventType defines a set of string literals representing various event types related to items, accounts, persons, threads, messages, attachments, and links."]
|
|
127
|
+
// CIL[DOC-RESPONSIBILITY responsibility="EventType defines a set of string literals representing various event types related to items, accounts, persons, threads, messages, attachments, and links. It exists to provide a consistent and type-safe way to handle different events within the trigger engine module."]
|
|
128
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
|
|
129
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
130
|
+
// CIL[DOC-MICRO logic_summary="EventType defines a set of string literals representing various event types related to items, accounts, persons, threads, messages, attachments, and links. It exists to provide a consistent and type-safe way to handle different events within the trigger engine module." notable_decisions="none"]
|
|
131
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
132
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
133
|
+
/**
|
|
134
|
+
* EventType defines a set of string literals representing various event types related to items, accounts, persons, threads, messages, attachments, and links. It exists to provide a consistent and type-safe way to handle different events within the trigger engine module.
|
|
135
|
+
*
|
|
136
|
+
* @sideEffects none
|
|
137
|
+
* @stability stable
|
|
138
|
+
* @cil-generated
|
|
139
|
+
*/
|
|
140
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:eventtype:type" type="type" identity="EventType" parent="~/.framework/functions/_shared/trigger-engine.ts"]
|
|
141
|
+
// CIL[DOC-MACRO purpose="EventType type"]
|
|
142
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the EventType type."]
|
|
143
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
|
|
144
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
145
|
+
// CIL[DOC-MICRO logic_summary="Implements the EventType type." notable_decisions="[]"]
|
|
146
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
147
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
44
148
|
export type EventType =
|
|
45
149
|
| 'item_created' | 'item_updated' | 'item_deleted'
|
|
46
150
|
| 'account_created' | 'account_updated' | 'account_deleted'
|
|
@@ -49,21 +153,36 @@ export type EventType =
|
|
|
49
153
|
| 'message_created' | 'message_updated' | 'message_deleted'
|
|
50
154
|
| 'attachment_created' | 'attachment_updated' | 'attachment_deleted'
|
|
51
155
|
| 'link_created' | 'link_updated' | 'link_deleted'
|
|
52
|
-
// CIL[END
|
|
53
|
-
// CIL[
|
|
54
|
-
// CIL[DOC-
|
|
55
|
-
// CIL[DOC-
|
|
56
|
-
// CIL[DOC-
|
|
57
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Trigger interface" errors="none" side_effects="none"]
|
|
58
|
-
// CIL[DOC-MICRO logic_summary="Interface with trigger metadata, event type, pipeline, and config" notable_decisions="[]"]
|
|
59
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
60
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
61
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
62
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
63
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
64
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
156
|
+
// CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:eventtype:type"]
|
|
157
|
+
// CIL[DOC-VECTOR type="context" content="purpose='EventType defines a set of string literals representing various event types related to items, accounts, persons, threads, messages, attachments, and links.'; No verified external callers" status="ready"]
|
|
158
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
159
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
160
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
65
161
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
66
162
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
163
|
+
|
|
164
|
+
// CIL[DOC-MACRO purpose="The Trigger interface defines the structure for a trigger object used in event-driven architectures."]
|
|
165
|
+
// CIL[DOC-RESPONSIBILITY responsibility="The Trigger interface defines the structure for a trigger object used in event-driven architectures. It encapsulates the necessary properties to identify and configure triggers within a pipeline."]
|
|
166
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
|
|
167
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
168
|
+
// CIL[DOC-MICRO logic_summary="The Trigger interface defines the structure for a trigger object used in event-driven architectures. It encapsulates the necessary properties to identify and configure triggers within a pipeline." notable_decisions="none"]
|
|
169
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
170
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
171
|
+
/**
|
|
172
|
+
* The Trigger interface defines the structure for a trigger object used in event-driven architectures. It encapsulates the necessary properties to identify and configure triggers within a pipeline.
|
|
173
|
+
*
|
|
174
|
+
* @sideEffects none
|
|
175
|
+
* @stability stable
|
|
176
|
+
* @cil-generated
|
|
177
|
+
*/
|
|
178
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:trigger:interface" type="interface" identity="Trigger" parent="~/.framework/functions/_shared/trigger-engine.ts"]
|
|
179
|
+
// CIL[DOC-MACRO purpose="Trigger interface"]
|
|
180
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the Trigger interface."]
|
|
181
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
|
|
182
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
183
|
+
// CIL[DOC-MICRO logic_summary="Implements the Trigger interface." notable_decisions="[]"]
|
|
184
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
185
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
67
186
|
interface Trigger {
|
|
68
187
|
id: string
|
|
69
188
|
name: string
|
|
@@ -76,21 +195,45 @@ interface Trigger {
|
|
|
76
195
|
}
|
|
77
196
|
is_active: boolean
|
|
78
197
|
}
|
|
79
|
-
// CIL[END
|
|
80
|
-
// CIL[
|
|
81
|
-
// CIL[DOC-
|
|
82
|
-
// CIL[DOC-
|
|
83
|
-
// CIL[DOC-
|
|
84
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="Database errors, pipeline failures" side_effects="Database updates, audit logs, pipeline execution"]
|
|
85
|
-
// CIL[DOC-MICRO logic_summary="Fetch triggers, evaluate conditions, run pipelines, update trigger stats, emit audit events" notable_decisions="[]"]
|
|
86
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
87
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
88
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
|
|
89
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
90
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
91
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
198
|
+
// CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:trigger:interface"]
|
|
199
|
+
// CIL[DOC-VECTOR type="context" content="purpose='The Trigger interface defines the structure for a trigger object used in event-driven architectures.'; No verified external callers" status="ready"]
|
|
200
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
201
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
202
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
92
203
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
93
204
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
205
|
+
|
|
206
|
+
// CIL[DOC-MACRO purpose="This function checks for active triggers based on the specified event type and fires them if their conditions are met."]
|
|
207
|
+
// CIL[DOC-RESPONSIBILITY responsibility="This function checks for active triggers based on the specified event type and fires them if their conditions are met. It exists to facilitate the execution of defined actions in response to specific events within the system."]
|
|
208
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
|
|
209
|
+
// CIL[DOC-CONTRACT inputs="- eventType: EventType (required) — the type of event that triggers the action.\\n- entityType: string (required) — the type of entity associated with the event.\\n- entityId: string (required) — the unique identifier of the entity.\\n- entityData: any (required) — the data associated with the entity.\\n- ctx: CoreContext (required) — the context for the current operation." outputs="Promise<void>" errors="none" side_effects="Database writes to update trigger last triggered time and count, RPC calls to increment trigger count, and audit log emissions. dependencies="adminDb.from('triggers'), adminDb.from('types'), runPipeline, emitAudit, adminDb.from('triggers').update"]
|
|
210
|
+
// CIL[DOC-MICRO logic_summary="This function checks for active triggers based on the specified event type and fires them if their conditions are met. It exists to facilitate the execution of defined actions in response to specific events within the system." notable_decisions="Logs errors to the console and emits audit logs for failures."]
|
|
211
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
212
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
213
|
+
/**
|
|
214
|
+
* This function checks for active triggers based on the specified event type and fires them if their conditions are met. It exists to facilitate the execution of defined actions in response to specific events within the system.
|
|
215
|
+
*
|
|
216
|
+
* @inputSpec
|
|
217
|
+
* - eventType: EventType (required) — the type of event that triggers the action.
|
|
218
|
+
* - entityType: string (required) — the type of entity associated with the event.
|
|
219
|
+
* - entityId: string (required) — the unique identifier of the entity.
|
|
220
|
+
* - entityData: any (required) — the data associated with the entity.
|
|
221
|
+
* - ctx: CoreContext (required) — the context for the current operation.
|
|
222
|
+
* @outputSpec Promise<void>
|
|
223
|
+
* @sideEffects Database writes to update trigger last triggered time and count, RPC calls to increment trigger count, and audit log emissions.
|
|
224
|
+
* @stability stable
|
|
225
|
+
* @calls adminDb.from('triggers'), adminDb.from('types'), runPipeline, emitAudit, adminDb.from('triggers').update
|
|
226
|
+
* @errorHandling Logs errors to the console and emits audit logs for failures.
|
|
227
|
+
* @cil-generated
|
|
228
|
+
*/
|
|
229
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:checkandfiretriggers:function" type="function" identity="checkAndFireTriggers" parent="~/.framework/functions/_shared/trigger-engine.ts"]
|
|
230
|
+
// CIL[DOC-MACRO purpose="checkAndFireTriggers function"]
|
|
231
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the checkAndFireTriggers function."]
|
|
232
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
|
|
233
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
234
|
+
// CIL[DOC-MICRO logic_summary="Implements the checkAndFireTriggers function." notable_decisions="[]"]
|
|
235
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
236
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
94
237
|
export async function checkAndFireTriggers(
|
|
95
238
|
eventType: EventType,
|
|
96
239
|
entityType: string,
|
|
@@ -114,6 +257,16 @@ export async function checkAndFireTriggers(
|
|
|
114
257
|
return
|
|
115
258
|
}
|
|
116
259
|
|
|
260
|
+
// entityData carries type_id, never the slug — resolve it once when a
|
|
261
|
+
// trigger for this event filters on config.type_slug, otherwise those
|
|
262
|
+
// triggers can never match.
|
|
263
|
+
if (entityData && entityData.type_slug === undefined && entityData.type_id &&
|
|
264
|
+
triggers.some(t => t.config?.type_slug)) {
|
|
265
|
+
const { data: typeRow } = await adminDb
|
|
266
|
+
.from('types').select('slug').eq('id', entityData.type_id).maybeSingle()
|
|
267
|
+
if (typeRow?.slug) entityData = { ...entityData, type_slug: typeRow.slug }
|
|
268
|
+
}
|
|
269
|
+
|
|
117
270
|
for (const trigger of triggers) {
|
|
118
271
|
try {
|
|
119
272
|
const shouldFire = evaluateTriggerConditions(trigger, entityType, entityData)
|
|
@@ -124,6 +277,7 @@ export async function checkAndFireTriggers(
|
|
|
124
277
|
|
|
125
278
|
const triggerData = {
|
|
126
279
|
event: eventType,
|
|
280
|
+
entity_id: entityId,
|
|
127
281
|
entity: {
|
|
128
282
|
type: entityType,
|
|
129
283
|
id: entityId,
|
|
@@ -173,21 +327,42 @@ export async function checkAndFireTriggers(
|
|
|
173
327
|
}
|
|
174
328
|
}
|
|
175
329
|
}
|
|
176
|
-
// CIL[END
|
|
177
|
-
// CIL[
|
|
178
|
-
// CIL[DOC-
|
|
179
|
-
// CIL[DOC-
|
|
180
|
-
// CIL[DOC-
|
|
181
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="boolean" errors="none" side_effects="none"]
|
|
182
|
-
// CIL[DOC-MICRO logic_summary="Validate trigger config against entity data using filters and operators" notable_decisions="[]"]
|
|
183
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
184
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
185
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/migrations/025_retype_threads_messages.sql, \."]
|
|
186
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
187
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
188
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
330
|
+
// CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:checkandfiretriggers:function"]
|
|
331
|
+
// CIL[DOC-VECTOR type="context" content="purpose='This function checks for active triggers based on the specified event type and fires them if their conditions are met.'; No verified external callers" status="ready"]
|
|
332
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
333
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
334
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
189
335
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
190
336
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
337
|
+
|
|
338
|
+
// CIL[DOC-MACRO purpose="Evaluates trigger conditions based on the provided trigger configuration, entity type, and entity data."]
|
|
339
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Evaluates trigger conditions based on the provided trigger configuration, entity type, and entity data. It determines if the conditions are met for a specific trigger to activate."]
|
|
340
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
|
|
341
|
+
// CIL[DOC-CONTRACT inputs="- trigger: Trigger (required) — the trigger configuration to evaluate against.\\n- entityType: string (required) — the type of the entity being evaluated.\\n- entityData: any (required) — the data associated with the entity." outputs="boolean — returns true if all conditions are met, false otherwise." errors="none" side_effects="none dependencies="getNestedValue, evaluateOperator"]
|
|
342
|
+
// CIL[DOC-MICRO logic_summary="Evaluates trigger conditions based on the provided trigger configuration, entity type, and entity data. It determines if the conditions are met for a specific trigger to activate." notable_decisions="none"]
|
|
343
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
344
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
345
|
+
/**
|
|
346
|
+
* Evaluates trigger conditions based on the provided trigger configuration, entity type, and entity data. It determines if the conditions are met for a specific trigger to activate.
|
|
347
|
+
*
|
|
348
|
+
* @inputSpec
|
|
349
|
+
* - trigger: Trigger (required) — the trigger configuration to evaluate against.
|
|
350
|
+
* - entityType: string (required) — the type of the entity being evaluated.
|
|
351
|
+
* - entityData: any (required) — the data associated with the entity.
|
|
352
|
+
* @outputSpec boolean — returns true if all conditions are met, false otherwise.
|
|
353
|
+
* @sideEffects none
|
|
354
|
+
* @stability stable
|
|
355
|
+
* @calls getNestedValue, evaluateOperator
|
|
356
|
+
* @cil-generated
|
|
357
|
+
*/
|
|
358
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:evaluatetriggerconditions:function" type="function" identity="evaluateTriggerConditions" parent="~/.framework/functions/_shared/trigger-engine.ts"]
|
|
359
|
+
// CIL[DOC-MACRO purpose="evaluateTriggerConditions function"]
|
|
360
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the evaluateTriggerConditions function."]
|
|
361
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
|
|
362
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
363
|
+
// CIL[DOC-MICRO logic_summary="Implements the evaluateTriggerConditions function." notable_decisions="[]"]
|
|
364
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
365
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
191
366
|
function evaluateTriggerConditions(
|
|
192
367
|
trigger: Trigger,
|
|
193
368
|
entityType: string,
|
|
@@ -225,41 +400,83 @@ function evaluateTriggerConditions(
|
|
|
225
400
|
|
|
226
401
|
return true
|
|
227
402
|
}
|
|
228
|
-
// CIL[END
|
|
229
|
-
// CIL[
|
|
230
|
-
// CIL[DOC-
|
|
231
|
-
// CIL[DOC-
|
|
232
|
-
// CIL[DOC-
|
|
233
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="any" errors="none" side_effects="none"]
|
|
234
|
-
// CIL[DOC-MICRO logic_summary="Split path by dots and traverse object to get nested value" notable_decisions="[]"]
|
|
235
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
236
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
237
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
238
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
239
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
240
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
403
|
+
// CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:evaluatetriggerconditions:function"]
|
|
404
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Evaluates trigger conditions based on the provided trigger configuration, entity type, and entity data.'; No verified external callers" status="ready"]
|
|
405
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
406
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
407
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
241
408
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
242
409
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
410
|
+
|
|
411
|
+
// CIL[DOC-MACRO purpose="Retrieves a nested value from an object using a specified path, normalizing Postgres-style accessors to dot notation."]
|
|
412
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Retrieves a nested value from an object using a specified path, normalizing Postgres-style accessors to dot notation. This function exists to facilitate easier access to deeply nested properties in objects."]
|
|
413
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
|
|
414
|
+
// CIL[DOC-CONTRACT inputs="- obj: any (required) — the object from which to retrieve the nested value.\\n- path: string (required) — the path to the nested value, potentially using Postgres-style accessors." outputs="any — the value found at the specified path, or undefined if not found." errors="none" side_effects="none"]
|
|
415
|
+
// CIL[DOC-MICRO logic_summary="Retrieves a nested value from an object using a specified path, normalizing Postgres-style accessors to dot notation. This function exists to facilitate easier access to deeply nested properties in objects." notable_decisions="none"]
|
|
416
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
417
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
418
|
+
/**
|
|
419
|
+
* Retrieves a nested value from an object using a specified path, normalizing Postgres-style accessors to dot notation. This function exists to facilitate easier access to deeply nested properties in objects.
|
|
420
|
+
*
|
|
421
|
+
* @inputSpec
|
|
422
|
+
* - obj: any (required) — the object from which to retrieve the nested value.
|
|
423
|
+
* - path: string (required) — the path to the nested value, potentially using Postgres-style accessors.
|
|
424
|
+
* @outputSpec any — the value found at the specified path, or undefined if not found.
|
|
425
|
+
* @sideEffects none
|
|
426
|
+
* @stability stable
|
|
427
|
+
* @cil-generated
|
|
428
|
+
*/
|
|
429
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:getnestedvalue:function" type="function" identity="getNestedValue" parent="~/.framework/functions/_shared/trigger-engine.ts"]
|
|
430
|
+
// CIL[DOC-MACRO purpose="getNestedValue function"]
|
|
431
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the getNestedValue function."]
|
|
432
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
|
|
433
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
434
|
+
// CIL[DOC-MICRO logic_summary="Implements the getNestedValue function." notable_decisions="[]"]
|
|
435
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
436
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
243
437
|
function getNestedValue(obj: any, path: string): any {
|
|
244
|
-
|
|
438
|
+
// Trigger filters may use Postgres-style accessors (data->>'status');
|
|
439
|
+
// normalize them to dot notation before traversing.
|
|
440
|
+
const normalized = path.replace(/->>'?([^']+)'?/g, '.$1')
|
|
441
|
+
return normalized.split('.').reduce((current, key) => {
|
|
245
442
|
return current?.[key]
|
|
246
443
|
}, obj)
|
|
247
444
|
}
|
|
248
|
-
// CIL[END
|
|
249
|
-
// CIL[
|
|
250
|
-
// CIL[DOC-
|
|
251
|
-
// CIL[DOC-
|
|
252
|
-
// CIL[DOC-
|
|
253
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="boolean" errors="none" side_effects="none"]
|
|
254
|
-
// CIL[DOC-MICRO logic_summary="Evaluate multiple operators against actual value, return false on any failure" notable_decisions="[]"]
|
|
255
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
256
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
257
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
258
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
259
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
260
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
445
|
+
// CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:getnestedvalue:function"]
|
|
446
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Retrieves a nested value from an object using a specified path, normalizing Postgres-style accessors to dot notation.'; No verified external callers" status="ready"]
|
|
447
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
448
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
449
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
261
450
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
262
451
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
452
|
+
|
|
453
|
+
// CIL[DOC-MACRO purpose="Evaluates a set of operators against an actual value to determine if the conditions are met."]
|
|
454
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Evaluates a set of operators against an actual value to determine if the conditions are met. This function is used for validating data against specified criteria."]
|
|
455
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
|
|
456
|
+
// CIL[DOC-CONTRACT inputs="- actual: any (required) — the value to be evaluated against the operators.\\n- operators: Record<string, any> (required) — a collection of operators and their expected values." outputs="boolean — returns true if all operators are satisfied, otherwise false." errors="none" side_effects="none dependencies="console.warn"]
|
|
457
|
+
// CIL[DOC-MICRO logic_summary="Evaluates a set of operators against an actual value to determine if the conditions are met. This function is used for validating data against specified criteria." notable_decisions="none"]
|
|
458
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
459
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
460
|
+
/**
|
|
461
|
+
* Evaluates a set of operators against an actual value to determine if the conditions are met. This function is used for validating data against specified criteria.
|
|
462
|
+
*
|
|
463
|
+
* @inputSpec
|
|
464
|
+
* - actual: any (required) — the value to be evaluated against the operators.
|
|
465
|
+
* - operators: Record<string, any> (required) — a collection of operators and their expected values.
|
|
466
|
+
* @outputSpec boolean — returns true if all operators are satisfied, otherwise false.
|
|
467
|
+
* @sideEffects none
|
|
468
|
+
* @stability stable
|
|
469
|
+
* @calls console.warn
|
|
470
|
+
* @cil-generated
|
|
471
|
+
*/
|
|
472
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:evaluateoperator:function" type="function" identity="evaluateOperator" parent="~/.framework/functions/_shared/trigger-engine.ts"]
|
|
473
|
+
// CIL[DOC-MACRO purpose="evaluateOperator function"]
|
|
474
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the evaluateOperator function."]
|
|
475
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
|
|
476
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
477
|
+
// CIL[DOC-MICRO logic_summary="Implements the evaluateOperator function." notable_decisions="[]"]
|
|
478
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
479
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
263
480
|
function evaluateOperator(actual: any, operators: Record<string, any>): boolean {
|
|
264
481
|
for (const [op, expected] of Object.entries(operators)) {
|
|
265
482
|
switch (op) {
|
|
@@ -298,76 +515,148 @@ function evaluateOperator(actual: any, operators: Record<string, any>): boolean
|
|
|
298
515
|
}
|
|
299
516
|
return true
|
|
300
517
|
}
|
|
301
|
-
// CIL[END
|
|
302
|
-
// CIL[
|
|
303
|
-
// CIL[DOC-
|
|
304
|
-
// CIL[DOC-
|
|
305
|
-
// CIL[DOC-
|
|
306
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="none" side_effects="Pipeline execution, audit logging"]
|
|
307
|
-
// CIL[DOC-MICRO logic_summary="Create event type string and delegate to checkAndFireTriggers" notable_decisions="[]"]
|
|
308
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
309
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
310
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
311
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
312
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
313
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
518
|
+
// CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:evaluateoperator:function"]
|
|
519
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Evaluates a set of operators against an actual value to determine if the conditions are met.'; No verified external callers" status="ready"]
|
|
520
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
521
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
522
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
314
523
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
315
524
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
525
|
+
|
|
526
|
+
// CIL[DOC-MACRO purpose="Triggers the creation event for a specified entity type, allowing for associated actions to be executed."]
|
|
527
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Triggers the creation event for a specified entity type, allowing for associated actions to be executed. This function is essential for managing entity lifecycle events within the system."]
|
|
528
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
|
|
529
|
+
// CIL[DOC-CONTRACT inputs="- entityType: string (required) — the type of the entity being created.\\n- entityId: string (required) — the unique identifier of the entity.\\n- entityData: any (required) — the data associated with the entity.\\n- ctx: CoreContext (required) — the context in which the operation is performed." outputs="Promise<void>" errors="none" side_effects="none dependencies="eventNameFor, checkAndFireTriggers"]
|
|
530
|
+
// CIL[DOC-MICRO logic_summary="Triggers the creation event for a specified entity type, allowing for associated actions to be executed. This function is essential for managing entity lifecycle events within the system." notable_decisions="none"]
|
|
531
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
532
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
533
|
+
/**
|
|
534
|
+
* Triggers the creation event for a specified entity type, allowing for associated actions to be executed. This function is essential for managing entity lifecycle events within the system.
|
|
535
|
+
*
|
|
536
|
+
* @inputSpec
|
|
537
|
+
* - entityType: string (required) — the type of the entity being created.
|
|
538
|
+
* - entityId: string (required) — the unique identifier of the entity.
|
|
539
|
+
* - entityData: any (required) — the data associated with the entity.
|
|
540
|
+
* - ctx: CoreContext (required) — the context in which the operation is performed.
|
|
541
|
+
* @outputSpec Promise<void>
|
|
542
|
+
* @sideEffects none
|
|
543
|
+
* @stability stable
|
|
544
|
+
* @calls eventNameFor, checkAndFireTriggers
|
|
545
|
+
* @cil-generated
|
|
546
|
+
*/
|
|
547
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:firecreatetriggers:function" type="function" identity="fireCreateTriggers" parent="~/.framework/functions/_shared/trigger-engine.ts"]
|
|
548
|
+
// CIL[DOC-MACRO purpose="fireCreateTriggers function"]
|
|
549
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the fireCreateTriggers function."]
|
|
550
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
|
|
551
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
552
|
+
// CIL[DOC-MICRO logic_summary="Implements the fireCreateTriggers function." notable_decisions="[]"]
|
|
553
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
554
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
316
555
|
export async function fireCreateTriggers(
|
|
317
556
|
entityType: string,
|
|
318
557
|
entityId: string,
|
|
319
558
|
entityData: any,
|
|
320
559
|
ctx: CoreContext
|
|
321
560
|
): Promise<void> {
|
|
322
|
-
const eventType = `${entityType}_created` as EventType
|
|
561
|
+
const eventType = `${eventNameFor(entityType)}_created` as EventType
|
|
323
562
|
await checkAndFireTriggers(eventType, entityType, entityId, entityData, ctx)
|
|
324
563
|
}
|
|
325
|
-
// CIL[END
|
|
326
|
-
// CIL[
|
|
327
|
-
// CIL[DOC-
|
|
328
|
-
// CIL[DOC-
|
|
329
|
-
// CIL[DOC-
|
|
330
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="none" side_effects="Pipeline execution, audit logging"]
|
|
331
|
-
// CIL[DOC-MICRO logic_summary="Create event type string and delegate to checkAndFireTriggers" notable_decisions="[]"]
|
|
332
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
333
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
334
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
335
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
336
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
337
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
564
|
+
// CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:firecreatetriggers:function"]
|
|
565
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Triggers the creation event for a specified entity type, allowing for associated actions to be executed.'; No verified external callers" status="ready"]
|
|
566
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
567
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
568
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
338
569
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
339
570
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
571
|
+
|
|
572
|
+
// CIL[DOC-MACRO purpose="Triggers an update event for a specified entity type and ID, allowing for associated actions to be executed."]
|
|
573
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Triggers an update event for a specified entity type and ID, allowing for associated actions to be executed. This function is essential for maintaining consistency and triggering necessary updates in response to entity changes."]
|
|
574
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
|
|
575
|
+
// CIL[DOC-CONTRACT inputs="entityType: string (required) — the type of the entity being updated.\\nentityId: string (required) — the unique identifier of the entity.\\nentityData: any (required) — the data associated with the entity update.\\nctx: CoreContext (required) — the context in which the operation is executed." outputs="Promise<void>" errors="none" side_effects="none dependencies="checkAndFireTriggers, eventNameFor"]
|
|
576
|
+
// CIL[DOC-MICRO logic_summary="Triggers an update event for a specified entity type and ID, allowing for associated actions to be executed. This function is essential for maintaining consistency and triggering necessary updates in response to entity changes." notable_decisions="none"]
|
|
577
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
578
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
579
|
+
/**
|
|
580
|
+
* Triggers an update event for a specified entity type and ID, allowing for associated actions to be executed. This function is essential for maintaining consistency and triggering necessary updates in response to entity changes.
|
|
581
|
+
*
|
|
582
|
+
* @inputSpec
|
|
583
|
+
* entityType: string (required) — the type of the entity being updated.
|
|
584
|
+
* entityId: string (required) — the unique identifier of the entity.
|
|
585
|
+
* entityData: any (required) — the data associated with the entity update.
|
|
586
|
+
* ctx: CoreContext (required) — the context in which the operation is executed.
|
|
587
|
+
* @outputSpec Promise<void>
|
|
588
|
+
* @sideEffects none
|
|
589
|
+
* @stability stable
|
|
590
|
+
* @calls checkAndFireTriggers, eventNameFor
|
|
591
|
+
* @cil-generated
|
|
592
|
+
*/
|
|
593
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:fireupdatetriggers:function" type="function" identity="fireUpdateTriggers" parent="~/.framework/functions/_shared/trigger-engine.ts"]
|
|
594
|
+
// CIL[DOC-MACRO purpose="fireUpdateTriggers function"]
|
|
595
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the fireUpdateTriggers function."]
|
|
596
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
|
|
597
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
598
|
+
// CIL[DOC-MICRO logic_summary="Implements the fireUpdateTriggers function." notable_decisions="[]"]
|
|
599
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
600
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
340
601
|
export async function fireUpdateTriggers(
|
|
341
602
|
entityType: string,
|
|
342
603
|
entityId: string,
|
|
343
604
|
entityData: any,
|
|
344
605
|
ctx: CoreContext
|
|
345
606
|
): Promise<void> {
|
|
346
|
-
const eventType = `${entityType}_updated` as EventType
|
|
607
|
+
const eventType = `${eventNameFor(entityType)}_updated` as EventType
|
|
347
608
|
await checkAndFireTriggers(eventType, entityType, entityId, entityData, ctx)
|
|
348
609
|
}
|
|
349
|
-
// CIL[END
|
|
350
|
-
// CIL[
|
|
351
|
-
// CIL[DOC-
|
|
352
|
-
// CIL[DOC-
|
|
353
|
-
// CIL[DOC-
|
|
354
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="none" side_effects="Pipeline execution, audit logging"]
|
|
355
|
-
// CIL[DOC-MICRO logic_summary="Create event type string and delegate to checkAndFireTriggers" notable_decisions="[]"]
|
|
356
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
357
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
358
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
359
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
360
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
361
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
610
|
+
// CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:fireupdatetriggers:function"]
|
|
611
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Triggers an update event for a specified entity type and ID, allowing for associated actions to be executed.'; No verified external callers" status="ready"]
|
|
612
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
613
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
614
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
362
615
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
363
616
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
617
|
+
|
|
618
|
+
// CIL[DOC-MACRO purpose="The fireDeleteTriggers function triggers delete events for a specified entity type and ID."]
|
|
619
|
+
// CIL[DOC-RESPONSIBILITY responsibility="The fireDeleteTriggers function triggers delete events for a specified entity type and ID. It ensures that any associated triggers are executed when an entity is deleted."]
|
|
620
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
|
|
621
|
+
// CIL[DOC-CONTRACT inputs="- entityType: string (required) — the type of the entity being deleted.\\n- entityId: string (required) — the unique identifier of the entity.\\n- entityData: any (required) — the data associated with the entity.\\n- ctx: CoreContext (required) — the context in which the operation is performed." outputs="Promise<void>" errors="none" side_effects="none dependencies="eventNameFor, checkAndFireTriggers"]
|
|
622
|
+
// CIL[DOC-MICRO logic_summary="The fireDeleteTriggers function triggers delete events for a specified entity type and ID. It ensures that any associated triggers are executed when an entity is deleted." notable_decisions="none"]
|
|
623
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
624
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
625
|
+
/**
|
|
626
|
+
* The fireDeleteTriggers function triggers delete events for a specified entity type and ID. It ensures that any associated triggers are executed when an entity is deleted.
|
|
627
|
+
*
|
|
628
|
+
* @inputSpec
|
|
629
|
+
* - entityType: string (required) — the type of the entity being deleted.
|
|
630
|
+
* - entityId: string (required) — the unique identifier of the entity.
|
|
631
|
+
* - entityData: any (required) — the data associated with the entity.
|
|
632
|
+
* - ctx: CoreContext (required) — the context in which the operation is performed.
|
|
633
|
+
* @outputSpec Promise<void>
|
|
634
|
+
* @sideEffects none
|
|
635
|
+
* @stability stable
|
|
636
|
+
* @calls eventNameFor, checkAndFireTriggers
|
|
637
|
+
* @cil-generated
|
|
638
|
+
*/
|
|
639
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:firedeletetriggers:function" type="function" identity="fireDeleteTriggers" parent="~/.framework/functions/_shared/trigger-engine.ts"]
|
|
640
|
+
// CIL[DOC-MACRO purpose="fireDeleteTriggers function"]
|
|
641
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the fireDeleteTriggers function."]
|
|
642
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
|
|
643
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
644
|
+
// CIL[DOC-MICRO logic_summary="Implements the fireDeleteTriggers function." notable_decisions="[]"]
|
|
645
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
646
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
364
647
|
export async function fireDeleteTriggers(
|
|
365
648
|
entityType: string,
|
|
366
649
|
entityId: string,
|
|
367
650
|
entityData: any,
|
|
368
651
|
ctx: CoreContext
|
|
369
652
|
): Promise<void> {
|
|
370
|
-
const eventType = `${entityType}_deleted` as EventType
|
|
653
|
+
const eventType = `${eventNameFor(entityType)}_deleted` as EventType
|
|
371
654
|
await checkAndFireTriggers(eventType, entityType, entityId, entityData, ctx)
|
|
372
655
|
}
|
|
373
|
-
// CIL[END
|
|
656
|
+
// CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:firedeletetriggers:function"]
|
|
657
|
+
// CIL[DOC-VECTOR type="context" content="purpose='The fireDeleteTriggers function triggers delete events for a specified entity type and ID.'; No verified external callers" status="ready"]
|
|
658
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
659
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
660
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
661
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
662
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|