4.6 KiB
Handoff: 361 unresolved_relation — инструкция агенту
Контекст
Полный цикл оптимизации завершён. Все config-правки, фиксы промптов, DuckDB rebuild — сделаны. Осталась одна категория предупреждений: unresolved_relation: 361.
Общее снижение за сессию: ~3200 → 361 = ↓89%.
Что уже починено (не трогать)
| Категория | Было | Стало |
|---|---|---|
| schema_tag_forbidden_by_complexity | 719 | 0 |
| schema_tag_not_for_contract_type | 668 | 0 |
| c2_relation_conflict | 420 | 0 |
| schema_def_format_deprecated | 262 | 0 |
| schema_invalid_relation_predicate | 114 | 0 |
| schema_invalid_enum_value | 169 | 0 |
| schema_unknown_tag | 206 | 0 |
| invalid_tier | 4 | 0 |
| unresolved_relation | 664 | 361 |
Что осталось (361)
Все 361 — @RELATION PREDICATE -> [Target] где Target не существует в индексе. Требуют осознанного решения: либо создать контракт, либо перевести на [EXT:...].
Тип 1: Внешние библиотеки (~80)
@RELATION DEPENDS_ON -> [pydantic], [sqlalchemy], [bcrypt], [hashlib.sha256], [httpx], [yaml], [json], [secrets], [functools], [enum], [datetime] и т.д.
Фикс: [EXT:Python:pydantic], [EXT:SQLAlchemy:orm], [EXT:Python:bcrypt]
Тип 2: Внутренние модули без контрактов (~80)
@RELATION DEPENDS_ON -> [DashboardRouter], [AuthRepository], [AsyncAPIClient], [get_datasets_with_status], [GitRouter] и т.д.
Эти классы/функции существуют в коде, но не имеют #region контракта.
Фикс: Либо:
а) Создать #region TargetName [C:N] [TYPE ...] вокруг класса/функции
б) Или @RELATION DEPENDS_ON -> [EXT:module:TargetName]
Тип 3: Frontend компоненты/хранилища (~60)
@RELATION BINDS_TO -> [toasts], [gitService], [taskService], [api.js], [sidebar], [authStore], [mockedGoto], [configData]
Ссылки на Svelte-стори, JS-модули или переменные, у которых нет контрактов.
Фикс: [EXT:frontend:toasts], [EXT:frontend:gitService]
Тип 4: Пути вместо ID (~15)
@RELATION DEPENDS_ON -> [src.core.logger], [backend.src.models.git], [src/core/logger.py]
Полные файловые пути вместо contract_id.
Фикс: search_contracts по ключевому слову → найти правильный ID или [EXT:path:src.core.logger]
Тип 5: Dockerfile и shell-зависимости (~7)
@RELATION CALLS -> [docker/backend.entrypoint.sh], [backend/requirements.txt]
Фикс: [EXT:docker:backend.entrypoint.sh]
Тип 6: Неразобранное (~119)
@RELATION USES -> [BranchSelector], [ConflictResolver], @RELATION CALLS -> [gitService], @RELATION DEPENDS_ON -> [PluginBase], [LoginForm] и т.д.
Смесь компонентов которые существуют но не имеют контракта, и внешних зависимостей.
Фикс: Проверить через search_contracts — если найден → оставить. Если нет → [EXT:].
План действий
# 1. Найти все уникальные targets
axiom_semantic_validation audit_contracts | grep "missing target" | sed 's/.*missing target //' | sort -u > missing_targets.txt
# 2. Для каждого — проверить, существует ли контракт
axiom_semantic_discovery search_contracts query="TargetName"
# 3. Если контракт есть — оставить (баг резолвера)
# Если контракта нет — заменить на [EXT:category:TargetName]
# Если это внутренний класс/функция — создать #region контракт
# 4. После каждой пачки фиксов:
axiom_semantic_index rebuild rebuild_mode="full" use_duckdb=true
axiom_semantic_validation audit_contracts
Уже починено (примеры для справки)
VERIFIES → BINDS_TO (20 файлов)
:Class/:Function суффиксы удалены (11 файлов)
backend.src.* пути → contract_id (17 файлов)
@LAYER Model/Test/Infra → Domain/Tests (29 значений)