v2.4.0
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).
Размер каждого навыка теперь под тестовым бюджетом: предел пакета
обнаруживается заранее, а не в момент, когда правку уже некуда положить.
Что перестанет проходить
- Запись следа
[qg applied: layer=code, scope=attribute-access, ...], написанная
руками. Проверкаattribute-accessстала инструментальной, и валидатор сверяет её
с журналом прогонов: и то, чтоtools/bsl-lint.mjsзапускался, и то, что он видел
весь состав правки. Раньше строка проходила без прогона по построению — у проверки
не было инструмента, и валидатор такие записи пропускал.
Что сделать: прогнатьnode "$QG/tools/bsl-lint.mjs" <изменённые .bsl>и перенести
напечатанную им строку дословно. bsl-lint.mjsтеперь возвращает код 2 на находкеqg:BSL-REF-DOT-ACCESS: в своде
это 🔴. Прежде инструмент отвечал кодом 2 только на ошибку вызова, а по находкам —
кодом 1. Семантика кодов не менялась.
Что сделать: обрабатывать код 2 как блокирующую находку, а не как отказ инструмента.- Переходное окно к пункту 1 не применяется намеренно: требование и механизм, который
его обслуживает, выходят одним релизом — предупреждать было не о чем, пока строку
не печатал никто.
Ломающие изменения
Нет. Схема .1c-quality-gate.json не менялась, файлы состояния лежат там же, имена
проверок и инструментов не переименовывались, область взвода гейта прежняя.
Миграция
Не требуется.
Закреплённая версия анализатора
0.2.66
Дополнительно
Правило qg:BSL-REF-DOT-ACCESS откалибровано замером на живом коде — 629 модулей
расширений, 20 485 строк. Первая редакция дала 379 находок, из которых 215 оказались
ложными: поиск засчитывался у любого приёмника (СписокЗначений.НайтиПоЗначению
возвращает элемент списка, ТабличнаяЧасть.НайтиПоИдентификатору — строку), а образец
искался в любом месте правой части, включая аргумент чужого вызова. После сужения
основания — 164 находки в 29 файлах из 629, оба класса ложных закрыты тестами.