loom-kernel 2.1.4__tar.gz → 2.2.1__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 (1436) hide show
  1. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/CHANGELOG.md +104 -0
  2. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/PKG-INFO +1 -1
  3. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/ai/artifacts.md +17 -0
  4. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/ai/mcp.md +41 -2
  5. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/conf.py +2 -0
  6. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/rest/use-case-dsl.md +5 -1
  7. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/_startup.py +1 -1
  8. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/_transport.py +52 -2
  9. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/a2a/_handlers.py +5 -1
  10. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/abc.py +26 -20
  11. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/compiler/_plan.py +25 -12
  12. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/compiler/phases/_output.py +35 -38
  13. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/compiler/phases/_state.py +36 -55
  14. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/describe.py +2 -2
  15. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_engine.py +70 -28
  16. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_mcp.py +68 -6
  17. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_output.py +25 -15
  18. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_spec.py +44 -24
  19. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/provider.py +24 -10
  20. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/fastapi/endpoints.py +20 -14
  21. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/runtime/_grants.py +12 -10
  22. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/runtime/_hooks.py +2 -1
  23. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/runtime/_lifecycle.py +30 -11
  24. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/gateway.py +14 -4
  25. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/repository.py +28 -4
  26. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/result_codec.py +27 -75
  27. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/command/base.py +2 -1
  28. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/errors/codes.py +1 -0
  29. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/model/__init__.py +18 -0
  30. loom_kernel-2.2.1/src/loom/core/model/_loom_type.py +398 -0
  31. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/adapter.py +4 -1
  32. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/errors.py +10 -0
  33. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/fastapi/openapi.py +2 -4
  34. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/fastapi/response.py +32 -2
  35. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/contract/ai/test_contract_pydantic_ai.py +17 -8
  36. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/helpers/pydantic_ai_engine.py +88 -1
  37. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/conftest.py +36 -3
  38. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_a2a.py +66 -0
  39. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_endpoints.py +58 -4
  40. loom_kernel-2.2.1/tests/integration/ai/test_mcp_session_recovery.py +65 -0
  41. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_provider_portability.py +5 -5
  42. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/compiler/test_state_phase.py +38 -9
  43. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_binding.py +45 -1
  44. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_instructions.py +2 -2
  45. loom_kernel-2.2.1/tests/unit/ai/engines/test_pydantic_ai_mcp_session_recovery.py +170 -0
  46. loom_kernel-2.2.1/tests/unit/ai/engines/test_pydantic_ai_native_output.py +196 -0
  47. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_output_check.py +14 -79
  48. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fastapi/test_state_decode.py +48 -21
  49. loom_kernel-2.2.1/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/pydantic_invoices.py +38 -0
  50. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/triage.py +6 -0
  51. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/unsupported.py +15 -3
  52. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/phases/test_output.py +3 -2
  53. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/runtime/test_grants.py +72 -0
  54. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/runtime/test_hook_command.py +48 -1
  55. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/runtime/test_loader_command.py +2 -1
  56. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/runtime/test_state_channel.py +52 -6
  57. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_a2a_card.py +3 -2
  58. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_compiler.py +63 -12
  59. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_describe.py +2 -2
  60. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_cache_query_codec.py +3 -3
  61. loom_kernel-2.2.1/tests/unit/core/cache/test_cached_repository_pydantic.py +151 -0
  62. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_call_codec.py +7 -7
  63. loom_kernel-2.2.1/tests/unit/core/cache/test_gateway_typed_get.py +67 -0
  64. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/command/test_command_base.py +2 -2
  65. loom_kernel-2.2.1/tests/unit/core/model/test_loom_type.py +561 -0
  66. loom_kernel-2.2.1/tests/unit/core/model/test_loom_type_import_containment.py +72 -0
  67. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_fastapi_auto_agent_markers.py +2 -1
  68. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_response.py +48 -0
  69. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_rest_adapter.py +53 -0
  70. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_router_runtime.py +138 -0
  71. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_error_boundary.py +7 -1
  72. loom_kernel-2.2.1/tests/unit/test_boundary_calls_containment.py +124 -0
  73. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/.github/workflows/ci-main.yml +0 -0
  74. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/.github/workflows/ci-pr.yml +0 -0
  75. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/.github/workflows/docs.yml +0 -0
  76. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/.github/workflows/release.yml +0 -0
  77. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/.gitignore +0 -0
  78. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/.pre-commit-config.yaml +0 -0
  79. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/.readthedocs.yaml +0 -0
  80. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/LICENSE +0 -0
  81. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/Makefile +0 -0
  82. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/README.md +0 -0
  83. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/codecov.yml +0 -0
  84. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docker-compose.local.yaml +0 -0
  85. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/_static/.gitkeep +0 -0
  86. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/_static/custom.css +0 -0
  87. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/_static/logo-transparent.png +0 -0
  88. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/_static/logo.svg +0 -0
  89. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/ai/a2a.md +0 -0
  90. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/ai/observability.md +0 -0
  91. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/ai/overview.md +0 -0
  92. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/ai/providers.md +0 -0
  93. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/architecture/adr/README.md +0 -0
  94. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/architecture/clean-architecture.md +0 -0
  95. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/architecture/overview.md +0 -0
  96. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/etl/examples.md +0 -0
  97. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/etl/pipelines.md +0 -0
  98. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/etl/testing.md +0 -0
  99. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/examples-repo/index.md +0 -0
  100. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/getting-started/etl.md +0 -0
  101. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/getting-started/rest.md +0 -0
  102. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/getting-started/streaming.md +0 -0
  103. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/guides/autocrud.md +0 -0
  104. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/guides/celery.md +0 -0
  105. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/guides/etl.md +0 -0
  106. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/guides/fake-repo-examples.md +0 -0
  107. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/guides/quickstart.md +0 -0
  108. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/guides/use-case-dsl.md +0 -0
  109. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/index.rst +0 -0
  110. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/overview.md +0 -0
  111. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/reference/api/ai.rst +0 -0
  112. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/reference/api/core.rst +0 -0
  113. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/reference/api/etl.rst +0 -0
  114. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/reference/api/repository.rst +0 -0
  115. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/reference/api/rest.rst +0 -0
  116. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/reference/api/streaming.rst +0 -0
  117. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/reference/api/testing.rst +0 -0
  118. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/reference/index.rst +0 -0
  119. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/requirements.txt +0 -0
  120. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/rest/autocrud.md +0 -0
  121. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/rest/cache.md +0 -0
  122. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/rest/celery.md +0 -0
  123. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/rest/examples.md +0 -0
  124. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/rest/identity.md +0 -0
  125. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/rest/persistence-backends.md +0 -0
  126. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/rest/sql.md +0 -0
  127. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/rest/testing.md +0 -0
  128. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/streaming/bytewax.md +0 -0
  129. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/streaming/delivery.md +0 -0
  130. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/docs/streaming/tracing.md +0 -0
  131. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/pyproject.toml +0 -0
  132. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/scripts/ci/merge_test_results.py +0 -0
  133. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/scripts/release/README.md +0 -0
  134. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/sonar-project.properties +0 -0
  135. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/__init__.py +0 -0
  136. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/__init__.py +0 -0
  137. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/_concurrency.py +0 -0
  138. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/_filters.py +0 -0
  139. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/_roles.py +0 -0
  140. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/_usecase.py +0 -0
  141. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/a2a/__init__.py +0 -0
  142. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/a2a/_binding.py +0 -0
  143. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/a2a/_rpc.py +0 -0
  144. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/a2a/card.py +0 -0
  145. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/a2a/events.py +0 -0
  146. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/a2a/server.py +0 -0
  147. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/compiler/__init__.py +0 -0
  148. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/compiler/_compiler.py +0 -0
  149. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/compiler/phases/__init__.py +0 -0
  150. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/compiler/phases/_capabilities.py +0 -0
  151. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/compiler/phases/_conversation.py +0 -0
  152. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/compiler/phases/_feedable.py +0 -0
  153. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/compiler/phases/_hook.py +0 -0
  154. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/compiler/phases/_instructions.py +0 -0
  155. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/compiler/phases/_limits.py +0 -0
  156. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/compiler/phases/_model_role.py +0 -0
  157. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/config.py +0 -0
  158. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/declarative/__init__.py +0 -0
  159. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/declarative/_envelope.py +0 -0
  160. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/declarative/_schema.py +0 -0
  161. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/declarative/_v1.py +0 -0
  162. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
  163. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/__init__.py +0 -0
  164. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
  165. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
  166. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_capabilities.py +0 -0
  167. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
  168. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
  169. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
  170. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
  171. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_instructions.py +0 -0
  172. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
  173. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_models.py +0 -0
  174. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
  175. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
  176. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
  177. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/errors.py +0 -0
  178. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/fastapi/__init__.py +0 -0
  179. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/fastapi/response.py +0 -0
  180. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/fastapi/streaming.py +0 -0
  181. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/inference.py +0 -0
  182. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/registry.py +0 -0
  183. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/remote_auth.py +0 -0
  184. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/runtime/__init__.py +0 -0
  185. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/runtime/_bounded.py +0 -0
  186. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/runtime/_chain.py +0 -0
  187. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/runtime/_conversation.py +0 -0
  188. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/runtime/_handle.py +0 -0
  189. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/runtime/_health.py +0 -0
  190. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/runtime/_limits.py +0 -0
  191. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/runtime/_mcp.py +0 -0
  192. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/validate/__init__.py +0 -0
  193. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/ai/validate/__main__.py +0 -0
  194. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/celery/__init__.py +0 -0
  195. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/celery/auto.py +0 -0
  196. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/celery/bootstrap.py +0 -0
  197. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/celery/config.py +0 -0
  198. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/celery/constants.py +0 -0
  199. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/celery/runner.py +0 -0
  200. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/celery/service.py +0 -0
  201. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/async_bridge.py +0 -0
  202. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/backend/__init__.py +0 -0
  203. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/backend/core_model.py +0 -0
  204. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/backend/protocol.py +0 -0
  205. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/backend/sqlalchemy.py +0 -0
  206. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/bootstrap/__init__.py +0 -0
  207. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/bootstrap/bootstrap.py +0 -0
  208. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/bootstrap/kernel.py +0 -0
  209. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/__init__.py +0 -0
  210. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/_batching.py +0 -0
  211. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/_single_flight.py +0 -0
  212. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/abc/__init__.py +0 -0
  213. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/abc/backend.py +0 -0
  214. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/abc/config.py +0 -0
  215. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/abc/dependency.py +0 -0
  216. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/calls.py +0 -0
  217. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/codec.py +0 -0
  218. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/decorators.py +0 -0
  219. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/dependency.py +0 -0
  220. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/errors.py +0 -0
  221. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/keys.py +0 -0
  222. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/serializer.py +0 -0
  223. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/cache/wiring.py +0 -0
  224. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/command/__init__.py +0 -0
  225. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/command/adapter.py +0 -0
  226. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/command/field.py +0 -0
  227. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/command/introspection.py +0 -0
  228. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/compiler.py +0 -0
  229. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/__init__.py +0 -0
  230. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/_includes.py +0 -0
  231. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/_resolver_utils.py +0 -0
  232. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/binder.py +0 -0
  233. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/configurable.py +0 -0
  234. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/context.py +0 -0
  235. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/errors.py +0 -0
  236. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/keys.py +0 -0
  237. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/loader.py +0 -0
  238. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/model.py +0 -0
  239. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/observability.py +0 -0
  240. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/resolver.py +0 -0
  241. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/secrets.py +0 -0
  242. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/config/ssm.py +0 -0
  243. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/contracts/__init__.py +0 -0
  244. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/contracts/manifest.py +0 -0
  245. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/di/__init__.py +0 -0
  246. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/di/container.py +0 -0
  247. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/di/scope.py +0 -0
  248. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/discovery/__init__.py +0 -0
  249. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/discovery/_utils.py +0 -0
  250. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/discovery/base.py +0 -0
  251. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/discovery/interfaces.py +0 -0
  252. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/discovery/manifest.py +0 -0
  253. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/discovery/modules.py +0 -0
  254. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/engine/__init__.py +0 -0
  255. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/engine/compilable.py +0 -0
  256. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/engine/compiler.py +0 -0
  257. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/engine/events.py +0 -0
  258. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/engine/executor.py +0 -0
  259. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/engine/metrics.py +0 -0
  260. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/engine/plan.py +0 -0
  261. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/engine/post_commit.py +0 -0
  262. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/errors/__init__.py +0 -0
  263. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/errors/errors.py +0 -0
  264. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/expr/__init__.py +0 -0
  265. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/expr/eval.py +0 -0
  266. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/expr/nodes.py +0 -0
  267. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/expr/refs.py +0 -0
  268. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/identity/__init__.py +0 -0
  269. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/identity/context.py +0 -0
  270. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/identity/identity.py +0 -0
  271. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/identity/issuer.py +0 -0
  272. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/identity/wire.py +0 -0
  273. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/introspection/__init__.py +0 -0
  274. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/introspection/base.py +0 -0
  275. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/introspection/describe.py +0 -0
  276. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/job/__init__.py +0 -0
  277. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/job/callback.py +0 -0
  278. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/job/context.py +0 -0
  279. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/job/handle.py +0 -0
  280. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/job/job.py +0 -0
  281. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/job/service.py +0 -0
  282. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/logger/__init__.py +0 -0
  283. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/logger/abc.py +0 -0
  284. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/logger/config.py +0 -0
  285. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/logger/registry.py +0 -0
  286. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/logger/structlogger.py +0 -0
  287. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/model/base.py +0 -0
  288. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/model/convert.py +0 -0
  289. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/model/enums.py +0 -0
  290. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/model/field.py +0 -0
  291. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/model/introspection.py +0 -0
  292. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/model/projection.py +0 -0
  293. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/model/relation.py +0 -0
  294. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/model/struct.py +0 -0
  295. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/model/timestamped.py +0 -0
  296. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/model/types.py +0 -0
  297. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/model/types_postgres.py +0 -0
  298. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/observability/__init__.py +0 -0
  299. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/observability/config.py +0 -0
  300. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/observability/event.py +0 -0
  301. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/observability/observer/__init__.py +0 -0
  302. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/observability/observer/noop.py +0 -0
  303. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/observability/observer/otel.py +0 -0
  304. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/observability/observer/structlog.py +0 -0
  305. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/observability/otel_ids.py +0 -0
  306. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/observability/protocol.py +0 -0
  307. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/observability/runtime.py +0 -0
  308. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/observability/span.py +0 -0
  309. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/observability/topology.py +0 -0
  310. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/persistence/__init__.py +0 -0
  311. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/persistence/abc.py +0 -0
  312. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/persistence/none.py +0 -0
  313. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/persistence/registry.py +0 -0
  314. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/plugins/__init__.py +0 -0
  315. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/plugins/entrypoints.py +0 -0
  316. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/projection/__init__.py +0 -0
  317. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/projection/loaders.py +0 -0
  318. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/projection/runtime.py +0 -0
  319. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/__init__.py +0 -0
  320. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/abc/__init__.py +0 -0
  321. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/abc/cursor.py +0 -0
  322. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/abc/errors.py +0 -0
  323. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/abc/query.py +0 -0
  324. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/abc/query_compiler.py +0 -0
  325. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/abc/repo_for.py +0 -0
  326. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/abc/repository.py +0 -0
  327. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/abc/session_scope.py +0 -0
  328. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/dynamodb/__init__.py +0 -0
  329. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/dynamodb/backend.py +0 -0
  330. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/dynamodb/registry.py +0 -0
  331. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/dynamodb/repository.py +0 -0
  332. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/dynamodb/uow.py +0 -0
  333. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/mongo/__init__.py +0 -0
  334. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/mongo/backend.py +0 -0
  335. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/mongo/ids.py +0 -0
  336. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/mongo/query_compiler.py +0 -0
  337. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/mongo/registry.py +0 -0
  338. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/mongo/repository.py +0 -0
  339. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/mongo/uow.py +0 -0
  340. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/mongo/values.py +0 -0
  341. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/mutation.py +0 -0
  342. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/registration.py +0 -0
  343. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/registry.py +0 -0
  344. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
  345. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/backend.py +0 -0
  346. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
  347. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
  348. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
  349. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/model.py +0 -0
  350. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
  351. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
  352. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
  353. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
  354. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
  355. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
  356. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
  357. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
  358. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
  359. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
  360. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
  361. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
  362. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
  363. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
  364. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
  365. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/response/__init__.py +0 -0
  366. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/response/base.py +0 -0
  367. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/routing/__init__.py +0 -0
  368. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/routing/ref.py +0 -0
  369. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/routing/resolver.py +0 -0
  370. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/runner.py +0 -0
  371. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/schema/__init__.py +0 -0
  372. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/schema/schema_mode.py +0 -0
  373. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/sql/__init__.py +0 -0
  374. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/sql/abc/__init__.py +0 -0
  375. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/sql/abc/contracts.py +0 -0
  376. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/sql/abc/errors.py +0 -0
  377. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/sql/caller_bound.py +0 -0
  378. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/sql/clickhouse/__init__.py +0 -0
  379. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/sql/clickhouse/_client.py +0 -0
  380. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/sql/clickhouse/executor.py +0 -0
  381. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/sql/clickhouse/registry.py +0 -0
  382. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/sql/config.py +0 -0
  383. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/sql/roles.py +0 -0
  384. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/sql/service.py +0 -0
  385. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/symbols.py +0 -0
  386. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/tracing/__init__.py +0 -0
  387. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/tracing/context.py +0 -0
  388. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/transaction.py +0 -0
  389. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/transport/__init__.py +0 -0
  390. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/transport/adapter.py +0 -0
  391. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/uow/__init__.py +0 -0
  392. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/uow/abc.py +0 -0
  393. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/uow/context.py +0 -0
  394. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/__init__.py +0 -0
  395. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/_predicates.py +0 -0
  396. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/agent_markers.py +0 -0
  397. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/compute.py +0 -0
  398. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/constants.py +0 -0
  399. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/factory.py +0 -0
  400. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/field_ref.py +0 -0
  401. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/invoker.py +0 -0
  402. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/keys.py +0 -0
  403. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/markers.py +0 -0
  404. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/mcp_markers.py +0 -0
  405. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/registry.py +0 -0
  406. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/rule.py +0 -0
  407. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/core/use_case/use_case.py +0 -0
  408. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/__init__.py +0 -0
  409. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/__init__.py +0 -0
  410. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_format_registry.py +0 -0
  411. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_historify/__init__.py +0 -0
  412. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_historify/_common.py +0 -0
  413. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_historify/_log.py +0 -0
  414. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_historify/_ops.py +0 -0
  415. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
  416. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_historify/_transform.py +0 -0
  417. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_merge.py +0 -0
  418. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_path_template.py +0 -0
  419. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_predicate.py +0 -0
  420. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
  421. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
  422. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
  423. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/_write_policy.py +0 -0
  424. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/polars/__init__.py +0 -0
  425. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/polars/_dtype.py +0 -0
  426. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/polars/_file_writer.py +0 -0
  427. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/polars/_historify.py +0 -0
  428. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/polars/_predicate.py +0 -0
  429. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/polars/_reader.py +0 -0
  430. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/polars/_schema.py +0 -0
  431. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
  432. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/polars/_streaming.py +0 -0
  433. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/polars/_writer.py +0 -0
  434. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/polars/provider.py +0 -0
  435. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/spark/__init__.py +0 -0
  436. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/spark/_dtype.py +0 -0
  437. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/spark/_historify.py +0 -0
  438. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/spark/_reader.py +0 -0
  439. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/spark/_schema.py +0 -0
  440. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
  441. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/spark/_writer.py +0 -0
  442. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/backends/spark/provider.py +0 -0
  443. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/checkpoint/__init__.py +0 -0
  444. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
  445. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
  446. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/checkpoint/_cleaners.py +0 -0
  447. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/checkpoint/_paths.py +0 -0
  448. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/checkpoint/_scope.py +0 -0
  449. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/checkpoint/_store.py +0 -0
  450. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/compiler/__init__.py +0 -0
  451. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/compiler/_binding.py +0 -0
  452. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/compiler/_compiler.py +0 -0
  453. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/compiler/_errors.py +0 -0
  454. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/compiler/_plan.py +0 -0
  455. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/compiler/_validators.py +0 -0
  456. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/compiler/_validators_plan.py +0 -0
  457. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/compiler/_validators_step.py +0 -0
  458. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/__init__.py +0 -0
  459. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/_format.py +0 -0
  460. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/_read_options.py +0 -0
  461. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/_utils.py +0 -0
  462. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/_write_options.py +0 -0
  463. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/expr/__init__.py +0 -0
  464. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/expr/_params.py +0 -0
  465. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/expr/_predicate.py +0 -0
  466. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
  467. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/expr/_refs.py +0 -0
  468. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/source/__init__.py +0 -0
  469. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/source/_from.py +0 -0
  470. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
  471. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
  472. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
  473. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/source/_specs.py +0 -0
  474. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/target/__init__.py +0 -0
  475. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/target/_client.py +0 -0
  476. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/target/_file.py +0 -0
  477. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
  478. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
  479. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
  480. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
  481. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/target/_history/_report.py +0 -0
  482. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
  483. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/target/_into.py +0 -0
  484. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
  485. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/target/_table.py +0 -0
  486. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/declarative/target/_temp.py +0 -0
  487. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/executor/__init__.py +0 -0
  488. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/executor/_dispatcher.py +0 -0
  489. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/executor/_executor.py +0 -0
  490. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/__init__.py +0 -0
  491. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/_registry.py +0 -0
  492. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/sources/__init__.py +0 -0
  493. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/sources/_clickhouse.py +0 -0
  494. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/sources/_dynamodb.py +0 -0
  495. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
  496. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
  497. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/sources/_mongo.py +0 -0
  498. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
  499. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
  500. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
  501. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/sources/_serialization.py +0 -0
  502. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/targets/__init__.py +0 -0
  503. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/io/targets/_clickhouse.py +0 -0
  504. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/lineage/__init__.py +0 -0
  505. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/lineage/_config.py +0 -0
  506. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/lineage/_observer.py +0 -0
  507. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/lineage/_records.py +0 -0
  508. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/lineage/sinks/__init__.py +0 -0
  509. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
  510. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/lineage/sinks/_table.py +0 -0
  511. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/lineage/sinks/_writer.py +0 -0
  512. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/maintenance/__init__.py +0 -0
  513. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/maintenance/_builder.py +0 -0
  514. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/maintenance/_ops.py +0 -0
  515. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/maintenance/_protocol.py +0 -0
  516. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/maintenance/_runner.py +0 -0
  517. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/maintenance/_step.py +0 -0
  518. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/maintenance/backends/__init__.py +0 -0
  519. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
  520. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/pipeline/__init__.py +0 -0
  521. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/pipeline/_generics.py +0 -0
  522. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/pipeline/_params.py +0 -0
  523. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/pipeline/_pipeline.py +0 -0
  524. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/pipeline/_process.py +0 -0
  525. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/pipeline/_sql.py +0 -0
  526. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/pipeline/_step.py +0 -0
  527. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/pipeline/_step_client.py +0 -0
  528. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/pipeline/_step_sql.py +0 -0
  529. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/runner/__init__.py +0 -0
  530. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/runner/_providers.py +0 -0
  531. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/runner/_wiring.py +0 -0
  532. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/runner/config_loader.py +0 -0
  533. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/runner/core.py +0 -0
  534. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/runner/errors.py +0 -0
  535. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/runner/filtering.py +0 -0
  536. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/runtime/__init__.py +0 -0
  537. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/runtime/contracts.py +0 -0
  538. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/schema/__init__.py +0 -0
  539. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/schema/_contract.py +0 -0
  540. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/schema/_schema.py +0 -0
  541. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/storage/__init__.py +0 -0
  542. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/storage/_config.py +0 -0
  543. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/storage/_file_locator.py +0 -0
  544. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/storage/_locator.py +0 -0
  545. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/storage/routing.py +0 -0
  546. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/testing/__init__.py +0 -0
  547. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/testing/_result.py +0 -0
  548. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/testing/_runners.py +0 -0
  549. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/testing/_scenario.py +0 -0
  550. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/testing/_stubs.py +0 -0
  551. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/etl/testing/spark.py +0 -0
  552. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/__init__.py +0 -0
  553. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/_async.py +0 -0
  554. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/_config.py +0 -0
  555. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/_ctx.py +0 -0
  556. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/_flow_yaml.py +0 -0
  557. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/_meta.py +0 -0
  558. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/_placeholders.py +0 -0
  559. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/_summary.py +0 -0
  560. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/deploy/__init__.py +0 -0
  561. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/deploy/_discovery.py +0 -0
  562. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/deploy/_schedule.py +0 -0
  563. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
  564. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/deploy/entrypoint.py +0 -0
  565. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/flow/__init__.py +0 -0
  566. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/flow/_assemble.py +0 -0
  567. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/flow/_backfill.py +0 -0
  568. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/flow/_backfill_body.py +0 -0
  569. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/flow/_body.py +0 -0
  570. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/flow/_common.py +0 -0
  571. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/flow/_factory.py +0 -0
  572. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/flow/_hooks.py +0 -0
  573. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/flow/_maintenance.py +0 -0
  574. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/flow/_run_name.py +0 -0
  575. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/flow/_runtime.py +0 -0
  576. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/flow/_signature.py +0 -0
  577. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/flow/_stages.py +0 -0
  578. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/manifest/__init__.py +0 -0
  579. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/manifest/_model.py +0 -0
  580. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/manifest/_s3.py +0 -0
  581. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/manifest/_store.py +0 -0
  582. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/notify/__init__.py +0 -0
  583. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/notify/_event.py +0 -0
  584. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/notify/_factory.py +0 -0
  585. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/notify/_port.py +0 -0
  586. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/notify/_slack.py +0 -0
  587. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/observer/__init__.py +0 -0
  588. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/observer/_flow.py +0 -0
  589. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/observer/_logging_bridge.py +0 -0
  590. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/observer/_manifest.py +0 -0
  591. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prefect/observer/_task_run.py +0 -0
  592. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prometheus/__init__.py +0 -0
  593. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prometheus/_instruments.py +0 -0
  594. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prometheus/adapter.py +0 -0
  595. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prometheus/kafka.py +0 -0
  596. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prometheus/lifecycle.py +0 -0
  597. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/prometheus/middleware.py +0 -0
  598. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/py.typed +0 -0
  599. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/__init__.py +0 -0
  600. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/_body.py +0 -0
  601. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/auth/__init__.py +0 -0
  602. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/auth/abc.py +0 -0
  603. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/auth/config.py +0 -0
  604. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/auth/jwt.py +0 -0
  605. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/auth/middleware.py +0 -0
  606. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/autocrud.py +0 -0
  607. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/compiler.py +0 -0
  608. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/config.py +0 -0
  609. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/constants.py +0 -0
  610. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/cors.py +0 -0
  611. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/fastapi/__init__.py +0 -0
  612. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/fastapi/_errors.py +0 -0
  613. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/fastapi/_exclusions.py +0 -0
  614. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/fastapi/app.py +0 -0
  615. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/fastapi/auto.py +0 -0
  616. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/fastapi/health.py +0 -0
  617. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/fastapi/router_runtime.py +0 -0
  618. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/fastapi/sql.py +0 -0
  619. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/middleware.py +0 -0
  620. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/model.py +0 -0
  621. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/rest/rest_adapter.py +0 -0
  622. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/__init__.py +0 -0
  623. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/__init__.py +0 -0
  624. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/_adapter.py +0 -0
  625. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
  626. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
  627. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/_dlq.py +0 -0
  628. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
  629. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/_errors.py +0 -0
  630. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/_operators.py +0 -0
  631. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
  632. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
  633. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
  634. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
  635. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
  636. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
  637. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
  638. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
  639. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
  640. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
  641. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
  642. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
  643. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/bytewax/runner.py +0 -0
  644. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/compiler/__init__.py +0 -0
  645. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/compiler/_bindings.py +0 -0
  646. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/compiler/_compiler.py +0 -0
  647. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/compiler/_errors.py +0 -0
  648. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/compiler/_plan.py +0 -0
  649. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/compiler/phases/build_plan.py +0 -0
  650. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/compiler/phases/validate.py +0 -0
  651. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/core/__init__.py +0 -0
  652. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/core/_errors.py +0 -0
  653. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/core/_exceptions.py +0 -0
  654. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/core/_message.py +0 -0
  655. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/core/_tracing.py +0 -0
  656. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/core/_typing.py +0 -0
  657. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/graph/__init__.py +0 -0
  658. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/graph/_flow.py +0 -0
  659. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/__init__.py +0 -0
  660. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/_codec.py +0 -0
  661. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/_config.py +0 -0
  662. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/_errors.py +0 -0
  663. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/_key_resolver.py +0 -0
  664. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/_message.py +0 -0
  665. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/_record.py +0 -0
  666. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/_wire.py +0 -0
  667. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/client/__init__.py +0 -0
  668. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/client/_consumer.py +0 -0
  669. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/client/_producer.py +0 -0
  670. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/client/_protocol.py +0 -0
  671. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/client/_retry.py +0 -0
  672. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/message/__init__.py +0 -0
  673. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/message/_consumer.py +0 -0
  674. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/message/_producer.py +0 -0
  675. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/kafka/message/_protocol.py +0 -0
  676. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/mongo/__init__.py +0 -0
  677. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
  678. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/mongo/_config.py +0 -0
  679. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/mongo/_event.py +0 -0
  680. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/mongo/_normalize.py +0 -0
  681. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/__init__.py +0 -0
  682. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_boundary.py +0 -0
  683. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_branches.py +0 -0
  684. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_broadcast.py +0 -0
  685. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_capabilities.py +0 -0
  686. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_decompose.py +0 -0
  687. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_expand_routes.py +0 -0
  688. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_expr_eval.py +0 -0
  689. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_fork.py +0 -0
  690. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_helpers.py +0 -0
  691. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_mongo.py +0 -0
  692. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_protocols.py +0 -0
  693. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_router.py +0 -0
  694. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_shape.py +0 -0
  695. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_sink.py +0 -0
  696. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_step.py +0 -0
  697. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_table/__init__.py +0 -0
  698. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_table/common.py +0 -0
  699. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_table/config.py +0 -0
  700. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/_with.py +0 -0
  701. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/nodes/refs.py +0 -0
  702. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/streaming/testing.py +0 -0
  703. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/testing/__init__.py +0 -0
  704. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/testing/agents.py +0 -0
  705. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/testing/golden.py +0 -0
  706. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/testing/http_harness.py +0 -0
  707. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/testing/in_memory.py +0 -0
  708. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/testing/repository_harness.py +0 -0
  709. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/src/loom/testing/runner.py +0 -0
  710. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/__init__.py +0 -0
  711. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/conftest.py +0 -0
  712. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/contract/__init__.py +0 -0
  713. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/contract/ai/__init__.py +0 -0
  714. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/contract/ai/test_contract_fake.py +0 -0
  715. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/contract/observability/__init__.py +0 -0
  716. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/contract/observability/test_otel_sdk_contract.py +0 -0
  717. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/fixtures/__init__.py +0 -0
  718. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/fixtures/config/split_storage/common.yaml +0 -0
  719. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/fixtures/config/split_storage/original.yaml +0 -0
  720. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/fixtures/config/split_storage/storage.yaml +0 -0
  721. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/fixtures/config/split_storage/tables/billing.yaml +0 -0
  722. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/fixtures/config/split_storage/tables/sales.yaml +0 -0
  723. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/fixtures/prefect/__init__.py +0 -0
  724. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/fixtures/prefect/etls/billing.yaml +0 -0
  725. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/fixtures/prefect/etls/daily_orders.yaml +0 -0
  726. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/fixtures/prefect/etls/orders_reconcile.yaml +0 -0
  727. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/fixtures/prefect/pipelines.py +0 -0
  728. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/fixtures/prefect/raising.py +0 -0
  729. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/golden/__init__.py +0 -0
  730. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/golden/baselines/.gitkeep +0 -0
  731. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/golden/outputs/.gitkeep +0 -0
  732. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/golden/plans/.gitkeep +0 -0
  733. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/helpers/__init__.py +0 -0
  734. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/helpers/remote_auth_plugin.py +0 -0
  735. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/helpers/spans.py +0 -0
  736. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/__init__.py +0 -0
  737. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/__init__.py +0 -0
  738. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/_agents_only_app.py +0 -0
  739. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/_entrypoints.py +0 -0
  740. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/_no_marker_app.py +0 -0
  741. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/mcp_stdio_server.py +0 -0
  742. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_a2a_auth_wiring.py +0 -0
  743. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_agent_call_chain.py +0 -0
  744. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_agent_marker_grants_integration.py +0 -0
  745. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_agent_marker_integration.py +0 -0
  746. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_agent_marker_test_double.py +0 -0
  747. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_agent_specs_source.py +0 -0
  748. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_auto_a2a.py +0 -0
  749. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_auto_agents_only.py +0 -0
  750. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_auto_client_factories.py +0 -0
  751. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_auto_gate.py +0 -0
  752. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_auto_without_sqlalchemy.py +0 -0
  753. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_capabilities.py +0 -0
  754. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_conversation.py +0 -0
  755. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_describe.py +0 -0
  756. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_grant_wiring.py +0 -0
  757. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_health_probe.py +0 -0
  758. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_hooks.py +0 -0
  759. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_limits.py +0 -0
  760. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_live_provider.py +0 -0
  761. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_mcp_connect_timeout_wiring.py +0 -0
  762. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_mcp_end_to_end.py +0 -0
  763. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_mcp_shared_connection.py +0 -0
  764. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_mcp_stdio_end_to_end.py +0 -0
  765. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_no_agent_marker_containment.py +0 -0
  766. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_remote_auth_wiring.py +0 -0
  767. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_runtime.py +0 -0
  768. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_runtime_remote_clients.py +0 -0
  769. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_state_and_instructions.py +0 -0
  770. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_streaming.py +0 -0
  771. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_transport.py +0 -0
  772. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_use_case_mcp_end_to_end.py +0 -0
  773. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_use_case_mcp_health_gap.py +0 -0
  774. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_use_case_mcp_marker_test_double.py +0 -0
  775. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_use_case_mcp_resolver.py +0 -0
  776. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_use_case_mcp_runtime.py +0 -0
  777. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/ai/test_zero_agent_use_case_mcp.py +0 -0
  778. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/celery_bootstrap/__init__.py +0 -0
  779. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/celery_bootstrap/config/conf.celery.integration.yaml +0 -0
  780. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/celery_bootstrap/test_auto_create_app_integration.py +0 -0
  781. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/celery_bootstrap/test_bootstrap_worker.py +0 -0
  782. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/conftest.py +0 -0
  783. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/__init__.py +0 -0
  784. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/bootstrap/__init__.py +0 -0
  785. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/bootstrap/test_bootstrap_integration.py +0 -0
  786. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/repository/__init__.py +0 -0
  787. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/repository/sqlalchemy/__init__.py +0 -0
  788. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/repository/sqlalchemy/conftest.py +0 -0
  789. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/repository/sqlalchemy/test_cache_integration.py +0 -0
  790. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/repository/sqlalchemy/test_repository_integration.py +0 -0
  791. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/rest/__init__.py +0 -0
  792. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/rest/test_auto_interface_integration.py +0 -0
  793. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/rest/test_fastapi_app_integration.py +0 -0
  794. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/rest/test_rest_error_mapping.py +0 -0
  795. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/rest/test_rest_observability.py +0 -0
  796. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/use_case/__init__.py +0 -0
  797. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/use_case/test_caller_bound_sql_integration.py +0 -0
  798. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/use_case/test_custom_repository_integration.py +0 -0
  799. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/core/use_case/test_use_case_crud_integration.py +0 -0
  800. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/etl/__init__.py +0 -0
  801. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/etl/test_runner_integration.py +0 -0
  802. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/__init__.py +0 -0
  803. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/config/__init__.py +0 -0
  804. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/config/conf.interfaces.yaml +0 -0
  805. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/config/conf.manifest.yaml +0 -0
  806. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/config/conf.modules.yaml +0 -0
  807. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/config/conf.yaml +0 -0
  808. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/main.py +0 -0
  809. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/manifest.py +0 -0
  810. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/__init__.py +0 -0
  811. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/category/__init__.py +0 -0
  812. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/category/model.py +0 -0
  813. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/category/schemas.py +0 -0
  814. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/interface.py +0 -0
  815. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/jobs.py +0 -0
  816. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/model.py +0 -0
  817. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/relations.py +0 -0
  818. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/repository.py +0 -0
  819. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/repository_contract.py +0 -0
  820. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/review/__init__.py +0 -0
  821. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/review/model.py +0 -0
  822. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/review/schemas.py +0 -0
  823. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/schemas.py +0 -0
  824. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/fake_repo/product/use_cases.py +0 -0
  825. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/persistence/__init__.py +0 -0
  826. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/persistence/mongo/__init__.py +0 -0
  827. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/persistence/mongo/conftest.py +0 -0
  828. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/persistence/mongo/test_bulk.py +0 -0
  829. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/persistence/mongo/test_conftest.py +0 -0
  830. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/persistence/mongo/test_datetime.py +0 -0
  831. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/persistence/mongo/test_pagination.py +0 -0
  832. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/persistence/mongo/test_query.py +0 -0
  833. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/persistence/mongo/test_read.py +0 -0
  834. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/persistence/mongo/test_transactions.py +0 -0
  835. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/persistence/mongo/test_uow.py +0 -0
  836. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/persistence/mongo/test_write.py +0 -0
  837. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/rest/__init__.py +0 -0
  838. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/rest/conftest.py +0 -0
  839. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/rest/test_yaml_interfaces.py +0 -0
  840. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/sql/__init__.py +0 -0
  841. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/sql/init/01_users_roles.sql +0 -0
  842. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/sql/test_clickhouse_integration.py +0 -0
  843. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/streaming/__init__.py +0 -0
  844. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/streaming/kafka/__init__.py +0 -0
  845. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/streaming/kafka/conftest.py +0 -0
  846. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/streaming/kafka/test_partitioned_source_integration.py +0 -0
  847. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/streaming/kafka/test_source_contract_integration.py +0 -0
  848. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/streaming/test_into_table_integration.py +0 -0
  849. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/support/__init__.py +0 -0
  850. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/integration/support/logical_repo_fixtures.py +0 -0
  851. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/__init__.py +0 -0
  852. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/_resolver_stubs.py +0 -0
  853. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/__init__.py +0 -0
  854. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/compiler/__init__.py +0 -0
  855. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/conftest.py +0 -0
  856. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/__init__.py +0 -0
  857. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_a2a_capability.py +0 -0
  858. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_capability_span_nesting.py +0 -0
  859. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_native_tools.py +0 -0
  860. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_conversation.py +0 -0
  861. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_cost_enforcement.py +0 -0
  862. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_errors.py +0 -0
  863. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_failures.py +0 -0
  864. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_limits.py +0 -0
  865. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_mcp_concurrency.py +0 -0
  866. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_mcp_timeouts.py +0 -0
  867. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_shape_override.py +0 -0
  868. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_state.py +0 -0
  869. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_translation.py +0 -0
  870. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_pydantic_ai_usage_limits.py +0 -0
  871. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_python_capability.py +0 -0
  872. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/engines/test_usage_propagation.py +0 -0
  873. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fastapi/__init__.py +0 -0
  874. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/corpus_v1/README.md +0 -0
  875. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/corpus_v1/capability-a2a-agent/agent.yaml +0 -0
  876. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/corpus_v1/capability-mcp-agent/agent.yaml +0 -0
  877. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/corpus_v1/capability-native-agent/agent.yaml +0 -0
  878. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/corpus_v1/capability-python-agent/agent.yaml +0 -0
  879. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/corpus_v1/capability-skills-agent/agent.yaml +0 -0
  880. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/corpus_v1/capability-skills-agent/skills/release-notes/SKILL.md +0 -0
  881. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/corpus_v1/capability-sql-agent/agent.yaml +0 -0
  882. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/corpus_v1/capability-usecase-agent/agent.yaml +0 -0
  883. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/corpus_v1/full-agent/agent.yaml +0 -0
  884. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/corpus_v1/full-agent/skills/severity-rubric/SKILL.md +0 -0
  885. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/corpus_v1/minimal-agent/agent.yaml +0 -0
  886. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/corpus_v1/output-type-ref-agent/agent.yaml +0 -0
  887. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/fake_pkgs/myapp/__init__.py +0 -0
  888. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/__init__.py +0 -0
  889. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/conversations.py +0 -0
  890. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/incidents.py +0 -0
  891. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/invoices.py +0 -0
  892. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/__init__.py +0 -0
  893. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/broken.py +0 -0
  894. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/geo.py +0 -0
  895. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/metrics.py +0 -0
  896. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/params.py +0 -0
  897. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/skills_root/shared/group-changes/SKILL.md +0 -0
  898. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/fixtures/skills_root/shared/tone-of-voice/SKILL.md +0 -0
  899. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/phases/__init__.py +0 -0
  900. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/phases/conftest.py +0 -0
  901. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/phases/test_capabilities.py +0 -0
  902. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/phases/test_conversation.py +0 -0
  903. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/phases/test_hook.py +0 -0
  904. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/phases/test_instructions.py +0 -0
  905. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/phases/test_limits.py +0 -0
  906. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/phases/test_model_role.py +0 -0
  907. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/phases/test_remote_auth_plan.py +0 -0
  908. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/phases/test_validate_cli.py +0 -0
  909. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/runtime/__init__.py +0 -0
  910. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/runtime/test_agent_handle.py +0 -0
  911. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/runtime/test_lifecycle_mcp_wiring.py +0 -0
  912. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/runtime/test_mcp_session.py +0 -0
  913. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_a2a_base_url.py +0 -0
  914. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_agent_handle_contract.py +0 -0
  915. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_compiler_offline.py +0 -0
  916. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_concurrency.py +0 -0
  917. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_config.py +0 -0
  918. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_declarative_conversation.py +0 -0
  919. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_declarative_envelope.py +0 -0
  920. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_declarative_hook.py +0 -0
  921. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_declarative_instructions.py +0 -0
  922. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_declarative_native.py +0 -0
  923. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_declarative_policy_caps.py +0 -0
  924. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_declarative_state.py +0 -0
  925. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_error_catalogue_totality.py +0 -0
  926. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_error_factories.py +0 -0
  927. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_fake_engine.py +0 -0
  928. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_identity_notice.py +0 -0
  929. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_loopback_plaintext.py +0 -0
  930. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_native_capability.py +0 -0
  931. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_no_extras_import.py +0 -0
  932. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_public_surface.py +0 -0
  933. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_registry.py +0 -0
  934. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_remote_auth.py +0 -0
  935. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_remote_auth_settings.py +0 -0
  936. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_run_error_hook.py +0 -0
  937. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_schema_emission.py +0 -0
  938. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_secret_containment.py +0 -0
  939. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_skills_extra.py +0 -0
  940. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_spec_v1_corpus.py +0 -0
  941. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ai/test_usecase_helpers.py +0 -0
  942. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_bootstrap/__init__.py +0 -0
  943. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_bootstrap/test_agent_marker_rejection.py +0 -0
  944. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_bootstrap/test_async_runtime.py +0 -0
  945. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_bootstrap/test_bootstrap.py +0 -0
  946. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_bootstrap/test_bootstrap_cache.py +0 -0
  947. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_bootstrap/test_bootstrap_resolvers.py +0 -0
  948. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_bootstrap/test_bootstrap_without_sqlalchemy.py +0 -0
  949. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_bootstrap/test_mcp_marker_rejection.py +0 -0
  950. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_jobs/__init__.py +0 -0
  951. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_jobs/test_auto.py +0 -0
  952. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_jobs/test_celery_service.py +0 -0
  953. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_jobs/test_config.py +0 -0
  954. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_jobs/test_identity_propagation.py +0 -0
  955. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/celery_jobs/test_runner.py +0 -0
  956. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ci/test_merge_test_results.py +0 -0
  957. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/ci/test_workflow_supply_chain_contract.py +0 -0
  958. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/__init__.py +0 -0
  959. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/backend/__init__.py +0 -0
  960. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/backend/test_backend_compiler.py +0 -0
  961. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/bootstrap/__init__.py +0 -0
  962. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/bootstrap/test_bootstrap.py +0 -0
  963. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/bootstrap/test_bootstrap_metrics.py +0 -0
  964. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/bootstrap/test_kernel.py +0 -0
  965. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/__init__.py +0 -0
  966. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/_doubles.py +0 -0
  967. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/_toolset_module.py +0 -0
  968. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/conftest.py +0 -0
  969. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_cache_call.py +0 -0
  970. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_cache_call_decorator.py +0 -0
  971. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_cache_call_toolset.py +0 -0
  972. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_cache_import_containment.py +0 -0
  973. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_cached_repository.py +0 -0
  974. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_config_wiring.py +0 -0
  975. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_dependency_bump.py +0 -0
  976. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_gateway_config.py +0 -0
  977. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_gateway_write_errors.py +0 -0
  978. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_index_refill.py +0 -0
  979. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_invalidation_granularity.py +0 -0
  980. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_single_flight.py +0 -0
  981. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_ttl_jitter.py +0 -0
  982. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/cache/test_wiring.py +0 -0
  983. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/command/__init__.py +0 -0
  984. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/command/test_command_field.py +0 -0
  985. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/command/test_command_patch.py +0 -0
  986. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/command/test_introspection.py +0 -0
  987. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/config/__init__.py +0 -0
  988. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/config/conftest.py +0 -0
  989. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/config/test_binder.py +0 -0
  990. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/config/test_config.py +0 -0
  991. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/config/test_configurable.py +0 -0
  992. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/config/test_context.py +0 -0
  993. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/config/test_default_resolvers.py +0 -0
  994. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/config/test_includes.py +0 -0
  995. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/config/test_keyed_collections.py +0 -0
  996. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/config/test_resolver_utils.py +0 -0
  997. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/config/test_secrets.py +0 -0
  998. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/config/test_ssm.py +0 -0
  999. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/conftest.py +0 -0
  1000. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/di/__init__.py +0 -0
  1001. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/di/test_container.py +0 -0
  1002. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/discovery/__init__.py +0 -0
  1003. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/discovery/test_interfaces.py +0 -0
  1004. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/discovery/test_manifest.py +0 -0
  1005. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/discovery/test_modules.py +0 -0
  1006. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/__init__.py +0 -0
  1007. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/_lifecycle_doubles.py +0 -0
  1008. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/contract/__init__.py +0 -0
  1009. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/contract/conftest.py +0 -0
  1010. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/contract/test_dispatch.py +0 -0
  1011. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/contract/test_lifecycle.py +0 -0
  1012. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/contract/test_nesting.py +0 -0
  1013. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_agent_marker.py +0 -0
  1014. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_audit_regressions.py +0 -0
  1015. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_caller_binding.py +0 -0
  1016. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_compiler.py +0 -0
  1017. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_compiler_mcp_marker.py +0 -0
  1018. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_executor.py +0 -0
  1019. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_executor_mcp_marker.py +0 -0
  1020. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_executor_trace.py +0 -0
  1021. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_executor_uow.py +0 -0
  1022. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_metrics.py +0 -0
  1023. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_plan.py +0 -0
  1024. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_plan_resolution.py +0 -0
  1025. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_post_commit.py +0 -0
  1026. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_post_commit_shield.py +0 -0
  1027. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/engine/test_post_commit_teardown_guard.py +0 -0
  1028. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/errors/__init__.py +0 -0
  1029. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/errors/test_errors.py +0 -0
  1030. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/expr/__init__.py +0 -0
  1031. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/expr/test_expr.py +0 -0
  1032. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/identity/__init__.py +0 -0
  1033. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/identity/test_context.py +0 -0
  1034. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/identity/test_identity.py +0 -0
  1035. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/identity/test_wire.py +0 -0
  1036. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/introspection/__init__.py +0 -0
  1037. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/introspection/test_describe.py +0 -0
  1038. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/job/__init__.py +0 -0
  1039. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/job/conftest.py +0 -0
  1040. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/job/test_callback.py +0 -0
  1041. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/job/test_context.py +0 -0
  1042. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/job/test_handle.py +0 -0
  1043. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/job/test_inline_service.py +0 -0
  1044. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/job/test_job.py +0 -0
  1045. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/logger/__init__.py +0 -0
  1046. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/logger/test_config.py +0 -0
  1047. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/logger/test_registry.py +0 -0
  1048. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/model/__init__.py +0 -0
  1049. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/model/test_annotation_resolution.py +0 -0
  1050. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/model/test_convert.py +0 -0
  1051. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/model/test_introspection_helpers.py +0 -0
  1052. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/model/test_model.py +0 -0
  1053. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/model/test_struct.py +0 -0
  1054. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/model/test_timestamped.py +0 -0
  1055. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/observability/__init__.py +0 -0
  1056. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/observability/test_message_id_generator.py +0 -0
  1057. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/observability/test_observers.py +0 -0
  1058. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/observability/test_optional_otel_sdk.py +0 -0
  1059. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/observability/test_otel_loader_branches.py +0 -0
  1060. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/observability/test_provider_modes.py +0 -0
  1061. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/observability/test_runtime.py +0 -0
  1062. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/observability/test_tracing_characterisation.py +0 -0
  1063. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/persistence/__init__.py +0 -0
  1064. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/persistence/test_registry.py +0 -0
  1065. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/plugins/__init__.py +0 -0
  1066. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/plugins/test_entrypoints.py +0 -0
  1067. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/plugins/test_import_containment.py +0 -0
  1068. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/projection/__init__.py +0 -0
  1069. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/projection/test_descriptors.py +0 -0
  1070. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/projection/test_runtime.py +0 -0
  1071. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/__init__.py +0 -0
  1072. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/abc/__init__.py +0 -0
  1073. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/abc/conftest.py +0 -0
  1074. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/abc/test_cursor.py +0 -0
  1075. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/abc/test_query.py +0 -0
  1076. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/abc/test_repository_contract.py +0 -0
  1077. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/contract/__init__.py +0 -0
  1078. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/contract/conftest.py +0 -0
  1079. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/contract/test_bulk.py +0 -0
  1080. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/contract/test_cache.py +0 -0
  1081. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/contract/test_pagination.py +0 -0
  1082. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/contract/test_query.py +0 -0
  1083. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/contract/test_read.py +0 -0
  1084. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/contract/test_uow.py +0 -0
  1085. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/contract/test_write.py +0 -0
  1086. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/dynamodb/__init__.py +0 -0
  1087. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/dynamodb/_fake.py +0 -0
  1088. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/dynamodb/conftest.py +0 -0
  1089. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/dynamodb/test_backend.py +0 -0
  1090. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/dynamodb/test_registry.py +0 -0
  1091. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/dynamodb/test_repository.py +0 -0
  1092. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/dynamodb/test_uow.py +0 -0
  1093. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/mongo/__init__.py +0 -0
  1094. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/mongo/_fake.py +0 -0
  1095. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/mongo/conftest.py +0 -0
  1096. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/mongo/test_backend.py +0 -0
  1097. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/mongo/test_fake_collection.py +0 -0
  1098. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/mongo/test_query_compiler.py +0 -0
  1099. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/mongo/test_registry.py +0 -0
  1100. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/mongo/test_repository.py +0 -0
  1101. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/mongo/test_uow.py +0 -0
  1102. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/__init__.py +0 -0
  1103. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/conftest.py +0 -0
  1104. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/test_backend.py +0 -0
  1105. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/test_bulk_create.py +0 -0
  1106. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/test_cursor_pagination.py +0 -0
  1107. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/test_loaders.py +0 -0
  1108. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/test_offset_pagination.py +0 -0
  1109. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/test_query_compiler_protocol.py +0 -0
  1110. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/test_repository.py +0 -0
  1111. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/test_transaction_signal.py +0 -0
  1112. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/test_transactional.py +0 -0
  1113. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/test_transactional_post_commit.py +0 -0
  1114. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/test_transactional_shield.py +0 -0
  1115. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/sqlalchemy/test_typed_columns.py +0 -0
  1116. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/repository/test_registration.py +0 -0
  1117. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/routing/__init__.py +0 -0
  1118. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/routing/test_routing.py +0 -0
  1119. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/sql/__init__.py +0 -0
  1120. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/sql/_fakes.py +0 -0
  1121. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/sql/conftest.py +0 -0
  1122. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/sql/test_caller_bound.py +0 -0
  1123. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/sql/test_clickhouse_executor.py +0 -0
  1124. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/sql/test_clickhouse_transport.py +0 -0
  1125. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/sql/test_config.py +0 -0
  1126. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/sql/test_isolation.py +0 -0
  1127. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/sql/test_null_service.py +0 -0
  1128. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/sql/test_pagination_limits.py +0 -0
  1129. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/sql/test_registry_lifecycle.py +0 -0
  1130. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/sql/test_role_policy.py +0 -0
  1131. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/test_async_bridge.py +0 -0
  1132. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/test_compiler_contracts.py +0 -0
  1133. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/test_runner_contracts.py +0 -0
  1134. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/tracing/__init__.py +0 -0
  1135. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/tracing/test_context.py +0 -0
  1136. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/uow/__init__.py +0 -0
  1137. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/uow/conftest.py +0 -0
  1138. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/uow/test_executor_uow.py +0 -0
  1139. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/uow/test_sqlalchemy_uow.py +0 -0
  1140. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/uow/test_uow_protocols.py +0 -0
  1141. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/use_case/__init__.py +0 -0
  1142. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/use_case/test_compute.py +0 -0
  1143. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/use_case/test_factory.py +0 -0
  1144. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/use_case/test_field_ref.py +0 -0
  1145. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/use_case/test_invoker.py +0 -0
  1146. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/use_case/test_markers.py +0 -0
  1147. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/use_case/test_mcp_markers.py +0 -0
  1148. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/use_case/test_rule.py +0 -0
  1149. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/core/use_case/test_use_case.py +0 -0
  1150. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/__init__.py +0 -0
  1151. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/__init__.py +0 -0
  1152. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/_historify_contract.py +0 -0
  1153. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_empty_write_warning.py +0 -0
  1154. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_historify_common.py +0 -0
  1155. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_path_template.py +0 -0
  1156. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/__init__.py +0 -0
  1157. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/conftest.py +0 -0
  1158. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_apply_schema.py +0 -0
  1159. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_backend.py +0 -0
  1160. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_dtype.py +0 -0
  1161. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_file_writer.py +0 -0
  1162. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_historify_polars.py +0 -0
  1163. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_predicate_pushdown.py +0 -0
  1164. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_provider_optional_mongo.py +0 -0
  1165. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_reader_columns.py +0 -0
  1166. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_reader_json_columns.py +0 -0
  1167. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_step_execution.py +0 -0
  1168. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_streaming_write.py +0 -0
  1169. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_update_writer.py +0 -0
  1170. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_upsert_writer.py +0 -0
  1171. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_writer_null_schema.py +0 -0
  1172. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_polars/test_writer_to_frame.py +0 -0
  1173. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_spark/__init__.py +0 -0
  1174. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_spark/conftest.py +0 -0
  1175. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_spark/test_dtype.py +0 -0
  1176. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_spark/test_historify_spark.py +0 -0
  1177. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_spark/test_session_configuration.py +0 -0
  1178. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_spark/test_spark_apply_schema.py +0 -0
  1179. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_spark/test_step_execution.py +0 -0
  1180. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_spark/test_writer_to_frame.py +0 -0
  1181. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_unsupported_format_contract.py +0 -0
  1182. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/backends/test_write_policy_historify.py +0 -0
  1183. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/checkpoint/__init__.py +0 -0
  1184. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/checkpoint/backends/__init__.py +0 -0
  1185. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/checkpoint/backends/test_checkpoint_polars.py +0 -0
  1186. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/checkpoint/test_checkpoint_paths.py +0 -0
  1187. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/checkpoint/test_cleaners.py +0 -0
  1188. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/checkpoint/test_store.py +0 -0
  1189. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/client_step/__init__.py +0 -0
  1190. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/client_step/test_client_step.py +0 -0
  1191. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/__init__.py +0 -0
  1192. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_catalog_validator.py +0 -0
  1193. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_compiler.py +0 -0
  1194. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_compiler_catalog.py +0 -0
  1195. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_compiler_upsert.py +0 -0
  1196. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_errors.py +0 -0
  1197. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_errors_additional_factories.py +0 -0
  1198. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_errors_runtime_factories.py +0 -0
  1199. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_file_template_validator.py +0 -0
  1200. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_historify_validator.py +0 -0
  1201. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_param_exprs_validator.py +0 -0
  1202. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_plan_traversal.py +0 -0
  1203. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_step_validator.py +0 -0
  1204. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_structural.py +0 -0
  1205. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_temp_validator.py +0 -0
  1206. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/compiler/test_upsert_validator.py +0 -0
  1207. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/conftest.py +0 -0
  1208. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/__init__.py +0 -0
  1209. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/sources/__init__.py +0 -0
  1210. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/sources/test_clickhouse_reader.py +0 -0
  1211. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/sources/test_dynamodb_predicate.py +0 -0
  1212. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/sources/test_dynamodb_reader.py +0 -0
  1213. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/sources/test_from_clickhouse.py +0 -0
  1214. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/sources/test_from_dynamodb.py +0 -0
  1215. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/sources/test_from_mongo.py +0 -0
  1216. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/sources/test_mongo_predicate.py +0 -0
  1217. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/sources/test_mongo_reader.py +0 -0
  1218. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/sources/test_mongo_reader_memory.py +0 -0
  1219. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/targets/__init__.py +0 -0
  1220. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/targets/test_clickhouse_writer.py +0 -0
  1221. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/targets/test_into_clickhouse.py +0 -0
  1222. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/test_history_target.py +0 -0
  1223. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/test_source.py +0 -0
  1224. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/test_source_json.py +0 -0
  1225. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/test_source_options.py +0 -0
  1226. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/test_target.py +0 -0
  1227. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/test_utils.py +0 -0
  1228. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/test_variants.py +0 -0
  1229. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/io/test_writer_registry.py +0 -0
  1230. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/lineage/test_observer.py +0 -0
  1231. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/lineage/test_records.py +0 -0
  1232. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/lineage/test_store.py +0 -0
  1233. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/maintenance/__init__.py +0 -0
  1234. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/maintenance/backends/__init__.py +0 -0
  1235. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/maintenance/backends/test_delta_rs.py +0 -0
  1236. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/maintenance/conftest.py +0 -0
  1237. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/maintenance/test_builder.py +0 -0
  1238. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/maintenance/test_runner.py +0 -0
  1239. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/maintenance/test_step.py +0 -0
  1240. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/pipeline/__init__.py +0 -0
  1241. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/pipeline/test_pipeline_process.py +0 -0
  1242. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/pipeline/test_proxy.py +0 -0
  1243. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/pipeline/test_step.py +0 -0
  1244. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/schema/__init__.py +0 -0
  1245. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/schema/test_contract.py +0 -0
  1246. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/schema/test_schema.py +0 -0
  1247. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/schema/test_table.py +0 -0
  1248. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/sql/__init__.py +0 -0
  1249. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/sql/test_merge.py +0 -0
  1250. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/sql/test_predicate.py +0 -0
  1251. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/sql/test_predicate_dialect.py +0 -0
  1252. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/sql/test_sql_runtime.py +0 -0
  1253. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/storage/__init__.py +0 -0
  1254. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/storage/test_backend_factory.py +0 -0
  1255. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/storage/test_io_protocols.py +0 -0
  1256. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/storage/test_locator.py +0 -0
  1257. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/storage/test_observability_and_protocols.py +0 -0
  1258. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/storage/test_route_build.py +0 -0
  1259. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/storage/test_schema_readers.py +0 -0
  1260. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/storage/test_storage_config.py +0 -0
  1261. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/storage/test_storage_config_mapping.py +0 -0
  1262. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/storage/test_storage_profiles.py +0 -0
  1263. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/test_config_loader.py +0 -0
  1264. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/test_executor.py +0 -0
  1265. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/test_executor_tracing.py +0 -0
  1266. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/test_format_registry.py +0 -0
  1267. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/test_module_contracts.py +0 -0
  1268. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/test_public_api_discovery.py +0 -0
  1269. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/test_record_schema_coverage.py +0 -0
  1270. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/test_runner.py +0 -0
  1271. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/test_runner_errors.py +0 -0
  1272. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/test_runner_resolvers.py +0 -0
  1273. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/test_spark_testing.py +0 -0
  1274. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/test_split_storage.py +0 -0
  1275. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/testing/__init__.py +0 -0
  1276. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/testing/test_runners.py +0 -0
  1277. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/testing/test_scenario_and_stubs.py +0 -0
  1278. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/etl/testing/test_spark_helpers.py +0 -0
  1279. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/__init__.py +0 -0
  1280. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_backfill_flow.py +0 -0
  1281. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_config.py +0 -0
  1282. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_ctx.py +0 -0
  1283. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_discovery_config.py +0 -0
  1284. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_entrypoint.py +0 -0
  1285. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_etl_flow.py +0 -0
  1286. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_logging_bridge.py +0 -0
  1287. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_maintenance_flow.py +0 -0
  1288. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_manifest.py +0 -0
  1289. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_manifest_s3.py +0 -0
  1290. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_notify.py +0 -0
  1291. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_observer.py +0 -0
  1292. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_placeholders.py +0 -0
  1293. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_task_run_observer.py +0 -0
  1294. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_yaml_etls.py +0 -0
  1295. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prefect/test_yaml_loader.py +0 -0
  1296. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prometheus/__init__.py +0 -0
  1297. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prometheus/test_adapter.py +0 -0
  1298. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prometheus/test_instruments.py +0 -0
  1299. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/prometheus/test_middleware.py +0 -0
  1300. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/release/test_release_workflow_contract.py +0 -0
  1301. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/__init__.py +0 -0
  1302. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/_fixture_app.py +0 -0
  1303. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_app_hardening.py +0 -0
  1304. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_auth_middleware.py +0 -0
  1305. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_auth_rejection_logging.py +0 -0
  1306. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_autocrud.py +0 -0
  1307. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_autocrud_capabilities.py +0 -0
  1308. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_cors.py +0 -0
  1309. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_create_app_cache.py +0 -0
  1310. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_fastapi_auto_logger.py +0 -0
  1311. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_fastapi_auto_mcp_markers.py +0 -0
  1312. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_fastapi_auto_persistence.py +0 -0
  1313. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_fastapi_auto_resolvers.py +0 -0
  1314. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_health.py +0 -0
  1315. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_jwt_issuer.py +0 -0
  1316. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_jwt_middleware.py +0 -0
  1317. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_middleware.py +0 -0
  1318. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_persistence_boundary.py +0 -0
  1319. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_pydantic_adapter.py +0 -0
  1320. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_request_hardening.py +0 -0
  1321. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_rest_compiler.py +0 -0
  1322. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_rest_config.py +0 -0
  1323. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_rest_model.py +0 -0
  1324. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_route_rbac.py +0 -0
  1325. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_router_identity.py +0 -0
  1326. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_sql_container_registration.py +0 -0
  1327. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_sql_endpoint.py +0 -0
  1328. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_sql_endpoint_auth_gate.py +0 -0
  1329. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_sql_endpoint_roles.py +0 -0
  1330. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/rest/test_sql_serialization.py +0 -0
  1331. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/__init__.py +0 -0
  1332. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/__init__.py +0 -0
  1333. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/cases.py +0 -0
  1334. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/conftest.py +0 -0
  1335. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_adapter.py +0 -0
  1336. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_batch_key.py +0 -0
  1337. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_bytewax_dispatcher.py +0 -0
  1338. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_collect_batch.py +0 -0
  1339. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_dlq.py +0 -0
  1340. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_fanout_accounting.py +0 -0
  1341. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_import_without_sqlalchemy.py +0 -0
  1342. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_operators.py +0 -0
  1343. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_resource_manager.py +0 -0
  1344. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_runner.py +0 -0
  1345. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_runner_resolvers.py +0 -0
  1346. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_runtime_io.py +0 -0
  1347. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_runtime_sink.py +0 -0
  1348. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_runtime_source.py +0 -0
  1349. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_sink_registry.py +0 -0
  1350. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_steps.py +0 -0
  1351. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_storage.py +0 -0
  1352. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/bytewax/test_storage_trace_characterisation.py +0 -0
  1353. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/compiler/__init__.py +0 -0
  1354. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/compiler/cases.py +0 -0
  1355. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/compiler/test_async_walk.py +0 -0
  1356. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/compiler/test_basics.py +0 -0
  1357. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/compiler/test_clickhouse_sink_validation.py +0 -0
  1358. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/compiler/test_config_bindings.py +0 -0
  1359. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/compiler/test_delivery.py +0 -0
  1360. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/compiler/test_error_codes.py +0 -0
  1361. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/compiler/test_mongo_source.py +0 -0
  1362. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/compiler/test_multi_source.py +0 -0
  1363. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/compiler/test_router.py +0 -0
  1364. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/compiler/test_window.py +0 -0
  1365. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/compiler/test_with.py +0 -0
  1366. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/conftest.py +0 -0
  1367. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/contracts/__init__.py +0 -0
  1368. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/contracts/cases.py +0 -0
  1369. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/contracts/test_boundary.py +0 -0
  1370. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/contracts/test_message.py +0 -0
  1371. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/contracts/test_mongo_contracts.py +0 -0
  1372. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/contracts/test_multi_boundary.py +0 -0
  1373. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/contracts/test_steps.py +0 -0
  1374. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/flows/__init__.py +0 -0
  1375. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/flows/cases/__init__.py +0 -0
  1376. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/flows/cases/batch.py +0 -0
  1377. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/flows/cases/explode.py +0 -0
  1378. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/flows/cases/fork.py +0 -0
  1379. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/flows/cases/router.py +0 -0
  1380. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/flows/cases/shared.py +0 -0
  1381. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/flows/cases/simple.py +0 -0
  1382. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/flows/conftest.py +0 -0
  1383. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/flows/test_compiler_examples.py +0 -0
  1384. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/flows/test_flow_examples.py +0 -0
  1385. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/__init__.py +0 -0
  1386. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/cases.py +0 -0
  1387. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/conftest.py +0 -0
  1388. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/fakes.py +0 -0
  1389. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/test_client.py +0 -0
  1390. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/test_config.py +0 -0
  1391. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/test_coordinator_retry.py +0 -0
  1392. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/test_key_resolver.py +0 -0
  1393. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/test_message.py +0 -0
  1394. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/test_message_client.py +0 -0
  1395. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/test_multi_wire.py +0 -0
  1396. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/test_observability.py +0 -0
  1397. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/test_settings.py +0 -0
  1398. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/test_source_decode_parity.py +0 -0
  1399. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/kafka/test_wire.py +0 -0
  1400. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/mongo/test_bytewax_source.py +0 -0
  1401. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/nodes/__init__.py +0 -0
  1402. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/nodes/conftest.py +0 -0
  1403. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/nodes/test_broadcast.py +0 -0
  1404. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/nodes/test_delta_config.py +0 -0
  1405. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/nodes/test_logging.py +0 -0
  1406. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/nodes/test_sink_protocol_typing.py +0 -0
  1407. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/nodes/test_table_package.py +0 -0
  1408. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/observability/__init__.py +0 -0
  1409. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/observability/cases.py +0 -0
  1410. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/observability/conftest.py +0 -0
  1411. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/observability/test_message_lifecycle_spans.py +0 -0
  1412. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/observability/test_multiworker_trace_continuity.py +0 -0
  1413. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/observability/test_observability_runner.py +0 -0
  1414. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/observability/test_outbound_topic_terminal_spans.py +0 -0
  1415. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/observability/test_protocols.py +0 -0
  1416. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/observability/test_registry.py +0 -0
  1417. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/observability/test_structlog.py +0 -0
  1418. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/support/__init__.py +0 -0
  1419. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/support/flow_cases.py +0 -0
  1420. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/test_branch_indexing.py +0 -0
  1421. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/test_expand_routes.py +0 -0
  1422. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/test_fork.py +0 -0
  1423. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/test_otel_observability.py +0 -0
  1424. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/test_routing.py +0 -0
  1425. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/test_testing_mongo.py +0 -0
  1426. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/streaming/test_with.py +0 -0
  1427. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/test_no_sqlalchemy_import.py +0 -0
  1428. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/test_packaging_extras.py +0 -0
  1429. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/testing/__init__.py +0 -0
  1430. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/testing/test_golden.py +0 -0
  1431. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/testing/test_http_harness.py +0 -0
  1432. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/testing/test_identity_harness.py +0 -0
  1433. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/testing/test_in_memory.py +0 -0
  1434. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/testing/test_lazy_exports.py +0 -0
  1435. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/tests/unit/testing/test_runner.py +0 -0
  1436. {loom_kernel-2.1.4 → loom_kernel-2.2.1}/uv.lock +0 -0
@@ -1,5 +1,94 @@
1
1
  # Unreleased
2
2
 
3
+ ## ✨ Features
4
+
5
+ ### core
6
+
7
+ - **core:** `loom.core.model` (module `_loom_type`) is the one module that decides whether
8
+ a boundary type is a `msgspec.Struct` or a strict `pydantic.BaseModel`.
9
+ `loom_type(symbol)` resolves an authored symbol by `issubclass`,
10
+ `msgspec_type(annotation)` wraps a compiler-generated annotation, and both
11
+ return a `LoomType` (`type`, `schema()`, `decode_json()`, `to_builtins()`).
12
+ Strictness (`forbid_unknown_fields=True` or `model_config["extra"] ==
13
+ "forbid"`) is required and checked once, in the factory, for either
14
+ library, raising `UnsupportedBoundaryType`; a decode or validation failure
15
+ raises `BoundaryValidationError`. `pydantic` stays optional: the module
16
+ gates on `sys.modules` and imports it locally, so a process that never
17
+ declares a pydantic type never loads it.
18
+ - **core:** `LoomType` gains `from_builtins(payload)`, the entry point for a
19
+ value that already arrived as Python builtins — a cache hit, an MCP tool
20
+ result — rather than as raw JSON. `CachedRepository`,
21
+ `CacheGateway.get_value`/`multi_get_values`, `@cache_call`/`@cache_query`
22
+ and `McpHandle.call(expect=...)` accept a strict `pydantic.BaseModel` next
23
+ to a `msgspec.Struct`; an annotation mixing both libraries is rejected.
24
+
25
+ ### ai
26
+
27
+ - **ai:** `output.type_ref` and `deps_type` accept a strict
28
+ `pydantic.BaseModel` (`model_config["extra"] == "forbid"`) wherever they
29
+ accept a `msgspec.Struct`. A pydantic output is handed to pydantic-ai as
30
+ its own `output_type`, so pydantic-ai builds its schema, validates the
31
+ answer with its own coercion, feeds a rejection back to the model and
32
+ retries within `policies.retries`, unlike a Struct output, which loom
33
+ keeps decoding strictly and failing fast on the first rejection. Whichever
34
+ library produced the answer, the hook payload, `/agents/{name}/run`, the
35
+ SSE `final` frame and the A2A output artifact all carry it as plain JSON
36
+ builtins, built from the plan's `LoomType`.
37
+
38
+ ### rest
39
+
40
+ - **rest:** a strict `pydantic.BaseModel` result, a `list` of them or an
41
+ envelope holding one now renders directly on a REST route, through
42
+ `MsgspecJSONResponse`'s `enc_hook`, and documents in OpenAPI
43
+ (`_safe_pydantic_schema`) through the same `LoomType` the cache and MCP
44
+ boundaries already use; `LoomRestAdapter`'s Struct projection goes
45
+ through it too.
46
+
47
+ ## ⚠ Behaviour changes
48
+
49
+ ### core
50
+
51
+ - **core:** the miss path of a cached `@cache_query`/`@cache_call` read,
52
+ `McpHandle.call` and `CacheGateway.get_value`/`multi_get_values` now raise
53
+ `BoundaryValidationError` — a `ValueError` — on a stale or malformed cached
54
+ payload or MCP result, instead of `msgspec.ValidationError` or
55
+ `pydantic.ValidationError` directly; an `except ValueError` keeps catching
56
+ it. A `@cache_query` argument that is a pydantic instance now contributes
57
+ its builtins rendering to the cache key rather than the instance's own
58
+ `repr`, a one-time key change.
59
+
60
+ ### ai
61
+
62
+ - **ai:** `CompiledOutput.decoder` and `StateShape.decoder` are gone,
63
+ replaced by `loom_type: LoomType` (`LoomType | None` on `StateShape`); a
64
+ reader of either field must move to `loom_type.type` / `.decode_json()` /
65
+ `.to_builtins()`. `AgentRuntime.output_type(name) -> LoomType` is added
66
+ next to `state_shape(name)`. A pydantic `output.type_ref` is now validated
67
+ by pydantic-ai itself, not by loom, and a rejected answer retries within
68
+ `policies.retries` instead of failing the run on the first attempt; a
69
+ `msgspec.Struct` output is unchanged (strict decode, fail fast). The root
70
+ `title` is dropped from a pydantic output's `CompiledOutput.schema`, to
71
+ match the untitled document a Struct output always produced. Three
72
+ residuals, documented rather than closed: `bytes` needs
73
+ `ser_json_bytes`/`val_json_bytes = "base64"` set on the pydantic model to
74
+ reach parity with msgspec's default base64 rendering, strictness is still
75
+ checked on the root type only, for either library, and an artefact that
76
+ declares both a pydantic `type_ref` output and `output_check` serialises
77
+ an accepted answer twice per attempt — once for the check's own builtins
78
+ projection, once for the wire — accepted rather than optimised away.
79
+
80
+ ### rest
81
+
82
+ - **rest:** a JSON object body that fails `Command` validation now answers
83
+ `422 boundary_validation` with a `violations` list (`{field, message}`
84
+ pairs, `field` being the wire name the client sent, the same shape
85
+ `rule_violations` already uses) instead of a generic `500`; malformed
86
+ JSON and a non-object body are unchanged. `Command.from_payload` now
87
+ raises `BoundaryValidationError` — a `ValueError` — instead of
88
+ `msgspec.ValidationError`. The root `title` is dropped on pydantic
89
+ OpenAPI schemas for request bodies and responses alike, matching the
90
+ untitled document a Struct always produced.
91
+
3
92
  ## 🐛 Fixes
4
93
 
5
94
  ### core
@@ -34,6 +123,21 @@
34
123
  The `etl-polars` extra now requires `polars>=1.24`, the release that
35
124
  named that join option `nulls_equal`.
36
125
 
126
+ ### ai
127
+
128
+ - **ai:** an MCP session that dies after it opened no longer fails every later
129
+ call until the worker restarts. The worker holds one session per server for
130
+ its whole life, and that holder kept the dead client from ever being
131
+ re-entered: after a transport error under an in-flight call, a redeploy of
132
+ the server or a stdio child that exited, each call through `Mcp()` failed in
133
+ a millisecond while the health probe answered `ok`. `_ToolsetSession` now
134
+ treats an exception out of a call's round trip as the transport failing: that
135
+ call is raised as it is and never repeated, and the next call opens a new
136
+ session first, once even under concurrency. A renewal that cannot connect
137
+ raises and is tried again by the following call. An agent's own `mcp`
138
+ capability does not recover yet; see "A session that died after it opened is
139
+ replaced by the next call" in `docs/ai/mcp.md`.
140
+
37
141
  ## ♻️ Refactor
38
142
 
39
143
  ### etl
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: loom-kernel
3
- Version: 2.1.4
3
+ Version: 2.2.1
4
4
  Summary: Loom Python project
5
5
  License-File: LICENSE
6
6
  Classifier: Typing :: Typed
@@ -198,6 +198,15 @@ deps_type: dict # open: an explicit waiver of validation
198
198
  indistinguishable from one that wrote the schema by hand. Declaring both
199
199
  `deps_type` and `deps_schema` is a compilation error.
200
200
 
201
+ A strict `pydantic.BaseModel` subclass (`model_config["extra"] == "forbid"`)
202
+ is accepted for `deps_type` exactly as a `msgspec.Struct` is: decoding is
203
+ strict, the state a run renders when no `state` is sent comes from the
204
+ model's own field defaults, and a request `state` with an undeclared field
205
+ fails with `422 INVALID_STATE`, unchanged from the Struct path. State is
206
+ always decoded strictly regardless of library — `"5"` for a declared `int`
207
+ is rejected, never coerced — whereas a pydantic `type_ref` *output* is
208
+ validated with pydantic-ai's own coercion (see "Output" below).
209
+
201
210
  The consequences an author needs, stated rather than left implicit:
202
211
 
203
212
  * **`deps_type: <symbol>` buys validation at start-up — every templated
@@ -286,6 +295,14 @@ output:
286
295
  The reference is `module:Symbol`. Filesystem paths are not representable by the
287
296
  pattern.
288
297
 
298
+ A strict `pydantic.BaseModel` subclass (`model_config["extra"] == "forbid"`) is
299
+ accepted alongside a strict `msgspec.Struct`. The two are validated
300
+ differently: a pydantic `type_ref` is handed to pydantic-ai itself as the
301
+ run's `output_type`, so pydantic-ai validates the answer with its own
302
+ coercion, feeds a rejection back to the model and retries within
303
+ `policies.retries`; a `msgspec.Struct` `type_ref` is decoded strictly by loom
304
+ and fails fast on the first rejection.
305
+
289
306
  ### `output_check` — demanding the shape of the answer
290
307
 
291
308
  `output_check` names an `OutputCheck` (`loom.ai.OutputCheck`): a pure,
@@ -154,8 +154,10 @@ behind an address; stdio is for the servers you only consume.
154
154
 
155
155
  What stdio does not do:
156
156
 
157
- - **it does not reconnect.** A dead subprocess fails the call, exactly as a
158
- dead HTTP server does; nothing restarts it;
157
+ - **it does not supervise the child.** A dead subprocess fails the call that
158
+ finds it, exactly as a dead HTTP server does. A call made through `Mcp()`
159
+ after that one spawns a new child (see "A session that died after it opened
160
+ is replaced by the next call"); an agent's own capability does not;
159
161
  - **it spawns one process per server, for the whole worker.** Start-up spawns
160
162
  it and every agent granted that server speaks to that one child. It dies with
161
163
  the last holder of the connection — normally the runtime, briefly a straggler
@@ -585,6 +587,43 @@ surfaces only on the first business request that reaches it, as
585
587
  `TOOL_UNAVAILABLE`. Extending the probe to a use-case-only server is future
586
588
  work, not something this version does.
587
589
 
590
+ ### A session that died after it opened is replaced by the next call
591
+
592
+ A server that connected at start-up can still go away later: a transport error
593
+ under an in-flight call, a redeploy of the server, a stdio child that exits.
594
+ The worker's one session is held open for its whole life, and that holder is
595
+ also what stops the underlying client from ever being re-entered — so before
596
+ this was handled, every call through `Mcp()` failed from then on, in a
597
+ millisecond each, until the worker restarted, while the health probe kept
598
+ answering `ok`.
599
+
600
+ `_ToolsetSession` now replaces the session itself. Nothing can be asked of the
601
+ client: once its transport is gone it still reports itself connected. The
602
+ evidence is the call. A tool's own error comes back as a result flagged
603
+ `is_error`; **an exception out of the round trip is the transport failing**.
604
+ So:
605
+
606
+ - **the call that found it dead is raised as it is, and never repeated.** It
607
+ may have run on the server, and a tool with side effects is not run twice on
608
+ your behalf. Retrying it is your decision;
609
+ - **the next call opens a new session first**, against the same connection —
610
+ over stdio, that is a new child process. Concurrent calls that find it dead
611
+ renew it once;
612
+ - **a renewal that cannot connect raises**, and the call after it tries again:
613
+ an outage costs one connection attempt per call, bounded by the handshake
614
+ deadline, and ends with the first call made after the server is back;
615
+ - **suspecting a healthy session costs one reconnection.** A single failed call
616
+ is not proof the session died; opening another is cheap and harmless, so it
617
+ is not weighed further.
618
+
619
+ This covers the `Mcp()` path and whatever else calls through the runtime's
620
+ session. **An agent's own `mcp` capability does not recover yet**: the compiled
621
+ agent holds the toolset it was built with, and swapping that needs the engine
622
+ build to go through an indirection it does not have. Two other things are
623
+ unchanged: a server that never connected at start-up under `optional` is still
624
+ not reconnected (above), and the health probe still does not see a
625
+ use-case-only server.
626
+
588
627
  ### A use case's call runs in parallel with other grant views
589
628
 
590
629
  A use case's tool call goes through `_ToolsetSession`
@@ -156,6 +156,8 @@ intersphinx_mapping = {
156
156
  "python": ("https://docs.python.org/3", None),
157
157
  }
158
158
 
159
+ suppress_warnings = ["ref.python"]
160
+
159
161
  # Optional dependencies are mocked to keep docs builds lightweight and stable.
160
162
  autodoc_mock_imports = [
161
163
  "aiocache",
@@ -513,7 +513,11 @@ UPDATE_NORMALIZE_PRICE = (
513
513
  ## Rule — validate before execute
514
514
 
515
515
  Rules run after all computes. A failing rule raises a structured 422 response
516
- before `execute()` is called.
516
+ before `execute()` is called. A body that fails to convert into the `Command`
517
+ in the first place — a wrong field type, a missing required field — never
518
+ reaches a rule: it answers its own 422 with `code: "boundary_validation"` and
519
+ a `violations` list shaped the same way (`{field, message}` pairs, `field`
520
+ being the wire name the client sent).
517
521
 
518
522
  ### Rule.check — field validation
519
523
 
@@ -94,7 +94,7 @@ def _agent_binding_issues(
94
94
  # so it is not reported as a mismatch.
95
95
  continue
96
96
  expected = expected_args[0]
97
- declared = agent_plan.output.decoder.type
97
+ declared = agent_plan.output.loom_type.type
98
98
  if expected is declared:
99
99
  continue
100
100
  yield agent_marker_output_mismatch(
@@ -22,16 +22,20 @@ from __future__ import annotations
22
22
  import asyncio
23
23
  from collections.abc import AsyncIterator, Iterator
24
24
  from contextlib import contextmanager
25
- from typing import Final
25
+ from typing import Final, TypeVar
26
26
 
27
+ import msgspec
27
28
  from starlette.requests import Request
28
29
 
29
- from loom.ai.abc import AgentUsage, ErrorEvent
30
+ from loom.ai.abc import AgentEvent, AgentResult, AgentUsage, ErrorEvent, FinalEvent
30
31
  from loom.ai.config import AgentEndpointConfig
31
32
  from loom.ai.errors import AgentRunError, AgentRunErrorCode
32
33
  from loom.core.identity import Identity, current_identity
34
+ from loom.core.model import LoomType
33
35
  from loom.core.observability.span import LoomSpan
34
36
 
37
+ _WireResultT = TypeVar("_WireResultT", AgentResult, FinalEvent)
38
+
35
39
  BODY_OVERHEAD_BYTES: Final[int] = 64 * 1024
36
40
  """Headroom over the declared field caps for the JSON envelope around them.
37
41
 
@@ -259,6 +263,52 @@ def always_closed(span: LoomSpan) -> Iterator[None]:
259
263
  span.end()
260
264
 
261
265
 
266
+ def project_output(value: _WireResultT, output_type: LoomType) -> _WireResultT:
267
+ """Rewrite ``value.output`` to builtins before it reaches a wire encoder.
268
+
269
+ The one place every surface — ``/run``, the SSE ``final`` frame and both
270
+ A2A paths — projects the run's already-validated answer, so
271
+ ``result_payload``, ``encode_sse_event``, ``_data_part`` and
272
+ ``_completed_task`` keep encoding whatever ``output`` already holds
273
+ (FR-010).
274
+
275
+ Args:
276
+ value: Result or terminal event whose ``output`` is still the
277
+ engine's validated instance.
278
+ output_type: The run's compiled boundary type, read from
279
+ :meth:`~loom.ai.runtime.AgentRuntime.output_type`.
280
+
281
+ Returns:
282
+ *value* with ``output`` replaced by its builtins projection.
283
+ """
284
+ return msgspec.structs.replace(value, output=output_type.to_builtins(value.output))
285
+
286
+
287
+ async def projecting_final(
288
+ events: AsyncIterator[AgentEvent], output_type: LoomType
289
+ ) -> AsyncIterator[AgentEvent]:
290
+ """Relay *events*, projecting the terminal ``final`` event's ``output``.
291
+
292
+ Every event but ``final`` is yielded unchanged; ``final`` is passed
293
+ through :func:`project_output` first, so a consumer downstream — the SSE
294
+ encoder, the A2A projector — never sees the engine's validated instance
295
+ (FR-010). Both agent surfaces wrap their event stream with this generator
296
+ before their own projection consumes it.
297
+
298
+ Args:
299
+ events: Run events, terminal event last.
300
+ output_type: The run's compiled boundary type, read from
301
+ :meth:`~loom.ai.runtime.AgentRuntime.output_type`.
302
+
303
+ Yields:
304
+ Every event, in order; the ``final`` event's ``output`` projected.
305
+ """
306
+ async for event in events:
307
+ if isinstance(event, FinalEvent):
308
+ event = project_output(event, output_type)
309
+ yield event
310
+
311
+
262
312
  def failure_event(exc: BaseException) -> ErrorEvent:
263
313
  """Turn a post-first-byte failure into a stream's terminal error event.
264
314
 
@@ -26,6 +26,8 @@ from loom.ai._transport import (
26
26
  always_closed,
27
27
  annotate_usage,
28
28
  failure_event,
29
+ project_output,
30
+ projecting_final,
29
31
  with_heartbeats,
30
32
  )
31
33
  from loom.ai.a2a._binding import PublishedAgent
@@ -276,6 +278,7 @@ def _make_send_handler(
276
278
  # catalogue detail travel outward.
277
279
  _logger.warning("a2a run of agent %r failed: %s", name, exc)
278
280
  return error_response(call.request_id, internal_error(exc.code))
281
+ result = project_output(result, runtime.output_type(name))
279
282
  task = _completed_task(uuid4().hex, context_id, result.output)
280
283
  return AgentJSONResponse(content=rpc_response(call.request_id, task))
281
284
 
@@ -296,7 +299,8 @@ def _run_frames(
296
299
  async with runtime.run_stream(
297
300
  call.agent.name, prompt, identity=call.identity, conversation_id=context_id
298
301
  ) as events:
299
- async for event in events:
302
+ projected_events = projecting_final(events, runtime.output_type(call.agent.name))
303
+ async for event in projected_events:
300
304
  for projected in projector.project(event):
301
305
  yield _sse_frame(call.request_id, projected)
302
306
  except Exception as exc:
@@ -21,13 +21,11 @@ from contextlib import AbstractAsyncContextManager
21
21
  from decimal import Decimal
22
22
  from typing import Any, ClassVar, Final, Generic, Literal, Protocol, TypeAlias, TypeVar, overload
23
23
 
24
- import msgspec
25
-
26
24
  from loom.ai.errors import AgentRunErrorCode
27
25
  from loom.ai.inference import InferenceTarget
28
26
  from loom.core.di import LoomContainer
29
27
  from loom.core.identity import Identity
30
- from loom.core.model import LoomFrozenStruct
28
+ from loom.core.model import LoomFrozenStruct, LoomType
31
29
 
32
30
  CONVERSATION_ID_MAX_LENGTH: Final[int] = 128
33
31
  """Longest ``conversation_id`` a run accepts; the value itself is opaque."""
@@ -51,21 +49,21 @@ class StateShape(LoomFrozenStruct, frozen=True, kw_only=True):
51
49
  authored spellings of one optional JSON Schema; the compiler resolves all
52
50
  three to this value, never to one of three interchangeable objects. Same
53
51
  idiom as its sibling :class:`~loom.ai.compiler._plan.CompiledOutput`,
54
- including a ``decoder`` field msgspec cannot itself encode, under the
55
- invariant :mod:`loom.ai.compiler._plan` documents.
52
+ including a :class:`~loom.core.model.LoomType` field msgspec cannot
53
+ itself encode, under the invariant :mod:`loom.ai.compiler._plan`
54
+ documents.
56
55
 
57
56
  Attributes:
58
57
  schema: JSON Schema the artifact's state must satisfy, or ``None``
59
58
  under the ``deps_type: dict`` waiver, where no schema exists and
60
59
  template markers are not validated (FR-006).
61
- decoder: Built ``msgspec`` JSON decoder producing the normalised
62
- state mapping, or ``None`` alongside ``schema is None``.
60
+ loom_type: Boundary type produced at compile, decoding and
61
+ normalising the state mapping, or ``None`` alongside
62
+ ``schema is None``.
63
63
  """
64
64
 
65
65
  schema: Mapping[str, Any] | None
66
- # ``Any`` type parameter: the decoded type is derived from the artifact's
67
- # declared state at compile time, so it cannot be named statically.
68
- decoder: msgspec.json.Decoder[Any] | None
66
+ loom_type: LoomType | None
69
67
 
70
68
 
71
69
  class AgentUsage(LoomFrozenStruct, frozen=True, kw_only=True):
@@ -903,11 +901,17 @@ provider SDK is missing.
903
901
  OutputCheck: TypeAlias = Callable[[Mapping[str, Any]], str | None]
904
902
  """Target of an ``output_check`` reference: a pure predicate over an answer.
905
903
 
906
- Called once per attempt inside the engine's own output-retry loop, with the
907
- mapping the engine parsed from the model's answer never loom's decoded
908
- object, so nothing is decoded twice. Returns ``None`` to accept the answer
909
- unchanged, or the text the model must read to correct itself, which drives a
910
- real retry bounded by the artifact's ``policies.retries``.
904
+ Called once per attempt inside the engine's own output-retry loop. For a
905
+ ``msgspec.Struct`` output the mapping is the one the engine parsed from the
906
+ model's answer — never loom's decoded object, so nothing is decoded twice.
907
+ For a pydantic output (D7, FR-012) the check still receives a
908
+ ``Mapping[str, Any]``: the engine calls it with
909
+ ``loom_type.to_builtins(instance)`` of pydantic-ai's own validated instance,
910
+ so a check written once serves both libraries. Returns ``None`` to accept the
911
+ answer unchanged, or the text the model must read to correct itself, which
912
+ drives a real retry bounded by the artifact's ``policies.retries`` — a real
913
+ pydantic-ai output-tool retry for a pydantic output, exactly as for a
914
+ ``msgspec.Struct`` one.
911
915
 
912
916
  The return contract is the inverse of the usual predicate convention, which
913
917
  is why this alias is published rather than left for an author to spell: it
@@ -915,11 +919,13 @@ is the one name in this module carrying ``Mapping[str, Any]``, because the
915
919
  payload shape is the artifact's own declared schema, which loom cannot type
916
920
  statically.
917
921
 
918
- A returned mapping is never substituted for the answer: the engine decodes
919
- the model's own bytes independently of what this callable returns, so a
920
- check that builds and returns a different mapping has that mapping
921
- discarded. Synchronous and dependency-free, because any side effect inside
922
- the retry loop would run once per attempt.
922
+ A returned mapping is never substituted for the answer: the engine never
923
+ uses this callable's return value to build the answer. A ``msgspec.Struct``
924
+ answer is decoded from the model's own bytes independently; a pydantic
925
+ answer is pydantic-ai's own validated instance, read off ``result.output``.
926
+ Either way, a check that builds and returns a different mapping has that
927
+ mapping discarded. Synchronous and dependency-free, because any side effect
928
+ inside the retry loop would run once per attempt.
923
929
  """
924
930
 
925
931
 
@@ -8,8 +8,9 @@ the SQL connection config, the imported toolset factory — never names.
8
8
  Secret containment (invariant 4): the plan carries no literal secret. The
9
9
  one secret-bearing struct it embeds, :class:`~loom.ai.inference.InferenceTarget`,
10
10
  redacts its references in ``repr`` and refuses msgspec encoding; the built
11
- decoder in :class:`CompiledOutput` is likewise not msgspec-encodable, so an
12
- accidental wire encode of a plan raises instead of leaking.
11
+ :class:`~loom.core.model.LoomType` in :class:`CompiledOutput` is likewise not
12
+ msgspec-encodable, so an accidental wire encode of a plan raises instead of
13
+ leaking.
13
14
 
14
15
  The plan is only ever built in memory by the compiler; it is never decoded
15
16
  from JSON, which is why fields may hold arbitrary runtime handles.
@@ -26,27 +27,39 @@ from loom.ai.abc import OutputCheck, StateShape
26
27
  from loom.ai.declarative import PolicySpec
27
28
  from loom.ai.inference import InferenceTarget
28
29
  from loom.core.engine.compilable import Compilable
29
- from loom.core.model import LoomFrozenStruct
30
+ from loom.core.model import LoomFrozenStruct, LoomType
30
31
  from loom.core.sql.config import SqlConnectionConfig
31
32
 
32
33
 
33
34
  class CompiledOutput(LoomFrozenStruct, frozen=True, kw_only=True):
34
- """Structured-output contract with a decoder built at compile time.
35
+ """Structured-output contract with a :class:`~loom.core.model.LoomType` built at compile time.
35
36
 
36
37
  Interpreting the schema per response would be per-item reflection, so the
37
- decoder is constructed exactly once, at compile (research R-004,
38
- invariant 5). The decode is strict: unknown fields are rejected, which is
39
- what makes returning the validated bytes unchanged safe.
38
+ boundary type is constructed exactly once, at compile (research R-004,
39
+ invariant 5). For a ``msgspec.Struct`` output the decode is strict
40
+ unknown fields are rejected, which is what makes returning the validated
41
+ bytes unchanged safe. For a pydantic output invariant 5 is satisfied
42
+ differently (D7, FR-012): ``.type`` is handed to pydantic-ai itself as the
43
+ run's ``output_type``, so pydantic-ai — not loom — validates, retries and
44
+ builds the instance; loom never decodes that answer a second time.
40
45
 
41
46
  Attributes:
42
47
  schema: JSON Schema object handed to the model.
43
- decoder: Built ``msgspec`` JSON decoder producing the answer type.
48
+ loom_type: Boundary type produced at compile, whichever library built
49
+ it (:func:`~loom.core.model.loom_type` for a ``type_ref``,
50
+ :func:`~loom.core.model.msgspec_type` for a ``json_schema``): the
51
+ start-up marker check (``ai/_startup.py``) reads ``.type``. The
52
+ engine reads it differently per library: for a ``msgspec.Struct``,
53
+ ``ai/engines/pydantic_ai/_output.py`` decodes the model's raw
54
+ bytes through ``.decode_json(bytes)``; for a pydantic model,
55
+ ``.type`` reaches ``Agent.from_spec(output_type=...)`` and the
56
+ engine reads the validated answer straight off
57
+ ``result.output``. ``.to_builtins`` projects either answer to
58
+ JSON-mode builtins once, at the wire.
44
59
  """
45
60
 
46
61
  schema: Mapping[str, Any]
47
- # ``Any`` type parameter: the decoded type is derived from the artifact's
48
- # schema at compile time, so it cannot be named statically.
49
- decoder: msgspec.json.Decoder[Any]
62
+ loom_type: LoomType
50
63
 
51
64
 
52
65
  class CompiledUsecaseCapability(LoomFrozenStruct, frozen=True, kw_only=True):
@@ -378,7 +391,7 @@ class AgentPlan(LoomFrozenStruct, frozen=True, kw_only=True):
378
391
  artifact declares neither ``deps_type`` nor ``deps_schema``.
379
392
  spec_version: Artifact format version, retained for self-description.
380
393
  inference: Resolved model binding; one binding, no fallback (FR-019a).
381
- output: Structured-output contract with its built decoder.
394
+ output: Structured-output contract with its compiled boundary type.
382
395
  output_check: Resolved predicate over the answer the engine parsed,
383
396
  when the artifact declares ``output_check``; ``None`` otherwise.
384
397
  capabilities: Compiled capabilities with resolved handles.
@@ -1,22 +1,27 @@
1
- """Output phase: schema validation, ``type_ref`` resolution, decoder build.
1
+ """Output phase: schema validation, ``type_ref`` resolution, boundary type build.
2
2
 
3
3
  A ``json_schema`` output compiles to a concrete type via
4
- ``msgspec.defstruct()`` and the plan stores a **built** decoder, so nothing
4
+ ``msgspec.defstruct()`` and the plan stores a :class:`~loom.core.model.LoomType`
5
+ built once over it (:func:`~loom.core.model.msgspec_type`), so nothing
5
6
  reflects per invocation (research R-004, invariant 5). A ``type_ref`` output
6
- accepts ``msgspec.Struct`` subclasses only in v1, so pydantic never enters the
7
- compiler path (T053).
7
+ accepts a strict ``msgspec.Struct`` or ``pydantic.BaseModel`` subclass,
8
+ resolved through :func:`~loom.core.model.loom_type`, which checks strictness
9
+ for both libraries and rejects anything else with
10
+ ``UnsupportedBoundaryType``: both satisfy invariant 5 with a strict decode,
11
+ so both may own the pass-through of the validated bytes.
8
12
 
9
- :func:`_resolve_symbol` and :func:`_schema_to_decoder` are shared with the
13
+ :func:`_resolve_symbol` and :func:`_schema_to_annotation` are shared with the
10
14
  state phase (:mod:`loom.ai.compiler.phases._state`), which compiles the same
11
15
  two authored shapes — a symbol reference and a hand-written JSON Schema —
12
- into a schema-and-decoder pair. Each caller supplies its own issue factory
16
+ into a schema and an annotation. Each caller supplies its own issue factory
13
17
  and, for the schema path, its own generated-struct name; nothing about the
14
18
  issue codes, the messages, or the exceptions caught changes between the two
15
19
  callers. What differs between the two ``type_ref``/``deps_type`` paths stays
16
- local to each phase: the output side additionally requires the resolved
17
- symbol to be a ``msgspec.Struct`` declaring ``forbid_unknown_fields=True``
18
- (invariant 5); the state side derives its schema straight from
19
- ``msgspec.json.schema()`` and admits whatever symbol that call accepts.
20
+ local to each phase: the output side requires every resolved symbol to
21
+ compile through :func:`~loom.core.model.loom_type` (invariant 5); the state
22
+ side only requires that of a resolved symbol that is a class, and falls back
23
+ to ``msgspec.json.schema()`` for a container or alias, so a ``deps_type``
24
+ that never named a class keeps compiling.
20
25
  """
21
26
 
22
27
  from __future__ import annotations
@@ -37,6 +42,7 @@ from loom.ai.errors import (
37
42
  output_type_ref_unresolvable,
38
43
  output_type_ref_unsupported,
39
44
  )
45
+ from loom.core.model import LoomType, UnsupportedBoundaryType, loom_type, msgspec_type
40
46
  from loom.core.symbols import import_symbol
41
47
 
42
48
  _CompileResult = tuple[CompiledOutput | None, list[AgentCompilationIssue]]
@@ -95,36 +101,24 @@ def compile_output_check(
95
101
 
96
102
 
97
103
  def _compile_json_schema(output: JsonSchemaOutput, component: str) -> _CompileResult:
98
- compiled, issues = _schema_to_decoder(
104
+ compiled, issues = _schema_to_annotation(
99
105
  output.schema, "CompiledOutputModel", component, output_schema_invalid
100
106
  )
101
107
  if compiled is None:
102
108
  return None, issues
103
- schema, decoder = compiled
104
- return CompiledOutput(schema=schema, decoder=decoder), []
109
+ schema, lt = compiled
110
+ return CompiledOutput(schema=schema, loom_type=lt), []
105
111
 
106
112
 
107
113
  def _compile_type_ref(output: TypeRefOutput, component: str) -> _CompileResult:
108
114
  symbol, issues = _resolve_symbol(output.ref, component, output_type_ref_unresolvable)
109
115
  if symbol is None:
110
116
  return None, issues
111
- if not (isinstance(symbol, type) and issubclass(symbol, msgspec.Struct)):
112
- return None, [
113
- output_type_ref_unsupported(
114
- component, output.ref, "only msgspec.Struct subclasses are supported in v1"
115
- )
116
- ]
117
- if not symbol.__struct_config__.forbid_unknown_fields:
118
- return None, [
119
- output_type_ref_unsupported(
120
- component,
121
- output.ref,
122
- "the struct must declare forbid_unknown_fields=True: pass-through of the "
123
- "validated bytes is only safe under a strict decode (invariant 5)",
124
- )
125
- ]
126
- decoder: msgspec.json.Decoder[Any] = msgspec.json.Decoder(symbol)
127
- return CompiledOutput(schema=MappingProxyType(msgspec.json.schema(symbol)), decoder=decoder), []
117
+ try:
118
+ lt = loom_type(symbol)
119
+ except UnsupportedBoundaryType as exc:
120
+ return None, [output_type_ref_unsupported(component, output.ref, str(exc))]
121
+ return CompiledOutput(schema=MappingProxyType(lt.schema()), loom_type=lt), []
128
122
 
129
123
 
130
124
  def _resolve_symbol(
@@ -140,24 +134,27 @@ def _resolve_symbol(
140
134
  return None, [unresolvable_issue(component, ref)]
141
135
 
142
136
 
143
- def _schema_to_decoder(
137
+ def _schema_to_annotation(
144
138
  schema: Mapping[str, Any], model_name: str, component: str, invalid_issue: _IssueFactory
145
- ) -> tuple[tuple[Mapping[str, Any], msgspec.json.Decoder[Any]] | None, list[AgentCompilationIssue]]:
146
- """Compile a hand-written JSON Schema object into a ``(schema, decoder)`` pair.
139
+ ) -> tuple[tuple[Mapping[str, Any], LoomType] | None, list[AgentCompilationIssue]]:
140
+ """Compile a hand-written JSON Schema object into a ``(schema, loom_type)`` pair.
147
141
 
148
142
  *model_name* names the generated struct type; *invalid_issue* reports a
149
- structural fault or a build failure. Shared with the state ``deps_schema``
150
- path (:mod:`loom.ai.compiler.phases._state`).
143
+ structural fault, a failure to map the schema to a runtime annotation, or
144
+ a failure of :func:`~loom.core.model.msgspec_type` to build a decoder over
145
+ it — the annotation mapping and the decoder build both run inside the same
146
+ guard, so either failure is a coded compilation issue and never an
147
+ unhandled exception.
151
148
  """
152
149
  fault = _schema_fault(schema)
153
150
  if fault is not None:
154
151
  return None, [invalid_issue(component, fault)]
155
152
  try:
156
153
  annotation = _annotation_for(schema, model_name)
157
- decoder: msgspec.json.Decoder[Any] = msgspec.json.Decoder(annotation)
158
- except (TypeError, ValueError) as exc:
154
+ lt = msgspec_type(annotation)
155
+ except (TypeError, ValueError, UnsupportedBoundaryType) as exc:
159
156
  return None, [invalid_issue(component, str(exc))]
160
- return (MappingProxyType(dict(schema)), decoder), []
157
+ return (MappingProxyType(dict(schema)), lt), []
161
158
 
162
159
 
163
160
  def _schema_fault(schema: Mapping[str, Any]) -> str | None: