loom-kernel 4.0.0__tar.gz → 6.0.0__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-4.0.0 → loom_kernel-6.0.0}/CHANGELOG.md +36 -2
  2. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/PKG-INFO +1 -1
  3. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/backend/sqlalchemy.py +16 -0
  4. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/introspection.py +90 -42
  5. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/sql/config.py +5 -21
  6. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/.gitignore +0 -0
  7. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/LICENSE +0 -0
  8. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/README.md +0 -0
  9. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/pyproject.toml +0 -0
  10. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/__init__.py +0 -0
  11. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/__init__.py +0 -0
  12. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/_concurrency.py +0 -0
  13. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/_filters.py +0 -0
  14. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/_paths.py +0 -0
  15. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/_roles.py +0 -0
  16. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/_startup.py +0 -0
  17. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/_transport.py +0 -0
  18. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/_usecase.py +0 -0
  19. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/a2a/__init__.py +0 -0
  20. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/a2a/_binding.py +0 -0
  21. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/a2a/_handlers.py +0 -0
  22. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/a2a/_rpc.py +0 -0
  23. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/a2a/card.py +0 -0
  24. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/a2a/events.py +0 -0
  25. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/a2a/server.py +0 -0
  26. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/abc.py +0 -0
  27. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/bootstrap.py +0 -0
  28. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/__init__.py +0 -0
  29. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/_compiler.py +0 -0
  30. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/_fingerprint.py +0 -0
  31. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/_plan.py +0 -0
  32. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/phases/__init__.py +0 -0
  33. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/phases/_capabilities.py +0 -0
  34. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/phases/_conversation.py +0 -0
  35. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/phases/_feedable.py +0 -0
  36. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/phases/_hook.py +0 -0
  37. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/phases/_instructions.py +0 -0
  38. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/phases/_limits.py +0 -0
  39. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/phases/_model_role.py +0 -0
  40. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/phases/_output.py +0 -0
  41. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/compiler/phases/_state.py +0 -0
  42. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/config.py +0 -0
  43. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/declarative/__init__.py +0 -0
  44. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/declarative/_envelope.py +0 -0
  45. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/declarative/_schema.py +0 -0
  46. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/declarative/_v1.py +0 -0
  47. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
  48. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/describe.py +0 -0
  49. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/__init__.py +0 -0
  50. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
  51. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
  52. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_capabilities.py +0 -0
  53. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
  54. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
  55. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
  56. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
  57. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
  58. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
  59. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_instructions.py +0 -0
  60. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
  61. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_mcp.py +0 -0
  62. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_models.py +0 -0
  63. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
  64. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
  65. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
  66. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
  67. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
  68. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/extras/__init__.py +0 -0
  69. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/extras/a2a.py +0 -0
  70. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +0 -0
  71. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/extras/mcp.py +0 -0
  72. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/extras/skills.py +0 -0
  73. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
  74. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/providers/__init__.py +0 -0
  75. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/providers/_shared.py +0 -0
  76. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +0 -0
  77. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +0 -0
  78. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/providers/gateway.py +0 -0
  79. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/providers/openai.py +0 -0
  80. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +0 -0
  81. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/errors.py +0 -0
  82. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/etl/__init__.py +0 -0
  83. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/etl/_batch.py +0 -0
  84. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/etl/_columns.py +0 -0
  85. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/etl/_frames.py +0 -0
  86. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/etl/_ledger.py +0 -0
  87. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/etl/_runner.py +0 -0
  88. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/etl/_validation.py +0 -0
  89. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/fastapi/__init__.py +0 -0
  90. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/fastapi/endpoints.py +0 -0
  91. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/fastapi/response.py +0 -0
  92. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/fastapi/streaming.py +0 -0
  93. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/inference.py +0 -0
  94. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/pricing.py +0 -0
  95. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/registry.py +0 -0
  96. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/remote_auth.py +0 -0
  97. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/runtime/__init__.py +0 -0
  98. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/runtime/_bounded.py +0 -0
  99. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/runtime/_chain.py +0 -0
  100. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/runtime/_conversation.py +0 -0
  101. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/runtime/_grants.py +0 -0
  102. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/runtime/_handle.py +0 -0
  103. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/runtime/_health.py +0 -0
  104. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/runtime/_hooks.py +0 -0
  105. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/runtime/_lifecycle.py +0 -0
  106. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/runtime/_limits.py +0 -0
  107. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/runtime/_mcp.py +0 -0
  108. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/validate/__init__.py +0 -0
  109. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/ai/validate/__main__.py +0 -0
  110. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/celery/__init__.py +0 -0
  111. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/celery/auto.py +0 -0
  112. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/celery/bootstrap.py +0 -0
  113. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/celery/config.py +0 -0
  114. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/celery/constants.py +0 -0
  115. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/celery/runner.py +0 -0
  116. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/celery/service.py +0 -0
  117. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/cli/__init__.py +0 -0
  118. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/cli/app.py +0 -0
  119. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/cli/check.py +0 -0
  120. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/cli/schema.py +0 -0
  121. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/async_bridge.py +0 -0
  122. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/authz/__init__.py +0 -0
  123. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/authz/_decide.py +0 -0
  124. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/authz/_grants.py +0 -0
  125. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/authz/_roles.py +0 -0
  126. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/authz/_scope.py +0 -0
  127. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/authz/elevation.py +0 -0
  128. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/authz/product.py +0 -0
  129. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/backend/__init__.py +0 -0
  130. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/backend/core_model.py +0 -0
  131. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/backend/protocol.py +0 -0
  132. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/backend/scoped_ddl.py +0 -0
  133. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/bootstrap/__init__.py +0 -0
  134. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/bootstrap/bootstrap.py +0 -0
  135. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/bootstrap/kernel.py +0 -0
  136. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/__init__.py +0 -0
  137. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/_batching.py +0 -0
  138. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/_single_flight.py +0 -0
  139. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/abc/__init__.py +0 -0
  140. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/abc/backend.py +0 -0
  141. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/abc/config.py +0 -0
  142. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/abc/dependency.py +0 -0
  143. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/calls.py +0 -0
  144. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/codec.py +0 -0
  145. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/decorators.py +0 -0
  146. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/dependency.py +0 -0
  147. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/errors.py +0 -0
  148. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/gateway.py +0 -0
  149. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/keys.py +0 -0
  150. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/memory.py +0 -0
  151. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/repository.py +0 -0
  152. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/result_codec.py +0 -0
  153. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/serializer.py +0 -0
  154. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/cache/wiring.py +0 -0
  155. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/checks.py +0 -0
  156. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/command/__init__.py +0 -0
  157. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/command/adapter.py +0 -0
  158. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/command/base.py +0 -0
  159. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/command/field.py +0 -0
  160. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/command/introspection.py +0 -0
  161. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/compiler.py +0 -0
  162. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/__init__.py +0 -0
  163. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/_boto3.py +0 -0
  164. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/_includes.py +0 -0
  165. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/_resolver_utils.py +0 -0
  166. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/binder.py +0 -0
  167. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/configurable.py +0 -0
  168. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/context.py +0 -0
  169. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/errors.py +0 -0
  170. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/keys.py +0 -0
  171. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/loader.py +0 -0
  172. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/model.py +0 -0
  173. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/observability.py +0 -0
  174. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/overrides.py +0 -0
  175. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/resolver.py +0 -0
  176. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/secrets.py +0 -0
  177. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/config/ssm.py +0 -0
  178. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/contracts/__init__.py +0 -0
  179. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/contracts/manifest.py +0 -0
  180. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/di/__init__.py +0 -0
  181. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/di/container.py +0 -0
  182. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/di/scope.py +0 -0
  183. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/discovery/__init__.py +0 -0
  184. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/discovery/_utils.py +0 -0
  185. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/discovery/base.py +0 -0
  186. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/discovery/interfaces.py +0 -0
  187. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/discovery/manifest.py +0 -0
  188. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/discovery/modules.py +0 -0
  189. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/engine/__init__.py +0 -0
  190. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/engine/compilable.py +0 -0
  191. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/engine/compiler.py +0 -0
  192. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/engine/events.py +0 -0
  193. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/engine/executor.py +0 -0
  194. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/engine/metrics.py +0 -0
  195. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/engine/plan.py +0 -0
  196. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/engine/post_commit.py +0 -0
  197. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/environment.py +0 -0
  198. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/errors/__init__.py +0 -0
  199. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/errors/codes.py +0 -0
  200. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/errors/errors.py +0 -0
  201. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/expr/__init__.py +0 -0
  202. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/expr/eval.py +0 -0
  203. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/expr/nodes.py +0 -0
  204. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/expr/refs.py +0 -0
  205. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/identity/__init__.py +0 -0
  206. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/identity/context.py +0 -0
  207. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/identity/identity.py +0 -0
  208. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/identity/issuer.py +0 -0
  209. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/identity/wire.py +0 -0
  210. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/introspection/__init__.py +0 -0
  211. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/introspection/base.py +0 -0
  212. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/introspection/describe.py +0 -0
  213. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/job/__init__.py +0 -0
  214. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/job/callback.py +0 -0
  215. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/job/context.py +0 -0
  216. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/job/handle.py +0 -0
  217. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/job/job.py +0 -0
  218. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/job/service.py +0 -0
  219. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/locator.py +0 -0
  220. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/logger/__init__.py +0 -0
  221. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/logger/abc.py +0 -0
  222. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/logger/checks.py +0 -0
  223. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/logger/config.py +0 -0
  224. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/logger/registry.py +0 -0
  225. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/logger/structlogger.py +0 -0
  226. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/__init__.py +0 -0
  227. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/_json_schema.py +0 -0
  228. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/_loom_type.py +0 -0
  229. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/base.py +0 -0
  230. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/convert.py +0 -0
  231. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/enums.py +0 -0
  232. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/field.py +0 -0
  233. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/partition.py +0 -0
  234. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/privilege.py +0 -0
  235. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/projection.py +0 -0
  236. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/relation.py +0 -0
  237. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/scoped.py +0 -0
  238. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/struct.py +0 -0
  239. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/timestamped.py +0 -0
  240. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/types.py +0 -0
  241. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/model/types_postgres.py +0 -0
  242. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/observability/__init__.py +0 -0
  243. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/observability/config.py +0 -0
  244. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/observability/event.py +0 -0
  245. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/observability/observer/__init__.py +0 -0
  246. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/observability/observer/noop.py +0 -0
  247. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/observability/observer/otel.py +0 -0
  248. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/observability/observer/structlog.py +0 -0
  249. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/observability/otel_ids.py +0 -0
  250. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/observability/protocol.py +0 -0
  251. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/observability/runtime.py +0 -0
  252. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/observability/span.py +0 -0
  253. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/observability/topology.py +0 -0
  254. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/persistence/__init__.py +0 -0
  255. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/persistence/abc.py +0 -0
  256. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/persistence/none.py +0 -0
  257. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/persistence/registry.py +0 -0
  258. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/plugins/__init__.py +0 -0
  259. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/plugins/entrypoints.py +0 -0
  260. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/plugins/optional.py +0 -0
  261. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/projection/__init__.py +0 -0
  262. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/projection/loaders.py +0 -0
  263. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/projection/runtime.py +0 -0
  264. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/__init__.py +0 -0
  265. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/abc/__init__.py +0 -0
  266. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/abc/cursor.py +0 -0
  267. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/abc/errors.py +0 -0
  268. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/abc/query.py +0 -0
  269. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/abc/query_compiler.py +0 -0
  270. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/abc/repo_for.py +0 -0
  271. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/abc/repository.py +0 -0
  272. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/abc/session_scope.py +0 -0
  273. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/dynamodb/__init__.py +0 -0
  274. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/dynamodb/backend.py +0 -0
  275. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/dynamodb/registry.py +0 -0
  276. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/dynamodb/repository.py +0 -0
  277. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/dynamodb/uow.py +0 -0
  278. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/mongo/__init__.py +0 -0
  279. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/mongo/backend.py +0 -0
  280. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/mongo/ids.py +0 -0
  281. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/mongo/query_compiler.py +0 -0
  282. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/mongo/registry.py +0 -0
  283. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/mongo/repository.py +0 -0
  284. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/mongo/uow.py +0 -0
  285. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/mongo/values.py +0 -0
  286. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/mutation.py +0 -0
  287. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/registration.py +0 -0
  288. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/registry.py +0 -0
  289. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
  290. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/backend.py +0 -0
  291. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
  292. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
  293. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/migrations/__init__.py +0 -0
  294. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/migrations/env_template.py +0 -0
  295. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/migrations/hook.py +0 -0
  296. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/migrations/operations.py +0 -0
  297. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/migrations/runners.py +0 -0
  298. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
  299. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
  300. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
  301. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
  302. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
  303. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
  304. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
  305. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
  306. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
  307. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
  308. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
  309. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
  310. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
  311. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
  312. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/__init__.py +0 -0
  313. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/bootstrap.py +0 -0
  314. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/config.py +0 -0
  315. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/elevate.py +0 -0
  316. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/guard/0001.sql +0 -0
  317. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/guard/0002.sql +0 -0
  318. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/guard/preflight.sql +0 -0
  319. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/guard_manifest.py +0 -0
  320. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/integrity.py +0 -0
  321. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/partitions.py +0 -0
  322. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/provider.py +0 -0
  323. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/schema.py +0 -0
  324. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/sources.py +0 -0
  325. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/rls/verify.py +0 -0
  326. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
  327. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/session_settings.py +0 -0
  328. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
  329. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
  330. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/repository/sqlalchemy/values.py +0 -0
  331. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/response/__init__.py +0 -0
  332. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/response/base.py +0 -0
  333. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/routing/__init__.py +0 -0
  334. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/routing/ref.py +0 -0
  335. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/routing/resolver.py +0 -0
  336. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/runner.py +0 -0
  337. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/schema/__init__.py +0 -0
  338. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/schema/schema_mode.py +0 -0
  339. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/schema_names.py +0 -0
  340. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/sql/__init__.py +0 -0
  341. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/sql/abc/__init__.py +0 -0
  342. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/sql/abc/contracts.py +0 -0
  343. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/sql/abc/errors.py +0 -0
  344. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/sql/caller_bound.py +0 -0
  345. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/sql/clickhouse/__init__.py +0 -0
  346. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/sql/clickhouse/_client.py +0 -0
  347. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/sql/clickhouse/executor.py +0 -0
  348. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/sql/clickhouse/registry.py +0 -0
  349. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/sql/roles.py +0 -0
  350. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/sql/service.py +0 -0
  351. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/symbols.py +0 -0
  352. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/tracing/__init__.py +0 -0
  353. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/tracing/context.py +0 -0
  354. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/transaction.py +0 -0
  355. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/transport/__init__.py +0 -0
  356. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/transport/adapter.py +0 -0
  357. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/uow/__init__.py +0 -0
  358. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/uow/abc.py +0 -0
  359. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/uow/context.py +0 -0
  360. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/__init__.py +0 -0
  361. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/_predicates.py +0 -0
  362. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/agent_markers.py +0 -0
  363. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/compute.py +0 -0
  364. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/constants.py +0 -0
  365. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/factory.py +0 -0
  366. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/field_ref.py +0 -0
  367. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/invoker.py +0 -0
  368. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/keys.py +0 -0
  369. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/markers.py +0 -0
  370. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/mcp_markers.py +0 -0
  371. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/outcome.py +0 -0
  372. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/registry.py +0 -0
  373. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/rule.py +0 -0
  374. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/core/use_case/use_case.py +0 -0
  375. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/__init__.py +0 -0
  376. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/_uri.py +0 -0
  377. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/__init__.py +0 -0
  378. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_format_registry.py +0 -0
  379. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
  380. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_historify/_common.py +0 -0
  381. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_historify/_log.py +0 -0
  382. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
  383. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
  384. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
  385. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_merge.py +0 -0
  386. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_path_template.py +0 -0
  387. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_predicate.py +0 -0
  388. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
  389. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
  390. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
  391. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/_write_policy.py +0 -0
  392. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/polars/__init__.py +0 -0
  393. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
  394. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
  395. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/polars/_frame.py +0 -0
  396. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/polars/_historify.py +0 -0
  397. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
  398. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/polars/_reader.py +0 -0
  399. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/polars/_schema.py +0 -0
  400. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
  401. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/polars/_streaming.py +0 -0
  402. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/polars/_writer.py +0 -0
  403. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/polars/provider.py +0 -0
  404. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/spark/__init__.py +0 -0
  405. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
  406. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/spark/_historify.py +0 -0
  407. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/spark/_reader.py +0 -0
  408. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/spark/_schema.py +0 -0
  409. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
  410. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/spark/_writer.py +0 -0
  411. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/backends/spark/provider.py +0 -0
  412. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/checkpoint/__init__.py +0 -0
  413. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
  414. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
  415. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/checkpoint/_cleaners.py +0 -0
  416. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/checkpoint/_options.py +0 -0
  417. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/checkpoint/_paths.py +0 -0
  418. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/checkpoint/_scope.py +0 -0
  419. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/checkpoint/_store.py +0 -0
  420. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/compiler/__init__.py +0 -0
  421. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/compiler/_binding.py +0 -0
  422. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/compiler/_compiler.py +0 -0
  423. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/compiler/_errors.py +0 -0
  424. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/compiler/_filter.py +0 -0
  425. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/compiler/_plan.py +0 -0
  426. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/compiler/_validators.py +0 -0
  427. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/compiler/_validators_agents.py +0 -0
  428. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/compiler/_validators_config.py +0 -0
  429. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
  430. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/compiler/_validators_step.py +0 -0
  431. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/__init__.py +0 -0
  432. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/_format.py +0 -0
  433. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/_read_options.py +0 -0
  434. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/_utils.py +0 -0
  435. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/_with_agent.py +0 -0
  436. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/_write_options.py +0 -0
  437. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
  438. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/expr/_params.py +0 -0
  439. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/expr/_predicate.py +0 -0
  440. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
  441. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
  442. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/source/__init__.py +0 -0
  443. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/source/_from.py +0 -0
  444. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
  445. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/source/_from_config.py +0 -0
  446. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
  447. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
  448. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/source/_specs.py +0 -0
  449. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/__init__.py +0 -0
  450. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/_client.py +0 -0
  451. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/_errors.py +0 -0
  452. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/_file.py +0 -0
  453. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
  454. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
  455. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
  456. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
  457. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
  458. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
  459. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/_into.py +0 -0
  460. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
  461. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/_table.py +0 -0
  462. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/declarative/target/_temp.py +0 -0
  463. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/executor/__init__.py +0 -0
  464. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/executor/_agents.py +0 -0
  465. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/executor/_dispatcher.py +0 -0
  466. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/executor/_executor.py +0 -0
  467. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/__init__.py +0 -0
  468. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/_registry.py +0 -0
  469. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/sources/__init__.py +0 -0
  470. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/sources/_clickhouse.py +0 -0
  471. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/sources/_dynamodb.py +0 -0
  472. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
  473. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
  474. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/sources/_mongo.py +0 -0
  475. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
  476. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
  477. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
  478. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/sources/_serialization.py +0 -0
  479. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/targets/__init__.py +0 -0
  480. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/io/targets/_clickhouse.py +0 -0
  481. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/lineage/__init__.py +0 -0
  482. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/lineage/_config.py +0 -0
  483. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/lineage/_observer.py +0 -0
  484. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/lineage/_records.py +0 -0
  485. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/lineage/sinks/__init__.py +0 -0
  486. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
  487. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/lineage/sinks/_table.py +0 -0
  488. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/lineage/sinks/_writer.py +0 -0
  489. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/maintenance/__init__.py +0 -0
  490. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/maintenance/_builder.py +0 -0
  491. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/maintenance/_ops.py +0 -0
  492. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/maintenance/_protocol.py +0 -0
  493. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/maintenance/_runner.py +0 -0
  494. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/maintenance/_step.py +0 -0
  495. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/maintenance/backends/__init__.py +0 -0
  496. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
  497. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/pipeline/__init__.py +0 -0
  498. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/pipeline/_generics.py +0 -0
  499. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/pipeline/_params.py +0 -0
  500. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
  501. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/pipeline/_process.py +0 -0
  502. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/pipeline/_sql.py +0 -0
  503. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/pipeline/_step.py +0 -0
  504. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/pipeline/_step_client.py +0 -0
  505. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
  506. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/runner/__init__.py +0 -0
  507. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/runner/_agents.py +0 -0
  508. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/runner/_providers.py +0 -0
  509. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/runner/_wiring.py +0 -0
  510. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/runner/config_loader.py +0 -0
  511. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/runner/core.py +0 -0
  512. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/runner/errors.py +0 -0
  513. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/runner/filtering.py +0 -0
  514. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/runtime/__init__.py +0 -0
  515. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/runtime/_config_values.py +0 -0
  516. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/runtime/contracts.py +0 -0
  517. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/schema/__init__.py +0 -0
  518. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/schema/_contract.py +0 -0
  519. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/schema/_schema.py +0 -0
  520. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/storage/__init__.py +0 -0
  521. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/storage/_config.py +0 -0
  522. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/storage/_file_locator.py +0 -0
  523. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/storage/_locator.py +0 -0
  524. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/storage/routing.py +0 -0
  525. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/testing/__init__.py +0 -0
  526. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/testing/_result.py +0 -0
  527. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/testing/_runners.py +0 -0
  528. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/testing/_scenario.py +0 -0
  529. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/testing/_stubs.py +0 -0
  530. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/etl/testing/spark.py +0 -0
  531. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/__init__.py +0 -0
  532. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/_async.py +0 -0
  533. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/_config.py +0 -0
  534. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/_ctx.py +0 -0
  535. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/_flow_yaml.py +0 -0
  536. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/_meta.py +0 -0
  537. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/_placeholders.py +0 -0
  538. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/_summary.py +0 -0
  539. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/deploy/__init__.py +0 -0
  540. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/deploy/_discovery.py +0 -0
  541. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/deploy/_schedule.py +0 -0
  542. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
  543. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/deploy/entrypoint.py +0 -0
  544. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/__init__.py +0 -0
  545. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/_assemble.py +0 -0
  546. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/_backfill.py +0 -0
  547. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/_backfill_body.py +0 -0
  548. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/_body.py +0 -0
  549. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/_common.py +0 -0
  550. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/_factory.py +0 -0
  551. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/_hooks.py +0 -0
  552. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/_maintenance.py +0 -0
  553. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/_params.py +0 -0
  554. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/_run_name.py +0 -0
  555. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/_runtime.py +0 -0
  556. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/_signature.py +0 -0
  557. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/flow/_stages.py +0 -0
  558. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/manifest/__init__.py +0 -0
  559. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/manifest/_model.py +0 -0
  560. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/manifest/_s3.py +0 -0
  561. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/manifest/_store.py +0 -0
  562. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/notify/__init__.py +0 -0
  563. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/notify/_event.py +0 -0
  564. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/notify/_factory.py +0 -0
  565. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/notify/_format.py +0 -0
  566. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/notify/_port.py +0 -0
  567. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/notify/_slack.py +0 -0
  568. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/notify/_sns.py +0 -0
  569. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/observer/__init__.py +0 -0
  570. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/observer/_flow.py +0 -0
  571. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/observer/_logging_bridge.py +0 -0
  572. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/observer/_manifest.py +0 -0
  573. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prefect/observer/_task_run.py +0 -0
  574. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prometheus/__init__.py +0 -0
  575. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prometheus/_instruments.py +0 -0
  576. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prometheus/adapter.py +0 -0
  577. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prometheus/kafka.py +0 -0
  578. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prometheus/lifecycle.py +0 -0
  579. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/prometheus/middleware.py +0 -0
  580. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/py.typed +0 -0
  581. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/__init__.py +0 -0
  582. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/_body.py +0 -0
  583. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/adapter.py +0 -0
  584. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/auth/__init__.py +0 -0
  585. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/auth/abc.py +0 -0
  586. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/auth/config.py +0 -0
  587. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/auth/jwt.py +0 -0
  588. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/auth/middleware.py +0 -0
  589. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/autocrud.py +0 -0
  590. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/checks.py +0 -0
  591. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/compiler.py +0 -0
  592. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/config.py +0 -0
  593. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/constants.py +0 -0
  594. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/cors.py +0 -0
  595. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/errors.py +0 -0
  596. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/fastapi/__init__.py +0 -0
  597. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/fastapi/_errors.py +0 -0
  598. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/fastapi/_exclusions.py +0 -0
  599. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/fastapi/app.py +0 -0
  600. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/fastapi/auto.py +0 -0
  601. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/fastapi/health.py +0 -0
  602. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/fastapi/openapi.py +0 -0
  603. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/fastapi/response.py +0 -0
  604. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/fastapi/router_runtime.py +0 -0
  605. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/fastapi/sql.py +0 -0
  606. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/middleware.py +0 -0
  607. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/model.py +0 -0
  608. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/rest/rest_adapter.py +0 -0
  609. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/__init__.py +0 -0
  610. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/__init__.py +0 -0
  611. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/_adapter.py +0 -0
  612. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
  613. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
  614. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/_dlq.py +0 -0
  615. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
  616. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/_errors.py +0 -0
  617. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/_operators.py +0 -0
  618. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
  619. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
  620. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
  621. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
  622. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
  623. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
  624. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
  625. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
  626. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
  627. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
  628. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
  629. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
  630. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/bytewax/runner.py +0 -0
  631. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/compiler/__init__.py +0 -0
  632. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/compiler/_bindings.py +0 -0
  633. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/compiler/_compiler.py +0 -0
  634. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/compiler/_errors.py +0 -0
  635. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/compiler/_plan.py +0 -0
  636. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/compiler/phases/build_plan.py +0 -0
  637. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/compiler/phases/validate.py +0 -0
  638. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/core/__init__.py +0 -0
  639. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/core/_errors.py +0 -0
  640. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/core/_exceptions.py +0 -0
  641. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/core/_message.py +0 -0
  642. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/core/_tracing.py +0 -0
  643. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/core/_typing.py +0 -0
  644. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/graph/__init__.py +0 -0
  645. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/graph/_flow.py +0 -0
  646. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/__init__.py +0 -0
  647. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/_codec.py +0 -0
  648. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/_config.py +0 -0
  649. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/_errors.py +0 -0
  650. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
  651. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/_message.py +0 -0
  652. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/_record.py +0 -0
  653. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/_wire.py +0 -0
  654. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
  655. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/client/_consumer.py +0 -0
  656. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/client/_producer.py +0 -0
  657. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
  658. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/client/_retry.py +0 -0
  659. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
  660. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/message/_consumer.py +0 -0
  661. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/message/_producer.py +0 -0
  662. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/kafka/message/_protocol.py +0 -0
  663. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/mongo/__init__.py +0 -0
  664. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
  665. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/mongo/_config.py +0 -0
  666. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/mongo/_event.py +0 -0
  667. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/mongo/_normalize.py +0 -0
  668. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/__init__.py +0 -0
  669. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_boundary.py +0 -0
  670. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_branches.py +0 -0
  671. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_broadcast.py +0 -0
  672. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
  673. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_decompose.py +0 -0
  674. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_expand_routes.py +0 -0
  675. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
  676. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_fork.py +0 -0
  677. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_helpers.py +0 -0
  678. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_mongo.py +0 -0
  679. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_protocols.py +0 -0
  680. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_router.py +0 -0
  681. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_shape.py +0 -0
  682. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_sink.py +0 -0
  683. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_step.py +0 -0
  684. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_table/__init__.py +0 -0
  685. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_table/common.py +0 -0
  686. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_table/config.py +0 -0
  687. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/_with.py +0 -0
  688. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/nodes/refs.py +0 -0
  689. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/streaming/testing.py +0 -0
  690. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/testing/__init__.py +0 -0
  691. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/testing/agents.py +0 -0
  692. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/testing/golden.py +0 -0
  693. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/testing/http_harness.py +0 -0
  694. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/testing/in_memory.py +0 -0
  695. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/src/loom/testing/repository_harness.py +0 -0
  696. {loom_kernel-4.0.0 → loom_kernel-6.0.0}/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
