loom-kernel 5.0.0__tar.gz → 6.0.1__tar.gz

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 (696) hide show
  1. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/CHANGELOG.md +113 -0
  2. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/PKG-INFO +1 -1
  3. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/sql/config.py +5 -21
  4. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/_adapter.py +113 -76
  5. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/_error_boundary.py +4 -3
  6. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/_runtime_io.py +73 -87
  7. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/handlers/_shared.py +11 -23
  8. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/handlers/boundary.py +1 -2
  9. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/handlers/dispatcher.py +22 -7
  10. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/handlers/routing.py +105 -83
  11. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/handlers/scopes.py +9 -13
  12. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/handlers/shapes.py +4 -9
  13. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/handlers/storage.py +110 -37
  14. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/compiler/_errors.py +43 -5
  15. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/compiler/phases/validate.py +41 -3
  16. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_branches.py +30 -1
  17. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_decompose.py +11 -8
  18. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_router.py +1 -2
  19. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_shape.py +0 -3
  20. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_sink.py +23 -5
  21. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_table/common.py +94 -50
  22. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_with.py +1 -2
  23. loom_kernel-5.0.0/src/loom/streaming/bytewax/_dlq.py +0 -173
  24. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/.gitignore +0 -0
  25. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/LICENSE +0 -0
  26. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/README.md +0 -0
  27. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/pyproject.toml +0 -0
  28. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/__init__.py +0 -0
  29. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/__init__.py +0 -0
  30. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/_concurrency.py +0 -0
  31. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/_filters.py +0 -0
  32. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/_paths.py +0 -0
  33. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/_roles.py +0 -0
  34. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/_startup.py +0 -0
  35. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/_transport.py +0 -0
  36. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/_usecase.py +0 -0
  37. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/a2a/__init__.py +0 -0
  38. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/a2a/_binding.py +0 -0
  39. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/a2a/_handlers.py +0 -0
  40. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/a2a/_rpc.py +0 -0
  41. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/a2a/card.py +0 -0
  42. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/a2a/events.py +0 -0
  43. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/a2a/server.py +0 -0
  44. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/abc.py +0 -0
  45. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/bootstrap.py +0 -0
  46. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/__init__.py +0 -0
  47. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/_compiler.py +0 -0
  48. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/_fingerprint.py +0 -0
  49. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/_plan.py +0 -0
  50. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/phases/__init__.py +0 -0
  51. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/phases/_capabilities.py +0 -0
  52. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/phases/_conversation.py +0 -0
  53. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/phases/_feedable.py +0 -0
  54. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/phases/_hook.py +0 -0
  55. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/phases/_instructions.py +0 -0
  56. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/phases/_limits.py +0 -0
  57. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/phases/_model_role.py +0 -0
  58. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/phases/_output.py +0 -0
  59. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/compiler/phases/_state.py +0 -0
  60. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/config.py +0 -0
  61. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/declarative/__init__.py +0 -0
  62. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/declarative/_envelope.py +0 -0
  63. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/declarative/_schema.py +0 -0
  64. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/declarative/_v1.py +0 -0
  65. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
  66. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/describe.py +0 -0
  67. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/__init__.py +0 -0
  68. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
  69. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
  70. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_capabilities.py +0 -0
  71. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
  72. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
  73. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
  74. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
  75. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
  76. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
  77. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_instructions.py +0 -0
  78. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
  79. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_mcp.py +0 -0
  80. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_models.py +0 -0
  81. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
  82. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
  83. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
  84. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
  85. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
  86. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/extras/__init__.py +0 -0
  87. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/extras/a2a.py +0 -0
  88. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +0 -0
  89. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/extras/mcp.py +0 -0
  90. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/extras/skills.py +0 -0
  91. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
  92. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/providers/__init__.py +0 -0
  93. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/providers/_shared.py +0 -0
  94. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +0 -0
  95. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +0 -0
  96. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/providers/gateway.py +0 -0
  97. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/providers/openai.py +0 -0
  98. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +0 -0
  99. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/errors.py +0 -0
  100. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/etl/__init__.py +0 -0
  101. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/etl/_batch.py +0 -0
  102. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/etl/_columns.py +0 -0
  103. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/etl/_frames.py +0 -0
  104. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/etl/_ledger.py +0 -0
  105. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/etl/_runner.py +0 -0
  106. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/etl/_validation.py +0 -0
  107. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/fastapi/__init__.py +0 -0
  108. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/fastapi/endpoints.py +0 -0
  109. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/fastapi/response.py +0 -0
  110. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/fastapi/streaming.py +0 -0
  111. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/inference.py +0 -0
  112. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/pricing.py +0 -0
  113. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/registry.py +0 -0
  114. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/remote_auth.py +0 -0
  115. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/runtime/__init__.py +0 -0
  116. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/runtime/_bounded.py +0 -0
  117. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/runtime/_chain.py +0 -0
  118. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/runtime/_conversation.py +0 -0
  119. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/runtime/_grants.py +0 -0
  120. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/runtime/_handle.py +0 -0
  121. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/runtime/_health.py +0 -0
  122. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/runtime/_hooks.py +0 -0
  123. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/runtime/_lifecycle.py +0 -0
  124. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/runtime/_limits.py +0 -0
  125. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/runtime/_mcp.py +0 -0
  126. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/validate/__init__.py +0 -0
  127. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/ai/validate/__main__.py +0 -0
  128. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/celery/__init__.py +0 -0
  129. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/celery/auto.py +0 -0
  130. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/celery/bootstrap.py +0 -0
  131. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/celery/config.py +0 -0
  132. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/celery/constants.py +0 -0
  133. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/celery/runner.py +0 -0
  134. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/celery/service.py +0 -0
  135. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/cli/__init__.py +0 -0
  136. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/cli/app.py +0 -0
  137. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/cli/check.py +0 -0
  138. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/cli/schema.py +0 -0
  139. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/async_bridge.py +0 -0
  140. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/authz/__init__.py +0 -0
  141. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/authz/_decide.py +0 -0
  142. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/authz/_grants.py +0 -0
  143. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/authz/_roles.py +0 -0
  144. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/authz/_scope.py +0 -0
  145. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/authz/elevation.py +0 -0
  146. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/authz/product.py +0 -0
  147. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/backend/__init__.py +0 -0
  148. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/backend/core_model.py +0 -0
  149. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/backend/protocol.py +0 -0
  150. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/backend/scoped_ddl.py +0 -0
  151. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/backend/sqlalchemy.py +0 -0
  152. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/bootstrap/__init__.py +0 -0
  153. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/bootstrap/bootstrap.py +0 -0
  154. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/bootstrap/kernel.py +0 -0
  155. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/__init__.py +0 -0
  156. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/_batching.py +0 -0
  157. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/_single_flight.py +0 -0
  158. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/abc/__init__.py +0 -0
  159. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/abc/backend.py +0 -0
  160. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/abc/config.py +0 -0
  161. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/abc/dependency.py +0 -0
  162. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/calls.py +0 -0
  163. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/codec.py +0 -0
  164. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/decorators.py +0 -0
  165. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/dependency.py +0 -0
  166. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/errors.py +0 -0
  167. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/gateway.py +0 -0
  168. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/keys.py +0 -0
  169. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/memory.py +0 -0
  170. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/repository.py +0 -0
  171. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/result_codec.py +0 -0
  172. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/serializer.py +0 -0
  173. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/cache/wiring.py +0 -0
  174. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/checks.py +0 -0
  175. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/command/__init__.py +0 -0
  176. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/command/adapter.py +0 -0
  177. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/command/base.py +0 -0
  178. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/command/field.py +0 -0
  179. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/command/introspection.py +0 -0
  180. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/compiler.py +0 -0
  181. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/__init__.py +0 -0
  182. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/_boto3.py +0 -0
  183. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/_includes.py +0 -0
  184. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/_resolver_utils.py +0 -0
  185. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/binder.py +0 -0
  186. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/configurable.py +0 -0
  187. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/context.py +0 -0
  188. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/errors.py +0 -0
  189. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/keys.py +0 -0
  190. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/loader.py +0 -0
  191. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/model.py +0 -0
  192. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/observability.py +0 -0
  193. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/overrides.py +0 -0
  194. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/resolver.py +0 -0
  195. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/secrets.py +0 -0
  196. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/config/ssm.py +0 -0
  197. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/contracts/__init__.py +0 -0
  198. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/contracts/manifest.py +0 -0
  199. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/di/__init__.py +0 -0
  200. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/di/container.py +0 -0
  201. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/di/scope.py +0 -0
  202. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/discovery/__init__.py +0 -0
  203. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/discovery/_utils.py +0 -0
  204. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/discovery/base.py +0 -0
  205. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/discovery/interfaces.py +0 -0
  206. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/discovery/manifest.py +0 -0
  207. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/discovery/modules.py +0 -0
  208. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/engine/__init__.py +0 -0
  209. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/engine/compilable.py +0 -0
  210. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/engine/compiler.py +0 -0
  211. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/engine/events.py +0 -0
  212. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/engine/executor.py +0 -0
  213. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/engine/metrics.py +0 -0
  214. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/engine/plan.py +0 -0
  215. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/engine/post_commit.py +0 -0
  216. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/environment.py +0 -0
  217. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/errors/__init__.py +0 -0
  218. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/errors/codes.py +0 -0
  219. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/errors/errors.py +0 -0
  220. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/expr/__init__.py +0 -0
  221. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/expr/eval.py +0 -0
  222. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/expr/nodes.py +0 -0
  223. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/expr/refs.py +0 -0
  224. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/identity/__init__.py +0 -0
  225. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/identity/context.py +0 -0
  226. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/identity/identity.py +0 -0
  227. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/identity/issuer.py +0 -0
  228. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/identity/wire.py +0 -0
  229. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/introspection/__init__.py +0 -0
  230. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/introspection/base.py +0 -0
  231. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/introspection/describe.py +0 -0
  232. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/job/__init__.py +0 -0
  233. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/job/callback.py +0 -0
  234. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/job/context.py +0 -0
  235. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/job/handle.py +0 -0
  236. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/job/job.py +0 -0
  237. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/job/service.py +0 -0
  238. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/locator.py +0 -0
  239. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/logger/__init__.py +0 -0
  240. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/logger/abc.py +0 -0
  241. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/logger/checks.py +0 -0
  242. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/logger/config.py +0 -0
  243. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/logger/registry.py +0 -0
  244. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/logger/structlogger.py +0 -0
  245. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/__init__.py +0 -0
  246. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/_json_schema.py +0 -0
  247. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/_loom_type.py +0 -0
  248. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/base.py +0 -0
  249. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/convert.py +0 -0
  250. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/enums.py +0 -0
  251. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/field.py +0 -0
  252. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/introspection.py +0 -0
  253. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/partition.py +0 -0
  254. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/privilege.py +0 -0
  255. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/projection.py +0 -0
  256. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/relation.py +0 -0
  257. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/scoped.py +0 -0
  258. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/struct.py +0 -0
  259. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/timestamped.py +0 -0
  260. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/types.py +0 -0
  261. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/model/types_postgres.py +0 -0
  262. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/observability/__init__.py +0 -0
  263. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/observability/config.py +0 -0
  264. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/observability/event.py +0 -0
  265. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/observability/observer/__init__.py +0 -0
  266. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/observability/observer/noop.py +0 -0
  267. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/observability/observer/otel.py +0 -0
  268. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/observability/observer/structlog.py +0 -0
  269. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/observability/otel_ids.py +0 -0
  270. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/observability/protocol.py +0 -0
  271. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/observability/runtime.py +0 -0
  272. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/observability/span.py +0 -0
  273. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/observability/topology.py +0 -0
  274. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/persistence/__init__.py +0 -0
  275. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/persistence/abc.py +0 -0
  276. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/persistence/none.py +0 -0
  277. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/persistence/registry.py +0 -0
  278. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/plugins/__init__.py +0 -0
  279. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/plugins/entrypoints.py +0 -0
  280. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/plugins/optional.py +0 -0
  281. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/projection/__init__.py +0 -0
  282. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/projection/loaders.py +0 -0
  283. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/projection/runtime.py +0 -0
  284. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/__init__.py +0 -0
  285. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/abc/__init__.py +0 -0
  286. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/abc/cursor.py +0 -0
  287. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/abc/errors.py +0 -0
  288. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/abc/query.py +0 -0
  289. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/abc/query_compiler.py +0 -0
  290. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/abc/repo_for.py +0 -0
  291. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/abc/repository.py +0 -0
  292. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/abc/session_scope.py +0 -0
  293. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/dynamodb/__init__.py +0 -0
  294. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/dynamodb/backend.py +0 -0
  295. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/dynamodb/registry.py +0 -0
  296. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/dynamodb/repository.py +0 -0
  297. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/dynamodb/uow.py +0 -0
  298. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/mongo/__init__.py +0 -0
  299. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/mongo/backend.py +0 -0
  300. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/mongo/ids.py +0 -0
  301. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/mongo/query_compiler.py +0 -0
  302. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/mongo/registry.py +0 -0
  303. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/mongo/repository.py +0 -0
  304. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/mongo/uow.py +0 -0
  305. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/mongo/values.py +0 -0
  306. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/mutation.py +0 -0
  307. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/registration.py +0 -0
  308. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/registry.py +0 -0
  309. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
  310. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/backend.py +0 -0
  311. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
  312. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
  313. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/migrations/__init__.py +0 -0
  314. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/migrations/env_template.py +0 -0
  315. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/migrations/hook.py +0 -0
  316. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/migrations/operations.py +0 -0
  317. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/migrations/runners.py +0 -0
  318. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
  319. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/model.py +0 -0
  320. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
  321. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
  322. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
  323. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
  324. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
  325. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
  326. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
  327. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
  328. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
  329. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
  330. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
  331. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
  332. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/__init__.py +0 -0
  333. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/bootstrap.py +0 -0
  334. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/config.py +0 -0
  335. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/elevate.py +0 -0
  336. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/guard/0001.sql +0 -0
  337. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/guard/0002.sql +0 -0
  338. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/guard/preflight.sql +0 -0
  339. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/guard_manifest.py +0 -0
  340. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/integrity.py +0 -0
  341. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/partitions.py +0 -0
  342. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/provider.py +0 -0
  343. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/schema.py +0 -0
  344. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/sources.py +0 -0
  345. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/rls/verify.py +0 -0
  346. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
  347. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/session_settings.py +0 -0
  348. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
  349. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
  350. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/repository/sqlalchemy/values.py +0 -0
  351. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/response/__init__.py +0 -0
  352. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/response/base.py +0 -0
  353. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/routing/__init__.py +0 -0
  354. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/routing/ref.py +0 -0
  355. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/routing/resolver.py +0 -0
  356. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/runner.py +0 -0
  357. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/schema/__init__.py +0 -0
  358. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/schema/schema_mode.py +0 -0
  359. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/schema_names.py +0 -0
  360. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/sql/__init__.py +0 -0
  361. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/sql/abc/__init__.py +0 -0
  362. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/sql/abc/contracts.py +0 -0
  363. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/sql/abc/errors.py +0 -0
  364. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/sql/caller_bound.py +0 -0
  365. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/sql/clickhouse/__init__.py +0 -0
  366. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/sql/clickhouse/_client.py +0 -0
  367. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/sql/clickhouse/executor.py +0 -0
  368. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/sql/clickhouse/registry.py +0 -0
  369. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/sql/roles.py +0 -0
  370. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/sql/service.py +0 -0
  371. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/symbols.py +0 -0
  372. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/tracing/__init__.py +0 -0
  373. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/tracing/context.py +0 -0
  374. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/transaction.py +0 -0
  375. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/transport/__init__.py +0 -0
  376. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/transport/adapter.py +0 -0
  377. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/uow/__init__.py +0 -0
  378. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/uow/abc.py +0 -0
  379. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/uow/context.py +0 -0
  380. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/__init__.py +0 -0
  381. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/_predicates.py +0 -0
  382. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/agent_markers.py +0 -0
  383. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/compute.py +0 -0
  384. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/constants.py +0 -0
  385. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/factory.py +0 -0
  386. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/field_ref.py +0 -0
  387. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/invoker.py +0 -0
  388. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/keys.py +0 -0
  389. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/markers.py +0 -0
  390. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/mcp_markers.py +0 -0
  391. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/outcome.py +0 -0
  392. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/registry.py +0 -0
  393. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/rule.py +0 -0
  394. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/core/use_case/use_case.py +0 -0
  395. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/__init__.py +0 -0
  396. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/_uri.py +0 -0
  397. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/__init__.py +0 -0
  398. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_format_registry.py +0 -0
  399. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_historify/__init__.py +0 -0
  400. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_historify/_common.py +0 -0
  401. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_historify/_log.py +0 -0
  402. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_historify/_ops.py +0 -0
  403. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
  404. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_historify/_transform.py +0 -0
  405. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_merge.py +0 -0
  406. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_path_template.py +0 -0
  407. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_predicate.py +0 -0
  408. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
  409. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
  410. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
  411. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/_write_policy.py +0 -0
  412. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/polars/__init__.py +0 -0
  413. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/polars/_dtype.py +0 -0
  414. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/polars/_file_writer.py +0 -0
  415. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/polars/_frame.py +0 -0
  416. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/polars/_historify.py +0 -0
  417. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/polars/_predicate.py +0 -0
  418. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/polars/_reader.py +0 -0
  419. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/polars/_schema.py +0 -0
  420. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
  421. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/polars/_streaming.py +0 -0
  422. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/polars/_writer.py +0 -0
  423. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/polars/provider.py +0 -0
  424. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/spark/__init__.py +0 -0
  425. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/spark/_dtype.py +0 -0
  426. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/spark/_historify.py +0 -0
  427. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/spark/_reader.py +0 -0
  428. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/spark/_schema.py +0 -0
  429. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
  430. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/spark/_writer.py +0 -0
  431. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/backends/spark/provider.py +0 -0
  432. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/checkpoint/__init__.py +0 -0
  433. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
  434. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
  435. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/checkpoint/_cleaners.py +0 -0
  436. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/checkpoint/_options.py +0 -0
  437. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/checkpoint/_paths.py +0 -0
  438. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/checkpoint/_scope.py +0 -0
  439. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/checkpoint/_store.py +0 -0
  440. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/compiler/__init__.py +0 -0
  441. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/compiler/_binding.py +0 -0
  442. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/compiler/_compiler.py +0 -0
  443. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/compiler/_errors.py +0 -0
  444. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/compiler/_filter.py +0 -0
  445. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/compiler/_plan.py +0 -0
  446. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/compiler/_validators.py +0 -0
  447. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/compiler/_validators_agents.py +0 -0
  448. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/compiler/_validators_config.py +0 -0
  449. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/compiler/_validators_plan.py +0 -0
  450. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/compiler/_validators_step.py +0 -0
  451. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/__init__.py +0 -0
  452. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/_format.py +0 -0
  453. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/_read_options.py +0 -0
  454. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/_utils.py +0 -0
  455. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/_with_agent.py +0 -0
  456. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/_write_options.py +0 -0
  457. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/expr/__init__.py +0 -0
  458. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/expr/_params.py +0 -0
  459. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/expr/_predicate.py +0 -0
  460. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
  461. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/expr/_refs.py +0 -0
  462. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/source/__init__.py +0 -0
  463. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/source/_from.py +0 -0
  464. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
  465. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/source/_from_config.py +0 -0
  466. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
  467. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
  468. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/source/_specs.py +0 -0
  469. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/__init__.py +0 -0
  470. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/_client.py +0 -0
  471. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/_errors.py +0 -0
  472. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/_file.py +0 -0
  473. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
  474. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
  475. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
  476. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
  477. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/_history/_report.py +0 -0
  478. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
  479. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/_into.py +0 -0
  480. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
  481. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/_table.py +0 -0
  482. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/declarative/target/_temp.py +0 -0
  483. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/executor/__init__.py +0 -0
  484. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/executor/_agents.py +0 -0
  485. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/executor/_dispatcher.py +0 -0
  486. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/executor/_executor.py +0 -0
  487. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/__init__.py +0 -0
  488. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/_registry.py +0 -0
  489. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/sources/__init__.py +0 -0
  490. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/sources/_clickhouse.py +0 -0
  491. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/sources/_dynamodb.py +0 -0
  492. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
  493. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
  494. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/sources/_mongo.py +0 -0
  495. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
  496. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
  497. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
  498. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/sources/_serialization.py +0 -0
  499. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/targets/__init__.py +0 -0
  500. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/io/targets/_clickhouse.py +0 -0
  501. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/lineage/__init__.py +0 -0
  502. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/lineage/_config.py +0 -0
  503. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/lineage/_observer.py +0 -0
  504. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/lineage/_records.py +0 -0
  505. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/lineage/sinks/__init__.py +0 -0
  506. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
  507. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/lineage/sinks/_table.py +0 -0
  508. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/lineage/sinks/_writer.py +0 -0
  509. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/maintenance/__init__.py +0 -0
  510. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/maintenance/_builder.py +0 -0
  511. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/maintenance/_ops.py +0 -0
  512. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/maintenance/_protocol.py +0 -0
  513. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/maintenance/_runner.py +0 -0
  514. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/maintenance/_step.py +0 -0
  515. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/maintenance/backends/__init__.py +0 -0
  516. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
  517. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/pipeline/__init__.py +0 -0
  518. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/pipeline/_generics.py +0 -0
  519. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/pipeline/_params.py +0 -0
  520. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/pipeline/_pipeline.py +0 -0
  521. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/pipeline/_process.py +0 -0
  522. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/pipeline/_sql.py +0 -0
  523. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/pipeline/_step.py +0 -0
  524. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/pipeline/_step_client.py +0 -0
  525. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/pipeline/_step_sql.py +0 -0
  526. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/runner/__init__.py +0 -0
  527. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/runner/_agents.py +0 -0
  528. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/runner/_providers.py +0 -0
  529. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/runner/_wiring.py +0 -0
  530. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/runner/config_loader.py +0 -0
  531. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/runner/core.py +0 -0
  532. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/runner/errors.py +0 -0
  533. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/runner/filtering.py +0 -0
  534. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/runtime/__init__.py +0 -0
  535. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/runtime/_config_values.py +0 -0
  536. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/runtime/contracts.py +0 -0
  537. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/schema/__init__.py +0 -0
  538. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/schema/_contract.py +0 -0
  539. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/schema/_schema.py +0 -0
  540. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/storage/__init__.py +0 -0
  541. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/storage/_config.py +0 -0
  542. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/storage/_file_locator.py +0 -0
  543. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/storage/_locator.py +0 -0
  544. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/storage/routing.py +0 -0
  545. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/testing/__init__.py +0 -0
  546. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/testing/_result.py +0 -0
  547. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/testing/_runners.py +0 -0
  548. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/testing/_scenario.py +0 -0
  549. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/testing/_stubs.py +0 -0
  550. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/etl/testing/spark.py +0 -0
  551. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/__init__.py +0 -0
  552. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/_async.py +0 -0
  553. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/_config.py +0 -0
  554. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/_ctx.py +0 -0
  555. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/_flow_yaml.py +0 -0
  556. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/_meta.py +0 -0
  557. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/_placeholders.py +0 -0
  558. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/_summary.py +0 -0
  559. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/deploy/__init__.py +0 -0
  560. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/deploy/_discovery.py +0 -0
  561. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/deploy/_schedule.py +0 -0
  562. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
  563. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/deploy/entrypoint.py +0 -0
  564. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/__init__.py +0 -0
  565. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/_assemble.py +0 -0
  566. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/_backfill.py +0 -0
  567. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/_backfill_body.py +0 -0
  568. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/_body.py +0 -0
  569. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/_common.py +0 -0
  570. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/_factory.py +0 -0
  571. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/_hooks.py +0 -0
  572. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/_maintenance.py +0 -0
  573. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/_params.py +0 -0
  574. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/_run_name.py +0 -0
  575. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/_runtime.py +0 -0
  576. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/_signature.py +0 -0
  577. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/flow/_stages.py +0 -0
  578. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/manifest/__init__.py +0 -0
  579. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/manifest/_model.py +0 -0
  580. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/manifest/_s3.py +0 -0
  581. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/manifest/_store.py +0 -0
  582. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/notify/__init__.py +0 -0
  583. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/notify/_event.py +0 -0
  584. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/notify/_factory.py +0 -0
  585. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/notify/_format.py +0 -0
  586. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/notify/_port.py +0 -0
  587. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/notify/_slack.py +0 -0
  588. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/notify/_sns.py +0 -0
  589. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/observer/__init__.py +0 -0
  590. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/observer/_flow.py +0 -0
  591. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/observer/_logging_bridge.py +0 -0
  592. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/observer/_manifest.py +0 -0
  593. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prefect/observer/_task_run.py +0 -0
  594. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prometheus/__init__.py +0 -0
  595. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prometheus/_instruments.py +0 -0
  596. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prometheus/adapter.py +0 -0
  597. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prometheus/kafka.py +0 -0
  598. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prometheus/lifecycle.py +0 -0
  599. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/prometheus/middleware.py +0 -0
  600. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/py.typed +0 -0
  601. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/__init__.py +0 -0
  602. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/_body.py +0 -0
  603. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/adapter.py +0 -0
  604. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/auth/__init__.py +0 -0
  605. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/auth/abc.py +0 -0
  606. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/auth/config.py +0 -0
  607. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/auth/jwt.py +0 -0
  608. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/auth/middleware.py +0 -0
  609. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/autocrud.py +0 -0
  610. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/checks.py +0 -0
  611. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/compiler.py +0 -0
  612. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/config.py +0 -0
  613. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/constants.py +0 -0
  614. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/cors.py +0 -0
  615. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/errors.py +0 -0
  616. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/fastapi/__init__.py +0 -0
  617. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/fastapi/_errors.py +0 -0
  618. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/fastapi/_exclusions.py +0 -0
  619. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/fastapi/app.py +0 -0
  620. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/fastapi/auto.py +0 -0
  621. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/fastapi/health.py +0 -0
  622. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/fastapi/openapi.py +0 -0
  623. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/fastapi/response.py +0 -0
  624. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/fastapi/router_runtime.py +0 -0
  625. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/fastapi/sql.py +0 -0
  626. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/middleware.py +0 -0
  627. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/model.py +0 -0
  628. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/rest/rest_adapter.py +0 -0
  629. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/__init__.py +0 -0
  630. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/__init__.py +0 -0
  631. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
  632. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
  633. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/_errors.py +0 -0
  634. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/_operators.py +0 -0
  635. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
  636. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
  637. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
  638. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
  639. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/bytewax/runner.py +0 -0
  640. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/compiler/__init__.py +0 -0
  641. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/compiler/_bindings.py +0 -0
  642. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/compiler/_compiler.py +0 -0
  643. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/compiler/_plan.py +0 -0
  644. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/compiler/phases/build_plan.py +0 -0
  645. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/core/__init__.py +0 -0
  646. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/core/_errors.py +0 -0
  647. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/core/_exceptions.py +0 -0
  648. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/core/_message.py +0 -0
  649. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/core/_tracing.py +0 -0
  650. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/core/_typing.py +0 -0
  651. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/graph/__init__.py +0 -0
  652. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/graph/_flow.py +0 -0
  653. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/__init__.py +0 -0
  654. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/_codec.py +0 -0
  655. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/_config.py +0 -0
  656. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/_errors.py +0 -0
  657. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/_key_resolver.py +0 -0
  658. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/_message.py +0 -0
  659. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/_record.py +0 -0
  660. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/_wire.py +0 -0
  661. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/client/__init__.py +0 -0
  662. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/client/_consumer.py +0 -0
  663. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/client/_producer.py +0 -0
  664. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/client/_protocol.py +0 -0
  665. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/client/_retry.py +0 -0
  666. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/message/__init__.py +0 -0
  667. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/message/_consumer.py +0 -0
  668. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/message/_producer.py +0 -0
  669. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/kafka/message/_protocol.py +0 -0
  670. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/mongo/__init__.py +0 -0
  671. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
  672. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/mongo/_config.py +0 -0
  673. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/mongo/_event.py +0 -0
  674. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/mongo/_normalize.py +0 -0
  675. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/__init__.py +0 -0
  676. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_boundary.py +0 -0
  677. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_broadcast.py +0 -0
  678. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_capabilities.py +0 -0
  679. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_expand_routes.py +0 -0
  680. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_expr_eval.py +0 -0
  681. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_fork.py +0 -0
  682. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_helpers.py +0 -0
  683. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_mongo.py +0 -0
  684. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_protocols.py +0 -0
  685. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_step.py +0 -0
  686. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_table/__init__.py +0 -0
  687. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/_table/config.py +0 -0
  688. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/nodes/refs.py +0 -0
  689. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/streaming/testing.py +0 -0
  690. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/testing/__init__.py +0 -0
  691. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/testing/agents.py +0 -0
  692. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/testing/golden.py +0 -0
  693. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/testing/http_harness.py +0 -0
  694. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/testing/in_memory.py +0 -0
  695. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/testing/repository_harness.py +0 -0
  696. {loom_kernel-5.0.0 → loom_kernel-6.0.1}/src/loom/testing/runner.py +0 -0
@@ -459,6 +459,10 @@
459
459
 
460
460
  ### core
461
461
 
462
+ - **core:** `sql_endpoint.auth` admits only `identity` and `external`;
463
+ `auth: jwt` is refused when the config is loaded, and the alias and its
464
+ `DeprecationWarning` are gone. Migration: replace `auth: jwt` with
465
+ `auth: identity`.
462
466
  - **core:** with no `LOOM_ENV` and no `environment=`, a process starts as
463
467
  `production` and runs the deploy checks; an API without authentication now
464
468
  fails at startup with `loom.rest.E001` until it configures
@@ -916,6 +920,80 @@
916
920
  `BROADCAST_NOT_LAST` with component `broadcast`, at the top level, in a
917
921
  branch and in a Router branch. It used to report `TERMINAL_NOT_LAST` with
918
922
  component `Broadcast`.
923
+ - **streaming:** a Router branch that ends in `IntoTopic`, `IntoTable` (any
924
+ `IntoSink`) or `Drain` hands the message to that terminal. The branch's
925
+ terminal was skipped: with a flow `output` the message went to the output
926
+ instead, without one it was not written.
927
+ - **streaming:** `With`, `WithAsync`, `Router`, `CollectBatch`, `ForEach` and
928
+ `Explode` inside a Router branch fail compilation with
929
+ `ROUTER_BRANCH_UNSAFE_NODE`. Such flows compiled and raised `TypeError` when
930
+ the branch ran.
931
+ - **streaming:** `SinkPartition.write_batch` and `close` return an `int`: how
932
+ many of the oldest events not yet reported durable they made durable, `0`
933
+ when they only buffered. A custom `IntoSink` partition must report it: a
934
+ `write_batch` that returns anything else, a `bool` included, fails with
935
+ `TypeError`, and a bad count from `close()` is logged as
936
+ `storage_sink_close_count_invalid` and completes nothing. After a call
937
+ raised or returned a refused count, later counts complete nothing. A storage sink's
938
+ `terminal:sink_write` spans are emitted for the events a call made durable,
939
+ not for every event handed to it. A buffering partition migrates like this:
940
+
941
+ ```python
942
+ # before
943
+ def write_batch(self, items):
944
+ self._buffer.extend(items)
945
+
946
+ def close(self):
947
+ flush(self._path, self._buffer)
948
+
949
+ # after
950
+ def write_batch(self, items) -> int:
951
+ self._buffer.extend(items)
952
+ return 0 # buffered, nothing durable yet
953
+
954
+ def close(self) -> int:
955
+ flush(self._path, self._buffer)
956
+ flushed, self._buffer = len(self._buffer), []
957
+ return flushed # durable now
958
+ ```
959
+ - **streaming:** under at-least-once delivery, a caller-supplied terminal sink
960
+ written inline by `With(process=...)` or `WithAsync(process=...)` must expose
961
+ `build_inline_partition()`, which returns a partition that completes no
962
+ offset and records no death; without it the flow fails at assembly with
963
+ `RuntimeConfigurationError` (`INLINE_SINK_CANNOT_SKIP_COMMITS`). Its
964
+ partitions completed offsets at the inline write.
965
+ - **streaming:** a Delta `IntoTable` whose payload type has no fields fails
966
+ with `ValueError` when its partition is built. Its items wrote no row.
967
+ - **streaming:** an output declared after a node that ends every path fails
968
+ compilation. A flow `output` after a process that ends in `IntoTopic`,
969
+ `IntoSink`, `Drain`, `ExpandRoutes`, or a `Router` with a `default` whose
970
+ branches all end in one of `IntoTopic`, `IntoSink`, `Drain`, fails with
971
+ `OUTPUT_AFTER_PATH_END`. A Broadcast route `output` after a process that ends
972
+ in any of those, in a `Broadcast`, or in a `Fork` with a `default` fails
973
+ with `BROADCAST_OUTPUT_AFTER_PATH_END`. Such flows compiled and wrote the
974
+ message twice, handed the expanded payload of an `ExpandRoutes` to the
975
+ output, or never wrote the output. A step or an `IntoTopic` after such a
976
+ `Router` fails with `TERMINAL_NOT_LAST`, the code an `IntoTopic`, `IntoSink`
977
+ or `Drain` followed by a node reports. A
978
+ branch that ends without a sink no longer logs `unrouted_branch_drop_sink`.
979
+ - **streaming:** a `terminal_sinks` override passed to `build_dataflow` must
980
+ cover every compiled `IntoTopic` path; a missing one fails with
981
+ `RuntimeConfigurationError` (`TERMINAL_SINK_MISSING`). The path fell back to
982
+ a drop sink, so its messages completed without being written.
983
+ - **streaming:** a failed send or flush to a Kafka sink's DLQ topic fails the
984
+ run (inside `With` or `WithAsync`, the message becomes an error envelope). It
985
+ used to be logged as `dlq_send_failed` and the batch's offsets were
986
+ committed. The fix is under Fixes.
987
+ - **streaming:** a DLQ record is built from the same send request as the sink
988
+ record: it keeps the message key (and with it the partition and order), the
989
+ message type and the headers of the sink record, error envelopes now carry
990
+ `x-error-reason` and follow the sink's partition policy, and `x-dlq-error`
991
+ is added. A diverted message keeps its own trace id and parent trace id; an
992
+ error envelope without an original message gets a new trace id, as on the
993
+ sink, instead of none.
994
+ - **streaming:** a sync `With(process=...)` hands on one message at a time, as
995
+ `WithAsync` does. After a `CollectBatch` it handed on whole batches, so as
996
+ the last node of a flow without `output` its messages never completed.
919
997
 
