loom-kernel 2.11.1__tar.gz → 2.13.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 (669) hide show
  1. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/CHANGELOG.md +70 -0
  2. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/PKG-INFO +5 -1
  3. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/pyproject.toml +17 -0
  4. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/bootstrap.py +35 -5
  5. loom_kernel-2.13.0/src/loom/cli/__init__.py +20 -0
  6. loom_kernel-2.13.0/src/loom/cli/app.py +10 -0
  7. loom_kernel-2.13.0/src/loom/cli/schema.py +92 -0
  8. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/authz/__init__.py +7 -0
  9. loom_kernel-2.13.0/src/loom/core/authz/_roles.py +385 -0
  10. loom_kernel-2.13.0/src/loom/core/authz/elevation.py +158 -0
  11. loom_kernel-2.13.0/src/loom/core/authz/product.py +54 -0
  12. loom_kernel-2.13.0/src/loom/core/backend/scoped_ddl.py +244 -0
  13. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/backend/sqlalchemy.py +463 -87
  14. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/bootstrap/bootstrap.py +3 -1
  15. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/bootstrap/kernel.py +9 -0
  16. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/gateway.py +51 -24
  17. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/discovery/_utils.py +16 -4
  18. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/discovery/base.py +4 -2
  19. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/discovery/manifest.py +5 -3
  20. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/executor.py +12 -6
  21. loom_kernel-2.13.0/src/loom/core/locator.py +273 -0
  22. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/__init__.py +33 -1
  23. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/convert.py +12 -1
  24. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/enums.py +1 -0
  25. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/field.py +44 -2
  26. loom_kernel-2.13.0/src/loom/core/model/introspection.py +630 -0
  27. loom_kernel-2.13.0/src/loom/core/model/partition.py +114 -0
  28. loom_kernel-2.13.0/src/loom/core/model/privilege.py +22 -0
  29. loom_kernel-2.13.0/src/loom/core/model/scoped.py +69 -0
  30. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/types.py +1 -0
  31. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/types_postgres.py +1 -0
  32. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/backend.py +294 -0
  33. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/migrations/__init__.py +28 -0
  34. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/migrations/env_template.py +45 -0
  35. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/migrations/hook.py +137 -0
  36. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/migrations/operations.py +404 -0
  37. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/migrations/runners.py +372 -0
  38. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/mixins.py +1 -1
  39. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/__init__.py +53 -0
  40. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/bootstrap.py +155 -0
  41. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/config.py +104 -0
  42. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/elevate.py +84 -0
  43. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/guard/0001.sql +466 -0
  44. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/guard/0002.sql +68 -0
  45. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/guard/preflight.sql +23 -0
  46. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/guard_manifest.py +150 -0
  47. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/integrity.py +366 -0
  48. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/partitions.py +196 -0
  49. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/provider.py +151 -0
  50. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/schema.py +124 -0
  51. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/sources.py +68 -0
  52. loom_kernel-2.13.0/src/loom/core/repository/sqlalchemy/rls/verify.py +404 -0
  53. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/session_manager.py +6 -0
  54. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/session_settings.py +32 -22
  55. loom_kernel-2.13.0/src/loom/core/schema_names.py +208 -0
  56. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/auto.py +26 -1
  57. loom_kernel-2.11.1/src/loom/core/authz/_roles.py +0 -193
  58. loom_kernel-2.11.1/src/loom/core/model/introspection.py +0 -340
  59. loom_kernel-2.11.1/src/loom/core/repository/sqlalchemy/backend.py +0 -122
  60. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/.gitignore +0 -0
  61. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/LICENSE +0 -0
  62. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/README.md +0 -0
  63. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/__init__.py +0 -0
  64. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/__init__.py +0 -0
  65. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/_concurrency.py +0 -0
  66. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/_filters.py +0 -0
  67. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/_roles.py +0 -0
  68. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/_startup.py +0 -0
  69. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/_transport.py +0 -0
  70. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/_usecase.py +0 -0
  71. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/__init__.py +0 -0
  72. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/_binding.py +0 -0
  73. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/_handlers.py +0 -0
  74. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/_rpc.py +0 -0
  75. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/card.py +0 -0
  76. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/events.py +0 -0
  77. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/a2a/server.py +0 -0
  78. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/abc.py +0 -0
  79. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/__init__.py +0 -0
  80. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/_compiler.py +0 -0
  81. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/_plan.py +0 -0
  82. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/__init__.py +0 -0
  83. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_capabilities.py +0 -0
  84. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_conversation.py +0 -0
  85. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_feedable.py +0 -0
  86. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_hook.py +0 -0
  87. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_instructions.py +0 -0
  88. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_limits.py +0 -0
  89. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_model_role.py +0 -0
  90. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_output.py +0 -0
  91. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/compiler/phases/_state.py +0 -0
  92. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/config.py +0 -0
  93. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/declarative/__init__.py +0 -0
  94. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/declarative/_envelope.py +0 -0
  95. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/declarative/_schema.py +0 -0
  96. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/declarative/_v1.py +0 -0
  97. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
  98. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/describe.py +0 -0
  99. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/__init__.py +0 -0
  100. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
  101. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
  102. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_capabilities.py +0 -0
  103. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
  104. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
  105. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
  106. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
  107. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
  108. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
  109. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_instructions.py +0 -0
  110. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
  111. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_mcp.py +0 -0
  112. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_models.py +0 -0
  113. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
  114. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
  115. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
  116. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
  117. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
  118. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/extras/__init__.py +0 -0
  119. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/extras/a2a.py +0 -0
  120. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +0 -0
  121. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/extras/mcp.py +0 -0
  122. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/extras/skills.py +0 -0
  123. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
  124. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/__init__.py +0 -0
  125. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/_shared.py +0 -0
  126. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +0 -0
  127. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +0 -0
  128. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/gateway.py +0 -0
  129. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/openai.py +0 -0
  130. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +0 -0
  131. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/errors.py +0 -0
  132. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/fastapi/__init__.py +0 -0
  133. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/fastapi/endpoints.py +0 -0
  134. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/fastapi/response.py +0 -0
  135. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/fastapi/streaming.py +0 -0
  136. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/inference.py +0 -0
  137. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/registry.py +0 -0
  138. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/remote_auth.py +0 -0
  139. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/__init__.py +0 -0
  140. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_bounded.py +0 -0
  141. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_chain.py +0 -0
  142. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_conversation.py +0 -0
  143. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_grants.py +0 -0
  144. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_handle.py +0 -0
  145. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_health.py +0 -0
  146. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_hooks.py +0 -0
  147. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_lifecycle.py +0 -0
  148. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_limits.py +0 -0
  149. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/runtime/_mcp.py +0 -0
  150. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/validate/__init__.py +0 -0
  151. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/ai/validate/__main__.py +0 -0
  152. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/__init__.py +0 -0
  153. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/auto.py +0 -0
  154. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/config.py +0 -0
  155. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/constants.py +0 -0
  156. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/runner.py +0 -0
  157. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/celery/service.py +0 -0
  158. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/async_bridge.py +0 -0
  159. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/authz/_decide.py +0 -0
  160. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/authz/_grants.py +0 -0
  161. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/authz/_scope.py +0 -0
  162. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/backend/__init__.py +0 -0
  163. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/backend/core_model.py +0 -0
  164. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/backend/protocol.py +0 -0
  165. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/bootstrap/__init__.py +0 -0
  166. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/__init__.py +0 -0
  167. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/_batching.py +0 -0
  168. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/_single_flight.py +0 -0
  169. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/abc/__init__.py +0 -0
  170. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/abc/backend.py +0 -0
  171. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/abc/config.py +0 -0
  172. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/abc/dependency.py +0 -0
  173. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/calls.py +0 -0
  174. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/codec.py +0 -0
  175. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/decorators.py +0 -0
  176. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/dependency.py +0 -0
  177. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/errors.py +0 -0
  178. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/keys.py +0 -0
  179. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/memory.py +0 -0
  180. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/repository.py +0 -0
  181. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/result_codec.py +0 -0
  182. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/serializer.py +0 -0
  183. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/cache/wiring.py +0 -0
  184. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/command/__init__.py +0 -0
  185. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/command/adapter.py +0 -0
  186. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/command/base.py +0 -0
  187. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/command/field.py +0 -0
  188. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/command/introspection.py +0 -0
  189. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/compiler.py +0 -0
  190. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/__init__.py +0 -0
  191. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/_boto3.py +0 -0
  192. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/_includes.py +0 -0
  193. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/_resolver_utils.py +0 -0
  194. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/binder.py +0 -0
  195. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/configurable.py +0 -0
  196. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/context.py +0 -0
  197. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/errors.py +0 -0
  198. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/keys.py +0 -0
  199. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/loader.py +0 -0
  200. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/model.py +0 -0
  201. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/observability.py +0 -0
  202. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/resolver.py +0 -0
  203. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/secrets.py +0 -0
  204. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/config/ssm.py +0 -0
  205. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/contracts/__init__.py +0 -0
  206. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/contracts/manifest.py +0 -0
  207. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/di/__init__.py +0 -0
  208. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/di/container.py +0 -0
  209. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/di/scope.py +0 -0
  210. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/discovery/__init__.py +0 -0
  211. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/discovery/interfaces.py +0 -0
  212. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/discovery/modules.py +0 -0
  213. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/__init__.py +0 -0
  214. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/compilable.py +0 -0
  215. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/compiler.py +0 -0
  216. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/events.py +0 -0
  217. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/metrics.py +0 -0
  218. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/plan.py +0 -0
  219. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/engine/post_commit.py +0 -0
  220. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/errors/__init__.py +0 -0
  221. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/errors/codes.py +0 -0
  222. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/errors/errors.py +0 -0
  223. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/expr/__init__.py +0 -0
  224. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/expr/eval.py +0 -0
  225. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/expr/nodes.py +0 -0
  226. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/expr/refs.py +0 -0
  227. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/identity/__init__.py +0 -0
  228. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/identity/context.py +0 -0
  229. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/identity/identity.py +0 -0
  230. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/identity/issuer.py +0 -0
  231. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/identity/wire.py +0 -0
  232. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/introspection/__init__.py +0 -0
  233. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/introspection/base.py +0 -0
  234. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/introspection/describe.py +0 -0
  235. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/job/__init__.py +0 -0
  236. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/job/callback.py +0 -0
  237. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/job/context.py +0 -0
  238. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/job/handle.py +0 -0
  239. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/job/job.py +0 -0
  240. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/job/service.py +0 -0
  241. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/logger/__init__.py +0 -0
  242. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/logger/abc.py +0 -0
  243. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/logger/config.py +0 -0
  244. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/logger/registry.py +0 -0
  245. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/logger/structlogger.py +0 -0
  246. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/_loom_type.py +0 -0
  247. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/base.py +0 -0
  248. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/projection.py +0 -0
  249. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/relation.py +0 -0
  250. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/struct.py +0 -0
  251. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/model/timestamped.py +0 -0
  252. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/__init__.py +0 -0
  253. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/config.py +0 -0
  254. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/event.py +0 -0
  255. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/observer/__init__.py +0 -0
  256. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/observer/noop.py +0 -0
  257. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/observer/otel.py +0 -0
  258. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/observer/structlog.py +0 -0
  259. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/otel_ids.py +0 -0
  260. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/protocol.py +0 -0
  261. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/runtime.py +0 -0
  262. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/span.py +0 -0
  263. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/observability/topology.py +0 -0
  264. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/persistence/__init__.py +0 -0
  265. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/persistence/abc.py +0 -0
  266. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/persistence/none.py +0 -0
  267. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/persistence/registry.py +0 -0
  268. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/plugins/__init__.py +0 -0
  269. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/plugins/entrypoints.py +0 -0
  270. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/plugins/optional.py +0 -0
  271. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/projection/__init__.py +0 -0
  272. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/projection/loaders.py +0 -0
  273. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/projection/runtime.py +0 -0
  274. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/__init__.py +0 -0
  275. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/__init__.py +0 -0
  276. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/cursor.py +0 -0
  277. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/errors.py +0 -0
  278. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/query.py +0 -0
  279. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/query_compiler.py +0 -0
  280. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/repo_for.py +0 -0
  281. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/repository.py +0 -0
  282. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/abc/session_scope.py +0 -0
  283. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/dynamodb/__init__.py +0 -0
  284. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/dynamodb/backend.py +0 -0
  285. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/dynamodb/registry.py +0 -0
  286. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/dynamodb/repository.py +0 -0
  287. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/dynamodb/uow.py +0 -0
  288. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/__init__.py +0 -0
  289. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/backend.py +0 -0
  290. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/ids.py +0 -0
  291. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/query_compiler.py +0 -0
  292. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/registry.py +0 -0
  293. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/repository.py +0 -0
  294. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/uow.py +0 -0
  295. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mongo/values.py +0 -0
  296. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/mutation.py +0 -0
  297. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/registration.py +0 -0
  298. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/registry.py +0 -0
  299. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
  300. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
  301. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
  302. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
  303. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
  304. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
  305. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
  306. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
  307. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
  308. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
  309. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
  310. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
  311. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
  312. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
  313. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
  314. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
  315. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
  316. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
  317. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/response/__init__.py +0 -0
  318. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/response/base.py +0 -0
  319. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/routing/__init__.py +0 -0
  320. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/routing/ref.py +0 -0
  321. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/routing/resolver.py +0 -0
  322. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/runner.py +0 -0
  323. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/schema/__init__.py +0 -0
  324. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/schema/schema_mode.py +0 -0
  325. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/__init__.py +0 -0
  326. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/abc/__init__.py +0 -0
  327. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/abc/contracts.py +0 -0
  328. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/abc/errors.py +0 -0
  329. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/caller_bound.py +0 -0
  330. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/clickhouse/__init__.py +0 -0
  331. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/clickhouse/_client.py +0 -0
  332. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/clickhouse/executor.py +0 -0
  333. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/clickhouse/registry.py +0 -0
  334. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/config.py +0 -0
  335. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/roles.py +0 -0
  336. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/sql/service.py +0 -0
  337. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/symbols.py +0 -0
  338. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/tracing/__init__.py +0 -0
  339. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/tracing/context.py +0 -0
  340. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/transaction.py +0 -0
  341. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/transport/__init__.py +0 -0
  342. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/transport/adapter.py +0 -0
  343. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/uow/__init__.py +0 -0
  344. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/uow/abc.py +0 -0
  345. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/uow/context.py +0 -0
  346. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/__init__.py +0 -0
  347. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/_predicates.py +0 -0
  348. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/agent_markers.py +0 -0
  349. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/compute.py +0 -0
  350. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/constants.py +0 -0
  351. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/factory.py +0 -0
  352. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/field_ref.py +0 -0
  353. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/invoker.py +0 -0
  354. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/keys.py +0 -0
  355. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/markers.py +0 -0
  356. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/mcp_markers.py +0 -0
  357. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/registry.py +0 -0
  358. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/rule.py +0 -0
  359. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/core/use_case/use_case.py +0 -0
  360. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/__init__.py +0 -0
  361. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/__init__.py +0 -0
  362. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_format_registry.py +0 -0
  363. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
  364. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_historify/_common.py +0 -0
  365. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_historify/_log.py +0 -0
  366. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
  367. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
  368. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
  369. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_merge.py +0 -0
  370. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_path_template.py +0 -0
  371. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_predicate.py +0 -0
  372. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
  373. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
  374. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
  375. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/_write_policy.py +0 -0
  376. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/__init__.py +0 -0
  377. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
  378. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
  379. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_historify.py +0 -0
  380. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
  381. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_reader.py +0 -0
  382. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_schema.py +0 -0
  383. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
  384. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_streaming.py +0 -0
  385. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/_writer.py +0 -0
  386. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/polars/provider.py +0 -0
  387. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/__init__.py +0 -0
  388. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
  389. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/_historify.py +0 -0
  390. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/_reader.py +0 -0
  391. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/_schema.py +0 -0
  392. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
  393. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/_writer.py +0 -0
  394. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/backends/spark/provider.py +0 -0
  395. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/__init__.py +0 -0
  396. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
  397. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
  398. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_cleaners.py +0 -0
  399. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_options.py +0 -0
  400. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_paths.py +0 -0
  401. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_scope.py +0 -0
  402. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/checkpoint/_store.py +0 -0
  403. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/__init__.py +0 -0
  404. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_binding.py +0 -0
  405. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_compiler.py +0 -0
  406. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_errors.py +0 -0
  407. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_plan.py +0 -0
  408. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_validators.py +0 -0
  409. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_validators_config.py +0 -0
  410. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
  411. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/compiler/_validators_step.py +0 -0
  412. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/__init__.py +0 -0
  413. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/_format.py +0 -0
  414. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/_read_options.py +0 -0
  415. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/_utils.py +0 -0
  416. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/_write_options.py +0 -0
  417. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
  418. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/expr/_params.py +0 -0
  419. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/expr/_predicate.py +0 -0
  420. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
  421. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
  422. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/__init__.py +0 -0
  423. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/_from.py +0 -0
  424. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
  425. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/_from_config.py +0 -0
  426. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
  427. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
  428. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/source/_specs.py +0 -0
  429. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/__init__.py +0 -0
  430. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_client.py +0 -0
  431. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_file.py +0 -0
  432. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
  433. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
  434. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
  435. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
  436. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
  437. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
  438. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_into.py +0 -0
  439. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
  440. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_table.py +0 -0
  441. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/declarative/target/_temp.py +0 -0
  442. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/executor/__init__.py +0 -0
  443. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/executor/_dispatcher.py +0 -0
  444. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/executor/_executor.py +0 -0
  445. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/__init__.py +0 -0
  446. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/_registry.py +0 -0
  447. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/__init__.py +0 -0
  448. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_clickhouse.py +0 -0
  449. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_dynamodb.py +0 -0
  450. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
  451. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
  452. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_mongo.py +0 -0
  453. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
  454. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
  455. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
  456. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/sources/_serialization.py +0 -0
  457. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/targets/__init__.py +0 -0
  458. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/io/targets/_clickhouse.py +0 -0
  459. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/__init__.py +0 -0
  460. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/_config.py +0 -0
  461. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/_observer.py +0 -0
  462. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/_records.py +0 -0
  463. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/sinks/__init__.py +0 -0
  464. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
  465. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/sinks/_table.py +0 -0
  466. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/lineage/sinks/_writer.py +0 -0
  467. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/__init__.py +0 -0
  468. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/_builder.py +0 -0
  469. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/_ops.py +0 -0
  470. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/_protocol.py +0 -0
  471. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/_runner.py +0 -0
  472. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/_step.py +0 -0
  473. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/backends/__init__.py +0 -0
  474. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
  475. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/__init__.py +0 -0
  476. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_generics.py +0 -0
  477. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_params.py +0 -0
  478. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
  479. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_process.py +0 -0
  480. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_sql.py +0 -0
  481. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_step.py +0 -0
  482. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_step_client.py +0 -0
  483. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
  484. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/__init__.py +0 -0
  485. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/_providers.py +0 -0
  486. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/_wiring.py +0 -0
  487. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/config_loader.py +0 -0
  488. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/core.py +0 -0
  489. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/errors.py +0 -0
  490. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runner/filtering.py +0 -0
  491. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runtime/__init__.py +0 -0
  492. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runtime/_config_values.py +0 -0
  493. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/runtime/contracts.py +0 -0
  494. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/schema/__init__.py +0 -0
  495. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/schema/_contract.py +0 -0
  496. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/schema/_schema.py +0 -0
  497. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/storage/__init__.py +0 -0
  498. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/storage/_config.py +0 -0
  499. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/storage/_file_locator.py +0 -0
  500. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/storage/_locator.py +0 -0
  501. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/storage/routing.py +0 -0
  502. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/testing/__init__.py +0 -0
  503. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/testing/_result.py +0 -0
  504. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/testing/_runners.py +0 -0
  505. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/testing/_scenario.py +0 -0
  506. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/testing/_stubs.py +0 -0
  507. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/etl/testing/spark.py +0 -0
  508. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/__init__.py +0 -0
  509. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_async.py +0 -0
  510. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_config.py +0 -0
  511. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_ctx.py +0 -0
  512. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_flow_yaml.py +0 -0
  513. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_meta.py +0 -0
  514. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_placeholders.py +0 -0
  515. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/_summary.py +0 -0
  516. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/deploy/__init__.py +0 -0
  517. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/deploy/_discovery.py +0 -0
  518. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/deploy/_schedule.py +0 -0
  519. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
  520. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/deploy/entrypoint.py +0 -0
  521. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/__init__.py +0 -0
  522. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_assemble.py +0 -0
  523. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_backfill.py +0 -0
  524. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_backfill_body.py +0 -0
  525. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_body.py +0 -0
  526. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_common.py +0 -0
  527. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_factory.py +0 -0
  528. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_hooks.py +0 -0
  529. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_maintenance.py +0 -0
  530. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_params.py +0 -0
  531. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_run_name.py +0 -0
  532. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_runtime.py +0 -0
  533. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_signature.py +0 -0
  534. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/flow/_stages.py +0 -0
  535. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/manifest/__init__.py +0 -0
  536. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/manifest/_model.py +0 -0
  537. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/manifest/_s3.py +0 -0
  538. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/manifest/_store.py +0 -0
  539. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/notify/__init__.py +0 -0
  540. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/notify/_event.py +0 -0
  541. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/notify/_factory.py +0 -0
  542. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/notify/_port.py +0 -0
  543. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/notify/_slack.py +0 -0
  544. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/observer/__init__.py +0 -0
  545. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/observer/_flow.py +0 -0
  546. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/observer/_logging_bridge.py +0 -0
  547. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/observer/_manifest.py +0 -0
  548. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prefect/observer/_task_run.py +0 -0
  549. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prometheus/__init__.py +0 -0
  550. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prometheus/_instruments.py +0 -0
  551. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prometheus/adapter.py +0 -0
  552. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prometheus/kafka.py +0 -0
  553. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prometheus/lifecycle.py +0 -0
  554. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/prometheus/middleware.py +0 -0
  555. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/py.typed +0 -0
  556. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/__init__.py +0 -0
  557. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/_body.py +0 -0
  558. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/adapter.py +0 -0
  559. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/auth/__init__.py +0 -0
  560. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/auth/abc.py +0 -0
  561. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/auth/config.py +0 -0
  562. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/auth/jwt.py +0 -0
  563. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/auth/middleware.py +0 -0
  564. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/autocrud.py +0 -0
  565. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/compiler.py +0 -0
  566. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/config.py +0 -0
  567. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/constants.py +0 -0
  568. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/cors.py +0 -0
  569. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/errors.py +0 -0
  570. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/__init__.py +0 -0
  571. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/_errors.py +0 -0
  572. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/_exclusions.py +0 -0
  573. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/app.py +0 -0
  574. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/health.py +0 -0
  575. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/openapi.py +0 -0
  576. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/response.py +0 -0
  577. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/router_runtime.py +0 -0
  578. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/fastapi/sql.py +0 -0
  579. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/middleware.py +0 -0
  580. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/model.py +0 -0
  581. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/rest/rest_adapter.py +0 -0
  582. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/__init__.py +0 -0
  583. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/__init__.py +0 -0
  584. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_adapter.py +0 -0
  585. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
  586. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
  587. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_dlq.py +0 -0
  588. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
  589. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_errors.py +0 -0
  590. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_operators.py +0 -0
  591. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
  592. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
  593. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
  594. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
  595. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
  596. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
  597. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
  598. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
  599. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
  600. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
  601. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
  602. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
  603. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/bytewax/runner.py +0 -0
  604. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/__init__.py +0 -0
  605. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/_bindings.py +0 -0
  606. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/_compiler.py +0 -0
  607. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/_errors.py +0 -0
  608. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/_plan.py +0 -0
  609. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/phases/build_plan.py +0 -0
  610. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/compiler/phases/validate.py +0 -0
  611. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/core/__init__.py +0 -0
  612. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/core/_errors.py +0 -0
  613. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/core/_exceptions.py +0 -0
  614. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/core/_message.py +0 -0
  615. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/core/_tracing.py +0 -0
  616. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/core/_typing.py +0 -0
  617. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/graph/__init__.py +0 -0
  618. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/graph/_flow.py +0 -0
  619. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/__init__.py +0 -0
  620. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_codec.py +0 -0
  621. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_config.py +0 -0
  622. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_errors.py +0 -0
  623. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
  624. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_message.py +0 -0
  625. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_record.py +0 -0
  626. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/_wire.py +0 -0
  627. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
  628. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/client/_consumer.py +0 -0
  629. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/client/_producer.py +0 -0
  630. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
  631. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/client/_retry.py +0 -0
  632. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
  633. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/message/_consumer.py +0 -0
  634. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/message/_producer.py +0 -0
  635. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/kafka/message/_protocol.py +0 -0
  636. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/mongo/__init__.py +0 -0
  637. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
  638. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/mongo/_config.py +0 -0
  639. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/mongo/_event.py +0 -0
  640. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/mongo/_normalize.py +0 -0
  641. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/__init__.py +0 -0
  642. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_boundary.py +0 -0
  643. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_branches.py +0 -0
  644. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_broadcast.py +0 -0
  645. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
  646. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_decompose.py +0 -0
  647. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_expand_routes.py +0 -0
  648. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
  649. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_fork.py +0 -0
  650. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_helpers.py +0 -0
  651. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_mongo.py +0 -0
  652. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_protocols.py +0 -0
  653. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_router.py +0 -0
  654. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_shape.py +0 -0
  655. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_sink.py +0 -0
  656. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_step.py +0 -0
  657. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_table/__init__.py +0 -0
  658. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_table/common.py +0 -0
  659. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_table/config.py +0 -0
  660. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/_with.py +0 -0
  661. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/nodes/refs.py +0 -0
  662. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/streaming/testing.py +0 -0
  663. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/__init__.py +0 -0
  664. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/agents.py +0 -0
  665. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/golden.py +0 -0
  666. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/http_harness.py +0 -0
  667. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/in_memory.py +0 -0
  668. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/repository_harness.py +0 -0
  669. {loom_kernel-2.11.1 → loom_kernel-2.13.0}/src/loom/testing/runner.py +0 -0
