spine-framework 0.3.124 → 0.3.126

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/.framework/cli/commands/agents.ts +35 -37
  2. package/.framework/cli/commands/auth.ts +35 -34
  3. package/.framework/cli/commands/create-app.ts +104 -40
  4. package/.framework/cli/commands/dev.ts +104 -69
  5. package/.framework/cli/commands/doctor.ts +179 -69
  6. package/.framework/cli/commands/generate.ts +83 -143
  7. package/.framework/cli/commands/init.ts +72 -34
  8. package/.framework/cli/commands/install-app.ts +260 -125
  9. package/.framework/cli/commands/items.ts +33 -44
  10. package/.framework/cli/commands/migrate.ts +122 -40
  11. package/.framework/cli/commands/migrations.ts +33 -40
  12. package/.framework/cli/commands/pipelines.ts +31 -39
  13. package/.framework/cli/commands/status.ts +47 -23
  14. package/.framework/cli/commands/system.ts +47 -37
  15. package/.framework/cli/commands/test.ts +112 -68
  16. package/.framework/cli/commands/validate-app.ts +215 -121
  17. package/.framework/cli/context.ts +112 -130
  18. package/.framework/cli/env-loader.ts +47 -18
  19. package/.framework/cli/index.ts +81 -42
  20. package/.framework/docs/runtime-types.md +1024 -0
  21. package/.framework/functions/_shared/agent-runner.ts +1296 -961
  22. package/.framework/functions/_shared/app-manifest.ts +82 -68
  23. package/.framework/functions/_shared/audit.ts +135 -83
  24. package/.framework/functions/_shared/{cil-state.ts → cil.ts} +158 -56
  25. package/.framework/functions/_shared/db.ts +80 -126
  26. package/.framework/functions/_shared/hash-api-key.ts +63 -0
  27. package/.framework/functions/_shared/index.ts +224 -335
  28. package/.framework/functions/_shared/kb.ts +319 -0
  29. package/.framework/functions/_shared/llm.ts +92 -0
  30. package/.framework/functions/_shared/logging.ts +288 -0
  31. package/.framework/functions/_shared/middleware.ts +329 -365
  32. package/.framework/functions/_shared/outcomes.ts +36 -0
  33. package/.framework/functions/_shared/permissions.ts +359 -643
  34. package/.framework/functions/_shared/pipeline-runner.ts +243 -316
  35. package/.framework/functions/_shared/principal.ts +376 -468
  36. package/.framework/functions/_shared/resolve-credentials.ts +102 -0
  37. package/.framework/functions/_shared/resolve-ids.ts +188 -16
  38. package/.framework/functions/_shared/retry-deliveries.ts +104 -0
  39. package/.framework/functions/_shared/schema-utils.ts +611 -373
  40. package/.framework/functions/_shared/testing.ts +207 -137
  41. package/.framework/functions/_shared/tracing.ts +276 -0
  42. package/.framework/functions/_shared/trigger-engine.ts +159 -211
  43. package/.framework/functions/_shared/webhook-registration.ts +95 -81
  44. package/.framework/functions/_shared/webhook-registry.ts +153 -75
  45. package/.framework/functions/account-nodes.ts +31 -53
  46. package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
  47. package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
  48. package/.framework/functions/adapters/openai-outbound.ts +40 -0
  49. package/.framework/functions/admin-data.ts +685 -537
  50. package/.framework/functions/admin-funnel.ts +31 -20
  51. package/.framework/functions/admin-install-funnel.ts +47 -28
  52. package/.framework/functions/admin-signals.ts +47 -29
  53. package/.framework/functions/ai-agents.ts +122 -147
  54. package/.framework/functions/ai-interactions.ts +180 -90
  55. package/.framework/functions/api-keys.ts +250 -192
  56. package/.framework/functions/apps.ts +203 -197
  57. package/.framework/functions/auth.ts +98 -91
  58. package/.framework/functions/cil-agent-ingest.ts +773 -0
  59. package/.framework/functions/cil-agent.ts +592 -0
  60. package/.framework/functions/cil-callmap.ts +1227 -0
  61. package/.framework/functions/cil-config.ts +583 -0
  62. package/.framework/functions/cil-context.ts +445 -0
  63. package/.framework/functions/cil-doc.ts +1752 -0
  64. package/.framework/functions/cil-embeddings.ts +1202 -0
  65. package/.framework/functions/cil-graph.ts +585 -0
  66. package/.framework/functions/cil-ingest.ts +2416 -0
  67. package/.framework/functions/cil-pipeline.ts +318 -0
  68. package/.framework/functions/cil-project.ts +499 -0
  69. package/.framework/functions/cil-validate.ts +469 -0
  70. package/.framework/functions/debug-auth.ts +73 -53
  71. package/.framework/functions/deliveries.ts +117 -0
  72. package/.framework/functions/embeddings.ts +528 -516
  73. package/.framework/functions/eval-harness.ts +158 -106
  74. package/.framework/functions/integration-outbound.ts +311 -0
  75. package/.framework/functions/integration-routes.ts +240 -466
  76. package/.framework/functions/integrations.ts +132 -140
  77. package/.framework/functions/invites.ts +401 -201
  78. package/.framework/functions/item-progress.ts +113 -53
  79. package/.framework/functions/kb.ts +28 -0
  80. package/.framework/functions/logs.ts +239 -222
  81. package/.framework/functions/observability.ts +308 -259
  82. package/.framework/functions/pipeline-executions.ts +179 -235
  83. package/.framework/functions/pipelines.ts +163 -205
  84. package/.framework/functions/prompt-configs.ts +109 -156
  85. package/.framework/functions/roles.ts +97 -147
  86. package/.framework/functions/system-cron.ts +132 -218
  87. package/.framework/functions/system.ts +112 -52
  88. package/.framework/functions/tests.ts +32 -28
  89. package/.framework/functions/timers.ts +162 -210
  90. package/.framework/functions/triggers.ts +282 -346
  91. package/.framework/functions/types.ts +283 -400
  92. package/.framework/migrations/001_core_schema.sql +630 -0
  93. package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
  94. package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
  95. package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
  96. package/.framework/migrations/005_core_observability.sql +598 -0
  97. package/.framework/migrations/006_security_hardening_rls.sql +97 -0
  98. package/.framework/migrations/007_kb_article_list.sql +237 -0
  99. package/.framework/migrations/008_items_target.sql +8 -0
  100. package/.framework/migrations/009_roles_slug_unique.sql +11 -0
  101. package/.framework/public/spine.config.json +91 -0
  102. package/.framework/scripts/app-install-cli.ts +112 -98
  103. package/.framework/src/App.tsx +67 -20
  104. package/.framework/src/apps/admin/index.tsx +97 -27
  105. package/.framework/src/components/AppWrapper.tsx +50 -11
  106. package/.framework/src/components/CustomAppLoader.tsx +131 -22
  107. package/.framework/src/components/admin/AdminListPage.tsx +75 -8
  108. package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
  109. package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
  110. package/.framework/src/components/admin/PageInstructions.tsx +49 -0
  111. package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
  112. package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
  113. package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
  114. package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
  115. package/.framework/src/components/app-sidebar.tsx +50 -3
  116. package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
  117. package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
  118. package/.framework/src/components/kb/KBArticleList.tsx +557 -0
  119. package/.framework/src/components/layout/AppShell.tsx +54 -16
  120. package/.framework/src/components/layout/Header.tsx +50 -38
  121. package/.framework/src/components/layout/Layout.tsx +48 -32
  122. package/.framework/src/components/layout/Sidebar.tsx +167 -16
  123. package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
  124. package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
  125. package/.framework/src/components/runtime/DataFilters.tsx +78 -1
  126. package/.framework/src/components/runtime/DataHeader.tsx +32 -29
  127. package/.framework/src/components/runtime/DataListPage.tsx +161 -2
  128. package/.framework/src/components/runtime/DataStats.tsx +48 -1
  129. package/.framework/src/components/runtime/DataTable.tsx +153 -1
  130. package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
  131. package/.framework/src/components/runtime/index.ts +16 -9
  132. package/.framework/src/components/search-form.tsx +33 -1
  133. package/.framework/src/components/shared/AgentView.tsx +48 -51
  134. package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
  135. package/.framework/src/components/shared/InviteManager.tsx +113 -52
  136. package/.framework/src/components/shared/MemberList.tsx +182 -0
  137. package/.framework/src/components/shared/SchemaFields.tsx +96 -78
  138. package/.framework/src/components/ui/DataTable.tsx +86 -56
  139. package/.framework/src/components/ui/Form.tsx +188 -109
  140. package/.framework/src/components/ui/ItemCard.tsx +86 -58
  141. package/.framework/src/components/ui/ItemListView.tsx +88 -61
  142. package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
  143. package/.framework/src/components/ui/Modal.tsx +81 -4
  144. package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
  145. package/.framework/src/components/ui/accordion.tsx +97 -5
  146. package/.framework/src/components/ui/alert-dialog.tsx +225 -13
  147. package/.framework/src/components/ui/alert.tsx +113 -6
  148. package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
  149. package/.framework/src/components/ui/avatar.tsx +129 -7
  150. package/.framework/src/components/ui/badge.tsx +65 -3
  151. package/.framework/src/components/ui/breadcrumb.tsx +145 -8
  152. package/.framework/src/components/ui/button-group.tsx +81 -4
  153. package/.framework/src/components/ui/button.tsx +49 -2
  154. package/.framework/src/components/ui/calendar.tsx +65 -3
  155. package/.framework/src/components/ui/card.tsx +145 -8
  156. package/.framework/src/components/ui/carousel.tsx +129 -7
  157. package/.framework/src/components/ui/chart.tsx +161 -10
  158. package/.framework/src/components/ui/checkbox.tsx +49 -2
  159. package/.framework/src/components/ui/collapsible.tsx +81 -5
  160. package/.framework/src/components/ui/combobox.tsx +305 -20
  161. package/.framework/src/components/ui/command.tsx +177 -11
  162. package/.framework/src/components/ui/context-menu.tsx +273 -17
  163. package/.framework/src/components/ui/dialog.tsx +209 -27
  164. package/.framework/src/components/ui/direction.tsx +64 -4
  165. package/.framework/src/components/ui/drawer.tsx +193 -12
  166. package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
  167. package/.framework/src/components/ui/empty.tsx +145 -9
  168. package/.framework/src/components/ui/field.tsx +209 -14
  169. package/.framework/src/components/ui/hover-card.tsx +81 -4
  170. package/.framework/src/components/ui/input-group.tsx +162 -10
  171. package/.framework/src/components/ui/input-otp.tsx +98 -5
  172. package/.framework/src/components/ui/input.tsx +49 -2
  173. package/.framework/src/components/ui/item.tsx +225 -13
  174. package/.framework/src/components/ui/kbd.tsx +65 -3
  175. package/.framework/src/components/ui/label.tsx +49 -2
  176. package/.framework/src/components/ui/menubar.tsx +289 -17
  177. package/.framework/src/components/ui/native-select.tsx +97 -5
  178. package/.framework/src/components/ui/navigation-menu.tsx +177 -10
  179. package/.framework/src/components/ui/pagination.tsx +161 -9
  180. package/.framework/src/components/ui/popover.tsx +145 -8
  181. package/.framework/src/components/ui/progress.tsx +49 -2
  182. package/.framework/src/components/ui/radio-group.tsx +65 -3
  183. package/.framework/src/components/ui/resizable.tsx +82 -4
  184. package/.framework/src/components/ui/scroll-area.tsx +65 -3
  185. package/.framework/src/components/ui/select.tsx +193 -11
  186. package/.framework/src/components/ui/separator.tsx +49 -2
  187. package/.framework/src/components/ui/sheet.tsx +193 -11
  188. package/.framework/src/components/ui/sidebar.tsx +481 -38
  189. package/.framework/src/components/ui/skeleton.tsx +49 -2
  190. package/.framework/src/components/ui/slider.tsx +49 -2
  191. package/.framework/src/components/ui/sonner.tsx +49 -2
  192. package/.framework/src/components/ui/spinner.tsx +49 -2
  193. package/.framework/src/components/ui/switch.tsx +49 -2
  194. package/.framework/src/components/ui/table-primitives.tsx +160 -33
  195. package/.framework/src/components/ui/table.tsx +161 -9
  196. package/.framework/src/components/ui/tabs.tsx +113 -6
  197. package/.framework/src/components/ui/textarea.tsx +49 -2
  198. package/.framework/src/components/ui/toggle-group.tsx +81 -4
  199. package/.framework/src/components/ui/toggle.tsx +65 -3
  200. package/.framework/src/components/ui/tooltip.tsx +97 -5
  201. package/.framework/src/contexts/AppContext.tsx +129 -45
  202. package/.framework/src/contexts/AuthContext.tsx +187 -144
  203. package/.framework/src/hooks/use-mobile.ts +48 -2
  204. package/.framework/src/hooks/useApi.ts +208 -159
  205. package/.framework/src/hooks/useAppPath.ts +32 -23
  206. package/.framework/src/hooks/useApps.ts +51 -20
  207. package/.framework/src/hooks/useEntityList.ts +32 -78
  208. package/.framework/src/hooks/useEntityRecord.ts +35 -96
  209. package/.framework/src/hooks/useForm.ts +32 -92
  210. package/.framework/src/hooks/useListSchema.ts +49 -78
  211. package/.framework/src/hooks/useSchemaRecord.ts +114 -105
  212. package/.framework/src/lib/api.ts +195 -116
  213. package/.framework/src/lib/supabase.ts +98 -64
  214. package/.framework/src/lib/utils.ts +287 -151
  215. package/.framework/src/main.tsx +49 -3
  216. package/.framework/src/pages/DashboardPage.tsx +52 -29
  217. package/.framework/src/pages/NotFoundPage.tsx +32 -10
  218. package/.framework/src/pages/SetupPage.tsx +32 -12
  219. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
  220. package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
  221. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
  222. package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
  223. package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
  224. package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
  225. package/.framework/src/pages/admin/AppsPage.tsx +49 -2
  226. package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
  227. package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
  228. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
  229. package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
  230. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
  231. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
  232. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
  233. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
  234. package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
  235. package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
  236. package/.framework/src/pages/admin/LogsPage.tsx +422 -75
  237. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
  238. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
  239. package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
  240. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
  241. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
  242. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
  243. package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
  244. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
  245. package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
  246. package/.framework/src/pages/admin/RolesPage.tsx +171 -18
  247. package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
  248. package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
  249. package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
  250. package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
  251. package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
  252. package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
  253. package/.framework/src/pages/admin/TimersPage.tsx +48 -20
  254. package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
  255. package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
  256. package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
  257. package/.framework/src/pages/admin/TypesPage.tsx +48 -20
  258. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
  259. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
  260. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
  261. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
  262. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
  263. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
  264. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
  265. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
  266. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
  267. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  268. package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
  269. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
  270. package/.framework/src/pages/auth/LoginPage.tsx +50 -23
  271. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
  272. package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
  273. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
  274. package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
  275. package/.framework/src/types/auth.ts +128 -71
  276. package/.framework/src/types/types.ts +373 -157
  277. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
  278. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
  279. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
  280. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
  281. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
  282. package/docs/README.md +9 -130
  283. package/netlify.toml +5 -2
  284. package/package.json +13 -25
  285. package/scripts/kb-ingest-docs.ts +203 -0
  286. package/spine.config.json +65 -4
  287. package/.framework/migrations/001_schema.sql +0 -425
  288. package/.framework/migrations/002_rls_and_functions.sql +0 -763
  289. package/.framework/migrations/004_enhancements.sql +0 -43
  290. package/.framework/migrations/005_auth_user_trigger.sql +0 -105
  291. package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
  292. package/.framework/migrations/016_invites.sql +0 -27
  293. package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
  294. package/.framework/migrations/018_apps_required_roles.sql +0 -17
  295. package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
  296. package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
  297. package/.framework/migrations/021_app_domains.sql +0 -112
  298. package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
  299. package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
  300. package/.framework/migrations/024_messages_account_id.sql +0 -9
  301. package/.framework/migrations/025_retype_threads_messages.sql +0 -240
  302. package/.framework/migrations/026_fix_rls_policies.sql +0 -47
  303. package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
  304. package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
  305. package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
  306. package/.framework/migrations/030_messages_updated_by.sql +0 -6
  307. package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
  308. package/docs/APPS.md +0 -232
  309. package/docs/ARCHITECTURE.md +0 -246
  310. package/docs/INSTALL.md +0 -155
  311. package/docs/design-schema-spec.md +0 -1837
  312. package/docs/dev-guides/01-create-an-app.md +0 -183
  313. package/docs/dev-guides/02-create-a-function.md +0 -178
  314. package/docs/dev-guides/03-create-a-component.md +0 -178
  315. package/docs/dev-guides/04-webhook-handlers.md +0 -129
  316. package/docs/dev-guides/05-testing.md +0 -168
  317. package/docs/dev-guides/README.md +0 -40
  318. package/docs/npm-packages-plan.md +0 -288
  319. package/docs/spine-core--api-reference.md +0 -822
@@ -1,43 +1,67 @@
1
- /**
2
- * @module testing
3
- * @audience custom-developer
4
- * @layer shared-util
5
- * @stability evolving
6
- *
7
- * Testing utilities for custom code developers.
8
- * Use these to test your custom functions without full deployment.
9
- *
10
- * **Usage in custom function tests:**
11
- * ```ts
12
- * import { makeTestContext, mockPrincipal, cleanup } from '@core/testing'
13
- *
14
- * describe('My Custom Handler', () => {
15
- * it('should process items', async () => {
16
- * const ctx = makeTestContext({
17
- * principal: mockPrincipal({ roles: ['member'] }),
18
- * accountId: 'test-account'
19
- * })
20
- *
21
- * const result = await myHandler(mockEvent, ctx)
22
- * expect(result.status).toBe('success')
23
- *
24
- * cleanup()
25
- * })
26
- * })
27
- * ```
28
- *
29
- * @seeAlso .framework/tests/unit/core-isolation.test.ts (examples)
30
- */
31
1
 
32
- import { adminDb } from './db'
33
2
 
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
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
+ import { adminDb } from './db'
29
+ // CIL[END chunk_id="testing_imports_1784020784"]
30
+ // CIL[BEGIN chunk_id="testing_testcontext_1784020784" type="interface" identity="TestContext" parent="none"]
31
+ // CIL[DOC-MACRO purpose="Define test context interface for unit tests"]
32
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide test environment with database, principal, logger"]
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."]
42
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
43
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
34
44
  export interface TestContext {
35
45
  db: typeof adminDb
36
46
  principal: TestPrincipal
37
47
  logger: TestLogger
38
48
  accountId: string
39
49
  }
