# .importlinter — машинная защита границ слоёв (волна 0, задача 4).
#
# Запуск:  uv run --with import-linter lint-imports
#
# src-раскладка: root_packages=accountpoolkit резолвится через editable-install
# кита в его собственном .venv (src/accountpoolkit уже на sys.path через
# package metadata) — отдельный PYTHONPATH=src не понадобился, uv run уже
# активирует нужное окружение.
#
# accountpoolkit — пул аккаунтов (L2): не знает про продукты сверху; clikit —
# только через accountpoolkit.cli (CLI-обвязка кита, единственная дверь);
# adapterkit — только через accountpoolkit.ports.registry (DI-порт к реестру
# адаптеров, единственная дверь). Отдельный контракт держит домен/модель кита
# без ORM: sqlalchemy — только в repository/*, не в domain/model.

[importlinter]
include_external_packages = True
root_packages =
    accountpoolkit
exclude_type_checking_imports = True

[importlinter:contract:accountpoolkit-no-products]
name = accountpoolkit не знает про продукты сверху
type = forbidden
source_modules =
    accountpoolkit
forbidden_modules =
    gateway
    bublictr

[importlinter:contract:accountpoolkit-clikit-single-door]
name = clikit допустим только через accountpoolkit.cli
type = forbidden
source_modules =
    accountpoolkit
forbidden_modules =
    clikit
ignore_imports =
    accountpoolkit.cli -> clikit

[importlinter:contract:accountpoolkit-adapterkit-single-door]
name = adapterkit допустим только через accountpoolkit.ports.registry
type = forbidden
source_modules =
    accountpoolkit
forbidden_modules =
    adapterkit
ignore_imports =
    accountpoolkit.ports.registry -> adapterkit

[importlinter:contract:accountpoolkit-domain-no-orm]
name = домен и модель кита не знают про sqlalchemy
type = forbidden
source_modules =
    accountpoolkit.domain
    accountpoolkit.model
forbidden_modules =
    sqlalchemy
