loom-kernel 2.5.0__tar.gz → 2.7.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 (1473) hide show
  1. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/CHANGELOG.md +119 -0
  2. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/PKG-INFO +3 -1
  3. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/ai/artifacts.md +10 -2
  4. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/ai/providers.md +36 -2
  5. loom_kernel-2.7.0/docs/architecture/clean-architecture.md +44 -0
  6. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/etl/pipelines.md +11 -0
  7. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/guides/etl.md +84 -1
  8. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/pyproject.toml +6 -1
  9. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/abc.py +16 -0
  10. loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/_a2a.py +79 -0
  11. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_capabilities.py +14 -10
  12. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_engine.py +2 -0
  13. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_events.py +5 -0
  14. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_instructions.py +29 -12
  15. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_mcp.py +28 -13
  16. loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/_models.py +137 -0
  17. loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/extras/__init__.py +8 -0
  18. loom_kernel-2.5.0/src/loom/ai/engines/pydantic_ai/_a2a.py → loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/extras/a2a.py +23 -64
  19. loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +31 -0
  20. loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/extras/mcp.py +8 -0
  21. loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/extras/skills.py +7 -0
  22. loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/__init__.py +9 -0
  23. loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/_shared.py +58 -0
  24. loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +18 -0
  25. loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +24 -0
  26. loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/gateway.py +17 -0
  27. loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/openai.py +18 -0
  28. loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +31 -0
  29. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/errors.py +26 -0
  30. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/fastapi/response.py +3 -2
  31. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/registry.py +11 -7
  32. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_handle.py +1 -0
  33. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_lifecycle.py +1 -0
  34. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/gateway.py +3 -4
  35. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/serializer.py +0 -3
  36. loom_kernel-2.7.0/src/loom/core/config/_boto3.py +22 -0
  37. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/_resolver_utils.py +36 -0
  38. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/secrets.py +4 -11
  39. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/ssm.py +2 -11
  40. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/runtime.py +2 -12
  41. loom_kernel-2.7.0/src/loom/core/plugins/optional.py +66 -0
  42. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/_backends/_polars.py +23 -36
  43. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/_cleaners.py +4 -22
  44. loom_kernel-2.7.0/src/loom/etl/checkpoint/_options.py +128 -0
  45. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/_store.py +12 -2
  46. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/_wiring.py +13 -0
  47. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/_flow_yaml.py +28 -1
  48. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/_meta.py +35 -1
  49. loom_kernel-2.7.0/src/loom/prefect/_placeholders.py +126 -0
  50. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/deploy/_discovery.py +30 -1
  51. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/deploy/_yaml_etls.py +10 -3
  52. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_assemble.py +57 -3
  53. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_backfill.py +1 -0
  54. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_backfill_body.py +50 -46
  55. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_body.py +25 -23
  56. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_common.py +21 -1
  57. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_factory.py +1 -0
  58. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_maintenance.py +14 -13
  59. loom_kernel-2.7.0/src/loom/prefect/flow/_params.py +93 -0
  60. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_run_name.py +10 -22
  61. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/agents.py +3 -1
  62. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/runner.py +12 -1
  63. loom_kernel-2.7.0/tests/helpers/extras.py +50 -0
  64. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_a2a_auth_wiring.py +2 -1
  65. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_a2a_capability.py +8 -6
  66. loom_kernel-2.7.0/tests/unit/ai/engines/test_missing_extras.py +69 -0
  67. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_binding.py +65 -2
  68. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_errors.py +2 -2
  69. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_instructions.py +4 -4
  70. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_limits.py +1 -1
  71. loom_kernel-2.7.0/tests/unit/ai/engines/test_pydantic_ai_provider_details.py +90 -0
  72. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_agent_handle.py +40 -4
  73. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_skills_extra.py +2 -2
  74. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_bootstrap_resolvers.py +3 -4
  75. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_default_resolvers.py +4 -5
  76. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_secrets.py +3 -1
  77. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_runtime.py +7 -15
  78. loom_kernel-2.7.0/tests/unit/core/plugins/test_optional.py +38 -0
  79. loom_kernel-2.7.0/tests/unit/etl/checkpoint/backends/test_checkpoint_polars.py +119 -0
  80. loom_kernel-2.7.0/tests/unit/etl/checkpoint/test_cleaners.py +179 -0
  81. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_backend_factory.py +38 -0
  82. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_runner_resolvers.py +3 -4
  83. loom_kernel-2.7.0/tests/unit/prefect/test_flow_trigger.py +248 -0
  84. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_maintenance_flow.py +1 -1
  85. loom_kernel-2.7.0/tests/unit/prefect/test_placeholders.py +186 -0
  86. loom_kernel-2.7.0/tests/unit/prefect/test_run_params.py +441 -0
  87. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_yaml_etls.py +19 -0
  88. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_fastapi_auto_resolvers.py +3 -4
  89. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_runner_resolvers.py +4 -6
  90. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/uv.lock +50 -18
  91. loom_kernel-2.5.0/docs/architecture/clean-architecture.md +0 -10
  92. loom_kernel-2.5.0/src/loom/ai/engines/pydantic_ai/_models.py +0 -210
  93. loom_kernel-2.5.0/src/loom/prefect/_placeholders.py +0 -83
  94. loom_kernel-2.5.0/tests/unit/etl/checkpoint/backends/test_checkpoint_polars.py +0 -33
  95. loom_kernel-2.5.0/tests/unit/etl/checkpoint/test_cleaners.py +0 -81
  96. loom_kernel-2.5.0/tests/unit/prefect/test_placeholders.py +0 -93
  97. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.github/workflows/ci-main.yml +0 -0
  98. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.github/workflows/ci-pr.yml +0 -0
  99. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.github/workflows/docs.yml +0 -0
  100. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.github/workflows/release.yml +0 -0
  101. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.gitignore +0 -0
  102. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.pre-commit-config.yaml +0 -0
  103. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.readthedocs.yaml +0 -0
  104. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/LICENSE +0 -0
  105. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/Makefile +0 -0
  106. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/README.md +0 -0
  107. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/codecov.yml +0 -0
  108. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docker-compose.local.yaml +0 -0
  109. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/_static/.gitkeep +0 -0
  110. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/_static/custom.css +0 -0
  111. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/_static/logo-transparent.png +0 -0
  112. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/_static/logo.svg +0 -0
  113. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/ai/a2a.md +0 -0
  114. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/ai/mcp.md +0 -0
  115. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/ai/observability.md +0 -0
  116. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/ai/overview.md +0 -0
  117. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/architecture/adr/README.md +0 -0
  118. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/architecture/overview.md +0 -0
  119. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/conf.py +0 -0
  120. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/etl/examples.md +0 -0
  121. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/etl/testing.md +0 -0
  122. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/examples-repo/index.md +0 -0
  123. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/getting-started/etl.md +0 -0
  124. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/getting-started/rest.md +0 -0
  125. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/getting-started/streaming.md +0 -0
  126. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/guides/autocrud.md +0 -0
  127. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/guides/celery.md +0 -0
  128. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/guides/fake-repo-examples.md +0 -0
  129. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/guides/quickstart.md +0 -0
  130. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/guides/use-case-dsl.md +0 -0
  131. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/index.rst +0 -0
  132. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/overview.md +0 -0
  133. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/ai.rst +0 -0
  134. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/core.rst +0 -0
  135. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/etl.rst +0 -0
  136. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/repository.rst +0 -0
  137. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/rest.rst +0 -0
  138. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/streaming.rst +0 -0
  139. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/testing.rst +0 -0
  140. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/index.rst +0 -0
  141. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/requirements.txt +0 -0
  142. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/autocrud.md +0 -0
  143. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/cache.md +0 -0
  144. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/celery.md +0 -0
  145. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/examples.md +0 -0
  146. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/identity.md +0 -0
  147. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/persistence-backends.md +0 -0
  148. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/sql.md +0 -0
  149. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/testing.md +0 -0
  150. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/use-case-dsl.md +0 -0
  151. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/streaming/bytewax.md +0 -0
  152. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/streaming/delivery.md +0 -0
  153. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/streaming/tracing.md +0 -0
  154. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/scripts/ci/merge_test_results.py +0 -0
  155. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/scripts/release/README.md +0 -0
  156. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/sonar-project.properties +0 -0
  157. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/__init__.py +0 -0
  158. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/__init__.py +0 -0
  159. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/_concurrency.py +0 -0
  160. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/_filters.py +0 -0
  161. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/_roles.py +0 -0
  162. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/_startup.py +0 -0
  163. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/_transport.py +0 -0
  164. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/_usecase.py +0 -0
  165. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/__init__.py +0 -0
  166. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/_binding.py +0 -0
  167. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/_handlers.py +0 -0
  168. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/_rpc.py +0 -0
  169. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/card.py +0 -0
  170. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/events.py +0 -0
  171. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/server.py +0 -0
  172. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/__init__.py +0 -0
  173. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/_compiler.py +0 -0
  174. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/_plan.py +0 -0
  175. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/__init__.py +0 -0
  176. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_capabilities.py +0 -0
  177. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_conversation.py +0 -0
  178. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_feedable.py +0 -0
  179. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_hook.py +0 -0
  180. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_instructions.py +0 -0
  181. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_limits.py +0 -0
  182. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_model_role.py +0 -0
  183. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_output.py +0 -0
  184. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_state.py +0 -0
  185. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/config.py +0 -0
  186. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/declarative/__init__.py +0 -0
  187. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/declarative/_envelope.py +0 -0
  188. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/declarative/_schema.py +0 -0
  189. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/declarative/_v1.py +0 -0
  190. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
  191. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/describe.py +0 -0
  192. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/__init__.py +0 -0
  193. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
  194. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
  195. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
  196. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
  197. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
  198. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
  199. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
  200. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
  201. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
  202. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
  203. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
  204. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
  205. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/fastapi/__init__.py +0 -0
  206. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/fastapi/endpoints.py +0 -0
  207. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/fastapi/streaming.py +0 -0
  208. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/inference.py +0 -0
  209. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/remote_auth.py +0 -0
  210. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/__init__.py +0 -0
  211. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_bounded.py +0 -0
  212. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_chain.py +0 -0
  213. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_conversation.py +0 -0
  214. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_grants.py +0 -0
  215. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_health.py +0 -0
  216. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_hooks.py +0 -0
  217. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_limits.py +0 -0
  218. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_mcp.py +0 -0
  219. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/validate/__init__.py +0 -0
  220. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/validate/__main__.py +0 -0
  221. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/__init__.py +0 -0
  222. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/auto.py +0 -0
  223. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/bootstrap.py +0 -0
  224. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/config.py +0 -0
  225. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/constants.py +0 -0
  226. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/runner.py +0 -0
  227. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/service.py +0 -0
  228. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/async_bridge.py +0 -0
  229. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/backend/__init__.py +0 -0
  230. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/backend/core_model.py +0 -0
  231. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/backend/protocol.py +0 -0
  232. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/backend/sqlalchemy.py +0 -0
  233. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/bootstrap/__init__.py +0 -0
  234. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/bootstrap/bootstrap.py +0 -0
  235. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/bootstrap/kernel.py +0 -0
  236. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/__init__.py +0 -0
  237. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/_batching.py +0 -0
  238. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/_single_flight.py +0 -0
  239. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/abc/__init__.py +0 -0
  240. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/abc/backend.py +0 -0
  241. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/abc/config.py +0 -0
  242. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/abc/dependency.py +0 -0
  243. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/calls.py +0 -0
  244. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/codec.py +0 -0
  245. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/decorators.py +0 -0
  246. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/dependency.py +0 -0
  247. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/errors.py +0 -0
  248. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/keys.py +0 -0
  249. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/memory.py +0 -0
  250. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/repository.py +0 -0
  251. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/result_codec.py +0 -0
  252. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/wiring.py +0 -0
  253. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/command/__init__.py +0 -0
  254. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/command/adapter.py +0 -0
  255. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/command/base.py +0 -0
  256. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/command/field.py +0 -0
  257. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/command/introspection.py +0 -0
  258. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/compiler.py +0 -0
  259. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/__init__.py +0 -0
  260. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/_includes.py +0 -0
  261. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/binder.py +0 -0
  262. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/configurable.py +0 -0
  263. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/context.py +0 -0
  264. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/errors.py +0 -0
  265. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/keys.py +0 -0
  266. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/loader.py +0 -0
  267. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/model.py +0 -0
  268. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/observability.py +0 -0
  269. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/resolver.py +0 -0
  270. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/contracts/__init__.py +0 -0
  271. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/contracts/manifest.py +0 -0
  272. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/di/__init__.py +0 -0
  273. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/di/container.py +0 -0
  274. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/di/scope.py +0 -0
  275. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/discovery/__init__.py +0 -0
  276. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/discovery/_utils.py +0 -0
  277. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/discovery/base.py +0 -0
  278. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/discovery/interfaces.py +0 -0
  279. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/discovery/manifest.py +0 -0
  280. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/discovery/modules.py +0 -0
  281. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/__init__.py +0 -0
  282. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/compilable.py +0 -0
  283. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/compiler.py +0 -0
  284. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/events.py +0 -0
  285. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/executor.py +0 -0
  286. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/metrics.py +0 -0
  287. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/plan.py +0 -0
  288. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/post_commit.py +0 -0
  289. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/errors/__init__.py +0 -0
  290. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/errors/codes.py +0 -0
  291. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/errors/errors.py +0 -0
  292. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/expr/__init__.py +0 -0
  293. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/expr/eval.py +0 -0
  294. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/expr/nodes.py +0 -0
  295. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/expr/refs.py +0 -0
  296. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/identity/__init__.py +0 -0
  297. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/identity/context.py +0 -0
  298. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/identity/identity.py +0 -0
  299. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/identity/issuer.py +0 -0
  300. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/identity/wire.py +0 -0
  301. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/introspection/__init__.py +0 -0
  302. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/introspection/base.py +0 -0
  303. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/introspection/describe.py +0 -0
  304. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/job/__init__.py +0 -0
  305. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/job/callback.py +0 -0
  306. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/job/context.py +0 -0
  307. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/job/handle.py +0 -0
  308. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/job/job.py +0 -0
  309. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/job/service.py +0 -0
  310. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/logger/__init__.py +0 -0
  311. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/logger/abc.py +0 -0
  312. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/logger/config.py +0 -0
  313. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/logger/registry.py +0 -0
  314. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/logger/structlogger.py +0 -0
  315. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/__init__.py +0 -0
  316. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/_loom_type.py +0 -0
  317. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/base.py +0 -0
  318. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/convert.py +0 -0
  319. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/enums.py +0 -0
  320. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/field.py +0 -0
  321. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/introspection.py +0 -0
  322. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/projection.py +0 -0
  323. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/relation.py +0 -0
  324. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/struct.py +0 -0
  325. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/timestamped.py +0 -0
  326. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/types.py +0 -0
  327. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/types_postgres.py +0 -0
  328. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/__init__.py +0 -0
  329. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/config.py +0 -0
  330. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/event.py +0 -0
  331. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/observer/__init__.py +0 -0
  332. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/observer/noop.py +0 -0
  333. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/observer/otel.py +0 -0
  334. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/observer/structlog.py +0 -0
  335. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/otel_ids.py +0 -0
  336. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/protocol.py +0 -0
  337. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/span.py +0 -0
  338. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/topology.py +0 -0
  339. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/persistence/__init__.py +0 -0
  340. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/persistence/abc.py +0 -0
  341. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/persistence/none.py +0 -0
  342. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/persistence/registry.py +0 -0
  343. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/plugins/__init__.py +0 -0
  344. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/plugins/entrypoints.py +0 -0
  345. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/projection/__init__.py +0 -0
  346. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/projection/loaders.py +0 -0
  347. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/projection/runtime.py +0 -0
  348. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/__init__.py +0 -0
  349. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/__init__.py +0 -0
  350. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/cursor.py +0 -0
  351. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/errors.py +0 -0
  352. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/query.py +0 -0
  353. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/query_compiler.py +0 -0
  354. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/repo_for.py +0 -0
  355. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/repository.py +0 -0
  356. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/session_scope.py +0 -0
  357. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/dynamodb/__init__.py +0 -0
  358. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/dynamodb/backend.py +0 -0
  359. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/dynamodb/registry.py +0 -0
  360. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/dynamodb/repository.py +0 -0
  361. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/dynamodb/uow.py +0 -0
  362. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/__init__.py +0 -0
  363. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/backend.py +0 -0
  364. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/ids.py +0 -0
  365. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/query_compiler.py +0 -0
  366. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/registry.py +0 -0
  367. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/repository.py +0 -0
  368. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/uow.py +0 -0
  369. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/values.py +0 -0
  370. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mutation.py +0 -0
  371. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/registration.py +0 -0
  372. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/registry.py +0 -0
  373. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
  374. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/backend.py +0 -0
  375. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
  376. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
  377. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
  378. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
  379. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
  380. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
  381. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
  382. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
  383. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
  384. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
  385. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
  386. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
  387. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
  388. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
  389. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
  390. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
  391. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
  392. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
  393. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
  394. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/response/__init__.py +0 -0
  395. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/response/base.py +0 -0
  396. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/routing/__init__.py +0 -0
  397. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/routing/ref.py +0 -0
  398. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/routing/resolver.py +0 -0
  399. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/runner.py +0 -0
  400. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/schema/__init__.py +0 -0
  401. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/schema/schema_mode.py +0 -0
  402. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/__init__.py +0 -0
  403. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/abc/__init__.py +0 -0
  404. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/abc/contracts.py +0 -0
  405. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/abc/errors.py +0 -0
  406. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/caller_bound.py +0 -0
  407. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/clickhouse/__init__.py +0 -0
  408. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/clickhouse/_client.py +0 -0
  409. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/clickhouse/executor.py +0 -0
  410. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/clickhouse/registry.py +0 -0
  411. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/config.py +0 -0
  412. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/roles.py +0 -0
  413. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/service.py +0 -0
  414. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/symbols.py +0 -0
  415. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/tracing/__init__.py +0 -0
  416. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/tracing/context.py +0 -0
  417. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/transaction.py +0 -0
  418. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/transport/__init__.py +0 -0
  419. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/transport/adapter.py +0 -0
  420. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/uow/__init__.py +0 -0
  421. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/uow/abc.py +0 -0
  422. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/uow/context.py +0 -0
  423. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/__init__.py +0 -0
  424. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/_predicates.py +0 -0
  425. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/agent_markers.py +0 -0
  426. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/compute.py +0 -0
  427. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/constants.py +0 -0
  428. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/factory.py +0 -0
  429. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/field_ref.py +0 -0
  430. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/invoker.py +0 -0
  431. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/keys.py +0 -0
  432. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/markers.py +0 -0
  433. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/mcp_markers.py +0 -0
  434. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/registry.py +0 -0
  435. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/rule.py +0 -0
  436. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/use_case.py +0 -0
  437. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/__init__.py +0 -0
  438. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/__init__.py +0 -0
  439. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_format_registry.py +0 -0
  440. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
  441. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_historify/_common.py +0 -0
  442. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_historify/_log.py +0 -0
  443. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
  444. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
  445. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
  446. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_merge.py +0 -0
  447. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_path_template.py +0 -0
  448. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_predicate.py +0 -0
  449. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
  450. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
  451. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
  452. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_write_policy.py +0 -0
  453. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/__init__.py +0 -0
  454. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
  455. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
  456. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_historify.py +0 -0
  457. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
  458. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_reader.py +0 -0
  459. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_schema.py +0 -0
  460. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
  461. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_streaming.py +0 -0
  462. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_writer.py +0 -0
  463. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/provider.py +0 -0
  464. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/__init__.py +0 -0
  465. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
  466. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/_historify.py +0 -0
  467. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/_reader.py +0 -0
  468. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/_schema.py +0 -0
  469. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
  470. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/_writer.py +0 -0
  471. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/provider.py +0 -0
  472. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/__init__.py +0 -0
  473. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
  474. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/_paths.py +0 -0
  475. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/_scope.py +0 -0
  476. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/__init__.py +0 -0
  477. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_binding.py +0 -0
  478. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_compiler.py +0 -0
  479. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_errors.py +0 -0
  480. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_plan.py +0 -0
  481. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_validators.py +0 -0
  482. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
  483. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_validators_step.py +0 -0
  484. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/__init__.py +0 -0
  485. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/_format.py +0 -0
  486. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/_read_options.py +0 -0
  487. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/_utils.py +0 -0
  488. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/_write_options.py +0 -0
  489. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
  490. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/expr/_params.py +0 -0
  491. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/expr/_predicate.py +0 -0
  492. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
  493. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
  494. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/source/__init__.py +0 -0
  495. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/source/_from.py +0 -0
  496. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
  497. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
  498. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
  499. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/source/_specs.py +0 -0
  500. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/__init__.py +0 -0
  501. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_client.py +0 -0
  502. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_file.py +0 -0
  503. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
  504. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
  505. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
  506. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
  507. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
  508. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
  509. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_into.py +0 -0
  510. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
  511. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_table.py +0 -0
  512. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_temp.py +0 -0
  513. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/executor/__init__.py +0 -0
  514. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/executor/_dispatcher.py +0 -0
  515. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/executor/_executor.py +0 -0
  516. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/__init__.py +0 -0
  517. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/_registry.py +0 -0
  518. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/__init__.py +0 -0
  519. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_clickhouse.py +0 -0
  520. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_dynamodb.py +0 -0
  521. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
  522. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
  523. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_mongo.py +0 -0
  524. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
  525. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
  526. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
  527. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_serialization.py +0 -0
  528. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/targets/__init__.py +0 -0
  529. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/targets/_clickhouse.py +0 -0
  530. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/__init__.py +0 -0
  531. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/_config.py +0 -0
  532. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/_observer.py +0 -0
  533. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/_records.py +0 -0
  534. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/sinks/__init__.py +0 -0
  535. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
  536. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/sinks/_table.py +0 -0
  537. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/sinks/_writer.py +0 -0
  538. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/__init__.py +0 -0
  539. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/_builder.py +0 -0
  540. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/_ops.py +0 -0
  541. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/_protocol.py +0 -0
  542. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/_runner.py +0 -0
  543. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/_step.py +0 -0
  544. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/backends/__init__.py +0 -0
  545. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
  546. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/__init__.py +0 -0
  547. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_generics.py +0 -0
  548. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_params.py +0 -0
  549. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
  550. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_process.py +0 -0
  551. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_sql.py +0 -0
  552. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_step.py +0 -0
  553. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_step_client.py +0 -0
  554. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
  555. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/__init__.py +0 -0
  556. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/_providers.py +0 -0
  557. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/config_loader.py +0 -0
  558. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/core.py +0 -0
  559. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/errors.py +0 -0
  560. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/filtering.py +0 -0
  561. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runtime/__init__.py +0 -0
  562. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runtime/contracts.py +0 -0
  563. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/schema/__init__.py +0 -0
  564. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/schema/_contract.py +0 -0
  565. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/schema/_schema.py +0 -0
  566. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/storage/__init__.py +0 -0
  567. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/storage/_config.py +0 -0
  568. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/storage/_file_locator.py +0 -0
  569. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/storage/_locator.py +0 -0
  570. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/storage/routing.py +0 -0
  571. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/testing/__init__.py +0 -0
  572. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/testing/_result.py +0 -0
  573. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/testing/_runners.py +0 -0
  574. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/testing/_scenario.py +0 -0
  575. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/testing/_stubs.py +0 -0
  576. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/testing/spark.py +0 -0
  577. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/__init__.py +0 -0
  578. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/_async.py +0 -0
  579. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/_config.py +0 -0
  580. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/_ctx.py +0 -0
  581. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/_summary.py +0 -0
  582. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/deploy/__init__.py +0 -0
  583. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/deploy/_schedule.py +0 -0
  584. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/deploy/entrypoint.py +0 -0
  585. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/__init__.py +0 -0
  586. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_hooks.py +0 -0
  587. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_runtime.py +0 -0
  588. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_signature.py +0 -0
  589. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_stages.py +0 -0
  590. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/manifest/__init__.py +0 -0
  591. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/manifest/_model.py +0 -0
  592. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/manifest/_s3.py +0 -0
  593. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/manifest/_store.py +0 -0
  594. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/notify/__init__.py +0 -0
  595. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/notify/_event.py +0 -0
  596. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/notify/_factory.py +0 -0
  597. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/notify/_port.py +0 -0
  598. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/notify/_slack.py +0 -0
  599. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/observer/__init__.py +0 -0
  600. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/observer/_flow.py +0 -0
  601. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/observer/_logging_bridge.py +0 -0
  602. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/observer/_manifest.py +0 -0
  603. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/observer/_task_run.py +0 -0
  604. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prometheus/__init__.py +0 -0
  605. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prometheus/_instruments.py +0 -0
  606. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prometheus/adapter.py +0 -0
  607. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prometheus/kafka.py +0 -0
  608. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prometheus/lifecycle.py +0 -0
  609. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prometheus/middleware.py +0 -0
  610. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/py.typed +0 -0
  611. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/__init__.py +0 -0
  612. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/_body.py +0 -0
  613. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/adapter.py +0 -0
  614. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/auth/__init__.py +0 -0
  615. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/auth/abc.py +0 -0
  616. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/auth/config.py +0 -0
  617. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/auth/jwt.py +0 -0
  618. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/auth/middleware.py +0 -0
  619. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/autocrud.py +0 -0
  620. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/compiler.py +0 -0
  621. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/config.py +0 -0
  622. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/constants.py +0 -0
  623. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/cors.py +0 -0
  624. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/errors.py +0 -0
  625. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/__init__.py +0 -0
  626. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/_errors.py +0 -0
  627. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/_exclusions.py +0 -0
  628. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/app.py +0 -0
  629. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/auto.py +0 -0
  630. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/health.py +0 -0
  631. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/openapi.py +0 -0
  632. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/response.py +0 -0
  633. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/router_runtime.py +0 -0
  634. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/sql.py +0 -0
  635. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/middleware.py +0 -0
  636. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/model.py +0 -0
  637. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/rest_adapter.py +0 -0
  638. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/__init__.py +0 -0
  639. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/__init__.py +0 -0
  640. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_adapter.py +0 -0
  641. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
  642. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
  643. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_dlq.py +0 -0
  644. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
  645. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_errors.py +0 -0
  646. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_operators.py +0 -0
  647. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
  648. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
  649. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
  650. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
  651. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
  652. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
  653. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
  654. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
  655. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
  656. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
  657. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
  658. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
  659. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/runner.py +0 -0
  660. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/__init__.py +0 -0
  661. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/_bindings.py +0 -0
  662. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/_compiler.py +0 -0
  663. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/_errors.py +0 -0
  664. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/_plan.py +0 -0
  665. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/phases/build_plan.py +0 -0
  666. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/phases/validate.py +0 -0
  667. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/core/__init__.py +0 -0
  668. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/core/_errors.py +0 -0
  669. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/core/_exceptions.py +0 -0
  670. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/core/_message.py +0 -0
  671. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/core/_tracing.py +0 -0
  672. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/core/_typing.py +0 -0
  673. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/graph/__init__.py +0 -0
  674. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/graph/_flow.py +0 -0
  675. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/__init__.py +0 -0
  676. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_codec.py +0 -0
  677. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_config.py +0 -0
  678. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_errors.py +0 -0
  679. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
  680. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_message.py +0 -0
  681. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_record.py +0 -0
  682. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_wire.py +0 -0
  683. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
  684. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/client/_consumer.py +0 -0
  685. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/client/_producer.py +0 -0
  686. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
  687. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/client/_retry.py +0 -0
  688. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
  689. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/message/_consumer.py +0 -0
  690. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/message/_producer.py +0 -0
  691. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/message/_protocol.py +0 -0
  692. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/mongo/__init__.py +0 -0
  693. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
  694. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/mongo/_config.py +0 -0
  695. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/mongo/_event.py +0 -0
  696. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/mongo/_normalize.py +0 -0
  697. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/__init__.py +0 -0
  698. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_boundary.py +0 -0
  699. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_branches.py +0 -0
  700. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_broadcast.py +0 -0
  701. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
  702. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_decompose.py +0 -0
  703. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_expand_routes.py +0 -0
  704. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
  705. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_fork.py +0 -0
  706. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_helpers.py +0 -0
  707. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_mongo.py +0 -0
  708. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_protocols.py +0 -0
  709. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_router.py +0 -0
  710. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_shape.py +0 -0
  711. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_sink.py +0 -0
  712. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_step.py +0 -0
  713. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_table/__init__.py +0 -0
  714. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_table/common.py +0 -0
  715. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_table/config.py +0 -0
  716. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_with.py +0 -0
  717. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/refs.py +0 -0
  718. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/testing.py +0 -0
  719. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/__init__.py +0 -0
  720. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/golden.py +0 -0
  721. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/http_harness.py +0 -0
  722. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/in_memory.py +0 -0
  723. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/repository_harness.py +0 -0
  724. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/__init__.py +0 -0
  725. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/conftest.py +0 -0
  726. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/contract/__init__.py +0 -0
  727. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/contract/ai/__init__.py +0 -0
  728. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/contract/ai/test_contract_fake.py +0 -0
  729. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/contract/ai/test_contract_pydantic_ai.py +0 -0
  730. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/contract/observability/__init__.py +0 -0
  731. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/contract/observability/test_otel_sdk_contract.py +0 -0
  732. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/__init__.py +0 -0
  733. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/config/split_storage/common.yaml +0 -0
  734. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/config/split_storage/original.yaml +0 -0
  735. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/config/split_storage/storage.yaml +0 -0
  736. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/config/split_storage/tables/billing.yaml +0 -0
  737. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/config/split_storage/tables/sales.yaml +0 -0
  738. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/prefect/__init__.py +0 -0
  739. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/prefect/etls/billing.yaml +0 -0
  740. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/prefect/etls/daily_orders.yaml +0 -0
  741. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/prefect/etls/orders_reconcile.yaml +0 -0
  742. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/prefect/pipelines.py +0 -0
  743. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/prefect/raising.py +0 -0
  744. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/golden/__init__.py +0 -0
  745. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/golden/baselines/.gitkeep +0 -0
  746. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/golden/outputs/.gitkeep +0 -0
  747. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/golden/plans/.gitkeep +0 -0
  748. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/helpers/__init__.py +0 -0
  749. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/helpers/pydantic_ai_engine.py +0 -0
  750. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/helpers/remote_auth_plugin.py +0 -0
  751. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/helpers/spans.py +0 -0
  752. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/__init__.py +0 -0
  753. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/__init__.py +0 -0
  754. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/_agents_only_app.py +0 -0
  755. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/_entrypoints.py +0 -0
  756. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/_no_marker_app.py +0 -0
  757. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/conftest.py +0 -0
  758. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/mcp_stdio_server.py +0 -0
  759. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_a2a.py +0 -0
  760. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_agent_call_chain.py +0 -0
  761. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_agent_marker_grants_integration.py +0 -0
  762. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_agent_marker_integration.py +0 -0
  763. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_agent_marker_test_double.py +0 -0
  764. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_agent_specs_source.py +0 -0
  765. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_auto_a2a.py +0 -0
  766. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_auto_agents_only.py +0 -0
  767. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_auto_client_factories.py +0 -0
  768. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_auto_gate.py +0 -0
  769. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_auto_without_sqlalchemy.py +0 -0
  770. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_capabilities.py +0 -0
  771. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_conversation.py +0 -0
  772. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_describe.py +0 -0
  773. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_endpoints.py +0 -0
  774. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_grant_wiring.py +0 -0
  775. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_health_probe.py +0 -0
  776. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_hooks.py +0 -0
  777. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_limits.py +0 -0
  778. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_live_provider.py +0 -0
  779. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_mcp_connect_timeout_wiring.py +0 -0
  780. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_mcp_end_to_end.py +0 -0
  781. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_mcp_session_recovery.py +0 -0
  782. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_mcp_shared_connection.py +0 -0
  783. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_mcp_stdio_end_to_end.py +0 -0
  784. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_native_escape_hatch_integration.py +0 -0
  785. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_no_agent_marker_containment.py +0 -0
  786. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_provider_portability.py +0 -0
  787. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_remote_auth_wiring.py +0 -0
  788. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_runtime.py +0 -0
  789. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_runtime_remote_clients.py +0 -0
  790. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_state_and_instructions.py +0 -0
  791. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_streaming.py +0 -0
  792. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_transport.py +0 -0
  793. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_use_case_mcp_end_to_end.py +0 -0
  794. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_use_case_mcp_health_gap.py +0 -0
  795. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_use_case_mcp_marker_test_double.py +0 -0
  796. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_use_case_mcp_resolver.py +0 -0
  797. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_use_case_mcp_runtime.py +0 -0
  798. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_zero_agent_use_case_mcp.py +0 -0
  799. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/celery_bootstrap/__init__.py +0 -0
  800. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/celery_bootstrap/config/conf.celery.integration.yaml +0 -0
  801. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/celery_bootstrap/test_auto_create_app_integration.py +0 -0
  802. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/celery_bootstrap/test_bootstrap_worker.py +0 -0
  803. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/conftest.py +0 -0
  804. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/__init__.py +0 -0
  805. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/bootstrap/__init__.py +0 -0
  806. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/bootstrap/test_bootstrap_integration.py +0 -0
  807. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/repository/__init__.py +0 -0
  808. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/repository/sqlalchemy/__init__.py +0 -0
  809. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/repository/sqlalchemy/conftest.py +0 -0
  810. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/repository/sqlalchemy/test_cache_integration.py +0 -0
  811. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/repository/sqlalchemy/test_repository_integration.py +0 -0
  812. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/rest/__init__.py +0 -0
  813. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/rest/test_auto_interface_integration.py +0 -0
  814. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/rest/test_fastapi_app_integration.py +0 -0
  815. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/rest/test_rest_error_mapping.py +0 -0
  816. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/rest/test_rest_observability.py +0 -0
  817. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/use_case/__init__.py +0 -0
  818. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/use_case/test_caller_bound_sql_integration.py +0 -0
  819. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/use_case/test_custom_repository_integration.py +0 -0
  820. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/use_case/test_use_case_crud_integration.py +0 -0
  821. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/etl/__init__.py +0 -0
  822. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/etl/test_runner_integration.py +0 -0
  823. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/__init__.py +0 -0
  824. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/config/__init__.py +0 -0
  825. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/config/conf.interfaces.yaml +0 -0
  826. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/config/conf.manifest.yaml +0 -0
  827. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/config/conf.modules.yaml +0 -0
  828. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/config/conf.yaml +0 -0
  829. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/main.py +0 -0
  830. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/manifest.py +0 -0
  831. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/__init__.py +0 -0
  832. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/category/__init__.py +0 -0
  833. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/category/model.py +0 -0
  834. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/category/schemas.py +0 -0
  835. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/interface.py +0 -0
  836. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/jobs.py +0 -0
  837. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/model.py +0 -0
  838. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/relations.py +0 -0
  839. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/repository.py +0 -0
  840. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/repository_contract.py +0 -0
  841. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/review/__init__.py +0 -0
  842. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/review/model.py +0 -0
  843. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/review/schemas.py +0 -0
  844. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/schemas.py +0 -0
  845. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/use_cases.py +0 -0
  846. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/__init__.py +0 -0
  847. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/__init__.py +0 -0
  848. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/conftest.py +0 -0
  849. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_bulk.py +0 -0
  850. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_conftest.py +0 -0
  851. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_datetime.py +0 -0
  852. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_pagination.py +0 -0
  853. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_query.py +0 -0
  854. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_read.py +0 -0
  855. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_transactions.py +0 -0
  856. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_uow.py +0 -0
  857. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_write.py +0 -0
  858. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/rest/__init__.py +0 -0
  859. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/rest/conftest.py +0 -0
  860. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/rest/test_yaml_interfaces.py +0 -0
  861. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/sql/__init__.py +0 -0
  862. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/sql/init/01_users_roles.sql +0 -0
  863. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/sql/test_clickhouse_integration.py +0 -0
  864. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/streaming/__init__.py +0 -0
  865. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/streaming/kafka/__init__.py +0 -0
  866. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/streaming/kafka/conftest.py +0 -0
  867. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/streaming/kafka/test_partitioned_source_integration.py +0 -0
  868. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/streaming/kafka/test_source_contract_integration.py +0 -0
  869. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/streaming/test_into_table_integration.py +0 -0
  870. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/support/__init__.py +0 -0
  871. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/support/logical_repo_fixtures.py +0 -0
  872. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/__init__.py +0 -0
  873. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/_resolver_stubs.py +0 -0
  874. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/__init__.py +0 -0
  875. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/compiler/__init__.py +0 -0
  876. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/compiler/test_state_phase.py +0 -0
  877. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/conftest.py +0 -0
  878. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/__init__.py +0 -0
  879. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_capability_span_nesting.py +0 -0
  880. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_native_tools.py +0 -0
  881. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_conversation.py +0 -0
  882. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_cost_enforcement.py +0 -0
  883. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_escape_hatch.py +0 -0
  884. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_failures.py +0 -0
  885. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_mcp_concurrency.py +0 -0
  886. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_mcp_session_recovery.py +0 -0
  887. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_mcp_timeouts.py +0 -0
  888. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_native_output.py +0 -0
  889. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_output_check.py +0 -0
  890. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_shape_override.py +0 -0
  891. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_state.py +0 -0
  892. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_streaming_off.py +0 -0
  893. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_translation.py +0 -0
  894. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_usage_limits.py +0 -0
  895. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_user_prompt.py +0 -0
  896. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_python_capability.py +0 -0
  897. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_streaming_capability_conflict.py +0 -0
  898. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_usage_propagation.py +0 -0
  899. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fastapi/__init__.py +0 -0
  900. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fastapi/test_state_decode.py +0 -0
  901. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/README.md +0 -0
  902. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-a2a-agent/agent.yaml +0 -0
  903. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-mcp-agent/agent.yaml +0 -0
  904. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-native-agent/agent.yaml +0 -0
  905. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-python-agent/agent.yaml +0 -0
  906. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-skills-agent/agent.yaml +0 -0
  907. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-skills-agent/skills/release-notes/SKILL.md +0 -0
  908. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-sql-agent/agent.yaml +0 -0
  909. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-usecase-agent/agent.yaml +0 -0
  910. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/full-agent/agent.yaml +0 -0
  911. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/full-agent/skills/severity-rubric/SKILL.md +0 -0
  912. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/minimal-agent/agent.yaml +0 -0
  913. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/output-type-ref-agent/agent.yaml +0 -0
  914. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/__init__.py +0 -0
  915. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/__init__.py +0 -0
  916. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/conversations.py +0 -0
  917. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/incidents.py +0 -0
  918. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/invoices.py +0 -0
  919. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/pydantic_invoices.py +0 -0
  920. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/triage.py +0 -0
  921. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/unsupported.py +0 -0
  922. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/__init__.py +0 -0
  923. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/broken.py +0 -0
  924. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/geo.py +0 -0
  925. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/metrics.py +0 -0
  926. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/params.py +0 -0
  927. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/skills_root/shared/group-changes/SKILL.md +0 -0
  928. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/skills_root/shared/tone-of-voice/SKILL.md +0 -0
  929. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/__init__.py +0 -0
  930. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/conftest.py +0 -0
  931. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_capabilities.py +0 -0
  932. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_conversation.py +0 -0
  933. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_hook.py +0 -0
  934. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_instructions.py +0 -0
  935. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_limits.py +0 -0
  936. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_model_role.py +0 -0
  937. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_output.py +0 -0
  938. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_remote_auth_plan.py +0 -0
  939. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_validate_cli.py +0 -0
  940. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/__init__.py +0 -0
  941. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_grants.py +0 -0
  942. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_hook_command.py +0 -0
  943. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_lifecycle_mcp_wiring.py +0 -0
  944. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_loader_command.py +0 -0
  945. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_mcp_session.py +0 -0
  946. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_native_guard.py +0 -0
  947. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_state_channel.py +0 -0
  948. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_a2a_base_url.py +0 -0
  949. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_a2a_card.py +0 -0
  950. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_agent_handle_contract.py +0 -0
  951. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_compiler.py +0 -0
  952. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_compiler_offline.py +0 -0
  953. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_concurrency.py +0 -0
  954. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_config.py +0 -0
  955. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_conversation.py +0 -0
  956. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_envelope.py +0 -0
  957. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_hook.py +0 -0
  958. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_instructions.py +0 -0
  959. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_native.py +0 -0
  960. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_policy_caps.py +0 -0
  961. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_state.py +0 -0
  962. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_describe.py +0 -0
  963. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_error_catalogue_totality.py +0 -0
  964. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_error_factories.py +0 -0
  965. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_fake_engine.py +0 -0
  966. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_identity_notice.py +0 -0
  967. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_loopback_plaintext.py +0 -0
  968. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_native_capability.py +0 -0
  969. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_no_extras_import.py +0 -0
  970. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_public_surface.py +0 -0
  971. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_registry.py +0 -0
  972. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_remote_auth.py +0 -0
  973. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_remote_auth_settings.py +0 -0
  974. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_run_error_hook.py +0 -0
  975. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_schema_emission.py +0 -0
  976. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_secret_containment.py +0 -0
  977. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_spec_v1_corpus.py +0 -0
  978. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_usecase_helpers.py +0 -0
  979. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/__init__.py +0 -0
  980. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_agent_marker_rejection.py +0 -0
  981. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_async_runtime.py +0 -0
  982. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_bootstrap.py +0 -0
  983. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_bootstrap_cache.py +0 -0
  984. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_bootstrap_without_sqlalchemy.py +0 -0
  985. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_mcp_marker_rejection.py +0 -0
  986. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_jobs/__init__.py +0 -0
  987. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_jobs/test_auto.py +0 -0
  988. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_jobs/test_celery_service.py +0 -0
  989. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_jobs/test_config.py +0 -0
  990. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_jobs/test_identity_propagation.py +0 -0
  991. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_jobs/test_runner.py +0 -0
  992. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ci/test_merge_test_results.py +0 -0
  993. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ci/test_workflow_supply_chain_contract.py +0 -0
  994. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/__init__.py +0 -0
  995. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/backend/__init__.py +0 -0
  996. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/backend/test_backend_compiler.py +0 -0
  997. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/bootstrap/__init__.py +0 -0
  998. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/bootstrap/test_bootstrap.py +0 -0
  999. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/bootstrap/test_bootstrap_metrics.py +0 -0
  1000. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/bootstrap/test_kernel.py +0 -0
  1001. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/__init__.py +0 -0
  1002. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/_doubles.py +0 -0
  1003. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/_toolset_module.py +0 -0
  1004. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/conftest.py +0 -0
  1005. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_bounded_memory.py +0 -0
  1006. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cache_call.py +0 -0
  1007. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cache_call_decorator.py +0 -0
  1008. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cache_call_toolset.py +0 -0
  1009. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cache_import_containment.py +0 -0
  1010. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cache_query_codec.py +0 -0
  1011. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cached_repository.py +0 -0
  1012. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cached_repository_pydantic.py +0 -0
  1013. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_call_codec.py +0 -0
  1014. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_config_wiring.py +0 -0
  1015. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_dependency_bump.py +0 -0
  1016. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_gateway_config.py +0 -0
  1017. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_gateway_typed_get.py +0 -0
  1018. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_gateway_write_errors.py +0 -0
  1019. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_index_refill.py +0 -0
  1020. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_invalidation_granularity.py +0 -0
  1021. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_single_flight.py +0 -0
  1022. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_ttl_jitter.py +0 -0
  1023. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_wiring.py +0 -0
  1024. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/command/__init__.py +0 -0
  1025. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/command/test_command_base.py +0 -0
  1026. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/command/test_command_field.py +0 -0
  1027. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/command/test_command_patch.py +0 -0
  1028. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/command/test_introspection.py +0 -0
  1029. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/__init__.py +0 -0
  1030. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/conftest.py +0 -0
  1031. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_binder.py +0 -0
  1032. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_config.py +0 -0
  1033. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_configurable.py +0 -0
  1034. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_context.py +0 -0
  1035. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_includes.py +0 -0
  1036. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_keyed_collections.py +0 -0
  1037. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_resolver_utils.py +0 -0
  1038. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_ssm.py +0 -0
  1039. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/conftest.py +0 -0
  1040. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/di/__init__.py +0 -0
  1041. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/di/test_container.py +0 -0
  1042. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/discovery/__init__.py +0 -0
  1043. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/discovery/test_interfaces.py +0 -0
  1044. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/discovery/test_manifest.py +0 -0
  1045. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/discovery/test_modules.py +0 -0
  1046. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/__init__.py +0 -0
  1047. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/_lifecycle_doubles.py +0 -0
  1048. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/contract/__init__.py +0 -0
  1049. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/contract/conftest.py +0 -0
  1050. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/contract/test_dispatch.py +0 -0
  1051. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/contract/test_lifecycle.py +0 -0
  1052. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/contract/test_nesting.py +0 -0
  1053. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_agent_marker.py +0 -0
  1054. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_audit_regressions.py +0 -0
  1055. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_caller_binding.py +0 -0
  1056. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_compiler.py +0 -0
  1057. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_compiler_mcp_marker.py +0 -0
  1058. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_executor.py +0 -0
  1059. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_executor_mcp_marker.py +0 -0
  1060. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_executor_trace.py +0 -0
  1061. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_executor_uow.py +0 -0
  1062. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_metrics.py +0 -0
  1063. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_plan.py +0 -0
  1064. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_plan_resolution.py +0 -0
  1065. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_post_commit.py +0 -0
  1066. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_post_commit_shield.py +0 -0
  1067. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_post_commit_teardown_guard.py +0 -0
  1068. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/errors/__init__.py +0 -0
  1069. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/errors/test_errors.py +0 -0
  1070. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/expr/__init__.py +0 -0
  1071. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/expr/test_expr.py +0 -0
  1072. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/identity/__init__.py +0 -0
  1073. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/identity/test_context.py +0 -0
  1074. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/identity/test_identity.py +0 -0
  1075. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/identity/test_wire.py +0 -0
  1076. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/introspection/__init__.py +0 -0
  1077. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/introspection/test_describe.py +0 -0
  1078. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/__init__.py +0 -0
  1079. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/conftest.py +0 -0
  1080. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/test_callback.py +0 -0
  1081. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/test_context.py +0 -0
  1082. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/test_handle.py +0 -0
  1083. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/test_inline_service.py +0 -0
  1084. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/test_job.py +0 -0
  1085. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/logger/__init__.py +0 -0
  1086. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/logger/test_config.py +0 -0
  1087. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/logger/test_registry.py +0 -0
  1088. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/__init__.py +0 -0
  1089. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_annotation_resolution.py +0 -0
  1090. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_convert.py +0 -0
  1091. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_introspection_helpers.py +0 -0
  1092. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_loom_type.py +0 -0
  1093. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_loom_type_import_containment.py +0 -0
  1094. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_model.py +0 -0
  1095. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_struct.py +0 -0
  1096. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_timestamped.py +0 -0
  1097. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/__init__.py +0 -0
  1098. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_message_id_generator.py +0 -0
  1099. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_observers.py +0 -0
  1100. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_optional_otel_sdk.py +0 -0
  1101. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_otel_loader_branches.py +0 -0
  1102. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_provider_modes.py +0 -0
  1103. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_tracing_characterisation.py +0 -0
  1104. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/persistence/__init__.py +0 -0
  1105. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/persistence/test_registry.py +0 -0
  1106. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/plugins/__init__.py +0 -0
  1107. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/plugins/test_entrypoints.py +0 -0
  1108. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/plugins/test_import_containment.py +0 -0
  1109. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/projection/__init__.py +0 -0
  1110. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/projection/test_descriptors.py +0 -0
  1111. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/projection/test_runtime.py +0 -0
  1112. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/__init__.py +0 -0
  1113. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/abc/__init__.py +0 -0
  1114. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/abc/conftest.py +0 -0
  1115. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/abc/test_cursor.py +0 -0
  1116. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/abc/test_query.py +0 -0
  1117. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/abc/test_repository_contract.py +0 -0
  1118. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/__init__.py +0 -0
  1119. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/conftest.py +0 -0
  1120. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_bulk.py +0 -0
  1121. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_cache.py +0 -0
  1122. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_pagination.py +0 -0
  1123. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_query.py +0 -0
  1124. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_read.py +0 -0
  1125. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_uow.py +0 -0
  1126. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_write.py +0 -0
  1127. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/__init__.py +0 -0
  1128. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/_fake.py +0 -0
  1129. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/conftest.py +0 -0
  1130. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/test_backend.py +0 -0
  1131. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/test_registry.py +0 -0
  1132. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/test_repository.py +0 -0
  1133. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/test_uow.py +0 -0
  1134. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/__init__.py +0 -0
  1135. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/_fake.py +0 -0
  1136. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/conftest.py +0 -0
  1137. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/test_backend.py +0 -0
  1138. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/test_fake_collection.py +0 -0
  1139. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/test_query_compiler.py +0 -0
  1140. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/test_registry.py +0 -0
  1141. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/test_repository.py +0 -0
  1142. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/test_uow.py +0 -0
  1143. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/__init__.py +0 -0
  1144. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/conftest.py +0 -0
  1145. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_backend.py +0 -0
  1146. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_bulk_create.py +0 -0
  1147. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_cursor_pagination.py +0 -0
  1148. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_loaders.py +0 -0
  1149. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_offset_pagination.py +0 -0
  1150. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_query_compiler_protocol.py +0 -0
  1151. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_repository.py +0 -0
  1152. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_transaction_signal.py +0 -0
  1153. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_transactional.py +0 -0
  1154. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_transactional_post_commit.py +0 -0
  1155. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_transactional_shield.py +0 -0
  1156. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_typed_columns.py +0 -0
  1157. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/test_registration.py +0 -0
  1158. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/routing/__init__.py +0 -0
  1159. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/routing/test_routing.py +0 -0
  1160. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/__init__.py +0 -0
  1161. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/_fakes.py +0 -0
  1162. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/conftest.py +0 -0
  1163. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_caller_bound.py +0 -0
  1164. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_clickhouse_executor.py +0 -0
  1165. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_clickhouse_transport.py +0 -0
  1166. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_config.py +0 -0
  1167. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_isolation.py +0 -0
  1168. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_null_service.py +0 -0
  1169. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_pagination_limits.py +0 -0
  1170. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_registry_lifecycle.py +0 -0
  1171. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_role_policy.py +0 -0
  1172. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/test_async_bridge.py +0 -0
  1173. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/test_compiler_contracts.py +0 -0
  1174. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/test_runner_contracts.py +0 -0
  1175. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/tracing/__init__.py +0 -0
  1176. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/tracing/test_context.py +0 -0
  1177. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/uow/__init__.py +0 -0
  1178. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/uow/conftest.py +0 -0
  1179. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/uow/test_executor_uow.py +0 -0
  1180. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/uow/test_sqlalchemy_uow.py +0 -0
  1181. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/uow/test_uow_protocols.py +0 -0
  1182. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/__init__.py +0 -0
  1183. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_compute.py +0 -0
  1184. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_factory.py +0 -0
  1185. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_field_ref.py +0 -0
  1186. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_invoker.py +0 -0
  1187. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_markers.py +0 -0
  1188. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_mcp_markers.py +0 -0
  1189. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_rule.py +0 -0
  1190. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_use_case.py +0 -0
  1191. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/__init__.py +0 -0
  1192. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/__init__.py +0 -0
  1193. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/_historify_contract.py +0 -0
  1194. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_empty_write_warning.py +0 -0
  1195. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_historify_common.py +0 -0
  1196. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_path_template.py +0 -0
  1197. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/__init__.py +0 -0
  1198. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/conftest.py +0 -0
  1199. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_apply_schema.py +0 -0
  1200. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_backend.py +0 -0
  1201. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_dtype.py +0 -0
  1202. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_file_writer.py +0 -0
  1203. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_historify_polars.py +0 -0
  1204. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_predicate_pushdown.py +0 -0
  1205. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_provider_optional_mongo.py +0 -0
  1206. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_reader_columns.py +0 -0
  1207. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_reader_json_columns.py +0 -0
  1208. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_step_execution.py +0 -0
  1209. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_streaming_write.py +0 -0
  1210. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_update_writer.py +0 -0
  1211. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_upsert_writer.py +0 -0
  1212. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_writer_null_schema.py +0 -0
  1213. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_writer_to_frame.py +0 -0
  1214. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/__init__.py +0 -0
  1215. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/conftest.py +0 -0
  1216. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/test_dtype.py +0 -0
  1217. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/test_historify_spark.py +0 -0
  1218. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/test_session_configuration.py +0 -0
  1219. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/test_spark_apply_schema.py +0 -0
  1220. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/test_step_execution.py +0 -0
  1221. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/test_writer_to_frame.py +0 -0
  1222. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_unsupported_format_contract.py +0 -0
  1223. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_write_policy_historify.py +0 -0
  1224. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/checkpoint/__init__.py +0 -0
  1225. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/checkpoint/backends/__init__.py +0 -0
  1226. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/checkpoint/test_checkpoint_paths.py +0 -0
  1227. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/checkpoint/test_store.py +0 -0
  1228. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/client_step/__init__.py +0 -0
  1229. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/client_step/test_client_step.py +0 -0
  1230. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/__init__.py +0 -0
  1231. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_catalog_validator.py +0 -0
  1232. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_compiler.py +0 -0
  1233. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_compiler_catalog.py +0 -0
  1234. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_compiler_upsert.py +0 -0
  1235. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_errors.py +0 -0
  1236. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_errors_additional_factories.py +0 -0
  1237. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_errors_runtime_factories.py +0 -0
  1238. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_file_template_validator.py +0 -0
  1239. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_historify_validator.py +0 -0
  1240. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_param_exprs_validator.py +0 -0
  1241. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_plan_traversal.py +0 -0
  1242. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_step_validator.py +0 -0
  1243. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_structural.py +0 -0
  1244. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_temp_validator.py +0 -0
  1245. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_upsert_validator.py +0 -0
  1246. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/conftest.py +0 -0
  1247. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/__init__.py +0 -0
  1248. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/__init__.py +0 -0
  1249. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_clickhouse_reader.py +0 -0
  1250. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_dynamodb_predicate.py +0 -0
  1251. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_dynamodb_reader.py +0 -0
  1252. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_from_clickhouse.py +0 -0
  1253. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_from_dynamodb.py +0 -0
  1254. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_from_mongo.py +0 -0
  1255. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_mongo_predicate.py +0 -0
  1256. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_mongo_reader.py +0 -0
  1257. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_mongo_reader_memory.py +0 -0
  1258. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/targets/__init__.py +0 -0
  1259. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/targets/test_clickhouse_writer.py +0 -0
  1260. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/targets/test_into_clickhouse.py +0 -0
  1261. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_history_target.py +0 -0
  1262. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_source.py +0 -0
  1263. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_source_json.py +0 -0
  1264. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_source_options.py +0 -0
  1265. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_target.py +0 -0
  1266. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_utils.py +0 -0
  1267. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_variants.py +0 -0
  1268. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_writer_registry.py +0 -0
  1269. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/lineage/test_observer.py +0 -0
  1270. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/lineage/test_records.py +0 -0
  1271. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/lineage/test_store.py +0 -0
  1272. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/__init__.py +0 -0
  1273. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/backends/__init__.py +0 -0
  1274. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/backends/test_delta_rs.py +0 -0
  1275. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/conftest.py +0 -0
  1276. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/test_builder.py +0 -0
  1277. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/test_runner.py +0 -0
  1278. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/test_step.py +0 -0
  1279. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/pipeline/__init__.py +0 -0
  1280. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/pipeline/test_pipeline_process.py +0 -0
  1281. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/pipeline/test_proxy.py +0 -0
  1282. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/pipeline/test_step.py +0 -0
  1283. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/schema/__init__.py +0 -0
  1284. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/schema/test_contract.py +0 -0
  1285. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/schema/test_schema.py +0 -0
  1286. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/schema/test_table.py +0 -0
  1287. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/sql/__init__.py +0 -0
  1288. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/sql/test_merge.py +0 -0
  1289. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/sql/test_predicate.py +0 -0
  1290. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/sql/test_predicate_dialect.py +0 -0
  1291. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/sql/test_sql_runtime.py +0 -0
  1292. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/__init__.py +0 -0
  1293. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_io_protocols.py +0 -0
  1294. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_locator.py +0 -0
  1295. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_observability_and_protocols.py +0 -0
  1296. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_route_build.py +0 -0
  1297. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_schema_readers.py +0 -0
  1298. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_storage_config.py +0 -0
  1299. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_storage_config_mapping.py +0 -0
  1300. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_storage_profiles.py +0 -0
  1301. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_config_loader.py +0 -0
  1302. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_executor.py +0 -0
  1303. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_executor_tracing.py +0 -0
  1304. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_format_registry.py +0 -0
  1305. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_module_contracts.py +0 -0
  1306. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_public_api_discovery.py +0 -0
  1307. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_record_schema_coverage.py +0 -0
  1308. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_runner.py +0 -0
  1309. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_runner_errors.py +0 -0
  1310. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_spark_testing.py +0 -0
  1311. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_split_storage.py +0 -0
  1312. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/testing/__init__.py +0 -0
  1313. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/testing/test_runners.py +0 -0
  1314. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/testing/test_scenario_and_stubs.py +0 -0
  1315. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/testing/test_spark_helpers.py +0 -0
  1316. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/__init__.py +0 -0
  1317. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_backfill_flow.py +0 -0
  1318. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_config.py +0 -0
  1319. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_ctx.py +0 -0
  1320. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_discovery_config.py +0 -0
  1321. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_entrypoint.py +0 -0
  1322. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_etl_flow.py +0 -0
  1323. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_logging_bridge.py +0 -0
  1324. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_manifest.py +0 -0
  1325. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_manifest_s3.py +0 -0
  1326. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_notify.py +0 -0
  1327. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_observer.py +0 -0
  1328. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_task_run_observer.py +0 -0
  1329. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_yaml_loader.py +0 -0
  1330. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prometheus/__init__.py +0 -0
  1331. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prometheus/test_adapter.py +0 -0
  1332. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prometheus/test_instruments.py +0 -0
  1333. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prometheus/test_middleware.py +0 -0
  1334. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/release/test_release_workflow_contract.py +0 -0
  1335. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/__init__.py +0 -0
  1336. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/_fixture_app.py +0 -0
  1337. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_app_hardening.py +0 -0
  1338. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_auth_middleware.py +0 -0
  1339. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_auth_rejection_logging.py +0 -0
  1340. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_autocrud.py +0 -0
  1341. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_autocrud_capabilities.py +0 -0
  1342. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_cors.py +0 -0
  1343. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_create_app_cache.py +0 -0
  1344. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_fastapi_auto_agent_markers.py +0 -0
  1345. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_fastapi_auto_logger.py +0 -0
  1346. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_fastapi_auto_mcp_markers.py +0 -0
  1347. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_fastapi_auto_persistence.py +0 -0
  1348. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_health.py +0 -0
  1349. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_jwt_issuer.py +0 -0
  1350. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_jwt_middleware.py +0 -0
  1351. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_middleware.py +0 -0
  1352. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_persistence_boundary.py +0 -0
  1353. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_pydantic_adapter.py +0 -0
  1354. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_request_hardening.py +0 -0
  1355. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_response.py +0 -0
  1356. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_rest_adapter.py +0 -0
  1357. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_rest_compiler.py +0 -0
  1358. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_rest_config.py +0 -0
  1359. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_rest_model.py +0 -0
  1360. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_route_rbac.py +0 -0
  1361. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_router_identity.py +0 -0
  1362. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_router_runtime.py +0 -0
  1363. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_sql_container_registration.py +0 -0
  1364. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_sql_endpoint.py +0 -0
  1365. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_sql_endpoint_auth_gate.py +0 -0
  1366. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_sql_endpoint_roles.py +0 -0
  1367. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_sql_serialization.py +0 -0
  1368. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/__init__.py +0 -0
  1369. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/__init__.py +0 -0
  1370. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/cases.py +0 -0
  1371. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/conftest.py +0 -0
  1372. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_adapter.py +0 -0
  1373. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_batch_key.py +0 -0
  1374. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_bytewax_dispatcher.py +0 -0
  1375. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_collect_batch.py +0 -0
  1376. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_dlq.py +0 -0
  1377. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_error_boundary.py +0 -0
  1378. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_fanout_accounting.py +0 -0
  1379. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_import_without_sqlalchemy.py +0 -0
  1380. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_operators.py +0 -0
  1381. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_resource_manager.py +0 -0
  1382. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_runner.py +0 -0
  1383. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_runtime_io.py +0 -0
  1384. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_runtime_sink.py +0 -0
  1385. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_runtime_source.py +0 -0
  1386. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_sink_registry.py +0 -0
  1387. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_steps.py +0 -0
  1388. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_storage.py +0 -0
  1389. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_storage_trace_characterisation.py +0 -0
  1390. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/__init__.py +0 -0
  1391. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/cases.py +0 -0
  1392. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_async_walk.py +0 -0
  1393. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_basics.py +0 -0
  1394. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_clickhouse_sink_validation.py +0 -0
  1395. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_config_bindings.py +0 -0
  1396. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_delivery.py +0 -0
  1397. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_error_codes.py +0 -0
  1398. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_mongo_source.py +0 -0
  1399. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_multi_source.py +0 -0
  1400. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_router.py +0 -0
  1401. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_window.py +0 -0
  1402. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_with.py +0 -0
  1403. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/conftest.py +0 -0
  1404. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/__init__.py +0 -0
  1405. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/cases.py +0 -0
  1406. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/test_boundary.py +0 -0
  1407. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/test_message.py +0 -0
  1408. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/test_mongo_contracts.py +0 -0
  1409. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/test_multi_boundary.py +0 -0
  1410. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/test_steps.py +0 -0
  1411. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/__init__.py +0 -0
  1412. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/__init__.py +0 -0
  1413. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/batch.py +0 -0
  1414. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/explode.py +0 -0
  1415. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/fork.py +0 -0
  1416. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/router.py +0 -0
  1417. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/shared.py +0 -0
  1418. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/simple.py +0 -0
  1419. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/conftest.py +0 -0
  1420. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/test_compiler_examples.py +0 -0
  1421. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/test_flow_examples.py +0 -0
  1422. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/__init__.py +0 -0
  1423. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/cases.py +0 -0
  1424. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/conftest.py +0 -0
  1425. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/fakes.py +0 -0
  1426. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_client.py +0 -0
  1427. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_config.py +0 -0
  1428. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_coordinator_retry.py +0 -0
  1429. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_key_resolver.py +0 -0
  1430. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_message.py +0 -0
  1431. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_message_client.py +0 -0
  1432. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_multi_wire.py +0 -0
  1433. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_observability.py +0 -0
  1434. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_settings.py +0 -0
  1435. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_source_decode_parity.py +0 -0
  1436. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_wire.py +0 -0
  1437. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/mongo/test_bytewax_source.py +0 -0
  1438. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/__init__.py +0 -0
  1439. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/conftest.py +0 -0
  1440. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/test_broadcast.py +0 -0
  1441. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/test_delta_config.py +0 -0
  1442. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/test_logging.py +0 -0
  1443. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/test_sink_protocol_typing.py +0 -0
  1444. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/test_table_package.py +0 -0
  1445. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/__init__.py +0 -0
  1446. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/cases.py +0 -0
  1447. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/conftest.py +0 -0
  1448. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_message_lifecycle_spans.py +0 -0
  1449. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_multiworker_trace_continuity.py +0 -0
  1450. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_observability_runner.py +0 -0
  1451. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_outbound_topic_terminal_spans.py +0 -0
  1452. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_protocols.py +0 -0
  1453. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_registry.py +0 -0
  1454. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_structlog.py +0 -0
  1455. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/support/__init__.py +0 -0
  1456. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/support/flow_cases.py +0 -0
  1457. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_branch_indexing.py +0 -0
  1458. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_expand_routes.py +0 -0
  1459. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_fork.py +0 -0
  1460. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_otel_observability.py +0 -0
  1461. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_routing.py +0 -0
  1462. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_testing_mongo.py +0 -0
  1463. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_with.py +0 -0
  1464. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/test_boundary_calls_containment.py +0 -0
  1465. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/test_no_sqlalchemy_import.py +0 -0
  1466. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/test_packaging_extras.py +0 -0
  1467. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/__init__.py +0 -0
  1468. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/test_golden.py +0 -0
  1469. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/test_http_harness.py +0 -0
  1470. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/test_identity_harness.py +0 -0
  1471. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/test_in_memory.py +0 -0
  1472. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/test_lazy_exports.py +0 -0
  1473. {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/test_runner.py +0 -0
@@ -31,6 +31,43 @@
31
31
 
32
32
  ### ai
33
33
 
34
+ - **ai:** `provider: typesafe` binds TypeSafe's Jev, a decision model that
35
+ fills a typed output from the state it is given and never writes text, so a
36
+ role whose answer is a choice or a verdict can run on it. Extra
37
+ `ai-typesafe` (pydantic-ai 2.45 or later); `credentials_ref` names the
38
+ variable holding the API key, `endpoint` overrides the base URL. pydantic-ai
39
+ fills a TypeSafe output by tool alone, so a binding pinning `output_mode:
40
+ native` fails start-up with the new `OUTPUT_MODE_UNSUPPORTED`, instead of
41
+ being refused by the model on every request.
42
+ - **core:** `loom.core.plugins.optional.import_optional` is the one way loom
43
+ loads a module that needs an optional extra: the island imports its SDK
44
+ at the top, the selector loads the island by name, and the island's
45
+ `ImportError` becomes a `MissingExtraError` naming the extra. The rule is
46
+ written in `docs/architecture/clean-architecture.md`.
47
+ - **ai:** each pydantic-ai provider is an island under
48
+ `loom.ai.engines.pydantic_ai.providers` (`bedrock`, `openai`, `anthropic`,
49
+ `gateway`, `typesafe`), and each optional extra of the engine one under
50
+ `loom.ai.engines.pydantic_ai.extras` (`mcp`, `a2a`, `skills`,
51
+ `handlebars`): the one module importing its SDK. `_models.py` keeps the
52
+ binding table and loads the island through `require_provider_sdk`, now a
53
+ reading of `import_optional`; the MCP toolset, the A2A client, the skills
54
+ capability and the templating check load theirs the same way. No
55
+ behaviour change: `PROVIDER_UNKNOWN`, `PROVIDER_NOT_INSTALLED`,
56
+ `PROVIDER_SETTING_MISSING` and `TEMPLATE_EXTRA_MISSING` fire exactly as
57
+ before.
58
+ - **core:** boto3 is an island too, `loom.core.config._boto3`: the SSM and
59
+ Secrets Manager resolvers load it on first use and fail with `ConfigError`
60
+ naming `config-ssm` when it is absent, instead of a module-level `None`
61
+ sentinel checked later. `aiocache` and `prometheus-client` are required
62
+ dependencies, so `CacheGateway` and `ObservabilityRuntime` import them at
63
+ the top like any other, dropping an `importlib.import_module("aiocache")`
64
+ and a `None` sentinel that guarded nothing. Tests that stood in for an
65
+ absent or stubbed SDK now go through `tests/helpers/extras.py`.
66
+ - **ai:** `AgentAnswer`, `AgentResult` and the `final` event carry `provider_details`: what
67
+ the provider reported about the final answer beyond the answer itself,
68
+ verbatim — Jev's confidence and probabilities per field, another
69
+ provider's finish reason — or `None`. In process only: the `/run` body and
70
+ the `final` frame keep their four keys, as `messages` taught them to.
34
71
  - **ai:** `output.type_ref` and `deps_type` accept a strict
35
72
  `pydantic.BaseModel` (`model_config["extra"] == "forbid"`) wherever they
36
73
  accept a `msgspec.Struct`. A pydantic output is handed to pydantic-ai as
@@ -51,6 +88,33 @@
51
88
  boundaries already use; `LoomRestAdapter`'s Struct projection goes
52
89
  through it too.
53
90
 
91
+ ### prefect
92
+
93
+ - **prefect:** a deployment may run each time another one completes, inheriting
94
+ some of its parameters. The per-flow YAML takes an optional `trigger` block:
95
+ `after`, the upstream deployment as `<flow>/<deployment>` or, for a loom ETL
96
+ whose flow and deployment share its name, that name; and `inherit_params`, a
97
+ list of parameter names. The deployer registers it as a Prefect
98
+ `DeploymentEventTrigger` on `prefect.flow-run.Completed` whose related
99
+ resources must include both that flow and that deployment, since a deployment
100
+ name is only unique within its flow. Each inherited parameter is rendered, as
101
+ text, from the completed run's stored parameters, which loom records resolved,
102
+ so `${today-1d}` upstream reaches the downstream run as the concrete date.
103
+ Only fields declared exactly `str`, `date` or `datetime` can be inherited (a
104
+ null would render as `"None"`), and each must be stored on the upstream run,
105
+ that is declared under its YAML `params` or submitted: a value it only took
106
+ from a signature default renders as empty text, which a `str` field takes as
107
+ `""` and a `date` field fails to decode. Every other parameter takes the
108
+ deployment's default, and a placeholder among them resolves against the
109
+ downstream run's creation time. The block is decoded strictly (an unknown key,
110
+ a wrong type or an `after` with spaces around either part is refused) when the
111
+ flow is built and, for YAML declarations, as a `ConfigError` before any
112
+ deployment is registered. A trigger coexists with `schedule`, in which case
113
+ the ETL runs on both. If the upstream run failed to record its parameters, the
114
+ downstream run inherits the placeholder text and resolves it against its own
115
+ creation time. Without `trigger` the deployment is registered exactly as
116
+ before.
117
+
54
118
  ## ⚠ Behaviour changes
