@cosmicdrift/kumiko-framework 0.386.0 → 0.388.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/AGENTS.md +6 -1
  2. package/LICENSE +21 -57
  3. package/README.md +2 -2
  4. package/agents/examples/anonymous-access.md +1 -1
  5. package/agents/examples/apex-landing.md +204 -0
  6. package/agents/examples/api-worker-split.md +64 -0
  7. package/agents/examples/app-config.md +14 -0
  8. package/agents/examples/auth-mfa.md +115 -0
  9. package/agents/examples/env-composition.md +28 -1
  10. package/agents/examples/legal-pages.md +1 -1
  11. package/agents/examples/prod-boot-options.md +16 -0
  12. package/agents/examples/rate-limiting.md +48 -0
  13. package/agents/examples/record-detail-layout.md +692 -0
  14. package/agents/examples/seed-migration.md +212 -0
  15. package/agents/examples/wizard-form.md +941 -0
  16. package/agents/examples/writeform-section.md +548 -0
  17. package/agents/features.md +19 -2
  18. package/agents/widgets.md +40 -39
  19. package/dist/api/api-constants.js +2 -2
  20. package/dist/api/auth-middleware.js +7 -7
  21. package/dist/api/auth-rate-limiters.js +7 -3
  22. package/dist/api/auth-routes-mfa.js +1 -1
  23. package/dist/api/auth-routes-session.js +1 -1
  24. package/dist/api/auth-routes-shared.js +7 -3
  25. package/dist/api/auth-routes-signup.js +1 -1
  26. package/dist/api/client-error-route.js +8 -2
  27. package/dist/api/client-ip.js +3 -1
  28. package/dist/api/extra-route.js +1 -1
  29. package/dist/api/index.d.ts +3 -1
  30. package/dist/api/index.js +3 -1
  31. package/dist/api/pii-leak-guard.js +4 -2
  32. package/dist/api/readiness.js +5 -5
  33. package/dist/api/redis-sse-broker.js +8 -6
  34. package/dist/api/request-context.d.ts +1 -1
  35. package/dist/api/request-context.js +1 -1
  36. package/dist/api/routes.js +2 -2
  37. package/dist/api/server-boot-checks.d.ts +10 -0
  38. package/dist/api/server-boot-checks.js +157 -0
  39. package/dist/api/server-event-dispatcher.d.ts +26 -0
  40. package/dist/api/server-event-dispatcher.js +208 -0
  41. package/dist/api/server-extra-routes.d.ts +11 -0
  42. package/dist/api/server-extra-routes.js +203 -0
  43. package/dist/api/server-middleware.d.ts +20 -0
  44. package/dist/api/server-middleware.js +211 -0
  45. package/dist/api/server-routes.d.ts +19 -0
  46. package/dist/api/server-routes.js +293 -0
  47. package/dist/api/server-websocket-routes.d.ts +4 -0
  48. package/dist/api/server-websocket-routes.js +108 -0
  49. package/dist/api/server-wiring.d.ts +32 -0
  50. package/dist/api/server-wiring.js +236 -0
  51. package/dist/api/server.d.ts +10 -15
  52. package/dist/api/server.js +48 -1250
  53. package/dist/api/session-cookies.js +4 -4
  54. package/dist/api/sse-broker.js +1 -1
  55. package/dist/api/sse-route.d.ts +13 -13
  56. package/dist/api/sse-route.js +31 -27
  57. package/dist/auth/index.js +4 -4
  58. package/dist/auth/roles.d.ts +4 -4
  59. package/dist/auth/roles.js +24 -24
  60. package/dist/compliance/duration-spec.js +18 -20
  61. package/dist/compliance/index.js +2 -3
  62. package/dist/compliance/override-schema.d.ts +4 -4
  63. package/dist/compliance/override-schema.js +19 -22
  64. package/dist/compliance/profiles.d.ts +26 -29
  65. package/dist/compliance/profiles.js +62 -69
  66. package/dist/compliance/sub-processors.d.ts +28 -30
  67. package/dist/compliance/sub-processors.js +17 -21
  68. package/dist/consumer-cli.js +4 -4
  69. package/dist/crypto/blind-index.js +18 -17
  70. package/dist/crypto/ciphertext-pattern.js +1 -1
  71. package/dist/crypto/event-pii.js +3 -3
  72. package/dist/crypto/kek-source.d.ts +1 -1
  73. package/dist/crypto/kek-source.js +3 -2
  74. package/dist/crypto/kms-adapter.d.ts +1 -1
  75. package/dist/crypto/kms-adapter.js +4 -6
  76. package/dist/crypto/kms-wiring.d.ts +1 -2
  77. package/dist/crypto/kms-wiring.js +2 -2
  78. package/dist/crypto/owner-transition-rekey.d.ts +5 -1
  79. package/dist/crypto/owner-transition-rekey.js +1 -1
  80. package/dist/crypto/pg-kms-adapter.js +2 -6
  81. package/dist/crypto/pii-field-encryption.d.ts +5 -1
  82. package/dist/crypto/pii-field-encryption.js +7 -5
  83. package/dist/crypto/subject-resolver.d.ts +1 -1
  84. package/dist/crypto/subject-resolver.js +2 -2
  85. package/dist/db/aggregate-sql.d.ts +21 -0
  86. package/dist/db/aggregate-sql.js +155 -0
  87. package/dist/db/apply-entity-event.d.ts +6 -6
  88. package/dist/db/apply-entity-event.js +55 -55
  89. package/dist/db/blind-index-cleanup.js +7 -7
  90. package/dist/db/closed-connection.d.ts +9 -0
  91. package/dist/db/closed-connection.js +95 -0
  92. package/dist/db/collect-table-metas.js +10 -11
  93. package/dist/db/compound-types.d.ts +1 -1
  94. package/dist/db/compound-types.js +12 -12
  95. package/dist/db/cursor.js +3 -4
  96. package/dist/db/dialect.d.ts +2 -2
  97. package/dist/db/dialect.js +3 -3
  98. package/dist/db/distinct-on.d.ts +1 -1
  99. package/dist/db/driver-row-coercion.d.ts +2 -0
  100. package/dist/db/driver-row-coercion.js +186 -0
  101. package/dist/db/driver-value-preparation.d.ts +16 -0
  102. package/dist/db/driver-value-preparation.js +99 -0
  103. package/dist/db/eagerload.d.ts +3 -3
  104. package/dist/db/eagerload.js +21 -12
  105. package/dist/db/entity-field-encryption.d.ts +1 -0
  106. package/dist/db/entity-field-encryption.js +1 -1
  107. package/dist/db/entity-table-meta.d.ts +2 -2
  108. package/dist/db/entity-table-meta.js +105 -112
  109. package/dist/db/event-store-executor-context.d.ts +3 -2
  110. package/dist/db/event-store-executor-context.js +13 -13
  111. package/dist/db/event-store-executor-read-aggregate.d.ts +8 -0
  112. package/dist/db/event-store-executor-read-aggregate.js +112 -0
  113. package/dist/db/event-store-executor-read-filter.d.ts +31 -0
  114. package/dist/db/event-store-executor-read-filter.js +203 -0
  115. package/dist/db/event-store-executor-read-paging.d.ts +14 -0
  116. package/dist/db/event-store-executor-read-paging.js +99 -0
  117. package/dist/db/event-store-executor-read-rows.d.ts +6 -0
  118. package/dist/db/event-store-executor-read-rows.js +32 -0
  119. package/dist/db/event-store-executor-read-search.d.ts +28 -0
  120. package/dist/db/event-store-executor-read-search.js +221 -0
  121. package/dist/db/event-store-executor-read-sort.d.ts +41 -0
  122. package/dist/db/event-store-executor-read-sort.js +130 -0
  123. package/dist/db/event-store-executor-read-where.d.ts +24 -0
  124. package/dist/db/event-store-executor-read-where.js +81 -0
  125. package/dist/db/event-store-executor-read.d.ts +2 -9
  126. package/dist/db/event-store-executor-read.js +50 -704
  127. package/dist/db/event-store-executor-write-steps.d.ts +20 -0
  128. package/dist/db/event-store-executor-write-steps.js +100 -0
  129. package/dist/db/event-store-executor-write.js +401 -510
  130. package/dist/db/index.d.ts +6 -2
  131. package/dist/db/index.js +5 -1
  132. package/dist/db/list-aggregate-labels.d.ts +14 -0
  133. package/dist/db/list-aggregate-labels.js +26 -0
  134. package/dist/db/located-timestamp.d.ts +11 -11
  135. package/dist/db/located-timestamp.js +29 -30
  136. package/dist/db/migrate-generator.d.ts +1 -1
  137. package/dist/db/migrate-generator.js +97 -105
  138. package/dist/db/migrate-runner.js +29 -26
  139. package/dist/db/money.d.ts +6 -6
  140. package/dist/db/money.js +29 -27
  141. package/dist/db/queries/backfill-pii.js +5 -5
  142. package/dist/db/queries/ddl.js +1 -1
  143. package/dist/db/queries/es-ops.d.ts +1 -1
  144. package/dist/db/queries/es-ops.js +1 -1
  145. package/dist/db/queries/event-consumer.js +3 -3
  146. package/dist/db/queries/event-store.js +4 -2
  147. package/dist/db/queries/projection-rebuild.js +3 -3
  148. package/dist/db/queries/raw-sql.d.ts +2 -2
  149. package/dist/db/queries/raw-sql.js +2 -2
  150. package/dist/db/queries/shadow-swap.js +19 -19
  151. package/dist/db/query.d.ts +3 -16
  152. package/dist/db/query.js +8 -761
  153. package/dist/db/rebuild-marker.js +20 -21
  154. package/dist/db/reference-data.js +6 -1
  155. package/dist/db/replay-migration-sql.js +2 -2
  156. package/dist/db/schema-inspection.js +4 -5
  157. package/dist/db/table-builder.d.ts +1 -2
  158. package/dist/db/table-builder.js +137 -190
  159. package/dist/db/table-info.d.ts +10 -0
  160. package/dist/db/table-info.js +45 -0
  161. package/dist/db/temporal-value-guards.d.ts +6 -0
  162. package/dist/db/temporal-value-guards.js +15 -0
  163. package/dist/db/tenant-db-runner.d.ts +1 -0
  164. package/dist/db/tenant-db-runner.js +3 -0
  165. package/dist/db/tenant-db.d.ts +2 -2
  166. package/dist/db/tenant-db.js +48 -11
  167. package/dist/db/where-clause.d.ts +6 -0
  168. package/dist/db/where-clause.js +236 -0
  169. package/dist/derivatives/delete-stored-file.js +6 -2
  170. package/dist/derivatives/derivatives-context.js +1 -1
  171. package/dist/engine/boot-validator/access-roles.js +4 -3
  172. package/dist/engine/boot-validator/api-ext.js +14 -14
  173. package/dist/engine/boot-validator/boot-check.js +1 -1
  174. package/dist/engine/boot-validator/config-deps.js +7 -6
  175. package/dist/engine/boot-validator/detail-screens.js +4 -4
  176. package/dist/engine/boot-validator/entity-handler.d.ts +1 -0
  177. package/dist/engine/boot-validator/entity-handler.js +77 -61
  178. package/dist/engine/boot-validator/form-derivations.js +35 -1
  179. package/dist/engine/boot-validator/gdpr-storage.js +4 -4
  180. package/dist/engine/boot-validator/i18n-keys.js +6 -4
  181. package/dist/engine/boot-validator/index.d.ts +2 -2
  182. package/dist/engine/boot-validator/index.js +22 -20
  183. package/dist/engine/boot-validator/nav.js +5 -5
  184. package/dist/engine/boot-validator/ownership.js +12 -9
  185. package/dist/engine/boot-validator/parent-ref.js +1 -1
  186. package/dist/engine/boot-validator/pii-retention.js +258 -187
  187. package/dist/engine/boot-validator/projection-list-screens.js +7 -7
  188. package/dist/engine/boot-validator/query-refs.js +1 -1
  189. package/dist/engine/boot-validator/screens-actions.d.ts +1 -0
  190. package/dist/engine/boot-validator/screens-actions.js +23 -17
  191. package/dist/engine/boot-validator/screens-dashboard.js +2 -5
  192. package/dist/engine/boot-validator/screens-forms.js +12 -17
  193. package/dist/engine/boot-validator/screens-kind-config-edit.d.ts +3 -0
  194. package/dist/engine/boot-validator/screens-kind-config-edit.js +88 -0
  195. package/dist/engine/boot-validator/screens-kind-entity-edit.d.ts +3 -0
  196. package/dist/engine/boot-validator/screens-kind-entity-edit.js +55 -0
  197. package/dist/engine/boot-validator/screens-kind-entity-list.d.ts +3 -0
  198. package/dist/engine/boot-validator/screens-kind-entity-list.js +228 -0
  199. package/dist/engine/boot-validator/screens-kind-projection-detail.d.ts +3 -0
  200. package/dist/engine/boot-validator/screens-kind-projection-detail.js +235 -0
  201. package/dist/engine/boot-validator/screens-kind-projection-list.d.ts +3 -0
  202. package/dist/engine/boot-validator/screens-kind-projection-list.js +52 -0
  203. package/dist/engine/boot-validator/screens-kind-secret-mint.d.ts +3 -0
  204. package/dist/engine/boot-validator/screens-kind-secret-mint.js +28 -0
  205. package/dist/engine/boot-validator/screens-kind-shared.d.ts +37 -0
  206. package/dist/engine/boot-validator/screens-kind-shared.js +142 -0
  207. package/dist/engine/boot-validator/screens-lists.d.ts +2 -1
  208. package/dist/engine/boot-validator/screens-lists.js +26 -24
  209. package/dist/engine/boot-validator/screens.d.ts +0 -2
  210. package/dist/engine/boot-validator/screens.js +102 -869
  211. package/dist/engine/boot-validator/security-baseline.js +3 -2
  212. package/dist/engine/boot-validator/transfer-graph.js +2 -2
  213. package/dist/engine/boot-validator/workspaces.js +3 -3
  214. package/dist/engine/bridge-stub.js +3 -4
  215. package/dist/engine/build-app-schema.js +130 -170
  216. package/dist/engine/build-config-feature-schema.js +50 -50
  217. package/dist/engine/build-target.js +20 -23
  218. package/dist/engine/codemod/pipeline-codemod.js +20 -13
  219. package/dist/engine/config-helpers.js +4 -4
  220. package/dist/engine/constants.js +2 -2
  221. package/dist/engine/create-app.js +2 -2
  222. package/dist/engine/define-feature.js +21 -13
  223. package/dist/engine/define-handler.js +13 -11
  224. package/dist/engine/define-step.js +1 -1
  225. package/dist/engine/define-workflow.d.ts +5 -5
  226. package/dist/engine/define-workflow.js +6 -6
  227. package/dist/engine/entity-handlers.d.ts +13 -0
  228. package/dist/engine/entity-handlers.js +22 -34
  229. package/dist/engine/entity-list-runtime-options.d.ts +8 -0
  230. package/dist/engine/entity-list-runtime-options.js +18 -0
  231. package/dist/engine/event-def.js +2 -2
  232. package/dist/engine/extension-names.d.ts +16 -17
  233. package/dist/engine/extension-names.js +37 -38
  234. package/dist/engine/extensions/escape-hatch-usage.js +1 -1
  235. package/dist/engine/extensions/tenant-data.js +2 -2
  236. package/dist/engine/extensions/user-data.d.ts +23 -24
  237. package/dist/engine/factories.d.ts +14 -13
  238. package/dist/engine/factories.js +38 -37
  239. package/dist/engine/feature-ast/entity-field-types.js +1 -1
  240. package/dist/engine/feature-ast/extractors/handlers.js +2 -1
  241. package/dist/engine/feature-ast/extractors/hooks.js +1 -1
  242. package/dist/engine/feature-ast/extractors/round2.js +25 -6
  243. package/dist/engine/feature-ast/extractors/shared.d.ts +2 -3
  244. package/dist/engine/feature-ast/extractors/shared.js +2 -3
  245. package/dist/engine/feature-ast/parse.js +13 -13
  246. package/dist/engine/feature-ast/patch.js +4 -182
  247. package/dist/engine/feature-ast/pattern-change-schema.d.ts +3 -0
  248. package/dist/engine/feature-ast/pattern-change-schema.js +2 -1
  249. package/dist/engine/feature-ast/pattern-id-matchers.d.ts +7 -0
  250. package/dist/engine/feature-ast/pattern-id-matchers.js +210 -0
  251. package/dist/engine/feature-ast/patterns.d.ts +11 -2
  252. package/dist/engine/feature-ast/patterns.js +43 -51
  253. package/dist/engine/feature-ast/render.js +50 -89
  254. package/dist/engine/feature-config-events-jobs.js +15 -12
  255. package/dist/engine/feature-entity-handlers.js +12 -5
  256. package/dist/engine/feature-manifest.d.ts +9 -9
  257. package/dist/engine/feature-manifest.js +6 -7
  258. package/dist/engine/feature-ui-extensions.d.ts +3 -3
  259. package/dist/engine/feature-ui-extensions.js +30 -22
  260. package/dist/engine/field-access.js +5 -6
  261. package/dist/engine/form-derivations.js +18 -7
  262. package/dist/engine/handler-field-references.js +1 -1
  263. package/dist/engine/index.d.ts +1 -0
  264. package/dist/engine/index.js +4 -4
  265. package/dist/engine/object-form.d.ts +1 -0
  266. package/dist/engine/object-form.js +14 -4
  267. package/dist/engine/ownership.js +3 -3
  268. package/dist/engine/parse-ref-target.js +5 -7
  269. package/dist/engine/pattern-library/index.js +2 -2
  270. package/dist/engine/pattern-library/library.js +2 -2
  271. package/dist/engine/pattern-library/types.js +3 -3
  272. package/dist/engine/pipeline.js +2 -2
  273. package/dist/engine/project-app-schema-for-roles.d.ts +2 -0
  274. package/dist/engine/project-app-schema-for-roles.js +7 -5
  275. package/dist/engine/projection-helpers.js +9 -9
  276. package/dist/engine/qualified-name.js +2 -2
  277. package/dist/engine/registry-facade.js +1 -1
  278. package/dist/engine/registry-ingest.js +13 -13
  279. package/dist/engine/registry-state.js +17 -19
  280. package/dist/engine/registry-validate.js +12 -12
  281. package/dist/engine/run-in.js +2 -2
  282. package/dist/engine/run-pipeline.js +7 -0
  283. package/dist/engine/schema-builder.js +251 -233
  284. package/dist/engine/screen-filter-ops.js +17 -20
  285. package/dist/engine/screen-helpers.js +4 -3
  286. package/dist/engine/screen-kind.d.ts +7 -0
  287. package/dist/engine/screen-kind.js +1 -0
  288. package/dist/engine/state-machine.d.ts +12 -12
  289. package/dist/engine/state-machine.js +7 -7
  290. package/dist/engine/steps/_resolver-utils.js +4 -3
  291. package/dist/engine/steps/for-each.js +4 -4
  292. package/dist/engine/steps/unsafe-projection-delete.js +1 -1
  293. package/dist/engine/steps/unsafe-projection-upsert.js +4 -4
  294. package/dist/engine/steps/wait-for-event.js +4 -4
  295. package/dist/engine/steps/workflow-system-events.js +3 -3
  296. package/dist/engine/strip-disabled-features-from-app-schema.js +51 -14
  297. package/dist/engine/tier-resolver-extension.d.ts +29 -27
  298. package/dist/engine/tier-resolver-extension.js +26 -26
  299. package/dist/engine/transfer-adjacency.js +2 -2
  300. package/dist/engine/validate-projection-allowlist.js +9 -28
  301. package/dist/engine/walk-step-instances.d.ts +2 -0
  302. package/dist/engine/walk-step-instances.js +38 -0
  303. package/dist/engine/where-rule-lint.js +1 -1
  304. package/dist/engine/write-handler-qn-extract.js +1 -1
  305. package/dist/entrypoint/index.d.ts +4 -1
  306. package/dist/entrypoint/index.js +10 -4
  307. package/dist/env/index.d.ts +7 -6
  308. package/dist/env/index.js +10 -9
  309. package/dist/errors/docs-url.d.ts +1 -1
  310. package/dist/errors/docs-url.js +22 -2
  311. package/dist/errors/transition-details.js +7 -7
  312. package/dist/errors/write-error-info.d.ts +6 -6
  313. package/dist/errors/write-error-info.js +6 -6
  314. package/dist/es-ops/context.d.ts +9 -9
  315. package/dist/es-ops/context.js +29 -29
  316. package/dist/es-ops/index.js +7 -9
  317. package/dist/es-ops/operations-schema.js +4 -10
  318. package/dist/es-ops/runner.d.ts +11 -11
  319. package/dist/es-ops/runner.js +49 -53
  320. package/dist/es-ops/types.d.ts +55 -55
  321. package/dist/es-ops/types.js +11 -11
  322. package/dist/event-store/admin-api.js +7 -8
  323. package/dist/event-store/errors.js +1 -1
  324. package/dist/event-store/event-store.js +12 -6
  325. package/dist/event-store/rebuild-dead-letter.js +1 -1
  326. package/dist/files/bind-pending-file-refs.js +3 -3
  327. package/dist/files/create-file-ref-from-bytes.js +4 -1
  328. package/dist/files/feature.js +9 -10
  329. package/dist/files/file-handle.js +7 -9
  330. package/dist/files/file-ref-entity.js +15 -15
  331. package/dist/files/file-ref-table.js +7 -8
  332. package/dist/files/file-routes.d.ts +7 -0
  333. package/dist/files/file-routes.js +22 -13
  334. package/dist/files/in-memory-provider.js +8 -9
  335. package/dist/files/local-provider.js +18 -25
  336. package/dist/files/provider-resolver.d.ts +7 -7
  337. package/dist/files/resolve-content-type.js +43 -0
  338. package/dist/files/storage-tracking.js +2 -2
  339. package/dist/files/upload-ledger.js +7 -0
  340. package/dist/files/zip-stream.d.ts +12 -19
  341. package/dist/files/zip-stream.js +44 -63
  342. package/dist/i18n/required-surface-keys.d.ts +1 -1
  343. package/dist/i18n/required-surface-keys.js +188 -212
  344. package/dist/internal/stack-support.d.ts +2 -1
  345. package/dist/internal/stack-support.js +1 -1
  346. package/dist/jobs/job-runner-context.d.ts +32 -0
  347. package/dist/jobs/job-runner-context.js +305 -0
  348. package/dist/jobs/job-runner-execution.d.ts +7 -0
  349. package/dist/jobs/job-runner-execution.js +160 -0
  350. package/dist/jobs/job-runner-gates.d.ts +19 -0
  351. package/dist/jobs/job-runner-gates.js +198 -0
  352. package/dist/jobs/job-runner-helpers.d.ts +17 -3
  353. package/dist/jobs/job-runner-helpers.js +69 -4
  354. package/dist/jobs/job-runner-schedulers.d.ts +1 -1
  355. package/dist/jobs/job-runner-schedulers.js +3 -4
  356. package/dist/jobs/job-runner-scope.d.ts +44 -0
  357. package/dist/jobs/job-runner-scope.js +102 -0
  358. package/dist/jobs/job-runner-types.d.ts +12 -0
  359. package/dist/jobs/job-runner.d.ts +0 -1
  360. package/dist/jobs/job-runner.js +57 -669
  361. package/dist/lifecycle/lifecycle.js +3 -5
  362. package/dist/lifecycle/signal-handlers.js +5 -4
  363. package/dist/logging/utils.d.ts +2 -1
  364. package/dist/logging/utils.js +38 -10
  365. package/dist/migrations/index.js +1 -1
  366. package/dist/migrations/kumiko-drift.js +14 -13
  367. package/dist/migrations/pending-rebuilds.d.ts +21 -20
  368. package/dist/migrations/pending-rebuilds.js +27 -27
  369. package/dist/migrations/projection-table-index.d.ts +3 -3
  370. package/dist/migrations/projection-table-index.js +8 -8
  371. package/dist/observability/escape-hatch-report.d.ts +3 -0
  372. package/dist/observability/escape-hatch-report.js +12 -1
  373. package/dist/observability/metric-validator.js +1 -1
  374. package/dist/observability/metrics-handle.js +3 -3
  375. package/dist/pipeline/append-event-core.js +11 -2
  376. package/dist/pipeline/cascade-handler.d.ts +1 -1
  377. package/dist/pipeline/cascade-handler.js +165 -138
  378. package/dist/pipeline/dispatch-batch.js +2 -2
  379. package/dist/pipeline/dispatch-query.js +20 -13
  380. package/dist/pipeline/dispatch-shared.d.ts +14 -3
  381. package/dist/pipeline/dispatch-shared.js +67 -721
  382. package/dist/pipeline/dispatch-stream.js +1 -1
  383. package/dist/pipeline/dispatch-write.js +297 -190
  384. package/dist/pipeline/dispatcher-utils.d.ts +1 -1
  385. package/dist/pipeline/dispatcher-utils.js +1 -1
  386. package/dist/pipeline/event-consumer-state.js +2 -2
  387. package/dist/pipeline/event-dispatcher-admin.js +2 -1
  388. package/dist/pipeline/event-dispatcher-delivery.js +4 -6
  389. package/dist/pipeline/event-dispatcher.js +17 -28
  390. package/dist/pipeline/handler-context-auth.d.ts +9 -0
  391. package/dist/pipeline/handler-context-auth.js +54 -0
  392. package/dist/pipeline/handler-context-config.d.ts +14 -0
  393. package/dist/pipeline/handler-context-config.js +113 -0
  394. package/dist/pipeline/handler-context-db.d.ts +24 -0
  395. package/dist/pipeline/handler-context-db.js +149 -0
  396. package/dist/pipeline/handler-context-dispatch.d.ts +21 -0
  397. package/dist/pipeline/handler-context-dispatch.js +89 -0
  398. package/dist/pipeline/handler-context-events.d.ts +43 -0
  399. package/dist/pipeline/handler-context-events.js +237 -0
  400. package/dist/pipeline/handler-context-notify.d.ts +12 -0
  401. package/dist/pipeline/handler-context-notify.js +55 -0
  402. package/dist/pipeline/handler-context-observability.d.ts +7 -0
  403. package/dist/pipeline/handler-context-observability.js +21 -0
  404. package/dist/pipeline/handler-context-scope.d.ts +48 -0
  405. package/dist/pipeline/handler-context-scope.js +88 -0
  406. package/dist/pipeline/irreversible-operation-gate.js +1 -1
  407. package/dist/pipeline/lifecycle-pipeline.js +9 -9
  408. package/dist/pipeline/member-read-only-transaction.js +1 -3
  409. package/dist/pipeline/msp-rebuild.js +1 -1
  410. package/dist/pipeline/notify-scope.js +12 -1
  411. package/dist/pipeline/pre-handler-gates.js +20 -4
  412. package/dist/pipeline/pre-transaction-reservations.d.ts +1 -0
  413. package/dist/pipeline/pre-transaction-reservations.js +9 -3
  414. package/dist/pipeline/projection-rebuild.js +15 -13
  415. package/dist/pipeline/system-hooks.js +39 -41
  416. package/dist/pipeline/system-identity-switch.js +1 -3
  417. package/dist/pipeline/tenant-timezone-cache.js +1 -1
  418. package/dist/random/generate.d.ts +29 -29
  419. package/dist/random/generate.js +30 -30
  420. package/dist/random/words.js +20 -20
  421. package/dist/rate-limit/middleware.js +9 -5
  422. package/dist/redis/client.js +2 -2
  423. package/dist/redis/pubsub-signal.js +14 -17
  424. package/dist/schema-cli/apply-command.d.ts +2 -0
  425. package/dist/schema-cli/apply-command.js +97 -0
  426. package/dist/schema-cli/baseline-command.d.ts +2 -0
  427. package/dist/schema-cli/baseline-command.js +33 -0
  428. package/dist/schema-cli/generate-command.d.ts +2 -0
  429. package/dist/schema-cli/generate-command.js +90 -0
  430. package/dist/schema-cli/shared.d.ts +39 -0
  431. package/dist/schema-cli/shared.js +95 -0
  432. package/dist/schema-cli/status-command.d.ts +2 -0
  433. package/dist/schema-cli/status-command.js +73 -0
  434. package/dist/schema-cli/validate-boot-input.d.ts +5 -0
  435. package/dist/schema-cli/validate-boot-input.js +130 -0
  436. package/dist/schema-cli/validate-command.d.ts +2 -0
  437. package/dist/schema-cli/validate-command.js +130 -0
  438. package/dist/schema-cli.d.ts +2 -18
  439. package/dist/schema-cli.js +47 -510
  440. package/dist/search/index.js +4 -4
  441. package/dist/search/meilisearch-adapter.js +2 -1
  442. package/dist/search/purge-subject.js +4 -5
  443. package/dist/search/reindex-entity.js +6 -9
  444. package/dist/time/boot-tz-warning.d.ts +2 -2
  445. package/dist/time/boot-tz-warning.js +8 -8
  446. package/dist/time/iana.js +10 -10
  447. package/dist/time/index.js +9 -9
  448. package/dist/time/legacy-date.d.ts +2 -2
  449. package/dist/time/legacy-date.js +6 -8
  450. package/dist/time/polyfill.js +1 -1
  451. package/dist/time/tz-context.d.ts +1 -1
  452. package/dist/time/tz-context.js +1 -1
  453. package/dist/ui-types/app-schema.js +7 -7
  454. package/dist/ui-types/list-row-meta.js +4 -4
  455. package/dist/upgrade-cli.js +159 -130
  456. package/dist/utils/compare.js +1 -1
  457. package/package.json +5 -5
  458. package/src/changes.json +358 -0
  459. package/src/scripts/codemod/crypto-shredding-testing-move.ts +2 -2
  460. package/src/scripts/codemod/feature-layout.ts +10 -2
  461. package/src/scripts/codemod/migrate-cross-tenant.ts +1 -1
  462. package/src/scripts/codemod/migrate-open-to-all.ts +1 -1
  463. package/src/scripts/codemod/object-form.ts +41 -4
  464. package/src/scripts/codemod/package-merge.ts +58 -8
  465. package/src/scripts/codemod/pii-personal-migration.ts +192 -153
  466. package/src/scripts/codemod/testing-injection.ts +122 -42
  467. package/src/scripts/codemod/testing-move.ts +29 -7
  468. package/src/scripts/codemod/unprocessable-error-details-reason.ts +2 -2
