loom-kernel 1.7.1__tar.gz → 1.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1158) hide show
  1. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/CHANGELOG.md +42 -0
  2. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/PKG-INFO +1 -1
  3. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/ai/a2a.md +50 -1
  4. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/ai/mcp.md +10 -2
  5. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/pyproject.toml +16 -9
  6. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/sonar-project.properties +1 -10
  7. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/compiler/__init__.py +2 -2
  8. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/compiler/_plan.py +12 -4
  9. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/compiler/phases/_capabilities.py +9 -7
  10. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/config.py +30 -14
  11. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/_a2a.py +51 -5
  12. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/_mcp.py +3 -3
  13. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/errors.py +3 -3
  14. loom_kernel-1.7.1/src/loom/ai/mcp_auth.py → loom_kernel-1.8.0/src/loom/ai/remote_auth.py +181 -45
  15. loom_kernel-1.7.1/tests/helpers/mcp_auth_plugin.py → loom_kernel-1.8.0/tests/helpers/remote_auth_plugin.py +10 -8
  16. loom_kernel-1.8.0/tests/integration/ai/test_a2a_auth_wiring.py +207 -0
  17. loom_kernel-1.7.1/tests/integration/ai/test_mcp_auth_wiring.py → loom_kernel-1.8.0/tests/integration/ai/test_remote_auth_wiring.py +10 -10
  18. loom_kernel-1.8.0/tests/unit/ai/phases/test_remote_auth_plan.py +205 -0
  19. loom_kernel-1.7.1/tests/unit/ai/test_mcp_auth.py → loom_kernel-1.8.0/tests/unit/ai/test_remote_auth.py +183 -29
  20. loom_kernel-1.8.0/tests/unit/ai/test_remote_auth_settings.py +87 -0
  21. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_adapter.py +12 -0
  22. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_bytewax_dispatcher.py +3 -3
  23. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/uv.lock +1 -1
  24. loom_kernel-1.7.1/tests/unit/ai/phases/test_mcp_auth_plan.py +0 -111
  25. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/.github/workflows/ci-main.yml +0 -0
  26. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/.github/workflows/ci-pr.yml +0 -0
  27. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/.github/workflows/docs.yml +0 -0
  28. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/.github/workflows/release.yml +0 -0
  29. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/.gitignore +0 -0
  30. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/.pre-commit-config.yaml +0 -0
  31. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/.readthedocs.yaml +0 -0
  32. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/LICENSE +0 -0
  33. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/Makefile +0 -0
  34. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/README.md +0 -0
  35. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/codecov.yml +0 -0
  36. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docker-compose.local.yaml +0 -0
  37. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/_static/.gitkeep +0 -0
  38. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/_static/custom.css +0 -0
  39. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/_static/logo-transparent.png +0 -0
  40. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/_static/logo.svg +0 -0
  41. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/ai/artifacts.md +0 -0
  42. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/ai/observability.md +0 -0
  43. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/ai/overview.md +0 -0
  44. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/ai/providers.md +0 -0
  45. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/architecture/adr/README.md +0 -0
  46. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/architecture/clean-architecture.md +0 -0
  47. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/architecture/overview.md +0 -0
  48. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/conf.py +0 -0
  49. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/etl/examples.md +0 -0
  50. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/etl/pipelines.md +0 -0
  51. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/etl/testing.md +0 -0
  52. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/examples-repo/index.md +0 -0
  53. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/getting-started/etl.md +0 -0
  54. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/getting-started/rest.md +0 -0
  55. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/getting-started/streaming.md +0 -0
  56. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/guides/autocrud.md +0 -0
  57. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/guides/celery.md +0 -0
  58. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/guides/etl.md +0 -0
  59. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/guides/fake-repo-examples.md +0 -0
  60. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/guides/quickstart.md +0 -0
  61. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/guides/use-case-dsl.md +0 -0
  62. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/index.rst +0 -0
  63. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/overview.md +0 -0
  64. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/reference/api/ai.rst +0 -0
  65. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/reference/api/core.rst +0 -0
  66. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/reference/api/etl.rst +0 -0
  67. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/reference/api/repository.rst +0 -0
  68. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/reference/api/rest.rst +0 -0
  69. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/reference/api/streaming.rst +0 -0
  70. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/reference/api/testing.rst +0 -0
  71. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/reference/index.rst +0 -0
  72. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/requirements.txt +0 -0
  73. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/rest/autocrud.md +0 -0
  74. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/rest/celery.md +0 -0
  75. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/rest/examples.md +0 -0
  76. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/rest/identity.md +0 -0
  77. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/rest/sql.md +0 -0
  78. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/rest/testing.md +0 -0
  79. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/rest/use-case-dsl.md +0 -0
  80. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/streaming/bytewax.md +0 -0
  81. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/streaming/delivery.md +0 -0
  82. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/docs/streaming/tracing.md +0 -0
  83. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/scripts/release/checkout_merged_release.py +0 -0
  84. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/__init__.py +0 -0
  85. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/__init__.py +0 -0
  86. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/_filters.py +0 -0
  87. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/_transport.py +0 -0
  88. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/a2a/__init__.py +0 -0
  89. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/a2a/_binding.py +0 -0
  90. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/a2a/_handlers.py +0 -0
  91. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/a2a/_rpc.py +0 -0
  92. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/a2a/card.py +0 -0
  93. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/a2a/events.py +0 -0
  94. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/a2a/server.py +0 -0
  95. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/abc.py +0 -0
  96. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/compiler/_compiler.py +0 -0
  97. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/compiler/_symbols.py +0 -0
  98. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/compiler/phases/__init__.py +0 -0
  99. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/compiler/phases/_limits.py +0 -0
  100. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/compiler/phases/_model_role.py +0 -0
  101. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/compiler/phases/_output.py +0 -0
  102. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/declarative/__init__.py +0 -0
  103. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/declarative/_envelope.py +0 -0
  104. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/declarative/_schema.py +0 -0
  105. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/declarative/_v1.py +0 -0
  106. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
  107. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/describe.py +0 -0
  108. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/__init__.py +0 -0
  109. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
  110. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/_capabilities.py +0 -0
  111. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
  112. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
  113. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
  114. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
  115. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/_models.py +0 -0
  116. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
  117. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
  118. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
  119. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
  120. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
  121. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/fastapi/__init__.py +0 -0
  122. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/fastapi/endpoints.py +0 -0
  123. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/fastapi/response.py +0 -0
  124. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/fastapi/streaming.py +0 -0
  125. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/inference.py +0 -0
  126. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/registry.py +0 -0
  127. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/runtime/__init__.py +0 -0
  128. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/runtime/_health.py +0 -0
  129. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/runtime/_lifecycle.py +0 -0
  130. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/runtime/_limits.py +0 -0
  131. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/runtime/_mcp.py +0 -0
  132. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/validate/__init__.py +0 -0
  133. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/ai/validate/__main__.py +0 -0
  134. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/celery/__init__.py +0 -0
  135. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/celery/auto.py +0 -0
  136. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/celery/bootstrap.py +0 -0
  137. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/celery/config.py +0 -0
  138. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/celery/constants.py +0 -0
  139. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/celery/runner.py +0 -0
  140. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/celery/service.py +0 -0
  141. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/async_bridge.py +0 -0
  142. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/backend/__init__.py +0 -0
  143. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/backend/core_model.py +0 -0
  144. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/backend/protocol.py +0 -0
  145. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/backend/sqlalchemy.py +0 -0
  146. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/bootstrap/__init__.py +0 -0
  147. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/bootstrap/bootstrap.py +0 -0
  148. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/bootstrap/kernel.py +0 -0
  149. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/cache/__init__.py +0 -0
  150. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/cache/abc/__init__.py +0 -0
  151. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/cache/abc/backend.py +0 -0
  152. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/cache/abc/config.py +0 -0
  153. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/cache/abc/dependency.py +0 -0
  154. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/cache/codec.py +0 -0
  155. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/cache/decorators.py +0 -0
  156. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/cache/dependency.py +0 -0
  157. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/cache/gateway.py +0 -0
  158. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/cache/keys.py +0 -0
  159. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/cache/repository.py +0 -0
  160. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/cache/serializer.py +0 -0
  161. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/command/__init__.py +0 -0
  162. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/command/adapter.py +0 -0
  163. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/command/base.py +0 -0
  164. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/command/field.py +0 -0
  165. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/command/introspection.py +0 -0
  166. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/compiler.py +0 -0
  167. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/config/__init__.py +0 -0
  168. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/config/_resolver_utils.py +0 -0
  169. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/config/binder.py +0 -0
  170. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/config/configurable.py +0 -0
  171. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/config/context.py +0 -0
  172. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/config/errors.py +0 -0
  173. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/config/keys.py +0 -0
  174. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/config/loader.py +0 -0
  175. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/config/model.py +0 -0
  176. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/config/observability.py +0 -0
  177. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/config/resolver.py +0 -0
  178. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/config/secrets.py +0 -0
  179. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/config/ssm.py +0 -0
  180. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/contracts/__init__.py +0 -0
  181. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/contracts/manifest.py +0 -0
  182. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/di/__init__.py +0 -0
  183. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/di/container.py +0 -0
  184. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/di/scope.py +0 -0
  185. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/discovery/__init__.py +0 -0
  186. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/discovery/_utils.py +0 -0
  187. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/discovery/base.py +0 -0
  188. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/discovery/interfaces.py +0 -0
  189. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/discovery/manifest.py +0 -0
  190. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/discovery/modules.py +0 -0
  191. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/engine/__init__.py +0 -0
  192. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/engine/compilable.py +0 -0
  193. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/engine/compiler.py +0 -0
  194. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/engine/events.py +0 -0
  195. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/engine/executor.py +0 -0
  196. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/engine/metrics.py +0 -0
  197. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/engine/plan.py +0 -0
  198. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/errors/__init__.py +0 -0
  199. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/errors/codes.py +0 -0
  200. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/errors/errors.py +0 -0
  201. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/expr/__init__.py +0 -0
  202. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/expr/eval.py +0 -0
  203. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/expr/nodes.py +0 -0
  204. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/expr/refs.py +0 -0
  205. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/identity/__init__.py +0 -0
  206. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/identity/context.py +0 -0
  207. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/identity/identity.py +0 -0
  208. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/identity/issuer.py +0 -0
  209. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/identity/wire.py +0 -0
  210. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/introspection/__init__.py +0 -0
  211. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/introspection/base.py +0 -0
  212. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/introspection/describe.py +0 -0
  213. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/job/__init__.py +0 -0
  214. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/job/callback.py +0 -0
  215. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/job/context.py +0 -0
  216. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/job/handle.py +0 -0
  217. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/job/job.py +0 -0
  218. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/job/service.py +0 -0
  219. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/logger/__init__.py +0 -0
  220. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/logger/abc.py +0 -0
  221. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/logger/config.py +0 -0
  222. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/logger/registry.py +0 -0
  223. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/logger/structlogger.py +0 -0
  224. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/model/__init__.py +0 -0
  225. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/model/base.py +0 -0
  226. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/model/enums.py +0 -0
  227. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/model/field.py +0 -0
  228. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/model/introspection.py +0 -0
  229. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/model/projection.py +0 -0
  230. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/model/relation.py +0 -0
  231. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/model/struct.py +0 -0
  232. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/model/timestamped.py +0 -0
  233. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/model/types.py +0 -0
  234. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/model/types_postgres.py +0 -0
  235. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/observability/__init__.py +0 -0
  236. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/observability/config.py +0 -0
  237. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/observability/event.py +0 -0
  238. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/observability/observer/__init__.py +0 -0
  239. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/observability/observer/noop.py +0 -0
  240. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/observability/observer/otel.py +0 -0
  241. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/observability/observer/structlog.py +0 -0
  242. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/observability/otel_ids.py +0 -0
  243. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/observability/protocol.py +0 -0
  244. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/observability/runtime.py +0 -0
  245. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/observability/span.py +0 -0
  246. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/observability/topology.py +0 -0
  247. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/plugins/__init__.py +0 -0
  248. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/plugins/entrypoints.py +0 -0
  249. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/projection/__init__.py +0 -0
  250. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/projection/loaders.py +0 -0
  251. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/projection/runtime.py +0 -0
  252. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/__init__.py +0 -0
  253. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/abc/__init__.py +0 -0
  254. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/abc/query.py +0 -0
  255. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/abc/repo_for.py +0 -0
  256. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/abc/repository.py +0 -0
  257. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/dynamodb/__init__.py +0 -0
  258. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/dynamodb/registry.py +0 -0
  259. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/dynamodb/repository.py +0 -0
  260. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/dynamodb/uow.py +0 -0
  261. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/mutation.py +0 -0
  262. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/registration.py +0 -0
  263. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/registry.py +0 -0
  264. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
  265. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
  266. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
  267. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
  268. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
  269. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
  270. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
  271. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
  272. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
  273. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
  274. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
  275. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
  276. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
  277. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
  278. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
  279. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
  280. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
  281. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
  282. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
  283. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
  284. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/response/__init__.py +0 -0
  285. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/response/base.py +0 -0
  286. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/routing/__init__.py +0 -0
  287. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/routing/ref.py +0 -0
  288. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/routing/resolver.py +0 -0
  289. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/runner.py +0 -0
  290. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/schema/__init__.py +0 -0
  291. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/schema/schema_mode.py +0 -0
  292. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/sql/__init__.py +0 -0
  293. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/sql/abc/__init__.py +0 -0
  294. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/sql/abc/contracts.py +0 -0
  295. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/sql/abc/errors.py +0 -0
  296. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/sql/clickhouse/__init__.py +0 -0
  297. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/sql/clickhouse/_client.py +0 -0
  298. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/sql/clickhouse/executor.py +0 -0
  299. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/sql/clickhouse/registry.py +0 -0
  300. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/sql/config.py +0 -0
  301. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/sql/roles.py +0 -0
  302. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/sql/service.py +0 -0
  303. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/tracing/__init__.py +0 -0
  304. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/tracing/context.py +0 -0
  305. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/transport/__init__.py +0 -0
  306. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/transport/adapter.py +0 -0
  307. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/uow/__init__.py +0 -0
  308. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/uow/abc.py +0 -0
  309. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/uow/context.py +0 -0
  310. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/use_case/__init__.py +0 -0
  311. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/use_case/_predicates.py +0 -0
  312. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/use_case/compute.py +0 -0
  313. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/use_case/constants.py +0 -0
  314. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/use_case/factory.py +0 -0
  315. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/use_case/field_ref.py +0 -0
  316. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/use_case/invoker.py +0 -0
  317. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/use_case/keys.py +0 -0
  318. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/use_case/markers.py +0 -0
  319. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/use_case/registry.py +0 -0
  320. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/use_case/rule.py +0 -0
  321. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/core/use_case/use_case.py +0 -0
  322. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/__init__.py +0 -0
  323. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/__init__.py +0 -0
  324. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_format_registry.py +0 -0
  325. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
  326. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_historify/_common.py +0 -0
  327. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_historify/_log.py +0 -0
  328. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
  329. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
  330. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
  331. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_merge.py +0 -0
  332. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_path_template.py +0 -0
  333. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_predicate.py +0 -0
  334. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
  335. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
  336. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
  337. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/_write_policy.py +0 -0
  338. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/polars/__init__.py +0 -0
  339. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
  340. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
  341. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/polars/_historify.py +0 -0
  342. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
  343. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/polars/_reader.py +0 -0
  344. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/polars/_schema.py +0 -0
  345. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
  346. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/polars/_streaming.py +0 -0
  347. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/polars/_writer.py +0 -0
  348. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/polars/provider.py +0 -0
  349. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/spark/__init__.py +0 -0
  350. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
  351. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/spark/_historify.py +0 -0
  352. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/spark/_reader.py +0 -0
  353. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/spark/_schema.py +0 -0
  354. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
  355. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/spark/_writer.py +0 -0
  356. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/backends/spark/provider.py +0 -0
  357. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/checkpoint/__init__.py +0 -0
  358. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
  359. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
  360. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/checkpoint/_cleaners.py +0 -0
  361. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/checkpoint/_paths.py +0 -0
  362. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/checkpoint/_scope.py +0 -0
  363. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/checkpoint/_store.py +0 -0
  364. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/compiler/__init__.py +0 -0
  365. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/compiler/_binding.py +0 -0
  366. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/compiler/_compiler.py +0 -0
  367. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/compiler/_errors.py +0 -0
  368. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/compiler/_plan.py +0 -0
  369. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/compiler/_validators.py +0 -0
  370. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
  371. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/compiler/_validators_step.py +0 -0
  372. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/__init__.py +0 -0
  373. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/_format.py +0 -0
  374. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/_read_options.py +0 -0
  375. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/_utils.py +0 -0
  376. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/_write_options.py +0 -0
  377. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
  378. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/expr/_params.py +0 -0
  379. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/expr/_predicate.py +0 -0
  380. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
  381. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
  382. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/source/__init__.py +0 -0
  383. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/source/_from.py +0 -0
  384. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
  385. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
  386. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
  387. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/source/_specs.py +0 -0
  388. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/target/__init__.py +0 -0
  389. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/target/_client.py +0 -0
  390. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/target/_file.py +0 -0
  391. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
  392. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
  393. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
  394. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
  395. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
  396. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
  397. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/target/_into.py +0 -0
  398. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
  399. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/target/_table.py +0 -0
  400. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/declarative/target/_temp.py +0 -0
  401. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/executor/__init__.py +0 -0
  402. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/executor/_dispatcher.py +0 -0
  403. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/executor/_executor.py +0 -0
  404. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/__init__.py +0 -0
  405. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/_registry.py +0 -0
  406. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/sources/__init__.py +0 -0
  407. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/sources/_clickhouse.py +0 -0
  408. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/sources/_dynamodb.py +0 -0
  409. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
  410. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
  411. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/sources/_mongo.py +0 -0
  412. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
  413. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
  414. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
  415. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/sources/_serialization.py +0 -0
  416. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/targets/__init__.py +0 -0
  417. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/io/targets/_clickhouse.py +0 -0
  418. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/lineage/__init__.py +0 -0
  419. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/lineage/_config.py +0 -0
  420. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/lineage/_observer.py +0 -0
  421. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/lineage/_records.py +0 -0
  422. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/lineage/sinks/__init__.py +0 -0
  423. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
  424. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/lineage/sinks/_table.py +0 -0
  425. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/lineage/sinks/_writer.py +0 -0
  426. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/maintenance/__init__.py +0 -0
  427. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/maintenance/_builder.py +0 -0
  428. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/maintenance/_ops.py +0 -0
  429. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/maintenance/_protocol.py +0 -0
  430. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/maintenance/_runner.py +0 -0
  431. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/maintenance/_step.py +0 -0
  432. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/maintenance/backends/__init__.py +0 -0
  433. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
  434. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/pipeline/__init__.py +0 -0
  435. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/pipeline/_generics.py +0 -0
  436. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/pipeline/_params.py +0 -0
  437. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
  438. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/pipeline/_process.py +0 -0
  439. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/pipeline/_sql.py +0 -0
  440. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/pipeline/_step.py +0 -0
  441. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/pipeline/_step_client.py +0 -0
  442. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
  443. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/runner/__init__.py +0 -0
  444. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/runner/_providers.py +0 -0
  445. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/runner/_wiring.py +0 -0
  446. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/runner/config_loader.py +0 -0
  447. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/runner/core.py +0 -0
  448. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/runner/errors.py +0 -0
  449. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/runner/filtering.py +0 -0
  450. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/runtime/__init__.py +0 -0
  451. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/runtime/contracts.py +0 -0
  452. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/schema/__init__.py +0 -0
  453. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/schema/_contract.py +0 -0
  454. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/schema/_schema.py +0 -0
  455. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/storage/__init__.py +0 -0
  456. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/storage/_config.py +0 -0
  457. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/storage/_file_locator.py +0 -0
  458. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/storage/_locator.py +0 -0
  459. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/storage/routing.py +0 -0
  460. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/testing/__init__.py +0 -0
  461. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/testing/_result.py +0 -0
  462. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/testing/_runners.py +0 -0
  463. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/testing/_scenario.py +0 -0
  464. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/testing/_stubs.py +0 -0
  465. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/etl/testing/spark.py +0 -0
  466. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/__init__.py +0 -0
  467. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/_async.py +0 -0
  468. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/_config.py +0 -0
  469. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/_ctx.py +0 -0
  470. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/_meta.py +0 -0
  471. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/_placeholders.py +0 -0
  472. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/_summary.py +0 -0
  473. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/deploy/__init__.py +0 -0
  474. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/deploy/_discovery.py +0 -0
  475. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/deploy/_schedule.py +0 -0
  476. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/deploy/_yaml.py +0 -0
  477. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/flow/__init__.py +0 -0
  478. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/flow/_assemble.py +0 -0
  479. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/flow/_backfill.py +0 -0
  480. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/flow/_backfill_body.py +0 -0
  481. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/flow/_body.py +0 -0
  482. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/flow/_common.py +0 -0
  483. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/flow/_factory.py +0 -0
  484. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/flow/_hooks.py +0 -0
  485. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/flow/_maintenance.py +0 -0
  486. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/flow/_run_name.py +0 -0
  487. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/flow/_runtime.py +0 -0
  488. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/flow/_signature.py +0 -0
  489. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/flow/_stages.py +0 -0
  490. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/manifest/__init__.py +0 -0
  491. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/manifest/_model.py +0 -0
  492. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/manifest/_s3.py +0 -0
  493. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/manifest/_store.py +0 -0
  494. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/notify/__init__.py +0 -0
  495. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/notify/_event.py +0 -0
  496. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/notify/_factory.py +0 -0
  497. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/notify/_port.py +0 -0
  498. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/notify/_slack.py +0 -0
  499. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/observer/__init__.py +0 -0
  500. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/observer/_flow.py +0 -0
  501. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/observer/_logging_bridge.py +0 -0
  502. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/observer/_manifest.py +0 -0
  503. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prefect/observer/_task_run.py +0 -0
  504. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prometheus/__init__.py +0 -0
  505. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prometheus/adapter.py +0 -0
  506. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prometheus/kafka.py +0 -0
  507. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prometheus/lifecycle.py +0 -0
  508. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/prometheus/middleware.py +0 -0
  509. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/py.typed +0 -0
  510. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/__init__.py +0 -0
  511. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/_body.py +0 -0
  512. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/adapter.py +0 -0
  513. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/auth/__init__.py +0 -0
  514. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/auth/abc.py +0 -0
  515. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/auth/config.py +0 -0
  516. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/auth/jwt.py +0 -0
  517. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/auth/middleware.py +0 -0
  518. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/autocrud.py +0 -0
  519. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/compiler.py +0 -0
  520. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/constants.py +0 -0
  521. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/cors.py +0 -0
  522. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/errors.py +0 -0
  523. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/fastapi/__init__.py +0 -0
  524. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/fastapi/_errors.py +0 -0
  525. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/fastapi/_exclusions.py +0 -0
  526. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/fastapi/app.py +0 -0
  527. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/fastapi/auto.py +0 -0
  528. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/fastapi/openapi.py +0 -0
  529. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/fastapi/response.py +0 -0
  530. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/fastapi/router_runtime.py +0 -0
  531. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/fastapi/sql.py +0 -0
  532. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/middleware.py +0 -0
  533. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/model.py +0 -0
  534. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/rest/rest_adapter.py +0 -0
  535. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/__init__.py +0 -0
  536. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/__init__.py +0 -0
  537. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/_adapter.py +0 -0
  538. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
  539. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
  540. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/_dlq.py +0 -0
  541. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
  542. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/_errors.py +0 -0
  543. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/_operators.py +0 -0
  544. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
  545. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
  546. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
  547. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
  548. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
  549. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
  550. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
  551. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
  552. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
  553. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
  554. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
  555. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
  556. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/bytewax/runner.py +0 -0
  557. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/compiler/__init__.py +0 -0
  558. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/compiler/_bindings.py +0 -0
  559. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/compiler/_compiler.py +0 -0
  560. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/compiler/_errors.py +0 -0
  561. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/compiler/_plan.py +0 -0
  562. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/compiler/phases/build_plan.py +0 -0
  563. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/compiler/phases/validate.py +0 -0
  564. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/core/__init__.py +0 -0
  565. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/core/_errors.py +0 -0
  566. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/core/_exceptions.py +0 -0
  567. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/core/_message.py +0 -0
  568. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/core/_tracing.py +0 -0
  569. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/core/_typing.py +0 -0
  570. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/graph/__init__.py +0 -0
  571. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/graph/_flow.py +0 -0
  572. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/__init__.py +0 -0
  573. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/_codec.py +0 -0
  574. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/_config.py +0 -0
  575. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/_errors.py +0 -0
  576. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
  577. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/_message.py +0 -0
  578. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/_record.py +0 -0
  579. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/_wire.py +0 -0
  580. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
  581. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/client/_consumer.py +0 -0
  582. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/client/_producer.py +0 -0
  583. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
  584. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/client/_retry.py +0 -0
  585. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
  586. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/message/_consumer.py +0 -0
  587. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/message/_producer.py +0 -0
  588. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/kafka/message/_protocol.py +0 -0
  589. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/mongo/__init__.py +0 -0
  590. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
  591. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/mongo/_config.py +0 -0
  592. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/mongo/_event.py +0 -0
  593. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/mongo/_normalize.py +0 -0
  594. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/__init__.py +0 -0
  595. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_boundary.py +0 -0
  596. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_broadcast.py +0 -0
  597. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
  598. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_decompose.py +0 -0
  599. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_expand_routes.py +0 -0
  600. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
  601. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_fork.py +0 -0
  602. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_helpers.py +0 -0
  603. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_mongo.py +0 -0
  604. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_protocols.py +0 -0
  605. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_router.py +0 -0
  606. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_shape.py +0 -0
  607. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_sink.py +0 -0
  608. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_step.py +0 -0
  609. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_table/__init__.py +0 -0
  610. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_table/common.py +0 -0
  611. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_table/config.py +0 -0
  612. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/_with.py +0 -0
  613. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/nodes/refs.py +0 -0
  614. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/streaming/testing.py +0 -0
  615. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/testing/__init__.py +0 -0
  616. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/testing/agents.py +0 -0
  617. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/testing/golden.py +0 -0
  618. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/testing/http_harness.py +0 -0
  619. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/testing/in_memory.py +0 -0
  620. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/testing/repository_harness.py +0 -0
  621. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/src/loom/testing/runner.py +0 -0
  622. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/__init__.py +0 -0
  623. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/conftest.py +0 -0
  624. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/contract/__init__.py +0 -0
  625. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/contract/ai/__init__.py +0 -0
  626. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/contract/ai/test_contract_fake.py +0 -0
  627. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/contract/ai/test_contract_pydantic_ai.py +0 -0
  628. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/contract/observability/__init__.py +0 -0
  629. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/contract/observability/test_otel_sdk_contract.py +0 -0
  630. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/golden/__init__.py +0 -0
  631. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/golden/baselines/.gitkeep +0 -0
  632. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/golden/outputs/.gitkeep +0 -0
  633. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/golden/plans/.gitkeep +0 -0
  634. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/helpers/__init__.py +0 -0
  635. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/helpers/pydantic_ai_engine.py +0 -0
  636. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/helpers/spans.py +0 -0
  637. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/__init__.py +0 -0
  638. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/__init__.py +0 -0
  639. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/conftest.py +0 -0
  640. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_a2a.py +0 -0
  641. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_agent_specs_source.py +0 -0
  642. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_auto_a2a.py +0 -0
  643. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_auto_client_factories.py +0 -0
  644. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_auto_gate.py +0 -0
  645. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_capabilities.py +0 -0
  646. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_describe.py +0 -0
  647. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_endpoints.py +0 -0
  648. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_grant_wiring.py +0 -0
  649. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_health_probe.py +0 -0
  650. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_limits.py +0 -0
  651. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_live_provider.py +0 -0
  652. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_mcp_end_to_end.py +0 -0
  653. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_provider_portability.py +0 -0
  654. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_runtime.py +0 -0
  655. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_streaming.py +0 -0
  656. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/ai/test_transport.py +0 -0
  657. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/celery_bootstrap/__init__.py +0 -0
  658. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/celery_bootstrap/config/conf.celery.integration.yaml +0 -0
  659. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/celery_bootstrap/test_auto_create_app_integration.py +0 -0
  660. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/celery_bootstrap/test_bootstrap_worker.py +0 -0
  661. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/conftest.py +0 -0
  662. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/__init__.py +0 -0
  663. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/bootstrap/__init__.py +0 -0
  664. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/bootstrap/test_bootstrap_integration.py +0 -0
  665. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/repository/__init__.py +0 -0
  666. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/repository/sqlalchemy/__init__.py +0 -0
  667. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/repository/sqlalchemy/conftest.py +0 -0
  668. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/repository/sqlalchemy/test_cache_integration.py +0 -0
  669. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/repository/sqlalchemy/test_repository_integration.py +0 -0
  670. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/rest/__init__.py +0 -0
  671. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/rest/test_auto_interface_integration.py +0 -0
  672. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/rest/test_fastapi_app_integration.py +0 -0
  673. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/rest/test_rest_error_mapping.py +0 -0
  674. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/rest/test_rest_observability.py +0 -0
  675. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/use_case/__init__.py +0 -0
  676. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/use_case/test_custom_repository_integration.py +0 -0
  677. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/core/use_case/test_use_case_crud_integration.py +0 -0
  678. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/etl/__init__.py +0 -0
  679. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/etl/test_runner_integration.py +0 -0
  680. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/__init__.py +0 -0
  681. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/config/__init__.py +0 -0
  682. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/config/conf.interfaces.yaml +0 -0
  683. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/config/conf.manifest.yaml +0 -0
  684. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/config/conf.modules.yaml +0 -0
  685. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/config/conf.yaml +0 -0
  686. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/main.py +0 -0
  687. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/manifest.py +0 -0
  688. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/__init__.py +0 -0
  689. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/category/__init__.py +0 -0
  690. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/category/model.py +0 -0
  691. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/category/schemas.py +0 -0
  692. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/interface.py +0 -0
  693. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/jobs.py +0 -0
  694. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/model.py +0 -0
  695. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/relations.py +0 -0
  696. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/repository.py +0 -0
  697. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/repository_contract.py +0 -0
  698. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/review/__init__.py +0 -0
  699. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/review/model.py +0 -0
  700. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/review/schemas.py +0 -0
  701. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/schemas.py +0 -0
  702. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/fake_repo/product/use_cases.py +0 -0
  703. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/sql/__init__.py +0 -0
  704. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/sql/init/01_users_roles.sql +0 -0
  705. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/sql/test_clickhouse_integration.py +0 -0
  706. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/streaming/__init__.py +0 -0
  707. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/streaming/kafka/__init__.py +0 -0
  708. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/streaming/kafka/conftest.py +0 -0
  709. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/streaming/kafka/test_partitioned_source_integration.py +0 -0
  710. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/streaming/kafka/test_source_contract_integration.py +0 -0
  711. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/streaming/test_into_table_integration.py +0 -0
  712. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/support/__init__.py +0 -0
  713. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/integration/support/logical_repo_fixtures.py +0 -0
  714. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/__init__.py +0 -0
  715. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/__init__.py +0 -0
  716. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/conftest.py +0 -0
  717. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/engines/__init__.py +0 -0
  718. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/engines/test_a2a_capability.py +0 -0
  719. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/engines/test_capability_span_nesting.py +0 -0
  720. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/engines/test_pydantic_ai_binding.py +0 -0
  721. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/engines/test_pydantic_ai_failures.py +0 -0
  722. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/engines/test_pydantic_ai_translation.py +0 -0
  723. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/corpus_v1/README.md +0 -0
  724. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/corpus_v1/capability-a2a-agent/agent.yaml +0 -0
  725. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/corpus_v1/capability-mcp-agent/agent.yaml +0 -0
  726. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/corpus_v1/capability-python-agent/agent.yaml +0 -0
  727. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/corpus_v1/capability-skills-agent/agent.yaml +0 -0
  728. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/corpus_v1/capability-skills-agent/skills/release-notes/SKILL.md +0 -0
  729. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/corpus_v1/capability-sql-agent/agent.yaml +0 -0
  730. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/corpus_v1/capability-usecase-agent/agent.yaml +0 -0
  731. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/corpus_v1/full-agent/agent.yaml +0 -0
  732. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/corpus_v1/full-agent/skills/severity-rubric/SKILL.md +0 -0
  733. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/corpus_v1/minimal-agent/agent.yaml +0 -0
  734. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/corpus_v1/output-type-ref-agent/agent.yaml +0 -0
  735. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/__init__.py +0 -0
  736. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/__init__.py +0 -0
  737. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/incidents.py +0 -0
  738. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/invoices.py +0 -0
  739. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/unsupported.py +0 -0
  740. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/__init__.py +0 -0
  741. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/broken.py +0 -0
  742. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/geo.py +0 -0
  743. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/metrics.py +0 -0
  744. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/skills_root/shared/group-changes/SKILL.md +0 -0
  745. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/fixtures/skills_root/shared/tone-of-voice/SKILL.md +0 -0
  746. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/phases/__init__.py +0 -0
  747. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/phases/conftest.py +0 -0
  748. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/phases/test_capabilities.py +0 -0
  749. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/phases/test_limits.py +0 -0
  750. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/phases/test_model_role.py +0 -0
  751. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/phases/test_output.py +0 -0
  752. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/phases/test_validate_cli.py +0 -0
  753. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_a2a_base_url.py +0 -0
  754. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_a2a_card.py +0 -0
  755. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_compiler.py +0 -0
  756. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_compiler_offline.py +0 -0
  757. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_config.py +0 -0
  758. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_declarative_envelope.py +0 -0
  759. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_describe.py +0 -0
  760. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_error_catalogue_totality.py +0 -0
  761. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_error_factories.py +0 -0
  762. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_fake_engine.py +0 -0
  763. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_loopback_plaintext.py +0 -0
  764. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_no_extras_import.py +0 -0
  765. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_public_surface.py +0 -0
  766. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_registry.py +0 -0
  767. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_schema_emission.py +0 -0
  768. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_secret_containment.py +0 -0
  769. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ai/test_spec_v1_corpus.py +0 -0
  770. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/celery_bootstrap/__init__.py +0 -0
  771. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/celery_bootstrap/test_async_runtime.py +0 -0
  772. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/celery_bootstrap/test_bootstrap.py +0 -0
  773. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/celery_jobs/__init__.py +0 -0
  774. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/celery_jobs/test_auto.py +0 -0
  775. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/celery_jobs/test_celery_service.py +0 -0
  776. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/celery_jobs/test_config.py +0 -0
  777. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/celery_jobs/test_identity_propagation.py +0 -0
  778. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/celery_jobs/test_runner.py +0 -0
  779. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/ci/test_workflow_supply_chain_contract.py +0 -0
  780. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/__init__.py +0 -0
  781. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/backend/__init__.py +0 -0
  782. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/backend/test_backend_compiler.py +0 -0
  783. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/bootstrap/__init__.py +0 -0
  784. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/bootstrap/test_bootstrap.py +0 -0
  785. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/bootstrap/test_bootstrap_metrics.py +0 -0
  786. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/bootstrap/test_kernel.py +0 -0
  787. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/cache/__init__.py +0 -0
  788. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/cache/test_cached_repository.py +0 -0
  789. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/cache/test_config_wiring.py +0 -0
  790. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/cache/test_gateway_config.py +0 -0
  791. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/command/__init__.py +0 -0
  792. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/command/test_command_base.py +0 -0
  793. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/command/test_command_field.py +0 -0
  794. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/command/test_command_patch.py +0 -0
  795. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/command/test_introspection.py +0 -0
  796. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/config/__init__.py +0 -0
  797. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/config/test_binder.py +0 -0
  798. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/config/test_config.py +0 -0
  799. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/config/test_configurable.py +0 -0
  800. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/config/test_context.py +0 -0
  801. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/config/test_resolver_utils.py +0 -0
  802. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/config/test_secrets.py +0 -0
  803. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/config/test_ssm.py +0 -0
  804. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/di/__init__.py +0 -0
  805. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/di/test_container.py +0 -0
  806. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/discovery/__init__.py +0 -0
  807. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/discovery/test_manifest.py +0 -0
  808. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/engine/__init__.py +0 -0
  809. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/engine/test_caller_binding.py +0 -0
  810. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/engine/test_compiler.py +0 -0
  811. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/engine/test_executor.py +0 -0
  812. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/engine/test_executor_trace.py +0 -0
  813. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/engine/test_executor_uow.py +0 -0
  814. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/engine/test_metrics.py +0 -0
  815. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/engine/test_plan.py +0 -0
  816. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/errors/__init__.py +0 -0
  817. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/errors/test_errors.py +0 -0
  818. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/expr/__init__.py +0 -0
  819. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/expr/test_expr.py +0 -0
  820. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/identity/__init__.py +0 -0
  821. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/identity/test_context.py +0 -0
  822. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/identity/test_identity.py +0 -0
  823. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/identity/test_wire.py +0 -0
  824. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/introspection/__init__.py +0 -0
  825. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/introspection/test_describe.py +0 -0
  826. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/job/__init__.py +0 -0
  827. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/job/conftest.py +0 -0
  828. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/job/test_callback.py +0 -0
  829. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/job/test_context.py +0 -0
  830. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/job/test_handle.py +0 -0
  831. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/job/test_inline_service.py +0 -0
  832. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/job/test_job.py +0 -0
  833. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/logger/__init__.py +0 -0
  834. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/logger/test_config.py +0 -0
  835. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/logger/test_registry.py +0 -0
  836. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/model/__init__.py +0 -0
  837. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/model/test_model.py +0 -0
  838. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/model/test_struct.py +0 -0
  839. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/model/test_timestamped.py +0 -0
  840. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/observability/__init__.py +0 -0
  841. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/observability/test_message_id_generator.py +0 -0
  842. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/observability/test_observers.py +0 -0
  843. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/observability/test_optional_otel_sdk.py +0 -0
  844. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/observability/test_otel_loader_branches.py +0 -0
  845. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/observability/test_provider_modes.py +0 -0
  846. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/observability/test_runtime.py +0 -0
  847. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/observability/test_tracing_characterisation.py +0 -0
  848. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/plugins/__init__.py +0 -0
  849. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/plugins/test_entrypoints.py +0 -0
  850. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/plugins/test_import_containment.py +0 -0
  851. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/projection/__init__.py +0 -0
  852. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/projection/test_runtime.py +0 -0
  853. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/__init__.py +0 -0
  854. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/abc/__init__.py +0 -0
  855. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/abc/conftest.py +0 -0
  856. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/abc/test_query.py +0 -0
  857. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/abc/test_repository_contract.py +0 -0
  858. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/dynamodb/__init__.py +0 -0
  859. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/dynamodb/conftest.py +0 -0
  860. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/dynamodb/test_registry.py +0 -0
  861. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/dynamodb/test_repository.py +0 -0
  862. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/sqlalchemy/__init__.py +0 -0
  863. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/sqlalchemy/conftest.py +0 -0
  864. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/sqlalchemy/test_loaders.py +0 -0
  865. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/sqlalchemy/test_repository.py +0 -0
  866. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/repository/sqlalchemy/test_transactional.py +0 -0
  867. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/routing/__init__.py +0 -0
  868. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/routing/test_routing.py +0 -0
  869. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/sql/__init__.py +0 -0
  870. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/sql/_fakes.py +0 -0
  871. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/sql/conftest.py +0 -0
  872. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/sql/test_clickhouse_executor.py +0 -0
  873. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/sql/test_clickhouse_transport.py +0 -0
  874. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/sql/test_config.py +0 -0
  875. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/sql/test_isolation.py +0 -0
  876. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/sql/test_null_service.py +0 -0
  877. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/sql/test_pagination_limits.py +0 -0
  878. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/sql/test_registry_lifecycle.py +0 -0
  879. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/sql/test_role_policy.py +0 -0
  880. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/test_async_bridge.py +0 -0
  881. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/test_compiler_contracts.py +0 -0
  882. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/test_runner_contracts.py +0 -0
  883. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/tracing/__init__.py +0 -0
  884. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/tracing/test_context.py +0 -0
  885. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/uow/__init__.py +0 -0
  886. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/uow/test_executor_uow.py +0 -0
  887. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/uow/test_sqlalchemy_uow.py +0 -0
  888. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/uow/test_uow_protocols.py +0 -0
  889. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/use_case/__init__.py +0 -0
  890. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/use_case/test_compute.py +0 -0
  891. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/use_case/test_factory.py +0 -0
  892. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/use_case/test_field_ref.py +0 -0
  893. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/use_case/test_invoker.py +0 -0
  894. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/use_case/test_markers.py +0 -0
  895. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/use_case/test_rule.py +0 -0
  896. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/core/use_case/test_use_case.py +0 -0
  897. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/__init__.py +0 -0
  898. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/__init__.py +0 -0
  899. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/_historify_contract.py +0 -0
  900. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_empty_write_warning.py +0 -0
  901. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_historify_common.py +0 -0
  902. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_path_template.py +0 -0
  903. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/__init__.py +0 -0
  904. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/conftest.py +0 -0
  905. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_apply_schema.py +0 -0
  906. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_backend.py +0 -0
  907. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_dtype.py +0 -0
  908. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_file_writer.py +0 -0
  909. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_historify_polars.py +0 -0
  910. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_predicate_pushdown.py +0 -0
  911. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_reader_columns.py +0 -0
  912. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_reader_json_columns.py +0 -0
  913. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_step_execution.py +0 -0
  914. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_streaming_write.py +0 -0
  915. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_update_writer.py +0 -0
  916. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_upsert_writer.py +0 -0
  917. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_writer_null_schema.py +0 -0
  918. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_polars/test_writer_to_frame.py +0 -0
  919. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_spark/__init__.py +0 -0
  920. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_spark/conftest.py +0 -0
  921. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_spark/test_dtype.py +0 -0
  922. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_spark/test_historify_spark.py +0 -0
  923. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_spark/test_spark_apply_schema.py +0 -0
  924. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_spark/test_step_execution.py +0 -0
  925. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_spark/test_writer_to_frame.py +0 -0
  926. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/backends/test_write_policy_historify.py +0 -0
  927. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/checkpoint/__init__.py +0 -0
  928. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/checkpoint/backends/__init__.py +0 -0
  929. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/checkpoint/backends/test_checkpoint_polars.py +0 -0
  930. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/checkpoint/test_checkpoint_paths.py +0 -0
  931. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/checkpoint/test_cleaners.py +0 -0
  932. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/checkpoint/test_store.py +0 -0
  933. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/client_step/__init__.py +0 -0
  934. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/client_step/test_client_step.py +0 -0
  935. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/__init__.py +0 -0
  936. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_catalog_validator.py +0 -0
  937. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_compiler.py +0 -0
  938. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_compiler_catalog.py +0 -0
  939. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_compiler_upsert.py +0 -0
  940. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_errors.py +0 -0
  941. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_errors_additional_factories.py +0 -0
  942. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_errors_runtime_factories.py +0 -0
  943. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_file_template_validator.py +0 -0
  944. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_historify_validator.py +0 -0
  945. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_param_exprs_validator.py +0 -0
  946. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_plan_traversal.py +0 -0
  947. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_step_validator.py +0 -0
  948. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_structural.py +0 -0
  949. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_temp_validator.py +0 -0
  950. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/compiler/test_upsert_validator.py +0 -0
  951. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/conftest.py +0 -0
  952. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/__init__.py +0 -0
  953. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/sources/__init__.py +0 -0
  954. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/sources/test_clickhouse_reader.py +0 -0
  955. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/sources/test_dynamodb_predicate.py +0 -0
  956. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/sources/test_dynamodb_reader.py +0 -0
  957. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/sources/test_from_clickhouse.py +0 -0
  958. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/sources/test_from_dynamodb.py +0 -0
  959. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/sources/test_from_mongo.py +0 -0
  960. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/sources/test_mongo_predicate.py +0 -0
  961. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/sources/test_mongo_reader.py +0 -0
  962. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/sources/test_mongo_reader_memory.py +0 -0
  963. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/targets/__init__.py +0 -0
  964. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/targets/test_clickhouse_writer.py +0 -0
  965. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/targets/test_into_clickhouse.py +0 -0
  966. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/test_history_target.py +0 -0
  967. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/test_registry.py +0 -0
  968. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/test_source.py +0 -0
  969. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/test_source_json.py +0 -0
  970. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/test_source_options.py +0 -0
  971. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/test_target.py +0 -0
  972. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/test_utils.py +0 -0
  973. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/io/test_variants.py +0 -0
  974. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/lineage/test_observer.py +0 -0
  975. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/lineage/test_records.py +0 -0
  976. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/lineage/test_store.py +0 -0
  977. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/maintenance/__init__.py +0 -0
  978. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/maintenance/backends/__init__.py +0 -0
  979. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/maintenance/backends/test_delta_rs.py +0 -0
  980. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/maintenance/conftest.py +0 -0
  981. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/maintenance/test_builder.py +0 -0
  982. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/maintenance/test_runner.py +0 -0
  983. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/maintenance/test_step.py +0 -0
  984. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/pipeline/__init__.py +0 -0
  985. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/pipeline/test_pipeline_process.py +0 -0
  986. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/pipeline/test_proxy.py +0 -0
  987. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/pipeline/test_step.py +0 -0
  988. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/schema/__init__.py +0 -0
  989. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/schema/test_contract.py +0 -0
  990. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/schema/test_schema.py +0 -0
  991. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/schema/test_table.py +0 -0
  992. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/sql/__init__.py +0 -0
  993. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/sql/test_merge.py +0 -0
  994. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/sql/test_predicate.py +0 -0
  995. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/sql/test_predicate_dialect.py +0 -0
  996. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/sql/test_sql_runtime.py +0 -0
  997. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/storage/__init__.py +0 -0
  998. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/storage/test_backend_factory.py +0 -0
  999. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/storage/test_io_protocols.py +0 -0
  1000. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/storage/test_locator.py +0 -0
  1001. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/storage/test_observability_and_protocols.py +0 -0
  1002. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/storage/test_route_build.py +0 -0
  1003. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/storage/test_schema_readers.py +0 -0
  1004. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/storage/test_storage_config.py +0 -0
  1005. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/test_config_loader.py +0 -0
  1006. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/test_executor.py +0 -0
  1007. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/test_executor_tracing.py +0 -0
  1008. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/test_format_registry.py +0 -0
  1009. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/test_module_contracts.py +0 -0
  1010. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/test_public_api_discovery.py +0 -0
  1011. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/test_record_schema_coverage.py +0 -0
  1012. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/test_runner.py +0 -0
  1013. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/test_runner_errors.py +0 -0
  1014. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/test_spark_testing.py +0 -0
  1015. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/testing/__init__.py +0 -0
  1016. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/testing/test_runners.py +0 -0
  1017. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/testing/test_scenario_and_stubs.py +0 -0
  1018. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/etl/testing/test_spark_helpers.py +0 -0
  1019. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/__init__.py +0 -0
  1020. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/test_backfill_flow.py +0 -0
  1021. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/test_config.py +0 -0
  1022. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/test_ctx.py +0 -0
  1023. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/test_etl_flow.py +0 -0
  1024. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/test_logging_bridge.py +0 -0
  1025. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/test_maintenance_flow.py +0 -0
  1026. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/test_manifest.py +0 -0
  1027. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/test_manifest_s3.py +0 -0
  1028. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/test_notify.py +0 -0
  1029. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/test_observer.py +0 -0
  1030. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/test_placeholders.py +0 -0
  1031. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/test_task_run_observer.py +0 -0
  1032. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prefect/test_yaml_loader.py +0 -0
  1033. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prometheus/__init__.py +0 -0
  1034. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prometheus/test_adapter.py +0 -0
  1035. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/prometheus/test_middleware.py +0 -0
  1036. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/release/test_checkout_merged_release.py +0 -0
  1037. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/release/test_release_workflow_contract.py +0 -0
  1038. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/__init__.py +0 -0
  1039. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/_fixture_app.py +0 -0
  1040. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_app_hardening.py +0 -0
  1041. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_auth_middleware.py +0 -0
  1042. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_auth_rejection_logging.py +0 -0
  1043. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_autocrud.py +0 -0
  1044. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_cors.py +0 -0
  1045. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_fastapi_auto_logger.py +0 -0
  1046. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_fastapi_auto_persistence.py +0 -0
  1047. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_jwt_issuer.py +0 -0
  1048. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_jwt_middleware.py +0 -0
  1049. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_middleware.py +0 -0
  1050. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_pydantic_adapter.py +0 -0
  1051. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_request_hardening.py +0 -0
  1052. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_response.py +0 -0
  1053. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_rest_adapter.py +0 -0
  1054. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_rest_compiler.py +0 -0
  1055. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_rest_model.py +0 -0
  1056. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_route_rbac.py +0 -0
  1057. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_router_identity.py +0 -0
  1058. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_router_runtime.py +0 -0
  1059. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_sql_endpoint.py +0 -0
  1060. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_sql_endpoint_auth_gate.py +0 -0
  1061. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_sql_endpoint_roles.py +0 -0
  1062. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/rest/test_sql_serialization.py +0 -0
  1063. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/__init__.py +0 -0
  1064. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/__init__.py +0 -0
  1065. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/cases.py +0 -0
  1066. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/conftest.py +0 -0
  1067. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_batch_key.py +0 -0
  1068. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_collect_batch.py +0 -0
  1069. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_dlq.py +0 -0
  1070. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_error_boundary.py +0 -0
  1071. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_fanout_accounting.py +0 -0
  1072. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_operators.py +0 -0
  1073. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_resource_manager.py +0 -0
  1074. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_runner.py +0 -0
  1075. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_runtime_io.py +0 -0
  1076. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_runtime_sink.py +0 -0
  1077. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_runtime_source.py +0 -0
  1078. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_sink_registry.py +0 -0
  1079. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_steps.py +0 -0
  1080. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_storage.py +0 -0
  1081. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/bytewax/test_storage_trace_characterisation.py +0 -0
  1082. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/compiler/__init__.py +0 -0
  1083. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/compiler/cases.py +0 -0
  1084. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/compiler/test_async_walk.py +0 -0
  1085. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/compiler/test_basics.py +0 -0
  1086. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/compiler/test_config_bindings.py +0 -0
  1087. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/compiler/test_delivery.py +0 -0
  1088. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/compiler/test_error_codes.py +0 -0
  1089. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/compiler/test_mongo_source.py +0 -0
  1090. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/compiler/test_multi_source.py +0 -0
  1091. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/compiler/test_router.py +0 -0
  1092. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/compiler/test_window.py +0 -0
  1093. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/compiler/test_with.py +0 -0
  1094. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/conftest.py +0 -0
  1095. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/contracts/__init__.py +0 -0
  1096. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/contracts/cases.py +0 -0
  1097. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/contracts/test_boundary.py +0 -0
  1098. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/contracts/test_message.py +0 -0
  1099. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/contracts/test_mongo_contracts.py +0 -0
  1100. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/contracts/test_multi_boundary.py +0 -0
  1101. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/contracts/test_steps.py +0 -0
  1102. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/flows/__init__.py +0 -0
  1103. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/flows/cases/__init__.py +0 -0
  1104. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/flows/cases/batch.py +0 -0
  1105. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/flows/cases/explode.py +0 -0
  1106. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/flows/cases/fork.py +0 -0
  1107. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/flows/cases/router.py +0 -0
  1108. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/flows/cases/shared.py +0 -0
  1109. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/flows/cases/simple.py +0 -0
  1110. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/flows/conftest.py +0 -0
  1111. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/flows/test_compiler_examples.py +0 -0
  1112. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/flows/test_flow_examples.py +0 -0
  1113. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/__init__.py +0 -0
  1114. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/cases.py +0 -0
  1115. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/conftest.py +0 -0
  1116. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/fakes.py +0 -0
  1117. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/test_client.py +0 -0
  1118. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/test_config.py +0 -0
  1119. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/test_coordinator_retry.py +0 -0
  1120. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/test_key_resolver.py +0 -0
  1121. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/test_message.py +0 -0
  1122. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/test_message_client.py +0 -0
  1123. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/test_multi_wire.py +0 -0
  1124. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/test_observability.py +0 -0
  1125. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/test_settings.py +0 -0
  1126. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/test_source_decode_parity.py +0 -0
  1127. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/kafka/test_wire.py +0 -0
  1128. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/mongo/test_bytewax_source.py +0 -0
  1129. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/nodes/__init__.py +0 -0
  1130. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/nodes/conftest.py +0 -0
  1131. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/nodes/test_broadcast.py +0 -0
  1132. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/nodes/test_delta_config.py +0 -0
  1133. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/nodes/test_logging.py +0 -0
  1134. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/nodes/test_table_package.py +0 -0
  1135. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/observability/__init__.py +0 -0
  1136. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/observability/cases.py +0 -0
  1137. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/observability/conftest.py +0 -0
  1138. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/observability/test_message_lifecycle_spans.py +0 -0
  1139. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/observability/test_multiworker_trace_continuity.py +0 -0
  1140. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/observability/test_observability_runner.py +0 -0
  1141. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/observability/test_outbound_topic_terminal_spans.py +0 -0
  1142. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/observability/test_protocols.py +0 -0
  1143. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/observability/test_registry.py +0 -0
  1144. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/observability/test_structlog.py +0 -0
  1145. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/support/__init__.py +0 -0
  1146. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/support/flow_cases.py +0 -0
  1147. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/test_expand_routes.py +0 -0
  1148. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/test_fork.py +0 -0
  1149. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/test_otel_observability.py +0 -0
  1150. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/test_routing.py +0 -0
  1151. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/test_testing_mongo.py +0 -0
  1152. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/streaming/test_with.py +0 -0
  1153. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/testing/__init__.py +0 -0
  1154. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/testing/test_golden.py +0 -0
  1155. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/testing/test_http_harness.py +0 -0
  1156. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/testing/test_identity_harness.py +0 -0
  1157. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/testing/test_in_memory.py +0 -0
  1158. {loom_kernel-1.7.1 → loom_kernel-1.8.0}/tests/unit/testing/test_runner.py +0 -0
@@ -1,3 +1,45 @@
1
+ # 🚀 Release 1.8.0 ([#147](https://github.com/the-reacher-data/loom-py/pull/147)) ([`1d9667e`](https://github.com/the-reacher-data/loom-py/commit/1d9667e3))
2
+
3
+
4
+ ## ✨ Features
5
+ ### ai
6
+ - **ai:** authenticate to remote A2A agents, and share one strategy registry ([#147](https://github.com/the-reacher-data/loom-py/pull/147))<br>
7
+ > `A2AAgentConfig.headers_ref` was declared, validated by the compiler and
8
+ > carried into the plan — then dropped, so an agent configured with
9
+ > credentials connected **unauthenticated, silently**. MCP at least refused.
10
+ >
11
+ > **BREAKING**: the entry-point group `loom.ai.mcp_auth` is renamed
12
+ > `loom.ai.remote_auth`, and `mcp_auth.py` becomes `remote_auth.py`. Anything
13
+ > registered under the old name stops being found. No deprecation cycle was
14
+ > run because the group shipped one release earlier with no consumers.
15
+ >
16
+ > One registry now serves both outbound transports: nothing about `bearer`,
17
+ > `oauth` or `static` is MCP-specific, since the contract is `httpx.Auth`.
18
+ > Sharing keys are scoped by transport, so an MCP server and an A2A agent of
19
+ > the same name remain two credentials. The credential is set on the client,
20
+ > so the card fetch — the *first* request of a session — carries it too.
21
+
22
+
23
+ ## 🐛 Fixes
24
+ ### ai
25
+ - **ai:** give a plugin the setting types its signature declares ([#150](https://github.com/the-reacher-data/loom-py/pull/150))<br>
26
+ > Auth settings arrive as strings, because each passes the inline-credential
27
+ > refusal, which admits no spaces. A strategy declaring `timeout: int` got
28
+ > `"30"`, and one declaring `verify: bool` got `"false"` — which is truthy, so
29
+ > a deployment asking to turn verification off got it turned on.
30
+ >
31
+ > A setting whose parameter declares `str`, `int`, `float` or `bool` is now
32
+ > converted to it; a custom type or an unannotated parameter is passed exactly
33
+ > as before, so no existing strategy changes behaviour.
34
+
35
+
36
+ ## 🧹 Chores
37
+ - **chore:** retire two expired Sonar suppressions and fix two lying test stubs ([#146](https://github.com/the-reacher-data/loom-py/pull/146))<br>
38
+ > Both suppressions carried a written expiry condition that the 1.7.0 split
39
+ > met; one pointed at a file that no longer exists. Two test stubs had
40
+ > silently stopped satisfying the protocols they stand in for.
41
+
42
+
1
43
  # 🚀 Release 1.7.1 ([#143](https://github.com/the-reacher-data/loom-py/pull/143)) ([`0322dbb`](https://github.com/the-reacher-data/loom-py/commit/0322dbb2))
2
44
 
3
45
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: loom-kernel
3
- Version: 1.7.1
3
+ Version: 1.8.0
4
4
  Summary: Loom Python project
5
5
  License-File: LICENSE
6
6
  Classifier: Typing :: Typed
@@ -36,7 +36,7 @@ ai:
36
36
  a2a_agents:
37
37
  oncall:
38
38
  url: https://oncall.partner.example.com/a2a/rota
39
- headers_ref: ONCALL_A2A_HEADERS
39
+ headers_ref: ${secrets:/loom/oncall/api-key} # stores e.g. X-API-Key=abc123
40
40
  ```
41
41
 
42
42
  At start-up the remote card is fetched and validated. An unreachable agent fails
@@ -57,6 +57,55 @@ The remote URL must be `https://`, with no credentials in its userinfo and no
57
57
  query string. Compilation refuses anything else, and the offending URL is
58
58
  redacted in the error message.
59
59
 
60
+ ### Authenticating to the remote agent
61
+
62
+ A remote agent declares its credential exactly as an MCP server does, and loom
63
+ resolves it through the same registry — see
64
+ [mcp.md § Authentication](mcp.md#authentication) for the full reference:
65
+
66
+ ```yaml
67
+ ai:
68
+ a2a_agents:
69
+ oncall:
70
+ url: https://oncall.partner.example.com/a2a/rota
71
+ headers_ref: ${secrets:/loom/oncall/api-key} # one Name=value pair
72
+ market:
73
+ url: https://market.partner.example.com/a2a
74
+ auth:
75
+ kind: bearer # Authorization: Bearer <token>
76
+ token_ref: ${secrets:/loom/market/token}
77
+ orders:
78
+ url: https://orders.internal.example.com/a2a
79
+ auth:
80
+ kind: agent-session # a strategy you register
81
+ session_url: https://orders.internal.example.com/auth/agent/session
82
+ bootstrap_ref: ${secrets:/agents/prod/agent-sales}
83
+ ```
84
+
85
+ The credential is set on the HTTP client, not on one request, so **every** call
86
+ carries it — including the card fetch, which is the *first* request of the
87
+ session. An agent that authenticates its card endpoint would otherwise fail
88
+ start-up before a skill was ever called.
89
+
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
96
+ here is refused with `MCP_AUTH_STRATEGY_INVALID` rather than connecting without
97
+ the credential the deployment asked for.
98
+
99
+ What compilation guarantees is what it guarantees for an MCP server:
100
+ `headers_ref` and `auth` are **mutually exclusive** (`MCP_AUTH_CONFLICT`); a
101
+ `kind` nobody registers fails at compile time naming what is installed
102
+ (`MCP_AUTH_STRATEGY_UNKNOWN`); and no literal secret is accepted anywhere in the
103
+ block (`MCP_CREDENTIALS_INLINE`, and the rejection never repeats the value).
104
+
105
+ The authentication object is built **once per configured agent and shared by
106
+ every agent granted it**: the credential belongs to the deployment, so a
107
+ renewing strategy renews once rather than once per caller.
108
+
60
109
  ## Inbound — publishing your agent
61
110
 
62
111
  ```yaml
@@ -167,7 +167,7 @@ ai:
167
167
  bootstrap_ref: ${secrets:/agents/prod/agent-sales}
168
168
  ```
169
169
 
170
- `kind` names an entry point in the group `loom.ai.mcp_auth`; every other key in
170
+ `kind` names an entry point in the group `loom.ai.remote_auth`; every other key in
171
171
  the block is passed to it as a **keyword argument**. Loom registers three, all
172
172
  thin delegations to what the libraries already provide:
173
173
 
@@ -196,7 +196,7 @@ from **your own package**; loom does not change:
196
196
 
197
197
  ```toml
198
198
  # pyproject.toml of your own distribution
199
- [project.entry-points."loom.ai.mcp_auth"]
199
+ [project.entry-points."loom.ai.remote_auth"]
200
200
  agent-session = "my_package.auth:AgentSessionAuth"
201
201
  ```
202
202
 
@@ -254,6 +254,14 @@ server's read permissions to that prefix and log failed attempts per path.
254
254
  - A strategy that cannot be built from its settings fails at start-up with
255
255
  `MCP_AUTH_STRATEGY_INVALID`.
256
256
 
257
+ The group is `loom.ai.remote_auth`, not `loom.ai.mcp_auth`: one registry serves
258
+ 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.
264
+
257
265
  ### One instance per server
258
266
 
259
267
  The authentication object is built **once per server and shared by every agent
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "loom-kernel"
3
- version = "1.7.1"
3
+ version = "1.8.0"
4
4
  description = "Loom Python project"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -138,13 +138,15 @@ celery = [
138
138
  [project.entry-points."loom.ai.engines"]
139
139
  pydantic-ai = "loom.ai.engines.pydantic_ai.provider:PydanticAIEngineProvider"
140
140
 
141
- # Authentication strategies for outbound MCP connections. A deployment plugs
142
- # in its own from its own package under the same group; loom ships only these
143
- # three thin delegations. See docs/ai/mcp.md.
144
- [project.entry-points."loom.ai.mcp_auth"]
145
- oauth = "loom.ai.mcp_auth:standard_oauth"
146
- bearer = "loom.ai.mcp_auth:bearer_token"
147
- static = "loom.ai.mcp_auth:static_headers"
141
+ # Authentication strategies for the remote endpoints loom calls out to: MCP
142
+ # servers and A2A agents alike, since the contract is httpx.Auth and knows
143
+ # nothing of either protocol. A deployment plugs in its own from its own
144
+ # package under the same group; loom ships only these three thin delegations.
145
+ # See docs/ai/mcp.md and docs/ai/a2a.md.
146
+ [project.entry-points."loom.ai.remote_auth"]
147
+ oauth = "loom.ai.remote_auth:standard_oauth"
148
+ bearer = "loom.ai.remote_auth:bearer_token"
149
+ static = "loom.ai.remote_auth:static_headers"
148
150
 
149
151
  [project.entry-points."loom.etl.backends"]
150
152
  polars = "loom.etl.backends.polars.provider:PolarsProvider"
@@ -267,6 +269,11 @@ extend-immutable-calls = [
267
269
 
268
270
  [tool.pyright]
269
271
  pythonVersion = "3.11"
272
+ # src only, deliberately. Checking tests as well surfaces 294 errors across
273
+ # eight rules — mostly stubs that no longer satisfy the protocol they stand in
274
+ # for. That is real signal and worth burning down, but it is a project, not a
275
+ # flag flip: turning it on without the cleanup would make the gate meaningless
276
+ # on its first run. Tracked in specs/feature/quality/typecheck_tests.md.
270
277
  include = [
271
278
  "src",
272
279
  ]
@@ -350,7 +357,7 @@ markers = [
350
357
 
351
358
  [tool.commitizen]
352
359
  name = "cz_conventional_commits"
353
- version = "1.7.1"
360
+ version = "1.8.0"
354
361
  tag_format = "v$version"
355
362
  version_files = [
356
363
  "pyproject.toml:project.version",
@@ -25,7 +25,7 @@ sonar.coverage.exclusions=tests/**,tests/**/*,**/.github/**,docs/**,docs/**/*
25
25
  # String(), DateTime(), Numeric()
26
26
  #
27
27
  # Renaming any of them would be a breaking public API change.
28
- sonar.issue.ignore.multicriteria=e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,e18,e19,e20,e21,e22,e23,e24,e25,e26,e27,e28,e29,e30,e31,e32,e33,e34,e35,e36,e37,e38,e39,e40,e41,e42,e43,e44,e45,e46,e47,e48,e49,e50,e51
28
+ sonar.issue.ignore.multicriteria=e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,e18,e19,e20,e21,e22,e23,e24,e25,e26,e27,e28,e29,e30,e31,e32,e33,e34,e35,e36,e37,e38,e39,e40,e41,e42,e43,e44,e45,e48,e49,e50,e51
29
29
 
30
30
  # Use-case DSL markers: Input, Load, LoadById, Exists — S100 (method) + S1542 (function)
31
31
  sonar.issue.ignore.multicriteria.e1.ruleKey=python:S100
@@ -209,15 +209,6 @@ sonar.issue.ignore.multicriteria.e45.resourceKey=**/etl/declarative/target/_hist
209
209
  # reasoning as IntoHistory above: an options object would hide the very names a
210
210
  # reader needs, and for a wiring function the parameter list IS the contract —
211
211
  # it is what tells you, at a glance, everything the runtime is handed.
212
- #
213
- # TEMPORARY for two of them: runtime.py and a2a/server.py are scheduled to be
214
- # split by responsibility (runtime/{_lifecycle,_mcp,_limits,_health}.py and the
215
- # a2a binding already extracted). Both signatures shrink with that split, so
216
- # e46 and e47 should be removed then rather than inherited.
217
- sonar.issue.ignore.multicriteria.e46.ruleKey=python:S107
218
- sonar.issue.ignore.multicriteria.e46.resourceKey=**/ai/runtime.py
219
- sonar.issue.ignore.multicriteria.e47.ruleKey=python:S107
220
- sonar.issue.ignore.multicriteria.e47.resourceKey=**/ai/a2a/server.py
221
212
  sonar.issue.ignore.multicriteria.e48.ruleKey=python:S107
222
213
  sonar.issue.ignore.multicriteria.e48.resourceKey=**/ai/fastapi/endpoints.py
223
214
  sonar.issue.ignore.multicriteria.e49.ruleKey=python:S107
@@ -20,10 +20,10 @@ from loom.ai.compiler._plan import (
20
20
  AgentPlan,
21
21
  CompiledA2ACapability,
22
22
  CompiledCapability,
23
- CompiledMcpAuth,
24
23
  CompiledMcpCapability,
25
24
  CompiledOutput,
26
25
  CompiledPythonCapability,
26
+ CompiledRemoteAuth,
27
27
  CompiledSkillsCapability,
28
28
  CompiledSqlCapability,
29
29
  CompiledUsecaseCapability,
@@ -38,10 +38,10 @@ __all__ = [
38
38
  "AgentPlan",
39
39
  "CompiledA2ACapability",
40
40
  "CompiledCapability",
41
- "CompiledMcpAuth",
42
41
  "CompiledMcpCapability",
43
42
  "CompiledOutput",
44
43
  "CompiledPythonCapability",
44
+ "CompiledRemoteAuth",
45
45
  "CompiledSkillsCapability",
46
46
  "CompiledSqlCapability",
47
47
  "CompiledUsecaseCapability",
@@ -81,8 +81,12 @@ class CompiledSqlCapability(LoomFrozenStruct, frozen=True, kw_only=True):
81
81
  max_result_bytes: int
82
82
 
83
83
 
84
- class CompiledMcpAuth(LoomFrozenStruct, frozen=True, kw_only=True):
85
- """Authentication strategy of one MCP server, resolved to a name and settings.
84
+ class CompiledRemoteAuth(LoomFrozenStruct, frozen=True, kw_only=True):
85
+ """Authentication strategy of one remote endpoint, resolved to name and settings.
86
+
87
+ One struct serves both outbound transports, MCP servers and A2A agents, as
88
+ the one registry that builds it does: the strategy contract is
89
+ ``httpx.Auth``, which knows nothing of either protocol.
86
90
 
87
91
  ``kind`` is separated from the rest of the ``auth`` block once, here, so the
88
92
  engine never re-reads configuration to find out which strategy to build.
@@ -90,7 +94,7 @@ class CompiledMcpAuth(LoomFrozenStruct, frozen=True, kw_only=True):
90
94
  plan is a frozen, hashable value.
91
95
 
92
96
  Attributes:
93
- kind: Strategy name registered in the ``loom.ai.mcp_auth`` group.
97
+ kind: Strategy name registered in the ``loom.ai.remote_auth`` group.
94
98
  settings: The rest of the ``auth`` block, passed to the strategy as
95
99
  keyword arguments in declaration order.
96
100
  """
@@ -125,7 +129,7 @@ class CompiledMcpCapability(LoomFrozenStruct, frozen=True, kw_only=True):
125
129
  server: str
126
130
  url: str
127
131
  headers_ref: str | None = None
128
- auth: CompiledMcpAuth | None = None
132
+ auth: CompiledRemoteAuth | None = None
129
133
  timeout_ms: int = 20000
130
134
  include: tuple[str, ...] = ()
131
135
  exclude: tuple[str, ...] = ()
@@ -176,6 +180,9 @@ class CompiledA2ACapability(LoomFrozenStruct, frozen=True, kw_only=True):
176
180
  agent: Configured agent name, carried for the self-description.
177
181
  url: Validated ``https://`` remote agent URL, free of credentials.
178
182
  headers_ref: Reference to deployment-resolved headers; never a secret.
183
+ Applied to every request the client makes, the card fetch included.
184
+ auth: Named authentication strategy, mutually exclusive with
185
+ ``headers_ref``; ``None`` when the agent needs no credential.
179
186
  include: Skill names or glob patterns to expose; empty means all.
180
187
  exclude: Skill names or glob patterns to omit, applied after ``include``.
181
188
  """
@@ -185,6 +192,7 @@ class CompiledA2ACapability(LoomFrozenStruct, frozen=True, kw_only=True):
185
192
  agent: str
186
193
  url: str
187
194
  headers_ref: str | None = None
195
+ auth: CompiledRemoteAuth | None = None
188
196
  include: tuple[str, ...] = ()
189
197
  exclude: tuple[str, ...] = ()
190
198
 
@@ -23,9 +23,9 @@ from loom.ai._filters import select_names
23
23
  from loom.ai.compiler._plan import (
24
24
  CompiledA2ACapability,
25
25
  CompiledCapability,
26
- CompiledMcpAuth,
27
26
  CompiledMcpCapability,
28
27
  CompiledPythonCapability,
28
+ CompiledRemoteAuth,
29
29
  CompiledSkillsCapability,
30
30
  CompiledSqlCapability,
31
31
  CompiledUsecaseCapability,
@@ -221,7 +221,7 @@ def _compile_mcp(capability: McpCapability, context: _Context) -> _HandlerResult
221
221
  server=capability.server,
222
222
  url=server.url,
223
223
  headers_ref=server.headers_ref,
224
- auth=_compile_mcp_auth(server.auth),
224
+ auth=_compile_auth(server.auth),
225
225
  timeout_ms=server.timeout_ms,
226
226
  include=capability.include,
227
227
  exclude=capability.exclude,
@@ -230,16 +230,17 @@ def _compile_mcp(capability: McpCapability, context: _Context) -> _HandlerResult
230
230
  )
231
231
 
232
232
 
233
- def _compile_mcp_auth(auth: Mapping[str, str] | None) -> CompiledMcpAuth | None:
233
+ def _compile_auth(auth: Mapping[str, str] | None) -> CompiledRemoteAuth | None:
234
234
  """Split a validated ``auth`` block into the strategy name and its settings.
235
235
 
236
- Configuration already refused a block whose ``kind`` names no registered
237
- strategy, so the split is the only work left: ``kind`` selects the entry
238
- point and everything else becomes its keyword arguments.
236
+ Shared by the ``mcp`` and ``a2a`` grants: both endpoints declare the same
237
+ block. Configuration already refused a block whose ``kind`` names no
238
+ registered strategy, so the split is the only work left: ``kind`` selects
239
+ the entry point and everything else becomes its keyword arguments.
239
240
  """
240
241
  if auth is None:
241
242
  return None
242
- return CompiledMcpAuth(
243
+ return CompiledRemoteAuth(
243
244
  kind=auth["kind"],
244
245
  settings=tuple((key, value) for key, value in auth.items() if key != "kind"),
245
246
  )
@@ -254,6 +255,7 @@ def _compile_a2a(capability: A2ACapability, context: _Context) -> _HandlerResult
254
255
  agent=capability.agent,
255
256
  url=agent.url,
256
257
  headers_ref=agent.headers_ref,
258
+ auth=_compile_auth(agent.auth),
257
259
  include=capability.include,
258
260
  exclude=capability.exclude,
259
261
  ),
@@ -34,7 +34,7 @@ from loom.ai.errors import (
34
34
  policy_out_of_range,
35
35
  )
36
36
  from loom.ai.inference import InferenceTarget
37
- from loom.ai.mcp_auth import is_strategy_registered, registered_strategy_names
37
+ from loom.ai.remote_auth import is_strategy_registered, registered_strategy_names
38
38
  from loom.core.model import LoomFrozenStruct
39
39
 
40
40
  # Conservative allowlist for a secret *reference*: a name, path, ARN or key id
@@ -191,7 +191,7 @@ class McpServerConfig(LoomFrozenStruct, frozen=True, kw_only=True):
191
191
  here; a bearer token belongs in ``auth: {kind: bearer}``.
192
192
  Mutually exclusive with ``auth``.
193
193
  auth: Named authentication strategy and its settings, flattened:
194
- ``kind`` selects an entry point registered in ``loom.ai.mcp_auth``
194
+ ``kind`` selects an entry point registered in ``loom.ai.remote_auth``
195
195
  and every other key is passed to it as a keyword argument.
196
196
  Mutually exclusive with ``headers_ref``.
197
197
  timeout_ms: Deadline of a single call to this server.
@@ -206,14 +206,26 @@ class McpServerConfig(LoomFrozenStruct, frozen=True, kw_only=True):
206
206
  class A2AAgentConfig(LoomFrozenStruct, frozen=True, kw_only=True):
207
207
  """One named remote A2A agent (``ai.a2a_agents.<name>``).
208
208
 
209
+ The credential is declared exactly as an MCP server declares it, and for
210
+ the same reason: the artifact names the agent, the deployment says how to
211
+ authenticate to it.
212
+
209
213
  Attributes:
210
214
  url: ``https://`` agent URL, free of userinfo and query string.
211
215
  headers_ref: Reference to headers resolved by the secrets resolver.
212
- Never a literal secret.
216
+ Never a literal secret. The resolved payload must be a single
217
+ ``Name=value`` header pair, a shape checked at start-up rather than
218
+ here; a bearer token belongs in ``auth: {kind: bearer}``.
219
+ Mutually exclusive with ``auth``.
220
+ auth: Named authentication strategy and its settings, flattened:
221
+ ``kind`` selects an entry point registered in ``loom.ai.remote_auth``
222
+ and every other key is passed to it as a keyword argument.
223
+ Mutually exclusive with ``headers_ref``.
213
224
  """
214
225
 
215
226
  url: str
216
227
  headers_ref: str | None = None
228
+ auth: dict[str, str] | None = None
217
229
 
218
230
 
219
231
  class AgentEndpointConfig(LoomFrozenStruct, frozen=True, kw_only=True):
@@ -342,19 +354,22 @@ def _validate_headers_ref(component: str, headers_ref: str | None) -> list[Agent
342
354
  return [mcp_credentials_inline(component, "headers_ref")]
343
355
 
344
356
 
345
- def _validate_auth(component: str, server: McpServerConfig) -> list[AgentCompilationIssue]:
346
- """Collect the issues of one server's ``auth`` block.
347
-
348
- Two credentials on one connection are ambiguous, so ``headers_ref`` and
349
- ``auth`` are refused together; every setting in the block is held to the
350
- same fail-closed reference test as ``headers_ref``, so no literal secret
351
- reaches loom by the back door; and an unregistered strategy is refused here
352
- rather than at the first message in production.
357
+ def _validate_auth(
358
+ component: str, headers_ref: str | None, auth: Mapping[str, str] | None
359
+ ) -> list[AgentCompilationIssue]:
360
+ """Collect the issues of one endpoint's ``auth`` block.
361
+
362
+ Applied to MCP servers and A2A agents alike, since both declare the same
363
+ block and resolve it through the same registry. Two credentials on one
364
+ connection are ambiguous, so ``headers_ref`` and ``auth`` are refused
365
+ together; every setting in the block is held to the same fail-closed
366
+ reference test as ``headers_ref``, so no literal secret reaches loom by the
367
+ back door; and an unregistered strategy is refused here rather than at the
368
+ first message in production.
353
369
  """
354
- auth = server.auth
355
370
  if auth is None:
356
371
  return []
357
- if server.headers_ref is not None:
372
+ if headers_ref is not None:
358
373
  return [mcp_auth_conflict(component)]
359
374
  issues = [
360
375
  # The rejected value is deliberately absent from the issue, as for
@@ -378,7 +393,7 @@ def _validate_mcp_servers(
378
393
  component = f"ai.mcp_servers.{name}"
379
394
  issues.extend(_validate_remote_url(component, server.url, mcp_url_invalid))
380
395
  issues.extend(_validate_headers_ref(component, server.headers_ref))
381
- issues.extend(_validate_auth(component, server))
396
+ issues.extend(_validate_auth(component, server.headers_ref, server.auth))
382
397
  if not _TIMEOUT_MS_MIN <= server.timeout_ms <= _TIMEOUT_MS_MAX:
383
398
  issues.append(
384
399
  policy_out_of_range(
@@ -401,4 +416,5 @@ def _validate_a2a_agents(
401
416
  component = f"ai.a2a_agents.{name}"
402
417
  issues.extend(_validate_remote_url(component, agent.url, a2a_url_invalid))
403
418
  issues.extend(_validate_headers_ref(component, agent.headers_ref))
419
+ issues.extend(_validate_auth(component, agent.headers_ref, agent.auth))
404
420
  return issues
@@ -14,6 +14,13 @@ Two entry points, one connection recipe:
14
14
  per delegation, bounded by ``tool_timeout_ms`` like the call it precedes, and
15
15
  it buys a stateless toolset — no cached client, no connection nobody closes.
16
16
 
17
+ The remote agent's credential is applied to the HTTP client itself, not to a
18
+ single request, so **every** call carries it — the card fetch included. The card
19
+ is the first request made, and an agent that authenticates its card endpoint
20
+ would otherwise fail start-up before a skill was ever called. The credential is
21
+ resolved by :mod:`loom.ai.remote_auth`, the same registry the MCP transport
22
+ uses; this module only carries the result to the client.
23
+
17
24
  **The remote agent's reply is untrusted input (FR-044a).** It is returned as a
18
25
  tool *value*, never merged into instructions; it is never logged; and no byte
19
26
  of it reaches an error message, so a remote agent cannot dictate what the
@@ -34,8 +41,10 @@ from typing import TYPE_CHECKING, Final
34
41
  from loom.ai._filters import matches, select_names
35
42
  from loom.ai.compiler import CompiledA2ACapability
36
43
  from loom.ai.errors import AgentCompilationError, provider_not_installed
44
+ from loom.ai.remote_auth import headers_from_ref, shared_a2a_auth
37
45
 
38
46
  if TYPE_CHECKING:
47
+ import httpx
39
48
  from a2a.client import Client
40
49
  from a2a.types.a2a_pb2 import AgentCard
41
50
 
@@ -57,6 +66,42 @@ def require_a2a_sdk() -> None:
57
66
  raise AgentCompilationError([provider_not_installed("a2a", "ai-a2a")])
58
67
 
59
68
 
69
+ def build_a2a_http_client(capability: CompiledA2ACapability) -> httpx.AsyncClient:
70
+ """Build the HTTP client of one grant, carrying the credential it declared.
71
+
72
+ Fixed headers from ``headers_ref``, or the object the named strategy
73
+ builds — one instance per configured agent, shared by every agent granted
74
+ it. Both are set on the client, so the card fetch presents them exactly as
75
+ the delegations that follow do. A remote agent that declares neither is
76
+ connected exactly as before, which is what lets one artifact move between
77
+ environments unchanged.
78
+
79
+ Args:
80
+ capability: Compiled grant carrying the validated remote agent URL and
81
+ the credential resolved for it.
82
+
83
+ Returns:
84
+ The unopened client the card resolver and the session both speak
85
+ through; the caller closes it.
86
+
87
+ Raises:
88
+ AgentCompilationError: When the ``headers_ref`` payload is not one
89
+ ``Name=value`` pair, or the named strategy cannot be built.
90
+
91
+ Example::
92
+
93
+ async with build_a2a_http_client(capability) as http_client:
94
+ ...
95
+ """
96
+ import httpx
97
+
98
+ component = f"a2a agent '{capability.agent}'"
99
+ return httpx.AsyncClient(
100
+ headers=headers_from_ref(component, capability.headers_ref),
101
+ auth=shared_a2a_auth(capability.agent, capability.auth),
102
+ )
103
+
104
+
60
105
  @asynccontextmanager
61
106
  async def create_a2a_client(capability: CompiledA2ACapability) -> AsyncIterator[Client]:
62
107
  """Open one session against a remote agent, card fetched and checked.
@@ -66,14 +111,16 @@ async def create_a2a_client(capability: CompiledA2ACapability) -> AsyncIterator[
66
111
  of it and a failure is reported as a coded start-up issue.
67
112
 
68
113
  Args:
69
- capability: Compiled grant carrying the validated ``https://`` URL and
70
- the ``include``/``exclude`` filter selecting the skills the
71
- artifact delegates to.
114
+ capability: Compiled grant carrying the validated ``https://`` URL, the
115
+ credential the deployment declared for the remote agent, and the
116
+ ``include``/``exclude`` filter selecting the skills the artifact
117
+ delegates to.
72
118
 
73
119
  Yields:
74
120
  The connected client, closed together with its HTTP client on exit.
75
121
 
76
122
  Raises:
123
+ AgentCompilationError: When the grant's credential cannot be resolved.
77
124
  AgentCardResolutionError: When the card cannot be fetched, decoded or
78
125
  validated.
79
126
  ValueError: When the card advertises no transport this client speaks,
@@ -83,10 +130,9 @@ async def create_a2a_client(capability: CompiledA2ACapability) -> AsyncIterator[
83
130
 
84
131
  runtime = AgentRuntime(..., a2a_client_factory=create_a2a_client)
85
132
  """
86
- import httpx
87
133
  from a2a.client import A2ACardResolver, ClientConfig, ClientFactory
88
134
 
89
- async with httpx.AsyncClient() as http_client:
135
+ async with build_a2a_http_client(capability) as http_client:
90
136
  card = await A2ACardResolver(http_client, capability.url).get_agent_card()
91
137
  _reject_ungranted_card(capability, card)
92
138
  config = ClientConfig(
@@ -14,7 +14,7 @@ Two entry points, one connection recipe — the shape :mod:`._a2a` already uses:
14
14
  Both build the same ``MCPToolset``: the connection rules of one grant — its
15
15
  validated URL and its credential — live here once, so start-up cannot validate
16
16
  a server the run would not reach. The credential itself is resolved by
17
- :mod:`loom.ai.mcp_auth`, which is where the deployment's own strategy plugs in;
17
+ :mod:`loom.ai.remote_auth`, which is where the deployment's own strategy plugs in;
18
18
  this module only carries the result to the client.
19
19
 
20
20
  The MCP client ships as an optional ``pydantic-ai-slim`` dependency, so it is
@@ -30,7 +30,7 @@ from typing import TYPE_CHECKING, Any
30
30
 
31
31
  from loom.ai.compiler import CompiledMcpCapability
32
32
  from loom.ai.errors import AgentCompilationError, provider_not_installed
33
- from loom.ai.mcp_auth import headers_from_ref, shared_auth
33
+ from loom.ai.remote_auth import headers_from_ref, shared_mcp_auth
34
34
 
35
35
  if TYPE_CHECKING:
36
36
  from pydantic_ai.mcp import MCPToolset
@@ -100,7 +100,7 @@ def build_mcp_toolset(capability: CompiledMcpCapability) -> MCPToolset[Any]:
100
100
  raise AgentCompilationError([provider_not_installed("mcp", "mcp")]) from exc
101
101
  component = f"mcp server '{capability.server}'"
102
102
  headers = headers_from_ref(component, capability.headers_ref) or None
103
- auth = shared_auth(capability.server, capability.auth)
103
+ auth = shared_mcp_auth(capability.server, capability.auth)
104
104
  toolset: MCPToolset[Any] = MCPToolset(capability.url, headers=headers, auth=auth)
105
105
  return toolset
106
106
 
@@ -421,13 +421,13 @@ def mcp_auth_conflict(component: str) -> AgentCompilationIssue:
421
421
  def mcp_auth_strategy_unknown(
422
422
  component: str, kind: str, available: Sequence[str]
423
423
  ) -> AgentCompilationIssue:
424
- """A named auth strategy resolves to no entry point in ``loom.ai.mcp_auth``."""
424
+ """A named auth strategy resolves to no entry point in ``loom.ai.remote_auth``."""
425
425
  installed = ", ".join(available) if available else "none"
426
426
  return AgentCompilationIssue(
427
427
  code=AgentErrorCode.MCP_AUTH_STRATEGY_UNKNOWN,
428
428
  message=(
429
429
  f"{component}: auth strategy '{kind}' is not registered in entry-point "
430
- f"group 'loom.ai.mcp_auth'; registered: {installed}"
430
+ f"group 'loom.ai.remote_auth'; registered: {installed}"
431
431
  ),
432
432
  component=component,
433
433
  field="auth.kind",
@@ -439,7 +439,7 @@ def mcp_auth_strategy_invalid(kind: str, reason: str) -> AgentCompilationIssue:
439
439
  return AgentCompilationIssue(
440
440
  code=AgentErrorCode.MCP_AUTH_STRATEGY_INVALID,
441
441
  message=f"auth strategy '{kind}' is unusable: {reason}",
442
- component=f"loom.ai.mcp_auth:{kind}",
442
+ component=f"loom.ai.remote_auth:{kind}",
443
443
  field="auth.kind",
444
444
  )
445
445