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

99 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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:]`.
## План действий
```bash
# 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 значений)
```