@@ -4,6 +4,61 @@
4
4
 
5
5
  ### core
6
6
 
7
+ - **core:** range-partitioned row-scoped tables.
8
+ `__partition_by__ = ("RANGE", "<column>")` on a `RowScoped` model compiles to
9
+ `postgresql_partition_by`; the column must be a `DateTime` column of the
10
+ primary key and every unique key must contain it, LIST and HASH are refused,
11
+ all at compile time. Partitions are created ahead of time by the migrator
12
+ through guard revision 2 (`0002.sql`, new functions `create_range_partition`
13
+ and `detach_partition`, `EXECUTE` for the owner only), which creates,
14
+ registers and protects each partition with its parent's scopes in the
15
+ caller's transaction: `op.ensure_range_partitions(table, start, end,
16
+ interval=...)` in a revision, or
17
+ `loom.core.repository.sqlalchemy.rls.ensure_range_partitions(url_or_connection,
18
+ application, model, start, end, interval=...)` at runtime. Partitions are
19
+ named `<table>_p<YYYYMM>` (`_p<YYYY>`, `_p<YYYYMMDD>` for year and day) with
20
+ midnight-UTC bounds. Retention uses `op.detach_range_partitions(...,
21
+ drop=...)` or `detach_range_partitions(...)`, which unprotects, detaches and
22
+ optionally drops. Dropping a partitioned table in an autogenerated revision
23
+ drops its partitions first (`op.drop_partitions`). `check` and `verify` count
24
+ registered partitions with their parent; `verify` reports
25
+ `partition.registration` for a partition registered unlike its parent.
26
+ Re-apply the bootstrap to install revision 2; partition calls on an older
27
+ guard raise `guard revision pending`. `ScopedTable` gains `partition_by`, and
28
+ `require_guard_revision(_sync)` take an optional `minimum`.
29
+ - **core:** a model declares named checks and partial unique indexes.
30
+ `__checks__ = {rule: sql_expression}` compiles one `CHECK` constraint per
31
+ rule, named by the rule; `__partial_unique__ = {rule: (columns, where)}`
32
+ compiles a unique index `uq_<table>_<rule>` restricted to the rows matching
33
+ `where`, and on a row-scoped table its columns must contain the boundary
34
+ (C5, refused at compile time as the guard refuses it with `LG002`). The
35
+ expression and the predicate are product code with the trust of a
36
+ hand-written Alembic revision and must be static literals with no runtime
37
+ input; loom checks only that each is a non-empty string. The static-SQL lint
38
+ exempts exactly the two calls that compile them and now also watches
39
+ `CheckConstraint`. Alembic's autogenerate does not compare checks or index
40
+ predicates, so adding, changing or removing a check on an existing table,
41
+ or changing a predicate, is a hand-written revision.
42
+ - **core:** `database.schema.naming_convention` hands a SQLAlchemy
43
+ `naming_convention` (`pk`, `fk`, `uq`, `ck`, `ix`) to the application
44
+ metadata of the migration path and to the metadata the REST runtime and the
45
+ Celery worker compile, so all of them name constraints alike; absent,
46
+ nothing changes. Use
47
+ `fk_%(table_name)s_%(column_0_N_name)s`: every composite FK of a scoped
48
+ table starts with the boundary column. Compilation now refuses two
49
+ constraints or indexes of one table resolving to the same name, and a
50
+ check, `__indexes__` or `__partial_unique__` name over Postgres's 63 bytes,
51
+ instead of failing or truncating at DDL time. `reset_registry` takes the
52
+ convention as `naming_convention=`; called without it, it leaves the
53
+ convention as it is, and `None` restores SQLAlchemy's default.
54
+
55
+ - **core:** two column types. `Bytes` (`loom.core.model.Bytes`, also inferred
56
+ from a `bytes` annotation, which used to fall back to `JSON`) compiles to
57
+ `LargeBinary`, `bytea` on Postgres; `Postgres.INET` compiles to Postgres
58
+ `inet`. The SQLAlchemy repository binds `bytes` as they are instead of
59
+ base64 text, and a network address the driver returns for `inet` reaches a
60
+ `str` field as its text form (`10.0.0.1`, `2001:db8::1/64`).
61
+
7
62
  - **core:** a memory cache alias can be bounded. `cache: max_size` (entries) and
8
63
  the new `cache: max_bytes` (stored payload bytes) serve every
9
64
  `aiocache.SimpleMemoryCache` alias through `loom.core.cache.memory.BoundedMemoryCache`,
@@ -91,6 +146,12 @@
91
146
  (`_safe_pydantic_schema`) through the same `LoomType` the cache and MCP
92
147
  boundaries already use; `LoomRestAdapter`'s Struct projection goes
93
148
  through it too.
149
+ - **rest:** `create_app` accepts `modules: Sequence[Callable[[LoomContainer], None]]`,
150
+ mirroring the Celery `create_app`. Each module is called with the container,
151
+ in order, before repositories are registered and before use cases are
152
+ verified, so a use case can inject a port no repository provides (a clock,
153
+ an identity verifier, a bridge to another bounded context). Without the
154
+ module, startup still fails with the same `ResolutionError`.
94
155
 
95
156
  ### prefect
96
157
 
@@ -231,6 +292,15 @@
231
292
 
232
293
  ### core
233
294
 
295
+ - **core:** the RLS guard refuses, in the same statement, a drop outside the
296
+ hatch that breaks its invariants. `DROP POLICY` or `DROP TRIGGER
297
+ loom_deny_owner_dml` on a scoped table used to commit, because drops are not
298
+ reported to `ddl_command_end`; the schema then failed the assertion (`LG002`)
299
+ only at the next DDL. The `sql_drop` trigger now runs the assertion when the
300
+ drop removes an object of the application schema and the hatch is closed;
301
+ dropping a plain index still succeeds. Shipped in guard revision 2
302
+ (`0002.sql`, `CREATE OR REPLACE FUNCTION on_sql_drop`); re-apply the
303
+ bootstrap to install it.
234
304
  - **core:** a model with a relation or projection field imports again on
235
305
  Python 3.12.4 and later when its module uses
236
306
  `from __future__ import annotations`. It failed with
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: loom-kernel
3
- Version: 2.11.1
3
+ Version: 2.13.0
4
4
  Summary: Loom Python project
5
5
  License-File: LICENSE
6
6
  Classifier: Programming Language :: Python :: 3
@@ -42,6 +42,9 @@ Provides-Extra: celery
42
42
  Requires-Dist: celery<6.0,>=5.3; extra == 'celery'
43
43
  Requires-Dist: kombu<6.0,>=5.3; extra == 'celery'
44
44
  Requires-Dist: redis<6.0,>=5.0; extra == 'celery'
45
+ Provides-Extra: cli
46
+ Requires-Dist: pyyaml>=6; extra == 'cli'
47
+ Requires-Dist: typer<1,>=0.12; extra == 'cli'
45
48
  Provides-Extra: clickhouse
46
49
  Requires-Dist: clickhouse-connect<1.0,>=0.9.2; extra == 'clickhouse'
47
50
  Provides-Extra: config
@@ -103,6 +106,7 @@ Requires-Dist: pydantic<3.0,>=2.0; extra == 'rest'
103
106
  Requires-Dist: uvicorn<1.0,>=0.30; extra == 'rest'
104
107
  Requires-Dist: uvloop<1.0,>=0.21; (sys_platform != 'win32') and extra == 'rest'
105
108
  Provides-Extra: sqlalchemy
109
+ Requires-Dist: alembic<2,>=1.13; extra == 'sqlalchemy'
106
110
  Requires-Dist: greenlet>=3.0; extra == 'sqlalchemy'
107
111
  Requires-Dist: sqlalchemy<3.0,>=2.0; extra == 'sqlalchemy'
108
112
  Provides-Extra: streaming
@@ -23,6 +23,9 @@ dependencies = [
23
23
  "opentelemetry-api>=1.27,<2.0",
24
24
  ]
25
25
 
26
+ [project.scripts]
27
+ loom = "loom.cli:main"
28
+
26
29
  [project.optional-dependencies]
27
30
  # The testing helpers under loom.*.testing define pytest fixtures, so importing
28
31
  # them needs pytest at runtime like any other declared dependency.
@@ -40,6 +43,7 @@ rest = [
40
43
  sqlalchemy = [
41
44
  "sqlalchemy>=2.0,<3.0",
42
45
  "greenlet>=3.0",
46
+ "alembic>=1.13,<2",
43
47
  ]
44
48
  clickhouse = [
45
49
  "clickhouse-connect>=0.9.2,<1.0",
@@ -163,6 +167,10 @@ celery = [
163
167
  "kombu>=5.3,<6.0",
164
168
  "redis>=5.0,<6.0",
165
169
  ]
170
+ cli = [
171
+ "pyyaml>=6",
172
+ "typer>=0.12,<1",
173
+ ]
166
174
 
167
175
  [project.entry-points."loom.ai.engines"]
168
176
  pydantic-ai = "loom.ai.engines.pydantic_ai.provider:PydanticAIEngineProvider"
@@ -225,6 +233,7 @@ dev = [
225
233
  "aiocache>=0.12,<1.0",
226
234
  "aiosqlite>=0.20.0",
227
235
  "asyncpg>=0.30",
236
+ "alembic>=1.13,<2",
228
237
  # Declared, not merely transitive: one cache test pins what the key renderer
229
238
  # cannot separate inside an object msgspec expands itself, and an attrs class
230
239
  # is the only such object the stdlib can build.
@@ -274,6 +283,7 @@ dev = [
274
283
  "fasta2a>=0.6,<1",
275
284
  "a2a-sdk>=1.1,<2",
276
285
  "pydantic-ai-harness[skills]>=0.28,<1",
286
+ "typer>=0.12,<1",
277
287
  ]
278
288
 
279
289
  [tool.hatch.build.targets.wheel]
@@ -287,6 +297,7 @@ packages = [
287
297
  include = [
288
298
  "src/loom/py.typed",
289
299
  "src/loom/ai/declarative/schemas/*.json",
300
+ "src/loom/core/repository/sqlalchemy/rls/guard/*.sql",
290
301
  ]
291
302
 
292
303
  [tool.hatch.build.targets.sdist]
@@ -408,6 +419,12 @@ module = [
408
419
  ]
409
420
  ignore_missing_imports = true
410
421
 
422
+ [[tool.mypy.overrides]]
423
+ module = [
424
+ "loom.core.backend.scoped_ddl",
425
+ ]
426
+ disallow_untyped_calls = false
427
+
411
428
  [tool.pytest.ini_options]
412
429
  minversion = "8.0"
413
430
  testpaths = [
@@ -118,6 +118,16 @@ _T = TypeVar("_T")
118
118
  # ---------------------------------------------------------------------------
119
119
 
120
120
 
121
+ class _WorkerSchemaConfig(msgspec.Struct, kw_only=True):
122
+ """The part of ``database.schema`` the worker compiles models with.
123
+
124
+ Attributes:
125
+ naming_convention: SQLAlchemy naming convention keyed by constraint kind.
126
+ """
127
+
128
+ naming_convention: dict[str, str] | None = None
129
+
130
+
121
131
  class _WorkerDbConfig(msgspec.Struct, kw_only=True):
122
132
  """Database settings for the worker process.
123
133
 
@@ -125,11 +135,13 @@ class _WorkerDbConfig(msgspec.Struct, kw_only=True):
125
135
  url: Async SQLAlchemy connection URL.
126
136
  echo: Log all SQL statements when ``True``.
127
137
  pool_pre_ping: Test connections before checkout.
138
+ schema: Schema settings the models are compiled with.
128
139
  """
129
140
 
130
141
  url: str
131
142
  echo: bool = False
132
143
  pool_pre_ping: bool = True
144
+ schema: _WorkerSchemaConfig = msgspec.field(default_factory=_WorkerSchemaConfig)
133
145
 
134
146
 
135
147
  class _DiscoveryModules(msgspec.Struct, kw_only=True):
@@ -621,16 +633,28 @@ def _register_repositories(
621
633
  return build_sqlalchemy_repository_registration_module(session_manager, models)
622
634
 
623
635
 
624
- def _compile_models(models: Sequence[type[BaseModel]]) -> tuple[type[BaseModel], ...]:
636
+ def _worker_naming_convention(ctx: ConfigContext) -> Mapping[str, str] | None:
637
+ """The ``database.schema.naming_convention`` the REST runtime and migrations also read."""
638
+ db_cfg = ctx.section(ConfigKey.DATABASE, _WorkerDbConfig)
639
+ return db_cfg.schema.naming_convention
640
+
641
+
642
+ def _compile_models(
643
+ models: Sequence[type[BaseModel]], *, naming_convention: Mapping[str, str] | None
644
+ ) -> tuple[type[BaseModel], ...]:
625
645
  """Compile and normalize discovered models for SQLAlchemy repositories."""
626
646
  if not models:
627
647
  return ()
628
648
  try:
629
- from loom.core.backend.sqlalchemy import compile_all, reset_registry
649
+ from loom.core.backend.sqlalchemy import (
650
+ compile_all,
651
+ configured_naming_convention,
652
+ reset_registry,
653
+ )
630
654
  except ImportError as exc:
631
655
  raise _sqlalchemy_extra_error() from exc
632
656
  ordered = tuple(dict.fromkeys(models))
633
- reset_registry()
657
+ reset_registry(naming_convention=configured_naming_convention(naming_convention))
634
658
  compile_all(*ordered)
635
659
  return ordered
636
660
 
@@ -656,6 +680,8 @@ def _compile_db_layer(
656
680
  session_manager: SessionManager | None,
657
681
  models: Sequence[type[BaseModel]],
658
682
  user_modules: Sequence[Callable[[LoomContainer], None]],
683
+ *,
684
+ naming_convention: Mapping[str, str] | None,
659
685
  ) -> tuple[tuple[type[BaseModel], ...], tuple[Callable[[LoomContainer], None], ...]]:
660
686
  """Compile models and register repositories; no-op when DB is not configured.
661
687
 
@@ -663,6 +689,7 @@ def _compile_db_layer(
663
689
  session_manager: Active session manager, or ``None`` for pure jobs.
664
690
  models: Model classes discovered or declared for this worker.
665
691
  user_modules: Container modules provided by the caller.
692
+ naming_convention: The configured ``database.schema.naming_convention``.
666
693
 
667
694
  Returns:
668
695
  Tuple of (normalized_models, runtime_modules). When no DB is
@@ -671,7 +698,7 @@ def _compile_db_layer(
671
698
  base = tuple(user_modules)
672
699
  if session_manager is None:
673
700
  return tuple(models), base
674
- normalized = _compile_models(models)
701
+ normalized = _compile_models(models, naming_convention=naming_convention)
675
702
  if not normalized:
676
703
  return tuple(models), base
677
704
  return normalized, (*base, _register_repositories(session_manager, normalized))
@@ -904,7 +931,10 @@ def bootstrap_worker(
904
931
  _apply_job_config_if_present(ctx, job_type)
905
932
 
906
933
  uow_factory, session_manager = _resolve_uow_factory(ctx)
907
- final_models, runtime_modules = _compile_db_layer(session_manager, resolved.models, modules)
934
+ convention = _worker_naming_convention(ctx) if session_manager is not None else None
935
+ final_models, runtime_modules = _compile_db_layer(
936
+ session_manager, resolved.models, modules, naming_convention=convention
937
+ )
908
938
  runtime_modules = (*runtime_modules, cache_module_for(ctx))
909
939
 
910
940
  resolved = _WorkerResolved(
@@ -0,0 +1,20 @@
1
+ """The ``loom`` command line, installed with the ``cli`` extra."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+
7
+ CLI_DEPENDENCIES = frozenset({"typer", "yaml"})
8
+ INSTALL_HINT = 'the loom command needs the cli extra: pip install "loom-kernel[cli]"'
9
+
10
+
11
+ def main() -> None:
12
+ """Entry point of the ``loom`` script; without the ``cli`` extra it prints how to install it."""
13
+ try:
14
+ from loom.cli.app import app
15
+ except ModuleNotFoundError as exc:
16
+ if exc.name not in CLI_DEPENDENCIES:
17
+ raise
18
+ print(INSTALL_HINT, file=sys.stderr)
19
+ raise SystemExit(1) from exc
20
+ app()
@@ -0,0 +1,10 @@
1
+ """The ``loom`` command tree."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import typer
6
+
7
+ from loom.cli.schema import schema_app
8
+
9
+ app = typer.Typer(no_args_is_help=True, help="Operate the database side of a loom application.")
10
+ app.add_typer(schema_app, name="schema")
@@ -0,0 +1,92 @@
1
+ """``loom schema``: the commands that prepare a row-scoped schema."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pathlib import Path
6
+ from typing import Annotated, Any
7
+
8
+ import typer
9
+ import yaml
10
+
11
+ from loom.core.schema_names import SchemaNames
12
+
13
+ schema_app = typer.Typer(no_args_is_help=True, help="Prepare a row-scoped schema.")
14
+
15
+
16
+ @schema_app.command("init")
17
+ def init(
18
+ name: Annotated[str, typer.Argument(help="The application schema.")],
19
+ config: Annotated[
20
+ Path | None,
21
+ typer.Option("--config", help="Merge the names into this configuration file."),
22
+ ] = None,
23
+ ) -> None:
24
+ """Derive the names around a schema once and write them into the configuration.
25
+
26
+ Without ``--config`` the block is printed. With it the names are merged
27
+ into ``database.schema``; a name the product already changed is never
28
+ overwritten.
29
+ """
30
+ try:
31
+ block = _block(name, SchemaNames.derived(name))
32
+ if config is None:
33
+ typer.echo(yaml.safe_dump({"database": {"schema": block}}, sort_keys=False), nl=False)
34
+ return
35
+ _write(config, block)
36
+ except (ValueError, yaml.YAMLError) as exc:
37
+ typer.echo(str(exc), err=True)
38
+ raise typer.Exit(1) from exc
39
+
40
+
41
+ def _write(config: Path, block: dict[str, Any]) -> None:
42
+ document = _load(config)
43
+ database = _section(document, "database", "database")
44
+ schema = _section(database, "schema", "database.schema")
45
+ conflicts = _merge(schema, block, "database.schema")
46
+ if conflicts:
47
+ raise ValueError(
48
+ "these names differ from the derived ones and were kept: " + ", ".join(conflicts)
49
+ )
50
+ config.write_text(yaml.safe_dump(document, sort_keys=False))
51
+
52
+
53
+ def _load(config: Path) -> dict[str, Any]:
54
+ if not config.exists():
55
+ return {}
56
+ loaded = yaml.safe_load(config.read_text())
57
+ if loaded is None:
58
+ return {}
59
+ if not isinstance(loaded, dict):
60
+ raise ValueError(f"{config} must hold a mapping at its top level")
61
+ return loaded
62
+
63
+
64
+ def _section(parent: dict[str, Any], key: str, path: str) -> dict[str, Any]:
65
+ current = parent.get(key)
66
+ if current is None:
67
+ current = parent[key] = {}
68
+ if not isinstance(current, dict):
69
+ raise ValueError(f"{path} must be a mapping")
70
+ return current
71
+
72
+
73
+ def _block(name: str, names: SchemaNames) -> dict[str, Any]:
74
+ return {
75
+ "name": name,
76
+ "guard": names.guard,
77
+ "groups": {"readers": names.readers, "writers": names.writers},
78
+ "version_tables": {"structure": names.version_table, "data": names.data_version_table},
79
+ }
80
+
81
+
82
+ def _merge(target: dict[str, Any], values: dict[str, Any], path: str) -> list[str]:
83
+ conflicts: list[str] = []
84
+ for key, value in values.items():
85
+ current = target.get(key)
86
+ if current is None:
87
+ target[key] = value
88
+ elif isinstance(value, dict) and isinstance(current, dict):
89
+ conflicts += _merge(current, value, f"{path}.{key}")
90
+ elif current != value:
91
+ conflicts.append(f"{path}.{key}")
92
+ return conflicts
@@ -16,15 +16,20 @@ from loom.core.authz._decide import (
16
16
  )
17
17
  from loom.core.authz._grants import Grant, GrantSource, InMemoryGrantSource
18
18
  from loom.core.authz._roles import (
19
+ CompositionRules,
19
20
  Permission,
20
21
  Role,
21
22
  RoleCatalog,
23
+ RoleSpec,
22
24
  UnknownPermission,
23
25
  UnknownRole,
24
26
  )
25
27
  from loom.core.authz._scope import Scope
28
+ from loom.core.authz.product import AuthzProduct, load_authz_product
26
29
 
27
30
  __all__ = [
31
+ "AuthzProduct",
32
+ "CompositionRules",
28
33
  "Decision",
29
34
  "Grant",
30
35
  "GrantCheck",
@@ -33,11 +38,13 @@ __all__ = [
33
38
  "Permission",
34
39
  "Role",
35
40
  "RoleCatalog",
41
+ "RoleSpec",
36
42
  "Scope",
37
43
  "UnknownPermission",
38
44
  "UnknownRole",
39
45
  "can_grant",
40
46
  "can_revoke",
41
47
  "evaluate",
48
+ "load_authz_product",
42
49
  "scopes_with",
43
50
  ]