loom-kernel 2.22.1__tar.gz → 2.22.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (693) hide show
  1. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/CHANGELOG.md +92 -0
  2. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/PKG-INFO +3 -3
  3. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/README.md +2 -2
  4. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/_startup.py +14 -13
  5. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/a2a/_binding.py +7 -7
  6. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/_compiler.py +6 -6
  7. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/phases/_capabilities.py +104 -53
  8. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/phases/_conversation.py +17 -10
  9. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/phases/_hook.py +10 -9
  10. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/phases/_instructions.py +7 -7
  11. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/phases/_limits.py +13 -3
  12. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/phases/_model_role.py +2 -2
  13. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/phases/_output.py +24 -28
  14. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/phases/_state.py +19 -17
  15. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/config.py +100 -57
  16. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/declarative/__init__.py +16 -11
  17. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/declarative/_envelope.py +28 -15
  18. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_capabilities.py +18 -11
  19. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_instructions.py +9 -7
  20. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_mcp.py +8 -2
  21. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_models.py +8 -2
  22. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/provider.py +4 -2
  23. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +6 -2
  24. loom_kernel-2.22.3/src/loom/ai/errors.py +946 -0
  25. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/registry.py +18 -13
  26. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/remote_auth.py +28 -17
  27. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/runtime/_lifecycle.py +30 -17
  28. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/runtime/_mcp.py +13 -9
  29. loom_kernel-2.22.3/src/loom/core/errors/codes.py +143 -0
  30. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/rule.py +21 -12
  31. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/compiler/_binding.py +11 -16
  32. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/compiler/_compiler.py +10 -4
  33. loom_kernel-2.22.3/src/loom/etl/compiler/_errors.py +300 -0
  34. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/compiler/_validators_agents.py +22 -16
  35. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/compiler/_validators_config.py +6 -2
  36. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/compiler/_validators_plan.py +20 -8
  37. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/compiler/_validators_step.py +92 -83
  38. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/fastapi/auto.py +4 -4
  39. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/_adapter.py +3 -2
  40. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/runner.py +5 -2
  41. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/compiler/_bindings.py +9 -11
  42. loom_kernel-2.22.3/src/loom/streaming/compiler/_errors.py +240 -0
  43. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/compiler/_plan.py +3 -2
  44. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/compiler/phases/build_plan.py +11 -14
  45. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/compiler/phases/validate.py +121 -59
  46. loom_kernel-2.22.1/src/loom/ai/errors.py +0 -1693
  47. loom_kernel-2.22.1/src/loom/core/errors/codes.py +0 -41
  48. loom_kernel-2.22.1/src/loom/etl/compiler/_errors.py +0 -473
  49. loom_kernel-2.22.1/src/loom/streaming/compiler/_errors.py +0 -477
  50. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/.gitignore +0 -0
  51. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/LICENSE +0 -0
  52. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/pyproject.toml +0 -0
  53. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/__init__.py +0 -0
  54. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/__init__.py +0 -0
  55. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/_concurrency.py +0 -0
  56. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/_filters.py +0 -0
  57. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/_paths.py +0 -0
  58. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/_roles.py +0 -0
  59. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/_transport.py +0 -0
  60. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/_usecase.py +0 -0
  61. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/a2a/__init__.py +0 -0
  62. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/a2a/_handlers.py +0 -0
  63. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/a2a/_rpc.py +0 -0
  64. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/a2a/card.py +0 -0
  65. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/a2a/events.py +0 -0
  66. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/a2a/server.py +0 -0
  67. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/abc.py +0 -0
  68. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/bootstrap.py +0 -0
  69. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/__init__.py +0 -0
  70. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/_fingerprint.py +0 -0
  71. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/_plan.py +0 -0
  72. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/phases/__init__.py +0 -0
  73. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/compiler/phases/_feedable.py +0 -0
  74. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/declarative/_schema.py +0 -0
  75. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/declarative/_v1.py +0 -0
  76. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
  77. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/describe.py +0 -0
  78. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/__init__.py +0 -0
  79. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
  80. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
  81. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
  82. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
  83. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
  84. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
  85. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
  86. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
  87. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
  88. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
  89. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
  90. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
  91. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
  92. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
  93. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/extras/__init__.py +0 -0
  94. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/extras/a2a.py +0 -0
  95. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +0 -0
  96. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/extras/mcp.py +0 -0
  97. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/extras/skills.py +0 -0
  98. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/providers/__init__.py +0 -0
  99. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/providers/_shared.py +0 -0
  100. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +0 -0
  101. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +0 -0
  102. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/providers/gateway.py +0 -0
  103. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/engines/pydantic_ai/providers/openai.py +0 -0
  104. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/etl/__init__.py +0 -0
  105. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/etl/_batch.py +0 -0
  106. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/etl/_columns.py +0 -0
  107. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/etl/_frames.py +0 -0
  108. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/etl/_ledger.py +0 -0
  109. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/etl/_runner.py +0 -0
  110. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/etl/_validation.py +0 -0
  111. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/fastapi/__init__.py +0 -0
  112. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/fastapi/endpoints.py +0 -0
  113. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/fastapi/response.py +0 -0
  114. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/fastapi/streaming.py +0 -0
  115. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/inference.py +0 -0
  116. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/pricing.py +0 -0
  117. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/runtime/__init__.py +0 -0
  118. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/runtime/_bounded.py +0 -0
  119. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/runtime/_chain.py +0 -0
  120. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/runtime/_conversation.py +0 -0
  121. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/runtime/_grants.py +0 -0
  122. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/runtime/_handle.py +0 -0
  123. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/runtime/_health.py +0 -0
  124. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/runtime/_hooks.py +0 -0
  125. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/runtime/_limits.py +0 -0
  126. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/validate/__init__.py +0 -0
  127. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/ai/validate/__main__.py +0 -0
  128. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/celery/__init__.py +0 -0
  129. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/celery/auto.py +0 -0
  130. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/celery/bootstrap.py +0 -0
  131. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/celery/config.py +0 -0
  132. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/celery/constants.py +0 -0
  133. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/celery/runner.py +0 -0
  134. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/celery/service.py +0 -0
  135. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/cli/__init__.py +0 -0
  136. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/cli/app.py +0 -0
  137. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/cli/schema.py +0 -0
  138. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/async_bridge.py +0 -0
  139. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/authz/__init__.py +0 -0
  140. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/authz/_decide.py +0 -0
  141. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/authz/_grants.py +0 -0
  142. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/authz/_roles.py +0 -0
  143. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/authz/_scope.py +0 -0
  144. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/authz/elevation.py +0 -0
  145. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/authz/product.py +0 -0
  146. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/backend/__init__.py +0 -0
  147. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/backend/core_model.py +0 -0
  148. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/backend/protocol.py +0 -0
  149. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/backend/scoped_ddl.py +0 -0
  150. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/backend/sqlalchemy.py +0 -0
  151. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/bootstrap/__init__.py +0 -0
  152. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/bootstrap/bootstrap.py +0 -0
  153. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/bootstrap/kernel.py +0 -0
  154. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/__init__.py +0 -0
  155. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/_batching.py +0 -0
  156. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/_single_flight.py +0 -0
  157. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/abc/__init__.py +0 -0
  158. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/abc/backend.py +0 -0
  159. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/abc/config.py +0 -0
  160. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/abc/dependency.py +0 -0
  161. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/calls.py +0 -0
  162. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/codec.py +0 -0
  163. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/decorators.py +0 -0
  164. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/dependency.py +0 -0
  165. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/errors.py +0 -0
  166. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/gateway.py +0 -0
  167. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/keys.py +0 -0
  168. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/memory.py +0 -0
  169. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/repository.py +0 -0
  170. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/result_codec.py +0 -0
  171. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/serializer.py +0 -0
  172. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/cache/wiring.py +0 -0
  173. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/command/__init__.py +0 -0
  174. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/command/adapter.py +0 -0
  175. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/command/base.py +0 -0
  176. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/command/field.py +0 -0
  177. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/command/introspection.py +0 -0
  178. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/compiler.py +0 -0
  179. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/__init__.py +0 -0
  180. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/_boto3.py +0 -0
  181. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/_includes.py +0 -0
  182. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/_resolver_utils.py +0 -0
  183. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/binder.py +0 -0
  184. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/configurable.py +0 -0
  185. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/context.py +0 -0
  186. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/errors.py +0 -0
  187. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/keys.py +0 -0
  188. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/loader.py +0 -0
  189. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/model.py +0 -0
  190. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/observability.py +0 -0
  191. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/resolver.py +0 -0
  192. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/secrets.py +0 -0
  193. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/config/ssm.py +0 -0
  194. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/contracts/__init__.py +0 -0
  195. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/contracts/manifest.py +0 -0
  196. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/di/__init__.py +0 -0
  197. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/di/container.py +0 -0
  198. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/di/scope.py +0 -0
  199. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/discovery/__init__.py +0 -0
  200. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/discovery/_utils.py +0 -0
  201. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/discovery/base.py +0 -0
  202. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/discovery/interfaces.py +0 -0
  203. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/discovery/manifest.py +0 -0
  204. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/discovery/modules.py +0 -0
  205. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/engine/__init__.py +0 -0
  206. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/engine/compilable.py +0 -0
  207. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/engine/compiler.py +0 -0
  208. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/engine/events.py +0 -0
  209. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/engine/executor.py +0 -0
  210. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/engine/metrics.py +0 -0
  211. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/engine/plan.py +0 -0
  212. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/engine/post_commit.py +0 -0
  213. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/errors/__init__.py +0 -0
  214. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/errors/errors.py +0 -0
  215. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/expr/__init__.py +0 -0
  216. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/expr/eval.py +0 -0
  217. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/expr/nodes.py +0 -0
  218. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/expr/refs.py +0 -0
  219. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/identity/__init__.py +0 -0
  220. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/identity/context.py +0 -0
  221. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/identity/identity.py +0 -0
  222. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/identity/issuer.py +0 -0
  223. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/identity/wire.py +0 -0
  224. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/introspection/__init__.py +0 -0
  225. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/introspection/base.py +0 -0
  226. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/introspection/describe.py +0 -0
  227. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/job/__init__.py +0 -0
  228. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/job/callback.py +0 -0
  229. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/job/context.py +0 -0
  230. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/job/handle.py +0 -0
  231. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/job/job.py +0 -0
  232. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/job/service.py +0 -0
  233. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/locator.py +0 -0
  234. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/logger/__init__.py +0 -0
  235. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/logger/abc.py +0 -0
  236. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/logger/config.py +0 -0
  237. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/logger/registry.py +0 -0
  238. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/logger/structlogger.py +0 -0
  239. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/__init__.py +0 -0
  240. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/_json_schema.py +0 -0
  241. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/_loom_type.py +0 -0
  242. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/base.py +0 -0
  243. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/convert.py +0 -0
  244. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/enums.py +0 -0
  245. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/field.py +0 -0
  246. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/introspection.py +0 -0
  247. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/partition.py +0 -0
  248. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/privilege.py +0 -0
  249. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/projection.py +0 -0
  250. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/relation.py +0 -0
  251. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/scoped.py +0 -0
  252. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/struct.py +0 -0
  253. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/timestamped.py +0 -0
  254. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/types.py +0 -0
  255. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/model/types_postgres.py +0 -0
  256. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/observability/__init__.py +0 -0
  257. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/observability/config.py +0 -0
  258. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/observability/event.py +0 -0
  259. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/observability/observer/__init__.py +0 -0
  260. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/observability/observer/noop.py +0 -0
  261. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/observability/observer/otel.py +0 -0
  262. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/observability/observer/structlog.py +0 -0
  263. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/observability/otel_ids.py +0 -0
  264. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/observability/protocol.py +0 -0
  265. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/observability/runtime.py +0 -0
  266. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/observability/span.py +0 -0
  267. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/observability/topology.py +0 -0
  268. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/persistence/__init__.py +0 -0
  269. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/persistence/abc.py +0 -0
  270. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/persistence/none.py +0 -0
  271. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/persistence/registry.py +0 -0
  272. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/plugins/__init__.py +0 -0
  273. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/plugins/entrypoints.py +0 -0
  274. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/plugins/optional.py +0 -0
  275. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/projection/__init__.py +0 -0
  276. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/projection/loaders.py +0 -0
  277. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/projection/runtime.py +0 -0
  278. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/__init__.py +0 -0
  279. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/abc/__init__.py +0 -0
  280. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/abc/cursor.py +0 -0
  281. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/abc/errors.py +0 -0
  282. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/abc/query.py +0 -0
  283. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/abc/query_compiler.py +0 -0
  284. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/abc/repo_for.py +0 -0
  285. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/abc/repository.py +0 -0
  286. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/abc/session_scope.py +0 -0
  287. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/dynamodb/__init__.py +0 -0
  288. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/dynamodb/backend.py +0 -0
  289. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/dynamodb/registry.py +0 -0
  290. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/dynamodb/repository.py +0 -0
  291. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/dynamodb/uow.py +0 -0
  292. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/mongo/__init__.py +0 -0
  293. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/mongo/backend.py +0 -0
  294. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/mongo/ids.py +0 -0
  295. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/mongo/query_compiler.py +0 -0
  296. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/mongo/registry.py +0 -0
  297. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/mongo/repository.py +0 -0
  298. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/mongo/uow.py +0 -0
  299. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/mongo/values.py +0 -0
  300. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/mutation.py +0 -0
  301. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/registration.py +0 -0
  302. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/registry.py +0 -0
  303. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
  304. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/backend.py +0 -0
  305. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
  306. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
  307. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/migrations/__init__.py +0 -0
  308. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/migrations/env_template.py +0 -0
  309. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/migrations/hook.py +0 -0
  310. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/migrations/operations.py +0 -0
  311. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/migrations/runners.py +0 -0
  312. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
  313. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/model.py +0 -0
  314. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
  315. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
  316. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
  317. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
  318. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
  319. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
  320. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
  321. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
  322. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
  323. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
  324. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
  325. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
  326. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/__init__.py +0 -0
  327. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/bootstrap.py +0 -0
  328. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/config.py +0 -0
  329. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/elevate.py +0 -0
  330. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/guard/0001.sql +0 -0
  331. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/guard/0002.sql +0 -0
  332. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/guard/preflight.sql +0 -0
  333. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/guard_manifest.py +0 -0
  334. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/integrity.py +0 -0
  335. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/partitions.py +0 -0
  336. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/provider.py +0 -0
  337. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/schema.py +0 -0
  338. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/sources.py +0 -0
  339. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/rls/verify.py +0 -0
  340. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
  341. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/session_settings.py +0 -0
  342. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
  343. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
  344. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/response/__init__.py +0 -0
  345. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/response/base.py +0 -0
  346. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/routing/__init__.py +0 -0
  347. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/routing/ref.py +0 -0
  348. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/routing/resolver.py +0 -0
  349. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/runner.py +0 -0
  350. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/schema/__init__.py +0 -0
  351. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/schema/schema_mode.py +0 -0
  352. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/schema_names.py +0 -0
  353. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/sql/__init__.py +0 -0
  354. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/sql/abc/__init__.py +0 -0
  355. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/sql/abc/contracts.py +0 -0
  356. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/sql/abc/errors.py +0 -0
  357. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/sql/caller_bound.py +0 -0
  358. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/sql/clickhouse/__init__.py +0 -0
  359. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/sql/clickhouse/_client.py +0 -0
  360. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/sql/clickhouse/executor.py +0 -0
  361. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/sql/clickhouse/registry.py +0 -0
  362. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/sql/config.py +0 -0
  363. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/sql/roles.py +0 -0
  364. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/sql/service.py +0 -0
  365. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/symbols.py +0 -0
  366. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/tracing/__init__.py +0 -0
  367. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/tracing/context.py +0 -0
  368. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/transaction.py +0 -0
  369. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/transport/__init__.py +0 -0
  370. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/transport/adapter.py +0 -0
  371. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/uow/__init__.py +0 -0
  372. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/uow/abc.py +0 -0
  373. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/uow/context.py +0 -0
  374. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/__init__.py +0 -0
  375. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/_predicates.py +0 -0
  376. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/agent_markers.py +0 -0
  377. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/compute.py +0 -0
  378. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/constants.py +0 -0
  379. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/factory.py +0 -0
  380. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/field_ref.py +0 -0
  381. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/invoker.py +0 -0
  382. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/keys.py +0 -0
  383. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/markers.py +0 -0
  384. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/mcp_markers.py +0 -0
  385. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/outcome.py +0 -0
  386. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/registry.py +0 -0
  387. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/core/use_case/use_case.py +0 -0
  388. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/__init__.py +0 -0
  389. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/_uri.py +0 -0
  390. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/__init__.py +0 -0
  391. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_format_registry.py +0 -0
  392. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_historify/__init__.py +0 -0
  393. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_historify/_common.py +0 -0
  394. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_historify/_log.py +0 -0
  395. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_historify/_ops.py +0 -0
  396. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
  397. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_historify/_transform.py +0 -0
  398. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_merge.py +0 -0
  399. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_path_template.py +0 -0
  400. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_predicate.py +0 -0
  401. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
  402. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
  403. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
  404. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/_write_policy.py +0 -0
  405. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/polars/__init__.py +0 -0
  406. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/polars/_dtype.py +0 -0
  407. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/polars/_file_writer.py +0 -0
  408. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/polars/_frame.py +0 -0
  409. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/polars/_historify.py +0 -0
  410. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/polars/_predicate.py +0 -0
  411. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/polars/_reader.py +0 -0
  412. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/polars/_schema.py +0 -0
  413. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
  414. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/polars/_streaming.py +0 -0
  415. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/polars/_writer.py +0 -0
  416. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/polars/provider.py +0 -0
  417. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/spark/__init__.py +0 -0
  418. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/spark/_dtype.py +0 -0
  419. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/spark/_historify.py +0 -0
  420. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/spark/_reader.py +0 -0
  421. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/spark/_schema.py +0 -0
  422. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
  423. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/spark/_writer.py +0 -0
  424. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/backends/spark/provider.py +0 -0
  425. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/checkpoint/__init__.py +0 -0
  426. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
  427. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
  428. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/checkpoint/_cleaners.py +0 -0
  429. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/checkpoint/_options.py +0 -0
  430. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/checkpoint/_paths.py +0 -0
  431. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/checkpoint/_scope.py +0 -0
  432. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/checkpoint/_store.py +0 -0
  433. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/compiler/__init__.py +0 -0
  434. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/compiler/_filter.py +0 -0
  435. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/compiler/_plan.py +0 -0
  436. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/compiler/_validators.py +0 -0
  437. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/__init__.py +0 -0
  438. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/_format.py +0 -0
  439. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/_read_options.py +0 -0
  440. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/_utils.py +0 -0
  441. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/_with_agent.py +0 -0
  442. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/_write_options.py +0 -0
  443. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/expr/__init__.py +0 -0
  444. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/expr/_params.py +0 -0
  445. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/expr/_predicate.py +0 -0
  446. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
  447. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/expr/_refs.py +0 -0
  448. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/source/__init__.py +0 -0
  449. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/source/_from.py +0 -0
  450. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
  451. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/source/_from_config.py +0 -0
  452. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
  453. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
  454. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/source/_specs.py +0 -0
  455. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/__init__.py +0 -0
  456. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/_client.py +0 -0
  457. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/_errors.py +0 -0
  458. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/_file.py +0 -0
  459. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
  460. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
  461. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
  462. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
  463. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/_history/_report.py +0 -0
  464. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
  465. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/_into.py +0 -0
  466. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
  467. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/_table.py +0 -0
  468. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/declarative/target/_temp.py +0 -0
  469. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/executor/__init__.py +0 -0
  470. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/executor/_agents.py +0 -0
  471. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/executor/_dispatcher.py +0 -0
  472. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/executor/_executor.py +0 -0
  473. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/__init__.py +0 -0
  474. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/_registry.py +0 -0
  475. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/sources/__init__.py +0 -0
  476. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/sources/_clickhouse.py +0 -0
  477. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/sources/_dynamodb.py +0 -0
  478. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
  479. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
  480. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/sources/_mongo.py +0 -0
  481. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
  482. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
  483. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
  484. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/sources/_serialization.py +0 -0
  485. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/targets/__init__.py +0 -0
  486. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/io/targets/_clickhouse.py +0 -0
  487. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/lineage/__init__.py +0 -0
  488. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/lineage/_config.py +0 -0
  489. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/lineage/_observer.py +0 -0
  490. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/lineage/_records.py +0 -0
  491. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/lineage/sinks/__init__.py +0 -0
  492. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
  493. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/lineage/sinks/_table.py +0 -0
  494. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/lineage/sinks/_writer.py +0 -0
  495. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/maintenance/__init__.py +0 -0
  496. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/maintenance/_builder.py +0 -0
  497. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/maintenance/_ops.py +0 -0
  498. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/maintenance/_protocol.py +0 -0
  499. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/maintenance/_runner.py +0 -0
  500. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/maintenance/_step.py +0 -0
  501. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/maintenance/backends/__init__.py +0 -0
  502. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
  503. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/pipeline/__init__.py +0 -0
  504. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/pipeline/_generics.py +0 -0
  505. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/pipeline/_params.py +0 -0
  506. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/pipeline/_pipeline.py +0 -0
  507. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/pipeline/_process.py +0 -0
  508. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/pipeline/_sql.py +0 -0
  509. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/pipeline/_step.py +0 -0
  510. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/pipeline/_step_client.py +0 -0
  511. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/pipeline/_step_sql.py +0 -0
  512. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/runner/__init__.py +0 -0
  513. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/runner/_agents.py +0 -0
  514. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/runner/_providers.py +0 -0
  515. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/runner/_wiring.py +0 -0
  516. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/runner/config_loader.py +0 -0
  517. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/runner/core.py +0 -0
  518. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/runner/errors.py +0 -0
  519. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/runner/filtering.py +0 -0
  520. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/runtime/__init__.py +0 -0
  521. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/runtime/_config_values.py +0 -0
  522. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/runtime/contracts.py +0 -0
  523. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/schema/__init__.py +0 -0
  524. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/schema/_contract.py +0 -0
  525. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/schema/_schema.py +0 -0
  526. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/storage/__init__.py +0 -0
  527. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/storage/_config.py +0 -0
  528. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/storage/_file_locator.py +0 -0
  529. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/storage/_locator.py +0 -0
  530. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/storage/routing.py +0 -0
  531. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/testing/__init__.py +0 -0
  532. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/testing/_result.py +0 -0
  533. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/testing/_runners.py +0 -0
  534. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/testing/_scenario.py +0 -0
  535. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/testing/_stubs.py +0 -0
  536. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/etl/testing/spark.py +0 -0
  537. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/__init__.py +0 -0
  538. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/_async.py +0 -0
  539. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/_config.py +0 -0
  540. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/_ctx.py +0 -0
  541. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/_flow_yaml.py +0 -0
  542. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/_meta.py +0 -0
  543. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/_placeholders.py +0 -0
  544. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/_summary.py +0 -0
  545. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/deploy/__init__.py +0 -0
  546. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/deploy/_discovery.py +0 -0
  547. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/deploy/_schedule.py +0 -0
  548. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
  549. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/deploy/entrypoint.py +0 -0
  550. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/__init__.py +0 -0
  551. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/_assemble.py +0 -0
  552. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/_backfill.py +0 -0
  553. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/_backfill_body.py +0 -0
  554. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/_body.py +0 -0
  555. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/_common.py +0 -0
  556. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/_factory.py +0 -0
  557. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/_hooks.py +0 -0
  558. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/_maintenance.py +0 -0
  559. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/_params.py +0 -0
  560. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/_run_name.py +0 -0
  561. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/_runtime.py +0 -0
  562. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/_signature.py +0 -0
  563. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/flow/_stages.py +0 -0
  564. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/manifest/__init__.py +0 -0
  565. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/manifest/_model.py +0 -0
  566. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/manifest/_s3.py +0 -0
  567. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/manifest/_store.py +0 -0
  568. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/notify/__init__.py +0 -0
  569. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/notify/_event.py +0 -0
  570. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/notify/_factory.py +0 -0
  571. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/notify/_format.py +0 -0
  572. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/notify/_port.py +0 -0
  573. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/notify/_slack.py +0 -0
  574. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/notify/_sns.py +0 -0
  575. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/observer/__init__.py +0 -0
  576. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/observer/_flow.py +0 -0
  577. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/observer/_logging_bridge.py +0 -0
  578. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/observer/_manifest.py +0 -0
  579. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prefect/observer/_task_run.py +0 -0
  580. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prometheus/__init__.py +0 -0
  581. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prometheus/_instruments.py +0 -0
  582. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prometheus/adapter.py +0 -0
  583. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prometheus/kafka.py +0 -0
  584. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prometheus/lifecycle.py +0 -0
  585. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/prometheus/middleware.py +0 -0
  586. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/py.typed +0 -0
  587. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/__init__.py +0 -0
  588. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/_body.py +0 -0
  589. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/adapter.py +0 -0
  590. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/auth/__init__.py +0 -0
  591. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/auth/abc.py +0 -0
  592. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/auth/config.py +0 -0
  593. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/auth/jwt.py +0 -0
  594. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/auth/middleware.py +0 -0
  595. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/autocrud.py +0 -0
  596. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/compiler.py +0 -0
  597. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/config.py +0 -0
  598. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/constants.py +0 -0
  599. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/cors.py +0 -0
  600. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/errors.py +0 -0
  601. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/fastapi/__init__.py +0 -0
  602. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/fastapi/_errors.py +0 -0
  603. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/fastapi/_exclusions.py +0 -0
  604. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/fastapi/app.py +0 -0
  605. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/fastapi/health.py +0 -0
  606. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/fastapi/openapi.py +0 -0
  607. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/fastapi/response.py +0 -0
  608. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/fastapi/router_runtime.py +0 -0
  609. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/fastapi/sql.py +0 -0
  610. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/middleware.py +0 -0
  611. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/model.py +0 -0
  612. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/rest/rest_adapter.py +0 -0
  613. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/__init__.py +0 -0
  614. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/__init__.py +0 -0
  615. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
  616. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
  617. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/_dlq.py +0 -0
  618. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
  619. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/_errors.py +0 -0
  620. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/_operators.py +0 -0
  621. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
  622. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
  623. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
  624. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
  625. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
  626. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
  627. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
  628. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
  629. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
  630. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
  631. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
  632. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
  633. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/compiler/__init__.py +0 -0
  634. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/compiler/_compiler.py +0 -0
  635. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/core/__init__.py +0 -0
  636. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/core/_errors.py +0 -0
  637. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/core/_exceptions.py +0 -0
  638. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/core/_message.py +0 -0
  639. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/core/_tracing.py +0 -0
  640. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/core/_typing.py +0 -0
  641. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/graph/__init__.py +0 -0
  642. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/graph/_flow.py +0 -0
  643. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/__init__.py +0 -0
  644. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/_codec.py +0 -0
  645. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/_config.py +0 -0
  646. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/_errors.py +0 -0
  647. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/_key_resolver.py +0 -0
  648. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/_message.py +0 -0
  649. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/_record.py +0 -0
  650. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/_wire.py +0 -0
  651. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/client/__init__.py +0 -0
  652. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/client/_consumer.py +0 -0
  653. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/client/_producer.py +0 -0
  654. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/client/_protocol.py +0 -0
  655. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/client/_retry.py +0 -0
  656. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/message/__init__.py +0 -0
  657. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/message/_consumer.py +0 -0
  658. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/message/_producer.py +0 -0
  659. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/kafka/message/_protocol.py +0 -0
  660. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/mongo/__init__.py +0 -0
  661. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
  662. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/mongo/_config.py +0 -0
  663. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/mongo/_event.py +0 -0
  664. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/mongo/_normalize.py +0 -0
  665. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/__init__.py +0 -0
  666. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_boundary.py +0 -0
  667. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_branches.py +0 -0
  668. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_broadcast.py +0 -0
  669. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_capabilities.py +0 -0
  670. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_decompose.py +0 -0
  671. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_expand_routes.py +0 -0
  672. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_expr_eval.py +0 -0
  673. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_fork.py +0 -0
  674. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_helpers.py +0 -0
  675. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_mongo.py +0 -0
  676. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_protocols.py +0 -0
  677. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_router.py +0 -0
  678. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_shape.py +0 -0
  679. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_sink.py +0 -0
  680. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_step.py +0 -0
  681. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_table/__init__.py +0 -0
  682. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_table/common.py +0 -0
  683. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_table/config.py +0 -0
  684. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/_with.py +0 -0
  685. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/nodes/refs.py +0 -0
  686. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/streaming/testing.py +0 -0
  687. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/testing/__init__.py +0 -0
  688. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/testing/agents.py +0 -0
  689. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/testing/golden.py +0 -0
  690. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/testing/http_harness.py +0 -0
  691. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/testing/in_memory.py +0 -0
  692. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/testing/repository_harness.py +0 -0
  693. {loom_kernel-2.22.1 → loom_kernel-2.22.3}/src/loom/testing/runner.py +0 -0
@@ -88,6 +88,18 @@
88
88
  naming a scalar leaf (`"api.token"`) and convert that value; before, they
89
89
  failed on anything but a mapping.
90
90
 
91
+ - **core:** compile-issue catalogues as data (ADR 0003, part B).
92
+ `loom.core.errors.codes` gains `IssueCode`, `Template` and `CompileIssue`.
93
+ An `IssueCode` member is declared as `NAME = "NAME", Template(text,
94
+ field=..., component=...)`, and `Code.NAME.issue(**params)` builds its
95
+ `CompileIssue` (`code`, `message`, `component`, `field`). Each part of the
96
+ template is a `str.format` template. A sequence parameter is joined with
97
+ `", "` and renders `none` when empty, a set is ordered by the text of its
98
+ items, and a type renders as its `__qualname__`. A missing or unknown
99
+ parameter raises a `TypeError` naming the code. `AgentErrorCode`,
100
+ `StreamingErrorCode` and `ETLErrorCode` are such catalogues, and
101
+ `ETLCompilationError.from_issue(issue)` raises the ETL error for an issue.
102
+
91
103
  ### ai
92
104
 
93
105
  - **ai:** `AiConfig` logs a warning for every key of `ai.prices` that no
@@ -447,6 +459,14 @@
447
459
 