55
119
 
56
120
  ### core
@@ -96,6 +160,44 @@
96
160
  OpenAPI schemas for request bodies and responses alike, matching the
97
161
  untitled document a Struct always produced.
98
162
 
163
+ ### prefect
164
+
165
+ - **prefect:** a placeholder counts from the run's scheduled start instead of
166
+ the wall clock. `${today-1d}`, `${yesterday}` and `${now±N}` counted from
167
+ `datetime.now()` inside the flow, so a queued run that started after
168
+ midnight, or a retry the next day, processed another day than its slot's.
169
+ `etl_flow`, `maintenance_flow` and `backfill_flow` (`start_from` included)
170
+ and the run name now resolve against the run's scheduled start
171
+ (`prefect.runtime.flow_run.scheduled_start_time`, read in UTC): the slot of
172
+ a scheduled run, the same slot on every retry, the creation time of a manual
173
+ run. A late run's `${now}` therefore covers up to its scheduled time, not up
174
+ to the moment it started. Outside a flow run the wall clock still applies.
175
+ The backfill finalize pass still pins `window_end` to the current chunk.
176
+ - **prefect:** resuming from the manifest now works for placeholder
177
+ parameters. The correlation id was computed from the resolved value, so
178
+ with `${now}` it carried the seconds of the clock and a retry never found
179
+ the manifest of the attempt before it; anchored, every attempt of a run
180
+ computes the same id. The id is now also computed from the decoded
181
+ parameters rather than the submitted ones, so a value and its recorded ISO
182
+ string key the same manifest. Two ids change: a `date` field submitted as
183
+ an ISO string (`"2026-09-21"` now keys `20260921T000000`, as the `date`
184
+ itself always did), and a `correlation_field` typed as a plain `Enum`,
185
+ which now keys the member's sanitised name (`Color_RED`) instead of its
186
+ submitted value (`red`); a `StrEnum` renders as its value and keeps its id.
187
+ Do not upgrade across a run you intend to resume from its manifest.
188
+ - **prefect:** the run records the parameters it resolved. Prefect stored and
189
+ showed the placeholder text, so nothing told which days a run processed.
190
+ After decoding, the flow updates its own run: the parameters the API stored
191
+ for it, with each placeholder replaced by its value (dates and datetimes in
192
+ ISO 8601, a backfill's `start_from` included); nothing is added. The UI
193
+ shows the concrete window, a run resubmitted from the UI ("Retry") or
194
+ copied reproduces it, and an automation reading `flow_run.parameters` gets
195
+ dates. A run that stores no placeholder makes no call, so a resubmitted run
196
+ makes none. A retry inside the same process (`retries`) still holds the
197
+ placeholders it started with and repeats the call with the same values,
198
+ which is harmless. The update is one attempt with a 10-second timeout; if
199
+ it fails, the flow logs it at `ERROR` in the run's logs and goes on.
200
+
99
201
  ## 🐛 Fixes
100
202
 
101
203
  ### core
@@ -130,6 +232,23 @@
130
232
  The `etl-polars` extra now requires `polars>=1.24`, the release that
131
233
  named that join option `nulls_equal`.
132
234
 
235
+ - **etl:** `storage.temp.storage_options` reaches the checkpoint write. A
236
+ pipeline declaring `aws_server_side_encryption` / `aws_sse_kms_key_id` /
237
+ `aws_sse_bucket_key_enabled` for its temporaries wrote them with the bucket
238
+ default encryption and said nothing: the filter guarding the fsspec cleanup
239
+ returned an empty mapping unless an `endpoint_url` was set, and forwarded
240
+ only endpoint and credentials when it was. The encryption options now
241
+ survive that filter with or without an endpoint, in either spelling
242
+ (lowercase or uppercase), and reach both halves of the atomic write — the
243
+ `sink_ipc` through object_store under their own names, and the rename, a
244
+ server-side copy, as `s3_additional_kwargs` botocore parameters. The read
245
+ path is untouched, decryption being server-side. Any other key of the
246
+ delta-rs mapping is still dropped, now logged at debug; the Spark checkpoint
247
+ backend cannot take them at all (it reads SSE from Hadoop's S3A conf) and
248
+ logs a warning when encryption is declared. The declared mapping is parsed
249
+ once, so the two halves never disagree: `aws_sse_bucket_key_enabled: "false"`
250
+ (or `"yes"`, `"on"`, `"1"`) yields the same flag on either side.
251
+
133
252
  ### ai
134
253
 
135
254
  - **ai:** an MCP session that dies after it opened no longer fails every later
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: loom-kernel
3
- Version: 2.5.0
3
+ Version: 2.7.0
4
4
  Summary: Loom Python project
5
5
  License-File: LICENSE
6
6
  Classifier: Typing :: Typed
@@ -27,6 +27,8 @@ Provides-Extra: ai-pydantic
27
27
  Requires-Dist: pydantic-ai-slim<3,>=2; extra == 'ai-pydantic'
28
28
  Provides-Extra: ai-templates
29
29
  Requires-Dist: pydantic-ai-slim[spec]<3,>=2; extra == 'ai-templates'
30
+ Provides-Extra: ai-typesafe
31
+ Requires-Dist: pydantic-ai-slim[typesafe]<3,>=2.45; extra == 'ai-typesafe'
30
32
  Provides-Extra: cache
31
33
  Requires-Dist: aiocache<1.0,>=0.12; extra == 'cache'
32
34
  Requires-Dist: omegaconf<3.0,>=2.3; extra == 'cache'
@@ -509,6 +509,14 @@ The hook's return value is a client-facing DTO delivered verbatim to the caller
509
509
  — public on an `allow_anonymous` mount — so return a purpose-built struct,
510
510
  never a domain entity.
511
511
 
512
+ In process, `AgentAnswer` and `AgentResult` also carry `provider_details`: what the provider
513
+ reported about the final answer beyond the answer itself, verbatim and opaque
514
+ to loom — a decision model's confidence and probabilities per field (see
515
+ [`typesafe`](providers.md#typesafe-fills-an-output-it-never-writes-text)),
516
+ another provider's finish reason — or `None` when it reported nothing. Like
517
+ `messages`, it never reaches the wire: the `/run` body and the `final` frame
518
+ keep their four keys.
519
+
512
520
  The request body accepts an optional `conversation_id`: a string of 1 to 128
513
521
  characters that loom never reads and never keys anything on. It selects the
514
522
  conversation the loader receives when the artifact declares
@@ -797,8 +805,8 @@ accepts the parameter and ignores it, so scripted tests stay byte for byte.
797
805
 
798
806
  Clients keep sending `{"prompt", "conversation_id"}`. The `/run` body has
799
807
  exactly `output`, `usage`, `interaction_id` and `hook_result`; the `final`
800
- frame has the same four keys; `messages` appears in neither, nor in any A2A
801
- frame. Over A2A the thread travels as the message's `contextId`, which the
808
+ frame has the same four keys; `messages` and `provider_details` appear in
809
+ neither, nor in any A2A frame. Over A2A the thread travels as the message's `contextId`, which the
802
810
  runtime treats as the `conversation_id` (see [the A2A surface](a2a.md#conversations)).
803
811
 
804
812
  ### Two turns
@@ -25,6 +25,7 @@ with `MODEL_ROLE_UNBOUND`. It is never deferred to the first request.
25
25
  | `openai` | `ai-openai` | — | the **name of the environment variable** holding the API key; omit it and the SDK reads its own default | OpenAI's own API |
26
26
  | `anthropic` | `ai-anthropic` | — | the **name of the environment variable** holding the API key; omit it and the SDK reads its own default | Anthropic's own API |
27
27
  | `gateway` | `ai-openai` | `endpoint` | the **name of the environment variable** holding the API key the endpoint expects | **any OpenAI-compatible endpoint** — see below |
28
+ | `typesafe` | `ai-typesafe` | — | the **name of the environment variable** holding the API key; omit it and the SDK reads `TYPESAFE_API_KEY` | TypeSafe's Jev — a decision model, see below |
28
29
 
29
30
  Which **provider-run tools** each binding admits — web search, web fetch, code
30
31
  execution — is decided by the model class of the installed engine, not by this
@@ -107,6 +108,37 @@ An artifact then picks one with `model_role: reasoning`. Moving that agent to a
107
108
  cheaper model later is a one-line config change with no artifact edit and no
108
109
  redeploy of the agent definition.
109
110
 
111
+ ## `typesafe` fills an output, it never writes text
112
+
113
+ Jev, TypeSafe's model, is not a language model: given a state, it answers
114
+ typed questions about it with a calibrated probability each, and pydantic-ai
115
+ turns the agent's `output_type` into those questions. Bind it to a role whose
116
+ output is a strict class of `bool`, `Literal`/`Enum`, bounded `float` or
117
+ `IntEnum` fields; a `str` field, a text answer, a file in the prompt or a
118
+ tool taking arguments is refused by pydantic-ai before any request.
119
+
120
+ ```yaml
121
+ ai:
122
+ models:
123
+ verdict:
124
+ provider: typesafe
125
+ model: jev-latest
126
+ credentials_ref: TYPESAFE_API_KEY
127
+ ```
128
+
129
+ pydantic-ai fills a TypeSafe output through tool mode only, so this is the one
130
+ binding whose `output_mode` loom can check before the first request: pinning
131
+ `native` fails **start-up** with `OUTPUT_MODE_UNSUPPORTED`, naming the mode
132
+ the provider serves. `endpoint`, when set, replaces the API's base URL.
133
+ `streaming` changes nothing: Jev returns each answer whole.
134
+
135
+ What makes the answer worth having — the probability behind each field and
136
+ the margin by which it cleared its threshold — comes back on
137
+ `AgentAnswer.provider_details`, verbatim as pydantic-ai reports it
138
+ (`confidence`, `probabilities`, `scores`, `requests`), so a use case can act
139
+ on a firm verdict and escalate a doubtful one. In process only; see
140
+ [what the caller receives](artifacts.md#what-the-caller-receives).
141
+
110
142
  ## Credentials never live in the artifact — or in the config
111
143
 
112
144
  `credentials_ref` is a **reference**, never the secret itself: an AWS profile
@@ -114,7 +146,7 @@ name for `bedrock`, and for the API-key providers the **name of an environment
114
146
  variable** loom reads at start-up. An unset variable fails start-up with
115
147
  `PROVIDER_SETTING_MISSING` naming it, instead of a 401 on the first call; omit
116
148
  `credentials_ref` and each SDK reads its own default variable
117
- (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`).
149
+ (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `TYPESAFE_API_KEY`).
118
150
 
119
151
  The value is validated fail-closed at start-up — a value shaped like literal
120
152
  secret material (`AKIA…`, `sk-…`, `ghp_…`, a URL with credentials in its
@@ -193,7 +225,9 @@ loom does not infer it per provider. Two consequences follow from that:
193
225
  surfaces as `PROVIDER_UNAVAILABLE`. The provider's detail stays server-side,
194
226
  in the logs; the caller sees the code. Loom cannot check a mode against a
195
227
  model before the first request, so a wrong pin is found there, not at
196
- start-up.
228
+ start-up. The one exception is `typesafe`, whose models pydantic-ai serves
229
+ by tool alone, so a `native` pin on it fails start-up with
230
+ `OUTPUT_MODE_UNSUPPORTED`.
197
231
 
198
232
  ## Asking for the answer whole, not as a stream
199
233
 
@@ -0,0 +1,44 @@
1
+ # Clean architecture rules
2
+
3
+ Project invariants:
4
+
5
+ 1. Domain/Application layers must not import infrastructure.
6
+ 2. Repositories are interface-driven.
7
+ 3. Runtime side effects are explicit and observable.
8
+ 4. Public APIs are typed and documented.
9
+
10
+ This contract is enforced through module boundaries and strict typing checks.
11
+
12
+ ## Optional dependencies: islands
13
+
14
+ A dependency loom does not require lives behind an extra, and the code that
15
+ uses it follows one pattern, whatever the pillar:
16
+
17
+ 1. **One optional dependency, one island.** An island is a module that
18
+ imports the vendor SDK at its top, with an ordinary `import`, and nothing
19
+ else in loom imports that SDK. The island builds what the SDK serves
20
+ (`loom.ai.engines.pydantic_ai.providers.bedrock`, `loom.core.sql.clickhouse`,
21
+ `loom.streaming.bytewax`).
22
+ 2. **The selector loads the island, not the SDK.** A registry keyed by
23
+ provider, engine or backend name loads the island by module path once it
24
+ knows the name — `loom.core.plugins.optional.import_optional` for a module
25
+ of loom, `loom.core.plugins.entrypoints` for a plugin distribution — and
26
+ translates `MissingExtraError` into its own coded failure naming the extra
27
+ (`PROVIDER_NOT_INSTALLED` in the AI layer).
28
+ 3. **Nothing else.** No `import` inside a function to reach a vendor SDK, no
29
+ module-level `try`/`except ImportError` with a `None` sentinel checked
30
+ later, no `importlib.import_module("vendor")` on the request path, no
31
+ attribute lookup on a vendor module.
32
+
33
+ The island needs no `try`/`except` of its own: its `ImportError` is what
34
+ `import_optional` translates. Islands today: the pydantic-ai providers and
35
+ extras (`loom.ai.engines.pydantic_ai.providers`, `.extras`), boto3 for the
36
+ config resolvers (`loom.core.config._boto3`), and the whole-package islands
37
+ that predate the rule (`loom.core.sql.clickhouse`, `loom.streaming.bytewax`,
38
+ `loom.etl.testing`). A dependency listed under `dependencies` is not
39
+ optional and gets no island: import it at the top like any other. A test that stands in for an absent or stubbed SDK
40
+ blocks the SDK **and** evicts the island, so the next load re-imports it;
41
+ `tests/helpers/extras.py` does both. A module that reads an SDK the application
42
+ itself may or may not have loaded — pydantic in `loom.core.model` — gates on
43
+ `sys.modules` instead, on purpose: loom never loads what the application did
44
+ not. Code that predates this rule is migrated when it is next touched.
@@ -164,6 +164,12 @@ storage:
164
164
 
165
165
  tmp_root: /var/lib/loom/lake/_tmp
166
166
 
167
+ temp:
168
+ root: s3://my-lake/_checkpoints
169
+ storage_options:
170
+ aws_server_side_encryption: aws:kms
171
+ aws_sse_kms_key_id: alias/loom-temp
172
+
167
173
  observability:
168
174
  log:
169
175
  enabled: true
@@ -179,6 +185,11 @@ observability:
179
185
  # database: ops
180
186
  ```
181
187
 
188
+ Server-side encryption declared in `storage.temp.storage_options` is honoured by
189
+ the Polars engine only; with `engine: spark` the checkpoint write goes through
190
+ Hadoop's S3A, which takes it from `fs.s3a.server-side-encryption-*` on the
191
+ session instead.
192
+
182
193
  ```python
183
194
  from loom.etl import ETLRunner
184
195
 
@@ -164,6 +164,12 @@ storage:
164
164
 
165
165
  tmp_root: /var/lib/loom/lake/_tmp
166
166
 
167
+ temp:
168
+ root: s3://my-lake/_checkpoints
169
+ storage_options:
170
+ aws_server_side_encryption: aws:kms
171
+ aws_sse_kms_key_id: alias/loom-temp
172
+
167
173
  observability:
168
174
  log:
169
175
  enabled: true
@@ -179,6 +185,11 @@ observability:
179
185
  # database: ops
180
186
  ```
181
187
 
188
+ Server-side encryption declared in `storage.temp.storage_options` is honoured by
189
+ the Polars engine only; with `engine: spark` the checkpoint write goes through
190
+ Hadoop's S3A, which takes it from `fs.s3a.server-side-encryption-*` on the
191
+ session instead.
192
+
182
193
  ```python
183
194
  from loom.etl import ETLRunner
184
195
 
@@ -882,7 +893,7 @@ that matches nothing is a `ConfigError`.
882
893
 
883
894
  A declaration file has one of two shapes. The first is a **per-ETL document**:
884
895
  the YAML `etl_flow` already reads (`schedule`, `params`, `tags`, `environments`,
885
- `retry`, `notifications`, `correlation_field`) plus the keys that replace the
896
+ `retry`, `notifications`, `correlation_field`, `trigger`) plus the keys that replace the
886
897
  Python module:
887
898
 
888
899
  ```yaml
@@ -947,6 +958,78 @@ declares neither `etls:` nor `pipeline` is a `ConfigError` naming the file, so
947
958
  keep ETL declarations in their own directory (`config/etls/`) or in one `etls:`
948
959
  file rather than next to the storage YAML.
949
960
 
961
+ ### Placeholders count from the run's scheduled start
962
+
963
+ A parameter may hold a placeholder: `${today}`, `${today±Nd}`, `${yesterday}`,
964
+ `${now}` or `${now±N}` with `d`, `h` or `m`. Inside a flow run it counts from
965
+ the run's scheduled start, read in UTC, not from the moment the run executes:
966
+
967
+ - a scheduled run resolves against its slot, even when it starts late or
968
+ after midnight;
969
+ - a retry, by the engine or through "Retry" in the UI, resolves against the
970
+ same slot;
971
+ - a manual run resolves against the time it was created.
972
+
973
+ A late run's `${now}` therefore covers up to its scheduled time. The run name
974
+ follows the same rule.
975
+
976
+ Once resolved, the flow writes the values back to its own run: the
977
+ parameters the API stored for it, with each placeholder replaced by its value
978
+ (dates and datetimes in ISO 8601, a backfill's `start_from` included). Nothing
979
+ else is added or changed. The run then shows the window it processed, and a
980
+ run resubmitted from the UI ("Retry") or copied reproduces it exactly: its
981
+ parameters are concrete, so it makes no call. A retry inside the same process
982
+ (`retries`) still holds the placeholders it started with, resolves them to the
983
+ same values and repeats the call, which is harmless.
984
+
985
+ The update is a single attempt with a 10-second timeout. If it fails, the flow
986
+ logs it at `ERROR`, in the run's logs, and runs anyway; the run then keeps
987
+ showing the placeholders.
988
+
989
+ Because every attempt of a run resolves the same values, the correlation id,
990
+ and therefore the manifest a retry resumes from, is stable across attempts.
991
+
992
+ ### Running a deployment after another one
993
+
994
+ A per-flow YAML may name the deployment whose completed runs start this one,
995
+ and the parameters it copies from them:
996
+
997
+ ```yaml
998
+ trigger:
999
+ after: respondio_messages_daily
1000
+ inherit_params: [updated_at_from, updated_at_to]
1001
+ ```
1002
+
1003
+ `after` is the upstream deployment as `<flow>/<deployment>`, or a single name
1004
+ when the flow and the deployment share it, as every loom ETL's do. The
1005
+ deployer registers a Prefect `DeploymentEventTrigger` that fires on
1006
+ `prefect.flow-run.Completed` of a run related to both that flow and that
1007
+ deployment; a deployment name alone is only unique within its flow.
1008
+
1009
+ Each name in `inherit_params` is copied from the completed run's stored
1010
+ parameters. Since the run records its placeholders resolved, the downstream
1011
+ run receives the same concrete window. The name must therefore be stored on the
1012
+ upstream run, which means declared under the upstream YAML's `params` (or
1013
+ submitted with the run): a value the upstream flow only took from its
1014
+ signature default is not stored, so it renders as empty text, which a `str`
1015
+ field accepts as `""` and a `date` or `datetime` field fails to decode. The trigger passes each value as text,
1016
+ so only a field declared exactly `str`, `date` or `datetime` can be inherited;
1017
+ an optional field is refused because a null would arrive as the text `"None"`.
1018
+
1019
+ - Parameters not inherited take this deployment's defaults; a placeholder
1020
+ among them resolves against the downstream run's own creation time.
1021
+ - If the upstream run could not record its parameters, the downstream run
1022
+ inherits the placeholder text and resolves it against its own creation
1023
+ time, which may not be the upstream slot.
1024
+ - `trigger` and `schedule` may both be set, and the ETL then runs on both: on
1025
+ its schedule and after each completed upstream run.
1026
+ - The upstream name is not checked against the deployments that exist: a
1027
+ trigger naming no deployment never fires.
1028
+
1029
+ The block is decoded strictly: `after` and `inherit_params` are its only keys,
1030
+ `after` must name a deployment, without surrounding spaces in either part, and
1031
+ each inherited name must be a field of the flow's params type.
1032
+
950
1033
  ### Validation before any deployment
951
1034
 
952
1035
  Every declaration is read and checked before the first deployment is
@@ -122,6 +122,11 @@ ai-openai = [
122
122
  ai-anthropic = [
123
123
  "pydantic-ai-slim[anthropic]>=2,<3",
124
124
  ]
125
+ # TypeSafe's Jev: a decision model that fills a typed output from a state, no
126
+ # text. Its model class first shipped in pydantic-ai 2.45.
127
+ ai-typesafe = [
128
+ "pydantic-ai-slim[typesafe]>=2.45,<3",
129
+ ]
125
130
  # Only an artefact declaring `template:` on an instruction block needs this:
126
131
  # the engine compiles a Handlebars template and renders it per request. An
127
132
  # artefact whose instructions are literal never reaches the import.
@@ -255,7 +260,7 @@ dev = [
255
260
  "httpx>=0.27",
256
261
  "types-pyyaml>=6.0.12.20260724",
257
262
  "jsonschema>=4.26.0",
258
- "pydantic-ai-slim[anthropic,bedrock,openai,spec]>=2,<3",
263
+ "pydantic-ai-slim[anthropic,bedrock,openai,spec,typesafe]>=2.45,<3",
259
264
  "fasta2a>=0.6,<1",
260
265
  "a2a-sdk>=1.1,<2",
261
266
  "pydantic-ai-harness[skills]>=0.28,<1",
@@ -179,6 +179,12 @@ class AgentResult(LoomFrozenStruct, frozen=True, kw_only=True):
179
179
  messages: New messages of this run in the engine's own serialised
180
180
  form; ``None`` when they are longer than
181
181
  ``policies.max_history_bytes``.
182
+ provider_details: What the provider reported about the final answer
183
+ beyond the answer itself, verbatim and opaque to loom — a
184
+ decision model's confidence and probabilities per field, another
185
+ provider's finish reason. ``None`` when it reported nothing. In
186
+ process only: the ``/run`` body and the ``final`` frame never
187
+ carry it.
182
188
  """
183
189
 
184
190
  output: object
@@ -186,6 +192,7 @@ class AgentResult(LoomFrozenStruct, frozen=True, kw_only=True):
186
192
  interaction_id: str | None = None
187
193
  hook_result: object | None = None
188
194
  messages: bytes | None = None
195
+ provider_details: Mapping[str, Any] | None = None
189
196
 
190
197
 
191
198
  class AgentAnswer(LoomFrozenStruct, Generic[AnswerT], frozen=True, kw_only=True):
@@ -205,11 +212,16 @@ class AgentAnswer(LoomFrozenStruct, Generic[AnswerT], frozen=True, kw_only=True)
205
212
  overrode it for this call only.
206
213
  usage: Resource accounting of this run only.
207
214
  interaction_id: Identifier the runtime minted for this run.
215
+ provider_details: What the provider reported about this answer beyond
216
+ the answer itself, verbatim and opaque to loom — a decision
217
+ model's confidence and probabilities per field, another
218
+ provider's finish reason — or ``None`` when it reported nothing.
208
219
  """
209
220
 
210
221
  output: AnswerT
211
222
  usage: AgentUsage
212
223
  interaction_id: str | None = None
224
+ provider_details: Mapping[str, Any] | None = None
213
225
 
214
226
 
215
227
  class McpHandle(Protocol):
@@ -678,6 +690,9 @@ class FinalEvent(LoomFrozenStruct, frozen=True, kw_only=True, tag="final", tag_f
678
690
  messages: New messages of this run in the engine's own serialised
679
691
  form; ``None`` when they are longer than
680
692
  ``policies.max_history_bytes``.
693
+ provider_details: What the provider reported about the final answer
694
+ beyond the answer itself, as on :class:`AgentResult`; the
695
+ runtime copies it there, and no wire surface publishes it.
681
696
  """
682
697
 
683
698
  output: object
@@ -685,6 +700,7 @@ class FinalEvent(LoomFrozenStruct, frozen=True, kw_only=True, tag="final", tag_f
685
700
  interaction_id: str | None = None
686
701
  hook_result: object | None = None
687
702
  messages: bytes | None = None
703
+ provider_details: Mapping[str, Any] | None = None
688
704
 
689
705
 
690
706
  AgentEvent = TextDeltaEvent | ToolCallEvent | ToolResultEvent | ErrorEvent | FinalEvent
@@ -0,0 +1,79 @@
1
+ """Outbound A2A transport: this agent calling a remote one (T147).
2
+
3
+ Two entry points, one connection recipe, both served by the
4
+ :mod:`~loom.ai.engines.pydantic_ai.extras.a2a` island, the one module of the
5
+ engine that imports the ``a2a-sdk``:
6
+
7
+ * :func:`create_a2a_client` is the :data:`~loom.ai.runtime.A2AClientFactory`
8
+ the runtime opens at start-up. Entering it fetches the remote card, applies
9
+ the grant's skill filter to it and hands back a usable session, so an
10
+ unreachable or mismatched agent fails start-up as ``A2A_AGENT_UNREACHABLE``
11
+ instead of surfacing on the first delegation.
12
+ * :func:`send_to_remote_agent` performs one delegation.
13
+
14
+ This module loads the island when a grant names it — :func:`require_a2a_sdk`
15
+ at build, the two entry points at call — so a deployment that declares no
16
+ ``a2a`` grant never imports the SDK, and one that does fails start-up naming
17
+ the ``ai-a2a`` extra when it is missing.
18
+ """
19
+
20
+ from __future__ import annotations
21
+
22
+ from contextlib import AbstractAsyncContextManager
23
+ from typing import TYPE_CHECKING, Protocol, cast
24
+
25
+ from loom.ai.compiler import CompiledA2ACapability
26
+ from loom.ai.registry import require_provider_sdk
27
+
28
+ if TYPE_CHECKING:
29
+ from a2a.client import Client
30
+
31
+ _ISLAND = "loom.ai.engines.pydantic_ai.extras.a2a"
32
+ _EXTRA = "ai-a2a"
33
+
34
+
35
+ class _A2ASdk(Protocol):
36
+ """The two names the A2A island publishes."""
37
+
38
+ def create_a2a_client(
39
+ self, capability: CompiledA2ACapability
40
+ ) -> AbstractAsyncContextManager[Client]: ...
41
+
42
+ async def send_to_remote_agent(self, capability: CompiledA2ACapability, prompt: str) -> str: ...
43
+
44
+
45
+ def _sdk() -> _A2ASdk:
46
+ """Load the island; the cast records the contract every island keeps."""
47
+ return cast(_A2ASdk, require_provider_sdk("a2a", _ISLAND, _EXTRA))
48
+
49
+
50
+ def require_a2a_sdk() -> None:
51
+ """Fail the build when the ``ai-a2a`` extra is not installed.
52
+
53
+ Raises:
54
+ AgentCompilationError: With ``PROVIDER_NOT_INSTALLED`` naming the
55
+ extra when the island cannot be imported.
56
+ """
57
+ _sdk()
58
+
59
+
60
+ def create_a2a_client(capability: CompiledA2ACapability) -> AbstractAsyncContextManager[Client]:
61
+ """Open one session against a remote agent, card fetched and checked.
62
+
63
+ Satisfies :data:`~loom.ai.runtime.A2AClientFactory`. See the island's
64
+ ``create_a2a_client`` for what entering the context does and raises.
65
+
66
+ Example::
67
+
68
+ runtime = AgentRuntime(..., a2a_client_factory=create_a2a_client)
69
+ """
70
+ return _sdk().create_a2a_client(capability)
71
+
72
+
73
+ async def send_to_remote_agent(capability: CompiledA2ACapability, prompt: str) -> str:
74
+ """Delegate one prompt to a remote agent and return its reply text.
75
+
76
+ See the island's ``send_to_remote_agent`` for the contract: the reply is
77
+ untrusted data, presented as a tool value and never as instruction.
78
+ """
79
+ return await _sdk().send_to_remote_agent(capability, prompt)
@@ -26,7 +26,7 @@ from collections.abc import Callable, Iterator, Mapping, Sequence
26
26
  from dataclasses import dataclass
27
27
  from enum import Enum
28
28
  from types import MappingProxyType
29
- from typing import Any, Final, NamedTuple, cast
29
+ from typing import Any, Final, NamedTuple, Protocol, cast
30
30
 
31
31
  from pydantic_ai import ToolReturn
32
32
  from pydantic_ai.capabilities import AbstractCapability
@@ -78,11 +78,11 @@ from loom.ai.errors import (
78
78
  AgentCompilationError,
79
79
  AgentRunError,
80
80
  AgentRunErrorCode,
81
- provider_not_installed,
82
81
  python_factory_failed,
83
82
  python_factory_not_callable,
84
83
  python_remote_not_granted,
85
84
  )
85
+ from loom.ai.registry import require_provider_sdk
86
86
  from loom.core.di import LoomContainer
87
87
  from loom.core.engine.compilable import Compilable
88
88
  from loom.core.engine.plan import ExecutionPlan
@@ -528,18 +528,22 @@ def _skills_capability(
528
528
  AgentCompilationError: When the ``ai-harness`` extra is not installed.
529
529
  """
530
530
  del context
531
- # Local import: the skills harness ships behind the optional ``ai-harness``
532
- # extra, and importing it at module load would break every deployment that
533
- # declares no ``skills`` grant.
534
- try:
535
- from pydantic_ai_harness import Skills
536
- except ImportError as exc:
537
- raise AgentCompilationError([provider_not_installed("skills", "ai-harness")]) from exc
531
+ sdk = cast(
532
+ _SkillsSdk,
533
+ require_provider_sdk("skills", "loom.ai.engines.pydantic_ai.extras.skills", "ai-harness"),
534
+ )
538
535
  return cast(
539
- "AbstractCapability[Any]", Skills(capability.directory, include=list(capability.names))
536
+ "AbstractCapability[Any]",
537
+ sdk.Skills(capability.directory, include=list(capability.names)),
540
538
  )
541
539
 
542
540
 
541
+ class _SkillsSdk(Protocol):
542
+ """The one name the skills island publishes."""
543
+
544
+ Skills: type[Any]
545
+
546
+
543
547
  _KINDS: Final[Mapping[type[CompiledCapability], _KindBinding]] = MappingProxyType(
544
548
  {
545
549
  CompiledUsecaseCapability: _KindBinding(_Destination.TOOLSET, _usecase_toolset),
@@ -242,6 +242,7 @@ class PydanticAIEngine:
242
242
  agent=self._plan.name,
243
243
  max_history_bytes=self._plan.policies.max_history_bytes,
244
244
  ),
245
+ provider_details=result.response.provider_details,
245
246
  )
246
247
 
247
248
  def run_stream(
@@ -783,6 +784,7 @@ class PydanticAIEngine:
783
784
  agent=self._plan.name,
784
785
  max_history_bytes=self._plan.policies.max_history_bytes,
785
786
  ),
787
+ provider_details=result.response.provider_details,
786
788
  )
787
789
 
788
790