@@ -1,5 +1,5 @@
1
1
  // One-time backfill for entities that only got `searchable: true` after rows
2
- // already existed (#1206). buildSearchDocument() only runs on the write path
2
+ // already existed. buildSearchDocument() only runs on the write path
3
3
  // (createSearchEventConsumer, system-hooks.ts) — pre-existing rows never
4
4
  // pass through it, so they stay unfindable until their next write. This
5
5
  // re-derives a SearchDocument straight from the read-table row for every
@@ -47,12 +47,8 @@ async function scanAndIndexEntity(db, registry, searchAdapter, entityName, tenan
47
47
  // calls searchAdapter.remove()) — resurrecting them here would make
48
48
  // erased entities findable again.
49
49
  const deletedFilter = entity.softDelete === true ? `AND ${quoteIdent("is_deleted")} IS NOT TRUE` : "";
50
- const result = {
51
- scannedRows: 0,
52
- indexedRows: 0,
53
- wouldIndexRows: 0,
54
- failures: [],
55
- };
50
+ const failures = [];
51
+ const result = { scannedRows: 0, indexedRows: 0, wouldIndexRows: 0, failures };
56
52
  let lastId;
57
53
  // Whether a searchable field lacks a matching read-table column depends
58
54
  // only on the table's column set (rowToState/Object.hasOwn), not on any
@@ -69,11 +65,12 @@ async function scanAndIndexEntity(db, registry, searchAdapter, entityName, tenan
69
65
  WHERE ${quoteIdent("tenant_id")} = $1 ${deletedFilter} ${afterLastId}
70
66
  ORDER BY ${quoteIdent("id")} ASC
71
67
  LIMIT $2`, lastId === undefined ? [tenantId, batchSize] : [tenantId, batchSize, lastId]);
72
- if (rows.length === 0)
68
+ const [firstRow] = rows;
69
+ if (firstRow === undefined)
73
70
  break;
74
71
  if (uncheckedSchema) {
75
72
  uncheckedSchema = false;
76
- const sampleState = rowToState(rows[0], fieldNames);
73
+ const sampleState = rowToState(firstRow, fieldNames);
77
74
  const unmappedField = searchableFields.find((fieldName) => !(fieldName in sampleState));
78
75
  if (unmappedField !== undefined) {
79
76
  throw new Error(`reindexEntity: searchable field "${unmappedField}" is not mappable from read-table ` +
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Warnt einmalig beim Server-Start, wenn die Prozess-TZ nicht UTC ist.
3
- * Parameter sind für Tests injizierbar. Gibt zurück, ob gewarnt wurde.
2
+ * Warn once at server startup when the process time zone is not UTC.
3
+ * Parameters are injectable for tests. Returns whether a warning was emitted.
4
4
  */
5
5
  export declare function warnIfNonUtcServerTimeZone(resolvedTimeZone?: string, warn?: (message: string) => void): boolean;
@@ -1,17 +1,17 @@
1
- // Boot-Warnung wenn die Prozess-Uhr nicht in UTC läuft. Der gesamte
2
- // Server-Code nimmt UTC an (System-TZ ist kein Konzept — siehe timezones.md);
3
- // eine abweichende Prozess-TZ lässt versehentliche new Date()-Pfade
4
- // lokal-abhängig brechen ("grün in UTC-CI, kaputt in Berlin-Prod"). Soft:
5
- // nicht-UTC ist in Dev legitim, daher Warnung statt Boot-Fehler.
1
+ // Warn at boot when the process time zone is not UTC. All server code assumes UTC
2
+ // (the system time zone is not a framework concept); a different process time zone
3
+ // can make accidental new Date() paths behave differently locally ("green in UTC-CI,
4
+ // broken in Berlin production"). This is a soft check: non-UTC is legitimate in
5
+ // development, so warn instead of failing boot.
6
6
  function resolvedServerTimeZone() {
7
7
  return Intl.DateTimeFormat().resolvedOptions().timeZone;
8
8
  }
9
9
  /**
10
- * Warnt einmalig beim Server-Start, wenn die Prozess-TZ nicht UTC ist.
11
- * Parameter sind für Tests injizierbar. Gibt zurück, ob gewarnt wurde.
10
+ * Warn once at server startup when the process time zone is not UTC.
11
+ * Parameters are injectable for tests. Returns whether a warning was emitted.
12
12
  */
13
13
  export function warnIfNonUtcServerTimeZone(resolvedTimeZone = resolvedServerTimeZone(),
14
- // biome-ignore lint/suspicious/noConsole: boot-time warning, no logger wired this early
14
+ // biome-ignore lint/suspicious/noConsole: runs before any logger exists; the default is the only console sink
15
15
  warn = console.warn) {
16
16
  // GMT and Etc/UTC are UTC-equivalent (no offset, no DST) — TZ=GMT is a
17
17
  // legitimate way to pin a process to UTC and must not trip this warning.
package/dist/time/iana.js CHANGED
@@ -1,13 +1,13 @@
1
- // IANA-Zonenname-Validierung. Intl.supportedValuesOf("timeZone") liefert nur
2
- // KANONISCHE Namen — gültige Aliase wie "US/Pacific", "GMT", "Etc/UTC" fehlen
3
- // darin, obwohl Intl.DateTimeFormat, Temporal und ctx.tz.parse sie alle
4
- // klaglos akzeptieren. Intl.DateTimeFormat selbst ist aber case-INSENSITIVE
5
- // ("europe/berlin" resolved klaglos zu "Europe/Berlin") — ein reines
6
- // try/catch würde also Tippfehler in der Groß-/Kleinschreibung durchlassen.
7
- // Der exakte Vergleich mit resolvedOptions().timeZone schließt das: ein
8
- // gültiger kanonischer Name ODER Alias resolved IMMER zu sich selbst
9
- // (empirisch verifiziert für US/Pacific, GMT, Etc/UTC), ein falsch-gecasteter
10
- // String resolved zur kanonischen Form und matcht damit nicht mehr exakt.
1
+ // IANA time zone name validation. Intl.supportedValuesOf("timeZone") returns only
2
+ // CANONICAL names — valid aliases such as "US/Pacific", "GMT", and "Etc/UTC" are
3
+ // missing, even though Intl.DateTimeFormat, Temporal, and ctx.tz.parse all
4
+ // accept them without issue. Intl.DateTimeFormat itself is case-INSENSITIVE
5
+ // ("europe/berlin" resolves to "Europe/Berlin") — a simple try/catch would
6
+ // therefore allow capitalization errors through.
7
+ // The exact comparison with resolvedOptions().timeZone prevents this: a valid
8
+ // canonical name OR alias ALWAYS resolves to itself (verified empirically for
9
+ // US/Pacific, GMT, and Etc/UTC), while a incorrectly cased string resolves to
10
+ // the canonical form and no longer matches exactly.
11
11
  export function isValidIanaTimeZone(value) {
12
12
  try {
13
13
  return (new Intl.DateTimeFormat(undefined, { timeZone: value }).resolvedOptions().timeZone === value);
@@ -1,13 +1,13 @@
1
- // Time-Modul: Temporal-Polyfill + ctx.tz Helper.
1
+ // Time module: Temporal polyfill + ctx.tz helper.
2
2
  //
3
- // Aktueller Stand (Iteration 1-4 von Gap-03 in samples/beammycar/MIGRATION.md):
4
- // - ensureTemporalPolyfill: installiert Temporal global wenn nötig
5
- // - getTemporal: type-safer Zugriff auf globalThis.Temporal
6
- // - createTzContext: ctx.tz Factory mit now/today/parse/toLocatedJson/...
7
- // - LocatedTimestampJson: API-Boundary-Form { at, tz }
8
- // - isValidIanaTimeZone: IANA-Zonennamen-Validierung (type:"tz"-Felder)
9
- // - warnIfNonUtcServerTimeZone: Boot-Warnung bei nicht-UTC Prozess-TZ
10
- // - GeoTzProvider: optionaler Geo→Zone-Adapter (ctx.tz.fromCoordinates/fromAddress)
3
+ // Provides:
4
+ // - ensureTemporalPolyfill: installs Temporal globally when needed
5
+ // - getTemporal: type-safe access to globalThis.Temporal
6
+ // - createTzContext: ctx.tz factory with now/today/parse/toLocatedJson/...
7
+ // - LocatedTimestampJson: API-boundary form { at, tz }
8
+ // - isValidIanaTimeZone: IANA time-zone name validation (type:"tz" fields)
9
+ // - warnIfNonUtcServerTimeZone: boot warning for a non-UTC process time zone
10
+ // - GeoTzProvider: optional geo-to-zone adapter (ctx.tz.fromCoordinates/fromAddress)
11
11
  export { warnIfNonUtcServerTimeZone } from "./boot-tz-warning.js";
12
12
  export { isValidIanaTimeZone } from "./iana.js";
13
13
  export { instantToLegacyDate, legacyDateToInstant } from "./legacy-date.js";
@@ -1,5 +1,5 @@
1
1
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
2
2
  export declare function instantToLegacyDate(instant: Temporal.Instant): Date;
3
- /** Gegenrichtung: Date aus einer Fremd-Lib (imapflow INTERNALDATE,
4
- * mailparser Date-Header) → Temporal.Instant. */
3
+ /** Converts dates from foreign libraries (imapflow INTERNALDATE,
4
+ * mailparser Date headers) to Temporal.Instant. */
5
5
  export declare function legacyDateToInstant(date: Date): Temporal.Instant;
@@ -1,15 +1,13 @@
1
1
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
2
- // Temporal→Date-Bridge für Lib-APIs die JS-Date verlangen (imapflow
3
- // search({since}), nodemailer-Header, ...). Gegenstück zur
4
- // dateToInstant-Richtung der DB-/Event-Store-Boundaries: Feature-Code
5
- // rechnet in Temporal, konvertiert erst am Aufruf der Fremd-API — der
6
- // no-date-api-Guard bleibt für Feature-Code scharf, die Konstruktion
7
- // lebt hier im allowlisteten Time-Layer.
2
+ // Bridge to libraries that require JS `Date` (imapflow
3
+ // search({since}), nodemailer headers, ...). Feature code uses Temporal and
4
+ // converts only at foreign-API boundaries, keeping the no-date-api guard
5
+ // effective outside this allowlisted time layer.
8
6
  export function instantToLegacyDate(instant) {
9
7
  return new Date(instant.epochMilliseconds);
10
8
  }
11
- /** Gegenrichtung: Date aus einer Fremd-Lib (imapflow INTERNALDATE,
12
- * mailparser Date-Header) → Temporal.Instant. */
9
+ /** Converts dates from foreign libraries (imapflow INTERNALDATE,
10
+ * mailparser Date headers) to Temporal.Instant. */
13
11
  export function legacyDateToInstant(date) {
14
12
  return Temporal.Instant.fromEpochMilliseconds(date.getTime());
15
13
  }
@@ -8,7 +8,7 @@
8
8
  //
9
9
  // Idempotent: if `globalThis.Temporal` already exists the call is a no-op.
10
10
  // The check is the live global — not a sticky module flag — so tests that
11
- // delete the ambient global (fw#1550) still get it back on the next call.
11
+ // delete the ambient global still get it back on the next call.
12
12
  // Re-install assigns the already-resolved module value: re-importing
13
13
  // `temporal-polyfill` here would put a polyfill instance on the global while
14
14
  // the rest of the code uses the native classes (instanceof mismatch).
@@ -3,7 +3,7 @@ export type { Clock, LocatedTimestampJson, TzContext, TzContextOptions, } from "
3
3
  /**
4
4
  * Factory: creates a TzContext for the current request.
5
5
  * Uses the kumiko-types Temporal module export (not globalThis.Temporal) so
6
- * buildHandlerContext stays ambient-free (fw#1525/#1550).
6
+ * buildHandlerContext stays ambient-free.
7
7
  */
8
8
  export declare function createTzContext(options?: TzContextOptions): TzContext;
9
9
  /**
@@ -25,7 +25,7 @@ const SYSTEM_CLOCK = {
25
25
  /**
26
26
  * Factory: creates a TzContext for the current request.
27
27
  * Uses the kumiko-types Temporal module export (not globalThis.Temporal) so
28
- * buildHandlerContext stays ambient-free (fw#1525/#1550).
28
+ * buildHandlerContext stays ambient-free.
29
29
  */
30
30
  export function createTzContext(options = {}) {
31
31
  const tenant = options.tenant ?? "UTC";
@@ -1,9 +1,9 @@
1
- // Client-safe Schema-Types. Wohnen in framework/ui-types statt renderer
2
- // damit der Server (createKumikoServer / buildAppSchema) sie produzieren
3
- // kann ohne renderer als Dependency zu ziehen. Renderer + Renderer-Web
4
- // re-exporten dieselben Symbole — Konsumenten merken den Umzug nicht.
1
+ // Client-safe schema types. Live in framework/ui-types rather than renderer
2
+ // so the server (createKumikoServer / buildAppSchema) can produce them
3
+ // without pulling in renderer as a dependency. Renderer and Renderer-Web
4
+ // re-export the same symbols, so consumers do not notice the move.
5
5
  //
6
- // Pattern: Types fließen "downstream" (framework → renderer → renderer-
7
- // web), Runtime-Helpers (toAppSchema, isAppSchema) bleiben renderer-side
8
- // weil das die Layer ist die mit den AppSchemas zur Laufzeit arbeitet.
6
+ // Pattern: types flow "downstream" (framework → renderer → renderer-
7
+ // web); runtime helpers (toAppSchema, isAppSchema) remain renderer-side
8
+ // because that is the layer that works with AppSchemas at runtime.
9
9
  export {};
@@ -39,13 +39,13 @@ export const LIST_ROW_META_REFERENCES = {
39
39
  // user:user — the convention QN is a SystemAdmin cross-tenant roster whose
40
40
  // `tenants` join must not reach a TenantAdmin, so it stays SystemAdmin-only and
41
41
  // the label lookup goes through the member directory instead: own-tenant
42
- // members for an admin, every user for a SystemAdmin (fw#3107).
42
+ // members for an admin, every user for a SystemAdmin.
43
43
  //
44
44
  // tenant:tenant — the convention QN, `tenant:query:tenant:list`, is a
45
45
  // SystemAdmin-only entity-list handler, so a TenantAdmin got a 403 and every
46
46
  // tenant cell fell back to the raw UUID. The label lookup goes through the
47
47
  // tenant directory instead: the caller's own tenant for an admin, every
48
- // tenant for a SystemAdmin (fw#3142).
48
+ // tenant for a SystemAdmin.
49
49
  export const REFERENCE_LOOKUP_SOURCES = {
50
50
  "user:user": { queryQn: "tenant:query:member-directory", labelKey: "label" },
51
51
  "tenant:tenant": { queryQn: "tenant:query:tenant-directory", labelKey: "label" },
@@ -56,10 +56,10 @@ export const REFERENCE_LOOKUP_SOURCES = {
56
56
  // otherwise. Keyed by `${refFeature}:${refEntity}` so useReferenceLookup can
57
57
  // consult this generically instead of any screen/hook hardcoding an entity
58
58
  // name. Central so the label applies to every screen that references this
59
- // entity, not just delivery-log (fw#2662).
59
+ // entity, not just delivery-log.
60
60
  export const SYSTEM_REFERENCE_LABELS = {
61
61
  "tenant:tenant": { id: SYSTEM_TENANT_ID, labelKey: "kumiko.reference.system-tenant" },
62
- // createdBy on a system write (fw#3103) — SYSTEM_USER_ID is an alias for
62
+ // createdBy on a system write — SYSTEM_USER_ID is an alias for
63
63
  // "no human caller", so read_users never holds a matching row.
64
64
  "user:user": {
65
65
  id: SYSTEM_USER_ID,