loom-kernel 1.9.1__tar.gz → 1.9.3__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 (1174) hide show
  1. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.github/workflows/ci-main.yml +35 -0
  2. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.github/workflows/ci-pr.yml +35 -0
  3. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.github/workflows/docs.yml +10 -0
  4. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.github/workflows/release.yml +19 -0
  5. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/CHANGELOG.md +26 -0
  6. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/PKG-INFO +1 -1
  7. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/ai/a2a.md +10 -5
  8. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/ai/mcp.md +141 -14
  9. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/pyproject.toml +2 -2
  10. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/config.py +20 -2
  11. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_mcp.py +7 -2
  12. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/errors.py +21 -0
  13. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/remote_auth.py +110 -54
  14. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/runtime/_lifecycle.py +98 -21
  15. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/helpers/remote_auth_plugin.py +3 -1
  16. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/conftest.py +8 -0
  17. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_a2a_auth_wiring.py +13 -1
  18. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_remote_auth_wiring.py +79 -12
  19. loom_kernel-1.9.3/tests/integration/ai/test_runtime_remote_clients.py +579 -0
  20. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_config.py +44 -0
  21. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_remote_auth.py +93 -5
  22. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/uv.lock +1 -1
  23. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.gitignore +0 -0
  24. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.pre-commit-config.yaml +0 -0
  25. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.readthedocs.yaml +0 -0
  26. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/LICENSE +0 -0
  27. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/Makefile +0 -0
  28. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/README.md +0 -0
  29. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/codecov.yml +0 -0
  30. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docker-compose.local.yaml +0 -0
  31. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/_static/.gitkeep +0 -0
  32. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/_static/custom.css +0 -0
  33. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/_static/logo-transparent.png +0 -0
  34. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/_static/logo.svg +0 -0
  35. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/ai/artifacts.md +0 -0
  36. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/ai/observability.md +0 -0
  37. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/ai/overview.md +0 -0
  38. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/ai/providers.md +0 -0
  39. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/architecture/adr/README.md +0 -0
  40. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/architecture/clean-architecture.md +0 -0
  41. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/architecture/overview.md +0 -0
  42. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/conf.py +0 -0
  43. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/etl/examples.md +0 -0
  44. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/etl/pipelines.md +0 -0
  45. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/etl/testing.md +0 -0
  46. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/examples-repo/index.md +0 -0
  47. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/getting-started/etl.md +0 -0
  48. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/getting-started/rest.md +0 -0
  49. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/getting-started/streaming.md +0 -0
  50. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/guides/autocrud.md +0 -0
  51. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/guides/celery.md +0 -0
  52. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/guides/etl.md +0 -0
  53. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/guides/fake-repo-examples.md +0 -0
  54. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/guides/quickstart.md +0 -0
  55. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/guides/use-case-dsl.md +0 -0
  56. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/index.rst +0 -0
  57. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/overview.md +0 -0
  58. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/ai.rst +0 -0
  59. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/core.rst +0 -0
  60. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/etl.rst +0 -0
  61. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/repository.rst +0 -0
  62. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/rest.rst +0 -0
  63. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/streaming.rst +0 -0
  64. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/testing.rst +0 -0
  65. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/index.rst +0 -0
  66. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/requirements.txt +0 -0
  67. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/autocrud.md +0 -0
  68. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/celery.md +0 -0
  69. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/examples.md +0 -0
  70. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/identity.md +0 -0
  71. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/sql.md +0 -0
  72. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/testing.md +0 -0
  73. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/use-case-dsl.md +0 -0
  74. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/streaming/bytewax.md +0 -0
  75. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/streaming/delivery.md +0 -0
  76. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/streaming/tracing.md +0 -0
  77. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/scripts/release/checkout_merged_release.py +0 -0
  78. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/sonar-project.properties +0 -0
  79. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/__init__.py +0 -0
  80. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/__init__.py +0 -0
  81. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/_filters.py +0 -0
  82. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/_transport.py +0 -0
  83. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/_usecase.py +0 -0
  84. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/__init__.py +0 -0
  85. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/_binding.py +0 -0
  86. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/_handlers.py +0 -0
  87. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/_rpc.py +0 -0
  88. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/card.py +0 -0
  89. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/events.py +0 -0
  90. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/server.py +0 -0
  91. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/abc.py +0 -0
  92. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/__init__.py +0 -0
  93. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/_compiler.py +0 -0
  94. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/_plan.py +0 -0
  95. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/_symbols.py +0 -0
  96. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/phases/__init__.py +0 -0
  97. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/phases/_capabilities.py +0 -0
  98. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/phases/_hook.py +0 -0
  99. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/phases/_limits.py +0 -0
  100. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/phases/_model_role.py +0 -0
  101. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/phases/_output.py +0 -0
  102. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/declarative/__init__.py +0 -0
  103. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/declarative/_envelope.py +0 -0
  104. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/declarative/_schema.py +0 -0
  105. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/declarative/_v1.py +0 -0
  106. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
  107. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/describe.py +0 -0
  108. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/__init__.py +0 -0
  109. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
  110. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
  111. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_capabilities.py +0 -0
  112. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
  113. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
  114. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
  115. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
  116. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_models.py +0 -0
  117. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
  118. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
  119. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
  120. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
  121. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
  122. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/fastapi/__init__.py +0 -0
  123. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/fastapi/endpoints.py +0 -0
  124. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/fastapi/response.py +0 -0
  125. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/fastapi/streaming.py +0 -0
  126. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/inference.py +0 -0
  127. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/registry.py +0 -0
  128. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/runtime/__init__.py +0 -0
  129. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/runtime/_health.py +0 -0
  130. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/runtime/_hooks.py +0 -0
  131. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/runtime/_limits.py +0 -0
  132. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/runtime/_mcp.py +0 -0
  133. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/validate/__init__.py +0 -0
  134. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/validate/__main__.py +0 -0
  135. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/__init__.py +0 -0
  136. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/auto.py +0 -0
  137. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/bootstrap.py +0 -0
  138. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/config.py +0 -0
  139. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/constants.py +0 -0
  140. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/runner.py +0 -0
  141. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/service.py +0 -0
  142. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/async_bridge.py +0 -0
  143. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/backend/__init__.py +0 -0
  144. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/backend/core_model.py +0 -0
  145. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/backend/protocol.py +0 -0
  146. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/backend/sqlalchemy.py +0 -0
  147. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/bootstrap/__init__.py +0 -0
  148. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/bootstrap/bootstrap.py +0 -0
  149. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/bootstrap/kernel.py +0 -0
  150. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/__init__.py +0 -0
  151. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/abc/__init__.py +0 -0
  152. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/abc/backend.py +0 -0
  153. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/abc/config.py +0 -0
  154. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/abc/dependency.py +0 -0
  155. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/codec.py +0 -0
  156. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/decorators.py +0 -0
  157. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/dependency.py +0 -0
  158. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/gateway.py +0 -0
  159. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/keys.py +0 -0
  160. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/repository.py +0 -0
  161. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/serializer.py +0 -0
  162. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/command/__init__.py +0 -0
  163. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/command/adapter.py +0 -0
  164. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/command/base.py +0 -0
  165. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/command/field.py +0 -0
  166. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/command/introspection.py +0 -0
  167. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/compiler.py +0 -0
  168. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/__init__.py +0 -0
  169. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/_resolver_utils.py +0 -0
  170. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/binder.py +0 -0
  171. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/configurable.py +0 -0
  172. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/context.py +0 -0
  173. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/errors.py +0 -0
  174. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/keys.py +0 -0
  175. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/loader.py +0 -0
  176. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/model.py +0 -0
  177. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/observability.py +0 -0
  178. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/resolver.py +0 -0
  179. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/secrets.py +0 -0
  180. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/ssm.py +0 -0
  181. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/contracts/__init__.py +0 -0
  182. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/contracts/manifest.py +0 -0
  183. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/di/__init__.py +0 -0
  184. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/di/container.py +0 -0
  185. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/di/scope.py +0 -0
  186. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/discovery/__init__.py +0 -0
  187. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/discovery/_utils.py +0 -0
  188. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/discovery/base.py +0 -0
  189. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/discovery/interfaces.py +0 -0
  190. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/discovery/manifest.py +0 -0
  191. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/discovery/modules.py +0 -0
  192. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/__init__.py +0 -0
  193. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/compilable.py +0 -0
  194. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/compiler.py +0 -0
  195. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/events.py +0 -0
  196. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/executor.py +0 -0
  197. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/metrics.py +0 -0
  198. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/plan.py +0 -0
  199. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/errors/__init__.py +0 -0
  200. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/errors/codes.py +0 -0
  201. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/errors/errors.py +0 -0
  202. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/expr/__init__.py +0 -0
  203. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/expr/eval.py +0 -0
  204. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/expr/nodes.py +0 -0
  205. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/expr/refs.py +0 -0
  206. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/identity/__init__.py +0 -0
  207. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/identity/context.py +0 -0
  208. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/identity/identity.py +0 -0
  209. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/identity/issuer.py +0 -0
  210. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/identity/wire.py +0 -0
  211. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/introspection/__init__.py +0 -0
  212. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/introspection/base.py +0 -0
  213. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/introspection/describe.py +0 -0
  214. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/job/__init__.py +0 -0
  215. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/job/callback.py +0 -0
  216. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/job/context.py +0 -0
  217. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/job/handle.py +0 -0
  218. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/job/job.py +0 -0
  219. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/job/service.py +0 -0
  220. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/logger/__init__.py +0 -0
  221. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/logger/abc.py +0 -0
  222. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/logger/config.py +0 -0
  223. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/logger/registry.py +0 -0
  224. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/logger/structlogger.py +0 -0
  225. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/__init__.py +0 -0
  226. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/base.py +0 -0
  227. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/enums.py +0 -0
  228. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/field.py +0 -0
  229. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/introspection.py +0 -0
  230. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/projection.py +0 -0
  231. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/relation.py +0 -0
  232. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/struct.py +0 -0
  233. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/timestamped.py +0 -0
  234. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/types.py +0 -0
  235. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/types_postgres.py +0 -0
  236. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/__init__.py +0 -0
  237. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/config.py +0 -0
  238. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/event.py +0 -0
  239. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/observer/__init__.py +0 -0
  240. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/observer/noop.py +0 -0
  241. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/observer/otel.py +0 -0
  242. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/observer/structlog.py +0 -0
  243. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/otel_ids.py +0 -0
  244. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/protocol.py +0 -0
  245. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/runtime.py +0 -0
  246. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/span.py +0 -0
  247. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/topology.py +0 -0
  248. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/plugins/__init__.py +0 -0
  249. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/plugins/entrypoints.py +0 -0
  250. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/projection/__init__.py +0 -0
  251. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/projection/loaders.py +0 -0
  252. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/projection/runtime.py +0 -0
  253. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/__init__.py +0 -0
  254. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/abc/__init__.py +0 -0
  255. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/abc/query.py +0 -0
  256. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/abc/repo_for.py +0 -0
  257. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/abc/repository.py +0 -0
  258. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/dynamodb/__init__.py +0 -0
  259. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/dynamodb/registry.py +0 -0
  260. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/dynamodb/repository.py +0 -0
  261. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/dynamodb/uow.py +0 -0
  262. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/mutation.py +0 -0
  263. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/registration.py +0 -0
  264. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/registry.py +0 -0
  265. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
  266. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
  267. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
  268. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
  269. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/model.py +0 -0
  270. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
  271. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
  272. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
  273. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
  274. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
  275. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
  276. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
  277. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
  278. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
  279. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
  280. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
  281. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
  282. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
  283. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
  284. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
  285. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/response/__init__.py +0 -0
  286. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/response/base.py +0 -0
  287. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/routing/__init__.py +0 -0
  288. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/routing/ref.py +0 -0
  289. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/routing/resolver.py +0 -0
  290. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/runner.py +0 -0
  291. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/schema/__init__.py +0 -0
  292. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/schema/schema_mode.py +0 -0
  293. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/__init__.py +0 -0
  294. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/abc/__init__.py +0 -0
  295. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/abc/contracts.py +0 -0
  296. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/abc/errors.py +0 -0
  297. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/clickhouse/__init__.py +0 -0
  298. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/clickhouse/_client.py +0 -0
  299. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/clickhouse/executor.py +0 -0
  300. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/clickhouse/registry.py +0 -0
  301. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/config.py +0 -0
  302. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/roles.py +0 -0
  303. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/service.py +0 -0
  304. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/tracing/__init__.py +0 -0
  305. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/tracing/context.py +0 -0
  306. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/transport/__init__.py +0 -0
  307. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/transport/adapter.py +0 -0
  308. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/uow/__init__.py +0 -0
  309. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/uow/abc.py +0 -0
  310. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/uow/context.py +0 -0
  311. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/__init__.py +0 -0
  312. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/_predicates.py +0 -0
  313. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/compute.py +0 -0
  314. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/constants.py +0 -0
  315. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/factory.py +0 -0
  316. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/field_ref.py +0 -0
  317. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/invoker.py +0 -0
  318. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/keys.py +0 -0
  319. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/markers.py +0 -0
  320. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/registry.py +0 -0
  321. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/rule.py +0 -0
  322. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/use_case.py +0 -0
  323. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/__init__.py +0 -0
  324. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/__init__.py +0 -0
  325. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_format_registry.py +0 -0
  326. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_historify/__init__.py +0 -0
  327. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_historify/_common.py +0 -0
  328. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_historify/_log.py +0 -0
  329. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_historify/_ops.py +0 -0
  330. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
  331. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_historify/_transform.py +0 -0
  332. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_merge.py +0 -0
  333. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_path_template.py +0 -0
  334. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_predicate.py +0 -0
  335. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
  336. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
  337. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
  338. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_write_policy.py +0 -0
  339. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/__init__.py +0 -0
  340. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_dtype.py +0 -0
  341. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_file_writer.py +0 -0
  342. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_historify.py +0 -0
  343. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_predicate.py +0 -0
  344. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_reader.py +0 -0
  345. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_schema.py +0 -0
  346. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
  347. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_streaming.py +0 -0
  348. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_writer.py +0 -0
  349. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/provider.py +0 -0
  350. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/__init__.py +0 -0
  351. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/_dtype.py +0 -0
  352. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/_historify.py +0 -0
  353. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/_reader.py +0 -0
  354. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/_schema.py +0 -0
  355. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
  356. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/_writer.py +0 -0
  357. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/provider.py +0 -0
  358. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/__init__.py +0 -0
  359. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
  360. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
  361. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/_cleaners.py +0 -0
  362. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/_paths.py +0 -0
  363. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/_scope.py +0 -0
  364. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/_store.py +0 -0
  365. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/__init__.py +0 -0
  366. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_binding.py +0 -0
  367. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_compiler.py +0 -0
  368. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_errors.py +0 -0
  369. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_plan.py +0 -0
  370. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_validators.py +0 -0
  371. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_validators_plan.py +0 -0
  372. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_validators_step.py +0 -0
  373. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/__init__.py +0 -0
  374. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/_format.py +0 -0
  375. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/_read_options.py +0 -0
  376. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/_utils.py +0 -0
  377. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/_write_options.py +0 -0
  378. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/expr/__init__.py +0 -0
  379. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/expr/_params.py +0 -0
  380. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/expr/_predicate.py +0 -0
  381. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
  382. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/expr/_refs.py +0 -0
  383. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/source/__init__.py +0 -0
  384. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/source/_from.py +0 -0
  385. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
  386. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
  387. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
  388. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/source/_specs.py +0 -0
  389. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/__init__.py +0 -0
  390. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_client.py +0 -0
  391. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_file.py +0 -0
  392. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
  393. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
  394. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
  395. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
  396. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_history/_report.py +0 -0
  397. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
  398. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_into.py +0 -0
  399. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
  400. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_table.py +0 -0
  401. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_temp.py +0 -0
  402. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/executor/__init__.py +0 -0
  403. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/executor/_dispatcher.py +0 -0
  404. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/executor/_executor.py +0 -0
  405. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/__init__.py +0 -0
  406. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/_registry.py +0 -0
  407. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/__init__.py +0 -0
  408. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_clickhouse.py +0 -0
  409. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_dynamodb.py +0 -0
  410. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
  411. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
  412. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_mongo.py +0 -0
  413. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
  414. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
  415. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
  416. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_serialization.py +0 -0
  417. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/targets/__init__.py +0 -0
  418. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/targets/_clickhouse.py +0 -0
  419. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/__init__.py +0 -0
  420. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/_config.py +0 -0
  421. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/_observer.py +0 -0
  422. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/_records.py +0 -0
  423. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/sinks/__init__.py +0 -0
  424. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
  425. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/sinks/_table.py +0 -0
  426. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/sinks/_writer.py +0 -0
  427. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/__init__.py +0 -0
  428. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/_builder.py +0 -0
  429. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/_ops.py +0 -0
  430. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/_protocol.py +0 -0
  431. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/_runner.py +0 -0
  432. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/_step.py +0 -0
  433. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/backends/__init__.py +0 -0
  434. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
  435. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/__init__.py +0 -0
  436. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_generics.py +0 -0
  437. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_params.py +0 -0
  438. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_pipeline.py +0 -0
  439. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_process.py +0 -0
  440. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_sql.py +0 -0
  441. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_step.py +0 -0
  442. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_step_client.py +0 -0
  443. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_step_sql.py +0 -0
  444. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/__init__.py +0 -0
  445. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/_providers.py +0 -0
  446. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/_wiring.py +0 -0
  447. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/config_loader.py +0 -0
  448. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/core.py +0 -0
  449. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/errors.py +0 -0
  450. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/filtering.py +0 -0
  451. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runtime/__init__.py +0 -0
  452. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runtime/contracts.py +0 -0
  453. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/schema/__init__.py +0 -0
  454. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/schema/_contract.py +0 -0
  455. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/schema/_schema.py +0 -0
  456. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/storage/__init__.py +0 -0
  457. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/storage/_config.py +0 -0
  458. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/storage/_file_locator.py +0 -0
  459. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/storage/_locator.py +0 -0
  460. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/storage/routing.py +0 -0
  461. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/testing/__init__.py +0 -0
  462. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/testing/_result.py +0 -0
  463. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/testing/_runners.py +0 -0
  464. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/testing/_scenario.py +0 -0
  465. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/testing/_stubs.py +0 -0
  466. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/testing/spark.py +0 -0
  467. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/__init__.py +0 -0
  468. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/_async.py +0 -0
  469. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/_config.py +0 -0
  470. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/_ctx.py +0 -0
  471. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/_meta.py +0 -0
  472. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/_placeholders.py +0 -0
  473. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/_summary.py +0 -0
  474. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/deploy/__init__.py +0 -0
  475. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/deploy/_discovery.py +0 -0
  476. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/deploy/_schedule.py +0 -0
  477. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/deploy/_yaml.py +0 -0
  478. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/__init__.py +0 -0
  479. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_assemble.py +0 -0
  480. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_backfill.py +0 -0
  481. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_backfill_body.py +0 -0
  482. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_body.py +0 -0
  483. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_common.py +0 -0
  484. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_factory.py +0 -0
  485. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_hooks.py +0 -0
  486. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_maintenance.py +0 -0
  487. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_run_name.py +0 -0
  488. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_runtime.py +0 -0
  489. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_signature.py +0 -0
  490. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_stages.py +0 -0
  491. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/manifest/__init__.py +0 -0
  492. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/manifest/_model.py +0 -0
  493. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/manifest/_s3.py +0 -0
  494. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/manifest/_store.py +0 -0
  495. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/notify/__init__.py +0 -0
  496. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/notify/_event.py +0 -0
  497. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/notify/_factory.py +0 -0
  498. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/notify/_port.py +0 -0
  499. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/notify/_slack.py +0 -0
  500. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/observer/__init__.py +0 -0
  501. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/observer/_flow.py +0 -0
  502. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/observer/_logging_bridge.py +0 -0
  503. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/observer/_manifest.py +0 -0
  504. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/observer/_task_run.py +0 -0
  505. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prometheus/__init__.py +0 -0
  506. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prometheus/adapter.py +0 -0
  507. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prometheus/kafka.py +0 -0
  508. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prometheus/lifecycle.py +0 -0
  509. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prometheus/middleware.py +0 -0
  510. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/py.typed +0 -0
  511. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/__init__.py +0 -0
  512. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/_body.py +0 -0
  513. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/adapter.py +0 -0
  514. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/auth/__init__.py +0 -0
  515. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/auth/abc.py +0 -0
  516. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/auth/config.py +0 -0
  517. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/auth/jwt.py +0 -0
  518. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/auth/middleware.py +0 -0
  519. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/autocrud.py +0 -0
  520. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/compiler.py +0 -0
  521. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/constants.py +0 -0
  522. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/cors.py +0 -0
  523. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/errors.py +0 -0
  524. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/__init__.py +0 -0
  525. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/_errors.py +0 -0
  526. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/_exclusions.py +0 -0
  527. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/app.py +0 -0
  528. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/auto.py +0 -0
  529. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/openapi.py +0 -0
  530. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/response.py +0 -0
  531. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/router_runtime.py +0 -0
  532. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/sql.py +0 -0
  533. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/middleware.py +0 -0
  534. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/model.py +0 -0
  535. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/rest_adapter.py +0 -0
  536. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/__init__.py +0 -0
  537. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/__init__.py +0 -0
  538. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_adapter.py +0 -0
  539. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
  540. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
  541. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_dlq.py +0 -0
  542. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
  543. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_errors.py +0 -0
  544. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_operators.py +0 -0
  545. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
  546. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
  547. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
  548. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
  549. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
  550. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
  551. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
  552. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
  553. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
  554. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
  555. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
  556. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
  557. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/runner.py +0 -0
  558. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/__init__.py +0 -0
  559. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/_bindings.py +0 -0
  560. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/_compiler.py +0 -0
  561. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/_errors.py +0 -0
  562. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/_plan.py +0 -0
  563. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/phases/build_plan.py +0 -0
  564. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/phases/validate.py +0 -0
  565. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/core/__init__.py +0 -0
  566. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/core/_errors.py +0 -0
  567. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/core/_exceptions.py +0 -0
  568. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/core/_message.py +0 -0
  569. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/core/_tracing.py +0 -0
  570. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/core/_typing.py +0 -0
  571. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/graph/__init__.py +0 -0
  572. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/graph/_flow.py +0 -0
  573. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/__init__.py +0 -0
  574. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_codec.py +0 -0
  575. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_config.py +0 -0
  576. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_errors.py +0 -0
  577. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_key_resolver.py +0 -0
  578. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_message.py +0 -0
  579. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_record.py +0 -0
  580. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_wire.py +0 -0
  581. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/client/__init__.py +0 -0
  582. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/client/_consumer.py +0 -0
  583. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/client/_producer.py +0 -0
  584. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/client/_protocol.py +0 -0
  585. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/client/_retry.py +0 -0
  586. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/message/__init__.py +0 -0
  587. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/message/_consumer.py +0 -0
  588. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/message/_producer.py +0 -0
  589. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/message/_protocol.py +0 -0
  590. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/mongo/__init__.py +0 -0
  591. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
  592. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/mongo/_config.py +0 -0
  593. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/mongo/_event.py +0 -0
  594. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/mongo/_normalize.py +0 -0
  595. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/__init__.py +0 -0
  596. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_boundary.py +0 -0
  597. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_broadcast.py +0 -0
  598. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_capabilities.py +0 -0
  599. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_decompose.py +0 -0
  600. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_expand_routes.py +0 -0
  601. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_expr_eval.py +0 -0
  602. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_fork.py +0 -0
  603. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_helpers.py +0 -0
  604. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_mongo.py +0 -0
  605. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_protocols.py +0 -0
  606. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_router.py +0 -0
  607. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_shape.py +0 -0
  608. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_sink.py +0 -0
  609. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_step.py +0 -0
  610. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_table/__init__.py +0 -0
  611. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_table/common.py +0 -0
  612. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_table/config.py +0 -0
  613. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_with.py +0 -0
  614. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/refs.py +0 -0
  615. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/testing.py +0 -0
  616. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/__init__.py +0 -0
  617. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/agents.py +0 -0
  618. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/golden.py +0 -0
  619. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/http_harness.py +0 -0
  620. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/in_memory.py +0 -0
  621. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/repository_harness.py +0 -0
  622. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/runner.py +0 -0
  623. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/__init__.py +0 -0
  624. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/conftest.py +0 -0
  625. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/contract/__init__.py +0 -0
  626. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/contract/ai/__init__.py +0 -0
  627. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/contract/ai/test_contract_fake.py +0 -0
  628. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/contract/ai/test_contract_pydantic_ai.py +0 -0
  629. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/contract/observability/__init__.py +0 -0
  630. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/contract/observability/test_otel_sdk_contract.py +0 -0
  631. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/golden/__init__.py +0 -0
  632. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/golden/baselines/.gitkeep +0 -0
  633. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/golden/outputs/.gitkeep +0 -0
  634. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/golden/plans/.gitkeep +0 -0
  635. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/helpers/__init__.py +0 -0
  636. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/helpers/pydantic_ai_engine.py +0 -0
  637. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/helpers/spans.py +0 -0
  638. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/__init__.py +0 -0
  639. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/__init__.py +0 -0
  640. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/_agents_only_app.py +0 -0
  641. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_a2a.py +0 -0
  642. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_agent_specs_source.py +0 -0
  643. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_auto_a2a.py +0 -0
  644. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_auto_agents_only.py +0 -0
  645. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_auto_client_factories.py +0 -0
  646. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_auto_gate.py +0 -0
  647. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_auto_without_sqlalchemy.py +0 -0
  648. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_capabilities.py +0 -0
  649. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_describe.py +0 -0
  650. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_endpoints.py +0 -0
  651. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_grant_wiring.py +0 -0
  652. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_health_probe.py +0 -0
  653. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_hooks.py +0 -0
  654. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_limits.py +0 -0
  655. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_live_provider.py +0 -0
  656. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_mcp_end_to_end.py +0 -0
  657. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_provider_portability.py +0 -0
  658. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_runtime.py +0 -0
  659. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_streaming.py +0 -0
  660. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_transport.py +0 -0
  661. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/celery_bootstrap/__init__.py +0 -0
  662. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/celery_bootstrap/config/conf.celery.integration.yaml +0 -0
  663. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/celery_bootstrap/test_auto_create_app_integration.py +0 -0
  664. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/celery_bootstrap/test_bootstrap_worker.py +0 -0
  665. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/conftest.py +0 -0
  666. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/__init__.py +0 -0
  667. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/bootstrap/__init__.py +0 -0
  668. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/bootstrap/test_bootstrap_integration.py +0 -0
  669. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/repository/__init__.py +0 -0
  670. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/repository/sqlalchemy/__init__.py +0 -0
  671. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/repository/sqlalchemy/conftest.py +0 -0
  672. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/repository/sqlalchemy/test_cache_integration.py +0 -0
  673. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/repository/sqlalchemy/test_repository_integration.py +0 -0
  674. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/rest/__init__.py +0 -0
  675. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/rest/test_auto_interface_integration.py +0 -0
  676. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/rest/test_fastapi_app_integration.py +0 -0
  677. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/rest/test_rest_error_mapping.py +0 -0
  678. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/rest/test_rest_observability.py +0 -0
  679. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/use_case/__init__.py +0 -0
  680. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/use_case/test_custom_repository_integration.py +0 -0
  681. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/use_case/test_use_case_crud_integration.py +0 -0
  682. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/etl/__init__.py +0 -0
  683. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/etl/test_runner_integration.py +0 -0
  684. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/__init__.py +0 -0
  685. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/config/__init__.py +0 -0
  686. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/config/conf.interfaces.yaml +0 -0
  687. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/config/conf.manifest.yaml +0 -0
  688. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/config/conf.modules.yaml +0 -0
  689. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/config/conf.yaml +0 -0
  690. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/main.py +0 -0
  691. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/manifest.py +0 -0
  692. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/__init__.py +0 -0
  693. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/category/__init__.py +0 -0
  694. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/category/model.py +0 -0
  695. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/category/schemas.py +0 -0
  696. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/interface.py +0 -0
  697. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/jobs.py +0 -0
  698. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/model.py +0 -0
  699. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/relations.py +0 -0
  700. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/repository.py +0 -0
  701. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/repository_contract.py +0 -0
  702. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/review/__init__.py +0 -0
  703. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/review/model.py +0 -0
  704. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/review/schemas.py +0 -0
  705. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/schemas.py +0 -0
  706. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/use_cases.py +0 -0
  707. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/sql/__init__.py +0 -0
  708. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/sql/init/01_users_roles.sql +0 -0
  709. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/sql/test_clickhouse_integration.py +0 -0
  710. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/streaming/__init__.py +0 -0
  711. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/streaming/kafka/__init__.py +0 -0
  712. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/streaming/kafka/conftest.py +0 -0
  713. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/streaming/kafka/test_partitioned_source_integration.py +0 -0
  714. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/streaming/kafka/test_source_contract_integration.py +0 -0
  715. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/streaming/test_into_table_integration.py +0 -0
  716. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/support/__init__.py +0 -0
  717. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/support/logical_repo_fixtures.py +0 -0
  718. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/__init__.py +0 -0
  719. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/__init__.py +0 -0
  720. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/conftest.py +0 -0
  721. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/engines/__init__.py +0 -0
  722. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/engines/test_a2a_capability.py +0 -0
  723. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/engines/test_capability_span_nesting.py +0 -0
  724. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/engines/test_pydantic_ai_binding.py +0 -0
  725. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/engines/test_pydantic_ai_failures.py +0 -0
  726. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/engines/test_pydantic_ai_translation.py +0 -0
  727. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/README.md +0 -0
  728. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-a2a-agent/agent.yaml +0 -0
  729. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-mcp-agent/agent.yaml +0 -0
  730. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-python-agent/agent.yaml +0 -0
  731. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-skills-agent/agent.yaml +0 -0
  732. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-skills-agent/skills/release-notes/SKILL.md +0 -0
  733. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-sql-agent/agent.yaml +0 -0
  734. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-usecase-agent/agent.yaml +0 -0
  735. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/full-agent/agent.yaml +0 -0
  736. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/full-agent/skills/severity-rubric/SKILL.md +0 -0
  737. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/minimal-agent/agent.yaml +0 -0
  738. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/output-type-ref-agent/agent.yaml +0 -0
  739. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/__init__.py +0 -0
  740. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/__init__.py +0 -0
  741. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/incidents.py +0 -0
  742. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/invoices.py +0 -0
  743. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/triage.py +0 -0
  744. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/unsupported.py +0 -0
  745. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/__init__.py +0 -0
  746. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/broken.py +0 -0
  747. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/geo.py +0 -0
  748. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/metrics.py +0 -0
  749. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/skills_root/shared/group-changes/SKILL.md +0 -0
  750. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/skills_root/shared/tone-of-voice/SKILL.md +0 -0
  751. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/__init__.py +0 -0
  752. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/conftest.py +0 -0
  753. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_capabilities.py +0 -0
  754. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_hook.py +0 -0
  755. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_limits.py +0 -0
  756. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_model_role.py +0 -0
  757. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_output.py +0 -0
  758. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_remote_auth_plan.py +0 -0
  759. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_validate_cli.py +0 -0
  760. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/runtime/__init__.py +0 -0
  761. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/runtime/test_hook_command.py +0 -0
  762. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_a2a_base_url.py +0 -0
  763. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_a2a_card.py +0 -0
  764. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_compiler.py +0 -0
  765. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_compiler_offline.py +0 -0
  766. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_declarative_envelope.py +0 -0
  767. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_declarative_hook.py +0 -0
  768. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_describe.py +0 -0
  769. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_error_catalogue_totality.py +0 -0
  770. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_error_factories.py +0 -0
  771. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_fake_engine.py +0 -0
  772. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_loopback_plaintext.py +0 -0
  773. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_no_extras_import.py +0 -0
  774. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_public_surface.py +0 -0
  775. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_registry.py +0 -0
  776. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_remote_auth_settings.py +0 -0
  777. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_run_error_hook.py +0 -0
  778. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_schema_emission.py +0 -0
  779. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_secret_containment.py +0 -0
  780. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_spec_v1_corpus.py +0 -0
  781. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_usecase_helpers.py +0 -0
  782. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_bootstrap/__init__.py +0 -0
  783. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_bootstrap/test_async_runtime.py +0 -0
  784. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_bootstrap/test_bootstrap.py +0 -0
  785. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_jobs/__init__.py +0 -0
  786. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_jobs/test_auto.py +0 -0
  787. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_jobs/test_celery_service.py +0 -0
  788. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_jobs/test_config.py +0 -0
  789. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_jobs/test_identity_propagation.py +0 -0
  790. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_jobs/test_runner.py +0 -0
  791. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ci/test_workflow_supply_chain_contract.py +0 -0
  792. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/__init__.py +0 -0
  793. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/backend/__init__.py +0 -0
  794. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/backend/test_backend_compiler.py +0 -0
  795. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/bootstrap/__init__.py +0 -0
  796. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/bootstrap/test_bootstrap.py +0 -0
  797. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/bootstrap/test_bootstrap_metrics.py +0 -0
  798. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/bootstrap/test_kernel.py +0 -0
  799. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/cache/__init__.py +0 -0
  800. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/cache/test_cached_repository.py +0 -0
  801. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/cache/test_config_wiring.py +0 -0
  802. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/cache/test_gateway_config.py +0 -0
  803. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/command/__init__.py +0 -0
  804. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/command/test_command_base.py +0 -0
  805. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/command/test_command_field.py +0 -0
  806. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/command/test_command_patch.py +0 -0
  807. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/command/test_introspection.py +0 -0
  808. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/__init__.py +0 -0
  809. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_binder.py +0 -0
  810. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_config.py +0 -0
  811. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_configurable.py +0 -0
  812. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_context.py +0 -0
  813. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_resolver_utils.py +0 -0
  814. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_secrets.py +0 -0
  815. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_ssm.py +0 -0
  816. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/di/__init__.py +0 -0
  817. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/di/test_container.py +0 -0
  818. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/discovery/__init__.py +0 -0
  819. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/discovery/test_interfaces.py +0 -0
  820. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/discovery/test_manifest.py +0 -0
  821. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/discovery/test_modules.py +0 -0
  822. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/__init__.py +0 -0
  823. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_caller_binding.py +0 -0
  824. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_compiler.py +0 -0
  825. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_executor.py +0 -0
  826. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_executor_trace.py +0 -0
  827. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_executor_uow.py +0 -0
  828. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_metrics.py +0 -0
  829. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_plan.py +0 -0
  830. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/errors/__init__.py +0 -0
  831. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/errors/test_errors.py +0 -0
  832. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/expr/__init__.py +0 -0
  833. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/expr/test_expr.py +0 -0
  834. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/identity/__init__.py +0 -0
  835. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/identity/test_context.py +0 -0
  836. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/identity/test_identity.py +0 -0
  837. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/identity/test_wire.py +0 -0
  838. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/introspection/__init__.py +0 -0
  839. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/introspection/test_describe.py +0 -0
  840. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/__init__.py +0 -0
  841. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/conftest.py +0 -0
  842. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/test_callback.py +0 -0
  843. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/test_context.py +0 -0
  844. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/test_handle.py +0 -0
  845. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/test_inline_service.py +0 -0
  846. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/test_job.py +0 -0
  847. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/logger/__init__.py +0 -0
  848. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/logger/test_config.py +0 -0
  849. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/logger/test_registry.py +0 -0
  850. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/model/__init__.py +0 -0
  851. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/model/test_model.py +0 -0
  852. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/model/test_struct.py +0 -0
  853. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/model/test_timestamped.py +0 -0
  854. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/__init__.py +0 -0
  855. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_message_id_generator.py +0 -0
  856. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_observers.py +0 -0
  857. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_optional_otel_sdk.py +0 -0
  858. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_otel_loader_branches.py +0 -0
  859. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_provider_modes.py +0 -0
  860. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_runtime.py +0 -0
  861. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_tracing_characterisation.py +0 -0
  862. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/plugins/__init__.py +0 -0
  863. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/plugins/test_entrypoints.py +0 -0
  864. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/plugins/test_import_containment.py +0 -0
  865. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/projection/__init__.py +0 -0
  866. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/projection/test_runtime.py +0 -0
  867. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/__init__.py +0 -0
  868. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/abc/__init__.py +0 -0
  869. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/abc/conftest.py +0 -0
  870. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/abc/test_query.py +0 -0
  871. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/abc/test_repository_contract.py +0 -0
  872. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/dynamodb/__init__.py +0 -0
  873. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/dynamodb/conftest.py +0 -0
  874. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/dynamodb/test_registry.py +0 -0
  875. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/dynamodb/test_repository.py +0 -0
  876. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/sqlalchemy/__init__.py +0 -0
  877. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/sqlalchemy/conftest.py +0 -0
  878. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/sqlalchemy/test_loaders.py +0 -0
  879. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/sqlalchemy/test_repository.py +0 -0
  880. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/sqlalchemy/test_transactional.py +0 -0
  881. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/routing/__init__.py +0 -0
  882. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/routing/test_routing.py +0 -0
  883. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/__init__.py +0 -0
  884. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/_fakes.py +0 -0
  885. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/conftest.py +0 -0
  886. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_clickhouse_executor.py +0 -0
  887. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_clickhouse_transport.py +0 -0
  888. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_config.py +0 -0
  889. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_isolation.py +0 -0
  890. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_null_service.py +0 -0
  891. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_pagination_limits.py +0 -0
  892. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_registry_lifecycle.py +0 -0
  893. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_role_policy.py +0 -0
  894. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/test_async_bridge.py +0 -0
  895. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/test_compiler_contracts.py +0 -0
  896. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/test_runner_contracts.py +0 -0
  897. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/tracing/__init__.py +0 -0
  898. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/tracing/test_context.py +0 -0
  899. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/uow/__init__.py +0 -0
  900. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/uow/test_executor_uow.py +0 -0
  901. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/uow/test_sqlalchemy_uow.py +0 -0
  902. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/uow/test_uow_protocols.py +0 -0
  903. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/__init__.py +0 -0
  904. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_compute.py +0 -0
  905. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_factory.py +0 -0
  906. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_field_ref.py +0 -0
  907. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_invoker.py +0 -0
  908. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_markers.py +0 -0
  909. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_rule.py +0 -0
  910. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_use_case.py +0 -0
  911. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/__init__.py +0 -0
  912. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/__init__.py +0 -0
  913. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/_historify_contract.py +0 -0
  914. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_empty_write_warning.py +0 -0
  915. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_historify_common.py +0 -0
  916. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_path_template.py +0 -0
  917. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/__init__.py +0 -0
  918. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/conftest.py +0 -0
  919. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_apply_schema.py +0 -0
  920. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_backend.py +0 -0
  921. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_dtype.py +0 -0
  922. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_file_writer.py +0 -0
  923. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_historify_polars.py +0 -0
  924. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_predicate_pushdown.py +0 -0
  925. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_reader_columns.py +0 -0
  926. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_reader_json_columns.py +0 -0
  927. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_step_execution.py +0 -0
  928. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_streaming_write.py +0 -0
  929. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_update_writer.py +0 -0
  930. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_upsert_writer.py +0 -0
  931. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_writer_null_schema.py +0 -0
  932. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_writer_to_frame.py +0 -0
  933. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/__init__.py +0 -0
  934. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/conftest.py +0 -0
  935. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/test_dtype.py +0 -0
  936. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/test_historify_spark.py +0 -0
  937. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/test_spark_apply_schema.py +0 -0
  938. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/test_step_execution.py +0 -0
  939. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/test_writer_to_frame.py +0 -0
  940. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_write_policy_historify.py +0 -0
  941. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/checkpoint/__init__.py +0 -0
  942. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/checkpoint/backends/__init__.py +0 -0
  943. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/checkpoint/backends/test_checkpoint_polars.py +0 -0
  944. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/checkpoint/test_checkpoint_paths.py +0 -0
  945. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/checkpoint/test_cleaners.py +0 -0
  946. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/checkpoint/test_store.py +0 -0
  947. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/client_step/__init__.py +0 -0
  948. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/client_step/test_client_step.py +0 -0
  949. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/__init__.py +0 -0
  950. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_catalog_validator.py +0 -0
  951. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_compiler.py +0 -0
  952. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_compiler_catalog.py +0 -0
  953. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_compiler_upsert.py +0 -0
  954. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_errors.py +0 -0
  955. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_errors_additional_factories.py +0 -0
  956. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_errors_runtime_factories.py +0 -0
  957. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_file_template_validator.py +0 -0
  958. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_historify_validator.py +0 -0
  959. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_param_exprs_validator.py +0 -0
  960. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_plan_traversal.py +0 -0
  961. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_step_validator.py +0 -0
  962. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_structural.py +0 -0
  963. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_temp_validator.py +0 -0
  964. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_upsert_validator.py +0 -0
  965. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/conftest.py +0 -0
  966. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/__init__.py +0 -0
  967. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/__init__.py +0 -0
  968. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_clickhouse_reader.py +0 -0
  969. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_dynamodb_predicate.py +0 -0
  970. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_dynamodb_reader.py +0 -0
  971. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_from_clickhouse.py +0 -0
  972. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_from_dynamodb.py +0 -0
  973. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_from_mongo.py +0 -0
  974. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_mongo_predicate.py +0 -0
  975. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_mongo_reader.py +0 -0
  976. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_mongo_reader_memory.py +0 -0
  977. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/targets/__init__.py +0 -0
  978. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/targets/test_clickhouse_writer.py +0 -0
  979. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/targets/test_into_clickhouse.py +0 -0
  980. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_history_target.py +0 -0
  981. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_registry.py +0 -0
  982. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_source.py +0 -0
  983. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_source_json.py +0 -0
  984. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_source_options.py +0 -0
  985. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_target.py +0 -0
  986. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_utils.py +0 -0
  987. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_variants.py +0 -0
  988. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/lineage/test_observer.py +0 -0
  989. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/lineage/test_records.py +0 -0
  990. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/lineage/test_store.py +0 -0
  991. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/__init__.py +0 -0
  992. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/backends/__init__.py +0 -0
  993. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/backends/test_delta_rs.py +0 -0
  994. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/conftest.py +0 -0
  995. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/test_builder.py +0 -0
  996. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/test_runner.py +0 -0
  997. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/test_step.py +0 -0
  998. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/pipeline/__init__.py +0 -0
  999. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/pipeline/test_pipeline_process.py +0 -0
  1000. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/pipeline/test_proxy.py +0 -0
  1001. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/pipeline/test_step.py +0 -0
  1002. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/schema/__init__.py +0 -0
  1003. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/schema/test_contract.py +0 -0
  1004. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/schema/test_schema.py +0 -0
  1005. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/schema/test_table.py +0 -0
  1006. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/sql/__init__.py +0 -0
  1007. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/sql/test_merge.py +0 -0
  1008. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/sql/test_predicate.py +0 -0
  1009. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/sql/test_predicate_dialect.py +0 -0
  1010. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/sql/test_sql_runtime.py +0 -0
  1011. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/__init__.py +0 -0
  1012. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_backend_factory.py +0 -0
  1013. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_io_protocols.py +0 -0
  1014. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_locator.py +0 -0
  1015. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_observability_and_protocols.py +0 -0
  1016. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_route_build.py +0 -0
  1017. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_schema_readers.py +0 -0
  1018. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_storage_config.py +0 -0
  1019. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_config_loader.py +0 -0
  1020. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_executor.py +0 -0
  1021. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_executor_tracing.py +0 -0
  1022. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_format_registry.py +0 -0
  1023. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_module_contracts.py +0 -0
  1024. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_public_api_discovery.py +0 -0
  1025. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_record_schema_coverage.py +0 -0
  1026. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_runner.py +0 -0
  1027. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_runner_errors.py +0 -0
  1028. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_spark_testing.py +0 -0
  1029. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/testing/__init__.py +0 -0
  1030. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/testing/test_runners.py +0 -0
  1031. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/testing/test_scenario_and_stubs.py +0 -0
  1032. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/testing/test_spark_helpers.py +0 -0
  1033. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/__init__.py +0 -0
  1034. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_backfill_flow.py +0 -0
  1035. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_config.py +0 -0
  1036. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_ctx.py +0 -0
  1037. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_etl_flow.py +0 -0
  1038. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_logging_bridge.py +0 -0
  1039. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_maintenance_flow.py +0 -0
  1040. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_manifest.py +0 -0
  1041. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_manifest_s3.py +0 -0
  1042. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_notify.py +0 -0
  1043. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_observer.py +0 -0
  1044. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_placeholders.py +0 -0
  1045. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_task_run_observer.py +0 -0
  1046. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_yaml_loader.py +0 -0
  1047. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prometheus/__init__.py +0 -0
  1048. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prometheus/test_adapter.py +0 -0
  1049. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prometheus/test_middleware.py +0 -0
  1050. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/release/test_checkout_merged_release.py +0 -0
  1051. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/release/test_release_workflow_contract.py +0 -0
  1052. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/__init__.py +0 -0
  1053. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/_fixture_app.py +0 -0
  1054. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_app_hardening.py +0 -0
  1055. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_auth_middleware.py +0 -0
  1056. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_auth_rejection_logging.py +0 -0
  1057. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_autocrud.py +0 -0
  1058. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_cors.py +0 -0
  1059. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_fastapi_auto_logger.py +0 -0
  1060. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_fastapi_auto_persistence.py +0 -0
  1061. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_jwt_issuer.py +0 -0
  1062. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_jwt_middleware.py +0 -0
  1063. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_middleware.py +0 -0
  1064. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_pydantic_adapter.py +0 -0
  1065. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_request_hardening.py +0 -0
  1066. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_response.py +0 -0
  1067. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_rest_adapter.py +0 -0
  1068. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_rest_compiler.py +0 -0
  1069. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_rest_model.py +0 -0
  1070. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_route_rbac.py +0 -0
  1071. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_router_identity.py +0 -0
  1072. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_router_runtime.py +0 -0
  1073. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_sql_endpoint.py +0 -0
  1074. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_sql_endpoint_auth_gate.py +0 -0
  1075. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_sql_endpoint_roles.py +0 -0
  1076. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_sql_serialization.py +0 -0
  1077. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/__init__.py +0 -0
  1078. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/__init__.py +0 -0
  1079. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/cases.py +0 -0
  1080. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/conftest.py +0 -0
  1081. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_adapter.py +0 -0
  1082. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_batch_key.py +0 -0
  1083. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_bytewax_dispatcher.py +0 -0
  1084. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_collect_batch.py +0 -0
  1085. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_dlq.py +0 -0
  1086. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_error_boundary.py +0 -0
  1087. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_fanout_accounting.py +0 -0
  1088. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_operators.py +0 -0
  1089. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_resource_manager.py +0 -0
  1090. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_runner.py +0 -0
  1091. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_runtime_io.py +0 -0
  1092. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_runtime_sink.py +0 -0
  1093. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_runtime_source.py +0 -0
  1094. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_sink_registry.py +0 -0
  1095. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_steps.py +0 -0
  1096. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_storage.py +0 -0
  1097. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_storage_trace_characterisation.py +0 -0
  1098. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/__init__.py +0 -0
  1099. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/cases.py +0 -0
  1100. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_async_walk.py +0 -0
  1101. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_basics.py +0 -0
  1102. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_config_bindings.py +0 -0
  1103. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_delivery.py +0 -0
  1104. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_error_codes.py +0 -0
  1105. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_mongo_source.py +0 -0
  1106. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_multi_source.py +0 -0
  1107. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_router.py +0 -0
  1108. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_window.py +0 -0
  1109. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_with.py +0 -0
  1110. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/conftest.py +0 -0
  1111. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/__init__.py +0 -0
  1112. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/cases.py +0 -0
  1113. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/test_boundary.py +0 -0
  1114. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/test_message.py +0 -0
  1115. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/test_mongo_contracts.py +0 -0
  1116. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/test_multi_boundary.py +0 -0
  1117. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/test_steps.py +0 -0
  1118. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/__init__.py +0 -0
  1119. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/__init__.py +0 -0
  1120. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/batch.py +0 -0
  1121. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/explode.py +0 -0
  1122. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/fork.py +0 -0
  1123. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/router.py +0 -0
  1124. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/shared.py +0 -0
  1125. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/simple.py +0 -0
  1126. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/conftest.py +0 -0
  1127. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/test_compiler_examples.py +0 -0
  1128. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/test_flow_examples.py +0 -0
  1129. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/__init__.py +0 -0
  1130. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/cases.py +0 -0
  1131. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/conftest.py +0 -0
  1132. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/fakes.py +0 -0
  1133. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_client.py +0 -0
  1134. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_config.py +0 -0
  1135. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_coordinator_retry.py +0 -0
  1136. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_key_resolver.py +0 -0
  1137. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_message.py +0 -0
  1138. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_message_client.py +0 -0
  1139. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_multi_wire.py +0 -0
  1140. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_observability.py +0 -0
  1141. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_settings.py +0 -0
  1142. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_source_decode_parity.py +0 -0
  1143. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_wire.py +0 -0
  1144. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/mongo/test_bytewax_source.py +0 -0
  1145. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/nodes/__init__.py +0 -0
  1146. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/nodes/conftest.py +0 -0
  1147. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/nodes/test_broadcast.py +0 -0
  1148. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/nodes/test_delta_config.py +0 -0
  1149. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/nodes/test_logging.py +0 -0
  1150. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/nodes/test_table_package.py +0 -0
  1151. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/__init__.py +0 -0
  1152. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/cases.py +0 -0
  1153. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/conftest.py +0 -0
  1154. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_message_lifecycle_spans.py +0 -0
  1155. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_multiworker_trace_continuity.py +0 -0
  1156. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_observability_runner.py +0 -0
  1157. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_outbound_topic_terminal_spans.py +0 -0
  1158. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_protocols.py +0 -0
  1159. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_registry.py +0 -0
  1160. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_structlog.py +0 -0
  1161. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/support/__init__.py +0 -0
  1162. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/support/flow_cases.py +0 -0
  1163. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/test_expand_routes.py +0 -0
  1164. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/test_fork.py +0 -0
  1165. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/test_otel_observability.py +0 -0
  1166. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/test_routing.py +0 -0
  1167. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/test_testing_mongo.py +0 -0
  1168. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/test_with.py +0 -0
  1169. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/testing/__init__.py +0 -0
  1170. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/testing/test_golden.py +0 -0
  1171. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/testing/test_http_harness.py +0 -0
  1172. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/testing/test_identity_harness.py +0 -0
  1173. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/testing/test_in_memory.py +0 -0
  1174. {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/testing/test_runner.py +0 -0
@@ -3,6 +3,12 @@ name: ci-main
3
3
  on:
4
4
  push:
5
5
  branches: ["master"]
6
+ # The release helper merges the version bump through the API with
7
+ # GITHUB_TOKEN, and GitHub deliberately emits no `push` for it, so that commit
8
+ # would otherwise reach master without ever being validated. `workflow_dispatch`
9
+ # is the documented exception that does start a run from that token, so the
10
+ # release asks for this workflow by hand right after it merges.
11
+ workflow_dispatch:
6
12
 
7
13
  permissions:
8
14
  contents: read
@@ -119,8 +125,14 @@ jobs:
119
125
  env:
120
126
  SNYK_TOKEN: ${{ env.SNYK_TOKEN }}
121
127
 
128
+ # Non-blocking, exactly as the same scan is on a pull request: a scanner
129
+ # that is unreachable or refusing an expired token says nothing about this
130
+ # code, and master turning red for it hides the failures that do mean
131
+ # something. The outcome is reported loudly in the step below instead.
122
132
  - name: Snyk monitor by dependency scope (core/dev/extras)
133
+ id: snyk
123
134
  if: ${{ env.SNYK_TOKEN != '' }}
135
+ continue-on-error: true
124
136
  shell: bash
125
137
  env:
126
138
  SNYK_TOKEN: ${{ env.SNYK_TOKEN }}
@@ -169,6 +181,29 @@ jobs:
169
181
  --target-reference="${GITHUB_REF_NAME:-master}"
170
182
  done
171
183
 
184
+ - name: Report the Snyk outcome
185
+ if: ${{ always() && env.SNYK_TOKEN != '' }}
186
+ env:
187
+ OUTCOME: ${{ steps.snyk.outcome }}
188
+ shell: bash
189
+ run: |
190
+ set -euo pipefail
191
+ {
192
+ echo "## Snyk dependency scan: \`${OUTCOME}\`"
193
+ } >> "$GITHUB_STEP_SUMMARY"
194
+ if [ "${OUTCOME}" != "success" ]; then
195
+ {
196
+ echo
197
+ echo "The scan did not complete, so **no dependency was cleared and none was"
198
+ echo "reported vulnerable**. This does NOT block the build: a scanner that is"
199
+ echo "unreachable, rate-limited or refusing an expired \`SNYK_TOKEN\` says"
200
+ echo "nothing about this code. Read the step log: an \`Authentication error"
201
+ echo "(SNYK-0005)\` with \`401 Unauthorized\` means the token needs renewing"
202
+ echo "in Snyk and updating in the repository secrets."
203
+ } >> "$GITHUB_STEP_SUMMARY"
204
+ echo "::warning title=Snyk scan did not complete::No dependency was scanned. This does NOT block the build. A 401 with SNYK-0005 means the SNYK_TOKEN is expired or unprovisioned; renew it in Snyk and update the repository secret."
205
+ fi
206
+
172
207
  # ---------------------------------------------------------------------------
173
208
  # Churn canary (plan.md risk table): run the agent suites against the LATEST
174
209
  # published pydantic-ai instead of the locked one.
@@ -10,7 +10,17 @@ permissions:
10
10
  security-events: write
11
11
 
12
12
  jobs:
13
+ # A release PR carries a version bump and nothing else, and it is the only way
14
+ # CHANGELOG.md, pyproject.toml and uv.lock reach master. Validating it is not
15
+ # possible and not useful: the branch and the PR are pushed with GITHUB_TOKEN,
16
+ # so any run queued against them sits waiting for manual approval and expires
17
+ # unapproved — a red check nobody can turn green. Worse, the release helper
18
+ # merges only when every check that reported has passed, so an expired run that
19
+ # concludes before the helper polls blocks the release outright. Skipping is
20
+ # what the helper already documents as the normal state. The code the bump
21
+ # describes was validated in the pull requests that composed it.
13
22
  validate:
23
+ if: ${{ !startsWith(github.head_ref, 'docs/release-') }}
14
24
  runs-on: ubuntu-latest
15
25
  env:
16
26
  SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
@@ -229,6 +239,29 @@ jobs:
229
239
  --project-name="loom-py/extra-${extra}"
230
240
  done
231
241
 
242
+ - name: Report the Snyk outcome
243
+ if: ${{ always() && env.SNYK_TOKEN != '' }}
244
+ env:
245
+ OUTCOME: ${{ steps.snyk.outcome }}
246
+ shell: bash
247
+ run: |
248
+ set -euo pipefail
249
+ {
250
+ echo "## Snyk dependency scan: \`${OUTCOME}\`"
251
+ } >> "$GITHUB_STEP_SUMMARY"
252
+ if [ "${OUTCOME}" != "success" ]; then
253
+ {
254
+ echo
255
+ echo "The scan did not complete, so **no dependency was cleared and none was"
256
+ echo "reported vulnerable**. This does NOT block the build: a scanner that is"
257
+ echo "unreachable, rate-limited or refusing an expired \`SNYK_TOKEN\` says"
258
+ echo "nothing about this code. Read the step log: an \`Authentication error"
259
+ echo "(SNYK-0005)\` with \`401 Unauthorized\` means the token needs renewing"
260
+ echo "in Snyk and updating in the repository secrets."
261
+ } >> "$GITHUB_STEP_SUMMARY"
262
+ echo "::warning title=Snyk scan did not complete::No dependency was scanned. This does NOT block the build. A 401 with SNYK-0005 means the SNYK_TOKEN is expired or unprovisioned; renew it in Snyk and update the repository secret."
263
+ fi
264
+
232
265
  - name: Publish prerelease package to TestPyPI
233
266
  if: ${{ github.event.pull_request.head.repo.full_name == github.repository && env.TEST_PYPI_API_TOKEN != '' && steps.version.outputs.deploy == 'true' }}
234
267
  env:
@@ -290,6 +323,7 @@ jobs:
290
323
  #
291
324
  # No `--frozen` and no `uv.lock` here — resolving fresh is the entire point.
292
325
  pydantic-ai-canary:
326
+ if: ${{ !startsWith(github.head_ref, 'docs/release-') }}
293
327
  runs-on: ubuntu-latest
294
328
  continue-on-error: true
295
329
  steps:
@@ -402,6 +436,7 @@ jobs:
402
436
  # is not evidence that Apache Kafka agrees.
403
437
  # ---------------------------------------------------------------------------
404
438
  integration:
439
+ if: ${{ !startsWith(github.head_ref, 'docs/release-') }}
405
440
  runs-on: ubuntu-latest
406
441
  steps:
407
442
  - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
@@ -26,7 +26,17 @@ concurrency:
26
26
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}
27
27
 
28
28
  jobs:
29
+ # A release PR carries a version bump and nothing else, and it is the only way
30
+ # CHANGELOG.md, pyproject.toml and uv.lock reach master. Validating it is not
31
+ # possible and not useful: the branch and the PR are pushed with GITHUB_TOKEN,
32
+ # so any run queued against them sits waiting for manual approval and expires
33
+ # unapproved — a red check nobody can turn green. Worse, the release helper
34
+ # merges only when every check that reported has passed, so an expired run that
35
+ # concludes before the helper polls blocks the release outright. Skipping is
36
+ # what the helper already documents as the normal state. The code the bump
37
+ # describes was validated in the pull requests that composed it.
29
38
  build:
39
+ if: ${{ !startsWith(github.head_ref, 'docs/release-') }}
30
40
  runs-on: ubuntu-latest
31
41
  # contents: read is scoped here — build does not need pages or id-token.
32
42
  permissions:
@@ -22,6 +22,8 @@ jobs:
22
22
  permissions:
23
23
  contents: write
24
24
  pull-requests: write
25
+ # Dispatching ci-main for the merged version bump; see that step.
26
+ actions: write
25
27
  outputs:
26
28
  deploy: ${{ steps.version.outputs.deploy }}
27
29
  version: ${{ steps.version.outputs.version }}
@@ -228,6 +230,23 @@ jobs:
228
230
  --timeout-seconds "${MERGE_TIMEOUT_SECONDS}")
229
231
  echo "release_sha=${RELEASE_SHA}" >> "$GITHUB_OUTPUT"
230
232
 
233
+ # The bump is on master now, and no `push` event announced it: GitHub
234
+ # emits none for a merge performed with GITHUB_TOKEN. Ask for the run
235
+ # explicitly, so CHANGELOG.md, pyproject.toml and uv.lock are validated on
236
+ # master like every other commit. Never fatal: this asks for a check, it is
237
+ # not one, and a release must not fail because a follow-up run could not be
238
+ # queued. It dispatches on `master`, so what it validates is master's tip,
239
+ # which is what ci-main validates on any other day.
240
+ - name: Validate the merged version bump on master
241
+ if: ${{ steps.version.outputs.deploy == 'true' }}
242
+ continue-on-error: true
243
+ env:
244
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
245
+ shell: bash
246
+ run: |
247
+ set -euo pipefail
248
+ gh workflow run ci-main.yml --repo "${GITHUB_REPOSITORY}" --ref master
249
+
231
250
  - name: Store release notes
232
251
  if: ${{ steps.version.outputs.deploy == 'true' }}
233
252
  uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
