Purpose

You follow Clean Architecture with concentric layers: entities → use_cases → interface_adapters → frameworks. Inner layers must not depend on outer layers.

Configuration

rules:
  - name: entities-isolation
    modules: my_app.entities
    allow:
      standard_library: [dataclasses, typing, abc, enum]
      third_party: []
      local: [my_app.entities]

  - name: use-cases
    modules: my_app.use_cases
    allow:
      standard_library: ["*"]
      third_party: []
      local:
        - my_app.use_cases
        - my_app.entities

  - name: interface-adapters
    modules: my_app.interface_adapters
    allow:
      standard_library: ["*"]
      third_party: [pydantic, sqlalchemy]
      local:
        - my_app.interface_adapters
        - my_app.use_cases
        - my_app.entities

  - name: frameworks
    modules: my_app.frameworks
    allow:
      standard_library: ["*"]
      third_party: ["*"]
      local:
        - my_app.frameworks
        - my_app.interface_adapters
        - my_app.use_cases
        - my_app.entities

Result

If my_app.entities.user imports pydantic:

my_app/entities/user.py:1
    [entities-isolation] my_app.entities.user → pydantic (third_party)

Found 1 violation(s).

If my_app.use_cases.create_user imports from my_app.interface_adapters:

my_app/use_cases/create_user.py:3
    [use-cases] my_app.use_cases.create_user → my_app.interface_adapters.repo (local)

Found 1 violation(s).