# СГЕНЕРИРОВАНО из devcontour/tools/kits/template/importlinter.ini — не правь
# здесь. Правка идёт в шаблон, затем `python tools/kits/apply_template.py <кит>`.
#
# Заготовка контракта слоёв. Запуск: `uv run --with import-linter lint-imports`.
#
# Контракт ниже — минимум, который годится ЛЮБОМУ киту и не требует ручной
# настройки: «netkit не импортирует те киты экосистемы, которых нет в его
# объявленных зависимостях». Скрытая зависимость — это кит, который работает у
# автора (сосед стоит в venv) и разваливается у потребителя на первом импорте;
# именно так ломались pypi-publish и gemini-chat.
#
# Список forbidden_modules подставлен установщиком из реестра китов на момент
# установки: все известные пакеты китов МИНУС собственный МИНУС объявленные в
# pyproject зависимости. Появилась новая честная зависимость — объяви её в
# pyproject и переустанови шаблон, а не правь этот файл.
#
# Собственные контракты кита (layers/eager_forbidden/declared_dependencies,
# как у adapterkit) дописываются НИЖЕ отдельными секциями прямо в этом файле.
# Установщик сверяет файл целиком, поэтому `--check` после такой правки
# закономерно покажет расхождение с каноном — это ожидаемо и осознанно
# игнорируется в отчёте ревью, см. docs/kits/SAFETY-NET.md, «Что делать при
# расхождении» (п.2).

[importlinter]
# include_external_packages нужен: forbidden_modules перечисляет пакеты,
# внешние относительно root_packages.
include_external_packages = True
root_packages =
    netkit
exclude_type_checking_imports = True

[importlinter:contract:no-undeclared-kits]
name = netkit не импортирует киты, которых нет в его зависимостях
type = forbidden
source_modules =
    netkit
forbidden_modules =
    accountpoolkit
    adapterkit
    agentskit
    aichatkit
    authkit_client
    authkit_contracts
    authkit_server
    b24kit
    browserkit
    chatkit
    clientkit
    clikit
    emojikit
    gitkit
    installerkit
    iokit
    issuekit
    leasekit
    librarykit
    maxkit
    modelkit
    ormkit
    servicekit
    sessionkit
    skillkit
    socialkit
    storagekit
    telemetrykit
    totp_client
    worker_service

# --- Собственный контракт netkit (не из шаблона, см. docs/kits/SAFETY-NET.md
# «Что делать при расхождении», п.2): корень пакета (__init__.py, contract.py)
# должен оставаться свободным от тяжёлых вендоров — httpx/websockets/curl_cffi/
# stamina грузятся лениво внутри конкретных транспортов (netkit/transport/*),
# а не при простом ``import netkit``.
[importlinter:contract:netkit-root-no-vendors]
name = корень netkit не тянет вендоров
type = forbidden
# as_packages=False: проверяем ТОЛЬКО сами модули netkit/__init__.py и
# netkit/contract.py, а не всё поддерево (внутри транспортов httpx/curl_cffi —
# законные, там их законное место, см. netkit/transport/*).
as_packages = False
source_modules =
    netkit
    netkit.contract
forbidden_modules =
    httpx
    websockets
    curl_cffi
    stamina
