Files
ss-tools/handoff-remaining-361.md
2026-05-26 09:30:41 +03:00

4.6 KiB
Raw Blame History

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 значений)