loom-kernel 1.9.1__tar.gz → 1.9.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.github/workflows/ci-main.yml +35 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.github/workflows/ci-pr.yml +35 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.github/workflows/docs.yml +10 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.github/workflows/release.yml +19 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/CHANGELOG.md +26 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/PKG-INFO +1 -1
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/ai/a2a.md +10 -5
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/ai/mcp.md +141 -14
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/pyproject.toml +2 -2
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/config.py +20 -2
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_mcp.py +7 -2
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/errors.py +21 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/remote_auth.py +110 -54
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/runtime/_lifecycle.py +98 -21
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/helpers/remote_auth_plugin.py +3 -1
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/conftest.py +8 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_a2a_auth_wiring.py +13 -1
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_remote_auth_wiring.py +79 -12
- loom_kernel-1.9.3/tests/integration/ai/test_runtime_remote_clients.py +579 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_config.py +44 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_remote_auth.py +93 -5
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/uv.lock +1 -1
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.gitignore +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.pre-commit-config.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/.readthedocs.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/LICENSE +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/Makefile +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/README.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/codecov.yml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docker-compose.local.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/_static/.gitkeep +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/_static/custom.css +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/_static/logo-transparent.png +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/_static/logo.svg +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/ai/artifacts.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/ai/observability.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/ai/overview.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/ai/providers.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/architecture/adr/README.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/architecture/clean-architecture.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/architecture/overview.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/conf.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/etl/examples.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/etl/pipelines.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/etl/testing.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/examples-repo/index.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/getting-started/etl.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/getting-started/rest.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/getting-started/streaming.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/guides/autocrud.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/guides/celery.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/guides/etl.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/guides/fake-repo-examples.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/guides/quickstart.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/guides/use-case-dsl.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/index.rst +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/overview.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/ai.rst +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/core.rst +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/etl.rst +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/repository.rst +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/rest.rst +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/streaming.rst +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/api/testing.rst +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/reference/index.rst +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/requirements.txt +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/autocrud.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/celery.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/examples.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/identity.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/sql.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/testing.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/rest/use-case-dsl.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/streaming/bytewax.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/streaming/delivery.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/docs/streaming/tracing.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/scripts/release/checkout_merged_release.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/sonar-project.properties +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/_filters.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/_transport.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/_usecase.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/_binding.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/_handlers.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/_rpc.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/card.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/events.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/a2a/server.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/abc.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/_compiler.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/_plan.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/_symbols.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/phases/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/phases/_capabilities.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/phases/_hook.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/phases/_limits.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/phases/_model_role.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/compiler/phases/_output.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/declarative/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/declarative/_envelope.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/declarative/_schema.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/declarative/_v1.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/describe.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_capabilities.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_models.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/fastapi/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/fastapi/endpoints.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/fastapi/response.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/fastapi/streaming.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/inference.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/runtime/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/runtime/_health.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/runtime/_hooks.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/runtime/_limits.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/runtime/_mcp.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/validate/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/ai/validate/__main__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/auto.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/bootstrap.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/constants.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/runner.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/celery/service.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/async_bridge.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/backend/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/backend/core_model.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/backend/protocol.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/backend/sqlalchemy.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/bootstrap/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/bootstrap/bootstrap.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/bootstrap/kernel.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/abc/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/abc/backend.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/abc/config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/abc/dependency.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/codec.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/decorators.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/dependency.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/gateway.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/keys.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/repository.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/cache/serializer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/command/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/command/adapter.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/command/base.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/command/field.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/command/introspection.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/compiler.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/_resolver_utils.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/binder.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/configurable.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/context.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/keys.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/loader.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/model.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/observability.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/resolver.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/secrets.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/config/ssm.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/contracts/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/contracts/manifest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/di/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/di/container.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/di/scope.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/discovery/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/discovery/_utils.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/discovery/base.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/discovery/interfaces.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/discovery/manifest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/discovery/modules.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/compilable.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/compiler.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/events.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/executor.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/metrics.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/engine/plan.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/errors/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/errors/codes.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/errors/errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/expr/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/expr/eval.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/expr/nodes.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/expr/refs.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/identity/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/identity/context.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/identity/identity.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/identity/issuer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/identity/wire.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/introspection/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/introspection/base.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/introspection/describe.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/job/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/job/callback.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/job/context.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/job/handle.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/job/job.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/job/service.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/logger/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/logger/abc.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/logger/config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/logger/registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/logger/structlogger.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/base.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/enums.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/field.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/introspection.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/projection.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/relation.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/struct.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/timestamped.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/types.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/model/types_postgres.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/event.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/observer/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/observer/noop.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/observer/otel.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/observer/structlog.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/otel_ids.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/protocol.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/runtime.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/span.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/observability/topology.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/plugins/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/plugins/entrypoints.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/projection/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/projection/loaders.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/projection/runtime.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/abc/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/abc/query.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/abc/repo_for.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/abc/repository.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/dynamodb/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/dynamodb/registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/dynamodb/repository.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/dynamodb/uow.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/mutation.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/registration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/model.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/response/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/response/base.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/routing/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/routing/ref.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/routing/resolver.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/runner.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/schema/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/schema/schema_mode.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/abc/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/abc/contracts.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/abc/errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/clickhouse/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/clickhouse/_client.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/clickhouse/executor.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/clickhouse/registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/roles.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/sql/service.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/tracing/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/tracing/context.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/transport/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/transport/adapter.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/uow/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/uow/abc.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/uow/context.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/_predicates.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/compute.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/constants.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/factory.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/field_ref.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/invoker.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/keys.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/markers.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/rule.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/core/use_case/use_case.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_format_registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_historify/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_historify/_common.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_historify/_log.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_historify/_ops.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_historify/_transform.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_merge.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_path_template.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_predicate.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/_write_policy.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_dtype.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_file_writer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_historify.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_predicate.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_reader.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_schema.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_streaming.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/_writer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/polars/provider.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/_dtype.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/_historify.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/_reader.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/_schema.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/_writer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/backends/spark/provider.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/_cleaners.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/_paths.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/_scope.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/checkpoint/_store.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_binding.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_compiler.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_plan.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_validators.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_validators_plan.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/compiler/_validators_step.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/_format.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/_read_options.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/_utils.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/_write_options.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/expr/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/expr/_params.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/expr/_predicate.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/expr/_refs.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/source/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/source/_from.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/source/_specs.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_client.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_file.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_history/_report.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_into.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_table.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/declarative/target/_temp.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/executor/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/executor/_dispatcher.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/executor/_executor.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/_registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_clickhouse.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_dynamodb.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_mongo.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/sources/_serialization.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/targets/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/io/targets/_clickhouse.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/_observer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/_records.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/sinks/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/sinks/_table.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/lineage/sinks/_writer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/_builder.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/_ops.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/_protocol.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/_runner.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/_step.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/backends/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_generics.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_params.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_pipeline.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_process.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_sql.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_step.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_step_client.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/pipeline/_step_sql.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/_providers.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/_wiring.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/config_loader.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/core.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runner/filtering.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runtime/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/runtime/contracts.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/schema/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/schema/_contract.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/schema/_schema.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/storage/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/storage/_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/storage/_file_locator.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/storage/_locator.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/storage/routing.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/testing/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/testing/_result.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/testing/_runners.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/testing/_scenario.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/testing/_stubs.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/etl/testing/spark.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/_async.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/_ctx.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/_meta.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/_placeholders.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/_summary.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/deploy/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/deploy/_discovery.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/deploy/_schedule.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/deploy/_yaml.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_assemble.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_backfill.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_backfill_body.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_body.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_common.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_factory.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_hooks.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_maintenance.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_run_name.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_runtime.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_signature.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/flow/_stages.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/manifest/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/manifest/_model.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/manifest/_s3.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/manifest/_store.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/notify/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/notify/_event.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/notify/_factory.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/notify/_port.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/notify/_slack.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/observer/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/observer/_flow.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/observer/_logging_bridge.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/observer/_manifest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prefect/observer/_task_run.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prometheus/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prometheus/adapter.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prometheus/kafka.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prometheus/lifecycle.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/prometheus/middleware.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/py.typed +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/_body.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/adapter.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/auth/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/auth/abc.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/auth/config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/auth/jwt.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/auth/middleware.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/autocrud.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/compiler.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/constants.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/cors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/_errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/_exclusions.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/app.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/auto.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/openapi.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/response.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/router_runtime.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/fastapi/sql.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/middleware.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/model.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/rest/rest_adapter.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_adapter.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_dlq.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_operators.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/bytewax/runner.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/_bindings.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/_compiler.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/_errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/_plan.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/phases/build_plan.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/compiler/phases/validate.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/core/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/core/_errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/core/_exceptions.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/core/_message.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/core/_tracing.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/core/_typing.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/graph/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/graph/_flow.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_codec.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_key_resolver.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_message.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_record.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/_wire.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/client/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/client/_consumer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/client/_producer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/client/_protocol.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/client/_retry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/message/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/message/_consumer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/message/_producer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/kafka/message/_protocol.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/mongo/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/mongo/_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/mongo/_event.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/mongo/_normalize.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_boundary.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_broadcast.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_capabilities.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_decompose.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_expand_routes.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_expr_eval.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_fork.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_helpers.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_mongo.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_protocols.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_router.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_shape.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_sink.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_step.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_table/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_table/common.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_table/config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/_with.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/nodes/refs.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/streaming/testing.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/agents.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/golden.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/http_harness.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/in_memory.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/repository_harness.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/src/loom/testing/runner.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/contract/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/contract/ai/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/contract/ai/test_contract_fake.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/contract/ai/test_contract_pydantic_ai.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/contract/observability/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/contract/observability/test_otel_sdk_contract.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/golden/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/golden/baselines/.gitkeep +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/golden/outputs/.gitkeep +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/golden/plans/.gitkeep +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/helpers/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/helpers/pydantic_ai_engine.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/helpers/spans.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/_agents_only_app.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_a2a.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_agent_specs_source.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_auto_a2a.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_auto_agents_only.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_auto_client_factories.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_auto_gate.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_auto_without_sqlalchemy.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_capabilities.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_describe.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_endpoints.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_grant_wiring.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_health_probe.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_hooks.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_limits.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_live_provider.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_mcp_end_to_end.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_provider_portability.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_runtime.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_streaming.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/ai/test_transport.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/celery_bootstrap/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/celery_bootstrap/config/conf.celery.integration.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/celery_bootstrap/test_auto_create_app_integration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/celery_bootstrap/test_bootstrap_worker.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/bootstrap/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/bootstrap/test_bootstrap_integration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/repository/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/repository/sqlalchemy/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/repository/sqlalchemy/test_cache_integration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/repository/sqlalchemy/test_repository_integration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/rest/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/rest/test_auto_interface_integration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/rest/test_fastapi_app_integration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/rest/test_rest_error_mapping.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/rest/test_rest_observability.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/use_case/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/use_case/test_custom_repository_integration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/core/use_case/test_use_case_crud_integration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/etl/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/etl/test_runner_integration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/config/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/config/conf.interfaces.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/config/conf.manifest.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/config/conf.modules.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/config/conf.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/main.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/manifest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/category/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/category/model.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/category/schemas.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/interface.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/jobs.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/model.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/relations.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/repository.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/repository_contract.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/review/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/review/model.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/review/schemas.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/schemas.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/fake_repo/product/use_cases.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/sql/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/sql/init/01_users_roles.sql +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/sql/test_clickhouse_integration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/streaming/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/streaming/kafka/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/streaming/kafka/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/streaming/kafka/test_partitioned_source_integration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/streaming/kafka/test_source_contract_integration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/streaming/test_into_table_integration.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/support/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/integration/support/logical_repo_fixtures.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/engines/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/engines/test_a2a_capability.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/engines/test_capability_span_nesting.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/engines/test_pydantic_ai_binding.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/engines/test_pydantic_ai_failures.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/engines/test_pydantic_ai_translation.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/README.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-a2a-agent/agent.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-mcp-agent/agent.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-python-agent/agent.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-skills-agent/agent.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-skills-agent/skills/release-notes/SKILL.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-sql-agent/agent.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/capability-usecase-agent/agent.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/full-agent/agent.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/full-agent/skills/severity-rubric/SKILL.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/minimal-agent/agent.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/corpus_v1/output-type-ref-agent/agent.yaml +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/incidents.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/invoices.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/triage.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/unsupported.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/broken.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/geo.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/metrics.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/skills_root/shared/group-changes/SKILL.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/fixtures/skills_root/shared/tone-of-voice/SKILL.md +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_capabilities.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_hook.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_limits.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_model_role.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_output.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_remote_auth_plan.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/phases/test_validate_cli.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/runtime/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/runtime/test_hook_command.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_a2a_base_url.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_a2a_card.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_compiler.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_compiler_offline.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_declarative_envelope.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_declarative_hook.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_describe.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_error_catalogue_totality.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_error_factories.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_fake_engine.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_loopback_plaintext.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_no_extras_import.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_public_surface.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_remote_auth_settings.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_run_error_hook.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_schema_emission.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_secret_containment.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_spec_v1_corpus.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ai/test_usecase_helpers.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_bootstrap/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_bootstrap/test_async_runtime.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_bootstrap/test_bootstrap.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_jobs/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_jobs/test_auto.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_jobs/test_celery_service.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_jobs/test_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_jobs/test_identity_propagation.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/celery_jobs/test_runner.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/ci/test_workflow_supply_chain_contract.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/backend/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/backend/test_backend_compiler.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/bootstrap/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/bootstrap/test_bootstrap.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/bootstrap/test_bootstrap_metrics.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/bootstrap/test_kernel.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/cache/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/cache/test_cached_repository.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/cache/test_config_wiring.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/cache/test_gateway_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/command/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/command/test_command_base.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/command/test_command_field.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/command/test_command_patch.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/command/test_introspection.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_binder.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_configurable.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_context.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_resolver_utils.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_secrets.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/config/test_ssm.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/di/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/di/test_container.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/discovery/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/discovery/test_interfaces.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/discovery/test_manifest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/discovery/test_modules.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_caller_binding.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_compiler.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_executor.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_executor_trace.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_executor_uow.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_metrics.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/engine/test_plan.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/errors/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/errors/test_errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/expr/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/expr/test_expr.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/identity/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/identity/test_context.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/identity/test_identity.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/identity/test_wire.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/introspection/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/introspection/test_describe.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/test_callback.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/test_context.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/test_handle.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/test_inline_service.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/job/test_job.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/logger/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/logger/test_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/logger/test_registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/model/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/model/test_model.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/model/test_struct.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/model/test_timestamped.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_message_id_generator.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_observers.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_optional_otel_sdk.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_otel_loader_branches.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_provider_modes.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_runtime.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/observability/test_tracing_characterisation.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/plugins/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/plugins/test_entrypoints.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/plugins/test_import_containment.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/projection/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/projection/test_runtime.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/abc/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/abc/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/abc/test_query.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/abc/test_repository_contract.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/dynamodb/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/dynamodb/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/dynamodb/test_registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/dynamodb/test_repository.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/sqlalchemy/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/sqlalchemy/test_loaders.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/sqlalchemy/test_repository.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/repository/sqlalchemy/test_transactional.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/routing/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/routing/test_routing.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/_fakes.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_clickhouse_executor.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_clickhouse_transport.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_isolation.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_null_service.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_pagination_limits.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_registry_lifecycle.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/sql/test_role_policy.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/test_async_bridge.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/test_compiler_contracts.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/test_runner_contracts.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/tracing/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/tracing/test_context.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/uow/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/uow/test_executor_uow.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/uow/test_sqlalchemy_uow.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/uow/test_uow_protocols.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_compute.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_factory.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_field_ref.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_invoker.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_markers.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_rule.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/core/use_case/test_use_case.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/_historify_contract.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_empty_write_warning.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_historify_common.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_path_template.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_apply_schema.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_backend.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_dtype.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_file_writer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_historify_polars.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_predicate_pushdown.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_reader_columns.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_reader_json_columns.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_step_execution.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_streaming_write.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_update_writer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_upsert_writer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_writer_null_schema.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_polars/test_writer_to_frame.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/test_dtype.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/test_historify_spark.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/test_spark_apply_schema.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/test_step_execution.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_spark/test_writer_to_frame.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/backends/test_write_policy_historify.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/checkpoint/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/checkpoint/backends/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/checkpoint/backends/test_checkpoint_polars.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/checkpoint/test_checkpoint_paths.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/checkpoint/test_cleaners.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/checkpoint/test_store.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/client_step/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/client_step/test_client_step.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_catalog_validator.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_compiler.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_compiler_catalog.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_compiler_upsert.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_errors_additional_factories.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_errors_runtime_factories.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_file_template_validator.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_historify_validator.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_param_exprs_validator.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_plan_traversal.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_step_validator.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_structural.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_temp_validator.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/compiler/test_upsert_validator.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_clickhouse_reader.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_dynamodb_predicate.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_dynamodb_reader.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_from_clickhouse.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_from_dynamodb.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_from_mongo.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_mongo_predicate.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_mongo_reader.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/sources/test_mongo_reader_memory.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/targets/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/targets/test_clickhouse_writer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/targets/test_into_clickhouse.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_history_target.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_source.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_source_json.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_source_options.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_target.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_utils.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/io/test_variants.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/lineage/test_observer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/lineage/test_records.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/lineage/test_store.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/backends/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/backends/test_delta_rs.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/test_builder.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/test_runner.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/maintenance/test_step.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/pipeline/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/pipeline/test_pipeline_process.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/pipeline/test_proxy.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/pipeline/test_step.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/schema/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/schema/test_contract.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/schema/test_schema.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/schema/test_table.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/sql/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/sql/test_merge.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/sql/test_predicate.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/sql/test_predicate_dialect.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/sql/test_sql_runtime.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_backend_factory.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_io_protocols.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_locator.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_observability_and_protocols.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_route_build.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_schema_readers.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/storage/test_storage_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_config_loader.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_executor.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_executor_tracing.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_format_registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_module_contracts.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_public_api_discovery.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_record_schema_coverage.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_runner.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_runner_errors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/test_spark_testing.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/testing/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/testing/test_runners.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/testing/test_scenario_and_stubs.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/etl/testing/test_spark_helpers.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_backfill_flow.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_ctx.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_etl_flow.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_logging_bridge.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_maintenance_flow.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_manifest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_manifest_s3.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_notify.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_observer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_placeholders.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_task_run_observer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prefect/test_yaml_loader.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prometheus/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prometheus/test_adapter.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/prometheus/test_middleware.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/release/test_checkout_merged_release.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/release/test_release_workflow_contract.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/_fixture_app.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_app_hardening.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_auth_middleware.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_auth_rejection_logging.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_autocrud.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_cors.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_fastapi_auto_logger.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_fastapi_auto_persistence.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_jwt_issuer.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_jwt_middleware.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_middleware.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_pydantic_adapter.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_request_hardening.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_response.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_rest_adapter.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_rest_compiler.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_rest_model.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_route_rbac.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_router_identity.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_router_runtime.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_sql_endpoint.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_sql_endpoint_auth_gate.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_sql_endpoint_roles.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/rest/test_sql_serialization.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/cases.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_adapter.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_batch_key.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_bytewax_dispatcher.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_collect_batch.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_dlq.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_error_boundary.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_fanout_accounting.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_operators.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_resource_manager.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_runner.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_runtime_io.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_runtime_sink.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_runtime_source.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_sink_registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_steps.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_storage.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/bytewax/test_storage_trace_characterisation.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/cases.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_async_walk.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_basics.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_config_bindings.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_delivery.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_error_codes.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_mongo_source.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_multi_source.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_router.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_window.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/compiler/test_with.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/cases.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/test_boundary.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/test_message.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/test_mongo_contracts.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/test_multi_boundary.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/contracts/test_steps.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/batch.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/explode.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/fork.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/router.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/shared.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/cases/simple.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/test_compiler_examples.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/flows/test_flow_examples.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/cases.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/fakes.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_client.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_coordinator_retry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_key_resolver.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_message.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_message_client.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_multi_wire.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_observability.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_settings.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_source_decode_parity.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/kafka/test_wire.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/mongo/test_bytewax_source.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/nodes/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/nodes/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/nodes/test_broadcast.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/nodes/test_delta_config.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/nodes/test_logging.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/nodes/test_table_package.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/cases.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/conftest.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_message_lifecycle_spans.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_multiworker_trace_continuity.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_observability_runner.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_outbound_topic_terminal_spans.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_protocols.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_registry.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/observability/test_structlog.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/support/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/support/flow_cases.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/test_expand_routes.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/test_fork.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/test_otel_observability.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/test_routing.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/test_testing_mongo.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/streaming/test_with.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/testing/__init__.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/testing/test_golden.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/testing/test_http_harness.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/testing/test_identity_harness.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/testing/test_in_memory.py +0 -0
- {loom_kernel-1.9.1 → loom_kernel-1.9.3}/tests/unit/testing/test_runner.py +0 -0
|
@@ -3,6 +3,12 @@ name: ci-main
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
5
|
branches: ["master"]
|
|
6
|
+
# The release helper merges the version bump through the API with
|
|
7
|
+
# GITHUB_TOKEN, and GitHub deliberately emits no `push` for it, so that commit
|
|
8
|
+
# would otherwise reach master without ever being validated. `workflow_dispatch`
|
|
9
|
+
# is the documented exception that does start a run from that token, so the
|
|
10
|
+
# release asks for this workflow by hand right after it merges.
|
|
11
|
+
workflow_dispatch:
|
|
6
12
|
|
|
7
13
|
permissions:
|
|
8
14
|
contents: read
|
|
@@ -119,8 +125,14 @@ jobs:
|
|
|
119
125
|
env:
|
|
120
126
|
SNYK_TOKEN: ${{ env.SNYK_TOKEN }}
|
|
121
127
|
|
|
128
|
+
# Non-blocking, exactly as the same scan is on a pull request: a scanner
|
|
129
|
+
# that is unreachable or refusing an expired token says nothing about this
|
|
130
|
+
# code, and master turning red for it hides the failures that do mean
|
|
131
|
+
# something. The outcome is reported loudly in the step below instead.
|
|
122
132
|
- name: Snyk monitor by dependency scope (core/dev/extras)
|
|
133
|
+
id: snyk
|
|
123
134
|
if: ${{ env.SNYK_TOKEN != '' }}
|
|
135
|
+
continue-on-error: true
|
|
124
136
|
shell: bash
|
|
125
137
|
env:
|
|
126
138
|
SNYK_TOKEN: ${{ env.SNYK_TOKEN }}
|
|
@@ -169,6 +181,29 @@ jobs:
|
|
|
169
181
|
--target-reference="${GITHUB_REF_NAME:-master}"
|
|
170
182
|
done
|
|
171
183
|
|
|
184
|
+
- name: Report the Snyk outcome
|
|
185
|
+
if: ${{ always() && env.SNYK_TOKEN != '' }}
|
|
186
|
+
env:
|
|
187
|
+
OUTCOME: ${{ steps.snyk.outcome }}
|
|
188
|
+
shell: bash
|
|
189
|
+
run: |
|
|
190
|
+
set -euo pipefail
|
|
191
|
+
{
|
|
192
|
+
echo "## Snyk dependency scan: \`${OUTCOME}\`"
|
|
193
|
+
} >> "$GITHUB_STEP_SUMMARY"
|
|
194
|
+
if [ "${OUTCOME}" != "success" ]; then
|
|
195
|
+
{
|
|
196
|
+
echo
|
|
197
|
+
echo "The scan did not complete, so **no dependency was cleared and none was"
|
|
198
|
+
echo "reported vulnerable**. This does NOT block the build: a scanner that is"
|
|
199
|
+
echo "unreachable, rate-limited or refusing an expired \`SNYK_TOKEN\` says"
|
|
200
|
+
echo "nothing about this code. Read the step log: an \`Authentication error"
|
|
201
|
+
echo "(SNYK-0005)\` with \`401 Unauthorized\` means the token needs renewing"
|
|
202
|
+
echo "in Snyk and updating in the repository secrets."
|
|
203
|
+
} >> "$GITHUB_STEP_SUMMARY"
|
|
204
|
+
echo "::warning title=Snyk scan did not complete::No dependency was scanned. This does NOT block the build. A 401 with SNYK-0005 means the SNYK_TOKEN is expired or unprovisioned; renew it in Snyk and update the repository secret."
|
|
205
|
+
fi
|
|
206
|
+
|
|
172
207
|
# ---------------------------------------------------------------------------
|
|
173
208
|
# Churn canary (plan.md risk table): run the agent suites against the LATEST
|
|
174
209
|
# published pydantic-ai instead of the locked one.
|
|
@@ -10,7 +10,17 @@ permissions:
|
|
|
10
10
|
security-events: write
|
|
11
11
|
|
|
12
12
|
jobs:
|
|
13
|
+
# A release PR carries a version bump and nothing else, and it is the only way
|
|
14
|
+
# CHANGELOG.md, pyproject.toml and uv.lock reach master. Validating it is not
|
|
15
|
+
# possible and not useful: the branch and the PR are pushed with GITHUB_TOKEN,
|
|
16
|
+
# so any run queued against them sits waiting for manual approval and expires
|
|
17
|
+
# unapproved — a red check nobody can turn green. Worse, the release helper
|
|
18
|
+
# merges only when every check that reported has passed, so an expired run that
|
|
19
|
+
# concludes before the helper polls blocks the release outright. Skipping is
|
|
20
|
+
# what the helper already documents as the normal state. The code the bump
|
|
21
|
+
# describes was validated in the pull requests that composed it.
|
|
13
22
|
validate:
|
|
23
|
+
if: ${{ !startsWith(github.head_ref, 'docs/release-') }}
|
|
14
24
|
runs-on: ubuntu-latest
|
|
15
25
|
env:
|
|
16
26
|
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
|
|
@@ -229,6 +239,29 @@ jobs:
|
|
|
229
239
|
--project-name="loom-py/extra-${extra}"
|
|
230
240
|
done
|
|
231
241
|
|
|
242
|
+
- name: Report the Snyk outcome
|
|
243
|
+
if: ${{ always() && env.SNYK_TOKEN != '' }}
|
|
244
|
+
env:
|
|
245
|
+
OUTCOME: ${{ steps.snyk.outcome }}
|
|
246
|
+
shell: bash
|
|
247
|
+
run: |
|
|
248
|
+
set -euo pipefail
|
|
249
|
+
{
|
|
250
|
+
echo "## Snyk dependency scan: \`${OUTCOME}\`"
|
|
251
|
+
} >> "$GITHUB_STEP_SUMMARY"
|
|
252
|
+
if [ "${OUTCOME}" != "success" ]; then
|
|
253
|
+
{
|
|
254
|
+
echo
|
|
255
|
+
echo "The scan did not complete, so **no dependency was cleared and none was"
|
|
256
|
+
echo "reported vulnerable**. This does NOT block the build: a scanner that is"
|
|
257
|
+
echo "unreachable, rate-limited or refusing an expired \`SNYK_TOKEN\` says"
|
|
258
|
+
echo "nothing about this code. Read the step log: an \`Authentication error"
|
|
259
|
+
echo "(SNYK-0005)\` with \`401 Unauthorized\` means the token needs renewing"
|
|
260
|
+
echo "in Snyk and updating in the repository secrets."
|
|
261
|
+
} >> "$GITHUB_STEP_SUMMARY"
|
|
262
|
+
echo "::warning title=Snyk scan did not complete::No dependency was scanned. This does NOT block the build. A 401 with SNYK-0005 means the SNYK_TOKEN is expired or unprovisioned; renew it in Snyk and update the repository secret."
|
|
263
|
+
fi
|
|
264
|
+
|
|
232
265
|
- name: Publish prerelease package to TestPyPI
|
|
233
266
|
if: ${{ github.event.pull_request.head.repo.full_name == github.repository && env.TEST_PYPI_API_TOKEN != '' && steps.version.outputs.deploy == 'true' }}
|
|
234
267
|
env:
|
|
@@ -290,6 +323,7 @@ jobs:
|
|
|
290
323
|
#
|
|
291
324
|
# No `--frozen` and no `uv.lock` here — resolving fresh is the entire point.
|
|
292
325
|
pydantic-ai-canary:
|
|
326
|
+
if: ${{ !startsWith(github.head_ref, 'docs/release-') }}
|
|
293
327
|
runs-on: ubuntu-latest
|
|
294
328
|
continue-on-error: true
|
|
295
329
|
steps:
|
|
@@ -402,6 +436,7 @@ jobs:
|
|
|
402
436
|
# is not evidence that Apache Kafka agrees.
|
|
403
437
|
# ---------------------------------------------------------------------------
|
|
404
438
|
integration:
|
|
439
|
+
if: ${{ !startsWith(github.head_ref, 'docs/release-') }}
|
|
405
440
|
runs-on: ubuntu-latest
|
|
406
441
|
steps:
|
|
407
442
|
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
@@ -26,7 +26,17 @@ concurrency:
|
|
|
26
26
|
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
27
27
|
|
|
28
28
|
jobs:
|
|
29
|
+
# A release PR carries a version bump and nothing else, and it is the only way
|
|
30
|
+
# CHANGELOG.md, pyproject.toml and uv.lock reach master. Validating it is not
|
|
31
|
+
# possible and not useful: the branch and the PR are pushed with GITHUB_TOKEN,
|
|
32
|
+
# so any run queued against them sits waiting for manual approval and expires
|
|
33
|
+
# unapproved — a red check nobody can turn green. Worse, the release helper
|
|
34
|
+
# merges only when every check that reported has passed, so an expired run that
|
|
35
|
+
# concludes before the helper polls blocks the release outright. Skipping is
|
|
36
|
+
# what the helper already documents as the normal state. The code the bump
|
|
37
|
+
# describes was validated in the pull requests that composed it.
|
|
29
38
|
build:
|
|
39
|
+
if: ${{ !startsWith(github.head_ref, 'docs/release-') }}
|
|
30
40
|
runs-on: ubuntu-latest
|
|
31
41
|
# contents: read is scoped here — build does not need pages or id-token.
|
|
32
42
|
permissions:
|
|
@@ -22,6 +22,8 @@ jobs:
|
|
|
22
22
|
permissions:
|
|
23
23
|
contents: write
|
|
24
24
|
pull-requests: write
|
|
25
|
+
# Dispatching ci-main for the merged version bump; see that step.
|
|
26
|
+
actions: write
|
|
25
27
|
outputs:
|
|
26
28
|
deploy: ${{ steps.version.outputs.deploy }}
|
|
27
29
|
version: ${{ steps.version.outputs.version }}
|
|
@@ -228,6 +230,23 @@ jobs:
|
|
|
228
230
|
--timeout-seconds "${MERGE_TIMEOUT_SECONDS}")
|
|
229
231
|
echo "release_sha=${RELEASE_SHA}" >> "$GITHUB_OUTPUT"
|
|
230
232
|
|
|
233
|
+
# The bump is on master now, and no `push` event announced it: GitHub
|
|
234
|
+
# emits none for a merge performed with GITHUB_TOKEN. Ask for the run
|
|
235
|
+
# explicitly, so CHANGELOG.md, pyproject.toml and uv.lock are validated on
|
|
236
|
+
# master like every other commit. Never fatal: this asks for a check, it is
|
|
237
|
+
# not one, and a release must not fail because a follow-up run could not be
|
|
238
|
+
# queued. It dispatches on `master`, so what it validates is master's tip,
|
|
239
|
+
# which is what ci-main validates on any other day.
|
|
240
|
+
- name: Validate the merged version bump on master
|
|
241
|
+
if: ${{ steps.version.outputs.deploy == 'true' }}
|
|
242
|
+
continue-on-error: true
|
|
243
|
+
env:
|
|
244
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
245
|
+
shell: bash
|
|
246
|
+
run: |
|
|
247
|
+
set -euo pipefail
|
|
248
|
+
gh workflow run ci-main.yml --repo "${GITHUB_REPOSITORY}" --ref master
|
|
249
|
+
|
|
231
250
|
- name: Store release notes
|
|
232
251
|
if: ${{ steps.version.outputs.deploy == 'true' }}
|
|
233
252
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
@@ -1,3 +1,29 @@
|
|
|
1
|
+
# 🚀 Release 1.9.3 ([#159](https://github.com/the-reacher-data/loom-py/pull/159)) ([`eedd32c`](https://github.com/the-reacher-data/loom-py/commit/eedd32ca67be84302292aab968b5fe6dd7eb3621))
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# 🚀 Release 1.9.2 ([#157](https://github.com/the-reacher-data/loom-py/pull/157)) ([`3b32161`](https://github.com/the-reacher-data/loom-py/commit/3b32161dfcfe12fe25fe05ff7ccb4d6a71a6b64a))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
## 🐛 Fixes
|
|
17
|
+
### ai
|
|
18
|
+
- **ai:** make outbound auth work for MCP and let a grant boot offline
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
1
27
|
# 🚀 Release 1.9.1 ([#155](https://github.com/the-reacher-data/loom-py/pull/155)) ([`587affc`](https://github.com/the-reacher-data/loom-py/commit/587affcfbf46301ccd3e02a5edeb34e63b460628))
|
|
2
28
|
|
|
3
29
|
|
|
@@ -88,11 +88,16 @@ session. An agent that authenticates its card endpoint would otherwise fail
|
|
|
88
88
|
start-up before a skill was ever called.
|
|
89
89
|
|
|
90
90
|
`kind` names an entry point in the group `loom.ai.remote_auth`, the same group
|
|
91
|
-
MCP servers resolve against: the strategy contract is
|
|
92
|
-
[`
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
MCP servers resolve against: the strategy contract is the HTTP client's own
|
|
92
|
+
[`Auth`](https://www.python-httpx.org/advanced/authentication/), which knows
|
|
93
|
+
nothing of either protocol, so a deployment registers its strategy once and
|
|
94
|
+
grants it to either transport. The A2A client is loom's own, built with `httpx`,
|
|
95
|
+
while an MCP server is reached through a client using `httpx2` — a strategy
|
|
96
|
+
registered as a class is refused by the other flavour, and a strategy returning
|
|
97
|
+
a plain callable serves both: see
|
|
98
|
+
[mcp.md § Two HTTP libraries, one callable](mcp.md#two-http-libraries-one-callable).
|
|
99
|
+
|
|
100
|
+
The one strategy an A2A agent cannot use is `kind: oauth`, which delegates to the MCP client library's own flow; naming it
|
|
96
101
|
here is refused with `MCP_AUTH_STRATEGY_INVALID` rather than connecting without
|
|
97
102
|
the credential the deployment asked for.
|
|
98
103
|
|
|
@@ -106,6 +106,58 @@ rejected fail-closed.
|
|
|
106
106
|
Tool filters are matched against the tools the server really advertises, not
|
|
107
107
|
against what the artifact hoped for.
|
|
108
108
|
|
|
109
|
+
### Booting without the network: `ai.remote_clients`
|
|
110
|
+
|
|
111
|
+
Granting `kind: mcp` makes every server the grant names a start-up dependency.
|
|
112
|
+
That is right in production and awkward everywhere else — a laptop, a CI job, an
|
|
113
|
+
environment brought up before its side-cars. `ai.remote_clients` says how a
|
|
114
|
+
client that will not open is treated:
|
|
115
|
+
|
|
116
|
+
```yaml
|
|
117
|
+
ai:
|
|
118
|
+
remote_clients: optional # required (default) | optional
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
| Value | A client that fails to *connect* |
|
|
122
|
+
|---|---|
|
|
123
|
+
| `required` (default) | Aborts start-up, by name, with `MCP_SERVER_UNREACHABLE` — or `A2A_AGENT_UNREACHABLE` for a remote agent. |
|
|
124
|
+
| `optional` | Logged at WARNING and dropped; the runtime starts without it. |
|
|
125
|
+
|
|
126
|
+
The switch is process-wide and covers the remote agents of `ai.a2a_agents` as
|
|
127
|
+
well as the servers of `ai.mcp_servers`. An unknown value fails configuration
|
|
128
|
+
load with `REMOTE_CLIENTS_UNKNOWN`, naming the key and both accepted values.
|
|
129
|
+
|
|
130
|
+
Under `optional`, the WARNING carries the error code and the registered name
|
|
131
|
+
only: the transport's own reason is an arbitrary library's exception text and
|
|
132
|
+
can name a URL, so it goes to DEBUG, where an operator asks for it deliberately,
|
|
133
|
+
rather than into routine logs on every boot. The health probe reports the
|
|
134
|
+
dependency `unavailable` once its first pass has run.
|
|
135
|
+
|
|
136
|
+
`optional` tolerates a network that is not there. It tolerates nothing else, and
|
|
137
|
+
three carve-outs are deliberate:
|
|
138
|
+
|
|
139
|
+
**A missing client factory is still fatal.** A plan declaring an `mcp` grant in a
|
|
140
|
+
deployment that wired no MCP client factory is a wiring bug, not an offline
|
|
141
|
+
network. It is collected apart, where the factory is found missing, never told
|
|
142
|
+
from a connection failure by reading its message, and aborts start-up under
|
|
143
|
+
**both** values.
|
|
144
|
+
|
|
145
|
+
**Tool-filter verification still fails closed for a server that did open.** The
|
|
146
|
+
waiver covers only servers that never connected: a server with no session is
|
|
147
|
+
skipped, and a filter on it does not fail start-up. A server that opened has its
|
|
148
|
+
declared filters verified as usual, and a listing that times out still aborts
|
|
149
|
+
start-up under `optional`. Because a tolerated connection failure has already
|
|
150
|
+
spent the shared start-up budget, the verification pass is given a fresh
|
|
151
|
+
`startup_timeout_ms` rather than the exhausted one — otherwise one hanging
|
|
152
|
+
server would fail the filters of every server that answered.
|
|
153
|
+
|
|
154
|
+
**Nothing becomes lazy.** A start-up client that never opened is not reconnected
|
|
155
|
+
later; the clients are session-affine and closing one from a foreign task is
|
|
156
|
+
refused, so reconnecting them needs a supervisor task that does not exist yet.
|
|
157
|
+
This says nothing about the run path, which builds its own toolset and connects
|
|
158
|
+
on its own: under `optional`, a run against a server that never opened at
|
|
159
|
+
start-up connects then and there, and succeeds if the network came back.
|
|
160
|
+
|
|
109
161
|
## Authentication
|
|
110
162
|
|
|
111
163
|
The MCP specification standardises OAuth 2.0 for HTTP transports, so an
|
|
@@ -187,12 +239,62 @@ loom writes the header.
|
|
|
187
239
|
set credentials on one connection is ambiguous, and compilation refuses it with
|
|
188
240
|
`MCP_AUTH_CONFLICT`.
|
|
189
241
|
|
|
242
|
+
### Two HTTP libraries, one callable
|
|
243
|
+
|
|
244
|
+
A strategy is handed to an HTTP client, and the two outbound transports do not
|
|
245
|
+
use the same one.
|
|
246
|
+
|
|
247
|
+
An `mcp` grant becomes a pydantic-ai `MCPToolset`, which connects through one of
|
|
248
|
+
fastmcp's HTTP transports — `StreamableHttpTransport`, or `SSETransport` when the
|
|
249
|
+
URL ends in `/sse`. Those transports special-case OAuth and pass any other auth
|
|
250
|
+
object straight through to their client, and their client is **`httpx2`**. An
|
|
251
|
+
`a2a` grant goes to a client loom builds itself, with **`httpx`**.
|
|
252
|
+
|
|
253
|
+
Each library accepts an auth object only when it is an instance of *its own*
|
|
254
|
+
`Auth` class, a two-tuple, or a callable. So an `httpx.Auth` subclass is refused
|
|
255
|
+
by the MCP transport's client, and an `httpx2.Auth` subclass by the A2A one.
|
|
256
|
+
**Loom adapts neither**, and publishes no recipe for a class that satisfies both
|
|
257
|
+
at once: nothing in its test suite would keep such a recipe honest.
|
|
258
|
+
|
|
259
|
+
| Grant | Client library | A class must subclass |
|
|
260
|
+
|---|---|---|
|
|
261
|
+
| `kind: mcp` | `httpx2`, reached through fastmcp's transport | `httpx2.Auth` |
|
|
262
|
+
| `kind: a2a` | `httpx`, in the client loom builds | `httpx.Auth` |
|
|
263
|
+
|
|
264
|
+
**A plain callable is the supported answer for both.** Each library wraps a
|
|
265
|
+
callable in a `FunctionAuth` of its own, so one function serves either transport
|
|
266
|
+
— and whatever flavour either library moves to next. It takes the outgoing
|
|
267
|
+
request, sets its headers, and **returns** it:
|
|
268
|
+
|
|
269
|
+
```python
|
|
270
|
+
def incident_api_key(*, key_ref: str):
|
|
271
|
+
"""Register this as a strategy: it returns the callable both clients wrap."""
|
|
272
|
+
|
|
273
|
+
def add_key(request):
|
|
274
|
+
request.headers["X-API-Key"] = key_ref
|
|
275
|
+
return request
|
|
276
|
+
|
|
277
|
+
return add_key
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Returning the request is not optional: the wrapper's flow is
|
|
281
|
+
`yield self._func(request)`, so a callable returning `None` sends `None`.
|
|
282
|
+
Nothing in the inner signature names a library, which is exactly the point — the
|
|
283
|
+
request it receives is of whichever flavour drove it. The two strategies loom
|
|
284
|
+
ships, `bearer` and `static`, are this shape.
|
|
285
|
+
|
|
286
|
+
A callable is a single-shot flow: it never sees the response, so it cannot
|
|
287
|
+
inspect a `401` or renew. A strategy that needs the response is a class.
|
|
288
|
+
|
|
190
289
|
### Writing your own
|
|
191
290
|
|
|
192
|
-
The contract is
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
291
|
+
The contract is the HTTP client's own
|
|
292
|
+
[`Auth`](https://www.python-httpx.org/advanced/authentication/), not an
|
|
293
|
+
abstraction of loom's — nobody has to learn one of ours, and an existing `Auth`
|
|
294
|
+
class works with no adapter, provided it is the flavour of the transport that
|
|
295
|
+
will use it (above). This example authenticates an MCP server, so it subclasses
|
|
296
|
+
`httpx2.Auth`; the identical class written for an A2A agent subclasses
|
|
297
|
+
`httpx.Auth`. Register it from **your own package**; loom does not change:
|
|
196
298
|
|
|
197
299
|
```toml
|
|
198
300
|
# pyproject.toml of your own distribution
|
|
@@ -204,10 +306,10 @@ A worked example — a server exposing a session endpoint, where the agent
|
|
|
204
306
|
presents a long-lived bootstrap secret and receives short-lived tokens:
|
|
205
307
|
|
|
206
308
|
```python
|
|
207
|
-
import
|
|
309
|
+
import httpx2 # the flavour the MCP transport's client uses
|
|
208
310
|
|
|
209
311
|
|
|
210
|
-
class AgentSessionAuth(
|
|
312
|
+
class AgentSessionAuth(httpx2.Auth):
|
|
211
313
|
"""Exchange a bootstrap secret for a token, renewed when rejected."""
|
|
212
314
|
|
|
213
315
|
def __init__(self, *, session_url: str, bootstrap_ref: str) -> None:
|
|
@@ -226,14 +328,22 @@ class AgentSessionAuth(httpx.Auth):
|
|
|
226
328
|
yield request
|
|
227
329
|
|
|
228
330
|
def _mint(self):
|
|
229
|
-
response = yield
|
|
331
|
+
response = yield httpx2.Request(
|
|
230
332
|
"POST", self._url, json={"secret_path": self._ref}
|
|
231
333
|
)
|
|
232
334
|
return response.json()["access_token"]
|
|
233
335
|
```
|
|
234
336
|
|
|
235
|
-
Retry-with-a-refreshed-credential is
|
|
236
|
-
not reimplement it.
|
|
337
|
+
Retry-with-a-refreshed-credential is the library's standard generator shape;
|
|
338
|
+
loom does not reimplement it.
|
|
339
|
+
|
|
340
|
+
```{warning}
|
|
341
|
+
`requires_response_body` is honoured by `Auth`'s **own** base flow, not by the
|
|
342
|
+
client. A strategy that overrides `async_auth_flow` — which any asynchronous
|
|
343
|
+
token exchange must — replaces the very code that reads the flag, and has to
|
|
344
|
+
`await response.aread()` itself before touching the body. Setting the attribute
|
|
345
|
+
and overriding the flow leaves the body unread, silently.
|
|
346
|
+
```
|
|
237
347
|
|
|
238
348
|
If you are designing such an endpoint: this is OAuth 2.0 `client_credentials`
|
|
239
349
|
by another name — `secret_path` is the client id and the bootstrap secret is the
|
|
@@ -256,11 +366,12 @@ server's read permissions to that prefix and log failed attempts per path.
|
|
|
256
366
|
|
|
257
367
|
The group is `loom.ai.remote_auth`, not `loom.ai.mcp_auth`: one registry serves
|
|
258
368
|
the MCP servers of `ai.mcp_servers` **and** the remote agents of `ai.a2a_agents`
|
|
259
|
-
(see [a2a.md](a2a.md)), because the contract is
|
|
260
|
-
protocol. A strategy is registered once and granted
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
369
|
+
(see [a2a.md](a2a.md)), because the contract is the HTTP client's and knows
|
|
370
|
+
neither protocol. A strategy returning a callable is registered once and granted
|
|
371
|
+
to either; one registered as a class is granted to the transports of its own
|
|
372
|
+
flavour. The one exception is `kind: oauth`, which delegates to the MCP client
|
|
373
|
+
library's own flow: an A2A agent naming it is refused with
|
|
374
|
+
`MCP_AUTH_STRATEGY_INVALID` rather than connected without a credential.
|
|
264
375
|
|
|
265
376
|
### One instance per server
|
|
266
377
|
|
|
@@ -270,6 +381,22 @@ renewing strategy holds the live token, so sharing means one renewal instead of
|
|
|
270
381
|
one per agent, and no burst of simultaneous logins when several agents start
|
|
271
382
|
together.
|
|
272
383
|
|
|
384
|
+
What is shared is what the strategy returned. A class instance is shared as
|
|
385
|
+
itself, so a strategy that must renew once, for everybody, stays a class and
|
|
386
|
+
keeps that identity. A callable is shared as itself too, but each client wraps
|
|
387
|
+
it in a `FunctionAuth` of its own, so two clients built from one credential no
|
|
388
|
+
longer hold the same `client.auth` object — they hold two wrappers around one
|
|
389
|
+
function. For a fixed header that is a distinction without a difference, and it
|
|
390
|
+
is the reason a stateful strategy is a class.
|
|
391
|
+
|
|
392
|
+
```{admonition} Public contract
|
|
393
|
+
:class: note
|
|
394
|
+
`shared_mcp_auth` and `shared_a2a_auth` are exported, and their return type has
|
|
395
|
+
widened from `httpx.Auth | str` to what a client accepts, which now includes a
|
|
396
|
+
callable. Code doing `isinstance(value, httpx.Auth)` on the result stops
|
|
397
|
+
matching for the built-in `bearer` and `static` strategies.
|
|
398
|
+
```
|
|
399
|
+
|
|
273
400
|
## The rule: your own tools are a `usecase` grant
|
|
274
401
|
|
|
275
402
|
Here is the decision that actually comes up, and the one this page exists for.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "loom-kernel"
|
|
3
|
-
version = "1.9.
|
|
3
|
+
version = "1.9.3"
|
|
4
4
|
description = "Loom Python project"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -362,7 +362,7 @@ markers = [
|
|
|
362
362
|
|
|
363
363
|
[tool.commitizen]
|
|
364
364
|
name = "cz_conventional_commits"
|
|
365
|
-
version = "1.9.
|
|
365
|
+
version = "1.9.3"
|
|
366
366
|
tag_format = "v$version"
|
|
367
367
|
version_files = [
|
|
368
368
|
"pyproject.toml:project.version",
|
|
@@ -33,6 +33,7 @@ from loom.ai.errors import (
|
|
|
33
33
|
mcp_url_invalid,
|
|
34
34
|
output_mode_unknown,
|
|
35
35
|
policy_out_of_range,
|
|
36
|
+
remote_clients_unknown,
|
|
36
37
|
)
|
|
37
38
|
from loom.ai.inference import OUTPUT_MODES, InferenceTarget
|
|
38
39
|
from loom.ai.remote_auth import is_strategy_registered, registered_strategy_names
|
|
@@ -55,6 +56,11 @@ _URL_USERINFO_RE = re.compile(r"://[^/]*@")
|
|
|
55
56
|
# key is that strategy's own setting.
|
|
56
57
|
_AUTH_KIND_KEY = "kind"
|
|
57
58
|
|
|
59
|
+
# Accepted values of ``ai.remote_clients``: whether a remote client that will
|
|
60
|
+
# not open aborts start-up (``required``) or is dropped with a warning
|
|
61
|
+
# (``optional``).
|
|
62
|
+
_REMOTE_CLIENTS_MODES: tuple[str, ...] = ("required", "optional")
|
|
63
|
+
|
|
58
64
|
# Bounds of a single remote call, mirroring ``policies.tool_timeout_ms``.
|
|
59
65
|
_TIMEOUT_MS_MIN = 1
|
|
60
66
|
_TIMEOUT_MS_MAX = 600000
|
|
@@ -299,6 +305,15 @@ class AiConfig(LoomFrozenStruct, frozen=True, kw_only=True):
|
|
|
299
305
|
startup_timeout_ms: Total budget of start-up: opening every live
|
|
300
306
|
client concurrently and validating the declared tool filters
|
|
301
307
|
share one deadline, whatever the number of servers.
|
|
308
|
+
remote_clients: Start-up tolerance for the MCP servers and A2A agents
|
|
309
|
+
the deployment connects to, ``required`` (the default) or
|
|
310
|
+
``optional``. Under ``optional`` a client that fails to *connect*
|
|
311
|
+
is logged and dropped instead of aborting start-up, so an
|
|
312
|
+
application can boot with no network. It tolerates nothing else:
|
|
313
|
+
a missing client factory is a wiring bug and stays fatal, a server
|
|
314
|
+
that did open and whose tool listing times out still fails
|
|
315
|
+
start-up, and no client becomes lazy — one that never opened is
|
|
316
|
+
not reconnected later.
|
|
302
317
|
max_concurrent_runs: Per-worker run limit (FR-033a).
|
|
303
318
|
max_prompt_bytes: Enforced while reading the request body.
|
|
304
319
|
health_cache_ttl_ms: Refresh period of the health probe.
|
|
@@ -307,8 +322,8 @@ class AiConfig(LoomFrozenStruct, frozen=True, kw_only=True):
|
|
|
307
322
|
AgentCompilationError: Aggregating one issue per invalid model binding
|
|
308
323
|
(incomplete provider settings, literal secret in
|
|
309
324
|
``credentials_ref``), per unsafe remote server or agent (bad URL,
|
|
310
|
-
inline credentials, out-of-range timeout)
|
|
311
|
-
a named ``auth
|
|
325
|
+
inline credentials, out-of-range timeout), per endpoint without
|
|
326
|
+
a named ``auth``, and for an unknown ``remote_clients`` mode.
|
|
312
327
|
"""
|
|
313
328
|
|
|
314
329
|
engine: str
|
|
@@ -320,6 +335,7 @@ class AiConfig(LoomFrozenStruct, frozen=True, kw_only=True):
|
|
|
320
335
|
a2a: A2AConfig | None = None
|
|
321
336
|
endpoints: dict[str, AgentEndpointConfig] = field(default_factory=dict)
|
|
322
337
|
startup_timeout_ms: int = 10000
|
|
338
|
+
remote_clients: str = "required"
|
|
323
339
|
max_concurrent_runs: int = 8
|
|
324
340
|
max_prompt_bytes: int = 65536
|
|
325
341
|
health_cache_ttl_ms: int = 5000
|
|
@@ -333,6 +349,8 @@ class AiConfig(LoomFrozenStruct, frozen=True, kw_only=True):
|
|
|
333
349
|
for name, endpoint in self.endpoints.items():
|
|
334
350
|
if not endpoint.auth.strip():
|
|
335
351
|
issues.append(endpoint_auth_missing(name))
|
|
352
|
+
if self.remote_clients not in _REMOTE_CLIENTS_MODES:
|
|
353
|
+
issues.append(remote_clients_unknown(self.remote_clients, _REMOTE_CLIENTS_MODES))
|
|
336
354
|
if issues:
|
|
337
355
|
raise AgentCompilationError(issues)
|
|
338
356
|
|
|
@@ -26,7 +26,7 @@ from __future__ import annotations
|
|
|
26
26
|
|
|
27
27
|
from collections.abc import AsyncIterator, Mapping
|
|
28
28
|
from contextlib import asynccontextmanager
|
|
29
|
-
from typing import TYPE_CHECKING, Any
|
|
29
|
+
from typing import TYPE_CHECKING, Any, cast
|
|
30
30
|
|
|
31
31
|
from loom.ai.compiler import CompiledMcpCapability
|
|
32
32
|
from loom.ai.errors import AgentCompilationError, provider_not_installed
|
|
@@ -101,7 +101,12 @@ def build_mcp_toolset(capability: CompiledMcpCapability) -> MCPToolset[Any]:
|
|
|
101
101
|
component = f"mcp server '{capability.server}'"
|
|
102
102
|
headers = headers_from_ref(component, capability.headers_ref) or None
|
|
103
103
|
auth = shared_mcp_auth(capability.server, capability.auth)
|
|
104
|
-
|
|
104
|
+
# ``MCPToolset`` annotates auth as ``httpx.Auth | Literal['oauth'] | str | None``,
|
|
105
|
+
# which admits no callable, while what really consumes it is fastmcp's HTTP
|
|
106
|
+
# transport: its ``_set_auth`` special-cases only ``"oauth"``, ``OAuth``, the
|
|
107
|
+
# OAuth providers and ``str``, and hands anything else to its ``httpx2`` client
|
|
108
|
+
# untouched — including the callable loom's own strategies return.
|
|
109
|
+
toolset: MCPToolset[Any] = MCPToolset(capability.url, headers=headers, auth=cast("Any", auth))
|
|
105
110
|
return toolset
|
|
106
111
|
|
|
107
112
|
|
|
@@ -106,6 +106,7 @@ class AgentErrorCode(StrEnum):
|
|
|
106
106
|
A2A_AGENT_UNREACHABLE = "A2A_AGENT_UNREACHABLE"
|
|
107
107
|
AGENT_SPECS_CONFLICT = "AGENT_SPECS_CONFLICT"
|
|
108
108
|
AGENT_SPECS_MISSING = "AGENT_SPECS_MISSING"
|
|
109
|
+
REMOTE_CLIENTS_UNKNOWN = "REMOTE_CLIENTS_UNKNOWN"
|
|
109
110
|
|
|
110
111
|
# Compatibility
|
|
111
112
|
SPEC_VERSION_DEPRECATED = "SPEC_VERSION_DEPRECATED"
|
|
@@ -871,6 +872,26 @@ def agent_specs_missing() -> AgentCompilationIssue:
|
|
|
871
872
|
)
|
|
872
873
|
|
|
873
874
|
|
|
875
|
+
def remote_clients_unknown(value: str, valid: Sequence[str]) -> AgentCompilationIssue:
|
|
876
|
+
"""The start-up tolerance of remote clients names no known mode.
|
|
877
|
+
|
|
878
|
+
Args:
|
|
879
|
+
value: The rejected value of ``ai.remote_clients``.
|
|
880
|
+
valid: The accepted modes, supplied by the caller so this module keeps
|
|
881
|
+
no knowledge of the configuration domain.
|
|
882
|
+
"""
|
|
883
|
+
accepted = ", ".join(f"'{mode}'" for mode in valid)
|
|
884
|
+
return AgentCompilationIssue(
|
|
885
|
+
code=AgentErrorCode.REMOTE_CLIENTS_UNKNOWN,
|
|
886
|
+
message=(
|
|
887
|
+
f"ai.remote_clients: '{value}' is not a known start-up mode for remote "
|
|
888
|
+
f"clients; accepted: {accepted}"
|
|
889
|
+
),
|
|
890
|
+
component="ai",
|
|
891
|
+
field="ai.remote_clients",
|
|
892
|
+
)
|
|
893
|
+
|
|
894
|
+
|
|
874
895
|
# ---------------------------------------------------------------------------
|
|
875
896
|
# Compatibility factories
|
|
876
897
|
# ---------------------------------------------------------------------------
|