Skip to content

[V1 Purity] 重写架构门禁并消除相对导入绕过 #143

Description

@leecyang

问题

当前架构检查器未把相对导入解析为完整模块名,from ..store import ... 等写法可以绕过依赖规则;现有规则主要依赖少量禁止项,并存在目录或组合模块豁免,因而不能证明分层边界。

实施要求

  • 使用 importlib.util.resolve_name() 或等价方式,将所有相对导入解析为绝对模块名后再判定。
  • 建立明确的分层允许矩阵,而不是仅维护少量禁止词。
  • 删除 application.container 等目录级或组合模块级豁免;必要例外必须精确到文件和规则,并说明不可替代原因。
  • 强制以下依赖方向:domain -> 标准库、application -> domain + application.ports、adapters -> application.ports、bootstrap -> application + adapters。
  • 检查 application 不得引用 store、SQLAlchemy、FastAPI、httpx 或具体 LingxiGraph adapter。
  • 对 Python 生产包、测试 fixture 和组合入口执行一致的导入分析。
  • 为门禁自身增加正反例测试,确保相对导入、别名导入和常见动态模块路径不能绕过。

验收条件

  • 相对导入、绝对导入和别名导入得到一致判定。
  • 架构规则采用 allowlist/依赖矩阵,并覆盖全部生产包。
  • 不存在目录级豁免或可容纳任意依赖的组合模块。
  • 门禁测试包含应通过与应失败的最小 fixture。
  • 人为加入 application -> store 的相对导入时,CI 必然失败。
  • 门禁与 ARCHITECTURE.md 声明的目录和依赖方向完全一致。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions