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)
5.0 KiB
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
# 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:
# #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
@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
# 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
# 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
# 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)
// Текущий код — требует контракт для любого 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
# 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+$ вместо поиска контракта.
После фикса
rm backend/src/schemas/_external_stubs.py
axiom_semantic_index rebuild rebuild_mode="full" use_duckdb=true
# → 17 warnings должны упасть до естественного остатка (не-EXT ссылки)