99 lines
4.6 KiB
Markdown
99 lines
4.6 KiB
Markdown
# 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 значений)
|
||
```
|