spine-framework 0.3.145 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +5067 -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,3 +1,13 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/testing.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/testing.ts"]
|
|
2
|
+
// CIL[DOC-AUDIENCE audience="internal, test-authors"]
|
|
3
|
+
// CIL[DOC-MACRO purpose="Provide shared test helpers and mock objects for Netlify function tests"]
|
|
4
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import adminDb and expose types and factory functions for test contexts, principals, loggers, events, and assertions"]
|
|
5
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/testing" layer="shared" related_files=".framework/functions/_shared/db.ts"]
|
|
6
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="module-level imports and type definitions" errors="none" side_effects="none"]
|
|
7
|
+
// CIL[DOC-MICRO logic_summary="Imports the adminDb client and re-exports test utility types and factories" notable_decisions="Kept as a shared module for Netlify function unit tests"]
|
|
8
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
9
|
+
// CIL[DOC-STABILITY stable]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
13
|
|
|
@@ -10,58 +20,47 @@
|
|
|
10
20
|
|
|
11
21
|
|
|
12
22
|
|
|
13
|
-
// CIL[BEGIN chunk_id="testing_imports_1784020784" type="module_header" identity="imports" parent="none"]
|
|
14
|
-
// CIL[DOC-MACRO purpose="Import database dependency for testing utilities"]
|
|
15
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Import adminDb from shared database module"]
|
|
16
|
-
// CIL[DOC-CONTEXT module="testing" layer="shared" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/db.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
17
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="adminDb" errors="none" side_effects="none"]
|
|
18
|
-
// CIL[DOC-MICRO logic_summary="Import statement for database connection" notable_decisions="[]"]
|
|
19
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
20
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
21
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
22
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/db.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
|
|
23
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
24
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
25
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
26
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
27
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
28
23
|
import { adminDb } from './db'
|
|
29
|
-
// CIL[
|
|
30
|
-
// CIL[
|
|
31
|
-
// CIL[DOC-
|
|
32
|
-
// CIL[DOC-
|
|
33
|
-
// CIL[DOC-CONTEXT module="testing" layer="shared" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
|
|
34
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="TestContext interface" errors="none" side_effects="none"]
|
|
35
|
-
// CIL[DOC-MICRO logic_summary="Interface containing database, principal, logger, and account ID" notable_decisions="[]"]
|
|
36
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
37
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
38
|
-
// 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/TypeDetailPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
|
|
39
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
40
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
41
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
24
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Provide shared test helpers and mock objects for Netlify function tests'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
25
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
26
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
27
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
42
28
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
43
29
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
30
|
+
// CIL[END stable_id="~/.framework/functions/_shared/testing.ts:module_header:module_header"]
|
|
31
|
+
|
|
32
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/testing.ts:TestContext:interface" type="interface" identity="TestContext" parent="~/.framework/functions/_shared/testing.ts"]
|
|
33
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
34
|
+
// CIL[DOC-MACRO purpose="Describe the shape of a test execution context"]
|
|
35
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Type the dependencies available during a test"]
|
|
36
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/testing" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/testing.ts"]
|
|
37
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="TestContext interface" errors="none" side_effects="none"]
|
|
38
|
+
// CIL[DOC-MICRO logic_summary="Defines db, principal, logger, and accountId fields" notable_decisions="Uses typeof adminDb for the database property"]
|
|
39
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
40
|
+
// CIL[DOC-STABILITY stable]
|
|
44
41
|
export interface TestContext {
|
|
45
42
|
db: typeof adminDb
|
|
46
43
|
principal: TestPrincipal
|
|
47
44
|
logger: TestLogger
|
|
48
45
|
accountId: string
|
|
49
46
|
}
|
|
50
|
-
// CIL[
|
|
51
|
-
// CIL[
|
|
52
|
-
// CIL[DOC-
|
|
53
|
-
// CIL[DOC-
|
|
54
|
-
// CIL[DOC-CONTEXT module="testing" layer="shared" related_files="[\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
|
|
55
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="TestPrincipal interface" errors="none" side_effects="none"]
|
|
56
|
-
// CIL[DOC-MICRO logic_summary="Interface with user ID, account, roles, permissions, email" notable_decisions="[]"]
|
|
57
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
58
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
59
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
|
|
60
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
61
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
62
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
47
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Describe the shape of a test execution context'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
48
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
49
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
50
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
63
51
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
64
52
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
53
|
+
// CIL[END stable_id="~/.framework/functions/_shared/testing.ts:TestContext:interface"]
|
|
54
|
+
|
|
55
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/testing.ts:TestPrincipal:interface" type="interface" identity="TestPrincipal" parent="~/.framework/functions/_shared/testing.ts"]
|
|
56
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
57
|
+
// CIL[DOC-MACRO purpose="Describe a mocked principal for tests"]
|
|
58
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Type a fake user with roles and permissions"]
|
|
59
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/testing" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/testing.ts"]
|
|
60
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="TestPrincipal interface" errors="none" side_effects="none"]
|
|
61
|
+
// CIL[DOC-MICRO logic_summary="Defines id, account_id, roles, permissions, and optional email" notable_decisions="Defaults to member role and test email"]
|
|
62
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
63
|
+
// CIL[DOC-STABILITY stable]
|
|
65
64
|
export interface TestPrincipal {
|
|
66
65
|
id: string
|
|
67
66
|
account_id: string
|
|
@@ -69,42 +68,46 @@ export interface TestPrincipal {
|
|
|
69
68
|
permissions: Record<string, any>
|
|
70
69
|
email?: string
|
|
71
70
|
}
|
|
72
|
-
// CIL[
|
|
73
|
-
// CIL[
|
|
74
|
-
// CIL[DOC-
|
|
75
|
-
// CIL[DOC-
|
|
76
|
-
// CIL[DOC-CONTEXT module="testing" layer="shared" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
77
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="TestLogger interface" errors="none" side_effects="none"]
|
|
78
|
-
// CIL[DOC-MICRO logic_summary="Interface with info, warn, error, debug logging methods" notable_decisions="[]"]
|
|
79
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
80
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
81
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
82
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
83
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
84
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
71
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Describe a mocked principal for tests'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
72
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
73
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
74
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
85
75
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
86
76
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
77
|
+
// CIL[END stable_id="~/.framework/functions/_shared/testing.ts:TestPrincipal:interface"]
|
|
78
|
+
|
|
79
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/testing.ts:TestLogger:interface" type="interface" identity="TestLogger" parent="~/.framework/functions/_shared/testing.ts"]
|
|
80
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
81
|
+
// CIL[DOC-MACRO purpose="Describe a test logger interface"]
|
|
82
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Define the logging methods used by test doubles"]
|
|
83
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/testing" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/testing.ts"]
|
|
84
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="TestLogger interface" errors="none" side_effects="none"]
|
|
85
|
+
// CIL[DOC-MICRO logic_summary="Declares info, warn, error, and debug methods with optional metadata" notable_decisions=""]
|
|
86
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
87
|
+
// CIL[DOC-STABILITY stable]
|
|
87
88
|
export interface TestLogger {
|
|
88
89
|
info: (msg: string, meta?: any) => void
|
|
89
90
|
warn: (msg: string, meta?: any) => void
|
|
90
91
|
error: (msg: string, meta?: any) => void
|
|
91
92
|
debug: (msg: string, meta?: any) => void
|
|
92
93
|
}
|
|
93
|
-
// CIL[
|
|
94
|
-
// CIL[
|
|
95
|
-
// CIL[DOC-
|
|
96
|
-
// CIL[DOC-
|
|
97
|
-
// CIL[DOC-CONTEXT module="testing" layer="shared" related_files="[]"]
|
|
98
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="TestPrincipal" errors="none" side_effects="none"]
|
|
99
|
-
// CIL[DOC-MICRO logic_summary="Returns default test principal with spread overrides" notable_decisions="[]"]
|
|
100
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
101
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
102
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
103
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
104
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
105
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
94
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Describe a test logger interface'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
95
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
96
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
97
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
106
98
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
107
99
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
100
|
+
// CIL[END stable_id="~/.framework/functions/_shared/testing.ts:TestLogger:interface"]
|
|
101
|
+
|
|
102
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/testing.ts:mockPrincipal:function" type="function" identity="mockPrincipal" parent="~/.framework/functions/_shared/testing.ts"]
|
|
103
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
104
|
+
// CIL[DOC-MACRO purpose="Build a mock principal object"]
|
|
105
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a TestPrincipal with safe defaults and optional overrides"]
|
|
106
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/testing" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/testing.ts"]
|
|
107
|
+
// CIL[DOC-CONTRACT inputs="overrides: Partial<TestPrincipal>" outputs="TestPrincipal" errors="none" side_effects="none"]
|
|
108
|
+
// CIL[DOC-MICRO logic_summary="Merges default values with any provided overrides" notable_decisions="Defaults to member role and test IDs"]
|
|
109
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
110
|
+
// CIL[DOC-STABILITY stable]
|
|
108
111
|
export function mockPrincipal(overrides: Partial<TestPrincipal> = {}): TestPrincipal {
|
|
109
112
|
return {
|
|
110
113
|
id: 'test-user-id',
|
|
@@ -115,21 +118,23 @@ export function mockPrincipal(overrides: Partial<TestPrincipal> = {}): TestPrinc
|
|
|
115
118
|
...overrides
|
|
116
119
|
}
|
|
117
120
|
}
|
|
118
|
-
// CIL[
|
|
119
|
-
// CIL[
|
|
120
|
-
// CIL[DOC-
|
|
121
|
-
// CIL[DOC-
|
|
122
|
-
// CIL[DOC-CONTEXT module="testing" layer="shared" related_files="[]"]
|
|
123
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="TestLogger & { getLogs: () => string[] }" errors="none" side_effects="console output"]
|
|
124
|
-
// CIL[DOC-MICRO logic_summary="Returns logger that stores messages and provides getLogs method" notable_decisions="[]"]
|
|
125
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
126
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
127
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
128
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
129
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
130
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
121
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Build a mock principal object'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
122
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
123
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
124
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
131
125
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
132
126
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
127
|
+
// CIL[END stable_id="~/.framework/functions/_shared/testing.ts:mockPrincipal:function"]
|
|
128
|
+
|
|
129
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/testing.ts:mockLogger:function" type="function" identity="mockLogger" parent="~/.framework/functions/_shared/testing.ts"]
|
|
130
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
131
|
+
// CIL[DOC-MACRO purpose="Create a test logger that captures log messages"]
|
|
132
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a TestLogger implementation with in-memory log capture"]
|
|
133
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/testing" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/testing.ts"]
|
|
134
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="TestLogger & { getLogs: () => string[] }" errors="none" side_effects="none"]
|
|
135
|
+
// CIL[DOC-MICRO logic_summary="Implements info/warn/error/debug methods that record strings" notable_decisions="Mirrors messages to console when meta is provided"]
|
|
136
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
137
|
+
// CIL[DOC-STABILITY stable]
|
|
133
138
|
export function mockLogger(): TestLogger & { getLogs: () => string[] } {
|
|
134
139
|
const logs: string[] = []
|
|
135
140
|
|
|
@@ -153,21 +158,23 @@ export function mockLogger(): TestLogger & { getLogs: () => string[] } {
|
|
|
153
158
|
getLogs: () => [...logs]
|
|
154
159
|
}
|
|
155
160
|
}
|
|
156
|
-
// CIL[
|
|
157
|
-
// CIL[
|
|
158
|
-
// CIL[DOC-
|
|
159
|
-
// CIL[DOC-
|
|
160
|
-
// CIL[DOC-CONTEXT module="testing" layer="shared" related_files="[]"]
|
|
161
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="TestContext" errors="none" side_effects="none"]
|
|
162
|
-
// CIL[DOC-MICRO logic_summary="Builds context with defaults or provided options" notable_decisions="[]"]
|
|
163
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
164
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
165
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
166
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
167
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
168
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
161
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Create a test logger that captures log messages'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
162
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
163
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
164
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
169
165
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
170
166
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
167
|
+
// CIL[END stable_id="~/.framework/functions/_shared/testing.ts:mockLogger:function"]
|
|
168
|
+
|
|
169
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/testing.ts:makeTestContext:function" type="function" identity="makeTestContext" parent="~/.framework/functions/_shared/testing.ts"]
|
|
170
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
171
|
+
// CIL[DOC-MACRO purpose="Assemble a TestContext from optional components"]
|
|
172
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a test context with db, principal, logger, and accountId"]
|
|
173
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/testing" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/testing.ts"]
|
|
174
|
+
// CIL[DOC-CONTRACT inputs="options" outputs="TestContext" errors="none" side_effects="none"]
|
|
175
|
+
// CIL[DOC-MICRO logic_summary="Falls back to mock principal, logger, and account values" notable_decisions="Resolves accountId from options or principal.account_id with test default"]
|
|
176
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
177
|
+
// CIL[DOC-STABILITY stable]
|
|
171
178
|
export function makeTestContext(options: {
|
|
172
179
|
principal?: TestPrincipal
|
|
173
180
|
accountId?: string
|
|
@@ -180,21 +187,23 @@ export function makeTestContext(options: {
|
|
|
180
187
|
accountId: options.accountId || options.principal?.account_id || 'test-account'
|
|
181
188
|
}
|
|
182
189
|
}
|
|
183
|
-
// CIL[
|
|
184
|
-
// CIL[
|
|
185
|
-
// CIL[DOC-
|
|
186
|
-
// CIL[DOC-
|
|
187
|
-
// CIL[DOC-CONTEXT module="testing" layer="shared" related_files="[]"]
|
|
188
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="mock event object" errors="none" side_effects="none"]
|
|
189
|
-
// CIL[DOC-MICRO logic_summary="Returns default HTTP event with spread overrides" notable_decisions="[]"]
|
|
190
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
191
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
192
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
193
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
194
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
195
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
190
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Assemble a TestContext from optional components'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
191
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
192
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
193
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
196
194
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
197
195
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
196
|
+
// CIL[END stable_id="~/.framework/functions/_shared/testing.ts:makeTestContext:function"]
|
|
197
|
+
|
|
198
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/testing.ts:mockEvent:function" type="function" identity="mockEvent" parent="~/.framework/functions/_shared/testing.ts"]
|
|
199
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
200
|
+
// CIL[DOC-MACRO purpose="Build a fake Netlify function event"]
|
|
201
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a base Netlify event object for testing"]
|
|
202
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/testing" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/testing.ts"]
|
|
203
|
+
// CIL[DOC-CONTRACT inputs="overrides" outputs="any" errors="none" side_effects="none"]
|
|
204
|
+
// CIL[DOC-MICRO logic_summary="Starts with common HTTP event fields and applies overrides" notable_decisions="Defaults to GET /api/test"]
|
|
205
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
206
|
+
// CIL[DOC-STABILITY stable]
|
|
198
207
|
export function mockEvent(overrides: any = {}): any {
|
|
199
208
|
return {
|
|
200
209
|
httpMethod: 'GET',
|
|
@@ -205,21 +214,23 @@ export function mockEvent(overrides: any = {}): any {
|
|
|
205
214
|
...overrides
|
|
206
215
|
}
|
|
207
216
|
}
|
|
208
|
-
// CIL[
|
|
209
|
-
// CIL[
|
|
210
|
-
// CIL[DOC-
|
|
211
|
-
// CIL[DOC-
|
|
212
|
-
// CIL[DOC-CONTEXT module="testing" layer="shared" related_files="[]"]
|
|
213
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="mock Netlify context" errors="none" side_effects="none"]
|
|
214
|
-
// CIL[DOC-MICRO logic_summary="Returns mock context with AWS Lambda properties" notable_decisions="[]"]
|
|
215
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
216
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
217
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
218
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
219
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
220
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
217
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Build a fake Netlify function event'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
218
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
219
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
220
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
221
221
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
222
222
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
223
|
+
// CIL[END stable_id="~/.framework/functions/_shared/testing.ts:mockEvent:function"]
|
|
224
|
+
|
|
225
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/testing.ts:mockNetlifyContext:function" type="function" identity="mockNetlifyContext" parent="~/.framework/functions/_shared/testing.ts"]
|
|
226
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
227
|
+
// CIL[DOC-MACRO purpose="Create a fake Netlify function context"]
|
|
228
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a mock AWS Lambda context"]
|
|
229
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/testing" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/testing.ts"]
|
|
230
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="any" errors="none" side_effects="none"]
|
|
231
|
+
// CIL[DOC-MICRO logic_summary="Provides request ID, function name, memory limit, and timeout getter" notable_decisions="Uses fixed test identifiers"]
|
|
232
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
233
|
+
// CIL[DOC-STABILITY stable]
|
|
223
234
|
export function mockNetlifyContext(): any {
|
|
224
235
|
return {
|
|
225
236
|
awsRequestId: 'test-request-id',
|
|
@@ -230,39 +241,43 @@ export function mockNetlifyContext(): any {
|
|
|
230
241
|
getRemainingTimeInMillis: () => 30000
|
|
231
242
|
}
|
|
232
243
|
}
|
|
233
|
-
// CIL[
|
|
234
|
-
// CIL[
|
|
235
|
-
// CIL[DOC-
|
|
236
|
-
// CIL[DOC-
|
|
237
|
-
// CIL[DOC-CONTEXT module="testing" layer="shared" related_files="[]"]
|
|
238
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="none" side_effects="console output"]
|
|
239
|
-
// CIL[DOC-MICRO logic_summary="Logs cleanup completion message" notable_decisions="[]"]
|
|
240
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
241
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
242
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
243
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
244
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
245
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
244
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Create a fake Netlify function context'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
245
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
246
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
247
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
246
248
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
247
249
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
250
|
+
// CIL[END stable_id="~/.framework/functions/_shared/testing.ts:mockNetlifyContext:function"]
|
|
251
|
+
|
|
252
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/testing.ts:cleanup:function" type="function" identity="cleanup" parent="~/.framework/functions/_shared/testing.ts"]
|
|
253
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
254
|
+
// CIL[DOC-MACRO purpose="Log completion of test cleanup"]
|
|
255
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Output a cleanup confirmation message"]
|
|
256
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/testing" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/testing.ts"]
|
|
257
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="none" side_effects="none"]
|
|
258
|
+
// CIL[DOC-MICRO logic_summary="Logs a static message to the console" notable_decisions="Minimal shared cleanup hook"]
|
|
259
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
260
|
+
// CIL[DOC-STABILITY stable]
|
|
248
261
|
export function cleanup(): void {
|
|
249
262
|
console.log('Test cleanup completed')
|
|
250
263
|
}
|
|
251
|
-
// CIL[
|
|
252
|
-
// CIL[
|
|
253
|
-
// CIL[DOC-
|
|
254
|
-
// CIL[DOC-
|
|
255
|
-
// CIL[DOC-CONTEXT module="testing" layer="shared" related_files="[]"]
|
|
256
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="testing utilities object" errors="none" side_effects="none"]
|
|
257
|
-
// CIL[DOC-MICRO logic_summary="Returns object containing all testing helper functions" notable_decisions="[]"]
|
|
258
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
259
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
260
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
261
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
262
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
263
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
264
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Log completion of test cleanup'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
265
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
266
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
267
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
264
268
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
265
269
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
270
|
+
// CIL[END stable_id="~/.framework/functions/_shared/testing.ts:cleanup:function"]
|
|
271
|
+
|
|
272
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/testing.ts:setupTests:function" type="function" identity="setupTests" parent="~/.framework/functions/_shared/testing.ts"]
|
|
273
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
274
|
+
// CIL[DOC-MACRO purpose="Bundle all test helpers for convenience"]
|
|
275
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return an object with all factory functions"]
|
|
276
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/testing" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/testing.ts"]
|
|
277
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="object containing test factories" errors="none" side_effects="none"]
|
|
278
|
+
// CIL[DOC-MICRO logic_summary="Exposes makeTestContext, mockPrincipal, mockLogger, mockEvent, mockNetlifyContext, and cleanup" notable_decisions="Simplifies importing helpers in tests"]
|
|
279
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
280
|
+
// CIL[DOC-STABILITY stable]
|
|
266
281
|
export function setupTests() {
|
|
267
282
|
return {
|
|
268
283
|
makeTestContext,
|
|
@@ -273,21 +288,23 @@ export function setupTests() {
|
|
|
273
288
|
cleanup
|
|
274
289
|
}
|
|
275
290
|
}
|
|
276
|
-
// CIL[
|
|
277
|
-
// CIL[
|
|
278
|
-
// CIL[DOC-
|
|
279
|
-
// CIL[DOC-
|
|
280
|
-
// CIL[DOC-CONTEXT module="testing" layer="shared" related_files="[]"]
|
|
281
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="assertion failures" side_effects="none"]
|
|
282
|
-
// CIL[DOC-MICRO logic_summary="Checks status code and ensures no error in body" notable_decisions="[]"]
|
|
283
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
284
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
285
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
286
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
287
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
288
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
291
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Bundle all test helpers for convenience'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
292
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
293
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
294
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
289
295
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
290
296
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
297
|
+
// CIL[END stable_id="~/.framework/functions/_shared/testing.ts:setupTests:function"]
|
|
298
|
+
|
|
299
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/testing.ts:expectSuccessResponse:function" type="function" identity="expectSuccessResponse" parent="~/.framework/functions/_shared/testing.ts"]
|
|
300
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
301
|
+
// CIL[DOC-MACRO purpose="Assert a response indicates success"]
|
|
302
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Validate status code and that the body has no error field"]
|
|
303
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/testing" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/testing.ts"]
|
|
304
|
+
// CIL[DOC-CONTRACT inputs="response, expectedStatus" outputs="void" errors="Throws on assertion failure" side_effects="none"]
|
|
305
|
+
// CIL[DOC-MICRO logic_summary="Checks status and parses JSON body for the absence of error" notable_decisions="Skips body checks when body is absent"]
|
|
306
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
307
|
+
// CIL[DOC-STABILITY stable]
|
|
291
308
|
export function expectSuccessResponse(
|
|
292
309
|
response: { statusCode?: number; body?: string },
|
|
293
310
|
expectedStatus: number = 200
|
|
@@ -299,21 +316,23 @@ export function expectSuccessResponse(
|
|
|
299
316
|
expect(body.error).toBeUndefined()
|
|
300
317
|
}
|
|
301
318
|
}
|
|
302
|
-
// CIL[
|
|
303
|
-
// CIL[
|
|
304
|
-
// CIL[DOC-
|
|
305
|
-
// CIL[DOC-
|
|
306
|
-
// CIL[DOC-CONTEXT module="testing" layer="shared" related_files="[]"]
|
|
307
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="assertion failures" side_effects="none"]
|
|
308
|
-
// CIL[DOC-MICRO logic_summary="Checks status code and ensures error in body" notable_decisions="[]"]
|
|
309
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
310
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
311
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
312
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
313
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
314
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
319
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Assert a response indicates success'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
320
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
321
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
322
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
315
323
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
316
324
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
325
|
+
// CIL[END stable_id="~/.framework/functions/_shared/testing.ts:expectSuccessResponse:function"]
|
|
326
|
+
|
|
327
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/testing.ts:expectErrorResponse:function" type="function" identity="expectErrorResponse" parent="~/.framework/functions/_shared/testing.ts"]
|
|
328
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
329
|
+
// CIL[DOC-MACRO purpose="Assert a response indicates an error"]
|
|
330
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Validate status code and that the body has an error or message"]
|
|
331
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/testing" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/testing.ts"]
|
|
332
|
+
// CIL[DOC-CONTRACT inputs="response, expectedStatus" outputs="void" errors="Throws on assertion failure" side_effects="none"]
|
|
333
|
+
// CIL[DOC-MICRO logic_summary="Checks status and parses JSON body for the presence of error or message" notable_decisions="Accepts either error or message field as the error indicator"]
|
|
334
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
335
|
+
// CIL[DOC-STABILITY stable]
|
|
317
336
|
export function expectErrorResponse(
|
|
318
337
|
response: { statusCode?: number; body?: string },
|
|
319
338
|
expectedStatus: number = 400
|
|
@@ -325,4 +344,10 @@ export function expectErrorResponse(
|
|
|
325
344
|
expect(body.error || body.message).toBeDefined()
|
|
326
345
|
}
|
|
327
346
|
}
|
|
328
|
-
// CIL[
|
|
347
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Assert a response indicates an error'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
348
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
349
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
350
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
351
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
352
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
353
|
+
// CIL[END stable_id="~/.framework/functions/_shared/testing.ts:expectErrorResponse:function"]
|