4b6817381b
Benchmark image — build + push to ECR (any adapter) / build + push (push) Waiting to run
CI / quality (ubuntu-latest) (push) Waiting to run
CI / test (tools-runtime) (push) Waiting to run
CI / test (e2e-general) (push) Waiting to run
CI / test (cli-runtime) (push) Waiting to run
CI / test (e2e-provider-and-openclaw) (push) Waiting to run
CI / test (integrations-and-misc) (push) Waiting to run
CI / coverage-report (push) Blocked by required conditions
CI / test-kubernetes (push) Waiting to run
CI / should-run-thorough (push) Waiting to run
CI / test-thorough (cloudwatch-demo) (push) Blocked by required conditions
CI / test-thorough (flink-ecs) (push) Blocked by required conditions
CI / test-thorough (upstream-lambda) (push) Blocked by required conditions
CI / test-thorough (prefect-ecs-fargate) (push) Blocked by required conditions
CodeQL / Analyze (python) (push) Waiting to run
Release / build-binaries (zip, opensre.exe, onefile, windows-latest, windows-x64) (push) Blocked by required conditions
Release / publish-release (push) Blocked by required conditions
Release / publish-main-release (push) Blocked by required conditions
Release / prepare (push) Waiting to run
Release / verify (push) Blocked by required conditions
Release / build-python-dist (push) Blocked by required conditions
Release / build-binaries (tar.gz, opensre, onedir, macos-15-intel, darwin-x64) (push) Blocked by required conditions
Release / build-binaries (tar.gz, opensre, onedir, macos-latest, darwin-arm64) (push) Blocked by required conditions
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04, linux-x64) (push) Blocked by required conditions
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04-arm, linux-arm64) (push) Blocked by required conditions
Synthetic Deterministic Tests / Synthetic offline (deterministic) (push) Waiting to run
Interactive Shell Live (PR + post-merge) / turn-checks (no-LLM) (push) Waiting to run
Interactive Shell Live (PR + post-merge) / turn-live shard ${{ matrix.shard_index }} (push) Waiting to run
CI (OpenClaw E2E) / openclaw test (push) Has been cancelled
56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
"""T-1 vendor-first layout invariant.
|
|
|
|
Every vendor integration must live in a package
|
|
(``integrations/<vendor>/`` with ``config``/``client``/``verifier``/``tools``
|
|
as needed), never as a flat ``integrations/<vendor>.py`` module. Only the
|
|
shared cross-cutting infra modules below are allowed to sit flat under
|
|
``integrations/``.
|
|
|
|
This guards the T-18 completion: a future PR that reintroduces a flat vendor
|
|
module (the pattern C-14/C-15/C-16 and this migration removed) fails here.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
INTEGRATIONS_DIR = Path(__file__).resolve().parents[2] / "integrations"
|
|
|
|
# Cross-cutting infra that is intentionally flat — NOT vendor integrations.
|
|
# `port.py` and `harness_adapters.py` are Ports & Adapters wiring, not SaaS
|
|
# vendors.
|
|
ALLOWED_FLAT_MODULES = frozenset(
|
|
{
|
|
"catalog.py",
|
|
"cli.py",
|
|
"config_models.py",
|
|
"daily_update.py",
|
|
"effective_models.py",
|
|
"harness_adapters.py",
|
|
"mcp_streamable_http_compat.py",
|
|
"messaging_security.py",
|
|
"models.py",
|
|
"port.py",
|
|
"probes.py",
|
|
"registry.py",
|
|
"selectors.py",
|
|
"store.py",
|
|
"verify.py",
|
|
}
|
|
)
|
|
|
|
|
|
def test_no_flat_vendor_modules() -> None:
|
|
flat = {
|
|
p.name
|
|
for p in INTEGRATIONS_DIR.glob("*.py")
|
|
if not p.name.startswith("_") # skip dunder + private infra helpers
|
|
}
|
|
stray = sorted(flat - ALLOWED_FLAT_MODULES)
|
|
assert not stray, (
|
|
"Flat vendor modules found under integrations/: "
|
|
f"{stray}. Move each into a vendor package "
|
|
"(integrations/<vendor>/ with config.py/client.py/verifier.py), "
|
|
"delete the flat module, and re-export from __init__.py (T-18)."
|
|
)
|