Skip to content

feat(запросы): служебное слово языка запросов в псевдониме - #17

Open
Romandredan wants to merge 1 commit into
mainfrom
feat/qry-alias-reserved-word
Open

feat(запросы): служебное слово языка запросов в псевдониме#17
Romandredan wants to merge 1 commit into
mainfrom
feat/qry-alias-reserved-word

Conversation

@Romandredan

Copy link
Copy Markdown
Owner

Что добавляет

Правило qg:QRY-ALIAS-RESERVED-WORD в tools/query-lint.mjs: псевдоним, взятый служебным словом языка запросов (КАК Первые, ИЗ Х КАК Ссылка).

Такой запрос не выполняется вовсе — платформа отвергает его при разборе целиком. При этом текст собирается, статический анализ молчит, сборка расширения проходит: литерал остаётся литералом до первого выполнения. Ветка кода с таким запросом не работает ни разу с момента написания, и находит это не инструмент, а человек, однажды выполнивший запрос руками. Именно так прожил запрос в боевом контуре фискальных чеков.

Списки измерены, а не выведены из синтаксиса

Каждое из 66 кандидатов подставлялось псевдонимом в ВЫБРАТЬ ПЕРВЫЕ 1 <Т>.Ссылка КАК <поле> ИЗ Справочник.Валюты КАК <Т> на платформе 8.3.27, и запрос выполнялся:

  • 31 слово ломает запрос в обеих позициях;
  • Ссылка и Представление — только в позиции источника; в списке выборки (Заказы.Ссылка КАК Ссылка) они законны и встречаются повсеместно, поэтому правило различает позицию;
  • остальные 33 работаютИтоги, Объединить, Соединение, Сумма, Количество, Значение, Дата и другие. Список из синтаксиса дал бы шум: ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК Итоги стоит в типовом менеджере обмена через универсальный формат и выполняется.

Приведение типа псевдонимом не считается: ВЫРАЗИТЬ(Х КАК Документ.Заказ) и КАК Число(15,2) инструмент пропускает.

Калибровка

Ноль находок на 12 630 модулях типовой УТ 11.5 и на 14 расширениях проекта, при этом известное падение ловится.

Тесты

node tests/run-tests.mjs819 пройдено, 0 провалено; node tools/validate-package.mjs — 193 файла, 0 ошибок.

Новых проверок 11: воспроизводящий случай, псевдоним поля, различитель позиции и три контр-фикстуры (безопасные слова, Ссылка/Представление в списке выборки, приведение типа).

Тесты проверены мутациями, как требует CONTRIBUTING:

Поломка Итог набора
слово ПЕРВЫЕ убрано из списка 3 провала
у источника общий список вместо расширенного 2 провала
список источника применён к псевдониму поля 12 провалов

Отдельно замечу: первая редакция тестов проверяла out.includes('QRY-ALIAS-RESERVED-WORD') и была пустой — идентификатор печатается и в чистой записи следа. Заменено на вердикт и код возврата; мутации это и вскрыли.

Регистрация признака

tools/evidence-scopes.mjs (scope query-alias-reserved-word + идентификатор), README.md, skills/bsl-code-review/SKILL.md, references/bsl-query-reference.md (разбор с измеренными списками), references/checklist-code.md, agents/bsl-verifier.md.

🤖 Generated with Claude Code

Запрос с таким псевдонимом не выполняется вовсе, но собирается и проходит статический
анализ: литерал остаётся литералом до первого выполнения. Ветка кода не работает ни разу
с момента написания. В боевом контуре фискальных чеков так прожил запрос с псевдонимом
«Первые» - его нашёл человек, выполнивший запрос руками, а не инструменты.

Списки слов измерены на платформе 8.3.27, а не выведены из синтаксиса: каждое из 66 слов
подставлялось псевдонимом в «ВЫБРАТЬ ПЕРВЫЕ 1 <Т>.Ссылка КАК <поле> ИЗ Справочник.Валюты
КАК <Т>», и запрос выполнялся. Ломают 31 слово в обеих позициях; Ссылка и Представление -
только в позиции источника. Остальные 33, включая Итоги, Объединить, Соединение, Сумма,
Количество, Значение и Дата, псевдонимом работают: вывод из синтаксиса дал бы шум, и
«ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК Итоги» из типового менеджера обмена стало бы ложной находкой.

Калибровка: ноль находок на 12 630 модулях типовой УТ 11.5 и на 14 расширениях проекта,
при этом известное падение ловится.

Тесты: воспроизводящий случай, псевдоним поля, различитель позиции и три контр-фикстуры
(безопасные слова, Ссылка и Представление в списке выборки, приведение типа). Проверены
мутациями - слово вне списка, общий список у источника, список источника у поля: каждая
поломка роняет набор.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant