# Временно перекрывает [tool.importlinter] в pyproject.toml, пока тот занят
# чужой незакоммиченной работой (см. `git status` — pyproject.toml трогать
# нельзя по указанию контроллера волны 0). import-linter ищет конфиг в
# порядке setup.cfg -> .importlinter -> pyproject.toml — этот файл найдётся
# первым и полностью заменит секцию [tool.importlinter] на время волны 0-4.
# TODO волна 5: вернуть контракты в pyproject.toml и удалить этот файл.
#
# Содержимое — точная копия контрактов из [tool.importlinter] pyproject.toml
# с ОДНОЙ правкой: из реестра "Реестр ленивых точек ЯДРА librarykit ->
# EXTENSIONS" убраны 3 битые записи ignore_imports, ссылавшиеся на пути,
# которых больше нет в установленном s-librarykit (0.7.34):
#   - librarykit.live_session -> librarykit.browser.state
#   - librarykit.ladder.minting -> librarykit.browser.minted_session
#   - librarykit.ephemeral -> librarykit.browser.launchers
# Причина у всех трёх одна: `librarykit/browser/` теперь содержит только
# `__init__.py` и `minted_session.py` — `state.py` и `launchers.py` переехали
# в `browserkit.browser.*` (проверено: файлы есть в site-packages
# browserkit, отсутствуют в librarykit). `librarykit.ladder` стал чистым
# алиасом пакета на `netkit.ladder` (`librarykit/ladder/__init__.py`
# делает `sys.modules[__name__] = alias_module(__name__, "netkit.ladder")`),
# файла `librarykit/ladder/minting.py` на диске больше нет вовсе. Эти три
# import-выражения либо не исполняются как реальный edge в графе grimp
# (модуль-цель не существует — target не резолвится), либо самого файла с
# такой строкой давно нет — `lint-imports` падал с `MissingImport: No
# matches for ignored import ...` на каждой из трёх строк (проверено
# локально, вывод приложен в отчёте). Значит, сам импорт, который они
# разрешали, либо переехал в другой кит (не в зоне контракта adapterkit —
# видимость только на корневые пакеты этого репозитория), либо исчез вовсе
# — записи удалены, а не переписаны на несуществующий путь.
# Оставшиеся в реестре записи `librarykit.factory -> librarykit.antibot` и
# `librarykit.factory -> librarykit.browser` РЕАЛЬНЫ и действующие — именно
# через них `live_session`/`minted_session` лениво добираются до
# browser/antibot (см. `librarykit/factory.py`), и без этих двух строк
# контракт был бы честно Broken на реальных цепочках импорта (проверено:
# без всех ignore-записей `lint-imports` находит цепочки
# `live_session -> factory -> antibot/browser` и
# `minted_session -> factory -> antibot/browser`).

[importlinter]
root_packages =
    corekit
    librarykit
    adapterkit
    clikit
exclude_type_checking_imports = true
contract_types =
    eager_forbidden: adapterkit.gates.contracts.EagerImportsContract
    declared_dependencies: adapterkit.gates.contracts.DeclaredDependenciesContract

# --------------------------------------------------------------------------- #
# 0. ОСНОВАНИЕ: corekit под всеми ветками
# --------------------------------------------------------------------------- #
[importlinter:contract:0a]
name = 0a. ОСНОВАНИЕ: corekit не импортирует НИ ОДНУ ветку
type = forbidden
source_modules =
    corekit
forbidden_modules =
    librarykit
    adapterkit
    clikit

[importlinter:contract:0b]
name = 0b. Над основанием: corekit <- librarykit
type = layers
layers =
    librarykit
    corekit

[importlinter:contract:0c]
name = 0c. Над основанием: corekit <- adapterkit
type = layers
layers =
    adapterkit
    corekit

[importlinter:contract:0d]
name = 0d. Над основанием: corekit <- clikit
type = layers
layers =
    clikit
    corekit

[importlinter:contract:0e]
name = 0e. ОСНОВАНИЕ не тянет EXTENSIONS ни лениво, ни жадно
type = forbidden
source_modules =
    corekit
forbidden_modules =
    librarykit.browser
    librarykit.antibot

# --------------------------------------------------------------------------- #
# 1. ФОРМА ГРАФА КИТОВ: не стопка, а ВИЛКА над общим ядром
# --------------------------------------------------------------------------- #
[importlinter:contract:1a]
name = 1a. clikit и adapterkit НЕЗАВИСИМЫ (параллельные ветки, не стопка)
type = independence
modules =
    clikit
    adapterkit

[importlinter:contract:1b]
name = 1b. Ветка над ядром: librarykit <- adapterkit
type = layers
layers =
    adapterkit
    librarykit

[importlinter:contract:1c]
name = 1c. Ветка над ядром: librarykit <- clikit
type = layers
layers =
    clikit
    librarykit

# --------------------------------------------------------------------------- #
# 2. adapterkit НЕ поднимает браузер/антибот В МОМЕНТ ИМПОРТА
# --------------------------------------------------------------------------- #
[importlinter:contract:2]
name = ЯДРО adapterkit не тянет EXTENSIONS на импорте (eager)
type = eager_forbidden
source_modules =
    adapterkit
forbidden_modules =
    librarykit.browser
    librarykit.antibot

# --------------------------------------------------------------------------- #
# 3. РЕЕСТР ленивых точек adapterkit -> EXTENSIONS
# --------------------------------------------------------------------------- #
[importlinter:contract:3]
name = Реестр ленивых точек adapterkit -> EXTENSIONS (новые не проскочат)
type = forbidden
source_modules =
    adapterkit
forbidden_modules =
    librarykit.browser
    librarykit.antibot
ignore_imports =
    adapterkit.browser -> librarykit.browser
    adapterkit.antibot -> librarykit.antibot

# --------------------------------------------------------------------------- #
# 4. ЯДРО librarykit не поднимает EXTENSIONS на импорте
# --------------------------------------------------------------------------- #
[importlinter:contract:4]
name = ЯДРО librarykit не тянет browser/antibot на импорте (eager)
type = eager_forbidden
source_modules =
    librarykit.contract
    librarykit.transport
    librarykit.limit
    librarykit.sessions
    librarykit.ladder
    librarykit.live_session
    librarykit.minted_session
    librarykit.factory
forbidden_modules =
    librarykit.browser
    librarykit.antibot

# --------------------------------------------------------------------------- #
# 5. РЕЕСТР ленивых точек ЯДРА librarykit -> EXTENSIONS
# --------------------------------------------------------------------------- #
[importlinter:contract:5]
name = Реестр ленивых точек ЯДРА librarykit -> EXTENSIONS (новые не проскочат)
type = forbidden
source_modules =
    librarykit.contract
    librarykit.transport
    librarykit.limit
    librarykit.sessions
    librarykit.ladder
    librarykit.live_session
    librarykit.minted_session
    librarykit.ephemeral
forbidden_modules =
    librarykit.browser
    librarykit.antibot
ignore_imports =
    librarykit.factory -> librarykit.antibot
    librarykit.factory -> librarykit.browser

# --------------------------------------------------------------------------- #
# 6. Нет скрытых зависимостей
# --------------------------------------------------------------------------- #
[importlinter:contract:6]
name = Нет скрытых зависимостей: импортируем только объявленное в pyproject
type = declared_dependencies
package = adapterkit
pyproject = pyproject.toml
