From f76d79a86d4c717d16019ebae4cc8315642402a1 Mon Sep 17 00:00:00 2001 From: zh Date: Wed, 30 Sep 2026 12:34:19 +0800 Subject: [PATCH] =?UTF-8?q?test(aps):=20=E7=94=A8=20AST=20=E5=AE=88?= =?UTF-8?q?=E5=8D=AB=E5=8D=A1=E4=BD=8F=20APS=20=E4=B8=8D=E5=BE=97=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=B9=B3=E5=8F=B0=E4=BB=A3=E7=A0=81=EF=BC=88B0=20?= =?UTF-8?q?=E9=AA=8C=E6=94=B6=E9=A1=B9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aps/tests/test_package.py | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/aps/tests/test_package.py b/aps/tests/test_package.py index 3cf2224..56b7e7d 100644 --- a/aps/tests/test_package.py +++ b/aps/tests/test_package.py @@ -1,10 +1,18 @@ -"""B0.1 冒烟:工具链与包结构可用(不测业务逻辑,业务逻辑随 B1 迁移进来)。""" +"""B0 冒烟:工具链与包结构可用(不测业务逻辑,业务逻辑随 B1 迁移进来)。""" +import ast import subprocess import sys +from pathlib import Path import pytest +ROOT = Path(__file__).resolve().parents[1] +SRC = ROOT / "src" / "aps" + +# 平台侧模块名与旧仓库里 APS 代码的模块名:出现即视为跨系统依赖(ADR-0010 边界规则) +PLATFORM_MODULES = {"server", "agent_core", "aps_domain", "aps_engines", "aps_state", "aps_importers"} + def test_package_imports() -> None: import aps @@ -20,6 +28,28 @@ def test_subpackages_import(name: str) -> None: assert module.__doc__, f"aps.{name} 缺少说明它负责什么的 docstring" +def test_no_platform_module_imports() -> None: + """边界规则(ADR-0010):APS 不得 import 平台代码,只允许走 HTTP 契约。 + + B3 会用 CI 卡住这条;这里先把它变成可执行规则,任何新增文件一旦越界立刻红。 + """ + offenders: list[str] = [] + for path in sorted(SRC.rglob("*.py")): + tree = ast.parse(path.read_text(encoding="utf-8"), filename=str(path)) + for node in ast.walk(tree): + if isinstance(node, ast.Import): + names = [alias.name for alias in node.names] + elif isinstance(node, ast.ImportFrom): + names = [node.module or ""] + else: + continue + for name in names: + if name.split(".")[0] in PLATFORM_MODULES: + offenders.append(f"{path.relative_to(ROOT)}: {name}") + + assert offenders == [], "APS 不得依赖平台代码:" + ";".join(offenders) + + def test_platform_code_is_not_imported() -> None: """APS 不依赖平台代码:aps 包内不得出现对平台模块的引用(ADR-0010)。""" result = subprocess.run(