Skip to content

fix(cms): очистка корзин на проверяемом content HEAD - #1868

Merged
ivanarama merged 2 commits into
mainfrom
fix/1240-clean-replacement-20261003
Oct 5, 2026
Merged

ivanarama merged 2 commits into
mainfrom
fix/1240-clean-replacement-20261003

Conversation

@ivanarama

@ivanarama ivanarama commented Oct 3, 2026 •

Copy link
Copy Markdown
Owner

Замена #1321 для #1240. Содержательный diff перенесён без изменений на свежий main как один обычный content-коммит: стабильный patch-id исходного и нового diff — 82cc2c762ebdf1778fadb0e4a8a05e108fcfa4fb. Это убирает legacy merge-HEAD с отсутствующим source-proof, но не переносит старые REVIEW или ship: требуется новое полное REVIEW этого HEAD и новый ship после него.

Локально прошли: go build ./...; оба сценария TestCMSCart*; onebase check --project examples/cms и examples/trade; git diff --check. Полный go test ./... не прошёл на этой Windows-машине из-за тайм-аутов 10 минут в тяжёлых пакетах launcher/storage/ui и тестов selfupdate: временный каталог Go находится вне профиля пользователя. Обязательный GitHub CI на новом HEAD остаётся gate; локальные сбои не объявляются зелёными.

Fixes #1240

Recovered from #1321 without the unprovable legacy merge history.

Generated-with: Codex
@ivanarama
ivanarama marked this pull request as ready for review October 3, 2026 13:12
@ivanarama ivanarama added the queue:p1 Manual queue priority P1 label Oct 3, 2026
@ivanarama

Copy link
Copy Markdown
Owner Author

Ревью. (круг 1)
Reviewed-SHA: 2b19154
Outcome-Label: reviewed
Что меняется: Ежедневная обработка ОчисткаКорзин удаляет порциями по 100 неоформленные корзины старше 45 дней; сохраняет корзины на границе срока, оформленные корзины и заказы. Новый DSL-метод УдалитьЕслиНеИзменен связывает удаление с версией прочитанной строки, повторяет сравнение в финальном DELETE и использует общий entityservice-путь с хуками, ссылочной целостностью, табличными частями и обменом. Поля и токен версии теперь читаются из одной строки..
Проверено: Полное содержательное ревью diff всех 17 файлов на detached HEAD 2b19154 относительно base 9e2d3a4; проверены загрузка и перечитывание объекта, RBAC/RLS, раннее и финальное сравнение версии, откат ТЧ и wiring DSL-окружения scheduler.; go build ./... — успешно, Go 1.26.6 darwin/amd64.; go test -count=1 ./internal/storage ./internal/entityservice ./internal/ui ./internal/dsl/langref ./internal/api ./internal/dsl/interpreter ./internal/cli ./internal/launcher ./internal/scheduler ./internal/runtime ./internal/metadata ./internal/bench: 11 пакетов успешны; internal/cli имеет три сбоя TestRunServiceInstallPrintCarriesExplicitHost, TestRunServiceInstallPrintDefaultsToLoopback и TestRunServiceInstallPrintInheritsRegistryHost. Отдельный JSON-прогон CLI: 272 успешных теста/подтеста, те же три сбоя; общий результат CLI не объявляется зелёным.; Причина CLI-сбоев подтверждена контрольным go test -count=1 -run '^TestRunServiceInstallPrint(CarriesExplicitHost|DefaultsToLoopback|InheritsRegistryHost)$' ./internal/cli на неизменённом detached base 9e2d3a4 в той же среде: все три дают тот же service_test.go:183/205/239 и «автоустановка сервиса не поддерживается на darwin». С diff не связаны.; go vet для тех же 12 пакетов — успешно.; go run ./cmd/onebase check --project examples/cms и go run ./cmd/onebase check --project examples/trade — успешно.; TEST_DATABASE_URL локального PostgreSQL + go test -count=1 -run '^TestCMSCart' -v ./internal/ui — успешно: оба новых матричных сценария прошли на SQLite и PostgreSQL; проверены 101 удалённая корзина, сохранение строки конкурентно оформленной корзины, точная граница срока, заказ и повторный запуск.; Дополнительный временный TestReview1868FinalCASRestoresTableParts через публичный CallMethod(УдалитьЕслиНеИзменен): изменение версии в RegisterExchangeDelete после ранней проверки и удаления ТЧ возвращает false и восстанавливает корзину, версию и ТЧ; повторное удаление неизменённого объекта успешно. Пройдены SQLite/PostgreSQL, собственная транзакция и savepoint внутри чужой транзакции. Диагностический файл сохранён отдельно и удалён из checkout.; Документация и langref согласованы: 163 метода, сигнатура и DeleteIfUnchanged; соответствующие langref/CLI проверки прошли. git diff --check — успешно; проверяемый checkout после удаления временного теста чист.; Перед complete повторно проверены OPEN, Ready, main, точный HEAD и все восемь обязательных CI checks: build, lint, postgres-integration, vuln, smoke, e2e, test-windows, launcher-webview-build — SUCCESS. gh auth status и gh api user --jq .login подтвердили ivanarama.; Полный go test -count=1 ./... не запускался: diff и потребители ограничены перечисленными пакетами, обязательный CI точного HEAD успешен..
Блокирующее: нет.
Хвост:

  1. [заявка] internal/ui/cms_cart_cleanup_test.go:145-160 и 325-336 внедряют изменение до раннего сравнения в entityservice.deleteInTx. Они не защищают финальный SQL-предикат _version и откат уже удалённых ТЧ при изменении версии между ранней проверкой и DELETE. Реализация корректна: временный reviewer-тест на SQLite и PostgreSQL подтвердил false, восстановление корзины и ТЧ, а затем успешный retry, включая borrowed transaction/savepoint. Добавить такой постоянный регрессионный сценарий через публичный DSL-метод, с изменением в hook/шве непосредственно перед финальным DELETE. → заголовок: «Закрепить матричным тестом поздний конфликт версии при удалении каталога»
  2. [выброс] Три CLI-теста установки сервиса падают на darwin с той же сигнатурой и на точном base 9e2d3a4. Это существующее ограничение платформы тестов, независимое от очистки корзин; исправлять его в этом PR не требуется.
    Вердикт: годится к мержу.

@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: REVIEW result publication claimed.

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

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: REVIEW result committed.

@ivanarama

Copy link
Copy Markdown
Owner Author

Решение по запросу владельца: одобряю поставку HEAD 2b19154 по положительному ревью #5970088531. Принимаются защита версии и общий путь удаления. Неблокирующий хвост о постоянном тесте позднего конфликта сохранить для TAIL. Merge через штатные проверки актуального main.

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

Copy link
Copy Markdown
Owner Author

Автоматическое обновление PR #1868 от main: исходный HEAD и разрешение ship проверены; после обновления требуется интеграционное REVIEW.

@ivanarama

Copy link
Copy Markdown
Owner Author

PR #1868 обновлён от main. Новый HEAD 0832a10 подтверждён как единственный merge-коммит с parents [2b19154, dbe4b38]; ship сохранён. Требуется интеграционное REVIEW нового HEAD.

@ivanarama

Copy link
Copy Markdown
Owner Author

Ревью. (круг 2)
Reviewed-SHA: 0832a10
Outcome-Label: reviewed
Интеграционное ревью выполнено Codex.

Что меняется: Проверен только переход 2b19154 → 0832a10: подмешан main dbe4b38. Исходное содержательное ревью #5970088531 остаётся каноничным; intent #5994343615 и done #5994377581 непрерывно переносят человеческий ship на этот merge-HEAD. Собственные изменения очистки корзин сохранены. Дельта включает обновления запросов, блокировок DSL, форм и других уже влитых частей main; совместимость проверена на точном HEAD.

