"""pytest 插件入口。它什么都不做,存在的理由全在这段话里。 `pyproject.toml` 的 `[project.entry-points.pytest11]` 指向这个模块。pytest 启动时会先扫一遍 所有声明了 `pytest11` 入口的发行包,把它们的每一个 `.py` 文件标记为**断言可重写**,然后才 加载插件本身。换回来的就是这个标记:契约模块不在下游的 `python_files` 匹配范围里,默认不被 重写,于是一条契约用例失败时下游看到的是光秃秃的 `AssertionError`——没有等号两边的值,没有 差异摘要。 **删掉这个模块不会有任何东西报错**,下游只会觉得这套契约的报错难读,而且永远不会知道自己 少了什么。这是一次纯静默的退化,所以它值得一个只有 docstring 的模块。 **这个模块只 import pytest 与标准库。** 不 import 任何存储实现、不 import `polyloop.session`、 不 import `polyloop.adapters`——最后一条尤其硬:`adapters` 会把网关连同它的 provider 目录一起 拉起来,而 pytest 自动加载插件是那条依赖规则的一条新触发路径。这条边界不靠自觉, import-linter 的分层契约与「除 testing 外一切禁止 import pytest」两条契约把它钉住。 **这里不接管事件循环**,理由见 `research-wiki/design/0014-contract-suite-distribution.md` 决策三末尾:下游的异步 fixture 在它自己的循环里创建,库另开一个循环会让那些 asyncio 对象 跨循环,而跨循环的对象炸得很难查。 """ import pytest def pytest_configure(config: pytest.Config) -> None: """空钩子。断言重写在 pytest 加载插件之前就按发行包做完了,这里没有要补的事。"""