@@ -1,3 +1,29 @@
1
+ # 🚀 Release 1.9.3 ([#159](https://github.com/the-reacher-data/loom-py/pull/159)) ([`eedd32c`](https://github.com/the-reacher-data/loom-py/commit/eedd32ca67be84302292aab968b5fe6dd7eb3621))
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+ # 🚀 Release 1.9.2 ([#157](https://github.com/the-reacher-data/loom-py/pull/157)) ([`3b32161`](https://github.com/the-reacher-data/loom-py/commit/3b32161dfcfe12fe25fe05ff7ccb4d6a71a6b64a))
13
+
14
+
15
+
16
+ ## 🐛 Fixes
17
+ ### ai
18
+ - **ai:** make outbound auth work for MCP and let a grant boot offline
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
1
27
  # 🚀 Release 1.9.1 ([#155](https://github.com/the-reacher-data/loom-py/pull/155)) ([`587affc`](https://github.com/the-reacher-data/loom-py/commit/587affcfbf46301ccd3e02a5edeb34e63b460628))
2
28
 
3
29
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: loom-kernel
3
- Version: 1.9.1
3
+ Version: 1.9.3
4
4
  Summary: Loom Python project
5
5
  License-File: LICENSE
6
6
  Classifier: Typing :: Typed
@@ -88,11 +88,16 @@ session. An agent that authenticates its card endpoint would otherwise fail
88
88
  start-up before a skill was ever called.
