9.7 KiB
Balda — два upstream PR, 2026-10-19
Актуально: #77/#78 смержены; основной runtime обновлён на 138cc4a7. personal/projects/balda/upstream-deploy-2026-10-19. Ранние статусы «не установлено» ниже исторические.
Обновлено 2026-10-19 09:34 UTC. Текущий runtime: personal/projects/balda/setup. Владелец подтвердил успешный прогон Balda в Mattermost до подготовки этих PR.
| Исправление | PR | Коммит | Локальные проверки |
|---|---|---|---|
| Двойное меню | #77 | 623eecdb35ce2a6ac7054d9c8e6bbdceef64c4e6 |
race: 142 пакета с тестами; lint, architecture: pass |
| Треды DM | #78 | a693e4efcb94175777700d38d7cc83e7ecce971b |
race: 142 пакета с тестами; lint, architecture: pass |
Обе ветки независимо созданы от свежего официального origin/main e0edbe589f71d86a2300dddafa92371f33f9593d в отдельном checkout. Первоначально опубликованы два focused-коммита в feature branches mallexxx/balda; ветка fork main, исходный рабочий checkout и runtime не переключались. История 254f3e29/отката и приватные deployment данные в PR не включены. Тест тредов освобождён от проверки меню, поэтому порядок merge не создаёт зависимости. Maintainer edits разрешены, оба PR первоначально открыты ready for review; теперь оба смержены и прикреплены к задаче Codex.
Первый PR сохраняет готовую presentation permissions и structured options для проверки ответа. Второй сохраняет root_id пользовательского сообщения для DM/group delivery, прежние session identity и архивную область; исправляет raw requester ID; выбирает pending-вопрос вместо истории и отклоняет неоднозначные одновременные вопросы. Дополнительный regression поймал повторную авторизацию следующим вопросом: Mattermost помечает общий reply reference через generic SharedReplyRef, а resolver отклоняет ответы, отправленные до публикации текущего вопроса. После review сравниваются только серверные timestamps Mattermost (см. исправление review ниже); локальный CreatedAt не используется. Остальные reply references сохраняют прежнюю семантику.
Команды: GOMAXPROCS=2 go test -race -p 2 -timeout=20m ./..., go tool golangci-lint run, go tool go-arch-lint check --project-path . для каждой отдельной ветки. Для второго PR прошли tagged question contracts на реальных SQLite и PostgreSQL 17: Provider_QuestionStoreRoundTrip, QuestionThreadReplyLookup, QuestionAnswerHandoffSurvivesRestart. Новый lookup contract проверяет активный вопрос, неоднозначность, изоляцию другой беседы и наносекундное время. Одноразовый PostgreSQL-контейнер и его test volume удалены. Это локальные выбранные DB-contract tests; полные backend integration suites выполняет GitHub CI.
Исторический CI-снимок на 2026-10-19 08:51 UTC (актуальный #78 — ниже):
- PR #77: lint: SUCCESS; sqlite-integration: SUCCESS; postgres-integration: SUCCESS; test: IN_PROGRESS; projection-replay: SUCCESS; architecture-lint: SUCCESS; jetstream-integration: SUCCESS; ingress-e2e: SUCCESS.
- PR #78: native-launch (ubuntu-latest): IN_PROGRESS; sqlite-integration: IN_PROGRESS; lint: SUCCESS; native-launch (macos-latest): IN_PROGRESS; native-launch (windows-latest): IN_PROGRESS; postgres-integration: IN_PROGRESS; test: IN_PROGRESS; projection-replay: SUCCESS; architecture-lint: SUCCESS; jetstream-integration: SUCCESS; ingress-e2e: SUCCESS.
Для merge требуются все восемь checks CONTRIBUTING. Автоматический merge не включался. Открытие PR не объявляется завершением ещё выполняющихся CI jobs.
Развёрнутый runtime остаётся eee69fc5702197c67f0cd4de91b4cfea15dfaf1b, binary SHA256 5fe6e36607f70998984eaefd962f5b2d964162d9e7debabd9032449dcb9d1471. Дополнительный SharedReplyRef/causal guard появился в PR-ветке после live acceptance; установка этой добавки в текущую Balda этим этапом не выполнялась. Публичные ветки подготовлены на более новом upstream, чем установленная сборка.
Evidence: ~/.local/share/balda-workspace/candidate/upstream-prs-20261019/. Исходники PR: /private/tmp/balda-prs-20261019/approval и /private/tmp/balda-prs-20261019/threads; долговременные ссылки — PR и fork branches выше. Beads: balda-fv6m (локальная БД; её история не публиковалась).
Исправление review #78 — 2026-10-19 09:34 UTC
PR #78 обновлён дополнительным коммитом a693e4efcb94175777700d38d7cc83e7ecce971b. Guard больше не сравнивает локальный QuestionRecord.CreatedAt со временем Mattermost. Сохраняется create_at опубликованного поста вопроса; ответ сравнивается с ним в одном clock domain. Timestamp передаётся через delivery result/binding и сохраняется в question/outbox для SQLite и PostgreSQL, включая replay после restart. Локальный fallback timestamp не используется; отсутствие provider timestamp не позволяет shared-thread ответу закрыть вопрос.
Пройдены регрессии: Mattermost на час позади/впереди Balda, свежие и старые ответы, одинаковая миллисекунда, отсутствующие timestamps; native requester approval в HTTP Mattermost fixture с отстающими часами; SQLite outbox reopen без повторной отправки. Проверены миграции и question/outbox contracts на SQLite и отдельном PostgreSQL 17. Совместный снимок #77+#78 без конфликтов; focused race-тесты permissions, Questions, Mattermost adapter и handlers — pass. Полный go test -race -p 2 -timeout=20m ./..., golangci-lint, architecture lint и diff --check — pass.
#77 не изменялся: 623eecdb35ce2a6ac7054d9c8e6bbdceef64c4e6. В #78 теперь два коммита от публичной базы e0edbe58, история не переписывалась. PR не merge; production этим этапом не обновлялся. Live acceptance оператора относится к ранее установленной DM-правке; clock-domain correction проверена в PR-ветке.
CI #78, снимок 2026-10-19 09:34 UTC: native-launch (ubuntu-latest): IN_PROGRESS; lint: IN_PROGRESS; sqlite-integration: IN_PROGRESS; native-launch (macos-latest): IN_PROGRESS; native-launch (windows-latest): IN_PROGRESS; postgres-integration: IN_PROGRESS; test: IN_PROGRESS; projection-replay: IN_PROGRESS; architecture-lint: IN_PROGRESS; jetstream-integration: IN_PROGRESS; ingress-e2e: IN_PROGRESS.
Evidence: ~/.local/share/balda-workspace/candidate/upstream-prs-20261019/. Beads: balda-46az.
Upstream развёрнут — 2026-10-19 20:25 UTC+6 (Asia/Bishkek)
Основной balda-mm-mac работает на чистом upstream 138cc4a71d6889de30fe90e368f27f129fd8d792; PR #77 и #78 смержены и входят в этот commit. Binary SHA256 31c448af84428f83491d5fb8317549466f814f51c453de11fc8f6c9bd0836672, /proc/1/exe совпадает; build metadata vcs.modified=false. Конфигурация, environment, mounts и выбранный Codex account сохранены. Миграция SQLite — 68, integrity/foreign keys — ok; все 49 sessions/metadata, 1952 events, 2 users/bindings и 28 questions из согласованного snapshot сохранены. Mattermost websocket подключён, health/login 200, codex login status успешен; SSH UID 1000 установленным ключом из Balda до зарегистрированного target прошёл. Тестовые сообщения в Mattermost и модельные запросы этим deployment не отправлялись.
Рабочий runtime больше не использует частные патчи eee69fc5. Исторический checkout сохранён без reset/rebase; новая сборка сделана отдельно. Предыдущие снимки ниже относятся к прежним этапам. Актуальные проверки, CI и откат: personal/projects/balda/upstream-deploy-2026-10-19.