@@ -589,6 +593,36 @@
589
593
  it. A `@cache_query` argument that is a pydantic instance now contributes
590
594
  its builtins rendering to the cache key rather than the instance's own
591
595
  `repr`, a one-time key change.
596
+ - **core:** a model field annotated with an enum and no declared column type
597
+ takes the column type of the scalar the enum is mixed with, the first class
598
+ of its MRO with a column rule, as that class itself would: a `StrEnum` (any
599
+ `str` enum) becomes `String`, honouring `length=`, an `IntEnum` or `IntFlag`
600
+ becomes `Integer`, a `float` enum `Float`, a `Decimal` enum `Numeric`,
601
+ instead of `JSON`. The value is stored as a plain string or integer, not
602
+ JSON-encoded, so the column can be filtered by equality; `Optional` of such
603
+ an enum behaves the same. An existing table with such a column needs a
604
+ migration that converts the data with a `USING` clause, which Alembic's
605
+ autogenerate does not write: on Postgres,
606
+ `ALTER TABLE t ALTER COLUMN c TYPE varchar USING c #>> '{}'` and
607
+ `ALTER TABLE t ALTER COLUMN c TYPE integer USING (c #>> '{}')::integer`. On
608
+ SQLAlchemy models, a plain `Enum` (mixed with no scalar) or a `Literal[...]`
609
+ field with no declared column type now fails model compilation with a
610
+ `ValueError` naming the model and the field, instead of becoming a `JSON`
611
+ column; loom does not infer a type from the values. Declare the column, for
612
+ example `colour: Colour = ColumnField(String(20))`. Mongo and DynamoDB
613
+ models keep such fields as they are. Declared column types are unchanged,
614
+ and an `Annotated[...]` column type or `Field` is now read also when the
615
+ `Annotated` sits inside `Optional` (`Annotated[T, String(1)] | None`), and
616
+ is used when a `ColumnField(...)` on the field declares no column type.
617
+ `ColumnFieldInfo` gains `needs_declared_type`.
618
+ - **core:** an `Optional` inside `Annotated` whose metadata carries no column
619
+ type, such as `Annotated[int | None, msgspec.Meta(ge=0)]`, now takes the
620
+ column of its scalar type (`Integer` here) instead of `JSON`; an existing
621
+ table needs the same `USING` migration as above. A `Field(...)` inside
622
+ `Annotated` with no column type is now read instead of being dropped, so its
623
+ settings take effect: `primary_key=True` adds the column to the primary key,
624
+ which can turn a model's key composite, and `nullable=True` makes the column
625
+ nullable. Review such fields before upgrading.
592
626
 