Проверено:

  • Два полных последовательных одинаковых GraphQL-прохода с edge cursors, fullDatabaseId и lastEditedAt; сверка всех REST-комментариев и node_id. Проверены исходные review/earliest claim/completion, hash исходной эпохи, точные intent/done, последний trusted ship-transition, отсутствие override, edit/delete и посторонних HEAD/base lifecycle events. Полный набор PR-коммитов — исходный content-коммит плюс ровно один merge-коммит; его parents точно [2b19154, dbe4b38]. Фактически подмешанный base является предком текущего main.
  • Повторный merge двух родителей в отдельном временном detached worktree, без коммита: конфликтов нет, полученное дерево 12257546fde172511f4bef469ba643ec18cda216 побайтово совпало с деревом проверяемого HEAD. git show --remerge-diff и git diff --check — без замечаний. Проверены пересечения в docs/dsl-reference.md и internal/entityservice/service.go, в том числе новый контекст сборщика блокировок для удаления.
  • go build ./... — успешно, Go 1.26.6 darwin/amd64.
  • go test -json -count=1 ./internal/access ./internal/aiassist ./internal/aicontext ./internal/api ./internal/app ./internal/auth ./internal/backup ./internal/bench ./internal/cli ./internal/configcheck ./internal/configdb ./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/i18n ./internal/intake ./internal/jobqueue ./internal/launcher ./internal/mailer ./internal/metadata ./internal/navigation ./internal/onec_forms ./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 ./tools/mergecheck ./tools/pipelinehealth — 44 пакета успешны; internal/cli имеет только три сбоя TestRunServiceInstallPrintCarriesExplicitHost, TestRunServiceInstallPrintDefaultsToLoopback и TestRunServiceInstallPrintInheritsRegistryHost с сообщением «автоустановка сервиса не поддерживается на darwin». Общий exit code этого прогона — 1, CLI не объявляется зелёным.
  • Контрольный go test -json -count=1 -run '^TestRunServiceInstallPrint(CarriesExplicitHost|DefaultsToLoopback|InheritsRegistryHost)$' ./internal/cli на неизменённом detached base dbe4b38 в той же среде воспроизвёл все три ошибки, включая service_test.go:183/205/239. С интеграционной дельтой они не связаны.
  • go vet для тех же 45 пакетов — успешно. Локальные матричные тесты выполнялись на SQLite; TEST_DATABASE_URL не задан. Оба TestCMSCart* и сценарии области/повторного захвата блокировок прошли в internal/ui; PostgreSQL покрыт успешным обязательным CI точного HEAD.
  • go run ./cmd/onebase check --project examples/cms, examples/trade и examples/tasks — успешно.
  • go run ./tools/mergecheck с четырьмя снимками merge-base/ours/theirs/result подтвердил CHANGELOG.md, docs/features.md, Plans/README.md и internal/i18n/locales/en.json. go run ./tools/plannum — 180 планов, номера уникальны; все локальные ссылки Plans/README.md существуют. go run ./tools/i18ncheck — все 1433 ключа присутствуют в en.json.
  • Обязательные CI точного HEAD: build, lint, postgres-integration, vuln, smoke, e2e, test-windows, launcher-webview-build — SUCCESS. Перед публикацией заново проверяются OPEN, Ready, main, точный HEAD, routing labels, source/carry proof, server epoch и аккаунт ivanarama; глобальный owner/allowlist подтверждается однократным gate-fallback из envelope.
  • Полный go test -count=1 ./... не запускался: затронутые пакеты и их конкретные потребители перечислены выше.

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

  1. [заявка] Сохранён неблокирующий хвост исходного ревью #5970088531: постоянные TestCMSCart* меняют версию до раннего сравнения в entityservice.deleteInTx и не защищают финальный SQL-предикат _version с откатом уже удалённых ТЧ. Добавить матричный регрессионный сценарий через публичный DSL-метод УдалитьЕслиНеИзменен, который меняет версию непосредственно перед финальным DELETE и проверяет false, восстановление корзины и ТЧ, успешный retry, включая borrowed transaction/savepoint. Исходный reviewer подтвердил корректность реализации временным тестом; base-sync этот код не изменил. → заголовок: «Закрепить матричным тестом поздний конфликт версии при удалении каталога»
  2. [выброс] Три CLI-сбоя установки сервиса на darwin воспроизводятся с той же сигнатурой на фактически подмешанном base. Это существующее ограничение тестов платформы; исправлять его в этом PR не требуется.
    Вердикт: годится к мержу. Интеграционная совместимость подтверждена, существующий ship сохраняется.

@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: REVIEW result publication claimed by Codex.

@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: REVIEW result committed by Codex.

@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: MERGE transaction reserved.

@ivanarama
ivanarama merged commit 66a9a10 into main Oct 5, 2026
13 checks passed
@ivanarama
ivanarama deleted the fix/1240-clean-replacement-20261003 branch October 5, 2026 13:09
@ivanarama ivanarama removed the ship Иван одобрил мерж: пастух может вливать label Oct 5, 2026
@ivanarama

Copy link
Copy Markdown
Owner Author

PromptPilot service marker: MERGE cleanup completed.

@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

Пункт 1: отдельная работа зафиксирована в #1913.

@ivanarama

Copy link
Copy Markdown
Owner Author

Хвост разобран. Заведено: #1913 (матричная регрессия позднего конфликта версии при удалении каталога).

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

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CMS-магазин бессрочно хранит брошенные и оформленные корзины

1 participant