920
998
  ## 🐛 Fixes
921
999
 
@@ -1238,6 +1316,41 @@
1238
1316
  follows. Each route is now checked on the record stream it receives, with
1239
1317
  issues scoped under `expand_routes branch <type>`, and a node after an
1240
1318
  `ExpandRoutes` fails with `TERMINAL_NOT_LAST`; such flows used to compile.
1319
+ - **streaming:** under at-least-once delivery each source offset completes
1320
+ once per fork share, and not before the writes on its path are flushed.
1321
+ These shapes broke it:
1322
+ - an inline `IntoTopic` in `With(process=...)` or `WithAsync(process=...)`
1323
+ followed by a flow `output` completed the offset at the inline write,
1324
+ before the output write, and again at the output;
1325
+ - an `ExpandRoutes` route ending in a scope completed at a drop sink wired
1326
+ beside the route's process, which does not wait for the inline write, and
1327
+ again at the inline write;
1328
+ - an `IntoTopic` ending an `ExpandRoutes` route, or a Broadcast route
1329
+ without `output`, completed at its sink and again at a drop sink;
1330
+ - a Router branch terminal, and a Router's unmatched messages with nothing
1331
+ after them, never completed;
1332
+ - a storage sink (`IntoTable`, any `IntoSink`) never completed;
1333
+ - an undecodable record with no `WIRE` error route never completed;
1334
+ - a batch diverted to a DLQ topic completed before the DLQ records were
1335
+ flushed.
1336
+
1337
+ A Router keeps the source order of the messages that continue after it, and
1338
+ an inline write no longer completes an offset: the message completes where
1339
+ its path ends. A storage sink completes the offsets of the events its flush
1340
+ wrote, so events still buffered when a worker dies are consumed again.
1341
+ - **streaming:** a sync `With(process=...)` runs on a record stream. It
1342
+ accepted only batches and raised `TypeError` for every message.
1343
+ - **streaming:** a Kafka sink batch diverted to its DLQ topic commits its
1344
+ offsets only once the DLQ topic received every record. The diversion sent
1345
+ each record without flushing, logged and swallowed per-record failures, and
1346
+ committed anyway, so a batch the DLQ topic never received was lost. The
1347
+ producer is now flushed after the diversion, and a failed DLQ send or flush
1348
+ raises `KafkaDeliveryError` naming the DLQ topic, with the failure the DLQ
1349
+ step observed as its cause. The batch is not committed and is handled like a failed batch on a
1350
+ sink without a DLQ topic: the run fails and, on restart, the batch is
1351
+ consumed again from the recovery snapshot or, without one, from the last
1352
+ committed offset; inside `With` or `WithAsync` the message becomes an error
1353
+ envelope.
1241
1354
 
1242
1355
  ### prefect
1243
1356
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: loom-kernel
3
- Version: 5.0.0
3
+ Version: 6.0.1
4
4
  Summary: Loom Python project
5
5
  License-File: LICENSE
6
6
  Classifier: Programming Language :: Python :: 3
@@ -8,7 +8,6 @@ invalid values abort the parse and surface as
8
8
  from __future__ import annotations
9
9
 
10
10
  import re
11
- import warnings
12
11
  from collections.abc import Sequence
13
12
  from typing import Any, Literal
14
13
 
@@ -24,11 +23,7 @@ _URL_CREDENTIALS_RE = re.compile(r"://[^@]+@")
24
23
 
25
24
  # The only ``sql_endpoint.auth`` mode carrying a verified caller identity, and
26
25
  # therefore the only one able to bind a request to a subset of the allowlist.
27
- # ``jwt`` is the deprecated spelling of the same mode, kept because it named a
28
- # mechanism where the contract only ever needed "the framework knows the caller".
29
26
  _IDENTITY_BOUND_AUTH = "identity"
30
- _DEPRECATED_AUTH_ALIAS = "jwt"
31
- _IDENTITY_BOUND_AUTH_MODES = frozenset({_IDENTITY_BOUND_AUTH, _DEPRECATED_AUTH_ALIAS})
32
27
 
