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