448
460
  ### core
449
461
 
462
+ - **core:** `Rule.check(..., via=fn)` takes the violation from `fn`: a `str`
463
+ (the message) or a `RuleViolation` fails the rule, `None` passes it. A `bool`
464
+ or any other result raises `TypeError` naming the field, instead of `True`
465
+ failing the rule and `False` passing it. The `message=` parameter of
466
+ `Rule.check` is removed. `Rule.forbid` keeps its boolean condition; a `str`
467
+ or `RuleViolation` it returns no longer fails the rule. Migrate
468
+ `Rule.check(F(Order).total, via=lambda v: v <= 0, message="total must be > 0")`
469
+ to `Rule.check(F(Order).total, via=lambda v: "total must be > 0" if v <= 0 else None)`.
450
470
  - **core:** the `LoomType` protocol gains `from_query(params)`, which
451
471
  validates query-string values strictly. A number takes the JSON number
452
472
  grammar and must be finite, an integer its integer subset within
@@ -493,6 +513,24 @@
493
513
 
494
514
  ### ai
495
515
 
516
+ - **ai:** compile issues come from the code catalogue, and the 89 issue
517
+ factory functions of `loom.ai.errors` are removed, without aliases: for
518
+ example `spec_malformed`, `engine_not_found` and `mcp_server_unreachable`.
519
+ Build an issue with `AgentErrorCode.X.issue(...)` and keyword arguments,
520
+ such as `AgentErrorCode.ENGINE_NOT_FOUND.issue(component="openai-agents",
521
+ available=["pydantic-ai"])`. `loom.ai.errors.from_message` is removed too:
522
+ `AgentCompilationError` still turns a bare string into an `UNSPECIFIED`
523
+ issue. Messages keep their text; a list that is empty renders `none`.
524
+ - **ai:** `AgentCompilationIssue` is a type alias of
525
+ `CompileIssue[AgentErrorCode]` from `loom.core.errors.codes`, not a class.
526
+ It has the same fields, but `isinstance` against it raises `TypeError`
527
+ (check `CompileIssue` instead), and it no longer derives from
528
+ `LoomFrozenStruct`, so `loom_message_type()` is gone.
529
+ - **ai:** an `Mcp()` include filter on a use case that matches no tool aborts
530
+ start-up with the new code `USECASE_TOOL_FILTER_MATCHES_NOTHING` instead of
531
+ `TOOL_FILTER_MATCHES_NOTHING`, which is now raised only by an agent
532
+ artifact's filter. The message and the `parameters.<name>` field are
533
+ unchanged.
496
534
  - **ai:** `AgentPlan.fingerprint`, and so the ETL `agent_version` column,
497
535
  changes once for every existing agent. It no longer covers any policy, so
498
536
  changing `retries`, a timeout, `max_iterations`, `max_tool_calls`,
@@ -646,6 +684,25 @@
646
684
 
647
685
  ### etl
648
686
 
687
+ - **etl:** compile errors come from the code catalogue, and the 34
688
+ class-method factories of `ETLCompilationError` are removed, without
689
+ aliases: for example `upsert_no_keys`, `missing_target` and
690
+ `unknown_source_table`. Raise
691
+ `ETLCompilationError.from_issue(ETLErrorCode.X.issue(...))`; the
692
+ `ETLCompilationError(code, component, message, field)` constructor is
693
+ unchanged. Messages keep their text.
694
+ - **etl:** each `IntoHistory` compile check has its own code instead of
695
+ `INVALID_TARGET_TYPE`: `HISTORIFY_KEYS_EMPTY`, `HISTORIFY_KEYS_TRACK_OVERLAP`,
696
+ `HISTORIFY_EFFECTIVE_DATE_IN_TRACK`, `HISTORIFY_BOUNDARY_IN_KEYS`,
697
+ `HISTORIFY_BOUNDARY_IN_TRACK`, `HISTORIFY_LOG_EFFECTIVE_DATE_NOT_COLUMN`,
698
+ `HISTORIFY_DELETE_MARKER_REQUIRES_LOG` and
699
+ `HISTORIFY_DELETE_MARKER_DECLARED_COLUMN`. Messages and fields are unchanged;
700
+ code that matched `INVALID_TARGET_TYPE` for these checks must match the new
701
+ codes. `INVALID_TARGET_TYPE` now means only a `target` that is not an
702
+ `IntoTable`, `IntoFile` or `IntoTemp`.
703
+ - **etl:** `ETLErrorCode.INVALID_SOURCES_TYPE` is removed. No step could raise
704
+ it: a step's sources are grouped only when `sources` is a `Sources` or a
705
+ `SourceSet`, and both are valid.
649
706
  - **etl:** a `WithAgent` compiled by a runner whose config has no `ai:`
650
707
  section fails with the new code `AGENT_RUNNER_NOT_CONFIGURED` instead of
651
708
  `AGENT_NOT_FOUND`, which now means only that no artifact declares the name.
@@ -692,6 +749,20 @@
692
749
  `sNaN` used to raise `decimal.InvalidOperation`, and a `Decimal`
693
750
  `Infinity`, a `float` `inf` and a `float` `nan` were accepted.
694
751
 
752
+ ### streaming
753
+
754
+ - **streaming:** compile issues come from the code catalogue
755
+ (`StreamingErrorCode.X.issue(...)`), and the compiler's private issue
756
+ factories are removed. `loom.streaming.compiler.CompilationIssue` is a type
757
+ alias of `CompileIssue[StreamingErrorCode]`, not a class: it has the same
758
+ fields, but `isinstance` against it raises `TypeError` (check
759
+ `CompileIssue` instead), `loom_message_type()` is gone, and
760
+ `CompilationIssue.prefixed()` is removed. Messages keep their text.
761
+ - **streaming:** a `Broadcast` followed by another node reports
762
+ `BROADCAST_NOT_LAST` with component `broadcast`, at the top level, in a
763
+ branch and in a Router branch. It used to report `TERMINAL_NOT_LAST` with
764
+ component `Broadcast`.
765
+
695
766
  ## 🐛 Fixes
696
767
 
697
768
  ### core
@@ -916,6 +987,27 @@
916
987
  `$ref` wherever they occur, for msgspec tagged structs and pydantic
917
988
  discriminated unions alike, an optional (`X | Y | None`) union included.
918
989
 
990
+ ### streaming
991
+
992
+ - **streaming:** a `Broadcast` is validated as a `Broadcast`. The compiler
993
+ treated it as a plain terminal, so the nodes of its branches were never
994
+ shape-checked. A branch with a shape mismatch, such as a record step after
995
+ `CollectBatch`, now fails compilation with `SHAPE_MISMATCH` scoped under
996
+ `broadcast branch <n>`; such flows used to compile. The code a misplaced
997
+ `Broadcast` reports is under Behaviour changes.
998
+ - **streaming:** a bare `ErrorEnvelope` among the `payloads` of
999
+ `FromMultiTypeTopic` is refused with `ERROR_ENVELOPE_UNPARAMETERIZED`. The
1000
+ check only matched `ErrorEnvelope[X]`, which always has a parameter, so the
1001
+ bare class compiled as a plain payload and its messages never reached the
1002
+ error dispatch. Declare `ErrorEnvelope[OrderEvent]` instead; such flows used
1003
+ to compile.
1004
+ - **streaming:** an `ExpandRoutes` is validated. Its routes were never
1005
+ shape-checked and nothing stopped a node from following it, although the
1006
+ node is terminal and hands the expanded payloads, not rows, to whatever
1007
+ follows. Each route is now checked on the record stream it receives, with
1008
+ issues scoped under `expand_routes branch <type>`, and a node after an
1009
+ `ExpandRoutes` fails with `TERMINAL_NOT_LAST`; such flows used to compile.
1010
+
919
1011
  ### prefect
920
1012
 
921
1013
  - **prefect:** every log line the bridge sends carries the run's
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: loom-kernel
3
- Version: 2.22.1
3
+ Version: 2.22.3
4
4
  Summary: Loom Python project
5
5
  License-File: LICENSE
6
6
  Classifier: Programming Language :: Python :: 3
@@ -524,8 +524,8 @@ class PricingPreviewUseCase(UseCase[Record, PricingPreviewResponse]):
524
524
  ),
525
525
  )
526
526
  rules = (
527
- Rule.check(F(PricingCommand).unit_price, via=lambda v: v <= 0, message="unit_price must be > 0"),
528
- Rule.check(F(PricingCommand).country, via=lambda v: v not in TAX_RATES, message="Unsupported country"),
527
+ Rule.check(F(PricingCommand).unit_price, via=lambda v: "unit_price must be > 0" if v <= 0 else None),
528
+ Rule.check(F(PricingCommand).country, via=lambda v: None if v in TAX_RATES else "Unsupported country"),
529
529
  )
530
530
 
531
531
  async def execute(self, record_id: int, cmd: PricingCommand = Input()) -> PricingPreviewResponse:
@@ -400,8 +400,8 @@ class PricingPreviewUseCase(UseCase[Record, PricingPreviewResponse]):
400
400
  ),
401
401
  )
402
402
  rules = (
403
- Rule.check(F(PricingCommand).unit_price, via=lambda v: v <= 0, message="unit_price must be > 0"),
404
- Rule.check(F(PricingCommand).country, via=lambda v: v not in TAX_RATES, message="Unsupported country"),
403
+ Rule.check(F(PricingCommand).unit_price, via=lambda v: "unit_price must be > 0" if v <= 0 else None),
404
+ Rule.check(F(PricingCommand).country, via=lambda v: None if v in TAX_RATES else "Unsupported country"),
405
405
  )
406
406
 
407
407
  async def execute(self, record_id: int, cmd: PricingCommand = Input()) -> PricingPreviewResponse:
@@ -25,13 +25,7 @@ from typing import get_args
25
25
 
26
26
  from loom.ai.compiler import AgentPlan
27
27
  from loom.ai.config import McpServerConfig
28
- from loom.ai.errors import (
29
- AgentCompilationError,
30
- AgentCompilationIssue,
31
- agent_marker_output_mismatch,
32
- agent_marker_unknown,
33
- mcp_marker_unknown,
34
- )
28
+ from loom.ai.errors import AgentCompilationError, AgentCompilationIssue, AgentErrorCode
35
29
  from loom.core.engine.compilable import Compilable
36
30
  from loom.core.engine.plan import AgentBinding, McpBinding
37
31
  from loom.core.use_case.registry import UseCaseRegistry
@@ -85,7 +79,9 @@ def _agent_binding_issues(
85
79
  for binding in agent_bindings:
86
80
  agent_plan = plans_by_name.get(binding.agent)
87
81
  if agent_plan is None:
88
- yield agent_marker_unknown(uc_name, binding.name, binding.agent, available)
82
+ yield AgentErrorCode.AGENT_MARKER_UNKNOWN.issue(
83
+ component=uc_name, parameter=binding.name, agent=binding.agent, available=available
84
+ )
89
85
  continue
90
86
  expected_args = get_args(binding.annotation)
91
87
  if not expected_args:
@@ -97,10 +93,10 @@ def _agent_binding_issues(
97
93
  declared = agent_plan.output.loom_type.type
98
94
  if expected is declared:
99
95
  continue
100
- yield agent_marker_output_mismatch(
101
- uc_name,
102
- binding.name,
103
- binding.agent,
96
+ yield AgentErrorCode.AGENT_MARKER_OUTPUT_MISMATCH.issue(
97
+ component=uc_name,
98
+ parameter=binding.name,
99
+ agent=binding.agent,
104
100
  expected=getattr(expected, "__name__", str(expected)),
105
101
  declared=getattr(declared, "__name__", str(declared)),
106
102
  )
@@ -159,7 +155,12 @@ def _mcp_binding_issues(
159
155
  available = tuple(servers)
160
156
  for binding in mcp_bindings:
161
157
  if binding.server not in servers:
162
- yield mcp_marker_unknown(uc_name, binding.name, binding.server, available)
158
+ yield AgentErrorCode.MCP_MARKER_UNKNOWN.issue(
159
+ component=uc_name,
160
+ parameter=binding.name,
161
+ server=binding.server,
162
+ available=available,
163
+ )
163
164
 
164
165
 
165
166
  __all__ = ["verify_agent_markers", "verify_mcp_markers"]
@@ -25,11 +25,7 @@ from starlette.middleware import Middleware
25
25
  from loom.ai.a2a.card import build_agent_card, card_path
26
26
  from loom.ai.compiler import AgentPlan
27
27
  from loom.ai.config import AgentEndpointConfig, AiConfig
28
- from loom.ai.errors import (
29
- AgentCompilationError,
30
- auth_exclusion_overlaps_agents,
31
- state_surface_unsupported,
32
- )
28
+ from loom.ai.errors import AgentCompilationError, AgentErrorCode
33
29
  from loom.ai.fastapi.response import ENCODER
34
30
  from loom.ai.runtime import AgentRuntime
35
31
  from loom.core.config.errors import ConfigError
@@ -98,7 +94,9 @@ def published_agents(
98
94
  )
99
95
  continue
100
96
  if plan.state is not None:
101
- raise AgentCompilationError([state_surface_unsupported(name, "a2a")])
97
+ raise AgentCompilationError(
98
+ [AgentErrorCode.STATE_SURFACE_UNSUPPORTED.issue(component=name, surface="a2a")]
99
+ )
102
100
  card = ENCODER.encode(build_agent_card(plan, a2a, mechanism=mechanism, prefix=prefix))
103
101
  published.append(
104
102
  PublishedAgent(
@@ -180,7 +178,9 @@ def verify_exclusions(
180
178
  and any(path == root or path.startswith(f"{root}/") for root in guarded)
181
179
  ]
182
180
  if offending:
183
- raise AgentCompilationError([auth_exclusion_overlaps_agents(offending)])
181
+ raise AgentCompilationError(
182
+ [AgentErrorCode.AUTH_EXCLUSION_OVERLAPS_AGENTS.issue(paths=offending)]
183
+ )
184
184
 
185
185
 
186
186
  def _is_auth_middleware(entry: Middleware) -> bool:
@@ -31,11 +31,7 @@ from loom.ai.compiler.phases._output import compile_output, compile_output_check
31
31
  from loom.ai.compiler.phases._state import compile_state
32
32
  from loom.ai.config import AiConfig
33
33
  from loom.ai.declarative import AgentSpecV1, DecodedSpec
34
- from loom.ai.errors import (
35
- AgentCompilationError,
36
- AgentCompilationIssue,
37
- agent_name_duplicate,
38
- )
34
+ from loom.ai.errors import AgentCompilationError, AgentCompilationIssue, AgentErrorCode
39
35
  from loom.ai.inference import InferenceTarget
40
36
  from loom.ai.pricing import ModelPrice
41
37
  from loom.core.sql.config import SqlConfig
@@ -240,4 +236,8 @@ def _duplicate_name_issues(
240
236
  sources: dict[str, list[str]] = defaultdict(list)
241
237
  for spec, source_path in entries:
242
238
  sources[spec.name].append(source_path if source_path is not None else _UNNAMED_SOURCE)
243
- return [agent_name_duplicate(name, paths) for name, paths in sources.items() if len(paths) > 1]
239
+ return [
240
+ AgentErrorCode.AGENT_NAME_DUPLICATE.issue(component=name, sources=paths)
241
+ for name, paths in sources.items()
242
+ if len(paths) > 1
243
+ ]
@@ -46,31 +46,7 @@ from loom.ai.declarative import (
46
46
  SqlCapability,
47
47
  UsecaseCapability,
48
48
  )
49
- from loom.ai.errors import (
50
- AgentCompilationError,
51
- AgentCompilationIssue,
52
- a2a_agent_unknown,
53
- anonymous_with_data_capability,
54
- capability_empty,
55
- capability_kind_unsupported,
56
- mcp_server_unknown,
57
- native_tool_duplicate,
58
- native_tool_unsupported,
59
- python_factory_not_callable,
60
- python_factory_params_rejected,
61
- python_factory_unresolvable,
62
- skills_library_escapes,
63
- skills_library_invalid,
64
- skills_name_collision,
65
- skills_root_missing,
66
- sql_config_missing,
67
- sql_connection_not_readonly,
68
- sql_connection_roles_unbound,
69
- sql_connection_unknown,
70
- sql_result_bound_missing,
71
- usecase_declares_query,
72
- usecase_key_unknown,
73
- )
49
+ from loom.ai.errors import AgentCompilationError, AgentCompilationIssue, AgentErrorCode
74
50
  from loom.ai.inference import InferenceTarget
75
51
  from loom.core.engine.compilable import Compilable
76
52
  from loom.core.sql.config import SqlConfig, roles_need_identity_binding
@@ -171,10 +147,16 @@ def compile_capabilities(
171
147
  for capability in spec.capabilities:
172
148
  kind = str(capability.__struct_config__.tag)
173
149
  if kind not in supported_kinds:
174
- issues.append(capability_kind_unsupported(component, kind, config.engine))
150
+ issues.append(
151
+ AgentErrorCode.CAPABILITY_KIND_UNSUPPORTED.issue(
152
+ component=component, kind=kind, engine=config.engine
153
+ )
154
+ )
175
155
  continue
176
156
  if context.anonymous and kind in _DATA_OR_REMOTE_KINDS:
177
- issues.append(anonymous_with_data_capability(component, kind))
157
+ issues.append(
158
+ AgentErrorCode.ANONYMOUS_WITH_DATA_CAPABILITY.issue(component=component, kind=kind)
159
+ )
178
160
  item, item_issues = _HANDLERS[type(capability)](capability, context)
179
161
  issues.extend(item_issues)
180
162
  if item is not None:
@@ -195,7 +177,11 @@ def _native_duplicate_issues(
195
177
  if not isinstance(capability, CompiledNativeCapability):
196
178
  continue
197
179
  if capability.tool in seen:
198
- issues.append(native_tool_duplicate(component, capability.tool))
180
+ issues.append(
181
+ AgentErrorCode.NATIVE_TOOL_DUPLICATE.issue(
182
+ component=component, tool=capability.tool
183
+ )
184
+ )
199
185
  continue
200
186
  seen.add(capability.tool)
201
187
  return issues
@@ -214,7 +200,14 @@ def _skill_collision_issues(
214
200
  for name in capability.names:
215
201
  first = owner.setdefault(name, capability.library)
216
202
  if first != capability.library:
217
- issues.append(skills_name_collision(component, name, first, capability.library))
203
+ issues.append(
204
+ AgentErrorCode.SKILLS_NAME_COLLISION.issue(
205
+ component=component,
206
+ skill=name,
207
+ first_library=first,
208
+ second_library=capability.library,
209
+ )
210
+ )
218
211
  return issues
219
212
 
220
213
 
@@ -230,11 +223,15 @@ def _compile_usecase(capability: UsecaseCapability, context: _Context) -> _Handl
230
223
  try:
231
224
  use_case = context.registry.resolve(key)
232
225
  except KeyError:
233
- issues.append(usecase_key_unknown(context.component, key))
226
+ issues.append(
227
+ AgentErrorCode.USECASE_KEY_UNKNOWN.issue(component=context.component, key=key)
228
+ )
234
229
  continue
235
230
  execution = getattr(use_case, "__execution_plan__", None)
236
231
  if execution is not None and execution.query_binding is not None:
237
- issues.append(usecase_declares_query(context.component, key))
232
+ issues.append(
233
+ AgentErrorCode.USECASE_DECLARES_QUERY.issue(component=context.component, key=key)
234
+ )
238
235
  use_cases.append(use_case)
239
236
  if issues:
240
237
  return None, issues
@@ -243,20 +240,36 @@ def _compile_usecase(capability: UsecaseCapability, context: _Context) -> _Handl
243
240
 
244
241
  def _compile_sql(capability: SqlCapability, context: _Context) -> _HandlerResult:
245
242
  if context.sql is None:
246
- return None, [sql_config_missing(context.component)]
243
+ return None, [AgentErrorCode.SQL_CONFIG_MISSING.issue(component=context.component)]
247
244
  connection = context.sql.connections.get(capability.connection)
248
245
  if connection is None:
249
- return None, [sql_connection_unknown(context.component, capability.connection)]
246
+ return None, [
247
+ AgentErrorCode.SQL_CONNECTION_UNKNOWN.issue(
248
+ component=context.component, connection=capability.connection
249
+ )
250
+ ]
250
251
  issues: list[AgentCompilationIssue] = []
251
252
  if not connection.readonly:
252
- issues.append(sql_connection_not_readonly(context.component, capability.connection))
253
+ issues.append(
254
+ AgentErrorCode.SQL_CONNECTION_NOT_READONLY.issue(
255
+ component=context.component, connection=capability.connection
256
+ )
257
+ )
253
258
  binds_roles = not context.anonymous
254
259
  if roles_need_identity_binding(connection.allowed_roles, mechanism_binds_roles=binds_roles):
255
- issues.append(sql_connection_roles_unbound(context.component, capability.connection))
260
+ issues.append(
261
+ AgentErrorCode.SQL_CONNECTION_ROLES_UNBOUND.issue(
262
+ component=context.component, connection=capability.connection
263
+ )
264
+ )
256
265
  # Defensive: the v1 struct already makes absent or non-positive bounds
257
266
  # unrepresentable, but a spec built through another path must not pass.
258
267
  if capability.max_rows < 1 or capability.max_result_bytes < 1:
259
- issues.append(sql_result_bound_missing(context.component, capability.connection))
268
+ issues.append(
269
+ AgentErrorCode.SQL_RESULT_BOUND_MISSING.issue(
270
+ component=context.component, connection=capability.connection
271
+ )
272
+ )
260
273
  if issues:
261
274
  return None, issues
262
275
  return (
@@ -294,12 +307,14 @@ def compile_mcp_capability(
294
307
 
295
308
  Returns:
296
309
  The compiled capability, or ``None`` with one
297
- :func:`~loom.ai.errors.mcp_server_unknown` issue when ``server_name``
298
- is not in ``servers``.
310
+ :attr:`~loom.ai.errors.AgentErrorCode.MCP_SERVER_UNKNOWN` issue when
311
+ ``server_name`` is not in ``servers``.
299
312
  """
300
313
  server = servers.get(server_name)
301
314
  if server is None:
302
- return None, [mcp_server_unknown(component, server_name)]
315
+ return None, [
316
+ AgentErrorCode.MCP_SERVER_UNKNOWN.issue(component=component, server=server_name)
317
+ ]
303
318
  return (
304
319
  CompiledMcpCapability(
305
320
  server=server_name,
@@ -347,7 +362,11 @@ def _compile_auth(auth: Mapping[str, str] | None) -> CompiledRemoteAuth | None:
347
362
  def _compile_a2a(capability: A2ACapability, context: _Context) -> _HandlerResult:
348
363
  agent = context.a2a_agents.get(capability.agent)
349
364
  if agent is None:
350
- return None, [a2a_agent_unknown(context.component, capability.agent)]
365
+ return None, [
366
+ AgentErrorCode.A2A_AGENT_UNKNOWN.issue(
367
+ component=context.component, agent=capability.agent
368
+ )
369
+ ]
351
370
  return (
352
371
  CompiledA2ACapability(
353
372
  agent=capability.agent,
@@ -366,22 +385,34 @@ def _library_base(library: str, context: _Context) -> _ResolveResult:
366
385
  if library.startswith(_LOCAL_LIBRARY_PREFIX):
367
386
  if context.source_path is None:
368
387
  reason = "a './' library needs a known artifact path"
369
- return None, [skills_library_invalid(context.component, library, reason)]
388
+ return None, [
389
+ AgentErrorCode.SKILLS_LIBRARY_INVALID.issue(
390
+ component=context.component, library=library, reason=reason
391
+ )
392
+ ]
370
393
  return Path(context.source_path).parent, []
371
394
  if context.skills_root is None:
372
- return None, [skills_root_missing(context.component)]
395
+ return None, [AgentErrorCode.SKILLS_ROOT_MISSING.issue(component=context.component)]
373
396
  return Path(context.skills_root), []
374
397
 
375
398
 
376
399
  def _resolve_library(library: str, context: _Context) -> _ResolveResult:
377
400
  if escapes(library.removeprefix(_LOCAL_LIBRARY_PREFIX)):
378
- return None, [skills_library_escapes(context.component, library)]
401
+ return None, [
402
+ AgentErrorCode.SKILLS_LIBRARY_ESCAPES.issue(
403
+ component=context.component, library=library
404
+ )
405
+ ]
379
406
  base, issues = _library_base(library, context)
380
407
  if base is None:
381
408
  return None, issues
382
409
  resolved = base / library.removeprefix(_LOCAL_LIBRARY_PREFIX)
383
410
  if not is_within(resolved, base):
384
- return None, [skills_library_escapes(context.component, library)]
411
+ return None, [
412
+ AgentErrorCode.SKILLS_LIBRARY_ESCAPES.issue(
413
+ component=context.component, library=library
414
+ )
415
+ ]
385
416
  return resolved.resolve(), []
386
417
 
387
418
 
@@ -413,14 +444,20 @@ def _compile_skills(capability: SkillsCapability, context: _Context) -> _Handler
413
444
  return None, issues
414
445
  discovered, reason = _discover_skills(directory)
415
446
  if reason is not None:
416
- return None, [skills_library_invalid(context.component, library, reason)]
447
+ return None, [
448
+ AgentErrorCode.SKILLS_LIBRARY_INVALID.issue(
449
+ component=context.component, library=library, reason=reason
450
+ )
451
+ ]
417
452
  selected = select_names(
418
453
  discovered,
419
454
  include=capability.include,
420
455
  exclude=capability.exclude,
421
456
  )
422
457
  if not selected:
423
- return None, [capability_empty(context.component, "skills")]
458
+ return None, [
459
+ AgentErrorCode.CAPABILITY_EMPTY.issue(component=context.component, kind="skills")
460
+ ]
424
461
  return (
425
462
  CompiledSkillsCapability(library=library, directory=str(directory), names=selected),
426
463
  [],
@@ -431,9 +468,17 @@ def _compile_python(capability: PythonCapability, context: _Context) -> _Handler
431
468
  try:
432
469
  factory = import_symbol(capability.factory)
433
470
  except (ImportError, AttributeError, ValueError) as exc:
434
- return None, [python_factory_unresolvable(context.component, capability.factory, str(exc))]
471
+ return None, [
472
+ AgentErrorCode.PYTHON_FACTORY_UNRESOLVABLE.issue(
473
+ component=context.component, factory=capability.factory, reason=str(exc)
474
+ )
475
+ ]
435
476
  if not callable(factory):
436
- return None, [python_factory_not_callable(context.component, capability.factory)]
477
+ return None, [
478
+ AgentErrorCode.PYTHON_FACTORY_NOT_CALLABLE.issue(
479
+ component=context.component, factory=capability.factory
480
+ )
481
+ ]
437
482
  issue = _rejected_params(factory, capability.params, context.component, capability.factory)
438
483
  if issue is not None:
439
484
  return None, [issue]
@@ -460,11 +505,13 @@ def _rejected_params(
460
505
  try:
461
506
  signature.bind_partial(_FIRST_POSITIONAL)
462
507
  except TypeError:
463
- return python_factory_not_callable(component, ref)
508
+ return AgentErrorCode.PYTHON_FACTORY_NOT_CALLABLE.issue(component=component, factory=ref)
464
509
  try:
465
510
  signature.bind(_FIRST_POSITIONAL, **params)
466
511
  except TypeError as exc:
467
- return python_factory_params_rejected(component, ref, str(exc))
512
+ return AgentErrorCode.PYTHON_FACTORY_PARAMS_REJECTED.issue(
513
+ component=component, factory=ref, reason=str(exc)
514
+ )
468
515
  return None
469
516
 
470
517
 
@@ -477,15 +524,19 @@ def _compile_native(capability: NativeCapability, context: _Context) -> _Handler
477
524
  if context.inference is None:
478
525
  return None, []
479
526
  if context.native_tools is None:
480
- return None, [capability_kind_unsupported(context.component, "native", context.engine)]
527
+ return None, [
528
+ AgentErrorCode.CAPABILITY_KIND_UNSUPPORTED.issue(
529
+ component=context.component, kind="native", engine=context.engine
530
+ )
531
+ ]
481
532
  try:
482
533
  supported = context.native_tools(context.inference)
483
534
  except AgentCompilationError as exc:
484
535
  return None, list(exc.issues)
485
536
  if capability.tool not in supported:
486
537
  return None, [
487
- native_tool_unsupported(
488
- context.component,
538
+ AgentErrorCode.NATIVE_TOOL_UNSUPPORTED.issue(
539
+ component=context.component,
489
540
  tool=capability.tool,
490
541
  role=context.model_role,
491
542
  provider=context.inference.provider,
@@ -18,12 +18,7 @@ from __future__ import annotations
18
18
  from loom.ai.compiler._plan import CONVERSATION_CONTEXT_FIELDS, CompiledConversation
19
19
  from loom.ai.compiler.phases._feedable import feedable_input, is_granted
20
20
  from loom.ai.declarative import AgentSpecV1
21
- from loom.ai.errors import (
22
- AgentCompilationIssue,
23
- conversation_input_unsatisfied,
24
- conversation_usecase_also_granted,
25
- conversation_usecase_unknown,
26
- )
21
+ from loom.ai.errors import AgentCompilationIssue, AgentErrorCode
27
22
  from loom.core.use_case.registry import UseCaseRegistry
28
23
 
29
24
  _ConversationResult = tuple[CompiledConversation | None, list[AgentCompilationIssue]]
@@ -59,17 +54,29 @@ def compile_conversation(
59
54
  key = spec.conversation.usecase
60
55
  issues: list[AgentCompilationIssue] = []
61
56
  if is_granted(spec.capabilities, key):
62
- issues.append(conversation_usecase_also_granted(component, key))
57
+ issues.append(
58
+ AgentErrorCode.CONVERSATION_USECASE_ALSO_GRANTED.issue(component=component, key=key)
59
+ )
63
60
  try:
64
61
  use_case = registry.resolve(key)
65
62
  except KeyError:
66
- issues.append(conversation_usecase_unknown(component, key))
63
+ issues.append(
64
+ AgentErrorCode.CONVERSATION_USECASE_UNKNOWN.issue(component=component, key=key)
65
+ )
67
66
  return None, issues
68
67
  accepted, reason = feedable_input(use_case, _OFFERED)
69
68
  if reason is not None:
70
- issues.append(conversation_input_unsatisfied(component, key, reason))
69
+ issues.append(
70
+ AgentErrorCode.CONVERSATION_INPUT_UNSATISFIED.issue(
71
+ component=component, key=key, reason=reason
72
+ )
73
+ )
71
74
  elif _CONVERSATION_ID not in accepted:
72
- issues.append(conversation_input_unsatisfied(component, key, _MISSING_CONVERSATION_ID))
75
+ issues.append(
76
+ AgentErrorCode.CONVERSATION_INPUT_UNSATISFIED.issue(
77
+ component=component, key=key, reason=_MISSING_CONVERSATION_ID
78
+ )
79
+ )
73
80
  if issues:
74
81
  return None, issues
75
82
  return CompiledConversation(usecase=key, use_case=use_case, accepted=accepted), []
@@ -20,12 +20,7 @@ from loom.ai.compiler._plan import (
20
20
  )
21
21
  from loom.ai.compiler.phases._feedable import feedable_input, is_granted
22
22
  from loom.ai.declarative import AgentSpecV1
23
- from loom.ai.errors import (
24
- AgentCompilationIssue,
25
- on_output_input_unsatisfied,
26
- on_output_usecase_also_granted,
27
- on_output_usecase_unknown,
28
- )
23
+ from loom.ai.errors import AgentCompilationIssue, AgentErrorCode
29
24
  from loom.core.use_case.registry import UseCaseRegistry
30
25
 
31
26
  _HookResult = tuple[CompiledOutputHook | None, list[AgentCompilationIssue]]
@@ -55,15 +50,21 @@ def compile_output_hook(
55
50
  key = spec.on_output.usecase
56
51
  issues: list[AgentCompilationIssue] = []
57
52
  if is_granted(spec.capabilities, key):
58
- issues.append(on_output_usecase_also_granted(component, key))
53
+ issues.append(
54
+ AgentErrorCode.ON_OUTPUT_USECASE_ALSO_GRANTED.issue(component=component, key=key)
55
+ )
59
56
  try:
60
57
  use_case = registry.resolve(key)
61
58
  except KeyError:
62
- issues.append(on_output_usecase_unknown(component, key))
59
+ issues.append(AgentErrorCode.ON_OUTPUT_USECASE_UNKNOWN.issue(component=component, key=key))
63
60
  return None, issues
64
61
  accepted, reason = feedable_input(use_case, _OFFERED)
65
62
  if reason is not None:
66
- issues.append(on_output_input_unsatisfied(component, key, reason))
63
+ issues.append(
64
+ AgentErrorCode.ON_OUTPUT_INPUT_UNSATISFIED.issue(
65
+ component=component, key=key, reason=reason
66
+ )
67
+ )
67
68
  if issues:
68
69
  return None, issues
69
70
  return CompiledOutputHook(usecase=key, use_case=use_case, accepted=accepted), []