Files
obsidian-vault/personal/projects/balda/upstream-prs-2026-10-19.md
T

46 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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](https://github.com/baldaworks/balda/pull/77) | `623eecdb35ce2a6ac7054d9c8e6bbdceef64c4e6` | race: 142 пакета с тестами; lint, architecture: pass |
| Треды DM | [#78](https://github.com/baldaworks/balda/pull/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](https://github.com/baldaworks/balda/pull/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]].