"""硬约束 §1.1 零业务假设:库内不许出现下游的业务词汇。 三个下游的领域互不相交(公文审查、超声诊断、agent 自我进化实验),一个业务词进来就等于 替其中一个项目做了另外两个不需要的假设。这类假设很难删——它会长出配套的字段、分支和测试, 删的时候要一起动。 **这个文件只读源码文本,不执行被测代码。** 它仍然属于 unit,因为分层判据是「依赖什么」 (`CLAUDE.md` §1.9),而它不连任何外部服务。 **黑名单挡不住没被列出来的词。** 它拦得住最可能发生的那种——从下游搬代码时把词一起搬 过来;拦不住一个新造的业务词。真正守住这条的是评审,这里只是把最常见的入口堵上。 """ from pathlib import Path import pytest REPO_ROOT = Path(__file__).resolve().parents[2] PACKAGE_ROOT = REPO_ROOT / "src" / "polyloop" #: 词来自三个下游各自的领域。加词的时机是「从某个下游搬了一段代码进来」,那时把它领域里 #: 最扎眼的几个词补进来。 BANNED_TERMS = ( # GovDoc:公文审查 "公文", "审核点", "招标", "投标", "标书", "checkpoint_id", "tender", # CHSAnalyzer:超声诊断 "超声", "切面", "病灶", "ultrasound", # dissect:agent 自我进化实验 "实验轮次", "因子", "预注册", "benchmark", "rollout", "appworld", ) pytestmark = pytest.mark.unit def test_source_tree_is_scannable() -> None: """守卫自身的 fail-closed 检查:包目录必须存在且有 `.py` 文件。 没有这一条,包被改名或搬走之后这条断言会扫到空列表然后安静地绿,而绿的含义从 「没有业务词」变成了「没有检查」。 """ assert PACKAGE_ROOT.is_dir(), f"扫描目标不存在:{PACKAGE_ROOT}" assert list(PACKAGE_ROOT.rglob("*.py")), f"扫描目标里没有任何 .py 文件:{PACKAGE_ROOT}" def test_no_business_terms_in_source() -> None: """库源码(含 docstring 与注释)里不许出现下游业务词汇。""" violations: list[str] = [] for path in sorted(PACKAGE_ROOT.rglob("*.py")): text = path.read_text(encoding="utf-8").casefold() for term in BANNED_TERMS: if term.casefold() in text: violations.append(f"{path.relative_to(REPO_ROOT)}: {term}") assert violations == [], f"库内出现业务词汇:{violations}"