593
627
  ### ai
594
628
 
@@ -704,8 +738,8 @@
704
738
  the route at startup. Only scalar columns of the use case's own model
705
739
  (`UseCase[Model, ...]`) qualify. A related model's column (`warehouse.code`)
706
740
  is refused, and so are JSON, array and text-search columns; lists, dicts
707
- and structs, and an `Enum` or `Literal` declared without a column type, are
708
- JSON. `InterfaceCompilationError` names the route and the field. It is also
741
+ and structs are JSON. A `StrEnum` or `IntEnum` column is scalar; a plain
742
+ `Enum` or a `Literal` needs a declared column type. `InterfaceCompilationError` names the route and the field. It is also
709
743
  raised for a declaration on a use case with no model, and for a route-level
710
744
  declaration on a route without a `QuerySpec`; an inherited one is ignored.
711
745
  `exists` and `not_exists` answer `400 unsupported_query`, and so do `like`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: loom-kernel
3
- Version: 4.0.0
3
+ Version: 6.0.0
4
4
  Summary: Loom Python project
5
5
  License-File: LICENSE
6
6
  Classifier: Programming Language :: Python :: 3
@@ -234,6 +234,7 @@ def _compile_model(
234
234
 
235
235
  table_name = get_table_name(struct_cls)
236
236
  column_fields = get_column_fields(struct_cls)
237
+ _refuse_undeclared_column_types(struct_cls, column_fields)
237
238
  scopes = scope_columns(struct_cls)
238
239
  boundary = next((scope for scope in scopes if scope.is_boundary), None)
239
240
  constraints, composite_columns = _foreign_key_constraints(
@@ -284,6 +285,21 @@ def _compile_model(
284
285
  return sa_cls
285
286
 
286
287
 
288
+ def _refuse_undeclared_column_types(
289
+ struct_cls: type, column_fields: Mapping[str, ColumnFieldInfo]
290
+ ) -> None:
291
+ """Refuse a plain enum or ``Literal`` field whose column type is not declared.
292
+
293
+ loom does not infer a SQL type from the values of such a field.
294
+ """
295
+ for name, info in column_fields.items():
296
+ if info.needs_declared_type:
297
+ raise ValueError(
298
+ f"{struct_cls.__name__}.{name}: no column type can be inferred from a plain "
299
+ "Enum or Literal annotation; declare it, e.g. `ColumnField(String(20))`"
300
+ )
301
+
302
+
287
303
  def _declared_constraints(struct_cls: type, table_name: str) -> list[Constraint | Index]:
288
304
  """Keys, indexes and checks declared on the model, in declaration order.
289
305
 
@@ -5,8 +5,19 @@ from collections.abc import Callable, Mapping
5
5
  from dataclasses import dataclass, replace
6
6
  from datetime import date, datetime, time
7
7
  from decimal import Decimal
8
+ from enum import Enum
8
9
  from types import UnionType
9
- from typing import Any, ClassVar, Union, cast, get_args, get_origin, get_type_hints
10
+ from typing import (
11
+ Annotated,
12
+ Any,
13
+ ClassVar,
14
+ Literal,
15
+ Union,
16
+ cast,
17
+ get_args,
18
+ get_origin,
19
+ get_type_hints,
20
+ )
10
21
 
11
22
  import msgspec
12
23
 
@@ -40,12 +51,18 @@ class PartialUnique:
40
51
 
41
52
  @dataclass(frozen=True, slots=True)
42
53
  class ColumnFieldInfo:
43
- """Resolved metadata for a single column field."""
54
+ """Resolved metadata for a single column field.
55
+
56
+ ``needs_declared_type`` marks a field whose column type was not declared
57
+ and cannot be inferred, a plain enum or a ``Literal``: ``column_type`` is
58
+ then a JSON placeholder.
59
+ """
44
60
 
45
61
  name: str
46
62
  python_type: type
47
63
  column_type: ColumnType
48
64
  field: Field
65
+ needs_declared_type: bool = False
49
66
 
50
67
 
51
68
  def _collect_inherited_dict_metadata(cls: type, attr: str) -> dict[str, Any]:
@@ -86,40 +103,31 @@ def _resolve_column_field(
86
103
  struct_default: Any,
87
104
  declared: ColumnFieldSpec | None,
88
105
  ) -> ColumnFieldInfo:
89
- """Build the column metadata for one field, declared or inferred."""
90
- python_type = _extract_origin_type(annotation)
91
- if declared is not None:
92
- return ColumnFieldInfo(
93
- name=name,
94
- python_type=python_type,
95
- column_type=declared.column_type
96
- or _infer_column_type(annotation, field=declared.field),
97
- field=_with_struct_default(declared.field, struct_default),
98
- )
99
-
100
- annotated_type, annotated_field = _extract_annotated_column(annotation)
101
- if annotated_type is not None:
102
- return ColumnFieldInfo(
103
- name=name,
104
- python_type=python_type,
105
- column_type=annotated_type,
106
- field=_with_struct_default(annotated_field, struct_default),
107
- )
106
+ """Build the column metadata for one field, declared or inferred.
108
107
 
109
- inferred_field = _with_struct_default(Field(), struct_default)
108
+ A ``ColumnField`` supplies the ``Field``; its column type, else the one in
109
+ ``Annotated``, else the inferred one is used.
110
+ """
111
+ annotated_type, field = _extract_annotated_column(annotation)
112
+ if declared is not None:
113
+ annotated_type, field = declared.column_type or annotated_type, declared.field
114
+ field = _with_struct_default(field, struct_default)
115
+ column_type = annotated_type or _infer_column_type(annotation, field=field)
110
116
  return ColumnFieldInfo(
111
117
  name=name,
112
- python_type=python_type,
113
- column_type=_infer_column_type(annotation, field=inferred_field),
114
- field=inferred_field,
118
+ python_type=_extract_origin_type(annotation),
119
+ column_type=column_type or JSON,
120
+ field=field,
121
+ needs_declared_type=column_type is None,
115
122
  )
116
123
 
117
124
 
118
125
  def _extract_annotated_column(annotation: Any) -> tuple[ColumnType | None, Field]:
119
- """Read the ``ColumnType`` and ``Field`` carried by ``Annotated[T, ...]``."""
126
+ """Read the ``ColumnType`` and ``Field`` carried by ``Annotated[T, ...]``, optional or not."""
120
127
  column_type: ColumnType | None = None
121
128
  field = Field()
122
- for entry in _extract_metadata(annotation):
129
+ _, metadata = _column_base(annotation)
130
+ for entry in metadata:
123
131
  if isinstance(entry, ColumnType):
124
132
  column_type = entry
125
133
  elif isinstance(entry, Field):
@@ -170,11 +178,6 @@ def get_table_name(cls: type) -> str:
170
178
  return table
171
179
 
172
180
 
173
- def _extract_metadata(annotation: Any) -> tuple[Any, ...]:
174
- """Pull metadata entries from ``Annotated[T, ...]``."""
175
- return getattr(annotation, "__metadata__", ())
176
-
177
-
178
181
  def resolve_type_hints(obj: Any, *, include_extras: bool = False) -> dict[str, Any]:
179
182
  """Return the resolved annotations of *obj*, or ``{}`` when they cannot be resolved.
180
183
 
@@ -325,8 +328,10 @@ def scalar_column_annotations(model: type) -> dict[str, Any]:
325
328
  """Return the annotation of each scalar column of *model*, ``Annotated`` metadata removed.
326
329
 
327
330
  A JSON, array or text-search column is not scalar; lists, dicts and
328
- structs, and an ``Enum`` or ``Literal`` declared without a column type,
329
- are inferred as JSON.
331
+ structs are inferred as JSON. An enum mixed with a scalar type, such as a
332
+ ``StrEnum`` or ``IntEnum``, takes that type's column and is scalar. No
333
+ column type can be inferred for a plain ``Enum`` or a ``Literal`` declared
334
+ without one; its ``column_type`` is a JSON placeholder and it is not listed.
330
335
 
331
336
  Args:
332
337
  model: Model whose columns are read.
@@ -373,6 +378,23 @@ def _unwrap_optional(annotation: Any) -> Any:
373
378
  return annotation
374
379
 
375
380
 
381
+ def _column_base(annotation: Any) -> tuple[Any, tuple[Any, ...]]:
382
+ """Strip ``Optional`` and ``Annotated`` layers, in either order.
383
+
384
+ Returns:
385
+ The inner annotation and the metadata of the ``Annotated`` layers.
386
+ """
387
+ metadata: tuple[Any, ...] = ()
388
+ while True:
389
+ unwrapped = _unwrap_optional(annotation)
390
+ if get_origin(unwrapped) is Annotated:
391
+ metadata += unwrapped.__metadata__
392
+ unwrapped = get_args(unwrapped)[0]
393
+ if unwrapped is annotation:
394
+ return annotation, metadata
395
+ annotation = unwrapped
396
+
397
+
376
398
  def _is_classvar(annotation: Any) -> bool:
377
399
  return get_origin(annotation) is ClassVar
378
400
 
@@ -383,20 +405,46 @@ _SCALAR_TYPE_MAP: dict[type, ColumnType] = {
383
405
  bool: Boolean,
384
406
  bytes: Bytes,
385
407
  datetime: DateTime(tz=True),
408
+ date: String(None),
409
+ time: String(None),
386
410
  Decimal: Numeric(),
387
411
  }
388
412
 
389
413
 
390
- def _infer_column_type(annotation: Any, *, field: Field) -> ColumnType:
391
- base = _unwrap_optional(annotation)
392
- if get_origin(base) in (list, tuple, set, dict):
414
+ _COLUMN_RULE_TYPES = frozenset({str, *_SCALAR_TYPE_MAP})
415
+
416
+
417
+ def _column_rule_type(annotation: Any) -> type:
418
+ """The class whose column rule the annotation follows.
419
+
420
+ An enum follows the first class of its MRO that has a rule, the scalar it is
421
+ mixed with; a plain enum has none and is returned as it is.
422
+ """
423
+ python_type = _extract_origin_type(annotation)
424
+ if not issubclass(python_type, Enum):
425
+ return python_type
426
+ return next((t for t in python_type.__mro__ if t in _COLUMN_RULE_TYPES), python_type)
427
+
428
+
429
+ def _infer_column_type(annotation: Any, *, field: Field) -> ColumnType | None:
430
+ """Infer the column type from the annotation; an enum follows its scalar mixin.
431
+
432
+ Returns:
433
+ The column type, or ``None`` for a plain enum or a ``Literal``, which
434
+ have no scalar type to follow.
435
+ """
436
+ base, _ = _column_base(annotation)
437
+ origin = get_origin(base)
438
+ if origin is Literal:
439
+ return None
440
+ if origin in (list, tuple, set, dict):
393
441
  return JSON
394
- python_type = _extract_origin_type(base)
395
- if python_type is str:
442
+ rule_type = _column_rule_type(base)
443
+ if rule_type is str:
396
444
  return String(field.length)
397
- if python_type in (date, time):
398
- return String(None)
399
- return _SCALAR_TYPE_MAP.get(python_type, JSON)
445
+ if issubclass(rule_type, Enum):
446
+ return None
447
+ return _SCALAR_TYPE_MAP.get(rule_type, JSON)
400
448
 
401
449
 
402
450
  _SCOPE_NAME = re.compile(r"^[a-z_][a-z0-9_]*$")
@@ -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):
File without changes
File without changes
File without changes
File without changes