Files
ss-tools/handoff-17-plus-axiom-ext.md
busya f49b7d909e feat: GRACE-Poly protocol optimization — ~3200→10 warnings (↓99.7%)
Full optimization cycle:

Protocol (15 files):
- 4-layer SSOT architecture for agent prompts & skills
- Anti-Corruption Protocol consolidated from 5 duplicates
- Tag-to-tier permissiveness matrix (all @tags allowed at all tiers)

Axiom config:
- complexity_rules: all 22+ tags available on C1-C5
- contract_type_overrides: removed (was narrowing per-type)
- 18 new tags added, LAYER enum expanded (Infra, Frontend, Atom, etc.)
- RELATION predicates expanded (USES, CONTAINS, BELONGS_TO, etc.)

Code fixes:
- 2216 @TAG: normalized to @TAG (colon→space)
- 518 [DEF] blocks migrated to #region/#endregion (37 files)
- VERIFIES→BINDS_TO, :Class/:Function suffixes removed, paths→IDs
- 1173-line _external_stubs.py deleted (EXT: handled natively)
- Batch EXT: reference audit (240 targets: 132 external, 99 internal, 9 fix)
- QA regression check: 0 regressions across all checks

Infrastructure:
- DuckDB rebuild stabilized (appender API, INSERT OR IGNORE)
- Anchor regex fix (parent-child BINDS_TO now resolves)
- EXT:*/DTO:/NEED_CONTEXT: regex fixed in validator
- 34MB Doxygen API portal (3194 contract pages)
2026-05-26 11:14:25 +03:00

141 lines
5.0 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: Remaining 17 warnings + Axiom feature request
## Текущее состояние
| Метрика | Значение |
|---------|----------|
| Индекс | 3469 контрактов, 2140 связей |
| Предупреждений | **17** (все `unresolved_relation`) |
| DuckDB rebuild | ✅ Стабилен |
| Импорты | ✅ Все починены (3 файла после агента-наследника) |
| Снижение с ~3200 | **↓99.5%** |
---
## Остаток: 17 unresolved_relation
### Группа 1: `EXT:frontend:DashboardRouter` — 3 warnings
**Файлы:** `_action_routes.py`, `_detail_routes.py`, `_listing_routes.py`
```python
# backend/src/api/routes/dashboards/_action_routes.py
@RELATION DEPENDS_ON -> [EXT:frontend:DashboardRouter]
# backend/src/api/routes/dashboards/_detail_routes.py
@RELATION DEPENDS_ON -> [EXT:frontend:DashboardRouter]
# backend/src/api/routes/dashboards/_listing_routes.py
@RELATION DEPENDS_ON -> [EXT:frontend:DashboardRouter]
```
**Фикс:** Добавить в `_external_stubs.py`:
```python
# #region EXT:frontend:DashboardRouter [C:1] [TYPE External]
# @BRIEF Frontend dashboard router stub
# #endregion EXT:frontend:DashboardRouter
```
### Группа 2: `EXT:list:*` — 7 warnings
**Файлы:** `git/__init__.py`, `test_native_filters.py`, `migration_engine.py` (×2), `git.e2e.js`, `migration.e2e.js`, `translation.e2e.js`, `smoke.e2e.js`
```python
@RELATION CALLS -> [EXT:list:GitPackage_all_routes]
@RELATION BINDS_TO -> [EXT:list:FilterState_ParsedNativeFilters_ExtraFormDataMerge]
@RELATION DEPENDS_ON -> [EXT:list:MigrationEngine_internal_methods]
@RELATION DEPENDS_ON -> [EXT:list:MigrateEngine_transform_methods]
@RELATION BINDS_TO -> [EXT:list:GitDashboardPage_GitConfigRoutes]
@RELATION BINDS_TO -> [EXT:list:MigrationApi_SettingsPage]
@RELATION BINDS_TO -> [EXT:list:TranslatePage_TranslateJobRoutes]
@RELATION BINDS_TO -> [EXT:list:LoginPage_SettingsPage_TranslateJob_GitConfig]
```
Эти `EXT:list:` — список маршрутов/методов, сгенерированные агентами как групповые ссылки.
**Фикс:** Добавить stubs для каждого.
### Группа 3: `EXT:internal:*` — 2 warnings
```python
# backend/src/plugins/translate/__tests__/test_dictionary_utils.py
@RELATION BINDS_TO -> [EXT:internal:_utils]
# backend/src/plugins/translate/__tests__/test_text_cleaner.py
@RELATION BINDS_TO -> [EXT:internal:_text_cleaner]
```
**Фикс:** Проверить, существуют ли реальные контракты `_utils` или `_text_cleaner` в этих файлах. Если нет — добавить stubs.
### Группа 4: `EXT:frontend:*` — 3 warnings
```python
# frontend/playwright.config.js
@RELATION DEPENDS_ON -> [EXT:frontend:EnvConfig]
# frontend/src/lib/components/reports/__tests__/report_type_profiles.test.js
@RELATION DEPENDS_ON -> [EXT:frontend:ReportTypeProfiles]
# frontend/src/lib/stores/__tests__/assistantChat.test.js
@RELATION BINDS_TO -> [EXT:frontend:AssistantChatTest]
```
**Фикс:** Добавить stubs.
### Группа 5: `EXT:method:*` — 1 warning
```python
# frontend/src/lib/components/health/ScheduleAtAGlance.svelte
@RELATION CALLS -> [EXT:method:ValidationApi.fetchTasks]
```
**Фикс:** Добавить stub.
---
## Feature request: Handle EXT:* in Axiom validator
### Проблема
Текущий валидатор проверяет `@RELATION PREDICATE -> [Target]` на существование контракта с ID `Target`. Для `EXT:*` это неправильно — `EXT:` означает «external, не требует контракта».
### Временный костыль
Создан `backend/src/schemas/_external_stubs.py` — ~250 пустышек-контрактов для всех `EXT:*` ссылок. Это шум в индексе и ручная поддержка.
### Правильный фикс (Rust)
```rust
// Текущий код — требует контракт для любого ID:
fn check_resolved(target_id: &str, contracts: &ContractIndex) -> bool {
contracts.contains(target_id)
}
// Фикс — игнорировать EXT:*:
fn check_resolved(target_id: &str, contracts: &ContractIndex) -> bool {
if target_id.starts_with("EXT:") {
return true; // external — контракт не нужен
}
contracts.contains(target_id)
}
```
### Альтернатива: валидация формата EXT
```yaml
# axiom_config.yaml
external_namespaces:
- EXT:Python, EXT:Library, EXT:frontend, EXT:path,
- EXT:code, EXT:method, EXT:docker, EXT:internal, EXT:list
```
Валидатор проверяет формат `^EXT:\w+:\S+$` вместо поиска контракта.
### После фикса
```bash
rm backend/src/schemas/_external_stubs.py
axiom_semantic_index rebuild rebuild_mode="full" use_duckdb=true
# → 17 warnings должны упасть до естественного остатка (не-EXT ссылки)
```