Skip to content

v1.17.0

Choose a tag to compare

@github-actions github-actions released this 04 Jun 13:30
· 8 commits to master since this release

Изменено

  • Чистка графа вызовов от голых зарезервированных платформенных глобалов (~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-only rlm_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