Skip to content

docs(plan): совместимость с прикладным кодом 1С — измеренная граница (#1479) - #1499

Open
ivanarama wants to merge 5 commits into
mainfrom
docs/plan-179-onec-code-compat
Open

ivanarama wants to merge 5 commits into
mainfrom
docs/plan-179-onec-code-compat

Conversation

@ivanarama

@ivanarama ivanarama commented Sep 13, 2026

Copy link
Copy Markdown
Owner

План 179 по заявке #1479 задаёт порядок проверки и расширения совместимости с прикладным кодом 1С: замер выгрузки, матрица контрактов, нативные помощники, уточнение локализации, конверсия подтверждённых расхождений и отдельный разбор подсистем.

Частоты взяты из ручных замеров автора на УТ 10.3 и УТ 11.5.25.80 с БСП. Исходные выгрузки и скрипт подсчёта в PR не приложены; их воспроизведение входит в первый срез. Четыре модуля-утилиты дают 53 245 из 85 410 вызовов, то есть 62,3 %; остальные — 37,7 %.

  • Совпадения с W040 отделены от подтверждённых несовместимостей. 84 565 упоминаний НСтр и СтрШаблон задают объём проверки, а не число непокрытых вызовов: обе функции уже работают.
  • Срез локализации описывает конкретные ограничения разбора строк и подстановки параметров, рабочие примеры и критерии сравнения с выбранной версией 1С.
  • Конвертер должен сохранять ВызватьИсключение, поддерживаемые конструкторы коллекций и Новый Запрос. ТаблицаЗначений уже имеет колонки, итоги и свёртку; ограничения размерности массива, API колонок и отдельных методов перечислены отдельно.
  • Матрица включает статус «поддерживается без изменений». Тесты будущих правил проверяют результат исполнения, включая исключения. Индекс планов и предварительная оценка до ~17 дней согласованы с этим объёмом.

Вариант: 1 (метка decision:1)

Изменены только Plans/179-onec-code-compat.md и Plans/README.md.

Проверки: go build ./...; go run ./tools/plannum — 154 плана, номера уникальны; go test -count=1 ./tools/plannum ./internal/pipelinecontract ./internal/onec_forms; выбранные тесты NStr, VT, Query, ВызватьИсключение в internal/dsl/interpreter; TestPageNStr_DefaultsToRequestLanguage в internal/ui; 15 проверок через публичный onebase eval; git diff --check.

Plan-Issue: #1479
Plan-Path: Plans/179-onec-code-compat.md

План 179 по заявке #1479. Замер сделан на боевой корпоративной конфигурации:
1 694 064 строки BSL в 3 119 модулях.

Результат меняет постановку задачи. БСП в этой конфигурации фактически нет:
клиентский модуль библиотеки вызывается 3 раза, а модуль с именем
ОбщегоНазначения — самописный, 134 собственные процедуры, сигнатурных функций
БСП в нём нет вовсе. Поставка БСП заменила бы здесь ноль строк.

Масса кода лежит в своём прикладном коде: документы 25,6%, общие модули 24,2%,
обработки 23,8%, отчёты 16,9%. Крупнейшие общие модули — собственные.

Перенос блокируют 42 752 вхождения конструкций из списка W040, разложенные по
природе: механический перенос 41,1%, методы менеджеров 33,2%, свой общий модуль
13,9%, пробелы платформы 11,8%. Ни одно не устраняется поставкой БСП.

Отсюда пять срезов, и первый — не код платформы, а инструмент замера:
одна конфигурация не выборка, и следующая должна считаться за минуты.

Generated-with: Claude Code
ivanarama added 2 commits September 13, 2026 20:46
Замер сделан на «Управлении Торговлей» 10.3.16.1 — поколение 8.1/8.2,
написанное до появления БСП. Отсутствие БСП в такой конфигурации объясняется
её возрастом, а не бесполезностью библиотеки, поэтому прежний вывод «поставка
БСП не даст ничего» был выводом из смещённой выборки.

План теперь разделяет два вопроса: на что замер отвечает (цена переноса
большой боевой конфигурации и что именно в ней мешает) и на что не отвечает
(сколько кода снимает БСП — вопрос остаётся открытым).

Условие ужесточено: до начала срезов 3–5 обязателен замер минимум на одной
конфигурации, построенной на БСП. Отказ включать БСП в состав OneBase
обоснован лицензией, а не замером.

Generated-with: Claude Code
Появилась выгрузка «Управление Торговлей» 11.5.25.80 с настоящей БСП —
70 подсистем библиотеки, 557 её общих модулей, 7 453 816 строк BSL.
Это закрывает вопрос, который прошлый замер на до-БСП конфигурации закрыть
не мог.

Автор заявки прав по сути: в современной конфигурации БСП присутствует
плотно — 15,1% строк, 85 410 вызовов из прикладного кода.

Но зависимость крайне сконцентрирована, и это меняет вывод. Задействованы
202 модуля из 557, 48% употребляемых методов зовутся один-два раза, а
62,8% всех обращений уходят в четыре модуля-утилиты. Двадцать функций дают
47,2% всех вызовов БСП. Даже тяжёлые подсистемы видны прикладному коду
через считаные точки входа: ПодключаемыеКоманды — 6 101 вызов через
9 функций.

Отсюда срезы: слой помощников вместо поставки библиотеки, отдельно
локализация (НСтр 73 127 вхождений — блокировщик номер один, больше любой
подсистемы), отдельно механическая конверсия, подсистемы разбираются по
одной по частоте.

Generated-with: Claude Code
@ivanarama

Copy link
Copy Markdown
Owner Author

Ревью. (круг 1)
Reviewed-SHA: bf45e8b
Outcome-Label: changes-requested
Что меняется: Plan-PR по #1479 добавляет Plans/179-onec-code-compat.md и строку в Plans/README.md: измерения зависимости от БСП, migrate-scan, матрица совместимости и шесть срезов работ; код движка не изменён.
Проверено: Проверен полный diff и точный HEAD bf45e8b в отдельном detached worktree; base/merge-base 714341c; изменены только два файла Plans/; Сверены заявка #1479, выбранный вариант 1, ссылки плана и единственная запись в индексе; git diff --check прошёл; go run ./tools/plannum: 154 плана, номера уникальны; go build ./... прошёл на go1.26.6 darwin/amd64; go test -count=1 ./tools/plannum ./internal/pipelinecontract ./internal/onec_forms ./internal/dsl/interpreter: первые три пакета прошли; в interpreter упали только TestTempFileNameRejectsPathSyntaxAndUsesRandomToken и TestDSL_ВременныйФайл_ИмяУникальноИЛежитВКаталоге; Оба падения воспроизведены отдельным контрольным прогоном на неизменённом base 714341c в той же среде; причина — прямое сравнение filepath.Dir(path) с os.TempDir(), содержащим завершающий / в TMPDIR macOS; повтор только этих двух тестов на HEAD с нормализованным TMPDIR прошёл; go vet ./tools/plannum ./internal/pipelinecontract ./internal/onec_forms ./internal/dsl/interpreter прошёл; go test -count=1 -v -run '^TestPageNStr_DefaultsToRequestLanguage$' ./internal/ui прошёл: НСтр без явного языка использует язык HTTP-запроса; Через go run ./cmd/onebase eval --project examples/trade --json подтверждены НСтр(..., "en") → Hello, СтрШаблон(...) → Hello, Ada!, Новый ТаблицаЗначений с Колонки/Свернуть/Итог → 1:350; исходный ВызватьИсключение "boom" попадает в обработчик и возвращает boom, замена на ВыброситьИсключение "boom" возвращает null без возбуждения исключения; Все обязательные CI точного HEAD успешны: build, lint, postgres-integration, vuln, smoke, e2e, test-windows, launcher-webview-build; bench красный и не является обязательным; Проверена арифметика опубликованных агрегатов; исходные выгрузки УТ и скрипт ручного замера в diff отсутствуют, первичные частоты независимо не пересчитывались; полный go test ./... не запускался.
Блокирующее: 1) [P1] Plans/179-onec-code-compat.md:106–107,177–181: утверждение «в OneBase аналога НСтр нет вовсе» и срез реализации локализации с нуля противоречат проверяемому HEAD. НСтр зарегистрирована в internal/dsl/interpreter/builtins_stage_a.go:36, NewNStrFunc уже выбирает язык и обрабатывает отсутствие перевода; СтрШаблон зарегистрирована в builtins_init.go:138. Публичные CLI-прогоны и TestPageNStr_DefaultsToRequestLanguage подтверждают исполнение. Нельзя считать все 84 565 упоминаний этих функций непокрытыми блокировщиками. Исправить описание текущего состояния, отделить частоту конструкций от реально неподдерживаемых случаев и перепланировать срез 4 по конкретным расхождениям семантики; 2) [P1] Plans/179-onec-code-compat.md:185–186: правило ВызватьИсключение → ВыброситьИсключение ломает работающий код. Парсер поддерживает ВызватьИсключение/Raise (internal/dsl/parser/parser.go:424), а предложенного имени среди операторов/встроенных функций нет. Через onebase eval исходный фрагмент «Попытка; ВызватьИсключение "boom"; Исключение; Возврат ОписаниеОшибки(); КонецПопытки» возвращает boom, после буквальной замены — null: исключение молча перестаёт возбуждаться. Удалить неверное правило и сохранять уже поддерживаемый оператор; 3) [P2] Plans/179-onec-code-compat.md:185–192: срез механической конверсии ошибочно описывает текущие коллекции. evalNew в internal/dsl/interpreter/interpreter.go:655–662 уже принимает Новый Массив/Соответствие/Структура/ТаблицаЗначений; ValueTable — отдельный тип с Колонки, Итог и Свернуть (internal/dsl/interpreter/valuetable.go), а не требующая замены таблица на массив структур. Сквозной CLI-пример с двумя строками успешно сворачивает их в одну с итогом 350. В плане нужно перечислить конкретные несовместимые методы/сигнатуры и сохранять работающие конструкции, а не назначать им общую замену; аналогично Новый Запрос уже используется в сквозных query_test.go; 4) [P2] Plans/179-onec-code-compat.md:57–60: четыре приведённые частоты суммируются в 53 245 (27 016 + 13 758 + 7 306 + 5 165), то есть 62,3406 % от 85 410, округлённо 62,3 %, а остаток — 37,7 %. Заявленные 62,8 %/37,2 % не получаются из этих данных. Эта же доля обосновывает объём и оценку среза 3. Сверить первичный замер и согласованно исправить частоты либо процент во всех повторах.
Хвост:

  1. [заявка] Существующий bslIncompatPatterns в internal/onec_forms/module_bsl.go безусловно считает НСтр, СтрШаблон и поддерживаемые конструкторы несовместимостями, а для ВызватьИсключение рекомендует несуществующее ВыброситьИсключение. Это дефект исходного сканера, не внесённый plan-PR. Сверить предупреждения с фактическим публичным DSL, оставить конкретные ограничения вместо утверждений об отсутствии и добавить проверки через публичный импорт/исполнение, чтобы список вновь не разошёлся с рантаймом. В плане уже сейчас нужно исправить основанные на этом списке фактические выводы → заголовок: «fix(onec_forms): актуализировать W040 для уже поддерживаемых конструкций DSL»
  2. [заявка] На macOS с TMPDIR, оканчивающимся на /, TestTempFileNameRejectsPathSyntaxAndUsesRandomToken (builtins_env_internal_test.go:55) и TestDSL_ВременныйФайл_ИмяУникальноИЛежитВКаталоге (builtins_env_test.go:46) сравнивают очищенный filepath.Dir(path) с неочищенным os.TempDir() и ложно падают. Оба падения воспроизведены на HEAD и неизменённом base 714341c; удаление завершающего / из TMPDIR устраняет их. Нормализовать ожидаемый путь в тестах и закрепить случай завершающего разделителя → заголовок: «test(dsl): нормализовать временный каталог в проверках имён файлов»
  3. [выброс] Необязательный bench: Save_PostDocument-4 показал +55,88 % при разбросе ±37 % (CI run 34777681062). В diff нет изменений кода, зависимостей или benchmark/CI; все обязательные проверки зелёные. Не считать этот результат регрессией данного plan-PR и не менять CI в рамках ревью
    Вердикт: есть замечания.

@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: REVIEW result publication claimed.

@ivanarama ivanarama added the changes-requested Ревью: есть замечания — фиксер дорабатывает label Sep 17, 2026
@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: REVIEW result committed.

Отделить частоты W040 от реальных несовместимостей, сохранить работающие
операторы и коллекции, уточнить срез локализации по проверенным примерам.
Пересчитать долю четырёх модулей по опубликованным частотам: 62,3 %.

Generated-with: Codex
PP-Fix-Transition: from=bf45e8b28758b5bfdaa4392146969c4113d614e7 review-comment=5708576111 claim=5708576741 epoch-sha256=e96348e5d96fad1ce5b0b74ec70272a4194b318e596443618b843184a50ed6a7
@ivanarama

Copy link
Copy Markdown
Owner Author

Исправлены четыре блокирующих замечания ревью в коммите 375757a.

  1. План теперь учитывает существующие НСтр и СтрШаблон. Частоты W040 отделены от реальных несовместимостей; срез 4 описывает проверенные ограничения обработки ; внутри перевода и повторной подстановки параметров, рабочие примеры и сравнение с выбранной версией 1С.
  2. Удалено правило замены ВызватьИсключение на несуществующий оператор. План требует сохранять рабочий оператор и проверять результат исполнения после конвертации.
  3. Сохранены поддерживаемые конструкторы коллекций и Новый Запрос. ТаблицаЗначений описана как отдельный тип с колонками, итогами и свёрткой; конкретные ограничения размерности массива, API колонок, Скопировать и Индексы перечислены отдельно.
  4. Доля четырёх модулей исправлена во всех повторах: 53 245 / 85 410 = 62,3 %, остаток — 37,7 %. Первичные частоты сохранены; исходные выгрузки и скрипт ручного подсчёта в PR отсутствуют, поэтому их воспроизведение оставлено первому срезу. Индекс планов и описание PR согласованы с исправлениями.

Проверено: go build ./...; go run ./tools/plannum (154 плана, номера уникальны); go test -count=1 ./tools/plannum ./internal/pipelinecontract ./internal/onec_forms; выбранные тесты TestNStr, TestVT_*, TestQuery_*, TestDSL_ВызватьИсключение*; TestPageNStr_DefaultsToRequestLanguage; 15 примеров через публичный onebase eval; git diff --check. Все эти проверки прошли. Полный go test ./... не запускался.

Изменены только два файла Plans/. Код W040 и тесты временных файлов из раздела «Хвост» не менял: по процедуре FIX они остаются отдельными находками для TAIL.

@ivanarama ivanarama removed the changes-requested Ревью: есть замечания — фиксер дорабатывает label Sep 17, 2026
@ivanarama

Copy link
Copy Markdown
Owner Author

Ревью. (круг 2)
Reviewed-SHA: 375757a
Outcome-Label: changes-requested
Что меняется: Plan-PR по #1479 добавляет Plans/179-onec-code-compat.md и запись в Plans/README.md: замеры зависимости от БСП, инструмент migrate-scan, матрица совместимости и шесть срезов; код движка не изменён.
Проверено: Проверен весь diff точного HEAD 375757a в отдельном detached worktree; base/merge-base 714341c; изменены только два файла Plans/; Сверены выбранный вариант 1 заявки #1479, предыдущий завершённый круг ревью и исправления всех четырёх прежних блокирующих замечаний; исправления НСтр/СтрШаблон, ВызватьИсключение, коллекций и доли 62,3 % подтверждены; git diff --check прошёл; файлы читаются как UTF-8; ссылки на код и планы существуют; запись плана 179 в индексе единственная; go run ./tools/plannum: 154 плана, номера уникальны; go build ./... прошёл на go1.26.6 darwin/amd64; CLI собран отдельно для публичных проверок; go test -count=1 ./tools/plannum ./internal/pipelinecontract ./internal/onec_forms прошёл; go test -count=1 -run '^(TestNStr$|TestVT_|TestQuery_|TestDSL_ВызватьИсключение)' ./internal/dsl/interpreter прошёл; go test -count=1 -run '^TestPageNStr_DefaultsToRequestLanguage$' ./internal/ui прошёл; go vet ./tools/plannum ./internal/pipelinecontract ./internal/onec_forms ./internal/dsl/interpreter ./internal/ui прошёл; 17 проверок через onebase eval --project examples/trade --json подтвердили: язык и fallback НСтр, обрезание перевода по внутреннему ;, обычную и повторную подстановку СтрШаблон, %10, конструкторы Структура/Соответствие/Массив, игнорирование размерности массива и типа колонки, строковое имя колонки, отсутствие Скопировать/Индексы, свёртку таблицы до 1:350 и перехват ВызватьИсключение. В собственной проверке Соответствия первоначально ожидался JSON number вместо строкового представления Decimal; повтор с равенством внутри DSL подтвердил сохранение числа; Арифметика опубликованных агрегатов верна: 53 245 / 85 410 = 62,3406 %, остаток 32 165 = 37,7 %, НСтр + СтрШаблон = 84 565. Первичные выгрузки и скрипт ручного подсчёта отсутствуют; сами частоты независимо не пересчитывались, что теперь явно оговорено в плане; Проверены Plans/135-object-bound-processors.md, processor.Processor, extform.ParseProcessorContent и Registry: привязка обработки к объекту остаётся проектом; соответствующие Binding/ObjectProcessors/ВыполнитьДляОбъекта отсутствуют, а внешняя обработка по-прежнему требует Выполнить/Execute; Для сохранения хвоста отдельно воспроизведены TestTempFileNameRejectsPathSyntaxAndUsesRandomToken и TestDSL_ВременныйФайл_ИмяУникальноИЛежитВКаталоге: с завершающим / в TMPDIR оба падают, с нормализованным TMPDIR оба проходят. Это прежняя сигнатура из #1499 (comment), где уже зафиксирован контроль на неизменённом base; текущий PR не меняет Go-код; REST check-runs привязаны к точному SHA; все восемь проверок из живой защиты main и .github/branch-protection.json успешны: build, lint, postgres-integration, vuln, smoke, e2e, test-windows, launcher-webview-build; bench также зелёный. Полный go test ./... не запускался.
Блокирующее: 1) [P2] Plans/179-onec-code-compat.md:332–335 (также 135–137 и 261–262): план 135 приведён среди уже сделанных нативных аналогов и описан через виды подключения ЗаполнениеОбъекта/СозданиеСвязанныхОбъектов. На проверяемом HEAD это неверное описание готовности: Plans/135-object-bound-processors.md:4 и строка 135 в индексе сохраняют статус «Проект»; processor.Processor не содержит Binding, в Registry нет ObjectProcessors, а extform.ParseProcessorContent по-прежнему требует Выполнить/Execute и не поддерживает вход ВыполнитьДляОбъекта. Более того, план 135:199–206 прямо исключает перенос перечисленных видов подключения. Из-за этого матрица и срез 6 получают ложную предпосылку о уже существующем аналоге ПодключаемыхКоманд. Исправить все повторы: назвать существующий внешний контур обработок, отдельно обозначить запланированную привязку к объектам и её фактические границы; не представлять план 135 и исключённые им виды подключения как реализованную возможность.
Хвост:

  1. [заявка] Сохраняется находка предыдущего ревью: bslIncompatPatterns в internal/onec_forms/module_bsl.go безусловно помечает НСтр, СтрШаблон и поддерживаемые конструкторы как несовместимости, а для ВызватьИсключение рекомендует несуществующее ВыброситьИсключение. Публичные DSL-прогоны подтверждают расхождение предупреждений с рантаймом; plan-PR уже отделяет сырые совпадения от реальных ограничений и этот исходный дефект не вносит. Актуализировать предупреждения по конкретным сигнатурам и закрепить через публичный импорт/исполнение → заголовок: «fix(onec_forms): актуализировать W040 для уже поддерживаемых конструкций DSL»
  2. [заявка] Сохраняется находка предыдущего ревью: на macOS с завершающим / в TMPDIR TestTempFileNameRejectsPathSyntaxAndUsesRandomToken (builtins_env_internal_test.go:55) и TestDSL_ВременныйФайл_ИмяУникальноИЛежитВКаталоге (builtins_env_test.go:46) сравнивают очищенный filepath.Dir(path) с неочищенным os.TempDir() и ложно падают. Повтор точных двух тестов воспроизвёл оба падения; нормализация TMPDIR устраняет их. Предыдущее ревью docs(plan): совместимость с прикладным кодом 1С — измеренная граница (#1479) #1499 (comment) уже воспроизвело их и на неизменённом base. Нормализовать ожидаемый путь в тестах и закрепить завершающий разделитель → заголовок: «test(dsl): нормализовать временный каталог в проверках имён файлов»
    Вердикт: есть замечания.

@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: REVIEW result publication claimed.

@ivanarama ivanarama added the changes-requested Ревью: есть замечания — фиксер дорабатывает label Sep 17, 2026
@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: REVIEW result committed.

Разделить существующий внешний контур и проект привязки к объектам,
учесть исключённые планом 135 виды подключения БСП.

Generated-with: Codex
PP-Fix-Transition: from=375757adde61daa080ecc0dcc2b369d0963f6cd0 review-comment=5721819380 claim=5721819772 epoch-sha256=db86102bfeec7a144a2cae472b6ae70c93b669fce6e77d7c11906d78187df097
@ivanarama

Copy link
Copy Markdown
Owner Author

Исправлено блокирующее замечание второго ревью в коммите b97fdaf.

  1. В выводах и срезе 6 план 135 теперь обозначен как проект. Работающий внешний контур — загрузка, хранение, перенос бандлом и запуск обработки из общего списка — описан отдельно от будущих binding: и ВыполнитьДляОбъекта.
  2. Уточнены границы плана 135: основной объём — команда в форме объекта, команда над строкой списка отложена; виды подключения БСП ЗаполнениеОбъекта и СозданиеСвязанныхОбъектов исключены из переноса. Для девяти API ПодключаемыеКоманды требуется отдельное сопоставление контрактов.
  3. Матрица не считает запланированный механизм готовым нативным аналогом. В заключительном разделе указано фактическое состояние processor.Processor, Registry и ParseProcessorContent на проверенном коммите; все прежние утверждения о готовой привязке исправлены.

Проверено: go build ./...; go run ./tools/plannum — 154 плана, номера уникальны; go test -count=1 ./tools/plannum ./internal/pipelinecontract ./internal/processor ./internal/extform ./internal/runtime; git diff --check; чтение изменённого файла как UTF-8. Все проверки прошли. Полный go test ./... не запускался.

Изменён только Plans/179-onec-code-compat.md. Код W040 и тесты временных файлов из раздела «Хвост» оставлены для отдельных заявок: процедура FIX ограничивает доработку блокирующими замечаниями.

@ivanarama ivanarama removed the changes-requested Ревью: есть замечания — фиксер дорабатывает label Sep 18, 2026
@ivanarama

Copy link
Copy Markdown
Owner Author

Ревью. (круг 3)
Reviewed-SHA: b97fdaf
Outcome-Label: reviewed

Что меняется: Plan-PR по #1479 описывает измерение зависимости прикладного кода от БСП, матрицу совместимости и последовательность нативных помощников, уточнения локализации и конверсии. Изменены только Plans/179-onec-code-compat.md и строка индекса. Выбранный вариант 1 соблюдён; реализация подсистем вынесена в последующие отдельные решения.

Проверено:

  • Полный diff точного HEAD в отдельном detached worktree, заявка Это не ошибка, а предложение. Добавить БСП. #1479 с решением decision:1, обе завершённые пары предыдущих ревью и доработка после второго круга.
  • Последнее блокирующее замечание устранено во всех повторах: работающий внешний контур отделён от проекта 135; binding:, ВыполнитьДляОбъекта и привязка к форме объекта обозначены как будущая работа. Отложенная команда списка и исключённые виды подключения БСП отражены верно. Сверены план 135, processor.Processor, Registry, ParseProcessorContent; план 117 корректно назван частично реализованным.
  • git diff --check origin/main...HEAD; чтение плана как UTF-8, ссылки на файлы и единственная запись в индексе; go run ./tools/plannum — 154 плана, номера уникальны.
  • go build ./... и отдельная сборка ./cmd/onebase прошли на Go 1.26.6, darwin/amd64.
  • go test -count=1 ./tools/plannum ./internal/processor ./internal/extform ./internal/runtime — успешно.
  • go test -count=1 -run '^(TestNStr$|TestVT_|TestQuery_|TestDSL_ВызватьИсключение)' ./internal/dsl/interpreter и go test -count=1 -run '^TestPageNStr_DefaultsToRequestLanguage$' ./internal/ui — успешно.
  • go vet ./tools/plannum ./internal/processor ./internal/extform ./internal/runtime ./internal/dsl/interpreter ./internal/ui — успешно.
  • 12 проверок через публичный onebase eval --project examples/trade --json подтвердили язык, fallback и ограничение НСтр на внутреннем ;, обычную и повторную подстановку СтрШаблон, конструкторы коллекций, игнорирование размерности массива и типа колонки, строковое имя колонки, перехват ВызватьИсключение и свёртку таблицы до 1:350.
  • Арифметика опубликованных агрегатов верна: 53 245 / 85 410 = 62,3406… %, остаток 32 165 = 37,7 %, сумма частот НСтр и СтрШаблон — 84 565. Исходные выгрузки и скрипт ручного подсчёта отсутствуют; первичные частоты независимо не пересчитывались. План явно оставляет их воспроизведение первому срезу.
  • REST check-runs относятся к точному SHA. Все восемь обязательных проверок из живой защиты main и .github/branch-protection.json успешны: build, lint, postgres-integration, vuln, smoke, e2e, test-windows, launcher-webview-build. Полный набор go test ./... не запускался: PR меняет только документацию, проверки ограничены описанными контрактами.

Блокирующее: нет. Замечания обоих предыдущих кругов устранены; фактических оснований возвращать этот HEAD на третью доработку не найдено. По правилу «блокирующего нет → reviewed» результат третьего аудита — reviewed.

Хвост:

  1. [заявка] Сохраняется находка предыдущих ревью: bslIncompatPatterns в internal/onec_forms/module_bsl.go считает НСтр, СтрШаблон и поддерживаемые конструкторы несовместимостями, а для ВызватьИсключение рекомендует несуществующее ВыброситьИсключение. Список предупреждений и публичные DSL-примеры по-прежнему расходятся; plan-PR этот исходный дефект не вносит. Актуализировать W040 по конкретным сигнатурам и закрепить через публичный импорт/исполнение → заголовок: «fix(onec_forms): актуализировать W040 для уже поддерживаемых конструкций DSL»
  2. [заявка] Сохраняется находка предыдущих ревью: TestTempFileNameRejectsPathSyntaxAndUsesRandomToken и TestDSL_ВременныйФайл_ИмяУникальноИЛежитВКаталоге сравнивают очищенный filepath.Dir(path) с неочищенным os.TempDir(). На macOS с завершающим / в TMPDIR это даёт ложное падение. Сравнения остаются в текущем коде; воспроизведение на HEAD и неизменённом base зафиксировано в первом ревью, повторная проверка сигнатуры — во втором. В этом круге эти два теста отдельно не запускались. Нормализовать ожидаемый путь и закрепить завершающий разделитель → заголовок: «test(dsl): нормализовать временный каталог в проверках имён файлов»

Вердикт: годится к мержу как план. Реализация и воспроизведение исходных замеров выполняются последующими срезами.
Человеку: прочитать заключение и поставить ship, если план и две находки хвоста приняты.

@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: REVIEW result publication claimed.

@ivanarama ivanarama added the reviewed Ревью: блокирующего нет — ждёт ship label Sep 18, 2026
@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: REVIEW result committed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

reviewed Ревью: блокирующего нет — ждёт ship

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant