loom-kernel 0.5.0__tar.gz → 0.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (787) hide show
  1. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/CHANGELOG.md +216 -0
  2. loom_kernel-0.7.0/CHANGELOG_RELEASE.md +96 -0
  3. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/PKG-INFO +8 -3
  4. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/README.md +7 -2
  5. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/conf.py +1 -1
  6. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/etl/pipelines.md +9 -3
  7. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/etl/testing.md +2 -1
  8. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/examples-repo/index.md +9 -6
  9. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/getting-started/etl.md +9 -3
  10. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/getting-started/rest.md +15 -6
  11. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/getting-started/streaming.md +2 -2
  12. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/guides/celery.md +9 -0
  13. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/guides/etl.md +9 -3
  14. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/overview.md +1 -1
  15. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/api/etl.rst +1 -1
  16. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/rest/celery.md +9 -0
  17. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/rest/examples.md +9 -6
  18. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/streaming/bytewax.md +1 -1
  19. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/pyproject.toml +2 -5
  20. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/bootstrap.py +145 -79
  21. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/config.py +27 -3
  22. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/runner.py +133 -79
  23. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/service.py +27 -12
  24. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/async_bridge.py +25 -7
  25. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/abc/config.py +3 -1
  26. loom_kernel-0.7.0/src/loom/core/compiler.py +24 -0
  27. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/__init__.py +6 -0
  28. loom_kernel-0.7.0/src/loom/core/config/binder.py +100 -0
  29. loom_kernel-0.7.0/src/loom/core/config/context.py +232 -0
  30. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/keys.py +5 -0
  31. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/observability.py +2 -2
  32. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/logger/config.py +11 -4
  33. loom_kernel-0.7.0/src/loom/core/observability/__init__.py +28 -0
  34. loom_kernel-0.7.0/src/loom/core/observability/config.py +102 -0
  35. loom_kernel-0.7.0/src/loom/core/observability/event.py +196 -0
  36. loom_kernel-0.7.0/src/loom/core/observability/observer/__init__.py +1 -0
  37. loom_kernel-0.7.0/src/loom/core/observability/observer/noop.py +27 -0
  38. loom_kernel-0.7.0/src/loom/core/observability/observer/otel.py +216 -0
  39. loom_kernel-0.7.0/src/loom/core/observability/observer/structlog.py +73 -0
  40. loom_kernel-0.7.0/src/loom/core/observability/protocol.py +34 -0
  41. loom_kernel-0.7.0/src/loom/core/observability/runtime.py +230 -0
  42. loom_kernel-0.7.0/src/loom/core/observability/topology.py +32 -0
  43. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/abc/query.py +11 -14
  44. loom_kernel-0.7.0/src/loom/core/runner.py +87 -0
  45. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/__init__.py +4 -3
  46. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_writer.py +6 -6
  47. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/provider.py +15 -15
  48. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/_writer.py +5 -5
  49. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/provider.py +15 -15
  50. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/_scope.py +1 -1
  51. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_validators_step.py +4 -3
  52. loom_kernel-0.7.0/src/loom/etl/declarative/expr/_predicate.py +103 -0
  53. loom_kernel-0.7.0/src/loom/etl/executor/__init__.py +10 -0
  54. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/executor/_executor.py +65 -44
  55. loom_kernel-0.7.0/src/loom/etl/lineage/__init__.py +5 -0
  56. loom_kernel-0.7.0/src/loom/etl/lineage/_config.py +43 -0
  57. loom_kernel-0.7.0/src/loom/etl/lineage/_observer.py +269 -0
  58. loom_kernel-0.5.0/src/loom/etl/observability/records.py → loom_kernel-0.7.0/src/loom/etl/lineage/_records.py +12 -23
  59. loom_kernel-0.7.0/src/loom/etl/lineage/sinks/__init__.py +17 -0
  60. loom_kernel-0.7.0/src/loom/etl/lineage/sinks/_protocol.py +44 -0
  61. loom_kernel-0.7.0/src/loom/etl/lineage/sinks/_table.py +34 -0
  62. loom_kernel-0.7.0/src/loom/etl/lineage/sinks/_writer.py +22 -0
  63. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_params.py +2 -2
  64. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runner/_providers.py +6 -6
  65. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runner/_wiring.py +32 -11
  66. loom_kernel-0.7.0/src/loom/etl/runner/config_loader.py +37 -0
  67. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runner/core.py +35 -20
  68. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/storage/_config.py +8 -7
  69. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/testing/__init__.py +4 -3
  70. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/testing/_stubs.py +99 -39
  71. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/testing/spark.py +16 -8
  72. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/prometheus/__init__.py +4 -1
  73. loom_kernel-0.7.0/src/loom/prometheus/kafka.py +163 -0
  74. loom_kernel-0.7.0/src/loom/prometheus/lifecycle.py +125 -0
  75. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/fastapi/app.py +15 -21
  76. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/fastapi/auto.py +57 -94
  77. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/fastapi/router_runtime.py +66 -26
  78. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_adapter.py +87 -27
  79. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_dlq.py +5 -3
  80. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_error_boundary.py +4 -10
  81. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_runtime_io.py +11 -2
  82. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/_shared.py +45 -22
  83. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/boundary.py +1 -1
  84. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/routing.py +12 -4
  85. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/scopes.py +21 -6
  86. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/shapes.py +2 -37
  87. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/steps.py +41 -12
  88. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/runner.py +88 -83
  89. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/compiler/_bindings.py +42 -99
  90. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/compiler/_compiler.py +30 -9
  91. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/compiler/phases/build_plan.py +39 -58
  92. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/compiler/phases/validate.py +4 -5
  93. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/core/_errors.py +3 -0
  94. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/core/_message.py +2 -0
  95. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/__init__.py +0 -10
  96. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_message.py +12 -2
  97. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_wire.py +6 -2
  98. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/client/_consumer.py +26 -8
  99. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/client/_producer.py +49 -11
  100. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/message/_consumer.py +37 -13
  101. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/message/_producer.py +29 -11
  102. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/message/_protocol.py +2 -0
  103. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_broadcast.py +4 -4
  104. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/testing.py +54 -32
  105. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/celery_bootstrap/test_bootstrap_worker.py +46 -21
  106. loom_kernel-0.7.0/tests/integration/core/bootstrap/test_bootstrap_integration.py +240 -0
  107. loom_kernel-0.7.0/tests/integration/core/rest/test_rest_error_mapping.py +248 -0
  108. loom_kernel-0.7.0/tests/integration/core/rest/test_rest_observability.py +238 -0
  109. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/etl/test_runner_integration.py +6 -5
  110. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/config/conf.interfaces.yaml +5 -2
  111. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/config/conf.yaml +5 -3
  112. loom_kernel-0.7.0/tests/unit/celery_bootstrap/test_async_runtime.py +88 -0
  113. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/celery_bootstrap/test_bootstrap.py +118 -71
  114. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/celery_jobs/test_celery_service.py +26 -5
  115. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/celery_jobs/test_config.py +49 -4
  116. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/celery_jobs/test_runner.py +193 -134
  117. loom_kernel-0.7.0/tests/unit/core/config/test_binder.py +147 -0
  118. loom_kernel-0.7.0/tests/unit/core/config/test_context.py +115 -0
  119. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/errors/test_errors.py +48 -81
  120. loom_kernel-0.7.0/tests/unit/core/logger/test_config.py +24 -0
  121. loom_kernel-0.7.0/tests/unit/core/observability/test_observers.py +363 -0
  122. loom_kernel-0.7.0/tests/unit/core/observability/test_runtime.py +179 -0
  123. loom_kernel-0.7.0/tests/unit/core/repository/abc/test_query.py +108 -0
  124. loom_kernel-0.7.0/tests/unit/core/test_compiler_contracts.py +27 -0
  125. loom_kernel-0.7.0/tests/unit/core/test_runner_contracts.py +121 -0
  126. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_step_execution.py +13 -3
  127. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_writer_to_frame.py +1 -1
  128. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_spark/test_step_execution.py +13 -5
  129. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_spark/test_writer_to_frame.py +1 -1
  130. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_history_target.py +68 -197
  131. loom_kernel-0.7.0/tests/unit/etl/lineage/test_observer.py +187 -0
  132. loom_kernel-0.7.0/tests/unit/etl/lineage/test_records.py +101 -0
  133. loom_kernel-0.7.0/tests/unit/etl/lineage/test_store.py +74 -0
  134. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/storage/test_backend_factory.py +36 -119
  135. loom_kernel-0.7.0/tests/unit/etl/storage/test_observability_and_protocols.py +118 -0
  136. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_config_loader.py +19 -11
  137. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_executor.py +67 -18
  138. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_module_contracts.py +8 -8
  139. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_public_api_discovery.py +2 -3
  140. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_record_schema_coverage.py +2 -2
  141. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_runner.py +77 -2
  142. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/testing/test_scenario_and_stubs.py +91 -10
  143. loom_kernel-0.7.0/tests/unit/rest/test_fastapi_auto_logger.py +127 -0
  144. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_router_runtime.py +89 -9
  145. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/conftest.py +12 -1
  146. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_adapter.py +10 -7
  147. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_bytewax_dispatcher.py +129 -83
  148. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_collect_batch.py +1 -1
  149. loom_kernel-0.7.0/tests/unit/streaming/bytewax/test_dlq.py +259 -0
  150. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_error_boundary.py +3 -8
  151. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_runner.py +121 -23
  152. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_runtime_io.py +67 -4
  153. loom_kernel-0.7.0/tests/unit/streaming/bytewax/test_steps.py +221 -0
  154. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_async_walk.py +3 -3
  155. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_basics.py +7 -7
  156. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_config_bindings.py +8 -8
  157. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_multi_source.py +2 -2
  158. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_router.py +4 -4
  159. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_window.py +2 -2
  160. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/test_with.py +3 -3
  161. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/test_compiler_examples.py +1 -1
  162. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/test_flow_examples.py +4 -4
  163. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/conftest.py +1 -0
  164. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_client.py +72 -4
  165. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_message.py +14 -0
  166. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_message_client.py +53 -15
  167. loom_kernel-0.7.0/tests/unit/streaming/kafka/test_observability.py +158 -0
  168. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_wire.py +32 -0
  169. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/nodes/test_broadcast.py +3 -3
  170. loom_kernel-0.7.0/tests/unit/streaming/observability/cases.py +53 -0
  171. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/observability/test_observability_runner.py +22 -16
  172. loom_kernel-0.7.0/tests/unit/streaming/observability/test_protocols.py +81 -0
  173. loom_kernel-0.7.0/tests/unit/streaming/observability/test_structlog.py +79 -0
  174. loom_kernel-0.7.0/tests/unit/streaming/support/__init__.py +0 -0
  175. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/test_fork.py +2 -2
  176. loom_kernel-0.7.0/tests/unit/streaming/test_otel_observability.py +33 -0
  177. loom_kernel-0.7.0/tests/unit/testing/__init__.py +0 -0
  178. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/uv.lock +4 -4
  179. loom_kernel-0.5.0/CHANGELOG_RELEASE.md +0 -25
  180. loom_kernel-0.5.0/src/loom/celery/event_loop.py +0 -158
  181. loom_kernel-0.5.0/src/loom/core/observability.py +0 -59
  182. loom_kernel-0.5.0/src/loom/etl/declarative/expr/_predicate.py +0 -174
  183. loom_kernel-0.5.0/src/loom/etl/executor/__init__.py +0 -61
  184. loom_kernel-0.5.0/src/loom/etl/observability/__init__.py +0 -59
  185. loom_kernel-0.5.0/src/loom/etl/observability/config.py +0 -67
  186. loom_kernel-0.5.0/src/loom/etl/observability/factory.py +0 -52
  187. loom_kernel-0.5.0/src/loom/etl/observability/observers/__init__.py +0 -13
  188. loom_kernel-0.5.0/src/loom/etl/observability/observers/_labels.py +0 -57
  189. loom_kernel-0.5.0/src/loom/etl/observability/observers/composite.py +0 -62
  190. loom_kernel-0.5.0/src/loom/etl/observability/observers/noop.py +0 -36
  191. loom_kernel-0.5.0/src/loom/etl/observability/observers/otel.py +0 -263
  192. loom_kernel-0.5.0/src/loom/etl/observability/observers/protocol.py +0 -37
  193. loom_kernel-0.5.0/src/loom/etl/observability/observers/structlog.py +0 -100
  194. loom_kernel-0.5.0/src/loom/etl/observability/recording/__init__.py +0 -5
  195. loom_kernel-0.5.0/src/loom/etl/observability/recording/_recorder.py +0 -225
  196. loom_kernel-0.5.0/src/loom/etl/observability/sinks/__init__.py +0 -17
  197. loom_kernel-0.5.0/src/loom/etl/observability/sinks/_protocol.py +0 -44
  198. loom_kernel-0.5.0/src/loom/etl/observability/sinks/_table.py +0 -42
  199. loom_kernel-0.5.0/src/loom/etl/observability/sinks/_writer.py +0 -26
  200. loom_kernel-0.5.0/src/loom/etl/runner/config_loader.py +0 -45
  201. loom_kernel-0.5.0/src/loom/prometheus/kafka.py +0 -156
  202. loom_kernel-0.5.0/src/loom/streaming/bytewax/_output_wiring.py +0 -203
  203. loom_kernel-0.5.0/src/loom/streaming/observability/__init__.py +0 -29
  204. loom_kernel-0.5.0/src/loom/streaming/observability/config.py +0 -28
  205. loom_kernel-0.5.0/src/loom/streaming/observability/factory.py +0 -47
  206. loom_kernel-0.5.0/src/loom/streaming/observability/observers/__init__.py +0 -29
  207. loom_kernel-0.5.0/src/loom/streaming/observability/observers/composite.py +0 -125
  208. loom_kernel-0.5.0/src/loom/streaming/observability/observers/noop.py +0 -58
  209. loom_kernel-0.5.0/src/loom/streaming/observability/observers/otel.py +0 -232
  210. loom_kernel-0.5.0/src/loom/streaming/observability/observers/protocol.py +0 -174
  211. loom_kernel-0.5.0/src/loom/streaming/observability/observers/structlog.py +0 -158
  212. loom_kernel-0.5.0/tests/integration/etl/test_runtime_contracts.py +0 -455
  213. loom_kernel-0.5.0/tests/unit/celery_bootstrap/test_event_loop.py +0 -182
  214. loom_kernel-0.5.0/tests/unit/core/repository/abc/test_query.py +0 -44
  215. loom_kernel-0.5.0/tests/unit/etl/storage/test_observability_and_protocols.py +0 -149
  216. loom_kernel-0.5.0/tests/unit/etl/test_observer.py +0 -351
  217. loom_kernel-0.5.0/tests/unit/etl/test_observer_internals.py +0 -448
  218. loom_kernel-0.5.0/tests/unit/rest/test_fastapi_auto_logger.py +0 -157
  219. loom_kernel-0.5.0/tests/unit/streaming/kafka/test_observability.py +0 -162
  220. loom_kernel-0.5.0/tests/unit/streaming/observability/cases.py +0 -139
  221. loom_kernel-0.5.0/tests/unit/streaming/observability/test_protocols.py +0 -78
  222. loom_kernel-0.5.0/tests/unit/streaming/observability/test_structlog.py +0 -139
  223. loom_kernel-0.5.0/tests/unit/streaming/test_otel_observability.py +0 -216
  224. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.github/workflows/ci-main.yml +0 -0
  225. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.github/workflows/ci-pr.yml +0 -0
  226. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.github/workflows/docs.yml +0 -0
  227. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.github/workflows/release.yml +0 -0
  228. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.gitignore +0 -0
  229. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.pre-commit-config.yaml +0 -0
  230. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/.readthedocs.yaml +0 -0
  231. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/LICENSE +0 -0
  232. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/Makefile +0 -0
  233. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/codecov.yml +0 -0
  234. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/_static/.gitkeep +0 -0
  235. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/_static/custom.css +0 -0
  236. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/_static/logo-transparent.png +0 -0
  237. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/_static/logo.svg +0 -0
  238. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/architecture/adr/README.md +0 -0
  239. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/architecture/clean-architecture.md +0 -0
  240. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/architecture/overview.md +0 -0
  241. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/etl/examples.md +0 -0
  242. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/guides/autocrud.md +0 -0
  243. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/guides/fake-repo-examples.md +0 -0
  244. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/guides/quickstart.md +0 -0
  245. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/guides/use-case-dsl.md +0 -0
  246. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/index.rst +0 -0
  247. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/api/core.rst +0 -0
  248. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/api/repository.rst +0 -0
  249. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/api/rest.rst +0 -0
  250. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/api/streaming.rst +0 -0
  251. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/api/testing.rst +0 -0
  252. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/reference/index.rst +0 -0
  253. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/requirements.txt +0 -0
  254. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/rest/autocrud.md +0 -0
  255. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/rest/testing.md +0 -0
  256. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/docs/rest/use-case-dsl.md +0 -0
  257. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/sonar-project.properties +0 -0
  258. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/__init__.py +0 -0
  259. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/__init__.py +0 -0
  260. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/auto.py +0 -0
  261. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/celery/constants.py +0 -0
  262. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/backend/__init__.py +0 -0
  263. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/backend/core_model.py +0 -0
  264. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/backend/protocol.py +0 -0
  265. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/backend/sqlalchemy.py +0 -0
  266. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/bootstrap/__init__.py +0 -0
  267. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/bootstrap/bootstrap.py +0 -0
  268. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/bootstrap/kernel.py +0 -0
  269. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/__init__.py +0 -0
  270. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/abc/__init__.py +0 -0
  271. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/abc/backend.py +0 -0
  272. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/abc/dependency.py +0 -0
  273. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/codec.py +0 -0
  274. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/decorators.py +0 -0
  275. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/dependency.py +0 -0
  276. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/gateway.py +0 -0
  277. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/keys.py +0 -0
  278. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/repository.py +0 -0
  279. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/cache/serializer.py +0 -0
  280. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/command/__init__.py +0 -0
  281. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/command/adapter.py +0 -0
  282. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/command/base.py +0 -0
  283. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/command/field.py +0 -0
  284. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/command/introspection.py +0 -0
  285. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/configurable.py +0 -0
  286. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/errors.py +0 -0
  287. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/loader.py +0 -0
  288. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/model.py +0 -0
  289. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/config/resolver.py +0 -0
  290. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/contracts/__init__.py +0 -0
  291. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/contracts/manifest.py +0 -0
  292. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/di/__init__.py +0 -0
  293. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/di/container.py +0 -0
  294. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/di/scope.py +0 -0
  295. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/discovery/__init__.py +0 -0
  296. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/discovery/_utils.py +0 -0
  297. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/discovery/base.py +0 -0
  298. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/discovery/interfaces.py +0 -0
  299. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/discovery/manifest.py +0 -0
  300. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/discovery/modules.py +0 -0
  301. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/__init__.py +0 -0
  302. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/compilable.py +0 -0
  303. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/compiler.py +0 -0
  304. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/events.py +0 -0
  305. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/executor.py +0 -0
  306. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/metrics.py +0 -0
  307. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/engine/plan.py +0 -0
  308. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/errors/__init__.py +0 -0
  309. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/errors/codes.py +0 -0
  310. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/errors/errors.py +0 -0
  311. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/expr/__init__.py +0 -0
  312. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/expr/eval.py +0 -0
  313. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/expr/nodes.py +0 -0
  314. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/expr/refs.py +0 -0
  315. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/job/__init__.py +0 -0
  316. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/job/callback.py +0 -0
  317. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/job/context.py +0 -0
  318. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/job/handle.py +0 -0
  319. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/job/job.py +0 -0
  320. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/job/service.py +0 -0
  321. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/logger/__init__.py +0 -0
  322. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/logger/abc.py +0 -0
  323. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/logger/registry.py +0 -0
  324. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/logger/structlogger.py +0 -0
  325. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/__init__.py +0 -0
  326. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/base.py +0 -0
  327. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/enums.py +0 -0
  328. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/field.py +0 -0
  329. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/introspection.py +0 -0
  330. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/projection.py +0 -0
  331. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/relation.py +0 -0
  332. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/struct.py +0 -0
  333. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/timestamped.py +0 -0
  334. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/types.py +0 -0
  335. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/model/types_postgres.py +0 -0
  336. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/projection/__init__.py +0 -0
  337. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/projection/loaders.py +0 -0
  338. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/projection/runtime.py +0 -0
  339. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/__init__.py +0 -0
  340. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/abc/__init__.py +0 -0
  341. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/abc/repo_for.py +0 -0
  342. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/abc/repository.py +0 -0
  343. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/mutation.py +0 -0
  344. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/registration.py +0 -0
  345. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/registry.py +0 -0
  346. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
  347. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
  348. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
  349. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
  350. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
  351. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
  352. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
  353. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
  354. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
  355. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
  356. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
  357. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
  358. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
  359. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
  360. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
  361. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
  362. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
  363. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
  364. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
  365. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
  366. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/response/__init__.py +0 -0
  367. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/response/base.py +0 -0
  368. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/routing/__init__.py +0 -0
  369. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/routing/ref.py +0 -0
  370. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/routing/resolver.py +0 -0
  371. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/tracing/__init__.py +0 -0
  372. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/tracing/context.py +0 -0
  373. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/transport/__init__.py +0 -0
  374. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/transport/adapter.py +0 -0
  375. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/uow/__init__.py +0 -0
  376. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/uow/abc.py +0 -0
  377. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/uow/context.py +0 -0
  378. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/__init__.py +0 -0
  379. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/_predicates.py +0 -0
  380. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/compute.py +0 -0
  381. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/constants.py +0 -0
  382. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/factory.py +0 -0
  383. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/field_ref.py +0 -0
  384. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/invoker.py +0 -0
  385. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/keys.py +0 -0
  386. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/markers.py +0 -0
  387. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/registry.py +0 -0
  388. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/rule.py +0 -0
  389. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/core/use_case/use_case.py +0 -0
  390. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/__init__.py +0 -0
  391. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_format_registry.py +0 -0
  392. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
  393. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_historify/_common.py +0 -0
  394. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_historify/_log.py +0 -0
  395. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
  396. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
  397. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
  398. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_merge.py +0 -0
  399. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_predicate.py +0 -0
  400. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
  401. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
  402. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
  403. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/_write_policy.py +0 -0
  404. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/__init__.py +0 -0
  405. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
  406. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
  407. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_historify.py +0 -0
  408. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
  409. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_reader.py +0 -0
  410. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_schema.py +0 -0
  411. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
  412. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/__init__.py +0 -0
  413. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
  414. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/_historify.py +0 -0
  415. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/_reader.py +0 -0
  416. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/_schema.py +0 -0
  417. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
  418. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/__init__.py +0 -0
  419. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
  420. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
  421. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/_cleaners.py +0 -0
  422. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/_paths.py +0 -0
  423. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/checkpoint/_store.py +0 -0
  424. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/__init__.py +0 -0
  425. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_binding.py +0 -0
  426. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_compiler.py +0 -0
  427. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_errors.py +0 -0
  428. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_plan.py +0 -0
  429. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_validators.py +0 -0
  430. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
  431. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/__init__.py +0 -0
  432. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/_format.py +0 -0
  433. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/_read_options.py +0 -0
  434. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/_utils.py +0 -0
  435. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/_write_options.py +0 -0
  436. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
  437. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/expr/_params.py +0 -0
  438. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
  439. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
  440. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/source/__init__.py +0 -0
  441. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/source/_from.py +0 -0
  442. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/source/_specs.py +0 -0
  443. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/__init__.py +0 -0
  444. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_file.py +0 -0
  445. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
  446. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
  447. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
  448. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
  449. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
  450. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
  451. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_into.py +0 -0
  452. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
  453. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_table.py +0 -0
  454. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/declarative/target/_temp.py +0 -0
  455. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/executor/_dispatcher.py +0 -0
  456. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/__init__.py +0 -0
  457. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_generics.py +0 -0
  458. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
  459. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_process.py +0 -0
  460. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_sql.py +0 -0
  461. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_step.py +0 -0
  462. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
  463. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runner/__init__.py +0 -0
  464. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runner/errors.py +0 -0
  465. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runner/filtering.py +0 -0
  466. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runtime/__init__.py +0 -0
  467. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/runtime/contracts.py +0 -0
  468. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/schema/__init__.py +0 -0
  469. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/schema/_contract.py +0 -0
  470. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/schema/_schema.py +0 -0
  471. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/storage/__init__.py +0 -0
  472. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/storage/_file_locator.py +0 -0
  473. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/storage/_locator.py +0 -0
  474. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/storage/routing.py +0 -0
  475. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/testing/_result.py +0 -0
  476. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/testing/_runners.py +0 -0
  477. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/etl/testing/_scenario.py +0 -0
  478. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/prometheus/adapter.py +0 -0
  479. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/prometheus/middleware.py +0 -0
  480. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/__init__.py +0 -0
  481. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/adapter.py +0 -0
  482. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/autocrud.py +0 -0
  483. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/compiler.py +0 -0
  484. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/constants.py +0 -0
  485. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/errors.py +0 -0
  486. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/fastapi/__init__.py +0 -0
  487. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/fastapi/openapi.py +0 -0
  488. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/fastapi/response.py +0 -0
  489. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/middleware.py +0 -0
  490. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/model.py +0 -0
  491. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/rest/rest_adapter.py +0 -0
  492. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/__init__.py +0 -0
  493. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/__init__.py +0 -0
  494. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
  495. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_operators.py +0 -0
  496. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
  497. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
  498. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
  499. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/compiler/__init__.py +0 -0
  500. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/compiler/_plan.py +0 -0
  501. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/core/__init__.py +0 -0
  502. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/core/_exceptions.py +0 -0
  503. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/core/_typing.py +0 -0
  504. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/graph/__init__.py +0 -0
  505. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/graph/_flow.py +0 -0
  506. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_codec.py +0 -0
  507. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_config.py +0 -0
  508. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_errors.py +0 -0
  509. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
  510. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/_record.py +0 -0
  511. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
  512. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
  513. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
  514. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/__init__.py +0 -0
  515. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_boundary.py +0 -0
  516. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
  517. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
  518. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_fork.py +0 -0
  519. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_helpers.py +0 -0
  520. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_protocols.py +0 -0
  521. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_router.py +0 -0
  522. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_shape.py +0 -0
  523. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_step.py +0 -0
  524. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/_with.py +0 -0
  525. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/streaming/nodes/refs.py +0 -0
  526. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/testing/__init__.py +0 -0
  527. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/testing/golden.py +0 -0
  528. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/testing/http_harness.py +0 -0
  529. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/testing/in_memory.py +0 -0
  530. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/testing/repository_harness.py +0 -0
  531. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/src/loom/testing/runner.py +0 -0
  532. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/__init__.py +0 -0
  533. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/conftest.py +0 -0
  534. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/golden/__init__.py +0 -0
  535. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/golden/baselines/.gitkeep +0 -0
  536. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/golden/outputs/.gitkeep +0 -0
  537. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/golden/plans/.gitkeep +0 -0
  538. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/helpers/__init__.py +0 -0
  539. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/__init__.py +0 -0
  540. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/celery_bootstrap/__init__.py +0 -0
  541. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/celery_bootstrap/config/conf.celery.integration.yaml +0 -0
  542. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/celery_bootstrap/test_auto_create_app_integration.py +0 -0
  543. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/conftest.py +0 -0
  544. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/__init__.py +0 -0
  545. {loom_kernel-0.5.0/tests/integration/core/repository → loom_kernel-0.7.0/tests/integration/core/bootstrap}/__init__.py +0 -0
  546. {loom_kernel-0.5.0/tests/integration/core/repository/sqlalchemy → loom_kernel-0.7.0/tests/integration/core/repository}/__init__.py +0 -0
  547. {loom_kernel-0.5.0/tests/integration/core/rest → loom_kernel-0.7.0/tests/integration/core/repository/sqlalchemy}/__init__.py +0 -0
  548. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/repository/sqlalchemy/conftest.py +0 -0
  549. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/repository/sqlalchemy/test_cache_integration.py +0 -0
  550. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/repository/sqlalchemy/test_repository_integration.py +0 -0
  551. {loom_kernel-0.5.0/tests/integration/core/use_case → loom_kernel-0.7.0/tests/integration/core/rest}/__init__.py +0 -0
  552. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/rest/test_auto_interface_integration.py +0 -0
  553. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/rest/test_fastapi_app_integration.py +0 -0
  554. {loom_kernel-0.5.0/tests/integration/fake_repo → loom_kernel-0.7.0/tests/integration/core/use_case}/__init__.py +0 -0
  555. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/use_case/test_custom_repository_integration.py +0 -0
  556. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/core/use_case/test_use_case_crud_integration.py +0 -0
  557. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/etl/__init__.py +0 -0
  558. {loom_kernel-0.5.0/tests/integration/fake_repo/product/category → loom_kernel-0.7.0/tests/integration/fake_repo}/__init__.py +0 -0
  559. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/config/__init__.py +0 -0
  560. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/config/conf.manifest.yaml +0 -0
  561. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/config/conf.modules.yaml +0 -0
  562. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/main.py +0 -0
  563. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/manifest.py +0 -0
  564. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/__init__.py +0 -0
  565. {loom_kernel-0.5.0/tests/integration/fake_repo/product/review → loom_kernel-0.7.0/tests/integration/fake_repo/product/category}/__init__.py +0 -0
  566. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/category/model.py +0 -0
  567. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/category/schemas.py +0 -0
  568. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/interface.py +0 -0
  569. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/jobs.py +0 -0
  570. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/model.py +0 -0
  571. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/relations.py +0 -0
  572. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/repository.py +0 -0
  573. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/repository_contract.py +0 -0
  574. {loom_kernel-0.5.0/tests/unit → loom_kernel-0.7.0/tests/integration/fake_repo/product/review}/__init__.py +0 -0
  575. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/review/model.py +0 -0
  576. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/review/schemas.py +0 -0
  577. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/schemas.py +0 -0
  578. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/fake_repo/product/use_cases.py +0 -0
  579. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/support/__init__.py +0 -0
  580. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/integration/support/logical_repo_fixtures.py +0 -0
  581. {loom_kernel-0.5.0/tests/unit/celery_bootstrap → loom_kernel-0.7.0/tests/unit}/__init__.py +0 -0
  582. {loom_kernel-0.5.0/tests/unit/celery_jobs → loom_kernel-0.7.0/tests/unit/celery_bootstrap}/__init__.py +0 -0
  583. {loom_kernel-0.5.0/tests/unit/core → loom_kernel-0.7.0/tests/unit/celery_jobs}/__init__.py +0 -0
  584. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/celery_jobs/test_auto.py +0 -0
  585. {loom_kernel-0.5.0/tests/unit/core/backend → loom_kernel-0.7.0/tests/unit/core}/__init__.py +0 -0
  586. {loom_kernel-0.5.0/tests/unit/core/bootstrap → loom_kernel-0.7.0/tests/unit/core/backend}/__init__.py +0 -0
  587. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/backend/test_backend_compiler.py +0 -0
  588. {loom_kernel-0.5.0/tests/unit/core/cache → loom_kernel-0.7.0/tests/unit/core/bootstrap}/__init__.py +0 -0
  589. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/bootstrap/test_bootstrap.py +0 -0
  590. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/bootstrap/test_bootstrap_metrics.py +0 -0
  591. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/bootstrap/test_kernel.py +0 -0
  592. {loom_kernel-0.5.0/tests/unit/core/command → loom_kernel-0.7.0/tests/unit/core/cache}/__init__.py +0 -0
  593. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/cache/test_cached_repository.py +0 -0
  594. {loom_kernel-0.5.0/tests/unit/core/config → loom_kernel-0.7.0/tests/unit/core/command}/__init__.py +0 -0
  595. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/command/test_command_base.py +0 -0
  596. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/command/test_command_field.py +0 -0
  597. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/command/test_command_patch.py +0 -0
  598. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/command/test_introspection.py +0 -0
  599. {loom_kernel-0.5.0/tests/unit/core/di → loom_kernel-0.7.0/tests/unit/core/config}/__init__.py +0 -0
  600. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/config/test_config.py +0 -0
  601. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/config/test_configurable.py +0 -0
  602. {loom_kernel-0.5.0/tests/unit/core/discovery → loom_kernel-0.7.0/tests/unit/core/di}/__init__.py +0 -0
  603. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/di/test_container.py +0 -0
  604. {loom_kernel-0.5.0/tests/unit/core/engine → loom_kernel-0.7.0/tests/unit/core/discovery}/__init__.py +0 -0
  605. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/discovery/test_manifest.py +0 -0
  606. {loom_kernel-0.5.0/tests/unit/core/errors → loom_kernel-0.7.0/tests/unit/core/engine}/__init__.py +0 -0
  607. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/engine/test_compiler.py +0 -0
  608. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/engine/test_executor.py +0 -0
  609. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/engine/test_executor_trace.py +0 -0
  610. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/engine/test_executor_uow.py +0 -0
  611. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/engine/test_metrics.py +0 -0
  612. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/engine/test_plan.py +0 -0
  613. {loom_kernel-0.5.0/tests/unit/core/expr → loom_kernel-0.7.0/tests/unit/core/errors}/__init__.py +0 -0
  614. {loom_kernel-0.5.0/tests/unit/core/job → loom_kernel-0.7.0/tests/unit/core/expr}/__init__.py +0 -0
  615. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/expr/test_expr.py +0 -0
  616. {loom_kernel-0.5.0/tests/unit/core/logger → loom_kernel-0.7.0/tests/unit/core/job}/__init__.py +0 -0
  617. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/job/conftest.py +0 -0
  618. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/job/test_callback.py +0 -0
  619. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/job/test_context.py +0 -0
  620. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/job/test_handle.py +0 -0
  621. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/job/test_inline_service.py +0 -0
  622. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/job/test_job.py +0 -0
  623. {loom_kernel-0.5.0/tests/unit/core/model → loom_kernel-0.7.0/tests/unit/core/logger}/__init__.py +0 -0
  624. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/logger/test_registry.py +0 -0
  625. {loom_kernel-0.5.0/tests/unit/core/projection → loom_kernel-0.7.0/tests/unit/core/model}/__init__.py +0 -0
  626. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/model/test_model.py +0 -0
  627. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/model/test_struct.py +0 -0
  628. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/model/test_timestamped.py +0 -0
  629. {loom_kernel-0.5.0/tests/unit/core/repository → loom_kernel-0.7.0/tests/unit/core/observability}/__init__.py +0 -0
  630. {loom_kernel-0.5.0/tests/unit/core/repository/abc → loom_kernel-0.7.0/tests/unit/core/projection}/__init__.py +0 -0
  631. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/projection/test_runtime.py +0 -0
  632. {loom_kernel-0.5.0/tests/unit/core/repository/sqlalchemy → loom_kernel-0.7.0/tests/unit/core/repository}/__init__.py +0 -0
  633. {loom_kernel-0.5.0/tests/unit/core/routing → loom_kernel-0.7.0/tests/unit/core/repository/abc}/__init__.py +0 -0
  634. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/repository/abc/conftest.py +0 -0
  635. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/repository/abc/test_repository_contract.py +0 -0
  636. {loom_kernel-0.5.0/tests/unit/core/tracing → loom_kernel-0.7.0/tests/unit/core/repository/sqlalchemy}/__init__.py +0 -0
  637. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/repository/sqlalchemy/conftest.py +0 -0
  638. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/repository/sqlalchemy/test_loaders.py +0 -0
  639. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/repository/sqlalchemy/test_repository.py +0 -0
  640. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/repository/sqlalchemy/test_transactional.py +0 -0
  641. {loom_kernel-0.5.0/tests/unit/core/uow → loom_kernel-0.7.0/tests/unit/core/routing}/__init__.py +0 -0
  642. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/routing/test_routing.py +0 -0
  643. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/test_async_bridge.py +0 -0
  644. {loom_kernel-0.5.0/tests/unit/core/use_case → loom_kernel-0.7.0/tests/unit/core/tracing}/__init__.py +0 -0
  645. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/tracing/test_context.py +0 -0
  646. {loom_kernel-0.5.0/tests/unit/etl → loom_kernel-0.7.0/tests/unit/core/uow}/__init__.py +0 -0
  647. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/uow/test_executor_uow.py +0 -0
  648. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/uow/test_sqlalchemy_uow.py +0 -0
  649. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/uow/test_uow_protocols.py +0 -0
  650. {loom_kernel-0.5.0/tests/unit/etl/backends → loom_kernel-0.7.0/tests/unit/core/use_case}/__init__.py +0 -0
  651. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_compute.py +0 -0
  652. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_factory.py +0 -0
  653. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_field_ref.py +0 -0
  654. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_invoker.py +0 -0
  655. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_markers.py +0 -0
  656. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_rule.py +0 -0
  657. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/core/use_case/test_use_case.py +0 -0
  658. {loom_kernel-0.5.0/tests/unit/etl/backends/test_polars → loom_kernel-0.7.0/tests/unit/etl}/__init__.py +0 -0
  659. {loom_kernel-0.5.0/tests/unit/etl/backends/test_spark → loom_kernel-0.7.0/tests/unit/etl/backends}/__init__.py +0 -0
  660. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/_historify_contract.py +0 -0
  661. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_historify_common.py +0 -0
  662. {loom_kernel-0.5.0/tests/unit/etl/checkpoint → loom_kernel-0.7.0/tests/unit/etl/backends/test_polars}/__init__.py +0 -0
  663. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/conftest.py +0 -0
  664. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_apply_schema.py +0 -0
  665. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_backend.py +0 -0
  666. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_dtype.py +0 -0
  667. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_file_writer.py +0 -0
  668. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_historify_polars.py +0 -0
  669. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_predicate_pushdown.py +0 -0
  670. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_reader_columns.py +0 -0
  671. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_reader_json_columns.py +0 -0
  672. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_polars/test_upsert_writer.py +0 -0
  673. {loom_kernel-0.5.0/tests/unit/etl/checkpoint/backends → loom_kernel-0.7.0/tests/unit/etl/backends/test_spark}/__init__.py +0 -0
  674. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_spark/conftest.py +0 -0
  675. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_spark/test_dtype.py +0 -0
  676. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_spark/test_historify_spark.py +0 -0
  677. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_spark/test_spark_apply_schema.py +0 -0
  678. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/backends/test_write_policy_historify.py +0 -0
  679. {loom_kernel-0.5.0/tests/unit/etl/compiler → loom_kernel-0.7.0/tests/unit/etl/checkpoint}/__init__.py +0 -0
  680. {loom_kernel-0.5.0/tests/unit/etl/io → loom_kernel-0.7.0/tests/unit/etl/checkpoint/backends}/__init__.py +0 -0
  681. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/checkpoint/backends/test_checkpoint_polars.py +0 -0
  682. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/checkpoint/test_checkpoint_paths.py +0 -0
  683. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/checkpoint/test_cleaners.py +0 -0
  684. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/checkpoint/test_store.py +0 -0
  685. {loom_kernel-0.5.0/tests/unit/etl/schema → loom_kernel-0.7.0/tests/unit/etl/compiler}/__init__.py +0 -0
  686. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_catalog_validator.py +0 -0
  687. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_compiler.py +0 -0
  688. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_compiler_catalog.py +0 -0
  689. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_compiler_upsert.py +0 -0
  690. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_errors.py +0 -0
  691. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_errors_additional_factories.py +0 -0
  692. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_errors_runtime_factories.py +0 -0
  693. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_historify_validator.py +0 -0
  694. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_param_exprs_validator.py +0 -0
  695. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_plan_traversal.py +0 -0
  696. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_step_validator.py +0 -0
  697. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_structural.py +0 -0
  698. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_temp_validator.py +0 -0
  699. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/compiler/test_upsert_validator.py +0 -0
  700. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/conftest.py +0 -0
  701. {loom_kernel-0.5.0/tests/unit/etl/sql → loom_kernel-0.7.0/tests/unit/etl/io}/__init__.py +0 -0
  702. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_source.py +0 -0
  703. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_source_json.py +0 -0
  704. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_source_options.py +0 -0
  705. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_target.py +0 -0
  706. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_utils.py +0 -0
  707. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/io/test_variants.py +0 -0
  708. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/pipeline/__init__.py +0 -0
  709. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/pipeline/test_pipeline_process.py +0 -0
  710. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/pipeline/test_proxy.py +0 -0
  711. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/pipeline/test_step.py +0 -0
  712. {loom_kernel-0.5.0/tests/unit/etl/storage → loom_kernel-0.7.0/tests/unit/etl/schema}/__init__.py +0 -0
  713. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/schema/test_contract.py +0 -0
  714. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/schema/test_schema.py +0 -0
  715. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/schema/test_table.py +0 -0
  716. {loom_kernel-0.5.0/tests/unit/etl/testing → loom_kernel-0.7.0/tests/unit/etl/sql}/__init__.py +0 -0
  717. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/sql/test_merge.py +0 -0
  718. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/sql/test_predicate.py +0 -0
  719. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/sql/test_predicate_dialect.py +0 -0
  720. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/sql/test_sql_runtime.py +0 -0
  721. {loom_kernel-0.5.0/tests/unit/prometheus → loom_kernel-0.7.0/tests/unit/etl/storage}/__init__.py +0 -0
  722. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/storage/test_io_protocols.py +0 -0
  723. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/storage/test_locator.py +0 -0
  724. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/storage/test_route_build.py +0 -0
  725. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/storage/test_schema_readers.py +0 -0
  726. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/storage/test_storage_config.py +0 -0
  727. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_format_registry.py +0 -0
  728. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_runner_errors.py +0 -0
  729. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/test_spark_testing.py +0 -0
  730. {loom_kernel-0.5.0/tests/unit/rest → loom_kernel-0.7.0/tests/unit/etl/testing}/__init__.py +0 -0
  731. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/testing/test_runners.py +0 -0
  732. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/etl/testing/test_spark_helpers.py +0 -0
  733. {loom_kernel-0.5.0/tests/unit/streaming/bytewax → loom_kernel-0.7.0/tests/unit/prometheus}/__init__.py +0 -0
  734. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/prometheus/test_adapter.py +0 -0
  735. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/prometheus/test_middleware.py +0 -0
  736. {loom_kernel-0.5.0/tests/unit/streaming/compiler → loom_kernel-0.7.0/tests/unit/rest}/__init__.py +0 -0
  737. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_autocrud.py +0 -0
  738. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_middleware.py +0 -0
  739. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_pydantic_adapter.py +0 -0
  740. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_response.py +0 -0
  741. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_rest_adapter.py +0 -0
  742. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_rest_compiler.py +0 -0
  743. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/rest/test_rest_model.py +0 -0
  744. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/__init__.py +0 -0
  745. {loom_kernel-0.5.0/tests/unit/streaming/contracts → loom_kernel-0.7.0/tests/unit/streaming/bytewax}/__init__.py +0 -0
  746. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/cases.py +0 -0
  747. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_batch_key.py +0 -0
  748. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_operators.py +0 -0
  749. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_runtime_sink.py +0 -0
  750. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/bytewax/test_runtime_source.py +0 -0
  751. {loom_kernel-0.5.0/tests/unit/streaming/nodes → loom_kernel-0.7.0/tests/unit/streaming/compiler}/__init__.py +0 -0
  752. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/compiler/cases.py +0 -0
  753. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/conftest.py +0 -0
  754. {loom_kernel-0.5.0/tests/unit/streaming/observability → loom_kernel-0.7.0/tests/unit/streaming/contracts}/__init__.py +0 -0
  755. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/contracts/cases.py +0 -0
  756. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/contracts/test_boundary.py +0 -0
  757. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/contracts/test_message.py +0 -0
  758. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/contracts/test_multi_boundary.py +0 -0
  759. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/contracts/test_steps.py +0 -0
  760. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/__init__.py +0 -0
  761. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/cases/__init__.py +0 -0
  762. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/cases/batch.py +0 -0
  763. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/cases/fork.py +0 -0
  764. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/cases/router.py +0 -0
  765. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/cases/shared.py +0 -0
  766. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/cases/simple.py +0 -0
  767. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/flows/conftest.py +0 -0
  768. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/__init__.py +0 -0
  769. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/cases.py +0 -0
  770. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/fakes.py +0 -0
  771. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_config.py +0 -0
  772. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_key_resolver.py +0 -0
  773. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_multi_wire.py +0 -0
  774. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/kafka/test_settings.py +0 -0
  775. {loom_kernel-0.5.0/tests/unit/streaming/support → loom_kernel-0.7.0/tests/unit/streaming/nodes}/__init__.py +0 -0
  776. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/nodes/conftest.py +0 -0
  777. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/nodes/test_logging.py +0 -0
  778. {loom_kernel-0.5.0/tests/unit/testing → loom_kernel-0.7.0/tests/unit/streaming/observability}/__init__.py +0 -0
  779. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/observability/conftest.py +0 -0
  780. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/observability/test_registry.py +0 -0
  781. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/support/flow_cases.py +0 -0
  782. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/test_routing.py +0 -0
  783. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/streaming/test_with.py +0 -0
  784. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/testing/test_golden.py +0 -0
  785. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/testing/test_http_harness.py +0 -0
  786. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/testing/test_in_memory.py +0 -0
  787. {loom_kernel-0.5.0 → loom_kernel-0.7.0}/tests/unit/testing/test_runner.py +0 -0