89
89
 
90
90
  `kind` names an entry point in the group `loom.ai.remote_auth`, the same group
91
- MCP servers resolve against: the strategy contract is
92
- [`httpx.Auth`](https://www.python-httpx.org/advanced/authentication/), which
93
- knows nothing of either protocol, so a deployment registers its strategy once
94
- and grants it to either transport. The one strategy an A2A agent cannot use is
95
- `kind: oauth`, which delegates to the MCP client library's own flow; naming it
91
+ MCP servers resolve against: the strategy contract is the HTTP client's own
92
+ [`Auth`](https://www.python-httpx.org/advanced/authentication/), which knows
93
+ nothing of either protocol, so a deployment registers its strategy once and
94
+ grants it to either transport. The A2A client is loom's own, built with `httpx`,
95
+ while an MCP server is reached through a client using `httpx2` — a strategy
96
+ registered as a class is refused by the other flavour, and a strategy returning
97
+ a plain callable serves both: see
98
+ [mcp.md § Two HTTP libraries, one callable](mcp.md#two-http-libraries-one-callable).
99
+
100
+ The one strategy an A2A agent cannot use is `kind: oauth`, which delegates to the MCP client library's own flow; naming it
96
101
  here is refused with `MCP_AUTH_STRATEGY_INVALID` rather than connecting without
97
102
  the credential the deployment asked for.
98
103
 
@@ -106,6 +106,58 @@ rejected fail-closed.
106
106
  Tool filters are matched against the tools the server really advertises, not
107
107
  against what the artifact hoped for.
108
108
 
109
+ ### Booting without the network: `ai.remote_clients`
110
+
111
+ Granting `kind: mcp` makes every server the grant names a start-up dependency.
112
+ That is right in production and awkward everywhere else — a laptop, a CI job, an
113
+ environment brought up before its side-cars. `ai.remote_clients` says how a
114
+ client that will not open is treated:
115
+
116
+ ```yaml
117
+ ai:
118
+ remote_clients: optional # required (default) | optional
119
+ ```
120
+
121
+ | Value | A client that fails to *connect* |
122
+ |---|---|
123
+ | `required` (default) | Aborts start-up, by name, with `MCP_SERVER_UNREACHABLE` — or `A2A_AGENT_UNREACHABLE` for a remote agent. |
124
+ | `optional` | Logged at WARNING and dropped; the runtime starts without it. |
125
+
126
+ The switch is process-wide and covers the remote agents of `ai.a2a_agents` as
127
+ well as the servers of `ai.mcp_servers`. An unknown value fails configuration
128
+ load with `REMOTE_CLIENTS_UNKNOWN`, naming the key and both accepted values.
129
+
130
+ Under `optional`, the WARNING carries the error code and the registered name
131
+ only: the transport's own reason is an arbitrary library's exception text and
132
+ can name a URL, so it goes to DEBUG, where an operator asks for it deliberately,
133
+ rather than into routine logs on every boot. The health probe reports the
134
+ dependency `unavailable` once its first pass has run.
135
+
136
+ `optional` tolerates a network that is not there. It tolerates nothing else, and
137
+ three carve-outs are deliberate:
138
+
139
+ **A missing client factory is still fatal.** A plan declaring an `mcp` grant in a
140
+ deployment that wired no MCP client factory is a wiring bug, not an offline
141
+ network. It is collected apart, where the factory is found missing, never told
142
+ from a connection failure by reading its message, and aborts start-up under
143
+ **both** values.
144
+
145
+ **Tool-filter verification still fails closed for a server that did open.** The
146
+ waiver covers only servers that never connected: a server with no session is
147
+ skipped, and a filter on it does not fail start-up. A server that opened has its
148
+ declared filters verified as usual, and a listing that times out still aborts
149
+ start-up under `optional`. Because a tolerated connection failure has already
150
+ spent the shared start-up budget, the verification pass is given a fresh
151
+ `startup_timeout_ms` rather than the exhausted one — otherwise one hanging
152
+ server would fail the filters of every server that answered.
153
+
154
+ **Nothing becomes lazy.** A start-up client that never opened is not reconnected
155
+ later; the clients are session-affine and closing one from a foreign task is
156
+ refused, so reconnecting them needs a supervisor task that does not exist yet.
157
+ This says nothing about the run path, which builds its own toolset and connects
158
+ on its own: under `optional`, a run against a server that never opened at
159
+ start-up connects then and there, and succeeds if the network came back.
160
+
109
161
  ## Authentication
110
162
 
111
163
  The MCP specification standardises OAuth 2.0 for HTTP transports, so an
@@ -187,12 +239,62 @@ loom writes the header.
187
239
  set credentials on one connection is ambiguous, and compilation refuses it with
188
240
  `MCP_AUTH_CONFLICT`.
189
241
 
242
+ ### Two HTTP libraries, one callable
243
+
244
+ A strategy is handed to an HTTP client, and the two outbound transports do not
245
+ use the same one.
246
+
247
+ An `mcp` grant becomes a pydantic-ai `MCPToolset`, which connects through one of
248
+ fastmcp's HTTP transports — `StreamableHttpTransport`, or `SSETransport` when the
249
+ URL ends in `/sse`. Those transports special-case OAuth and pass any other auth
250
+ object straight through to their client, and their client is **`httpx2`**. An
251
+ `a2a` grant goes to a client loom builds itself, with **`httpx`**.
252
+
253
+ Each library accepts an auth object only when it is an instance of *its own*
254
+ `Auth` class, a two-tuple, or a callable. So an `httpx.Auth` subclass is refused
255
+ by the MCP transport's client, and an `httpx2.Auth` subclass by the A2A one.
256
+ **Loom adapts neither**, and publishes no recipe for a class that satisfies both
257
+ at once: nothing in its test suite would keep such a recipe honest.
258
+
259
+ | Grant | Client library | A class must subclass |
260
+ |---|---|---|
261
+ | `kind: mcp` | `httpx2`, reached through fastmcp's transport | `httpx2.Auth` |
262
+ | `kind: a2a` | `httpx`, in the client loom builds | `httpx.Auth` |
263
+
264
+ **A plain callable is the supported answer for both.** Each library wraps a
265
+ callable in a `FunctionAuth` of its own, so one function serves either transport
266
+ — and whatever flavour either library moves to next. It takes the outgoing
267
+ request, sets its headers, and **returns** it:
268
+
269
+ ```python
270
+ def incident_api_key(*, key_ref: str):
271
+ """Register this as a strategy: it returns the callable both clients wrap."""
272
+
273
+ def add_key(request):
274
+ request.headers["X-API-Key"] = key_ref
275
+ return request
276
+
277
+ return add_key
278
+ ```
279
+
280
+ Returning the request is not optional: the wrapper's flow is
281
+ `yield self._func(request)`, so a callable returning `None` sends `None`.
282
+ Nothing in the inner signature names a library, which is exactly the point — the
283
+ request it receives is of whichever flavour drove it. The two strategies loom
284
+ ships, `bearer` and `static`, are this shape.
285
+
286
+ A callable is a single-shot flow: it never sees the response, so it cannot
287
+ inspect a `401` or renew. A strategy that needs the response is a class.
288
+
190
289
  ### Writing your own
191
290
 
192
- The contract is [`httpx.Auth`](https://www.python-httpx.org/advanced/authentication/)
193
- itself, not an abstraction of loom's — nobody has to learn one of ours, and any
194
- existing `httpx.Auth` in the ecosystem works with no adapter. Register the class
195
- from **your own package**; loom does not change:
291
+ The contract is the HTTP client's own
292
+ [`Auth`](https://www.python-httpx.org/advanced/authentication/), not an
293
+ abstraction of loom's — nobody has to learn one of ours, and an existing `Auth`
294
+ class works with no adapter, provided it is the flavour of the transport that
295
+ will use it (above). This example authenticates an MCP server, so it subclasses
296
+ `httpx2.Auth`; the identical class written for an A2A agent subclasses
297
+ `httpx.Auth`. Register it from **your own package**; loom does not change:
196
298
 
197
299
  ```toml
198
300
  # pyproject.toml of your own distribution
@@ -204,10 +306,10 @@ A worked example — a server exposing a session endpoint, where the agent
204
306
  presents a long-lived bootstrap secret and receives short-lived tokens:
205
307
 
206
308
  ```python
207
- import httpx
309
+ import httpx2 # the flavour the MCP transport's client uses
208
310
 
209
311
 
210
- class AgentSessionAuth(httpx.Auth):
312
+ class AgentSessionAuth(httpx2.Auth):
211
313
  """Exchange a bootstrap secret for a token, renewed when rejected."""
212
314
 
213
315
  def __init__(self, *, session_url: str, bootstrap_ref: str) -> None:
@@ -226,14 +328,22 @@ class AgentSessionAuth(httpx.Auth):
226
328
  yield request
227
329
 
228
330
  def _mint(self):
229
- response = yield httpx.Request(
331
+ response = yield httpx2.Request(
230
332
  "POST", self._url, json={"secret_path": self._ref}
231
333
  )
232
334
  return response.json()["access_token"]
233
335
  ```
234
336
 
235
- Retry-with-a-refreshed-credential is httpx's standard generator shape; loom does
236
- not reimplement it.
337
+ Retry-with-a-refreshed-credential is the library's standard generator shape;
338
+ loom does not reimplement it.
339
+
340
+ ```{warning}
341
+ `requires_response_body` is honoured by `Auth`'s **own** base flow, not by the
342
+ client. A strategy that overrides `async_auth_flow` — which any asynchronous
343
+ token exchange must — replaces the very code that reads the flag, and has to
344
+ `await response.aread()` itself before touching the body. Setting the attribute
345
+ and overriding the flow leaves the body unread, silently.
346
+ ```
237
347
 
238
348
  If you are designing such an endpoint: this is OAuth 2.0 `client_credentials`
239
349
  by another name — `secret_path` is the client id and the bootstrap secret is the
@@ -256,11 +366,12 @@ server's read permissions to that prefix and log failed attempts per path.
256
366
 
257
367
  The group is `loom.ai.remote_auth`, not `loom.ai.mcp_auth`: one registry serves
258
368
  the MCP servers of `ai.mcp_servers` **and** the remote agents of `ai.a2a_agents`
259
- (see [a2a.md](a2a.md)), because the contract is `httpx.Auth` and knows neither
260
- protocol. A strategy is registered once and granted to either. The one
261
- exception is `kind: oauth`, which delegates to the MCP client library's own
262
- flow: an A2A agent naming it is refused with `MCP_AUTH_STRATEGY_INVALID` rather
263
- than connected without a credential.
369
+ (see [a2a.md](a2a.md)), because the contract is the HTTP client's and knows
370
+ neither protocol. A strategy returning a callable is registered once and granted
371
+ to either; one registered as a class is granted to the transports of its own
372
+ flavour. The one exception is `kind: oauth`, which delegates to the MCP client
373
+ library's own flow: an A2A agent naming it is refused with
374
+ `MCP_AUTH_STRATEGY_INVALID` rather than connected without a credential.
264
375
 
265
376
  ### One instance per server
266
377
 
@@ -270,6 +381,22 @@ renewing strategy holds the live token, so sharing means one renewal instead of
270
381
  one per agent, and no burst of simultaneous logins when several agents start
271
382
  together.
272
383
 
384
+ What is shared is what the strategy returned. A class instance is shared as
385
+ itself, so a strategy that must renew once, for everybody, stays a class and
386
+ keeps that identity. A callable is shared as itself too, but each client wraps
387
+ it in a `FunctionAuth` of its own, so two clients built from one credential no
388
+ longer hold the same `client.auth` object — they hold two wrappers around one
389
+ function. For a fixed header that is a distinction without a difference, and it
390
+ is the reason a stateful strategy is a class.
391
+
392
+ ```{admonition} Public contract
393
+ :class: note
394
+ `shared_mcp_auth` and `shared_a2a_auth` are exported, and their return type has
395
+ widened from `httpx.Auth | str` to what a client accepts, which now includes a
396
+ callable. Code doing `isinstance(value, httpx.Auth)` on the result stops
397
+ matching for the built-in `bearer` and `static` strategies.
398
+ ```
399
+
273
400
  ## The rule: your own tools are a `usecase` grant
274
401
 
275
402
  Here is the decision that actually comes up, and the one this page exists for.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "loom-kernel"
3
- version = "1.9.1"
3
+ version = "1.9.3"
4
4
  description = "Loom Python project"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -362,7 +362,7 @@ markers = [
362
362
 
363
363
  [tool.commitizen]
364
364
  name = "cz_conventional_commits"
365
- version = "1.9.1"
365
+ version = "1.9.3"
366
366
  tag_format = "v$version"
367
367
  version_files = [
368
368
  "pyproject.toml:project.version",
@@ -33,6 +33,7 @@ from loom.ai.errors import (
33
33
  mcp_url_invalid,
34
34
  output_mode_unknown,
35
35
  policy_out_of_range,
36
+ remote_clients_unknown,
36
37
  )
37
38
  from loom.ai.inference import OUTPUT_MODES, InferenceTarget
38
39
  from loom.ai.remote_auth import is_strategy_registered, registered_strategy_names
@@ -55,6 +56,11 @@ _URL_USERINFO_RE = re.compile(r"://[^/]*@")
55
56
  # key is that strategy's own setting.
56
57
  _AUTH_KIND_KEY = "kind"
57
58
 
59
+ # Accepted values of ``ai.remote_clients``: whether a remote client that will
60
+ # not open aborts start-up (``required``) or is dropped with a warning
61
+ # (``optional``).
62
+ _REMOTE_CLIENTS_MODES: tuple[str, ...] = ("required", "optional")
63
+
58
64
  # Bounds of a single remote call, mirroring ``policies.tool_timeout_ms``.
59
65
  _TIMEOUT_MS_MIN = 1
60
66
  _TIMEOUT_MS_MAX = 600000
@@ -299,6 +305,15 @@ class AiConfig(LoomFrozenStruct, frozen=True, kw_only=True):
299
305
  startup_timeout_ms: Total budget of start-up: opening every live
300
306
  client concurrently and validating the declared tool filters
301
307
  share one deadline, whatever the number of servers.
308
+ remote_clients: Start-up tolerance for the MCP servers and A2A agents
309
+ the deployment connects to, ``required`` (the default) or
310
+ ``optional``. Under ``optional`` a client that fails to *connect*
311
+ is logged and dropped instead of aborting start-up, so an
312
+ application can boot with no network. It tolerates nothing else:
313
+ a missing client factory is a wiring bug and stays fatal, a server
314
+ that did open and whose tool listing times out still fails
315
+ start-up, and no client becomes lazy — one that never opened is
316
+ not reconnected later.
302
317
  max_concurrent_runs: Per-worker run limit (FR-033a).
303
318
  max_prompt_bytes: Enforced while reading the request body.
304
319
  health_cache_ttl_ms: Refresh period of the health probe.
@@ -307,8 +322,8 @@ class AiConfig(LoomFrozenStruct, frozen=True, kw_only=True):
307
322
  AgentCompilationError: Aggregating one issue per invalid model binding
308
323
  (incomplete provider settings, literal secret in
309
324
  ``credentials_ref``), per unsafe remote server or agent (bad URL,
310
- inline credentials, out-of-range timeout) and per endpoint without
311
- a named ``auth``.
325
+ inline credentials, out-of-range timeout), per endpoint without
326
+ a named ``auth``, and for an unknown ``remote_clients`` mode.
312
327
  """
313
328
 
314
329
  engine: str
@@ -320,6 +335,7 @@ class AiConfig(LoomFrozenStruct, frozen=True, kw_only=True):
320
335
  a2a: A2AConfig | None = None
321
336
  endpoints: dict[str, AgentEndpointConfig] = field(default_factory=dict)
322
337
  startup_timeout_ms: int = 10000
338
+ remote_clients: str = "required"
323
339
  max_concurrent_runs: int = 8
324
340
  max_prompt_bytes: int = 65536
325
341
  health_cache_ttl_ms: int = 5000
@@ -333,6 +349,8 @@ class AiConfig(LoomFrozenStruct, frozen=True, kw_only=True):
333
349
  for name, endpoint in self.endpoints.items():
334
350
  if not endpoint.auth.strip():
335
351
  issues.append(endpoint_auth_missing(name))
352
+ if self.remote_clients not in _REMOTE_CLIENTS_MODES:
353
+ issues.append(remote_clients_unknown(self.remote_clients, _REMOTE_CLIENTS_MODES))
336
354
  if issues:
337
355
  raise AgentCompilationError(issues)
338
356
 
@@ -26,7 +26,7 @@ from __future__ import annotations
26
26
 
27
27
  from collections.abc import AsyncIterator, Mapping
28
28
  from contextlib import asynccontextmanager
29
- from typing import TYPE_CHECKING, Any
29
+ from typing import TYPE_CHECKING, Any, cast
30
30
 
31
31
  from loom.ai.compiler import CompiledMcpCapability
32
32
  from loom.ai.errors import AgentCompilationError, provider_not_installed
@@ -101,7 +101,12 @@ def build_mcp_toolset(capability: CompiledMcpCapability) -> MCPToolset[Any]:
101
101
  component = f"mcp server '{capability.server}'"
102
102
  headers = headers_from_ref(component, capability.headers_ref) or None
103
103
  auth = shared_mcp_auth(capability.server, capability.auth)
104
- toolset: MCPToolset[Any] = MCPToolset(capability.url, headers=headers, auth=auth)
104
+ # ``MCPToolset`` annotates auth as ``httpx.Auth | Literal['oauth'] | str | None``,
105
+ # which admits no callable, while what really consumes it is fastmcp's HTTP
106
+ # transport: its ``_set_auth`` special-cases only ``"oauth"``, ``OAuth``, the
107
+ # OAuth providers and ``str``, and hands anything else to its ``httpx2`` client
108
+ # untouched — including the callable loom's own strategies return.
109
+ toolset: MCPToolset[Any] = MCPToolset(capability.url, headers=headers, auth=cast("Any", auth))
105
110
  return toolset
106
111
 
107
112
 
@@ -106,6 +106,7 @@ class AgentErrorCode(StrEnum):
106
106
  A2A_AGENT_UNREACHABLE = "A2A_AGENT_UNREACHABLE"
107
107
  AGENT_SPECS_CONFLICT = "AGENT_SPECS_CONFLICT"
108
108
  AGENT_SPECS_MISSING = "AGENT_SPECS_MISSING"
109
+ REMOTE_CLIENTS_UNKNOWN = "REMOTE_CLIENTS_UNKNOWN"
109
110
 
110
111
  # Compatibility
111
112
  SPEC_VERSION_DEPRECATED = "SPEC_VERSION_DEPRECATED"
@@ -871,6 +872,26 @@ def agent_specs_missing() -> AgentCompilationIssue:
871
872
  )
872
873
 
873
874
 
875
+ def remote_clients_unknown(value: str, valid: Sequence[str]) -> AgentCompilationIssue:
876
+ """The start-up tolerance of remote clients names no known mode.
877
+
878
+ Args:
879
+ value: The rejected value of ``ai.remote_clients``.
880
+ valid: The accepted modes, supplied by the caller so this module keeps
881
+ no knowledge of the configuration domain.
882
+ """
883
+ accepted = ", ".join(f"'{mode}'" for mode in valid)
884
+ return AgentCompilationIssue(
885
+ code=AgentErrorCode.REMOTE_CLIENTS_UNKNOWN,
886
+ message=(
887
+ f"ai.remote_clients: '{value}' is not a known start-up mode for remote "
888
+ f"clients; accepted: {accepted}"
889
+ ),
890
+ component="ai",
891
+ field="ai.remote_clients",
892
+ )
893
+
894
+
874
895
  # ---------------------------------------------------------------------------
875
896
  # Compatibility factories
876
897
  # ---------------------------------------------------------------------------