# .importlinter — машинная защита границ слоёв (волна 0, задача 4).
#
# Запуск:  uv run --with import-linter lint-imports
#
# browserkit — L1 (наравне с netkit): не знает про оркестраторы кита (librarykit,
# clikit), про пул аккаунтов и про продукты (gateway/bublictr). netkit —
# запрещён почти везде, единственная дверь — алиас модуля в antibot/curl_cffi.py
# (см. комментарий там же): транспорт подражания TLS-отпечатку — работа чисто
# сетевая, но исторически лежит рядом с антиботом. Второй контракт держит
# движки (playwright/patchright/camoufox/nodriver) вне корня пакета — тяжёлые
# вендоры грузятся лениво внутри browserkit.engines/browserkit.browser.

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

[importlinter:contract:browserkit-no-orchestrators]
name = browserkit не знает про оркестраторы и продукты
type = forbidden
source_modules =
    browserkit
forbidden_modules =
    librarykit
    clikit
    adapterkit
    accountpoolkit
    gateway
    bublictr

[importlinter:contract:browserkit-netkit-single-door]
name = browserkit не тянет netkit, кроме алиаса транспорта подражания
type = forbidden
# ignore_imports тут нарочно НЕТ: единственная дверь (browserkit/antibot/curl_cffi.py)
# делает алиас модуля через `sys.modules[__name__] = import_module(_HOME)` со строкой
# в переменной — статический анализ (grimp, AST) такой импорт в принципе не видит,
# добавлять на него ignore_imports было бы либо мёртвой записью (unmatched -> ошибка
# самого линтера), либо ложным чувством, что дверь проверена машиной. Дверь охраняет
# сам код алиаса (внятная ошибка при отсутствии netkit) и код-ревью, не этот контракт.
source_modules =
    browserkit
forbidden_modules =
    netkit

[importlinter:contract:browserkit-root-no-engines]
name = корень browserkit не тянет движки напрямую
type = forbidden
as_packages = False
# allow_indirect_imports=True переключает проверку на ПРЯМЫЕ импорты (см.
# ForbiddenContract._get_direct_chains) — иначе форбид ловит транзитивную цепочку
# через browserkit.browser (там движки — законное место, engines/capabilities лишь
# лениво зовут его по требованию), а не сам факт "верхний модуль тянет вендора".
allow_indirect_imports = True
source_modules =
    browserkit
    browserkit.capabilities
    browserkit.engines
forbidden_modules =
    playwright
    patchright
    camoufox
    nodriver