@@ -1,3 +1,219 @@
1
+ # 🚀 Release 0.7.0 ([#25](https://github.com/the-reacher-data/loom-py/pull/25)) ([`0d8941a`](https://github.com/the-reacher-data/loom-py/commit/0d8941a724ec768b162a07e756bac3d53157ec85))
2
+
3
+
4
+ ## ✨ Features
5
+ ### config
6
+ - **config:** add StructBinder and migrate streaming binding resolution<br>
7
+ > Introduces StructBinder in core/config/binder.py — a Strategy that
8
+ > injects constructor arguments from a config mapping via msgspec.convert,
9
+ > covering primitives, Literal constraints, and LoomFrozenStruct subclasses.
10
+ > Migrates streaming _instantiate_binding to use it, removing ~30 lines of
11
+ > private helpers and adding typed ConfigError on resolution failures.
12
+
13
+ - **config:** add ConfigContext for typed section extraction and binding resolution<br>
14
+ > Single entry-point for runner and bootstrap code to read config:
15
+ > section() extracts typed sub-trees, bind() injects constructor args
16
+ > from a config path + overrides, resolve() materializes ConfigBinding
17
+ > declarations. Accepts an optional StructBinder for strict-mode control.
18
+
19
+
20
+
21
+ ## 🐛 Fixes
22
+ ### core
23
+ - **core:** clean async bridge timeout and celery typing
24
+
25
+ ### etl
26
+ - **etl:** align missing storage error with config contract
27
+
28
+
29
+
30
+
31
+ ## ♻️ Refactor
32
+ ### model
33
+ - **model:** migrate public config structs to LoomFrozenStruct
34
+
35
+ ### streaming
36
+ - **streaming:** clean up _instantiate_binding before extraction<br>
37
+ > Replace mutable dict() + .update() with a single dict unpacking
38
+ > Remove the dead param.annotation fallback (get_type_hints already
39
+ > resolves all forward refs; the fallback silently passed strings to
40
+ > _is_struct_annotation which always returned False)
41
+ > Extract _SKIP_KINDS constant to name the variadic-parameter guard
42
+ > Raise ConfigError instead of TypeError for missing required struct
43
+ > params (semantically a config error, not a type error; both are
44
+ > caught by the enclosing _resolve_binding handler so no behaviour
45
+ > change in streaming)
46
+ > All 7 binding tests pass.
47
+
48
+
49
+ ### core
50
+ - **core:** homogenize config and runner boundaries
51
+ - **core:** add runner and compiler protocols
52
+ - **core:** apply runner lifecycle protocols
53
+ - **core:** harden runner lifecycle abstraction<br>
54
+ > shutdown_runner/flush_runner now catch and log exceptions instead of
55
+ > propagating, preserving the original exception when called from finally
56
+ > blocks; contract updated in docstrings and covered by new tests
57
+ > CompilerProtocol drops @runtime_checkable — no production isinstance
58
+ > usage existed; Protocol remains valid for static typing
59
+ > StreamingRunner.prepare_run() calls shutdown_runner(self) before
60
+ > overwriting self._shutdown, preventing resource leaks on double calls
61
+ > _build_backend_options extracted from loom.celery.config into
62
+ > loom.core.async_bridge.build_backend_options, eliminating duplication
63
+ > between the Celery and streaming domains
64
+ > _CeleryAsyncRuntime._signals_connected ClassVar removed; the
65
+ > module-level _SIGNALS_CONNECTED flag is the single source of truth
66
+ > for the process-level signal guard
67
+ > ETLRunner.flush() delegates to ETLExecutor.flush(), which checks
68
+ > SupportsFlush via isinstance instead of getattr duck-typing
69
+ > TypeVars in compiler.py renamed to _RequestT/_PlanT to signal they
70
+ > are implementation details of the Protocol, not public API
71
+
72
+
73
+ ### etl
74
+ - **etl:** make flush an optional runner capability
75
+
76
+ ### celery
77
+ - **celery:** adopt runner shutdown helper
78
+ - **celery:** replace _SIGNALS_CONNECTED sentinel with dispatch_uid<br>
79
+ > Eliminates the module-level mutable boolean that violated the no-global-
80
+ > mutable-state architecture rule. Idempotency is now handled by Celery's
81
+ > dispatch_uid mechanism: disconnect+connect on each call ensures the most-
82
+ > recently registered closure is always active, so a second bootstrap_worker
83
+ > call wires up fresh dependencies rather than leaving stale closures from
84
+ > the first call.
85
+ > This is strictly better than the sentinel: no global state, no race
86
+ > condition between threads calling bootstrap_worker concurrently, and
87
+ > correct closure replacement when called multiple times in tests.
88
+
89
+
90
+ ### rest
91
+ - **rest:** use observability config directly
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+ # 🚀 Release 0.6.0 ([#22](https://github.com/the-reacher-data/loom-py/pull/22)) ([`5146569`](https://github.com/the-reacher-data/loom-py/commit/51465697115036ed05f620a1099272e4fd216501))
100
+
101
+
102
+ ## ✨ Features
103
+ ### core
104
+ - **core:** add unified ObservabilityRuntime<br>
105
+ > Introduces the core observability package: LifecycleEvent, LifecycleObserver
106
+ > protocol, ObservabilityConfig, and ObservabilityRuntime as a single fan-out
107
+ > engine replacing the fragmented per-module observer wiring. Adds
108
+ > StructlogLifecycleObserver, OtelLifecycleObserver, NoopObserver, and
109
+ > PrometheusLifecycleAdapter (with Pushgateway support for ETL batch jobs).
110
+ > Backward-compat re-exports (safe_observe, notify_observers) kept for the
111
+ > streaming composite observer until the legacy cleanup commit.
112
+
113
+
114
+
115
+ ## 🐛 Fixes
116
+ ### observability
117
+ - **observability:** restore default bootstraps
118
+
119
+ ### rest
120
+ - **rest:** correct camel-to-snake conversion for acronyms in filter fields
121
+
122
+ ### streaming
123
+ - **streaming:** propagate trace ids through bytewax paths
124
+ - **streaming:** keep input trace ids through the micro
125
+ - **streaming:** bridge otel trace ids from messages
126
+
127
+
128
+ ## 📖 Documentation
129
+ - align yaml config and dummy repo links
130
+ - restore dummy repo urls
131
+ - fix markdown links for streaming dummies
132
+
133
+ ### prometheus
134
+ - **prometheus:** update KafkaPrometheusMetrics docstring metric names
135
+
136
+
137
+
138
+ ## ♻️ Refactor
139
+ ### observability
140
+ - **observability:** simplify otel log correlation
141
+ - **observability:** simplify otel exporter imports
142
+ - **observability:** expose ObservabilityRuntime in public API and clean architecture debt<br>
143
+ > Export ObservabilityRuntime and LifecycleStatus from loom.core.observability package
144
+ > Compute dict(meta) once in span() instead of three separate allocations
145
+ > Replace _SIGNALS_CONNECTED module-level global with ClassVar on _CeleryAsyncRuntime
146
+ > Add RuntimeError to bootstrap_worker Raises docstring
147
+ > Fix TraceIdMiddleware docstring example (removed spurious ObservabilityRuntime reference)
148
+ > Add missing observability_runtime param to _make_handler docstring
149
+
150
+ - **observability:** unify runtime across services
151
+ - **observability:** clean up dead code and docs
152
+
153
+ ### streaming
154
+ - **streaming:** migrate to unified ObservabilityRuntime<br>
155
+ > Replace StreamingObservabilityConfig and the manual observer construction
156
+ > in _load_observability_runtime() with ObservabilityRuntime.from_config().
157
+ > Observability config now lives under streaming.runtime.observability in YAML,
158
+ > eliminating the separate streaming.observability section.
159
+ > Delete src/loom/streaming/_observability.py (StreamingObservabilityConfig)
160
+ > Delete src/loom/streaming/observability/ directory (old observer stack)
161
+ > Add observability: ObservabilityConfig field to BytewaxRuntimeConfig
162
+ > StreamingRunner.from_config() calls ObservabilityRuntime.from_config() directly
163
+ > StreamingTestRunner defaults to ObservabilityRuntime.noop(); callers pass
164
+ > observability_runtime= explicitly when needed
165
+ > Update tests to use new config shape and ObservabilityRuntime([observer])
166
+
167
+ - **streaming:** replace KafkaStreamingObserver with LifecycleEvent/TRANSPORT<br>
168
+ > Eliminates the parallel KafkaStreamingObserver protocol hierarchy (NoopKafkaObserver,
169
+ > StructlogKafkaObserver) and models all Kafka transport events as LifecycleEvent with
170
+ > Scope.TRANSPORT. KafkaPrometheusMetrics now implements the LifecycleObserver protocol
171
+ > via a single on_event() dispatcher instead of four typed callback methods.
172
+
173
+ - **streaming:** preserve trace lineage across boundaries
174
+
175
+ ### prometheus
176
+ - **prometheus:** add KafkaMetricName enum and drop loom_ prefix<br>
177
+ > Extracts Prometheus metric names into a public KafkaMetricName StrEnum so
178
+ > callers can reference metric names without magic strings. Removes the loom_
179
+ > namespace prefix from all four Kafka instruments (produced_total,
180
+ > consumed_total, encode_duration_seconds, decode_duration_seconds).
181
+
182
+ - **prometheus:** drop loom prefix from lifecycle metrics
183
+
184
+ ### rest
185
+ - **rest:** use core observability runtime
186
+ - **rest:** read prometheus from observability config
187
+
188
+ ### celery
189
+ - **celery:** adopt async bridge and runtime config
190
+
191
+ ### etl
192
+ - **etl:** make spark pytest plugin opt-in
193
+
194
+
195
+
196
+ ## ✅ Tests
197
+ ### kafka
198
+ - **kafka:** update metric name assertions after loom_ prefix removal
199
+
200
+ ### observability
201
+ - **observability:** cover lineage and runtime branches
202
+
203
+ ### integration
204
+ - **integration:** add in-memory REST, observability, and bootstrap integration tests
205
+
206
+ ### etl
207
+ - **etl:** cover prometheus flush on runner shutdown
208
+
209
+
210
+ ## 🛠 Chores
211
+ ### deps
212
+ - **deps:** bump click to 8.3.3
213
+
214
+
215
+
216
+
1
217
  # 🚀 Release 0.5.0 ([#20](https://github.com/the-reacher-data/loom-py/pull/20)) ([`70f7cf8`](https://github.com/the-reacher-data/loom-py/commit/70f7cf85275fcc1f590e06f980dfac91cad50893))
2
218
 
3
219
 
@@ -0,0 +1,96 @@
1
+ # 🚀 Release 0.7.0 ([#25](https://github.com/the-reacher-data/loom-py/pull/25)) ([`0d8941a`](https://github.com/the-reacher-data/loom-py/commit/0d8941a724ec768b162a07e756bac3d53157ec85))
2
+
3
+
4
+ ## ✨ Features
5
+ ### config
6
+ - **config:** add StructBinder and migrate streaming binding resolution<br>
7
+ > Introduces StructBinder in core/config/binder.py — a Strategy that
8
+ > injects constructor arguments from a config mapping via msgspec.convert,
9
+ > covering primitives, Literal constraints, and LoomFrozenStruct subclasses.
10
+ > Migrates streaming _instantiate_binding to use it, removing ~30 lines of
11
+ > private helpers and adding typed ConfigError on resolution failures.
12
+
13
+ - **config:** add ConfigContext for typed section extraction and binding resolution<br>
14
+ > Single entry-point for runner and bootstrap code to read config:
15
+ > section() extracts typed sub-trees, bind() injects constructor args
16
+ > from a config path + overrides, resolve() materializes ConfigBinding
17
+ > declarations. Accepts an optional StructBinder for strict-mode control.
18
+
19
+
20
+
21
+ ## 🐛 Fixes
22
+ ### core
23
+ - **core:** clean async bridge timeout and celery typing
24
+
25
+ ### etl
26
+ - **etl:** align missing storage error with config contract
27
+
28
+
29
+
30
+
31
+ ## ♻️ Refactor
32
+ ### model
33
+ - **model:** migrate public config structs to LoomFrozenStruct
34
+
35
+ ### streaming
36
+ - **streaming:** clean up _instantiate_binding before extraction<br>
37
+ > Replace mutable dict() + .update() with a single dict unpacking
38
+ > Remove the dead param.annotation fallback (get_type_hints already
39
+ > resolves all forward refs; the fallback silently passed strings to
40
+ > _is_struct_annotation which always returned False)
41
+ > Extract _SKIP_KINDS constant to name the variadic-parameter guard
42
+ > Raise ConfigError instead of TypeError for missing required struct
43
+ > params (semantically a config error, not a type error; both are
44
+ > caught by the enclosing _resolve_binding handler so no behaviour
45
+ > change in streaming)
46
+ > All 7 binding tests pass.
47
+
48
+
49
+ ### core
50
+ - **core:** homogenize config and runner boundaries
51
+ - **core:** add runner and compiler protocols
52
+ - **core:** apply runner lifecycle protocols
53
+ - **core:** harden runner lifecycle abstraction<br>
54
+ > shutdown_runner/flush_runner now catch and log exceptions instead of
55
+ > propagating, preserving the original exception when called from finally
56
+ > blocks; contract updated in docstrings and covered by new tests
57
+ > CompilerProtocol drops @runtime_checkable — no production isinstance
58
+ > usage existed; Protocol remains valid for static typing
59
+ > StreamingRunner.prepare_run() calls shutdown_runner(self) before
60
+ > overwriting self._shutdown, preventing resource leaks on double calls
61
+ > _build_backend_options extracted from loom.celery.config into
62
+ > loom.core.async_bridge.build_backend_options, eliminating duplication
63
+ > between the Celery and streaming domains
64
+ > _CeleryAsyncRuntime._signals_connected ClassVar removed; the
65
+ > module-level _SIGNALS_CONNECTED flag is the single source of truth
66
+ > for the process-level signal guard
67
+ > ETLRunner.flush() delegates to ETLExecutor.flush(), which checks
68
+ > SupportsFlush via isinstance instead of getattr duck-typing
69
+ > TypeVars in compiler.py renamed to _RequestT/_PlanT to signal they
70
+ > are implementation details of the Protocol, not public API
71
+
72
+
73
+ ### etl
74
+ - **etl:** make flush an optional runner capability
75
+
76
+ ### celery
77
+ - **celery:** adopt runner shutdown helper
78
+ - **celery:** replace _SIGNALS_CONNECTED sentinel with dispatch_uid<br>
79
+ > Eliminates the module-level mutable boolean that violated the no-global-
80
+ > mutable-state architecture rule. Idempotency is now handled by Celery's
81
+ > dispatch_uid mechanism: disconnect+connect on each call ensures the most-
82
+ > recently registered closure is always active, so a second bootstrap_worker
83
+ > call wires up fresh dependencies rather than leaving stale closures from
84
+ > the first call.
85
+ > This is strictly better than the sentinel: no global state, no race
86
+ > condition between threads calling bootstrap_worker concurrently, and
87
+ > correct closure replacement when called multiple times in tests.
88
+
89
+
90
+ ### rest
91
+ - **rest:** use observability config directly
92
+
93
+
94
+
95
+
96
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: loom-kernel
3
- Version: 0.5.0
3
+ Version: 0.7.0
4
4
  Summary: Loom Python project
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.11
@@ -396,8 +396,13 @@ app:
396
396
  database:
397
397
  url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
398
398
 
399
- metrics:
400
- enabled: false
399
+ observability:
400
+ log:
401
+ enabled: false
402
+ otel:
403
+ enabled: false
404
+ prometheus:
405
+ enabled: false
401
406
  ```
402
407
 
403
408
  ```python
@@ -329,8 +329,13 @@ app:
329
329
  database:
330
330
  url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
331
331
 
332
- metrics:
333
- enabled: false
332
+ observability:
333
+ log:
334
+ enabled: false
335
+ otel:
336
+ enabled: false
337
+ prometheus:
338
+ enabled: false
334
339
  ```
335
340
 
336
341
  ```python
@@ -69,7 +69,7 @@ def _skip_duplicate_reexports(
69
69
  ("loom.core.errors", "RuleViolations"),
70
70
  ("loom.core.use_case", "RuleViolation"),
71
71
  ("loom.core.use_case", "RuleViolations"),
72
- ("loom.etl.observability", "OtelConfig"),
72
+ ("loom.etl.lineage", "ETLObservabilityConfig"),
73
73
  ("loom.testing", "CompilationError"),
74
74
  ("loom.rest.model", "PaginationMode"),
75
75
  }
@@ -165,9 +165,15 @@ storage:
165
165
  tmp_root: /var/lib/loom/lake/_tmp
166
166
 
167
167
  observability:
168
- log: true
169
- slow_step_threshold_ms: 30000
170
- run_sink:
168
+ log:
169
+ enabled: true
170
+ otel:
171
+ enabled: false
172
+ prometheus:
173
+ enabled: true
174
+ pushgateway_url: ${oc.env:PUSHGATEWAY_URL,http://127.0.0.1:9091}
175
+ lineage:
176
+ enabled: true
171
177
  # Choose exactly one destination:
172
178
  root: /var/lib/loom/lake/_runs
173
179
  # database: ops
@@ -42,7 +42,8 @@ def test_double_amount(loom_polars_runner):
42
42
  result.assert_count(2)
43
43
  ```
44
44
 
45
- Pytest fixtures auto-registered: `loom_polars_runner`, `loom_spark_runner`.
45
+ Pytest fixtures: `loom_polars_runner`. Import `loom.etl.testing.spark` or
46
+ register it explicitly in Spark-enabled suites to use `loom_spark_runner`.
46
47
 
47
48
  ## Spark integration tests
48
49
 
@@ -578,12 +578,15 @@ app:
578
578
  database:
579
579
  url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///./store.db}
580
580
 
581
- trace:
582
- enabled: ${oc.decode:${oc.env:TRACE_ENABLED,true}}
583
-
584
- metrics:
585
- enabled: ${oc.decode:${oc.env:METRICS_ENABLED,true}}
586
- path: /metrics
581
+ observability:
582
+ log:
583
+ enabled: true
584
+ otel:
585
+ enabled: false
586
+ prometheus:
587
+ enabled: ${oc.decode:${oc.env:METRICS_ENABLED,true}}
588
+ config:
589
+ path: /metrics
587
590
  ```
588
591
 
589
592
  ### Manifest mode (explicit registry)
@@ -90,9 +90,15 @@ storage:
90
90
  tmp_root: /var/lib/loom/lake/_tmp
91
91
 
92
92
  observability:
93
- log: true
94
- slow_step_threshold_ms: 30000
95
- run_sink:
93
+ log:
94
+ enabled: true
95
+ otel:
96
+ enabled: false
97
+ prometheus:
98
+ enabled: true
99
+ pushgateway_url: ${oc.env:PUSHGATEWAY_URL,http://127.0.0.1:9091}
100
+ lineage:
101
+ enabled: true
96
102
  root: /var/lib/loom/lake/_runs
97
103
  ```
98
104
 
@@ -58,6 +58,12 @@ app:
58
58
 
59
59
  database:
60
60
  url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
61
+
62
+ observability:
63
+ log:
64
+ enabled: false
65
+ otel:
66
+ enabled: false
61
67
  ```
62
68
 
63
69
  ```python
@@ -330,12 +336,15 @@ app:
330
336
  database:
331
337
  url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
332
338
 
333
- metrics:
334
- enabled: true
335
- path: /metrics
336
-
337
- trace:
338
- enabled: true
339
+ observability:
340
+ log:
341
+ enabled: true
342
+ otel:
343
+ enabled: false
344
+ prometheus:
345
+ enabled: true
346
+ config:
347
+ path: /metrics
339
348
  ```
340
349
 
341
350
  ```python
@@ -4,7 +4,7 @@
4
4
  steps, batching, branching, and transport wiring.
5
5
 
6
6
  The companion demo repository for this subsystem is
7
- `dummy-loom-streaming <https://github.com/the-reacher-data/dummy-loom-streaming>`_.
7
+ [dummy-loom-streaming](https://github.com/the-reacher-data/dummy-loom-streaming).
8
8
 
9
9
  ## Install
10
10
 
@@ -94,4 +94,4 @@ Use `loom.streaming.nodes`, `loom.streaming.kafka`, and
94
94
  surface.
95
95
 
96
96
  For a runnable end-to-end example, see the companion repository:
97
- `dummy-loom-streaming <https://github.com/the-reacher-data/dummy-loom-streaming>`_.
97
+ [dummy-loom-streaming](https://github.com/the-reacher-data/dummy-loom-streaming).
@@ -282,6 +282,12 @@ celery:
282
282
 
283
283
  # For integration tests: run tasks synchronously in the calling process.
284
284
  task_always_eager: false
285
+
286
+ # Async bridge settings used by async jobs/callbacks.
287
+ runtime:
288
+ backend: asyncio # asyncio or trio
289
+ use_uvloop: true # only applies to asyncio on supported platforms
290
+ shutdown_timeout_ms: 10000
285
291
  ```
286
292
 
287
293
  (per-job-overrides-from-yaml)=
@@ -497,6 +503,9 @@ celery:
497
503
  broker_url: "redis://localhost:6379/15"
498
504
  result_backend: "redis://localhost:6379/15"
499
505
  task_always_eager: true
506
+ runtime:
507
+ backend: asyncio
508
+ use_uvloop: false
500
509
  ```
501
510
 
502
511
  Or patch it in a pytest fixture:
@@ -165,9 +165,15 @@ storage:
165
165
  tmp_root: /var/lib/loom/lake/_tmp
166
166
 
167
167
  observability:
168
- log: true
169
- slow_step_threshold_ms: 30000
170
- run_sink:
168
+ log:
169
+ enabled: true
170
+ otel:
171
+ enabled: false
172
+ prometheus:
173
+ enabled: true
174
+ pushgateway_url: ${oc.env:PUSHGATEWAY_URL,http://127.0.0.1:9091}
175
+ lineage:
176
+ enabled: true
171
177
  # Choose exactly one destination:
172
178
  root: /var/lib/loom/lake/_runs
173
179
  # database: ops
@@ -19,7 +19,7 @@ design rules:
19
19
  - prefer explicit contracts over reflection-heavy magic
20
20
 
21
21
  The companion demo repository for the streaming subsystem is
22
- `dummy-loom-streaming <https://github.com/the-reacher-data/dummy-loom-streaming>`_.
22
+ [dummy-loom-streaming](https://github.com/the-reacher-data/dummy-loom-streaming).
23
23
 
24
24
  ## At a glance
25
25
 
@@ -28,7 +28,7 @@ Execution Infrastructure
28
28
 
29
29
  loom.etl.storage
30
30
  loom.etl.checkpoint
31
- loom.etl.observability
31
+ loom.etl.lineage
32
32
 
33
33
  Backends
34
34
  --------
@@ -282,6 +282,12 @@ celery:
282
282
 
283
283
  # For integration tests: run tasks synchronously in the calling process.
284
284
  task_always_eager: false
285
+
286
+ # Async bridge settings used by async jobs/callbacks.
287
+ runtime:
288
+ backend: asyncio # asyncio or trio
289
+ use_uvloop: true # only applies to asyncio on supported platforms
290
+ shutdown_timeout_ms: 10000
285
291
  ```
286
292
 
287
293
  (rest-per-job-overrides-from-yaml)=
@@ -497,6 +503,9 @@ celery:
497
503
  broker_url: "redis://localhost:6379/15"
498
504
  result_backend: "redis://localhost:6379/15"
499
505
  task_always_eager: true
506
+ runtime:
507
+ backend: asyncio
508
+ use_uvloop: false
500
509
  ```
501
510
 
502
511
  Or patch it in a pytest fixture:
@@ -578,12 +578,15 @@ app:
578
578
  database:
579
579
  url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///./store.db}
580
580
 
581
- trace:
582
- enabled: ${oc.decode:${oc.env:TRACE_ENABLED,true}}
583
-
584
- metrics:
585
- enabled: ${oc.decode:${oc.env:METRICS_ENABLED,true}}
586
- path: /metrics
581
+ observability:
582
+ log:
583
+ enabled: false
584
+ otel:
585
+ enabled: false
586
+ prometheus:
587
+ enabled: ${oc.decode:${oc.env:METRICS_ENABLED,true}}
588
+ config:
589
+ path: /metrics
587
590
  ```
588
591
 
589
592
  ### Manifest mode (explicit registry)
@@ -4,7 +4,7 @@
4
4
  `StreamFlow` into a real Bytewax dataflow.
5
5
 
6
6
  For a runnable end-to-end reference implementation, see:
7
- `dummy-loom-streaming <https://github.com/the-reacher-data/dummy-loom-streaming>`_.
7
+ [dummy-loom-streaming](https://github.com/the-reacher-data/dummy-loom-streaming).
8
8
 
9
9
  ## What it does
10
10
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "loom-kernel"
3
- version = "0.5.0"
3
+ version = "0.7.0"
4
4
  description = "Loom Python project"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -79,9 +79,6 @@ celery = [
79
79
  "redis>=5.0,<6.0",
80
80
  ]
81
81
 
82
- [project.entry-points.pytest11]
83
- loom-spark = "loom.etl.testing.spark"
84
-
85
82
  [project.entry-points."loom.etl.backends"]
86
83
  polars = "loom.etl.backends.polars.provider:PolarsProvider"
87
84
  spark = "loom.etl.backends.spark.provider:SparkProvider"
@@ -223,7 +220,7 @@ markers = [
223
220
 
224
221
  [tool.commitizen]
225
222
  name = "cz_conventional_commits"
226
- version = "0.5.0"
223
+ version = "0.7.0"
227
224
  tag_format = "v$version"
228
225
  version_files = [
229
226
  "pyproject.toml:project.version",