Skip to content

v2.4.0

Choose a tag to compare

@github-actions github-actions released this 17 Aug 22:22
· 16 commits to main since this release

v2.4.0

Контуры
code: два новых инструментальных признака. qg:BSL-UNBOUNDED-STRING-COLUMN
строковая колонка без квалификатора длины у таблицы, уходящей в параметр
запроса: поле неограниченной длины движок не сравнивает (#std432 п. 3.1).
qg:BSL-REF-DOT-ACCESS — обращение к реквизиту ссылки через точку, объект
читается целиком ради одного поля (#std437). Ссылочность доказывается только
из кода: присваиванием в том же методе либо типом параметра из описания
#std453; сопоставления имён переменных с именами объектов конфигурации нет
и не будет. Признак AI-16 расширен с группировки на соединение и сравнение,
severity поднята до 🟠, добавлен контр-сигнал про обрезку значения
квалификатором. В разбор транзакции в обработчике вернулись два потерянных
имени: ПередУдалением и ОбработкаУдаленияПроведения.
arch: без изменений.
xml: без изменений.
hygiene: без изменений.
оркестратор: навык разрезан по границе «исполняемое остаётся, обосновывающее уходит»:
32 677 → 26 511 байт, обоснования в references/profile-axes.md и
references/run-environment.md. Добавлен блок инвариантов прогона — минимум,
без которого результат недействителен. То же сделано с контуром кода
(30 070 → 24 977 байт, references/analyzer-output.md и cold-reader.md).
Размер каждого навыка теперь под тестовым бюджетом: предел пакета
обнаруживается заранее, а не в момент, когда правку уже некуда положить.

Что перестанет проходить

  1. Запись следа [qg applied: layer=code, scope=attribute-access, ...], написанная
    руками. Проверка attribute-access стала инструментальной, и валидатор сверяет её
    с журналом прогонов: и то, что tools/bsl-lint.mjs запускался, и то, что он видел
    весь состав правки. Раньше строка проходила без прогона по построению — у проверки
    не было инструмента, и валидатор такие записи пропускал.
    Что сделать: прогнать node "$QG/tools/bsl-lint.mjs" <изменённые .bsl> и перенести
    напечатанную им строку дословно.
  2. bsl-lint.mjs теперь возвращает код 2 на находке qg:BSL-REF-DOT-ACCESS: в своде
    это 🔴. Прежде инструмент отвечал кодом 2 только на ошибку вызова, а по находкам —
    кодом 1. Семантика кодов не менялась.
    Что сделать: обрабатывать код 2 как блокирующую находку, а не как отказ инструмента.
  3. Переходное окно к пункту 1 не применяется намеренно: требование и механизм, который
    его обслуживает, выходят одним релизом — предупреждать было не о чем, пока строку
    не печатал никто.

Ломающие изменения
Нет. Схема .1c-quality-gate.json не менялась, файлы состояния лежат там же, имена
проверок и инструментов не переименовывались, область взвода гейта прежняя.

Миграция
Не требуется.

Закреплённая версия анализатора
0.2.66

Дополнительно
Правило qg:BSL-REF-DOT-ACCESS откалибровано замером на живом коде — 629 модулей
расширений, 20 485 строк. Первая редакция дала 379 находок, из которых 215 оказались
ложными: поиск засчитывался у любого приёмника (СписокЗначений.НайтиПоЗначению
возвращает элемент списка, ТабличнаяЧасть.НайтиПоИдентификатору — строку), а образец
искался в любом месте правой части, включая аргумент чужого вызова. После сужения
основания — 164 находки в 29 файлах из 629, оба класса ложных закрыты тестами.