spine-framework 0.3.145 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/.env.example +76 -0
  2. package/.framework/.spine-manifest.json +19 -0
  3. package/.framework/cli/commands/agents.ts +61 -33
  4. package/.framework/cli/commands/auth.ts +60 -28
  5. package/.framework/cli/commands/create-app.ts +212 -80
  6. package/.framework/cli/commands/dev.ts +184 -68
  7. package/.framework/cli/commands/doctor.ts +324 -152
  8. package/.framework/cli/commands/generate.ts +119 -68
  9. package/.framework/cli/commands/init.ts +141 -242
  10. package/.framework/cli/commands/install-app.ts +1336 -314
  11. package/.framework/cli/commands/items.ts +31 -29
  12. package/.framework/cli/commands/migrate.ts +299 -156
  13. package/.framework/cli/commands/migrations.ts +62 -30
  14. package/.framework/cli/commands/pipelines.ts +31 -29
  15. package/.framework/cli/commands/status.ts +105 -45
  16. package/.framework/cli/commands/system.ts +47 -42
  17. package/.framework/cli/commands/test.ts +161 -102
  18. package/.framework/cli/commands/upgrade.ts +260 -0
  19. package/.framework/cli/commands/validate-app.ts +517 -161
  20. package/.framework/cli/context.ts +117 -85
  21. package/.framework/cli/env-loader.ts +74 -43
  22. package/.framework/cli/index.ts +70 -46
  23. package/.framework/cli/lib/project-files.ts +404 -0
  24. package/.framework/docs/guides/testing-guide.md +1 -1
  25. package/.framework/docs/runtime-types.md +72 -72
  26. package/.framework/functions/_shared/access.ts +84 -0
  27. package/.framework/functions/_shared/agent-runner.ts +5067 -1026
  28. package/.framework/functions/_shared/app-manifest.ts +214 -94
  29. package/.framework/functions/_shared/ast.ts +214 -0
  30. package/.framework/functions/_shared/audit.ts +91 -55
  31. package/.framework/functions/_shared/cil.ts +368 -127
  32. package/.framework/functions/_shared/db.ts +337 -68
  33. package/.framework/functions/_shared/funnel.ts +228 -0
  34. package/.framework/functions/_shared/geo.ts +105 -0
  35. package/.framework/functions/_shared/hash-api-key.ts +94 -17
  36. package/.framework/functions/_shared/index.ts +22 -224
  37. package/.framework/functions/_shared/kb.ts +832 -58
  38. package/.framework/functions/_shared/llm.ts +118 -18
  39. package/.framework/functions/_shared/logging.ts +317 -19
  40. package/.framework/functions/_shared/middleware.ts +701 -131
  41. package/.framework/functions/_shared/notify.ts +70 -0
  42. package/.framework/functions/_shared/outcomes.ts +34 -19
  43. package/.framework/functions/_shared/permissions.ts +501 -315
  44. package/.framework/functions/_shared/pipeline-runner.ts +704 -155
  45. package/.framework/functions/_shared/principal.ts +436 -263
  46. package/.framework/functions/_shared/rate-limit.ts +233 -0
  47. package/.framework/functions/_shared/resolve-credentials.ts +86 -19
  48. package/.framework/functions/_shared/resolve-ids.ts +203 -139
  49. package/.framework/functions/_shared/retry-deliveries.ts +51 -16
  50. package/.framework/functions/_shared/schema-utils.ts +602 -521
  51. package/.framework/functions/_shared/security.ts +345 -0
  52. package/.framework/functions/_shared/testing.ts +197 -172
  53. package/.framework/functions/_shared/tracing.ts +351 -21
  54. package/.framework/functions/_shared/trigger-engine.ts +425 -136
  55. package/.framework/functions/_shared/webhook-registration.ts +71 -70
  56. package/.framework/functions/_shared/webhook-registry.ts +126 -83
  57. package/.framework/functions/account-nodes.ts +30 -30
  58. package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
  59. package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
  60. package/.framework/functions/adapters/openai-outbound.ts +15 -16
  61. package/.framework/functions/admin-data.ts +596 -173
  62. package/.framework/functions/admin-funnel.ts +64 -60
  63. package/.framework/functions/admin-install-funnel.ts +84 -66
  64. package/.framework/functions/admin-signals.ts +69 -51
  65. package/.framework/functions/ai-agents.ts +431 -106
  66. package/.framework/functions/ai-interactions.ts +186 -112
  67. package/.framework/functions/api-keys.ts +107 -107
  68. package/.framework/functions/apps.ts +154 -136
  69. package/.framework/functions/auth.ts +83 -65
  70. package/.framework/functions/cil-agent-ingest.ts +189 -232
  71. package/.framework/functions/cil-agent.ts +433 -177
  72. package/.framework/functions/cil-callmap.ts +642 -430
  73. package/.framework/functions/cil-config.ts +139 -135
  74. package/.framework/functions/cil-context.ts +214 -127
  75. package/.framework/functions/cil-doc.ts +587 -458
  76. package/.framework/functions/cil-embeddings.ts +453 -364
  77. package/.framework/functions/cil-graph.ts +427 -142
  78. package/.framework/functions/cil-ingest.ts +1418 -1154
  79. package/.framework/functions/cil-pipeline.ts +276 -21
  80. package/.framework/functions/cil-project.ts +659 -132
  81. package/.framework/functions/cil-validate.ts +198 -164
  82. package/.framework/functions/debug-auth.ts +57 -55
  83. package/.framework/functions/deliveries.ts +80 -21
  84. package/.framework/functions/embeddings.ts +1023 -318
  85. package/.framework/functions/eval-harness.ts +146 -108
  86. package/.framework/functions/integration-outbound.ts +205 -75
  87. package/.framework/functions/integration-routes.ts +128 -23
  88. package/.framework/functions/integrations.ts +125 -100
  89. package/.framework/functions/invites.ts +1095 -460
  90. package/.framework/functions/item-progress.ts +158 -102
  91. package/.framework/functions/kb.ts +34 -10
  92. package/.framework/functions/logs.ts +133 -133
  93. package/.framework/functions/observability.ts +152 -122
  94. package/.framework/functions/pipeline-executions.ts +147 -132
  95. package/.framework/functions/pipelines.ts +134 -119
  96. package/.framework/functions/prompt-configs.ts +96 -80
  97. package/.framework/functions/roles.ts +112 -82
  98. package/.framework/functions/security.ts +450 -0
  99. package/.framework/functions/system-cron.ts +117 -80
  100. package/.framework/functions/system.ts +158 -98
  101. package/.framework/functions/tests.ts +29 -29
  102. package/.framework/functions/timers.ts +94 -95
  103. package/.framework/functions/trigger-scheduler.ts +10 -0
  104. package/.framework/functions/triggers.ts +179 -149
  105. package/.framework/functions/types.ts +137 -125
  106. package/.framework/mcp/index.ts +133 -0
  107. package/.framework/mcp/load-env.ts +60 -0
  108. package/.framework/mcp/shared/app-manifest.ts +275 -0
  109. package/.framework/mcp/shared/db.ts +477 -0
  110. package/.framework/mcp/shared/kb.ts +118 -0
  111. package/.framework/mcp/tools/architect.ts +431 -0
  112. package/.framework/mcp/tools/cil/context.ts +345 -0
  113. package/.framework/mcp/tools/cil/graph.ts +242 -0
  114. package/.framework/mcp/tools/cil/ingest.ts +1217 -0
  115. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
  116. package/.framework/mcp/tools/cil/pipeline.ts +767 -0
  117. package/.framework/mcp/tools/cil/project.ts +791 -0
  118. package/.framework/mcp/tools/cil/retrieval.ts +336 -0
  119. package/.framework/mcp/tools/cil/search-core.ts +454 -0
  120. package/.framework/mcp/tools/cil/search.ts +97 -0
  121. package/.framework/mcp/tools/cil/suggest.ts +186 -0
  122. package/.framework/mcp/tools/cil/validate.ts +1369 -0
  123. package/.framework/mcp/tools/kb/delete.ts +139 -0
  124. package/.framework/mcp/tools/kb/index.ts +52 -0
  125. package/.framework/mcp/tools/kb/ingest.ts +84 -0
  126. package/.framework/mcp/tools/kb/list-types.ts +102 -0
  127. package/.framework/mcp/tools/kb/publish.ts +100 -0
  128. package/.framework/mcp/tools/kb/reindex.ts +86 -0
  129. package/.framework/mcp/tools/kb/revoke.ts +85 -0
  130. package/.framework/mcp/tools/kb/search.ts +101 -0
  131. package/.framework/mcp/tools/kb/upsert.ts +125 -0
  132. package/.framework/mcp/tools/observability.ts +510 -0
  133. package/.framework/migrations/001_core_schema.sql +15 -0
  134. package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
  135. package/.framework/migrations/003_core_system_data.sql +16 -1
  136. package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
  137. package/.framework/migrations/005_core_observability.sql +17 -1
  138. package/.framework/migrations/006_security_hardening_rls.sql +15 -0
  139. package/.framework/migrations/007_kb_article_list.sql +17 -1
  140. package/.framework/migrations/008_items_target.sql +15 -0
  141. package/.framework/migrations/009_roles_slug_unique.sql +15 -0
  142. package/.framework/migrations/010_auth_user_trigger.sql +15 -0
  143. package/.framework/migrations/011_spine_system_account.sql +16 -0
  144. package/.framework/migrations/012_service_role_grants.sql +16 -0
  145. package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
  146. package/.framework/migrations/014_apps_required_roles.sql +16 -0
  147. package/.framework/migrations/015_types_kind_slug_unique.sql +15 -0
  148. package/.framework/migrations/016_cil_types.sql +281 -0
  149. package/.framework/migrations/017_cil_stable_ids.sql +37 -0
  150. package/.framework/migrations/018_runtime_tables.sql +129 -0
  151. package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
  152. package/.framework/migrations/020_schema_reconciliation.sql +67 -0
  153. package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
  154. package/.framework/migrations/032_cil_status_migration.sql +73 -0
  155. package/.framework/migrations/033_cil_versioning.sql +73 -0
  156. package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
  157. package/.framework/migrations/035_rate_limits.sql +55 -0
  158. package/.framework/migrations/036_demo_record_flags.sql +72 -0
  159. package/.framework/migrations/037_kb_types_canonical.sql +244 -0
  160. package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
  161. package/.framework/migrations/042_registration_hierarchy.sql +309 -0
  162. package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
  163. package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
  164. package/.framework/migrations/045_security_critical_rls.sql +139 -0
  165. package/.framework/migrations/046_security_missing_rls.sql +79 -0
  166. package/.framework/migrations/047_people_updated_by.sql +27 -0
  167. package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
  168. package/.framework/migrations/049_security_blocklist.sql +148 -0
  169. package/.framework/migrations/050_notifications.sql +49 -0
  170. package/.framework/migrations/051_message_agent_fields.sql +74 -0
  171. package/.framework/migrations/052_registration_security.sql +421 -0
  172. package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
  173. package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
  174. package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
  175. package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
  176. package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
  177. package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
  178. package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
  179. package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
  180. package/.framework/migrations/061_fk_dedup.sql +32 -0
  181. package/.framework/public/spine-logo.svg +10 -3
  182. package/.framework/scripts/app-install-cli.ts +190 -93
  183. package/.framework/scripts/assemble-frontend.sh +127 -44
  184. package/.framework/scripts/assemble-functions.sh +128 -30
  185. package/.framework/scripts/boundary-check.sh +6 -2
  186. package/.framework/scripts/build-manifest.sh +24 -68
  187. package/.framework/scripts/check-core-integrity.sh +15 -76
  188. package/.framework/scripts/checksum-manifest.mts +343 -0
  189. package/.framework/scripts/cil-migrate-markers.ts +403 -0
  190. package/.framework/scripts/fix-cil-markers.mjs +176 -0
  191. package/.framework/scripts/verify-integrity.sh +21 -57
  192. package/.framework/scripts/verify-manifest.mts +305 -0
  193. package/.framework/seeds/types/funnel_signal_use.json +74 -21
  194. package/.framework/seeds/types/spine_instance.json +73 -21
  195. package/.framework/src/App.tsx +118 -72
  196. package/.framework/src/apps/admin/index.tsx +855 -58
  197. package/.framework/src/components/AppWrapper.tsx +43 -45
  198. package/.framework/src/components/CustomAppLoader.tsx +160 -116
  199. package/.framework/src/components/admin/AdminListPage.tsx +46 -44
  200. package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
  201. package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
  202. package/.framework/src/components/admin/PageInstructions.tsx +98 -2
  203. package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
  204. package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
  205. package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
  206. package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
  207. package/.framework/src/components/app-sidebar.tsx +42 -45
  208. package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
  209. package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
  210. package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
  211. package/.framework/src/components/kb/KBArticleList.tsx +251 -10
  212. package/.framework/src/components/layout/AppShell.tsx +51 -45
  213. package/.framework/src/components/layout/Header.tsx +42 -43
  214. package/.framework/src/components/layout/Layout.tsx +46 -46
  215. package/.framework/src/components/layout/Sidebar.tsx +196 -96
  216. package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
  217. package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
  218. package/.framework/src/components/runtime/DataFilters.tsx +49 -74
  219. package/.framework/src/components/runtime/DataHeader.tsx +53 -32
  220. package/.framework/src/components/runtime/DataListPage.tsx +51 -155
  221. package/.framework/src/components/runtime/DataStats.tsx +66 -44
  222. package/.framework/src/components/runtime/DataTable.tsx +49 -149
  223. package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
  224. package/.framework/src/components/runtime/index.ts +119 -16
  225. package/.framework/src/components/search-form.tsx +46 -29
  226. package/.framework/src/components/shared/AgentView.tsx +65 -48
  227. package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
  228. package/.framework/src/components/shared/InviteManager.tsx +207 -97
  229. package/.framework/src/components/shared/MemberList.tsx +97 -0
  230. package/.framework/src/components/shared/SchemaFields.tsx +107 -86
  231. package/.framework/src/components/ui/DataTable.tsx +80 -68
  232. package/.framework/src/components/ui/Form.tsx +157 -146
  233. package/.framework/src/components/ui/ItemCard.tsx +74 -67
  234. package/.framework/src/components/ui/ItemListView.tsx +73 -68
  235. package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
  236. package/.framework/src/components/ui/Modal.tsx +78 -68
  237. package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
  238. package/.framework/src/components/ui/accordion.tsx +85 -86
  239. package/.framework/src/components/ui/alert-dialog.tsx +197 -184
  240. package/.framework/src/components/ui/alert.tsx +105 -94
  241. package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
  242. package/.framework/src/components/ui/avatar.tsx +122 -107
  243. package/.framework/src/components/ui/badge.tsx +60 -55
  244. package/.framework/src/components/ui/breadcrumb.tsx +127 -128
  245. package/.framework/src/components/ui/button-group.tsx +86 -72
  246. package/.framework/src/components/ui/button.tsx +71 -50
  247. package/.framework/src/components/ui/calendar.tsx +72 -57
  248. package/.framework/src/components/ui/card.tsx +136 -129
  249. package/.framework/src/components/ui/carousel.tsx +226 -107
  250. package/.framework/src/components/ui/chart.tsx +252 -147
  251. package/.framework/src/components/ui/checkbox.tsx +43 -44
  252. package/.framework/src/components/ui/collapsible.tsx +86 -71
  253. package/.framework/src/components/ui/combobox.tsx +282 -249
  254. package/.framework/src/components/ui/command.tsx +158 -146
  255. package/.framework/src/components/ui/context-menu.tsx +239 -240
  256. package/.framework/src/components/ui/dialog.tsx +174 -157
  257. package/.framework/src/components/ui/direction.tsx +72 -56
  258. package/.framework/src/components/ui/drawer.tsx +168 -169
  259. package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
  260. package/.framework/src/components/ui/empty.tsx +131 -120
  261. package/.framework/src/components/ui/field.tsx +205 -173
  262. package/.framework/src/components/ui/hover-card.tsx +71 -72
  263. package/.framework/src/components/ui/input-group.tsx +148 -133
  264. package/.framework/src/components/ui/input-otp.tsx +99 -86
  265. package/.framework/src/components/ui/input.tsx +43 -41
  266. package/.framework/src/components/ui/item.tsx +207 -185
  267. package/.framework/src/components/ui/kbd.tsx +57 -56
  268. package/.framework/src/components/ui/label.tsx +45 -41
  269. package/.framework/src/components/ui/menubar.tsx +268 -236
  270. package/.framework/src/components/ui/native-select.tsx +85 -86
  271. package/.framework/src/components/ui/navigation-menu.tsx +166 -156
  272. package/.framework/src/components/ui/pagination.tsx +131 -141
  273. package/.framework/src/components/ui/popover.tsx +125 -128
  274. package/.framework/src/components/ui/progress.tsx +47 -44
  275. package/.framework/src/components/ui/radio-group.tsx +60 -55
  276. package/.framework/src/components/ui/resizable.tsx +85 -72
  277. package/.framework/src/components/ui/scroll-area.tsx +57 -58
  278. package/.framework/src/components/ui/select.tsx +182 -169
  279. package/.framework/src/components/ui/separator.tsx +42 -43
  280. package/.framework/src/components/ui/sheet.tsx +170 -159
  281. package/.framework/src/components/ui/sidebar.tsx +395 -398
  282. package/.framework/src/components/ui/skeleton.tsx +42 -43
  283. package/.framework/src/components/ui/slider.tsx +61 -44
  284. package/.framework/src/components/ui/sonner.tsx +44 -44
  285. package/.framework/src/components/ui/spinner.tsx +47 -42
  286. package/.framework/src/components/ui/switch.tsx +56 -42
  287. package/.framework/src/components/ui/table-primitives.tsx +272 -132
  288. package/.framework/src/components/ui/table.tsx +140 -142
  289. package/.framework/src/components/ui/tabs.tsx +110 -93
  290. package/.framework/src/components/ui/textarea.tsx +43 -44
  291. package/.framework/src/components/ui/toggle-group.tsx +87 -71
  292. package/.framework/src/components/ui/toggle.tsx +56 -56
  293. package/.framework/src/components/ui/tooltip.tsx +99 -85
  294. package/.framework/src/contexts/AppContext.tsx +166 -114
  295. package/.framework/src/contexts/AuthContext.tsx +232 -137
  296. package/.framework/src/hooks/use-mobile.ts +43 -44
  297. package/.framework/src/hooks/useApi.ts +185 -172
  298. package/.framework/src/hooks/useAppPath.ts +31 -29
  299. package/.framework/src/hooks/useApps.ts +77 -42
  300. package/.framework/src/hooks/useEntityList.ts +66 -29
  301. package/.framework/src/hooks/useEntityRecord.ts +76 -32
  302. package/.framework/src/hooks/useForm.ts +62 -30
  303. package/.framework/src/hooks/useListSchema.ts +60 -43
  304. package/.framework/src/hooks/useSchemaRecord.ts +115 -95
  305. package/.framework/src/lib/api.ts +258 -134
  306. package/.framework/src/lib/registration.ts +181 -0
  307. package/.framework/src/lib/supabase.ts +118 -81
  308. package/.framework/src/lib/utils.ts +266 -266
  309. package/.framework/src/main.tsx +43 -44
  310. package/.framework/src/pages/DashboardPage.tsx +44 -43
  311. package/.framework/src/pages/NoAppPage.tsx +50 -0
  312. package/.framework/src/pages/NotFoundPage.tsx +32 -29
  313. package/.framework/src/pages/SetupPage.tsx +34 -33
  314. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
  315. package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
  316. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
  317. package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
  318. package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
  319. package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
  320. package/.framework/src/pages/admin/AppsPage.tsx +45 -42
  321. package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
  322. package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
  323. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
  324. package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
  325. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
  326. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
  327. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
  328. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
  329. package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
  330. package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
  331. package/.framework/src/pages/admin/LogsPage.tsx +87 -137
  332. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
  333. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
  334. package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
  335. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
  336. package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
  337. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
  338. package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
  339. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
  340. package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
  341. package/.framework/src/pages/admin/RolesPage.tsx +47 -164
  342. package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
  343. package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
  344. package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
  345. package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
  346. package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
  347. package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
  348. package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
  349. package/.framework/src/pages/admin/TimersPage.tsx +44 -42
  350. package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
  351. package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
  352. package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
  353. package/.framework/src/pages/admin/TypesPage.tsx +45 -42
  354. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
  355. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
  356. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
  357. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
  358. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
  359. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
  360. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
  361. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
  362. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
  363. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
  364. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
  365. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
  366. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  367. package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
  368. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
  369. package/.framework/src/pages/auth/LoginPage.tsx +38 -32
  370. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
  371. package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
  372. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
  373. package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
  374. package/.framework/src/types/auth.ts +101 -93
  375. package/.framework/src/types/types.ts +283 -262
  376. package/.framework/templates/project.json +87 -0
  377. package/.framework/templates/spine.config.neutral.json +7 -0
  378. package/.framework/tests/api/api-surface.test.ts +381 -0
  379. package/.framework/tests/fixtures/seed.ts +427 -0
  380. package/.framework/tests/fixtures/teardown.ts +228 -0
  381. package/.framework/tests/reporter.ts +351 -0
  382. package/.framework/tests/setup.ts +135 -0
  383. package/.framework/tests/ui/ui-sweep.ts +278 -0
  384. package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
  385. package/.framework/tests/unit/agent-runner.test.ts +2389 -0
  386. package/.framework/tests/unit/ai-interactions.test.ts +81 -0
  387. package/.framework/tests/unit/app-manifest.test.ts +359 -0
  388. package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
  389. package/.framework/tests/unit/cil-determinism.test.ts +85 -0
  390. package/.framework/tests/unit/core-isolation.test.ts +153 -0
  391. package/.framework/tests/unit/funnel-signals.test.ts +135 -0
  392. package/.framework/tests/unit/install-app.test.ts +1759 -0
  393. package/.framework/tests/unit/invites-security.test.ts +572 -0
  394. package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
  395. package/.framework/tests/unit/kb-search.test.ts +119 -0
  396. package/.framework/tests/unit/migrate.test.ts +509 -0
  397. package/.framework/tests/unit/notify.test.ts +136 -0
  398. package/.framework/tests/unit/permissions.test.ts +269 -0
  399. package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
  400. package/.framework/tests/unit/principal-cache.test.ts +138 -0
  401. package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
  402. package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
  403. package/.framework/tests/unit/schema-utils.test.ts +225 -0
  404. package/.framework/tests/unit/trigger-engine.test.ts +513 -0
  405. package/.framework/tests/unit/validate-app.test.ts +527 -0
  406. package/README.md +34 -3
  407. package/bin/spine-framework.cjs +1 -0
  408. package/config/tailwind.config.cjs +7 -0
  409. package/config/tsconfig.functions.json +42 -0
  410. package/config/tsconfig.json +37 -9
  411. package/config/vite.config.ts +31 -2
  412. package/netlify.toml +31 -3
  413. package/package.json +46 -29
  414. package/scripts/assemble-frontend.sh +127 -44
  415. package/scripts/assemble-functions.sh +127 -29
  416. package/scripts/boundary-check.sh +6 -2
  417. package/scripts/build-manifest.sh +24 -68
  418. package/scripts/checksum-manifest.mts +345 -0
  419. package/scripts/dev-clean.sh +86 -0
  420. package/scripts/dev-netlify.sh +49 -0
  421. package/scripts/netlify-dev-wrapper.sh +2 -0
  422. package/scripts/verify-install.ts +358 -0
  423. package/scripts/verify-integrity.sh +21 -57
  424. package/scripts/verify-manifest.mts +305 -0
  425. package/templates/project/gitignore +45 -0
  426. package/{config → templates/project}/package-lock.json +22335 -9366
  427. package/vitest.config.ts +46 -0
  428. package/.framework/public/spine.config.json +0 -91
  429. package/config/deno.lock +0 -108
  430. package/config/tsconfig.node.tsbuildinfo +0 -1
  431. package/config/tsconfig.tsbuildinfo +0 -1
  432. package/config/vite.config.d.ts +0 -2
  433. package/custom/.devin/AGENT.md +0 -357
  434. package/custom/.devin/skills/install-app/SKILL.md +0 -39
  435. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
  436. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
  437. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
  438. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
  439. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
  440. package/custom/.devin/workflows/app-install.yaml +0 -83
  441. package/custom/README.md +0 -79
  442. package/docs/README.md +0 -15
  443. package/scripts/app-install-cli.ts +0 -286
  444. package/scripts/check-core-integrity.sh +0 -82
  445. package/scripts/ingest-chunks.cjs +0 -202
  446. package/scripts/kb-chunk-parser.cjs +0 -312
  447. package/scripts/kb-chunk-parser.ts +0 -330
  448. package/scripts/kb-ingest-docs.ts +0 -203
  449. package/scripts/load-test-app-install.ts +0 -484
  450. package/scripts/test-login.js +0 -33
  451. package/spine.config.json +0 -91
@@ -1,23 +1,31 @@
1
- // CIL[BEGIN chunk_id="tracing_moduleheader_1785012345" type="module_header" identity="module_header" parent="none"]
2
- // CIL[DOC-MACRO purpose="W3C Trace Context propagation and span lifecycle for runtime evidence"]
3
- // CIL[DOC-RESPONSIBILITY responsibility="Generate, parse, and manage trace/span IDs and timing"]
4
- // CIL[DOC-CONTEXT module="_shared.tracing" layer="infrastructure" related_files="[]"]
5
- // CIL[DOC-CONTRACT inputs="headers or CoreContext" outputs="TraceContext, Span records" errors="invalid traceparent" side_effects="none"]
6
- // CIL[DOC-MICRO logic_summary="Implements W3C traceparent/tracestate parsing, span creation, and withSpan wrapper for distributed tracing" notable_decisions=["Use crypto.randomUUID-derived hex IDs", "Store spans in logs table via emitAudit/emitSpan"] ]
7
- // CIL[DOC-CONFIDENCE pass="first" score="0.90" flags="none"]
8
- // CIL[DOC-STABILITY stability="experimental"]
9
- // CIL[DOC-AUDIENCE audience="developer"]
1
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/tracing.ts"]
2
+ // CIL[DOC-MACRO purpose="Shared tracing utilities for OpenTelemetry-style context, spans and id generation"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Import the crypto module and serve as the module-level CIL header"]
4
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
5
+ // CIL[DOC-CONTRACT inputs="" outputs="" errors="" side_effects=""]
6
+ // CIL[DOC-MICRO logic_summary="Imports randomUUID from the crypto module and establishes the tracing module namespace" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stable]
9
+ // CIL[DOC-AUDIENCE audience="functions, shared utilities"]
10
+
10
11
  import { randomUUID } from 'crypto'
11
- // CIL[END chunk_id="tracing_moduleheader_1785012345"]
12
- // CIL[BEGIN chunk_id="tracing_functions_1785012345" type="module_exports" identity="functions" parent="tracing_moduleheader_1785012345"]
13
- // CIL[DOC-MACRO purpose="W3C Trace Context helpers, span lifecycle, and traced database wrapper"]
14
- // CIL[DOC-RESPONSIBILITY responsibility="Provide trace/span ID generation, parse/format traceparent/tracestate, and run code inside traced spans"]
15
- // CIL[DOC-CONTEXT module="_shared.tracing" layer="infrastructure" related_files="[]"]
16
- // CIL[DOC-CONTRACT inputs="headers or CoreContext" outputs="TraceContext, Span records, traced proxies" errors="invalid traceparent" side_effects="none"]
17
- // CIL[DOC-MICRO logic_summary="Exports helpers for W3C trace context, span creation, withSpan wrappers, and a Supabase client proxy that emits db spans" notable_decisions=["Use crypto.randomUUID-derived hex IDs", "traceDb skips logs table to prevent recursive inserts"] ]
18
- // CIL[DOC-CONFIDENCE pass="first" score="0.90" flags="none"]
19
- // CIL[DOC-STABILITY stability="experimental"]
12
+ // CIL[DOC-VECTOR type="context" content="purpose='Shared tracing utilities for OpenTelemetry-style context, spans and id generation'; No verified external callers; imports: none"]
13
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
14
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
15
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
16
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
17
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
18
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:module_header:module_header"]
19
+
20
20
 
21
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:TraceContext:interface" type="interface" identity="TraceContext" parent="~/.framework/functions/_shared/tracing.ts"]
22
+ // CIL[DOC-MACRO purpose="Defines the immutable trace context carried with every operation"]
23
+ // CIL[DOC-RESPONSIBILITY responsibility="Model the fields that identify a distributed trace and its sampling state"]
24
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
25
+ // CIL[DOC-CONTRACT inputs="none (structural interface)" outputs="none (structural interface)" errors="none" side_effects="none"]
26
+ // CIL[DOC-MICRO logic_summary="Trace identifiers, span ids, parent link, trace flags, optional state and sampled boolean" notable_decisions="[]"]
27
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
28
+ // CIL[DOC-STABILITY stable]
21
29
  export interface TraceContext {
22
30
  traceId: string
23
31
  spanId: string
@@ -26,7 +34,23 @@ export interface TraceContext {
26
34
  traceState?: string
27
35
  sampled: boolean
28
36
  }
37
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the immutable trace context carried with every operation'; No verified external callers; imports: none"]
38
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
39
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
40
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
41
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
42
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
43
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:TraceContext:interface"]
44
+
29
45
 
46
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:Span:interface" type="interface" identity="Span" parent="~/.framework/functions/_shared/tracing.ts"]
47
+ // CIL[DOC-MACRO purpose="Defines a span as a concrete trace context plus timing and status"]
48
+ // CIL[DOC-RESPONSIBILITY responsibility="Extend TraceContext with a name, start/end times, duration and optional attributes"]
49
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
50
+ // CIL[DOC-CONTRACT inputs="none (structural interface)" outputs="none (structural interface)" errors="none" side_effects="none"]
51
+ // CIL[DOC-MICRO logic_summary="Adds spanName, startedAt, endedAt, durationMs, status and attributes to TraceContext" notable_decisions="[]"]
52
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
53
+ // CIL[DOC-STABILITY stable]
30
54
  export interface Span extends TraceContext {
31
55
  spanName: string
32
56
  startedAt: string
@@ -35,32 +59,150 @@ export interface Span extends TraceContext {
35
59
  status?: 'ok' | 'error'
36
60
  attributes?: Record<string, any>
37
61
  }
62
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines a span as a concrete trace context plus timing and status'; No verified external callers; imports: none"]
63
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
64
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
65
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
66
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
67
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
68
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:Span:interface"]
38
69
 
70
+
71
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:CoreContextWithTrace:interface" type="interface" identity="CoreContextWithTrace" parent="~/.framework/functions/_shared/tracing.ts"]
72
+ // CIL[DOC-MACRO purpose="Extends a generic core context with an optional trace field"]
73
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a typed container that may carry trace context among other fields"]
74
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
75
+ // CIL[DOC-CONTRACT inputs="none (structural interface)" outputs="none (structural interface)" errors="none" side_effects="none"]
76
+ // CIL[DOC-MICRO logic_summary="Index signature allows additional properties while optionally holding a TraceContext" notable_decisions="[]"]
77
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
78
+ // CIL[DOC-STABILITY stable]
39
79
  export interface CoreContextWithTrace {
40
80
  trace?: TraceContext
41
81
  [key: string]: any
42
82
  }
83
+ // CIL[DOC-VECTOR type="context" content="purpose='Extends a generic core context with an optional trace field'; No verified external callers; imports: none"]
84
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
85
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
86
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
87
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
88
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
89
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:CoreContextWithTrace:interface"]
90
+
43
91
 
92
+
93
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:TRACEPARENT_RE:constant" type="constant" identity="TRACEPARENT_RE" parent="~/.framework/functions/_shared/tracing.ts"]
94
+ // CIL[DOC-MACRO purpose="Regular expression that parses W3C traceparent version 00 headers"]
95
+ // CIL[DOC-RESPONSIBILITY responsibility="Validate and capture trace-id, parent-id and trace-flags from a traceparent string"]
96
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
97
+ // CIL[DOC-CONTRACT inputs="string to match" outputs="RegExp match groups for trace id, span id and flags" errors="none" side_effects="none"]
98
+ // CIL[DOC-MICRO logic_summary="Anchored case-insensitive regex for 00-traceid-spanid-flags format" notable_decisions="[]"]
99
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
100
+ // CIL[DOC-STABILITY stable]
44
101
  const TRACEPARENT_RE = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/i
102
+ // CIL[DOC-VECTOR type="context" content="purpose='Regular expression that parses W3C traceparent version 00 headers'; No verified external callers; imports: none"]
103
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
104
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
105
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
106
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
107
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
108
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:TRACEPARENT_RE:constant"]
109
+
110
+
111
+
112
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:TRACE_FLAGS_SAMPLED:constant" type="constant" identity="TRACE_FLAGS_SAMPLED" parent="~/.framework/functions/_shared/tracing.ts"]
113
+ // CIL[DOC-MACRO purpose="Bit flag indicating a trace is sampled"]
114
+ // CIL[DOC-RESPONSIBILITY responsibility="Hold the constant value 0x01 used by isSampled"]
115
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
116
+ // CIL[DOC-CONTRACT inputs="none" outputs="number 0x01" errors="none" side_effects="none"]
117
+ // CIL[DOC-MICRO logic_summary="Single-byte flag value that can be bitwise-ANDed against trace flags" notable_decisions="[]"]
118
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
119
+ // CIL[DOC-STABILITY stable]
45
120
  const TRACE_FLAGS_SAMPLED = 0x01
121
+ // CIL[DOC-VECTOR type="context" content="purpose='Bit flag indicating a trace is sampled'; No verified external callers; imports: none"]
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"]
125
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
126
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
127
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:TRACE_FLAGS_SAMPLED:constant"]
46
128
 
129
+
130
+
131
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:generateHex:function" type="function" identity="generateHex" parent="~/.framework/functions/_shared/tracing.ts"]
132
+ // CIL[DOC-MACRO purpose="Generate a lower-case hex string of a specified length"]
133
+ // CIL[DOC-RESPONSIBILITY responsibility="Create random hex ids by concatenating UUIDs and slicing to size"]
134
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
135
+ // CIL[DOC-CONTRACT inputs="length: number" outputs="lowercase hex string of requested length" errors="none" side_effects="consumes crypto.randomUUID"]
136
+ // CIL[DOC-MICRO logic_summary="Removes dashes from randomUUID, concatenates a second UUID if needed, then slices" notable_decisions="[]"]
137
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
138
+ // CIL[DOC-STABILITY stable]
47
139
  function generateHex(length: number): string {
48
140
  // crypto.randomUUID gives 32 hex chars without dashes
49
141
  const hex = randomUUID().replace(/-/g, '')
50
142
  if (length > hex.length) {
51
143
  return (hex + randomUUID().replace(/-/g, '')).slice(0, length).toLowerCase()
52
144
  }
145
+
146
+
53
147
  return hex.slice(0, length).toLowerCase()
54
148
  }
149
+ // CIL[DOC-VECTOR type="context" content="purpose='Generate a lower-case hex string of a specified length'; No verified external callers; imports: none"]
150
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
151
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
152
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
153
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
154
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
155
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:generateHex:function"]
55
156
 
157
+
158
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:generateTraceId:function" type="function" identity="generateTraceId" parent="~/.framework/functions/_shared/tracing.ts"]
159
+ // CIL[DOC-MACRO purpose="Generate a 32-character hex trace id"]
160
+ // CIL[DOC-RESPONSIBILITY responsibility="Return a unique 128-bit trace identifier"]
161
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
162
+ // CIL[DOC-CONTRACT inputs="none" outputs="32-char hex string" errors="none" side_effects="none"]
163
+ // CIL[DOC-MICRO logic_summary="Calls generateHex with length 32" notable_decisions="[]"]
164
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
165
+ // CIL[DOC-STABILITY stable]
56
166
  export function generateTraceId(): string {
57
167
  return generateHex(32)
58
168
  }
169
+ // CIL[DOC-VECTOR type="context" content="purpose='Generate a 32-character hex trace id'; No verified external callers; imports: none"]
170
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
171
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
172
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
173
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
174
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
175
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:generateTraceId:function"]
176
+
59
177
 
178
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:generateSpanId:function" type="function" identity="generateSpanId" parent="~/.framework/functions/_shared/tracing.ts"]
179
+ // CIL[DOC-MACRO purpose="Generate a 16-character hex span id"]
180
+ // CIL[DOC-RESPONSIBILITY responsibility="Return a unique 64-bit span identifier"]
181
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
182
+ // CIL[DOC-CONTRACT inputs="none" outputs="16-char hex string" errors="none" side_effects="none"]
183
+ // CIL[DOC-MICRO logic_summary="Calls generateHex with length 16" notable_decisions="[]"]
184
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
185
+ // CIL[DOC-STABILITY stable]
60
186
  export function generateSpanId(): string {
61
187
  return generateHex(16)
62
188
  }
189
+ // CIL[DOC-VECTOR type="context" content="purpose='Generate a 16-character hex span id'; No verified external callers; imports: none"]
190
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
191
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
192
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
193
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
194
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
195
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:generateSpanId:function"]
63
196
 
197
+
198
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:newTrace:function" type="function" identity="newTrace" parent="~/.framework/functions/_shared/tracing.ts"]
199
+ // CIL[DOC-MACRO purpose="Create a new TraceContext with a fresh trace id"]
200
+ // CIL[DOC-RESPONSIBILITY responsibility="Initialize a trace root context, optionally sampled"]
201
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
202
+ // CIL[DOC-CONTRACT inputs="sampled?: boolean (default true)" outputs="TraceContext with traceId, spanId and flags" errors="none" side_effects="generates new trace and span ids"]
203
+ // CIL[DOC-MICRO logic_summary="Uses generateTraceId, generateSpanId and TRACE_FLAGS_SAMPLED to build a root context" notable_decisions="[]"]
204
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
205
+ // CIL[DOC-STABILITY stable]
64
206
  export function newTrace(sampled = true): TraceContext {
65
207
  return {
66
208
  traceId: generateTraceId(),
@@ -69,7 +211,23 @@ export function newTrace(sampled = true): TraceContext {
69
211
  sampled,
70
212
  }
71
213
  }
214
+ // CIL[DOC-VECTOR type="context" content="purpose='Create a new TraceContext with a fresh trace id'; No verified external callers; imports: none"]
215
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
216
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
217
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
218
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
219
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
220
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:newTrace:function"]
221
+
72
222
 
223
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:parseTraceParent:function" type="function" identity="parseTraceParent" parent="~/.framework/functions/_shared/tracing.ts"]
224
+ // CIL[DOC-MACRO purpose="Parse a W3C traceparent header into trace metadata"]
225
+ // CIL[DOC-RESPONSIBILITY responsibility="Extract traceId, spanId and traceFlags from a traceparent string"]
226
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
227
+ // CIL[DOC-CONTRACT inputs="header?: string" outputs="{ traceId, spanId, traceFlags } | null" errors="returns null for missing or malformed headers" side_effects="none"]
228
+ // CIL[DOC-MICRO logic_summary="Trims the header, matches TRACEPARENT_RE and parses the flags as hex" notable_decisions="[]"]
229
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
230
+ // CIL[DOC-STABILITY stable]
73
231
  export function parseTraceParent(header?: string): { traceId: string; spanId: string; traceFlags: number } | null {
74
232
  if (!header) return null
75
233
  const match = header.trim().match(TRACEPARENT_RE)
@@ -80,11 +238,43 @@ export function parseTraceParent(header?: string): { traceId: string; spanId: st
80
238
  traceFlags: parseInt(match[3], 16),
81
239
  }
82
240
  }
241
+ // CIL[DOC-VECTOR type="context" content="purpose='Parse a W3C traceparent header into trace metadata'; No verified external callers; imports: none"]
242
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
243
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
244
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
245
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
246
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
247
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:parseTraceParent:function"]
83
248
 
249
+
250
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:formatTraceParent:function" type="function" identity="formatTraceParent" parent="~/.framework/functions/_shared/tracing.ts"]
251
+ // CIL[DOC-MACRO purpose="Format trace metadata into a W3C traceparent string"]
252
+ // CIL[DOC-RESPONSIBILITY responsibility="Build the 00-traceId-spanId-flags header format"]
253
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
254
+ // CIL[DOC-CONTRACT inputs="traceId: string, spanId: string, traceFlags: number" outputs="traceparent string" errors="none" side_effects="none"]
255
+ // CIL[DOC-MICRO logic_summary="Converts ids and the flag value to lower-case and pads flags to two hex digits" notable_decisions="[]"]
256
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
257
+ // CIL[DOC-STABILITY stable]
84
258
  export function formatTraceParent(traceId: string, spanId: string, traceFlags: number): string {
85
259
  return `00-${traceId.toLowerCase()}-${spanId.toLowerCase()}-${traceFlags.toString(16).padStart(2, '0')}`
86
260
  }
261
+ // CIL[DOC-VECTOR type="context" content="purpose='Format trace metadata into a W3C traceparent string'; No verified external callers; imports: none"]
262
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
263
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
264
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
265
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
266
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
267
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:formatTraceParent:function"]
268
+
87
269
 
270
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:parseTraceState:function" type="function" identity="parseTraceState" parent="~/.framework/functions/_shared/tracing.ts"]
271
+ // CIL[DOC-MACRO purpose="Parse a W3C tracestate header into a key-value map"]
272
+ // CIL[DOC-RESPONSIBILITY responsibility="Convert a comma-separated tracestate string into a Record<string, string>"]
273
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
274
+ // CIL[DOC-CONTRACT inputs="header?: string" outputs="Record<string, string>" errors="returns empty object for missing/empty headers" side_effects="none"]
275
+ // CIL[DOC-MICRO logic_summary="Splits on commas, then on the first '=' and trims keys/values" notable_decisions="[]"]
276
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
277
+ // CIL[DOC-STABILITY stable]
88
278
  export function parseTraceState(header?: string): Record<string, string> {
89
279
  const state: Record<string, string> = {}
90
280
  if (!header) return state
@@ -94,17 +284,65 @@ export function parseTraceState(header?: string): Record<string, string> {
94
284
  }
95
285
  return state
96
286
  }
287
+ // CIL[DOC-VECTOR type="context" content="purpose='Parse a W3C tracestate header into a key-value map'; No verified external callers; imports: none"]
288
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
289
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
290
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
291
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
292
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
293
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:parseTraceState:function"]
97
294
 
295
+
296
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:formatTraceState:function" type="function" identity="formatTraceState" parent="~/.framework/functions/_shared/tracing.ts"]
297
+ // CIL[DOC-MACRO purpose="Format a key-value map as a W3C tracestate header"]
298
+ // CIL[DOC-RESPONSIBILITY responsibility="Join key=value pairs with commas"]
299
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
300
+ // CIL[DOC-CONTRACT inputs="state: Record<string, string>" outputs="tracestate string" errors="none" side_effects="none"]
301
+ // CIL[DOC-MICRO logic_summary="Maps entries to k=v and joins with commas" notable_decisions="[]"]
302
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
303
+ // CIL[DOC-STABILITY stable]
98
304
  export function formatTraceState(state: Record<string, string>): string {
99
305
  return Object.entries(state)
100
306
  .map(([k, v]) => `${k}=${v}`)
101
307
  .join(',')
102
308
  }
309
+ // CIL[DOC-VECTOR type="context" content="purpose='Format a key-value map as a W3C tracestate header'; No verified external callers; imports: none"]
310
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
311
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
312
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
313
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
314
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
315
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:formatTraceState:function"]
316
+
103
317
 
318
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:isSampled:function" type="function" identity="isSampled" parent="~/.framework/functions/_shared/tracing.ts"]
319
+ // CIL[DOC-MACRO purpose="Check whether trace flags include the sampled bit"]
320
+ // CIL[DOC-RESPONSIBILITY responsibility="Return true when the TRACE_FLAGS_SAMPLED bit is set"]
321
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
322
+ // CIL[DOC-CONTRACT inputs="traceFlags: number" outputs="boolean" errors="none" side_effects="none"]
323
+ // CIL[DOC-MICRO logic_summary="Bitwise-AND with TRACE_FLAGS_SAMPLED and compares to the constant" notable_decisions="[]"]
324
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
325
+ // CIL[DOC-STABILITY stable]
104
326
  export function isSampled(traceFlags: number): boolean {
105
327
  return (traceFlags & TRACE_FLAGS_SAMPLED) === TRACE_FLAGS_SAMPLED
106
328
  }
329
+ // CIL[DOC-VECTOR type="context" content="purpose='Check whether trace flags include the sampled bit'; No verified external callers; imports: none"]
330
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
331
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
332
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
333
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
334
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
335
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:isSampled:function"]
107
336
 
337
+
338
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:traceQueryBuilder:function" type="function" identity="traceQueryBuilder" parent="~/.framework/functions/_shared/tracing.ts"]
339
+ // CIL[DOC-MACRO purpose="Wrap a Supabase query builder with automatic span creation"]
340
+ // CIL[DOC-RESPONSIBILITY responsibility="Proxy promise-returning query builder methods to trace db calls"]
341
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
342
+ // CIL[DOC-CONTRACT inputs="ctx: CoreContextWithTrace, builder: any, operation: string, resource: string, onSpanEnd?: callback" outputs="Proxied builder that returns instrumented promises" errors="rejects with the original error, marked on the span" side_effects="creates Proxy and starts/ends spans around then/catch chains"]
343
+ // CIL[DOC-MICRO logic_summary="Uses a Proxy to intercept 'then', 'catch' and chained methods, timing async work and reporting row counts or errors" notable_decisions="[]"]
344
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
345
+ // CIL[DOC-STABILITY stable]
108
346
  function traceQueryBuilder(
109
347
  ctx: CoreContextWithTrace,
110
348
  builder: any,
@@ -156,7 +394,23 @@ function traceQueryBuilder(
156
394
  }
157
395
  })
158
396
  }
397
+ // CIL[DOC-VECTOR type="context" content="purpose='Wrap a Supabase query builder with automatic span creation'; No verified external callers; imports: none"]
398
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
399
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
400
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
401
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
402
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
403
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:traceQueryBuilder:function"]
404
+
159
405
 
406
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:traceDb:function" type="function" identity="traceDb" parent="~/.framework/functions/_shared/tracing.ts"]
407
+ // CIL[DOC-MACRO purpose="Wrap a Supabase db client to add per-query tracing"]
408
+ // CIL[DOC-RESPONSIBILITY responsibility="Return a Proxy over a db client that instruments from() and rpc() calls"]
409
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
410
+ // CIL[DOC-CONTRACT inputs="ctx: CoreContextWithTrace, db: any, onSpanEnd?: callback" outputs="Proxy of the input db" errors="none" side_effects="creates a Proxy"]
411
+ // CIL[DOC-MICRO logic_summary="Intercepts 'from' and 'rpc' and wraps the resulting builder with traceQueryBuilder, skipping the 'logs' table to avoid recursion" notable_decisions="[]"]
412
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
413
+ // CIL[DOC-STABILITY stable]
160
414
  export function traceDb(
161
415
  ctx: CoreContextWithTrace,
162
416
  db: any,
@@ -178,7 +432,23 @@ export function traceDb(
178
432
  }
179
433
  })
