spine-framework 0.4.4 → 0.5.0-rc.4

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 (283) hide show
  1. package/.env.example +13 -3
  2. package/.framework/cli/commands/bootstrap.ts +392 -0
  3. package/.framework/cli/commands/dev.ts +91 -218
  4. package/.framework/cli/commands/doctor.ts +132 -26
  5. package/.framework/cli/commands/generate.ts +38 -298
  6. package/.framework/cli/commands/init.ts +20 -1
  7. package/.framework/cli/commands/migrate.ts +36 -30
  8. package/.framework/cli/commands/migrations.ts +16 -56
  9. package/.framework/cli/commands/upgrade.ts +35 -0
  10. package/.framework/cli/commands/validate-schema.ts +147 -0
  11. package/.framework/cli/context.ts +223 -110
  12. package/.framework/cli/index.ts +6 -0
  13. package/.framework/cli/lib/project-files.ts +241 -1
  14. package/.framework/functions/_shared/hash-api-key.ts +183 -79
  15. package/.framework/functions/_shared/logging.ts +562 -224
  16. package/.framework/functions/_shared/middleware.ts +47 -44
  17. package/.framework/functions/admin-data.ts +39 -28
  18. package/.framework/functions/ai-agents.ts +10 -6
  19. package/.framework/functions/api-keys.ts +301 -122
  20. package/.framework/functions/apps.ts +43 -26
  21. package/.framework/functions/cil-ingest.ts +48 -15
  22. package/.framework/functions/debug-auth.ts +14 -8
  23. package/.framework/functions/deliveries.ts +39 -12
  24. package/.framework/functions/embeddings.ts +145 -76
  25. package/.framework/functions/integration-outbound.ts +67 -27
  26. package/.framework/functions/integrations.ts +254 -127
  27. package/.framework/functions/logs.ts +273 -133
  28. package/.framework/functions/observability.ts +277 -147
  29. package/.framework/functions/pipeline-executions.ts +1 -1
  30. package/.framework/functions/pipelines.ts +14 -9
  31. package/.framework/functions/prompt-configs.ts +7 -4
  32. package/.framework/functions/roles.ts +8 -5
  33. package/.framework/functions/security.ts +30 -17
  34. package/.framework/functions/system-cron.ts +240 -127
  35. package/.framework/functions/tests.ts +7 -6
  36. package/.framework/functions/timers.ts +310 -107
  37. package/.framework/functions/triggers.ts +28 -13
  38. package/.framework/functions/types.ts +13 -10
  39. package/.framework/migrations/069_log_stats_window.sql +54 -0
  40. package/.framework/migrations/070_app_type_schema_rpcs.sql +166 -0
  41. package/.framework/migrations/071_timer_interval_keys.sql +96 -0
  42. package/.framework/migrations/072_slug_autofill.sql +77 -0
  43. package/.framework/migrations/073_seed_member_roles.sql +26 -0
  44. package/.framework/src/apps/admin/index.tsx +1141 -775
  45. package/.framework/src/components/ErrorBoundary.tsx +136 -0
  46. package/.framework/src/components/admin/AdminListPage.tsx +81 -73
  47. package/.framework/src/components/admin/AdminSidebar.tsx +88 -79
  48. package/.framework/src/components/admin/EntitySelect.tsx +181 -0
  49. package/.framework/src/components/admin/PageInstructions.tsx +86 -127
  50. package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
  51. package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
  52. package/.framework/src/components/layout/Sidebar.tsx +300 -177
  53. package/.framework/src/components/runtime/DataDetailPage.tsx +67 -35
  54. package/.framework/src/components/runtime/DataHeader.tsx +96 -48
  55. package/.framework/src/components/runtime/DataListPage.tsx +3 -26
  56. package/.framework/src/components/runtime/DataStats.tsx +10 -10
  57. package/.framework/src/components/runtime/DataTable.tsx +12 -10
  58. package/.framework/src/components/ui/sheet.tsx +24 -26
  59. package/.framework/src/components/ui/textarea.tsx +74 -48
  60. package/.framework/src/hooks/useEntityList.ts +12 -9
  61. package/.framework/src/hooks/useListSchema.ts +108 -58
  62. package/.framework/src/instructions/README.md +57 -0
  63. package/.framework/src/instructions/ai-agents.md +69 -0
  64. package/.framework/src/instructions/alerts.md +80 -0
  65. package/.framework/src/instructions/api-keys.md +87 -0
  66. package/.framework/src/instructions/apps.md +77 -0
  67. package/.framework/src/instructions/concepts/ai-and-prompts.md +150 -0
  68. package/.framework/src/instructions/concepts/apps-and-renderers.md +162 -0
  69. package/.framework/src/instructions/concepts/auth-and-api-keys.md +133 -0
  70. package/.framework/src/instructions/concepts/automation.md +186 -0
  71. package/.framework/src/instructions/concepts/concurrency-and-idempotency.md +125 -0
  72. package/.framework/src/instructions/concepts/core-vs-custom.md +124 -0
  73. package/.framework/src/instructions/concepts/design-schema.md +152 -0
  74. package/.framework/src/instructions/concepts/integrations-and-webhooks.md +127 -0
  75. package/.framework/src/instructions/concepts/observability.md +116 -0
  76. package/.framework/src/instructions/concepts/permissions.md +150 -0
  77. package/.framework/src/instructions/concepts/runtime-records.md +111 -0
  78. package/.framework/src/instructions/concepts/scope-and-accounts.md +112 -0
  79. package/.framework/src/instructions/concepts/spine-way.md +172 -0
  80. package/.framework/src/instructions/deliveries.md +59 -0
  81. package/.framework/src/instructions/guide/00-orientation.md +106 -0
  82. package/.framework/src/instructions/guide/01-install-and-first-run.md +253 -0
  83. package/.framework/src/instructions/guide/02-project-map.md +147 -0
  84. package/.framework/src/instructions/guide/03-domain-model.md +223 -0
  85. package/.framework/src/instructions/guide/04-first-app.md +227 -0
  86. package/.framework/src/instructions/guide/05-glossary.md +183 -0
  87. package/.framework/src/instructions/integrations.md +96 -0
  88. package/.framework/src/instructions/internal/cil-markers.md +83 -0
  89. package/.framework/src/instructions/invites.md +60 -0
  90. package/.framework/src/instructions/kb.md +80 -0
  91. package/.framework/src/instructions/logs.md +77 -0
  92. package/.framework/src/instructions/observability.md +61 -0
  93. package/.framework/src/instructions/operations/deployment.md +115 -0
  94. package/.framework/src/instructions/operations/migrations.md +125 -0
  95. package/.framework/src/instructions/operations/security-checklist.md +148 -0
  96. package/.framework/src/instructions/operations/troubleshooting.md +170 -0
  97. package/.framework/src/instructions/operations/upgrade.md +116 -0
  98. package/.framework/src/instructions/pipeline-executions.md +62 -0
  99. package/.framework/src/instructions/pipelines.md +78 -0
  100. package/.framework/src/instructions/prompts.md +95 -0
  101. package/.framework/src/instructions/reference/api/admin-data.md +162 -0
  102. package/.framework/src/instructions/reference/api/auth.md +113 -0
  103. package/.framework/src/instructions/reference/api/errors-and-envelopes.md +113 -0
  104. package/.framework/src/instructions/reference/app-manifest.md +150 -0
  105. package/.framework/src/instructions/reference/cli.md +124 -0
  106. package/.framework/src/instructions/reference/database.md +132 -0
  107. package/.framework/src/instructions/reference/design-schema.md +280 -0
  108. package/.framework/src/instructions/reference/env-vars.md +133 -0
  109. package/.framework/src/instructions/reference/functions/account-nodes.md +75 -0
  110. package/.framework/src/instructions/reference/functions/admin-data.md +195 -0
  111. package/.framework/src/instructions/reference/functions/admin-funnel.md +90 -0
  112. package/.framework/src/instructions/reference/functions/admin-install-funnel.md +107 -0
  113. package/.framework/src/instructions/reference/functions/admin-signals.md +102 -0
  114. package/.framework/src/instructions/reference/functions/ai-agents.md +148 -0
  115. package/.framework/src/instructions/reference/functions/ai-interactions.md +156 -0
  116. package/.framework/src/instructions/reference/functions/api-keys.md +130 -0
  117. package/.framework/src/instructions/reference/functions/apps.md +140 -0
  118. package/.framework/src/instructions/reference/functions/auth.md +99 -0
  119. package/.framework/src/instructions/reference/functions/debug-auth.md +91 -0
  120. package/.framework/src/instructions/reference/functions/deliveries.md +110 -0
  121. package/.framework/src/instructions/reference/functions/embeddings.md +166 -0
  122. package/.framework/src/instructions/reference/functions/eval-harness.md +149 -0
  123. package/.framework/src/instructions/reference/functions/index.md +103 -0
  124. package/.framework/src/instructions/reference/functions/integration-outbound.md +200 -0
  125. package/.framework/src/instructions/reference/functions/integration-routes.md +151 -0
  126. package/.framework/src/instructions/reference/functions/integrations.md +130 -0
  127. package/.framework/src/instructions/reference/functions/invites.md +182 -0
  128. package/.framework/src/instructions/reference/functions/item-progress.md +107 -0
  129. package/.framework/src/instructions/reference/functions/kb.md +166 -0
  130. package/.framework/src/instructions/reference/functions/logs.md +141 -0
  131. package/.framework/src/instructions/reference/functions/observability.md +105 -0
  132. package/.framework/src/instructions/reference/functions/pipeline-executions.md +132 -0
  133. package/.framework/src/instructions/reference/functions/pipeline-runner-background.md +121 -0
  134. package/.framework/src/instructions/reference/functions/pipelines.md +136 -0
  135. package/.framework/src/instructions/reference/functions/prompt-configs.md +121 -0
  136. package/.framework/src/instructions/reference/functions/roles.md +121 -0
  137. package/.framework/src/instructions/reference/functions/security.md +140 -0
  138. package/.framework/src/instructions/reference/functions/system-cron.md +136 -0
  139. package/.framework/src/instructions/reference/functions/system.md +106 -0
  140. package/.framework/src/instructions/reference/functions/tests.md +97 -0
  141. package/.framework/src/instructions/reference/functions/timers.md +117 -0
  142. package/.framework/src/instructions/reference/functions/trigger-scheduler.md +102 -0
  143. package/.framework/src/instructions/reference/functions/triggers.md +140 -0
  144. package/.framework/src/instructions/reference/functions/types.md +146 -0
  145. package/.framework/src/instructions/reference/seeds.md +126 -0
  146. package/.framework/src/instructions/reference/shared-modules.md +127 -0
  147. package/.framework/src/instructions/reference/spine-config.md +114 -0
  148. package/.framework/src/instructions/roles.md +80 -0
  149. package/.framework/src/instructions/runtime-detail.md +70 -0
  150. package/.framework/src/instructions/runtime-list.md +77 -0
  151. package/.framework/src/instructions/security.md +67 -0
  152. package/.framework/src/instructions/tasks/add-a-pipeline.md +110 -0
  153. package/.framework/src/instructions/tasks/add-a-role.md +96 -0
  154. package/.framework/src/instructions/tasks/add-a-timer.md +114 -0
  155. package/.framework/src/instructions/tasks/add-a-trigger.md +106 -0
  156. package/.framework/src/instructions/tasks/add-a-type.md +151 -0
  157. package/.framework/src/instructions/tasks/add-a-webhook.md +108 -0
  158. package/.framework/src/instructions/tasks/add-an-ai-agent.md +108 -0
  159. package/.framework/src/instructions/tasks/add-an-integration.md +124 -0
  160. package/.framework/src/instructions/tasks/build-a-custom-page.md +118 -0
  161. package/.framework/src/instructions/tasks/package-and-install-an-app.md +127 -0
  162. package/.framework/src/instructions/tasks/test-your-code.md +108 -0
  163. package/.framework/src/instructions/tasks/write-a-function.md +132 -0
  164. package/.framework/src/instructions/tasks/write-a-migration.md +110 -0
  165. package/.framework/src/instructions/testing.md +59 -0
  166. package/.framework/src/instructions/timers.md +82 -0
  167. package/.framework/src/instructions/triggers.md +69 -0
  168. package/.framework/src/instructions/types.md +93 -0
  169. package/.framework/src/pages/NotFoundPage.tsx +62 -31
  170. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +117 -106
  171. package/.framework/src/pages/admin/AIAgentsPage.tsx +86 -48
  172. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +153 -152
  173. package/.framework/src/pages/admin/APIKeysPage.tsx +91 -90
  174. package/.framework/src/pages/admin/AlertsConfigPage.tsx +29 -18
  175. package/.framework/src/pages/admin/AppDetailPage.tsx +6 -60
  176. package/.framework/src/pages/admin/AppsPage.tsx +104 -66
  177. package/.framework/src/pages/admin/DeliveriesPage.tsx +5 -5
  178. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +5 -23
  179. package/.framework/src/pages/admin/EmbeddingsPage.tsx +5 -26
  180. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +7 -7
  181. package/.framework/src/pages/admin/IntegrationsPage.tsx +85 -43
  182. package/.framework/src/pages/admin/LogsPage.tsx +144 -76
  183. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +223 -140
  184. package/.framework/src/pages/admin/PipelineDetailPage.tsx +134 -113
  185. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +108 -45
  186. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -115
  187. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +96 -98
  188. package/.framework/src/pages/admin/PromptConfigsPage.tsx +101 -59
  189. package/.framework/src/pages/admin/RoleDetailPage.tsx +90 -79
  190. package/.framework/src/pages/admin/RolesPage.tsx +86 -43
  191. package/.framework/src/pages/admin/SecurityPage.tsx +1 -1
  192. package/.framework/src/pages/admin/TestingDashboard.tsx +16 -28
  193. package/.framework/src/pages/admin/TimerDetailPage.tsx +117 -100
  194. package/.framework/src/pages/admin/TimersPage.tsx +90 -62
  195. package/.framework/src/pages/admin/TriggerDetailPage.tsx +90 -83
  196. package/.framework/src/pages/admin/TriggersPage.tsx +124 -99
  197. package/.framework/src/pages/admin/TypeDetailPage.tsx +152 -138
  198. package/.framework/src/pages/admin/TypesPage.tsx +90 -48
  199. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +17 -25
  200. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +17 -27
  201. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +72 -40
  202. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +321 -129
  203. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +18 -29
  204. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +26 -38
  205. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +34 -46
  206. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +189 -103
  207. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +246 -136
  208. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +11 -22
  209. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +9 -20
  210. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +26 -38
  211. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +7 -26
  212. package/.framework/templates/agent/AGENTS.md +150 -0
  213. package/.framework/templates/agent/skills/spine-add-ai-agent/SKILL.md +58 -0
  214. package/.framework/templates/agent/skills/spine-add-automation/SKILL.md +62 -0
  215. package/.framework/templates/agent/skills/spine-add-integration/SKILL.md +63 -0
  216. package/.framework/templates/agent/skills/spine-architect/SKILL.md +86 -0
  217. package/.framework/templates/agent/skills/spine-install-app/SKILL.md +72 -0
  218. package/.framework/templates/agent/skills/spine-migration/SKILL.md +75 -0
  219. package/.framework/templates/agent/skills/spine-new-app/SKILL.md +67 -0
  220. package/.framework/templates/agent/skills/spine-new-function/SKILL.md +65 -0
  221. package/.framework/templates/agent/skills/spine-new-type/SKILL.md +65 -0
  222. package/.framework/templates/agent/skills/spine-schema/SKILL.md +77 -0
  223. package/.framework/templates/agent/skills/spine-test/SKILL.md +67 -0
  224. package/.framework/templates/agent/skills/spine-troubleshoot/SKILL.md +74 -0
  225. package/.framework/templates/agent/skills/spine-upgrade/SKILL.md +69 -0
  226. package/.framework/templates/project.json +4 -1
  227. package/.framework/tests/unit/account-scoping-gates.test.ts +392 -0
  228. package/.framework/tests/unit/agent-files.test.ts +355 -0
  229. package/.framework/tests/unit/agent-runner.test.ts +479 -44
  230. package/.framework/tests/unit/api-keys-create-scope-gate.test.ts +160 -0
  231. package/.framework/tests/unit/api-keys-omit-secret-fields.test.ts +38 -0
  232. package/.framework/tests/unit/bootstrap.test.ts +242 -0
  233. package/.framework/tests/unit/cli-context-api-key.test.ts +114 -0
  234. package/.framework/tests/unit/debug-auth.test.ts +38 -0
  235. package/.framework/tests/unit/deliveries-account-scoping.test.ts +185 -0
  236. package/.framework/tests/unit/integration-outbound-credentials.test.ts +167 -0
  237. package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
  238. package/.framework/tests/unit/logging-app-id.test.ts +75 -0
  239. package/.framework/tests/unit/system-context-denial.test.ts +145 -0
  240. package/.framework/tests/unit/system-cron.test.ts +240 -0
  241. package/.framework/tests/unit/timers.test.ts +159 -0
  242. package/README.md +125 -166
  243. package/config/tsconfig.cli.json +2 -2
  244. package/package.json +15 -4
  245. package/templates/project/package-lock.json +2 -2
  246. package/.framework/docs/admin-routes.md +0 -76
  247. package/.framework/docs/api-docs-progress.md +0 -38
  248. package/.framework/docs/api-governance.md +0 -146
  249. package/.framework/docs/api-testing-results.md +0 -212
  250. package/.framework/docs/assembly-launch-guide.md +0 -138
  251. package/.framework/docs/audit-results.md +0 -590
  252. package/.framework/docs/db-api-inventory.md +0 -95
  253. package/.framework/docs/gap-remediation-backlog.md +0 -103
  254. package/.framework/docs/ui-adoption-verification.md +0 -111
  255. package/.framework/docs/ui-api-coverage.md +0 -84
  256. package/.framework/docs/v2-compatibility-audit.md +0 -228
  257. package/.framework/mcp/index.ts +0 -133
  258. package/.framework/mcp/load-env.ts +0 -60
  259. package/.framework/mcp/shared/app-manifest.ts +0 -275
  260. package/.framework/mcp/shared/db.ts +0 -477
  261. package/.framework/mcp/shared/kb.ts +0 -118
  262. package/.framework/mcp/tools/architect.ts +0 -431
  263. package/.framework/mcp/tools/cil/context.ts +0 -345
  264. package/.framework/mcp/tools/cil/graph.ts +0 -242
  265. package/.framework/mcp/tools/cil/ingest.ts +0 -1217
  266. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +0 -693
  267. package/.framework/mcp/tools/cil/pipeline.ts +0 -767
  268. package/.framework/mcp/tools/cil/project.ts +0 -791
  269. package/.framework/mcp/tools/cil/retrieval.ts +0 -336
  270. package/.framework/mcp/tools/cil/search-core.ts +0 -454
  271. package/.framework/mcp/tools/cil/search.ts +0 -97
  272. package/.framework/mcp/tools/cil/suggest.ts +0 -186
  273. package/.framework/mcp/tools/cil/validate.ts +0 -1369
  274. package/.framework/mcp/tools/kb/delete.ts +0 -139
  275. package/.framework/mcp/tools/kb/index.ts +0 -52
  276. package/.framework/mcp/tools/kb/ingest.ts +0 -84
  277. package/.framework/mcp/tools/kb/list-types.ts +0 -102
  278. package/.framework/mcp/tools/kb/publish.ts +0 -100
  279. package/.framework/mcp/tools/kb/reindex.ts +0 -86
  280. package/.framework/mcp/tools/kb/revoke.ts +0 -85
  281. package/.framework/mcp/tools/kb/search.ts +0 -101
  282. package/.framework/mcp/tools/kb/upsert.ts +0 -125
  283. package/.framework/mcp/tools/observability.ts +0 -510
@@ -1,57 +1,94 @@
1
1
  // CIL[BEGIN stable_id="~/.framework/functions/system-cron.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/system-cron.ts"]
2
- // CIL[DOC-MACRO purpose="Imports shared middleware, database, audit, pipeline and retry helpers for the system-cron Netlify function."]
3
- // CIL[DOC-RESPONSIBILITY responsibility="Sets up module dependencies and shared imports for the cron handler."]
4
- // CIL[DOC-CONTEXT module="system-cron" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/pipeline-runner.ts,.framework/functions/_shared/retry-deliveries.ts"]
5
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
6
- // CIL[DOC-MICRO logic_summary="Imports required shared modules for database access, audit logging, pipeline execution and delivery retries." notable_decisions="none"]
7
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
- // CIL[DOC-STABILITY stability="stable"]
9
- // CIL[DOC-AUDIENCE audience="developers,operators"]
2
+ /**
3
+ * @module system-cron
4
+ * @audience both
5
+ * @layer shared-core
6
+ * @stability stable
7
+ *
8
+ * This module handles scheduled tasks within the system, ensuring timely execution of various background processes. It utilizes a multi-step pipeline for task execution, which includes running pipelines and sweeping stale executions. INVARIANT: All scheduled tasks must be executed in a timely manner to maintain system integrity.
9
+ *
10
+ * @seeAlso middleware.ts (provides request handling capabilities).
11
+ * @seeAlso db.ts (manages database interactions).
12
+ * @seeAlso audits.ts (handles audit logging).
13
+ * @seeAlso pipeline-runner.ts (executes task pipelines).
14
+ *
15
+ * @cil-generated
16
+ */
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
10
26
  import { createHandler, RequestContext } from './_shared/middleware'
11
27
  import { adminDb } from './_shared/db'
12
28
  import { emitAudit } from './_shared/audit'
13
29
  import { runPipeline, sweepStaleExecutions } from './_shared/pipeline-runner'
14
30
  import { retryPendingDeliveries } from './_shared/retry-deliveries'
15
- // CIL[DOC-VECTOR type="context" content="purpose='Imports shared middleware, database, audit, pipeline and retry helpers for the system-cron Netlify function.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
16
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
17
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
18
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
19
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
20
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
21
31
  // CIL[END stable_id="~/.framework/functions/system-cron.ts:module_header:module_header"]
22
32
 
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
23
49
  // CIL[BEGIN stable_id="~/.framework/functions/system-cron.ts:SCHEDULER_API_KEY:constant" type="constant" identity="SCHEDULER_API_KEY" parent="~/.framework/functions/system-cron.ts"]
24
- // CIL[DOC-MACRO purpose="Resolves the scheduler API key from Node or Deno environment variables."]
25
- // CIL[DOC-RESPONSIBILITY responsibility="Provides the secret key used to authenticate cron requests."]
26
- // CIL[DOC-CONTEXT module="system-cron" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/pipeline-runner.ts,.framework/functions/_shared/retry-deliveries.ts,.framework/functions/system-cron.ts"]
27
- // CIL[DOC-STABILITY stability="internal"]
28
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
29
- // CIL[DOC-CONTRACT inputs="none" outputs="string | undefined" errors="none" side_effects="reads environment variables"]
30
- // CIL[DOC-MICRO logic_summary="Reads SCHEDULER_API_KEY from process.env or Deno.env, falling back to undefined." notable_decisions="none"]
31
- // CIL[DOC-AUDIENCE audience="developers"]
50
+ /**
51
+ * SCHEDULER_API_KEY retrieves the API key for the scheduler from the environment variables to ensure that the application can access the necessary credentials for scheduling tasks.
52
+ *
53
+ * @sideEffects none
54
+ * @stability internal
55
+ * @cil-generated
56
+ */
32
57
  const SCHEDULER_API_KEY: string | undefined = (globalThis as any).process?.env?.SCHEDULER_API_KEY || (globalThis as any).Deno?.env?.get?.('SCHEDULER_API_KEY')
33
58
  // CIL[END stable_id="~/.framework/functions/system-cron.ts:SCHEDULER_API_KEY:constant"]
34
59
 
35
- // CIL[DOC-VECTOR type="context" content="purpose='Resolves the scheduler API key from Node or Deno environment variables.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
36
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
37
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
38
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
39
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
40
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
41
76
 
42
77
 
43
78
 
44
79
 
45
80
 
46
81
  // CIL[BEGIN stable_id="~/.framework/functions/system-cron.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/system-cron.ts"]
47
- // CIL[DOC-MACRO purpose="Netlify function entrypoint that runs scheduled actions, timers, threshold checks, retries and daily log cleanup."]
48
- // CIL[DOC-RESPONSIBILITY responsibility="Executes the cron loop for due schedules and timers, evaluates thresholds, retries pending deliveries and cleans logs at midnight."]
49
- // CIL[DOC-CONTEXT module="system-cron" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/pipeline-runner.ts,.framework/functions/_shared/retry-deliveries.ts,.framework/functions/system-cron.ts"]
50
- // CIL[DOC-CONTRACT inputs="RequestContext" outputs="HTTP 200/403/500 response" errors="Throws on schedule or timer failures; returns 403 for auth failures and 500 for system errors." side_effects="Reads and writes schedule_executions, runs pipelines, emits audit events, updates schedules and timers."]
51
- // CIL[DOC-MICRO logic_summary="Validates scheduler API key or internal machine principal, fetches due schedules and timers, executes each action with scoped machine context, evaluates threshold alerts, retries pending deliveries, cleans logs at midnight, and returns a summary." notable_decisions="Uses a global try/catch to convert unhandled errors into a 500 response; runs threshold and log cleanup in non-failing branches; handles both Node and Deno runtimes for API key."]
52
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
53
- // CIL[DOC-STABILITY stability="stable"]
54
- // CIL[DOC-AUDIENCE audience="developers"]
82
+ /**
83
+ * The handler processes scheduled tasks by validating their execution conditions and executing them if due. It ensures proper authentication and logs unauthorized access attempts.
84
+ *
85
+ * @throws Error — if fetching due schedules or validating schedules fails.
86
+ * @sideEffects DB reads from 'schedules', 'actions', and 'api_keys'; emits audit logs for unauthorized access.
87
+ * @stability internal
88
+ * @calls adminDb.rpc('get_due_schedules'), adminDb.rpc('validate_schedule_creator'), adminDb.from('actions'), adminDb.from('api_keys')
89
+ * @errorHandling logs errors to the console without throwing them further.
90
+ * @cil-generated
91
+ */
55
92
  export const handler = createHandler(async (ctx: RequestContext) => {
56
93
  const requestApiKey = ctx.query?.api_key || ctx.query?.scheduler_key
57
94
 
@@ -95,18 +132,9 @@ export const handler = createHandler(async (ctx: RequestContext) => {
95
132
  throw new Error(`Failed to fetch due schedules: ${schedulesError.message}`)
96
133
  }
97
134
 
98
- if (!dueSchedules || dueSchedules.length === 0) {
99
- return {
100
- statusCode: 200,
101
- body: JSON.stringify({
102
- message: 'No schedules due for execution',
103
- executed: 0,
104
- results: []
105
- })
106
- }
107
- }
108
-
109
- for (const schedule of dueSchedules) {
135
+ // An empty schedule list must not end the tick: due timers, threshold
136
+ // alerts, delivery retries, and log cleanup below run every minute.
137
+ for (const schedule of dueSchedules || []) {
110
138
  const startTime = Date.now()
111
139
 
112
140
  try {
@@ -348,13 +376,19 @@ export const handler = createHandler(async (ctx: RequestContext) => {
348
376
  const failedCount = results.filter(r => r.status === 'failed').length
349
377
  const skippedCount = results.filter(r => r.status === 'skipped').length
350
378
 
351
- const retrySummary = await retryPendingDeliveries(ctx)
379
+ let retrySummary = null
380
+ try {
381
+ retrySummary = await retryPendingDeliveries(ctx)
382
+ } catch (retryError) {
383
+ console.error('Delivery retry error:', retryError)
384
+ }
352
385
 
353
386
  return {
354
387
  statusCode: 200,
355
388
  body: JSON.stringify({
356
389
  message: `Executed ${results.length} total (schedules + timers)`,
357
390
  executed: results.length,
391
+ schedules_due: dueSchedules?.length || 0,
358
392
  success: successCount,
359
393
  failed: failedCount,
360
394
  skipped: skippedCount,
@@ -386,22 +420,41 @@ export const handler = createHandler(async (ctx: RequestContext) => {
386
420
  }
387
421
  }
388
422
  })
389
- // CIL[DOC-VECTOR type="context" content="purpose='Netlify function entrypoint that runs scheduled actions, timers, threshold checks, retries and daily log cleanup.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
390
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
391
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
392
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
393
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
394
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
395
423
  // CIL[END stable_id="~/.framework/functions/system-cron.ts:handler:constant"]
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+ /**
441
+ * Executes a specified action by delegating to the appropriate handler based on the action's module type. This function facilitates the execution of different types of actions within the system.
442
+ *
443
+ * @macro Action executor that routes to specific handler implementations.
444
+ * @micro Merges action-specific and provided configuration before invoking the appropriate handler function.
445
+ * @inputSpec
446
+ * - ctx: RequestContext (required) — the context for the request execution.
447
+ * - action: any (required) — the action object containing handler information.
448
+ * - config: any (required) — additional configuration to merge with the action's config.
449
+ * @outputSpec Promise<any> — resolves to the result of the executed action handler.
450
+ * @throws Error — Custom handlers not yet implemented: <handlerName>
451
+ Error — Unknown handler module: <handlerModule>
396
452
  // CIL[BEGIN stable_id="~/.framework/functions/system-cron.ts:executeAction:function" type="function" identity="executeAction" parent="~/.framework/functions/system-cron.ts"]
397
- // CIL[DOC-MACRO purpose="Dispatches an action to the appropriate handler module (functions, integrations or custom)."]
398
- // CIL[DOC-RESPONSIBILITY responsibility="Merges action and schedule config and delegates to a handler module."]
399
- // CIL[DOC-CONTEXT module="system-cron" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/pipeline-runner.ts,.framework/functions/_shared/retry-deliveries.ts,.framework/functions/system-cron.ts"]
400
- // CIL[DOC-CONTRACT inputs="ctx: RequestContext, action: any, config: any" outputs="any handler result" errors="Throws for unknown handler module or not-implemented custom handlers." side_effects="none"]
401
- // CIL[DOC-MICRO logic_summary="Merges config from the action with the schedule, then switches on handler_module to call the function, integration, or custom handler." notable_decisions="Custom handlers are explicitly not implemented and rejected; defaults fall through to an unknown-module error."]
402
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
403
- // CIL[DOC-STABILITY stability="stable"]
404
- // CIL[DOC-AUDIENCE audience="developers"]
453
+ * @sideEffects none
454
+ * @stability internal
455
+ * @calls executeFunctionHandler, executeIntegrationHandler
456
+ * @cil-generated
457
+ */
405
458
  async function executeAction(
406
459
  ctx: RequestContext,
407
460
  action: any,
@@ -429,22 +482,41 @@ async function executeAction(
429
482
  throw new Error(`Unknown handler module: ${handlerModule}`)
430
483
  }
431
484
  }
432
- // CIL[DOC-VECTOR type="context" content="purpose='Dispatches an action to the appropriate handler module (functions, integrations or custom).'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
433
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
434
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
435
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
436
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
437
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
438
485
  // CIL[END stable_id="~/.framework/functions/system-cron.ts:executeAction:function"]
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+
439
502
  // CIL[BEGIN stable_id="~/.framework/functions/system-cron.ts:executeFunctionHandler:function" type="function" identity="executeFunctionHandler" parent="~/.framework/functions/system-cron.ts"]
440
- // CIL[DOC-MACRO purpose="Implements built-in function handlers: send_email, generate_report, notify_watchers, run_pipeline."]
441
- // CIL[DOC-RESPONSIBILITY responsibility="Maps a handler name to a typed function and invokes it with the request context and config."]
442
- // CIL[DOC-CONTEXT module="system-cron" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/pipeline-runner.ts,.framework/functions/_shared/retry-deliveries.ts,.framework/functions/system-cron.ts"]
443
- // CIL[DOC-CONTRACT inputs="ctx: RequestContext, handlerName: string, config: any" outputs="handler result object" errors="Throws for unknown handler or missing pipeline_id in run_pipeline." side_effects="May call runPipeline and log to console."]
444
- // CIL[DOC-MICRO logic_summary="Uses a handlers map to select and call the requested function; validates required fields before invoking run_pipeline." notable_decisions="Stubs produce console logs and mock results; run_pipeline requires pipeline_id and returns normalized execution summary."]
445
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
446
- // CIL[DOC-STABILITY stability="stable"]
447
- // CIL[DOC-AUDIENCE audience="developers"]
503
+ /**
504
+ * Executes a specified function handler based on the provided handler name and configuration. This module facilitates various operations such as sending emails, generating reports, notifying watchers, and running pipelines.
505
+ *
506
+ * @macro Function dispatcher for executing predefined asynchronous handlers.
507
+ * @micro Uses a record of handler functions indexed by name to dynamically invoke the appropriate operation.
508
+ * @inputSpec
509
+ * ctx: RequestContext (required) — the context for the request.
510
+ * handlerName: string (required) — the name of the handler to execute.
511
+ * config: any (required) — configuration object for the handler.
512
+ * @outputSpec Promise<any> — resolves to the result of the executed handler, which varies based on the handler type.
513
+ * @throws Error — Unknown function handler: handlerName
514
+ * @sideEffects Logs to the console for each handler execution.
515
+ * @stability internal
516
+ * @calls runPipeline
517
+ * @errorHandling none
518
+ * @cil-generated
519
+ */
448
520
  async function executeFunctionHandler(
449
521
  ctx: RequestContext,
450
522
  handlerName: string,
@@ -491,21 +563,35 @@ async function executeFunctionHandler(
491
563
  return await handler(ctx, config)
492
564
  }
493
565
  // CIL[END stable_id="~/.framework/functions/system-cron.ts:executeFunctionHandler:function"]
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
494
582
  // CIL[BEGIN stable_id="~/.framework/functions/system-cron.ts:executeIntegrationHandler:function" type="function" identity="executeIntegrationHandler" parent="~/.framework/functions/system-cron.ts"]
495
- // CIL[DOC-MACRO purpose="Stub for integration-based action handlers."]
496
- // CIL[DOC-VECTOR type="context" content="purpose='Implements built-in function handlers: send_email, generate_report, notify_watchers, run_pipeline.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
497
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
498
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
499
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
500
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
501
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
502
- // CIL[DOC-RESPONSIBILITY responsibility="Logs the invocation of an integration handler and returns a placeholder result."]
503
- // CIL[DOC-CONTEXT module="system-cron" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/pipeline-runner.ts,.framework/functions/_shared/retry-deliveries.ts,.framework/functions/system-cron.ts"]
504
- // CIL[DOC-CONTRACT inputs="ctx: RequestContext, handlerName: string, config: any" outputs="placeholder result" errors="none" side_effects="logs to console"]
505
- // CIL[DOC-MICRO logic_summary="Logs the handler name and config, then returns an executed placeholder." notable_decisions="Integration handlers are not fully implemented in this file."]
506
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
507
- // CIL[DOC-STABILITY stability="experimental"]
508
- // CIL[DOC-AUDIENCE audience="developers"]
583
+ /**
584
+ * Executes an integration handler based on the provided handler name and configuration. This function facilitates the execution of various integration tasks within the system.
585
+ *
586
+ * @inputSpec
587
+ * ctx: RequestContext (required) — the context of the request including metadata.
588
+ * handlerName: string (required) — the name of the integration handler to execute.
589
+ * config: any (required) — configuration parameters for the integration handler.
590
+ * @outputSpec Promise<any> — returns an object indicating execution status and the handler name.
591
+ * @sideEffects logs the execution details to the console
592
+ * @stability internal
593
+ * @cil-generated
594
+ */
509
595
  async function executeIntegrationHandler(
510
596
  ctx: RequestContext,
511
597
  handlerName: string,
@@ -514,22 +600,38 @@ async function executeIntegrationHandler(
514
600
  console.log(`[${ctx.requestId}] Integration handler: ${handlerName}`, config)
515
601
  return { executed: true, handler: handlerName }
516
602
  }
517
- // CIL[DOC-VECTOR type="context" content="purpose='Stub for integration-based action handlers.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
518
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
519
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
520
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
521
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
522
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
523
603
  // CIL[END stable_id="~/.framework/functions/system-cron.ts:executeIntegrationHandler:function"]
604
+
605
+
606
+
607
+
608
+
609
+
610
+
611
+
612
+
613
+
614
+
615
+
616
+
617
+
618
+
619
+
524
620
  // CIL[BEGIN stable_id="~/.framework/functions/system-cron.ts:evaluateThresholds:function" type="function" identity="evaluateThresholds" parent="~/.framework/functions/system-cron.ts"]
525
- // CIL[DOC-MACRO purpose="Fetches active threshold alerts, compares metrics to thresholds and fires associated pipelines when breached."]
526
- // CIL[DOC-RESPONSIBILITY responsibility="Evaluates error_rate, latency_p95 and pipeline_failure_rate thresholds and runs fire pipelines for breached ones."]
527
- // CIL[DOC-CONTEXT module="system-cron" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/pipeline-runner.ts,.framework/functions/_shared/retry-deliveries.ts,.framework/functions/system-cron.ts"]
528
- // CIL[DOC-CONTRACT inputs="ctx: RequestContext" outputs="array of threshold evaluation results" errors="Logs and swallows individual threshold errors; returns empty on DB errors." side_effects="Queries threshold_alerts, calls runPipeline, emits threshold.breached audit events."]
529
- // CIL[DOC-MICRO logic_summary="Fetches active thresholds, computes the requested metric over a window, compares it to the configured operator/value, fires the linked pipeline if breached, and emits audit events." notable_decisions="Unknown metrics are skipped with a warning; pipeline fire errors are logged but the threshold result still records breached=true."]
530
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
531
- // CIL[DOC-STABILITY stability="stable"]
532
- // CIL[DOC-AUDIENCE audience="developers"]
621
+ /**
622
+ * Evaluates active thresholds for various metrics to determine if they have been breached, potentially triggering associated pipelines. This function is essential for monitoring system performance and alerting based on predefined criteria.
623
+ *
624
+ * @macro Async function responsible for evaluating threshold alerts and managing pipeline executions.
625
+ * @micro Iterates through active thresholds, fetching metric data via RPC calls and assessing breaches based on specified operators.
626
+ * @inputSpec
627
+ * ctx: RequestContext (required) — the context for the request containing necessary information for processing.
628
+ * @outputSpec Promise<Array<{thresholdId: string, breached: boolean, fired: boolean}>> — an array of objects indicating the threshold ID, breach status, and whether the associated pipeline was fired.
629
+ * @sideEffects DB reads from 'threshold_alerts', RPC calls to fetch metric data, potential DB writes when triggering pipelines.
630
+ * @stability internal
631
+ * @calls adminDb.from('threshold_alerts'), adminDb.rpc('get_error_rate'), adminDb.rpc('get_latency_percentiles'), adminDb.rpc('get_pipeline_stats'), runPipeline
632
+ * @errorHandling logs errors to the console but does not throw them.
633
+ * @cil-generated
634
+ */
533
635
  async function evaluateThresholds(ctx: RequestContext): Promise<Array<{thresholdId: string, breached: boolean, fired: boolean}>> {
534
636
  const results: Array<{thresholdId: string, breached: boolean, fired: boolean}> = []
535
637
 
@@ -656,25 +758,36 @@ async function evaluateThresholds(ctx: RequestContext): Promise<Array<{threshold
656
758
  }
657
759
  }
658
760
  // CIL[END stable_id="~/.framework/functions/system-cron.ts:evaluateThresholds:function"]
761
+
762
+
763
+
764
+
765
+
766
+
767
+
768
+
769
+
770
+
771
+
772
+
773
+
774
+
775
+
776
+
659
777
  // CIL[BEGIN stable_id="~/.framework/functions/system-cron.ts:cleanupOldLogs:function" type="function" identity="cleanupOldLogs" parent="~/.framework/functions/system-cron.ts"]
660
- // CIL[DOC-MACRO purpose="Invokes the database cleanup_old_logs RPC to delete log records older than 90 days."]
661
- // CIL[DOC-VECTOR type="context" content="purpose='Fetches active threshold alerts, compares metrics to thresholds and fires associated pipelines when breached.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
662
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
663
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
664
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
665
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
666
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
667
- // CIL[DOC-RESPONSIBILITY responsibility="Removes stale logs and returns the number of deleted records."]
668
- // CIL[DOC-CONTEXT module="system-cron" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/pipeline-runner.ts,.framework/functions/_shared/retry-deliveries.ts,.framework/functions/system-cron.ts"]
669
- // CIL[DOC-CONTRACT inputs="none" outputs="number of deleted records" errors="Logs cleanup errors and returns 0 on failure." side_effects="Calls the cleanup_old_logs RPC which deletes old log records."]
670
- // CIL[DOC-MICRO logic_summary="Calls the cleanup_old_logs RPC with a 90-day retention and returns the deleted count, logging any errors." notable_decisions="Uses a fixed 90-day retention window; deletion count is read from the first row of the RPC result."]
671
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
672
- // CIL[DOC-STABILITY stability="stable"]
673
- // CIL[DOC-AUDIENCE audience="developers"]
778
+ /**
779
+ * Cleans up old log records that are older than a specified retention period to maintain the database by removing unnecessary log entries.
780
+ *
781
+ * @outputSpec Promise<number> - returns the count of deleted log records.
782
+ * @sideEffects Makes an RPC call to 'cleanup_old_logs' in the database.
783
+ * @stability internal
784
+ * @calls adminDb.rpc
785
+ * @cil-generated
786
+ */
674
787
  async function cleanupOldLogs(): Promise<number> {
675
788
  try {
676
789
  const { data, error } = await adminDb.rpc('cleanup_old_logs', {
677
- p_retention_days: 90
790
+ p_retention_days: 30
678
791
  })
679
792
 
680
793
  if (error) {
@@ -693,10 +806,10 @@ async function cleanupOldLogs(): Promise<number> {
693
806
  return 0
694
807
  }
695
808
  }
696
- // CIL[DOC-VECTOR type="context" content="purpose='Invokes the database cleanup_old_logs RPC to delete log records older than 90 days.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
697
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
698
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
699
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
700
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
701
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
702
- // CIL[END stable_id="~/.framework/functions/system-cron.ts:cleanupOldLogs:function"]
809
+ // CIL[END stable_id="~/.framework/functions/system-cron.ts:cleanupOldLogs:function"]
810
+
811
+
812
+
813
+
814
+
815
+
@@ -11,14 +11,13 @@
11
11
 
12
12
  import { createHandler, requireSystemContextWithAudit } from './_shared/middleware'
13
13
  import { adminDb } from './_shared/db'
14
+ // CIL[END stable_id="~/.framework/functions/tests.ts:module_header:module_header"]
14
15
  // CIL[DOC-VECTOR type="context" content="purpose='Module setup and imports for tests.ts'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts"]
15
16
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
16
17
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
17
18
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
18
19
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
19
20
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
20
- // CIL[END stable_id="~/.framework/functions/tests.ts:module_header:module_header"]
21
- // CIL[BEGIN stable_id="~/.framework/functions/tests.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/tests.ts"]
22
21
  // CIL[DOC-MACRO purpose="Define the handler constant"]
23
22
  // CIL[DOC-RESPONSIBILITY responsibility="Expose the handler value to consumers"]
24
23
  // CIL[DOC-CONTEXT module=".framework/functions/tests.ts" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/tests.ts"]
@@ -26,9 +25,11 @@ import { adminDb } from './_shared/db'
26
25
  // CIL[DOC-MICRO logic_summary="Binds the expression to the handler identifier" notable_decisions="[]"]
27
26
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
28
27
  // CIL[DOC-STABILITY stability="stable"]
28
+ // CIL[BEGIN stable_id="~/.framework/functions/tests.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/tests.ts"]
29
29
  export const handler = createHandler(async (ctx) => {
30
- const authErr = requireSystemContextWithAudit(ctx)
31
- if (authErr) return authErr
30
+ // Throws a statusCode-carrying error on denial; createHandler maps it to a
31
+ // real HTTP 401/403 (F-051).
32
+ requireSystemContextWithAudit(ctx)
32
33
 
33
34
  const q = (ctx as any).query || {}
34
35
  const action = q.action || 'list'
@@ -114,10 +115,10 @@ export const handler = createHandler(async (ctx) => {
114
115
 
115
116
  return { data: data ?? [], error: null }
116
117
  })
118
+ // CIL[END stable_id="~/.framework/functions/tests.ts:handler:constant"]
117
119
  // CIL[DOC-VECTOR type="context" content="purpose='Define the handler constant'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts"]
118
120
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
119
121
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
120
122
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
121
123
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
122
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
123
- // CIL[END stable_id="~/.framework/functions/tests.ts:handler:constant"]
124
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]