# Финальный аудит — 469 warnings (инструкция агенту) ## Сводка всей оптимизации | Метрика | Значение | |---------|----------| | Индекс | 3185 контрактов, 2149 связей, 690 файлов | | Было предупреждений | ~3200 | | Стало | **469** | | Снижение | **↓85%** | ## Динамика по этапам | Этап | Действие | Итого | |:----:|----------|:-----:| | Исходно | — | ~3200 | | 1 | Config: complexity_rules + contract_types + contract_type_overrides | 1419 | | 2 | Добавлены теги PARAM, RETURN, YIELDS, THROWS; LAYER Infra | 1190 | | 3 | Фикс @LAYER Infra→Infrastructure, предикаты USES/EXPORTS, AuthService | 1190 | | 4 | Нормализация @TAG: (2216 colon → space) | 1190 | | 5 | DEF→Region (518 блоков, 37 файлов), bracket-predicates, BELONGS_TO→BINDS_TO | 820 | | 6 | Переиндексация | 610 | | 7 | Config: TEST, DEBT, NOTE, PROPERTY, TYPEDEF, RETURNS, UI_STATE, Frontend | 532 | | 8 | Фикс :Module/:Function суффиксов (31 файл) | 532 | | 9 | **Обновление Axiom (DuckDB sync)** | **469** | ## Текущие 469 предупреждений — инструкция агенту по исправлению ### Ошибка A: `unresolved_relation: 390` — parent-child BINDS_TO (баг Axiom ресолвера) **❗ Это баг Rust-кода `axiom-mcp-server-rs`, не чинится правкой кода.** #### Пример (не починить — дождаться фикса Axiom) Файл: `backend/src/api/routes/__tests__/test_datasets.py` ``` #region DatasetsApiTests [TYPE Module] [C:3] [SEMANTICS test, dataset, api] ... #region test_get_datasets_success [TYPE Function] @RELATION BINDS_TO -> [DatasetsApiTests] ← unresolved (но родитель В ТОМ ЖЕ ФАЙЛЕ!) #endregion #region test_get_datasets_env_not_found [TYPE Function] @RELATION BINDS_TO -> [DatasetsApiTests] ← unresolved #endregion ... #endregion DatasetsApiTests ``` Родитель `DatasetsApiTests` существует (строка 1), `read_outline` видит его, `search_contracts` — НЕТ. Resolver не регистрирует parent до резолва детей. **Затронутые файлы** (одинаковый паттерн): ``` backend/src/api/routes/__tests__/test_datasets.py backend/src/api/routes/__tests__/test_dashboards.py backend/src/api/routes/__tests__/test_assistant_api.py backend/src/api/routes/__tests__/test_assistant_authz.py backend/src/api/routes/__tests__/test_clean_release_api.py backend/src/api/routes/__tests__/test_clean_release_legacy_compat.py backend/src/api/routes/__tests__/test_clean_release_source_policy.py backend/src/api/routes/__tests__/test_clean_release_v2_api.py backend/src/api/routes/__tests__/test_clean_release_v2_release_api.py backend/src/api/routes/__tests__/test_tasks_logs.py backend/tests/core/test_defensive_guards.py backend/tests/test_migration_engine.py backend/tests/services/clean_release/test_approval_service.py backend/tests/services/clean_release/test_candidate_manifest_services.py ``` **Что делать агенту с этими 350 предупреждениями:** НИЧЕГО. Ждать фикса `axiom-mcp-server-rs`. --- ### Ошибка B: `unresolved_relation: ~40` — реальные битые ссылки (починить кодом) #### Пример B1: ссылка на переменную, не на контракт Файл: `backend/src/api/routes/assistant/_admin_routes.py` ```python # ❌ Сейчас: # @RELATION DEPENDS_ON -> [CONVERSATIONS] # ✅ Должно быть: # Удалить строку — CONVERSATIONS это словарь в памяти, не контракт ``` **Как найти:** `grep -rn '@RELATION.*-> \[CONVERSATIONS\]' --include='*.py' .` #### Пример B2: ссылка на функцию без #region Файл: `backend/src/api/auth.py` ```python # ❌ Сейчас: # @RELATION DEPENDS_ON -> [log_security_event] # ✅ Должно быть: # @RELATION DEPENDS_ON -> [EXT:ss-tools:log_security_event] # (функция есть в коде, но нет контракта) ``` **Как найти:** `axiom_semantic_discovery search_contracts query="log_security_event"` — если не найдено, это не контракт. #### Пример B3: полный путь вместо ID ```python # ❌ Сейчас: # @RELATION DEPENDS_ON -> [backend.src.models.report] # ✅ Должно быть: # @RELATION DEPENDS_ON -> [ReportModels] # (найти настоящее ID контракта через search_contracts) ``` --- ### Ошибка C: `schema_unknown_tag: 19` — теги не в TagSchema (починить конфигом) **Что это:** В коде используются `@ТЕГ`, которого нет в `axiom_config.yaml → tags:`. #### Список неизвестных тегов | Тег | Где встречается | Фикс | |-----|----------------|------| | `@TEST_DATA` | test файлы | Добавить в `axiom_config.yaml`: тестовая фикстура | | `@CONSTRAINT` | model файлы | Добавить или заменить на `@INVARIANT` | | `@CONTRACT` | model файлы | `@RELATION DEPENDS_ON` | | `@CRITICAL_TRACE` | core/logging | Добавить | | `@FRAGILE` | код | Добавить (хрупкий тест/код) | | `@INVARIANT_VIOLATION` | тесты | Добавить | | `@THROW` | код | Уже есть `@ERROR`, можно алиас | | `@UX_REATIVITY` | svelte | Опечатка! Должно быть `@UX_REACTIVITY` | | `@VALIDATION` | код | Заменить на `@INVARIANT` | | `@DEBT` | код | ✅ уже добавлен (возможно DuckDB не догнал) | #### Как добавить тег в конфиг В `.axiom/axiom_config.yaml`, в раздел `tags:` (перед `# #endregion TagSchema`): ```yaml TEST_DATA: type: string multiline: false description: 'Тестовая фикстура или данные. Универсально опциональный.' contract_types: [] protected: false orthogonal: true decision_memory: false CONSTRAINT: type: string multiline: true alias_for: INVARIANT description: 'Алиас для INVARIANT. Универсально опциональный.' contract_types: [] protected: false orthogonal: true decision_memory: false ``` #### Как проверить после добавления ```bash axiom_semantic_index rebuild rebuild_mode="full" axiom_semantic_validation audit_contracts ``` --- ### Ошибка D: `schema_invalid_enum_value: 60` — невалидное значение enum **Что это:** Тег имеет ограничение `enum:` в конфиге, но в коде написано другое значение. #### Пример D1: @LAYER с нестандартным значением Файл: `frontend/src/lib/components/...` ```javascript // ❌ Сейчас: // @LAYER: Atom // @LAYER: Feature // @LAYER: Page // ✅ Должно быть: // @LAYER UI // Эти компоненты — часть UI слоя ``` LAYER enum сейчас: `[Core, Domain, API, UI, Service, Infrastructure, Plugin, Tests, Infra, UI (Tests), Frontend]` Не в enum: `Atom`, `Feature`, `Page`, `Component`, `Application`, `App`, `Widget`, `Panel` **Фикс:** Или расширить enum, или исправить значение в коде. #### Пример D2: @TYPE с произвольным значением ```javascript // ❌ Сейчас: // @TYPE: {{ healthItems: Array<...> }} // Значение — TypeScript тип, не enum // ✅ Должно быть: // Удалить @TYPE — это не тег, а TS тип ``` #### Как найти все проблемные значения ```bash axiom_semantic_validation audit_contracts | grep invalid_enum_value | head -20 ``` --- ## План агенту по уменьшению 469 → ~0 | Шаг | Что делать | Инструмент | Ожидаемый результат | |:---:|-----------|-----------|:-------------------:| | 1 | Добавить 19 неизвестных тегов в `axiom_config.yaml` | `edit` → `rebuild` | unknown_tag: 19 → 0 | | 2 | Исправить `@UX_REATIVITY` → `@UX_REACTIVITY` в svelte-файлах | `sed` | −1 unknown_tag | | 3 | Исправить 60 invalid_enum: расширить LAYER enum или исправить в коде | `edit` конфига + `sed` по коду | invalid_enum: 60 → 0 | | 4 | Удалить ~40 битых @RELATION (CONVERSATIONS, CONFIRMATIONS и др.) | `edit` кода | unresolved: 390 → 350 | | 5 | Ждать фикса Axiom ресолвера (parent-child BINDS_TO) | — | unresolved: 350 → 0 | ## Что было сделано за сессию | Область | Изменения | |---------|-----------| | Промпты агентов | 15 файлов: SSOT-архитектура, устранено дублирование tier/синтаксиса/anti-corruption | | Конфиг Axiom | 26 тегов в complexity_rules, 12 тегов universal (contract_types: []), удалён contract_type_overrides | | Код | Нормализовано 2216 @TAG: → @TAG, 518 DEF→Region, 31 файл :Module/:Function суффиксы | | Теги Axiom | Добавлены: PARAM, RETURN, YIELDS, THROWS, TEST, DEBT, NOTE, PROPERTY, TYPEDEF, RESTRICTION, RETURNS, UI_STATE, UX_TEST, TYPE | | Enum LAYER | Добавлены: Infra, UI (Tests), Frontend | | Предикаты RELATION | Добавлены: USES, CONTAINS, BELONGS_TO, ASSOCIATED_WITH |