v1.17.0
Изменено
- Чистка графа вызовов от голых зарезервированных платформенных глобалов (~27% строк таблицы
calls). Экстрактор (_extract_calls_from_body) теперь отбрасывает голые (unqualified) обращения к зарезервированным глобалам платформы 1С (Сообщить,НСтр,Формат,НачатьТранзакцию,Новый Структура(и т.п.) — у них нет и не может быть метода-цели в коде конфигурации, поэтому они навечно оставались нерезолвленным балластом (callee_key IS NULL). Курируемый набор из 105 имён провалидирован оракулом против реальных индексов разных типов (несколько ERP, документооборот и БГУ-конфигураций): удаляется 27–28% всей таблицыcallsпри нуле потерянных реальных рёбер (removed_resolved == 0на всех проверенных конфигурациях). Граф для навигации не меняется (мы поисковик, не аудитор) —find_callers/find_call_hierarchyвозвращают те же рёбра; усыхает только нерелевантный шум → меньше БД, чище name-fallback.- Фильтр применяется только к голой ветке. Квалифицированные
Модуль.Метод(не трогаются — одноимённый экспорт общего модуля мог бы быть реальным (граница безопасности). - 6 имён-коллизий намеренно исключены из набора (в каком-то боевом конфиге это реальные пользовательские методы, разрешённые резолвером):
ЗакрытьФорму,ПолеКомпоновкиДанных,ТаблицаЗначений,УникальныйИдентификатор,Массив,Квартал(перекрыт реальным методом в одной из БГУ-конфигураций «бюджетный учёт»; фильтр на извлечении срабатывает до резолва — иначе потерял бы эти рёбра). Именно для отлова таких коллизий гейт прогоняется по конфигурациям разных доменов (ERP, документооборот, БГУ), а не только по ERP. BUILDER_VERSIONНЕ менялся — схема таблиц не тронута. Новые сборки чисты сразу (фильтр на извлечении). Существующие индексы чистятся разово, in-place при первомupdate(DELETEтолько поcallee_key IS NULL AND instr(callee_name,'.')=0 AND <голый глобал>, идемпотентно через флагindex_meta.calls_noise_cleaned; агрегатыcalls_total/calls_resolvedпересчитываются сразу после удаления).- Граница миграции: чистка срабатывает только на
rlm_index build/update(илиRLM_UPDATE_INDEX_ON_START=1). Read-onlyrlm_startиндекс не чистит — базы, которые никогда не апдейтят, сохранят старый шум до первого update/rebuild.
- Фильтр применяется только к голой ветке. Квалифицированные
Тесты
- Новый файл
tests/test_calls_noise_filter.py: исключение голых глобалов на извлечении, сохранность реального соседнего вызова, гард коллизииЗакрытьФорму(реальный метод → ребро цело и резолвится), неприкосновенность квалифицированной ветки (ОбщийМодуль.Формат), прямой гард курируемого набора (размер 105, отсутствие 6 коллизий, наличие опорных), идемпотентная in-place чистка legacy-индекса черезupdate()(отсутствиеСообщить, сохранность резолвленных рёбер поcallee_key IS NULL-гарду, флагcalls_noise_cleaned=1, совпадениеcalls_total/calls_resolvedс живымCOUNTпосле первого и второго update). Opt-in оракул на реальных клиентских индексах (RLM_VALIDATION_INDEXES+RLM_VALIDATION_INDEX_DIR, skip в CI): пер-базноremoved_resolved == 0и удаление в полосе 24–30%.
Полный список изменений: CHANGELOG.md