180
434
  }
435
+ // CIL[DOC-VECTOR type="context" content="purpose='Wrap a Supabase db client to add per-query tracing'; No verified external callers; imports: none"]
436
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
437
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
438
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
439
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
440
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
441
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:traceDb:function"]
181
442
 
443
+
444
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:startSpan:function" type="function" identity="startSpan" parent="~/.framework/functions/_shared/tracing.ts"]
445
+ // CIL[DOC-MACRO purpose="Create and start a new span from a core context"]
446
+ // CIL[DOC-RESPONSIBILITY responsibility="Initialize a Span with id generation, sampling inheritance and optional overrides"]
447
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
448
+ // CIL[DOC-CONTRACT inputs="ctx: CoreContextWithTrace, spanName: string, options?: { attributes?, traceId?, traceFlags?, traceState?, sampled? }" outputs="Span object" errors="none" side_effects="generates a new span id"]
449
+ // CIL[DOC-MICRO logic_summary="Inherits parent trace id/flags/state/sampled if present, allows per-span overrides and records the start ISO timestamp" notable_decisions="[]"]
450
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
451
+ // CIL[DOC-STABILITY stable]
182
452
  export function startSpan(
183
453
  ctx: CoreContextWithTrace,
184
454
  spanName: string,
@@ -210,7 +480,23 @@ export function startSpan(
210
480
  attributes: options?.attributes || {},
211
481
  }
212
482
  }
