Skip to content

fix(report): скрыть внутренний тип конструкции формулы - #1453

Merged
ivanarama merged 2 commits into
mainfrom
fix/1357
Sep 17, 2026
Merged

ivanarama merged 2 commits into
mainfrom
fix/1357

Conversation

@ivanarama

Copy link
Copy Markdown
Owner

Что исправлено

  • запрещённый пропущенный аргумент в формуле отчёта теперь называется пользовательским термином «пропущенный аргумент»;
  • fallback для будущих неизвестных AST-конструкций остаётся fail-closed, но больше не раскрывает имя внутреннего Go-типа;
  • добавлены регрессионные тесты публичного пути Evaluator.EvalNum(Строка(1,,2)) и безопасного fallback.

Политика выполнения не менялась: недопустимые конструкции по-прежнему отклоняются до исполнения.

Проверки

  • go test -count=1 ./internal/report/expreval;
  • go build ./...;
  • go test -count=1 ./...;
  • git diff --check.

Fixes #1357

@ivanarama

Copy link
Copy Markdown
Owner Author

Ревью. (круг 1)
Reviewed-SHA: bf37041
Outcome-Label: reviewed
Что меняется: Убрана утечка внутреннего Go-типа запрещённой AST-конструкции из пользовательской ошибки формулы отчёта: MissingArg получает термин «пропущенный аргумент», а неизвестные будущие узлы — безопасное общее описание без изменения fail-closed политики..
Проверено: Проверены PR #1453, issue #1357 и diff точного HEAD bf37041 относительно merge-base a2b3cfd; затронуты только formula_policy.go и expreval_test.go.; Публичный регрессионный тест проходит через Evaluator.EvalNum(Строка(1,,2)); отдельный тест фиксирует общий fallback без имени AST-типа.; git diff --check a2b3cfd...bf37041 — успешно.; go test -count=1 ./internal/report/expreval — успешно.; go build ./... — успешно.; go test -count=1 ./... — успешно.; GitHub CI текущего HEAD завершён успешно, включая build, lint, postgres-integration, vuln, smoke, e2e, test-windows и launcher-webview-build; bench также успешен..
Блокирующее: нет.
Хвост:
—
Вердикт: годится к мержу.

@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: REVIEW result publication claimed.

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

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: REVIEW result committed.

@ivanarama ivanarama added the ship Иван одобрил мерж: пастух может вливать label Sep 11, 2026
@ivanarama

Copy link
Copy Markdown
Owner Author

Синхронизация PR #1453 с main перед интеграционным ревью.

@ivanarama

Copy link
Copy Markdown
Owner Author

Ветка PR #1453 обновлена из main. Новый HEAD ожидает интеграционное REVIEW; разрешение ship сохранено.

@ivanarama

Copy link
Copy Markdown
Owner Author

Ревью. (круг 2, интеграционная проверка)
Reviewed-SHA: 6980465
Outcome-Label: reviewed

Что меняется: PR синхронизирован с main переходом bf37041a0be6fc8897fc77d3ae5b94e76a399df8 → 6980465dfe893b0a1ede4624dfbae07d57646984. Родители merge-коммита — строго [bf37041a0be6fc8897fc77d3ae5b94e76a399df8, c573bbb06e1b3325b308d74f9934e105a1d905d9]. Из main пришли изменения 161 файла; собственный патч PR в двух файлах internal/report/expreval побайтово совпадает с патчем до синхронизации. Изменений исходной правки при слиянии нет.

Проверено:

  • Исходное содержательное ревью имеет каноничную пару: review 5611423413, claim 5611423793, completion 5611424461. Подтверждены неизменённые intent 5712280747 / done 5712310093, единственный переход HEAD и непрерывное разрешение ship. Два полных пагинированных прохода GraphQL совпадают; REST id/node_id и тела комментариев согласованы с GraphQL fullDatabaseId/id.
  • git show --remerge-diff --format= HEAD — пустой результат: отклонений от автоматического слияния нет. git diff --check HEAD^1 HEAD — успешно. Сравнение бинарных diff исходного патча и HEAD^2 → HEAD — побайтовое совпадение.
  • go build ./... — успешно.
  • go test -count=1 для 49 пакетов, затронутых интеграционной дельтой, и их конкретных потребителей: 47 пакетов прошли; в двух пакетах упали четыре теста. Каждое падение отдельно повторено на проверяемом HEAD и на неизменённом base c573bbb06e1b3325b308d74f9934e105a1d905d9 в той же среде macOS с той же причиной. Ошибки классифицированы как существующие дефекты переносимости тестов, независимые от PR: два теста interpreter сравнивают os.TempDir() с завершающим / и нормализованный filepath.Dir; два теста launcher создают «общую» установку внутри приватного системного временного каталога с правами 0700, поэтому получают HTTP 409 вместо ожидаемого 403. При контрольном запуске только этих четырёх тестов с TMPDIR=/tmp все четыре прошли.
  • go vet для тех же 49 пакетов — успешно. go run ./cmd/onebase check --project examples/trade — OK: ошибок не найдено.
  • CI точного HEAD: все восемь обязательных проверок завершились успешно — build, lint, postgres-integration, vuln, smoke, e2e, test-windows, launcher-webview-build. Bench также успешен.
Точные команды локальных тестов и vet
go test -count=1 ./cmd/onebase ./internal/access ./internal/aiassist ./internal/aicontext ./internal/api ./internal/app ./internal/auth ./internal/backup ./internal/bench ./internal/cli ./internal/configcheck ./internal/configdb ./internal/converter ./internal/converter/writer ./internal/dbcheck ./internal/dbtest ./internal/dsl/interpreter ./internal/dsl/langref ./internal/dsl/loader ./internal/dslvars ./internal/entityservice ./internal/exchange ./internal/extform ./internal/formdoc ./internal/gengen ./internal/intake ./internal/jobqueue ./internal/launcher ./internal/mailer ./internal/metadata ./internal/onec_forms ./internal/pdfimport ./internal/pipelinecontract ./internal/printform ./internal/processor ./internal/project ./internal/query ./internal/report/expreval ./internal/runtime ./internal/scheduler ./internal/search ./internal/storage ./internal/typedempty ./internal/ui ./internal/widget ./internal/xlsximport ./internal/xlsxtemplate ./tools/pipelinehealth ./tools/releasecheck
go vet ./cmd/onebase ./internal/access ./internal/aiassist ./internal/aicontext ./internal/api ./internal/app ./internal/auth ./internal/backup ./internal/bench ./internal/cli ./internal/configcheck ./internal/configdb ./internal/converter ./internal/converter/writer ./internal/dbcheck ./internal/dbtest ./internal/dsl/interpreter ./internal/dsl/langref ./internal/dsl/loader ./internal/dslvars ./internal/entityservice ./internal/exchange ./internal/extform ./internal/formdoc ./internal/gengen ./internal/intake ./internal/jobqueue ./internal/launcher ./internal/mailer ./internal/metadata ./internal/onec_forms ./internal/pdfimport ./internal/pipelinecontract ./internal/printform ./internal/processor ./internal/project ./internal/query ./internal/report/expreval ./internal/runtime ./internal/scheduler ./internal/search ./internal/storage ./internal/typedempty ./internal/ui ./internal/widget ./internal/xlsximport ./internal/xlsxtemplate ./tools/pipelinehealth ./tools/releasecheck

Контроль на неизменённом base и на HEAD (обе команды воспроизводят те же падения):

go test -count=1 ./internal/dsl/interpreter -run '^(TestTempFileNameRejectsPathSyntaxAndUsesRandomToken|TestDSL_ВременныйФайл_ИмяУникальноИЛежитВКаталоге)$'
go test -count=1 ./internal/launcher -run '^(TestUpdatesApply_SharedInstallExplainsLocationNotPermissions|TestUpdatesRollback_SharedInstallDoesNotBlamePolicy)$'

Проверка причины на HEAD, только четыре локализованных теста — успешно:

TMPDIR=/tmp go test -count=1 ./internal/dsl/interpreter ./internal/launcher -run '^(TestTempFileNameRejectsPathSyntaxAndUsesRandomToken|TestDSL_ВременныйФайл_ИмяУникальноИЛежитВКаталоге|TestUpdatesApply_SharedInstallExplainsLocationNotPermissions|TestUpdatesRollback_SharedInstallDoesNotBlamePolicy)$'

Блокирующее: нет.

Хвост:

  1. [заявка] Четыре теста существующего base ошибочно зависят от устройства временного каталога macOS: TestTempFileNameRejectsPathSyntaxAndUsesRandomToken и TestDSL_ВременныйФайл_ИмяУникальноИЛежитВКаталоге сравнивают нормализованный путь с os.TempDir(), который может оканчиваться /; TestUpdatesApply_SharedInstallExplainsLocationNotPermissions и TestUpdatesRollback_SharedInstallDoesNotBlamePolicy принимают каталог 0755 внутри приватного TMPDIR за общую установку. Одинаковые падения доказаны отдельными прогонами на base и HEAD; с TMPDIR=/tmp эти четыре теста проходят. Нужны нормализация ожидаемого пути и создание заведомо общей установки с проверкой предусловия. → заголовок: «Сделать тесты временных каталогов и самообновления переносимыми на macOS».

Вердикт: годится к мержу. Интеграционная совместимость подтверждена; ship сохраняется.

@ivanarama

Copy link
Copy Markdown
Owner Author

No description provided.

@ivanarama

Copy link
Copy Markdown
Owner Author

No description provided.

@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: MERGE transaction reserved.

@ivanarama
ivanarama merged commit 454b952 into main Sep 17, 2026
13 checks passed
@ivanarama ivanarama removed the ship Иван одобрил мерж: пастух может вливать label Sep 17, 2026
@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: MERGE cleanup completed.

@ivanarama

Copy link
Copy Markdown
Owner Author

Начат перенос пункта 1 хвоста ревью.

@ivanarama

Copy link
Copy Markdown
Owner Author

Зафиксировано намерение создать заявку по пункту 1.

@ivanarama

Copy link
Copy Markdown
Owner Author

Пункт 1: создана заявка #1582.

@ivanarama

Copy link
Copy Markdown
Owner Author

Хвост разобран. пункт 1 — #1582.

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

Labels

queue:auto:p1 Inherited automatic queue priority P1 reviewed Ревью: блокирующего нет — ждёт ship

Projects

None yet

1 participant