33
28
 
34
29
  def _redact_url(url: str) -> str:
@@ -69,36 +64,25 @@ class SqlEndpointConfig(LoomFrozenStruct, frozen=True, kw_only=True, forbid_unkn
69
64
  authenticates the caller with the configured mechanism and binds
70
65
  roles to their verified identity) or ``"external"`` (explicit
71
66
  acknowledgement that the operator provides authentication, with no
72
- identity the framework can read). ``"jwt"`` is a deprecated alias
73
- of ``"identity"``.
67
+ identity the framework can read). Any other value fails the
68
+ parse.
74
69
  path: Mount path override. Defaults to ``/sql/{name}`` when ``None``.
75
70
  include_in_schema: Whether the endpoint appears in the OpenAPI schema.
76
71
  """
77
72
 
78
73
  enabled: bool = False
79
- auth: Literal["identity", "jwt", "external"] | None = None
74
+ auth: Literal["identity", "external"] | None = None
80
75
  path: str | None = None
81
76
  include_in_schema: bool = False
82
77
 
83
- def __post_init__(self) -> None:
84
- if self.auth != _DEPRECATED_AUTH_ALIAS:
85
- return
86
- warnings.warn(
87
- f"sql_endpoint.auth: {_DEPRECATED_AUTH_ALIAS!r} is deprecated because it names "
88
- f"a mechanism instead of a contract. Use {_IDENTITY_BOUND_AUTH!r}: the endpoint "
89
- "requires a verified caller, whichever authenticator provides it.",
90
- DeprecationWarning,
91
- stacklevel=3,
92
- )
93
-
94
78
  @property
95
79
  def binds_identity(self) -> bool:
96
80
  """Whether this endpoint requires an identity the framework can read.
97
81
 
98
82
  Returns:
99
- ``True`` for ``"identity"`` and its deprecated ``"jwt"`` alias.
83
+ ``True`` for ``"identity"``.
100
84
  """
101
- return self.auth in _IDENTITY_BOUND_AUTH_MODES
85
+ return self.auth == _IDENTITY_BOUND_AUTH
102
86
 
103
87
 
104
88
  class SqlConnectionConfig(LoomFrozenStruct, frozen=True, kw_only=True, forbid_unknown_fields=True):
@@ -3,6 +3,20 @@
3
3
  Translates a :class:`CompiledPlan` into a Bytewax :class:`Dataflow`,
4
4
  wiring decode, node dispatch, encode, and output routing operators.
5
5
 
6
+ Offset completion invariant: for every flow that compiles, each source offset,
7
+ or each share of it a fan-out node forked, completes exactly once, at the end
8
+ of the path it travels and after that path's last durable write. A node
9
+ handler returns the stream that is still live after it, or ``None`` when it
10
+ closed every path it received. ``IntoTopic`` ends its
11
+ path at its compiled sink through :meth:`_BuildContext.wire_branch_terminal`.
12
+ A branching node wires each branch through :meth:`_BuildContext.wire_branch`,
13
+ which hands the branch's live end to ``wire_branch_terminal``: the sink
14
+ compiled for the branch, else a drop sink. The flow's own live end goes
15
+ through :meth:`_BuildContext.wire_flow_output`: the flow output, else a drop
16
+ sink. A Bytewax output has no downstream, so no completion relies on the order
17
+ of sibling operators: it happens inside the sink that writes, or downstream of
18
+ an inline write.
19
+
6
20
  Requires ``bytewax`` to be installed.
7
21
  """
8
22
 
@@ -63,11 +77,13 @@ class _BuiltDataflow:
63
77
 
64
78
 
65
79
  class _DropSinkPartition(StatelessSinkPartition[Any]):