40
-
50
+ // CIL[END chunk_id="testing_testcontext_1784020784"]
51
+ // CIL[BEGIN chunk_id="testing_testprincipal_1784020784" type="interface" identity="TestPrincipal" parent="none"]
52
+ // CIL[DOC-MACRO purpose="Define test principal interface for authentication testing"]
53
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide mock user identity and permissions structure"]
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."]
63
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
64
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
41
65
  export interface TestPrincipal {
42
66
  id: string
43
67
  account_id: string
@@ -45,28 +69,42 @@ export interface TestPrincipal {
45
69
  permissions: Record<string, any>
46
70
  email?: string
47
71
  }
48
-
72
+ // CIL[END chunk_id="testing_testprincipal_1784020784"]
73
+ // CIL[BEGIN chunk_id="testing_testlogger_1784020784" type="interface" identity="TestLogger" parent="none"]
74
+ // CIL[DOC-MACRO purpose="Define test logger interface for capturing log output"]
75
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide logging methods for test verification"]
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."]
85
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
86
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
49
87
  export interface TestLogger {
50
88
  info: (msg: string, meta?: any) => void
51
89
  warn: (msg: string, meta?: any) => void
52
90
  error: (msg: string, meta?: any) => void
53
91
  debug: (msg: string, meta?: any) => void
54
92
  }
55
-
56
- /**
57
- * Creates a mock principal for testing.
58
- *
59
- * @param overrides - Override default principal properties
60
- * @returns Mock principal object
61
- *
62
- * @example
63
- * ```ts
64
- * const admin = mockPrincipal({
65
- * roles: ['system_admin'],
66
- * permissions: { all: true }
67
- * })
68
- * ```
69
- */
93
+ // CIL[END chunk_id="testing_testlogger_1784020784"]
94
+ // CIL[BEGIN chunk_id="testing_mockprincipal_1784020784" type="function" identity="mockPrincipal" parent="none"]
95
+ // CIL[DOC-MACRO purpose="Create mock principal for testing authentication"]
96
+ // CIL[DOC-RESPONSIBILITY responsibility="Generate default test user with optional overrides"]
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."]
106
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
107
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
70
108
  export function mockPrincipal(overrides: Partial<TestPrincipal> = {}): TestPrincipal {
71
109
  return {
72
110
  id: 'test-user-id',
@@ -77,19 +115,21 @@ export function mockPrincipal(overrides: Partial<TestPrincipal> = {}): TestPrinc
77
115
  ...overrides
78
116
  }
79
117
  }
80
-
81
- /**
82
- * Creates a mock logger that captures logs for assertions.
83
- *
84
- * @returns TestLogger with log capture
85
- *
86
- * @example
87
- * ```ts
88
- * const logger = mockLogger()
89
- * await myFunction(logger)
90
- * expect(logger.getLogs()).toContain('Processing started')
91
- * ```
92
- */
118
+ // CIL[END chunk_id="testing_mockprincipal_1784020784"]
119
+ // CIL[BEGIN chunk_id="testing_mocklogger_1784020784" type="function" identity="mockLogger" parent="none"]
120
+ // CIL[DOC-MACRO purpose="Create mock logger that captures logs for test verification"]
121
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide in-memory logging with retrieval capability"]
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."]
131
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
132
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
93
133
  export function mockLogger(): TestLogger & { getLogs: () => string[] } {
94
134
  const logs: string[] = []
95
135
 
@@ -113,23 +153,21 @@ export function mockLogger(): TestLogger & { getLogs: () => string[] } {
113
153
  getLogs: () => [...logs]
114
154
  }
115
155
  }
116
-
117
- /**
118
- * Creates a test context for handler testing.
119
- *
120
- * @param options - Test context configuration
121
- * @returns TestContext ready for handler
122
- *
123
- * @example
124
- * ```ts
125
- * const ctx = makeTestContext({
126
- * principal: mockPrincipal({ roles: ['operator'] }),
127
- * accountId: 'my-account'
128
- * })
129
- *
130
- * const result = await handler(mockEvent, ctx)
131
- * ```
132
- */
156
+ // CIL[END chunk_id="testing_mocklogger_1784020784"]
157
+ // CIL[BEGIN chunk_id="testing_maketestcontext_1784020784" type="function" identity="makeTestContext" parent="none"]
158
+ // CIL[DOC-MACRO purpose="Create complete test context with defaults and overrides"]
159
+ // CIL[DOC-RESPONSIBILITY responsibility="Assemble test environment with database, principal, logger, account"]
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."]
169
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
170
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
133
171
  export function makeTestContext(options: {
134
172
  principal?: TestPrincipal
135
173
  accountId?: string
@@ -142,21 +180,21 @@ export function makeTestContext(options: {
142
180
  accountId: options.accountId || options.principal?.account_id || 'test-account'
143
181
  }
144
182
  }
145
-
146
- /**
147
- * Creates a mock API Gateway event.
148
- *
149
- * @param overrides - Override default event properties
150
- * @returns Mock event object
151
- *
152
- * @example
153
- * ```ts
154
- * const event = mockEvent({
155
- * httpMethod: 'POST',
156
- * body: JSON.stringify({ item_id: '123' })
157
- * })
158
- * ```
159
- */
183
+ // CIL[END chunk_id="testing_maketestcontext_1784020784"]
184
+ // CIL[BEGIN chunk_id="testing_mockevent_1784020784" type="function" identity="mockEvent" parent="none"]
185
+ // CIL[DOC-MACRO purpose="Create mock HTTP event for API testing"]
186
+ // CIL[DOC-RESPONSIBILITY responsibility="Generate default API gateway event structure"]
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."]
196
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
197
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
160
198
  export function mockEvent(overrides: any = {}): any {
161
199
  return {
162
200
  httpMethod: 'GET',
@@ -167,12 +205,21 @@ export function mockEvent(overrides: any = {}): any {
167
205
  ...overrides
168
206
  }
169
207
  }
170
-
171
- /**
172
- * Creates a mock Netlify function context.
173
- *
174
- * @returns Mock context object
175
- */
208
+ // CIL[END chunk_id="testing_mockevent_1784020784"]
209
+ // CIL[BEGIN chunk_id="testing_mocknetlifycontext_1784020784" type="function" identity="mockNetlifyContext" parent="none"]
210
+ // CIL[DOC-MACRO purpose="Create mock Netlify function context for testing"]
211
+ // CIL[DOC-RESPONSIBILITY responsibility="Generate Netlify runtime context mock object"]
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."]
221
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
222
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
176
223
  export function mockNetlifyContext(): any {
177
224
  return {
178
225
  awsRequestId: 'test-request-id',
@@ -183,33 +230,39 @@ export function mockNetlifyContext(): any {
183
230
  getRemainingTimeInMillis: () => 30000
184
231
  }
185
232
  }
186
-
187
- /**
188
- * Cleanup function for tests.
189
- * Clears caches and resets state.
190
- */
233
+ // CIL[END chunk_id="testing_mocknetlifycontext_1784020784"]
234
+ // CIL[BEGIN chunk_id="testing_cleanup_1784020784" type="function" identity="cleanup" parent="none"]
235
+ // CIL[DOC-MACRO purpose="Clean up test environment after test execution"]
236
+ // CIL[DOC-RESPONSIBILITY responsibility="Perform post-test cleanup operations"]
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."]
246
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
247
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
191
248
  export function cleanup(): void {
192
- // Clear any caches or state that might persist between tests
193
- // This is a placeholder - actual implementation would clear specific state
194
249
  console.log('Test cleanup completed')
195
250
  }
196
-
197
- /**
198
- * Setup helper for test files.
199
- * Returns utilities commonly needed in tests.
200
- *
201
- * @example
202
- * ```ts
203
- * import { setupTests } from '@core/testing'
204
- *
205
- * const { makeTestContext, mockPrincipal, cleanup } = setupTests()
206
- *
207
- * describe('My Tests', () => {
208
- * afterEach(cleanup)
209
- * // ... tests
210
- * })
211
- * ```
212
- */
251
+ // CIL[END chunk_id="testing_cleanup_1784020784"]
252
+ // CIL[BEGIN chunk_id="testing_setuptests_1784020784" type="function" identity="setupTests" parent="none"]
253
+ // CIL[DOC-MACRO purpose="Export all testing utilities in single object"]
254
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide comprehensive testing toolkit"]
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="implementation_pattern" content="" status="pending_human_input"]
265
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
213
266
  export function setupTests() {
214
267
  return {
215
268
  makeTestContext,
@@ -220,13 +273,21 @@ export function setupTests() {
220
273
  cleanup
221
274
  }
222
275
  }
223
-
224
- /**
225
- * Asserts that a handler response matches expected structure.
226
- *
227
- * @param response - Handler response
228
- * @param expectedStatus - Expected status code
229
- */
276
+ // CIL[END chunk_id="testing_setuptests_1784020784"]
277
+ // CIL[BEGIN chunk_id="testing_expectsuccessresponse_1784020784" type="function" identity="expectSuccessResponse" parent="none"]
278
+ // CIL[DOC-MACRO purpose="Assert HTTP response indicates success"]
279
+ // CIL[DOC-RESPONSIBILITY responsibility="Validate successful API response format"]
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."]
289
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
290
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
230
291
  export function expectSuccessResponse(
231
292
  response: { statusCode?: number; body?: string },
232
293
  expectedStatus: number = 200
@@ -238,13 +299,21 @@ export function expectSuccessResponse(
238
299
  expect(body.error).toBeUndefined()
239
300
  }
240
301
  }
241
-
242
- /**
243
- * Asserts that a handler returned an error.
244
- *
245
- * @param response - Handler response
246
- * @param expectedStatus - Expected error status code
247
- */
302
+ // CIL[END chunk_id="testing_expectsuccessresponse_1784020784"]
303
+ // CIL[BEGIN chunk_id="testing_expecterrorresponse_1784020784" type="function" identity="expectErrorResponse" parent="none"]
304
+ // CIL[DOC-MACRO purpose="Assert HTTP response indicates error"]
305
+ // CIL[DOC-RESPONSIBILITY responsibility="Validate error API response format"]
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."]
315
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
316
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
248
317
  export function expectErrorResponse(
249
318
  response: { statusCode?: number; body?: string },
250
319
  expectedStatus: number = 400
@@ -256,3 +325,4 @@ export function expectErrorResponse(
256
325
  expect(body.error || body.message).toBeDefined()
257
326
  }
258
327
  }
328
+ // CIL[END chunk_id="testing_expecterrorresponse_1784020784"]