483
+ // CIL[DOC-VECTOR type="context" content="purpose='Create and start a new span from a core context'; No verified external callers; imports: none"]
484
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
485
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
486
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
487
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
488
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
489
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:startSpan:function"]
490
+
213
491
 
492
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:endSpan:function" type="function" identity="endSpan" parent="~/.framework/functions/_shared/tracing.ts"]
493
+ // CIL[DOC-MACRO purpose="Finalize a span with end time, duration and optional status/attributes"]
494
+ // CIL[DOC-RESPONSIBILITY responsibility="Mutate the provided Span to record when it ended and how long it ran"]
495
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
496
+ // CIL[DOC-CONTRACT inputs="span: Span, options?: { status?, attributes? }" outputs="the same Span object" errors="none" side_effects="mutates the span object"]
497
+ // CIL[DOC-MICRO logic_summary="Computes durationMs from startedAt and ISO endedAt, merges new attributes and sets the status" notable_decisions="[]"]
498
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
499
+ // CIL[DOC-STABILITY stable]
214
500
  export function endSpan(span: Span, options?: { status?: 'ok' | 'error'; attributes?: Record<string, any> }): Span {
215
501
  const endedAt = new Date().toISOString()
216
502
  const started = new Date(span.startedAt).getTime()
@@ -223,7 +509,23 @@ export function endSpan(span: Span, options?: { status?: 'ok' | 'error'; attribu
223
509
  }
224
510
  return span
225
511
  }
512
+ // CIL[DOC-VECTOR type="context" content="purpose='Finalize a span with end time, duration and optional status/attributes'; No verified external callers; imports: none"]
513
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
514
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
515
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
516
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
517
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
518
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:endSpan:function"]
226
519
 
520
+
521
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:withSpan:function" type="function" identity="withSpan" parent="~/.framework/functions/_shared/tracing.ts"]
522
+ // CIL[DOC-MACRO purpose="Run an async function inside a traced span"]
523
+ // CIL[DOC-RESPONSIBILITY responsibility="Start a span, call the function with a child context, end the span and return the result"]
524
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
525
+ // CIL[DOC-CONTRACT inputs="ctx: CoreContextWithTrace, spanName: string, fn: (ctx) => Promise<T>, options?: { attributes?, onEnd? }" outputs="Promise<T>" errors="rejects with the thrown error after marking the span as error" side_effects="none"]
526
+ // CIL[DOC-MICRO logic_summary="Creates a child context, awaits fn, ends the span with ok or error status and invokes the optional onEnd callback" notable_decisions="[]"]
527
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
528
+ // CIL[DOC-STABILITY stable]
227
529
  export async function withSpan<T>(
228
530
  ctx: CoreContextWithTrace,
229
531
  spanName: string,
@@ -238,15 +540,37 @@ export async function withSpan<T>(
238
540
  try {
239
541
  const result = await fn(childCtx)
240
542
  endSpan(span, { status: 'ok' })
241
- if (options?.onEnd) await options.onEnd(childCtx, span)
543
+ // onEnd (emitSpan) persists telemetry — fire-and-forget like withSpanSync
544
+ // so a hosted-DB logs insert never adds its latency to the wrapped work.
545
+ if (options?.onEnd) {
546
+ Promise.resolve(options.onEnd(childCtx, span)).catch(() => {})
547
+ }
242
548
  return result
243
549
  } catch (error: any) {
244
550
  endSpan(span, { status: 'error', attributes: { error: error.message || String(error) } })
245
- if (options?.onEnd) await options.onEnd(childCtx, span)
551
+ if (options?.onEnd) {
552
+ Promise.resolve(options.onEnd(childCtx, span)).catch(() => {})
553
+ }
246
554
  throw error
247
555
  }
248
556
  }
557
+ // CIL[DOC-VECTOR type="context" content="purpose='Run an async function inside a traced span'; No verified external callers; imports: none"]
558
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
559
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
560
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
561
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
562
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
563
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:withSpan:function"]
564
+
249
565
 
566
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:withSpanSync:function" type="function" identity="withSpanSync" parent="~/.framework/functions/_shared/tracing.ts"]
567
+ // CIL[DOC-MACRO purpose="Run a synchronous function inside a traced span"]
568
+ // CIL[DOC-RESPONSIBILITY responsibility="Start a span, call the function with a child context, end the span and return the result"]
569
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
570
+ // CIL[DOC-CONTRACT inputs="ctx: CoreContextWithTrace, spanName: string, fn: (ctx) => T, options?: { attributes?, onEnd? }" outputs="T" errors="re-throws after marking the span as error" side_effects="none"]
571
+ // CIL[DOC-MICRO logic_summary="Creates a child context, runs fn, ends the span and calls onEnd asynchronously without awaiting it" notable_decisions="[]"]
572
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
573
+ // CIL[DOC-STABILITY stable]
250
574
  export function withSpanSync<T>(
251
575
  ctx: CoreContextWithTrace,
252
576
  spanName: string,
@@ -273,4 +597,10 @@ export function withSpanSync<T>(
273
597
  throw error
274
598
  }
275
599
  }
276
- // CIL[END chunk_id="tracing_functions_1785012345"]
600
+ // CIL[DOC-VECTOR type="context" content="purpose='Run a synchronous function inside a traced span'; No verified external callers; imports: none"]
601
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
602
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
603
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
604
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
605
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
606
+ // CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:withSpanSync:function"]