66
- """Discard items routed to an unrouted error branch.
80
+ """Discard the items of a path that ends without a sink.
67
81
 
68
- Discarding still completes each record with the commit tracker: a dropped
69
- message that never completes would freeze its partition's watermark under
70
- at-least-once delivery.
82
+ Such a path is an error kind with no route, a branch or flow end that owns
83
+ no output, or an undecodable record with no WIRE route. Discarding still
84
+ completes each record with the commit tracker: a dropped message that never
85
+ completes would freeze its partition's watermark under at-least-once
86
+ delivery.
71
87
  """
72
88
 
73
89
  def __init__(self, commit_tracker: CommitCompletionPort | None = None) -> None:
@@ -83,7 +99,7 @@ class _DropSinkPartition(StatelessSinkPartition[Any]):
83
99
 
84
100
 
85
101
  class _DropSink(DynamicSink[Any]):
86
- """Build a tracker-aware discard sink for unrouted error branches."""
102
+ """Build the tracker-aware discard sink for a path that ends without a sink."""
87
103
 
88
104
  def __init__(self, commit_tracker: CommitCompletionPort | None = None) -> None:
89
105
  self._commit_tracker = commit_tracker
@@ -182,18 +198,14 @@ class _SupportsTerminalTracing(Protocol):
182
198
  ) -> None:
183
199
  """Make this sink emit a terminal span per message it writes."""
184
200
 
185
- def mark_inline_partition(self) -> None:
186
- """Record that an inline, non-terminal partition is built from this sink."""
187
201
 
202
+ @runtime_checkable
203
+ class _SupportsInlinePartition(Protocol):
204
+ """Runtime sink that can build a partition for an inline, non-terminal write."""
188
205
 
189
- def _mark_inline_partition(sink: object) -> None:
190
- """Record on one sink that an inline, non-terminal partition is built from it.
191
-
192
- Sinks that cannot carry terminal tracing — storage sinks, test doubles —
193
- have nothing to record and are left untouched.
194
- """
195
- if isinstance(sink, _SupportsTerminalTracing):
196
- sink.mark_inline_partition()
206
+ def build_inline_partition(self) -> StatelessSinkPartition[Any]:
207
+ """Build a partition that completes no offset and records no death."""
208
+ ...
197
209
 
198
210
 
199
211
  def _bind_commit_tracker_object(
@@ -235,8 +247,10 @@ def _assemble_dataflow(plan: CompiledPlan, ctx: _BuildContext) -> Any:
235
247
  flow = _bytewax_dataflow.Dataflow(plan.name)
236
248
  stream = _build_source_pipeline(flow, ctx)
237
249
  stream = _wire_process(stream, tuple(node.node for node in plan.nodes), ctx)
238
-
239
- _wire_output(stream, ctx)
250
+ ctx.wire_flow_output(stream)
251
+ for kind in plan.error_routes:
252
+ if kind not in ctx.error_sinks:
253
+ raise RuntimeError(f"Bytewax sink is required for error route {kind.value}.")
240
254
  return flow
241
255
 
242
256
 
@@ -281,43 +295,66 @@ class _BuildContext:
281
295
  self.resource_manager = ResourceManager(bridge)
282
296
  self._path: tuple[int, ...] = ()
283
297
 
284
- def wire_terminal(self, step_id: str, stream: Any) -> None:
285
- if self.sink is None:
286
- raise RuntimeError("Bytewax sink is required for terminal output wiring.")
287
- self._bind_terminal_tracing(self.sink)
288
- bw_output(step_id, stream, self.sink)
298
+ def wire_branch(
299
+ self,
300
+ step_id: str,
301
+ stream: Any,
302
+ nodes: tuple[object, ...],
303
+ path: tuple[int, ...],
304
+ *,
305
+ start: int = 0,
306
+ ) -> None:
307
+ """Wire one branch's *nodes* from index *start* under *path*; end what stays live."""
308
+ tail = _wire_process(stream, nodes, self, path_prefix=path, start=start)
309
+ self.wire_branch_terminal(step_id, tail, path)
289
310
 
290
- def wire_branch_terminal(self, step_id: str, stream: Any, path: tuple[int, ...]) -> None:
291
- sink = self.terminal_sinks.get(path)
311
+ def wire_branch_terminal(self, step_id: str, stream: Any | None, path: tuple[int, ...]) -> None:
312
+ """End one branch's live stream at the sink compiled for *path*, else a drop sink.
313
+
314
+ ``None`` means the branch already ended in a sink, which completes what
315
+ it writes; wiring anything more would complete those offsets twice.
316
+ """
317
+ sink = self._runtime_sink_for(path)
318
+ if stream is None:
319
+ if sink is not None:
320
+ raise RuntimeError(
321
+ f"the output compiled for path {path} is never written: the branch "
322
+ "already ended the path of every message it received."
323
+ )
324
+ return
292
325
  if sink is not None:
293
326
  self._bind_terminal_tracing(sink)
294
327
  bw_output(_qualified_step_id(step_id, path), stream, sink)
295
328
  return
296
- # A branch without a terminal still owes its record a completion: the
297
- # broadcast that created it already forked the offset once per branch.
298
- # Discarding the stream silently left that fork outstanding forever and
299
- # froze the partition's watermark. Unrouted error branches already fall
300
- # back to a drop sink for exactly this reason; branches now do too.
301
- logger.warning(
302
- "unrouted_branch_drop_sink",
303
- flow=self.plan.name,
304
- step_id=step_id,
305
- path=path,
306
- )
329
+ # A live branch end with no sink still owes each record a completion;
330
+ # discarding it would leave the offset, or its fork share, outstanding
331
+ # and freeze the partition's watermark.
307
332
  bw_output(
308
333
  _qualified_step_id(f"{step_id}_dropped", path),
309
334
  stream,
310
335
  _DropSink(self.commit_tracker),
311
336
  )
312
337
 
338
+ def _runtime_sink_for(self, path: tuple[int, ...]) -> Any | None:
339
+ """Return the runtime sink for *path*, or ``None`` when nothing was compiled there.
340
+
341
+ Raises:
342
+ RuntimeConfigurationError: If an ``IntoTopic`` was compiled at *path*
343
+ but no runtime sink was supplied for it.
344
+ """
345
+ sink = self.terminal_sinks.get(path)
346
+ compiled = self.plan.terminal_sinks.get(path)
347
+ if sink is None and compiled is not None:
348
+ issue = StreamingErrorCode.TERMINAL_SINK_MISSING.issue(path=path, topic=compiled.topic)
349
+ raise RuntimeConfigurationError([issue])
350
+ return sink
351
+
313
352
  def _bind_terminal_tracing(self, sink: Any) -> None:
314
353
  """Give one real terminal sink the runtime its death spans open on.
315
354
 
316
355
  Called only from the two wiring sites that run for a genuine terminal.
317
- ``_BuildContext.inline_sink_partition_for`` builds from the *same*
318
- ``terminal_sinks`` mapping for ``WithAsync(process=[..., IntoTopic])``,
319
- where the message explicitly does not die; binding any earlier would
320
- emit a death span for a message that goes on living.
356
+ An inline partition comes from ``build_inline_partition``, which never
357
+ applies tracing, because the message goes on after an inline write.
321
358
 
322
359
  Sinks that cannot record a death — storage sinks, drop sinks, test
323
360
  doubles — are left untouched.
@@ -338,22 +375,26 @@ class _BuildContext:
338
375
  )
339
376
  bw_output(f"{step_id}_{kind.value}_dropped", stream, _DropSink(self.commit_tracker))
340
377
 
341
- def wire_flow_output(self, stream: Any, plan: CompiledPlan) -> None:
342
- if self.sink is None and plan.output is not None:
378
+ def wire_flow_output(self, stream: Any | None) -> None:
379
+ """End the flow's live stream at the output sink, else complete it at a drop sink."""
380
+ if self.sink is None and self.plan.output is not None:
343
381
  raise RuntimeError("Bytewax sink is required for terminal output wiring.")
344
- if self.sink is not None:
345
- self.wire_terminal("output", stream)
346
- for kind in plan.error_routes:
347
- if kind not in self.error_sinks:
348
- raise RuntimeError(f"Bytewax sink is required for error route {kind.value}.")
349
-
350
- def wire_decode_error(self, stream: Any, plan: CompiledPlan) -> None:
351
- del plan
352
- if self.error_sinks.get(ErrorKind.WIRE) is not None:
353
- self.wire_node_error(ErrorKind.WIRE, "decode", stream)
354
- return
355
- if ErrorKind.WIRE in self.plan.error_routes:
382
+ if stream is None and self.plan.output is not None:
383
+ raise RuntimeError(
384
+ "flow.output is never written: the process already ended the path of every "
385
+ "message it received."
386
+ )
387
+ if stream is not None and self.sink is not None:
388
+ self._bind_terminal_tracing(self.sink)
389
+ bw_output("output", stream, self.sink)
390
+ elif stream is not None:
391
+ bw_output("output_dropped", stream, _DropSink(self.commit_tracker))
392
+
393
+ def wire_decode_error(self, stream: Any) -> None:
394
+ """Route undecodable records to the WIRE error sink, else complete them at a drop sink."""
395
+ if ErrorKind.WIRE in self.plan.error_routes and ErrorKind.WIRE not in self.error_sinks:
356
396
  raise RuntimeError("Bytewax sink is required for WIRE error routing.")
397
+ self.wire_node_error(ErrorKind.WIRE, "decode", stream)
357
398
 
358
399
  def inline_sink_partition_for(
359
400
  self,
@@ -373,16 +414,27 @@ class _BuildContext:
373
414
  sink is registered for *path*.
374
415
 
375
416
  Raises:
376
- RuntimeError: If the sink for *path* already carries terminal
377
- tracing, meaning an inline and a terminal wiring path collided
378
- on one compiled sink.
417
+ RuntimeConfigurationError: If an ``IntoTopic`` was compiled at *path*
418
+ but no runtime sink was supplied for it
419
+ (``TERMINAL_SINK_MISSING``), or if a commit tracker is bound and
420
+ the sink cannot build an inline partition, so its partitions
421
+ would complete offsets at the inline write
422
+ (``INLINE_SINK_CANNOT_SKIP_COMMITS``).
379
423
  """
380
- sink = self.terminal_sinks.get(path)
424
+ sink = self._runtime_sink_for(path)
381
425
  if sink is None:
382
426
  return None
383
- _mark_inline_partition(sink)
384
- step_id = "inline_" + "_".join(str(p) for p in path)
385
- return cast(StatelessSinkPartition[Any], sink.build(step_id, 0, 1))
427
+ if isinstance(sink, _SupportsInlinePartition):
428
+ return sink.build_inline_partition()
429
+ if self.commit_tracker is not None:
430
+ issue = StreamingErrorCode.INLINE_SINK_CANNOT_SKIP_COMMITS.issue(
431
+ component=type(sink).__name__
432
+ )
433
+ raise RuntimeConfigurationError([issue])
434
+ partition: StatelessSinkPartition[Any] = sink.build(
435
+ "inline_" + "_".join(str(p) for p in path), 0, 1
436
+ )
437
+ return partition
386
438
 
387
439
  def manager_for(
388
440
  self,
@@ -411,16 +463,6 @@ class _BuildContext:
411
463
  finally:
412
464
  self._path = previous
413
465
 
414
- def wire_process(
415
- self,
416
- stream: Any,
417
- nodes: tuple[object, ...],
418
- *,
419
- path_prefix: tuple[int, ...] = (),
420
- ) -> Any:
421
- """Wire one nested process subtree."""
422
- return _wire_process(stream, nodes, self, path_prefix=path_prefix)
423
-
424
466
  def shutdown_all(self) -> None:
425
467
  """Shutdown all resource managers."""
426
468
  self.resource_manager.shutdown_all()
@@ -442,7 +484,7 @@ def _build_source_pipeline(flow: Any, ctx: _BuildContext) -> Stream:
442
484
  stream: Stream = bw_input("source", flow, source)
443
485
  decoded = _decode_source_stream(stream, ctx, codec, step_id)
444
486
  decoded_branch = _split_decode_results(decoded, step_id)
445
- ctx.wire_decode_error(decoded_branch.falses, ctx.plan)
487
+ ctx.wire_decode_error(decoded_branch.falses)
446
488
  return bw_map(f"{step_id}_message", decoded_branch.trues, _decode_ok_message)
447
489
 
448
490
 
@@ -461,11 +503,6 @@ def _split_decode_results(stream: Stream, step_id: str) -> Any:
461
503
  return branch(f"{step_id}_is_ok", stream, _is_decode_ok)
462
504
 
463
505
 
464
- def _wire_output(stream: Any, ctx: _BuildContext) -> None:
465
- """Wire the output sink and error routes."""
466
- ctx.wire_flow_output(stream, ctx.plan)
467
-
468
-
469
506
  def _qualified_step_id(step_id: str, path: tuple[int, ...]) -> str:
470
507
  if not path:
471
508
  return step_id
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  from collections.abc import Callable, Sequence
6
6
  from dataclasses import dataclass
7
- from typing import Any, Protocol, TypeAlias
7
+ from typing import Any, Protocol, TypeAlias, TypeVar
8
8
 
9
9
  from bytewax.operators import branch, flat_map
10
10
 
@@ -19,6 +19,7 @@ from loom.streaming.core._typing import StreamPayload
19
19
 
20
20
  Stream: TypeAlias = Any
21
21
  NodeResult: TypeAlias = Message[StreamPayload] | ErrorEnvelope[StreamPayload]
22
+ ResultT = TypeVar("ResultT")
22
23
  logger = get_logger(__name__)
23
24
 
24
25
 
@@ -87,9 +88,9 @@ def _build_error_envelope(
87
88
  def _execute_in_boundary(
88
89
  classify: Callable[[Exception], ErrorKind],
89
90
  original: Message[StreamPayload],
90
- fn: Callable[[], Message[StreamPayload]],
91
+ fn: Callable[[], ResultT],
91
92
  boundary: ErrorBoundary,
92
- ) -> NodeResult:
93
+ ) -> ResultT | ErrorEnvelope[StreamPayload]:
93
94
  """Execute one message node and capture failures as error envelopes."""
94
95
  try:
95
96
  return fn()