From 5d4493742d54828100e9a749869e3cf343498e6d Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 19 Oct 2026 15:36:44 +0600 Subject: [PATCH] [2026-10-19] eagle: personal/projects/balda/mattermost-dm-threads-2026-10-19.md personal/projects/balda/setup.md personal/projects/balda/upstream-prs-2026-10-19.md --- .../balda/mattermost-dm-threads-2026-10-19.md | 6 ++++- personal/projects/balda/setup.md | 6 ++++- .../projects/balda/upstream-prs-2026-10-19.md | 22 ++++++++++++++----- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/personal/projects/balda/mattermost-dm-threads-2026-10-19.md b/personal/projects/balda/mattermost-dm-threads-2026-10-19.md index 92e3056d..1fc12d4d 100644 --- a/personal/projects/balda/mattermost-dm-threads-2026-10-19.md +++ b/personal/projects/balda/mattermost-dm-threads-2026-10-19.md @@ -16,6 +16,10 @@ Upstream `a908ee1a` возвращал DM/group locator до вычислени ## Два upstream PR — 2026-10-19 08:51 UTC -Открыты независимые PR к `baldaworks/balda:main`: [#77 — единичное меню подтверждения](https://github.com/baldaworks/balda/pull/77) и [#78 — ответы в тредах лички](https://github.com/baldaworks/balda/pull/78). У каждого один коммит от свежей публичной базы `e0edbe58`; checks race/lint/architecture прошли отдельно. Оператор подтвердил успешный прогон развёрнутой Balda в Mattermost. +Открыты независимые PR к `baldaworks/balda:main`: [#77 — единичное меню подтверждения](https://github.com/baldaworks/balda/pull/77) и [#78 — ответы в тредах лички](https://github.com/baldaworks/balda/pull/78). Первоначально у каждого был один коммит от свежей публичной базы `e0edbe58`; после review в #78 добавлен второй коммит (см. ниже); checks race/lint/architecture прошли отдельно. Оператор подтвердил успешный прогон развёрнутой Balda в Mattermost. Production остаётся на `eee69fc5`: этот этап готовил PR и не обновлял работающий binary. PR тредов дополнительно закрывает повтор старого ответа с сохранением точности времени; эта дополнительная защита проверена в PR-ветке и в production на этом этапе не устанавливалась. Подробности и CI-снимок: [[personal/projects/balda/upstream-prs-2026-10-19]]. + +## Исправление clock domain #78 — 2026-10-19 09:34 UTC + +PR [#78](https://github.com/baldaworks/balda/pull/78), head `a693e4efcb94175777700d38d7cc83e7ecce971b`: время ответа сравнивается с серверным временем публикации вопроса Mattermost, сохранённым в question/outbox SQLite и PostgreSQL. Рассинхронизация часов, stale reply и recovery проверены; полный race, lint, architecture и diff --check прошли. В #78 два коммита; #77 не изменялся, production этим этапом не обновлялся. Точный CI-снимок и evidence: [[personal/projects/balda/upstream-prs-2026-10-19]]. diff --git a/personal/projects/balda/setup.md b/personal/projects/balda/setup.md index b76182a9..f218e76a 100755 --- a/personal/projects/balda/setup.md +++ b/personal/projects/balda/setup.md @@ -179,6 +179,10 @@ docker logs --tail 120 balda-mm-mac ## Два upstream PR — 2026-10-19 08:51 UTC -Открыты независимые PR к `baldaworks/balda:main`: [#77 — единичное меню подтверждения](https://github.com/baldaworks/balda/pull/77) и [#78 — ответы в тредах лички](https://github.com/baldaworks/balda/pull/78). У каждого один коммит от свежей публичной базы `e0edbe58`; checks race/lint/architecture прошли отдельно. Оператор подтвердил успешный прогон развёрнутой Balda в Mattermost. +Открыты независимые PR к `baldaworks/balda:main`: [#77 — единичное меню подтверждения](https://github.com/baldaworks/balda/pull/77) и [#78 — ответы в тредах лички](https://github.com/baldaworks/balda/pull/78). Первоначально у каждого был один коммит от свежей публичной базы `e0edbe58`; после review в #78 добавлен второй коммит (см. ниже); checks race/lint/architecture прошли отдельно. Оператор подтвердил успешный прогон развёрнутой Balda в Mattermost. Production остаётся на `eee69fc5`: этот этап готовил PR и не обновлял работающий binary. PR тредов дополнительно закрывает повтор старого ответа с сохранением точности времени; эта дополнительная защита проверена в PR-ветке и в production на этом этапе не устанавливалась. Подробности и CI-снимок: [[personal/projects/balda/upstream-prs-2026-10-19]]. + +## Исправление clock domain #78 — 2026-10-19 09:34 UTC + +PR [#78](https://github.com/baldaworks/balda/pull/78), head `a693e4efcb94175777700d38d7cc83e7ecce971b`: время ответа сравнивается с серверным временем публикации вопроса Mattermost, сохранённым в question/outbox SQLite и PostgreSQL. Рассинхронизация часов, stale reply и recovery проверены; полный race, lint, architecture и diff --check прошли. В #78 два коммита; #77 не изменялся, production этим этапом не обновлялся. Точный CI-снимок и evidence: [[personal/projects/balda/upstream-prs-2026-10-19]]. diff --git a/personal/projects/balda/upstream-prs-2026-10-19.md b/personal/projects/balda/upstream-prs-2026-10-19.md index 85eab0f0..057b3a14 100644 --- a/personal/projects/balda/upstream-prs-2026-10-19.md +++ b/personal/projects/balda/upstream-prs-2026-10-19.md @@ -1,19 +1,19 @@ # Balda — два upstream PR, 2026-10-19 -Проверено 2026-10-19 08:51 UTC. Текущий runtime: [[personal/projects/balda/setup]]. Владелец подтвердил успешный прогон Balda в Mattermost до подготовки этих PR. +Обновлено 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) | `3915ae5ab776be35dc623ce2c3dab77781dbf021` | 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. +Обе ветки независимо созданы от свежего официального `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 отклоняет ответы, отправленные до создания текущего вопроса. Точность created_at сохраняется в SQLite/PostgreSQL. Остальные reply references сохраняют прежнюю семантику. +Первый 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: +Исторический 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. @@ -23,3 +23,15 @@ CI-снимок на 2026-10-19 08:51 UTC: Развёрнутый 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`.