[2026-09-26] eagle: personal/plans/balda-mm-pr-plan.md personal/projects/balda/balda-kraken-mm-deploy.md personal/tech/music-tags-repair-truenas.md
This commit is contained in:
1 parent
7564ae26ac
commit
7dbb3871b0
3 files changed
+218
-11
No files matched your search
@@ -1,21 +1,104 @@
|
||||
# Фаза 3 — Балда на Kraken + Mattermost (деплой)
|
||||
|
||||
> Создан 2026-09-26. Обновлён 2026-09-26 (сессия реализации: `bad_seq`, MM-хендлер,
|
||||
> привязка владельца, правки провайдера; **🔴 статус приёмки ИСПРАВЛЕН**).
|
||||
> Статус: **🔴 ФАЗА 3 НЕ ЗАКРЫТА. Бот отвечает `testuser`, но НЕ отвечает Alex.**
|
||||
> Причина — аккаунт Alex не привязан как владелец (`unauthorized`); в `balda_user_bindings`
|
||||
> владельцем сидит мой тестовый `testuser`. Alex: «Нихуя он мне не отвечает в ММ.
|
||||
> Не готово!!» Образ `0.1.8`, все шесть технических причин устранены — осталась привязка
|
||||
> аккаунта Alex (причина №7). Push-уведомления — 🔴 невозможны на Team Edition.
|
||||
> Подробный план и фактические изменения — [[personal/plans/balda-mm-endtoend-plan]].
|
||||
> Создан 2026-09-26. Обновлён 2026-09-26 (**✅ ФАЗА ЗАКРЫТА — боевая приёмка пройдена**).
|
||||
> Статус: **✅ РАБОТАЕТ. Бот отвечает аккаунту Alex.** Образ `0.1.10` (коммит `9f1e6c9c`,
|
||||
> он же PR baldaworks/balda#8).
|
||||
> **Доказательство (лента `balda-test`):** `cbwsorzwoigbtrdnteugnx4aqo` (Alex) —
|
||||
> `@balda скажи одно слово` → `edxrgupoxiyig5gzmr79tjypbme` (бот) — `слово`.
|
||||
> `settlement_stage=accepted`, `bad_seq`=0, `RestartCount`=0.
|
||||
> Подробный разбор приёмки — [[personal/plans/balda-mm-pr-plan]] §«БОЕВАЯ ПРИЁМКА».
|
||||
> Pull request (Фаза 2 → апстрим): **https://github.com/baldaworks/balda/pull/8** — 8/8 CI PASS.
|
||||
> Питфоллы и метод — [[personal/tech/balda-go-fx-pitfalls]].
|
||||
> Часть проекта [[personal/projects/balda/balda-mm-delegation-plan]].
|
||||
> Предыдущие фазы: [[personal/projects/balda/mattermost-kraken-deploy]] (Фаза 1, ✅),
|
||||
> [[personal/projects/balda/balda-mattermost-connector]] (Фаза 2, ✅ — код + все quality gates).
|
||||
> [[personal/projects/balda/balda-mattermost-connector]] (Фаза 2, ✅ — код + PR #8).
|
||||
|
||||
---
|
||||
|
||||
## 🔴 СТАТУС: НЕ ГОТОВО — бот не отвечает аккаунту Alex
|
||||
## ✅ ПРИЁМКА ПРОЙДЕНА (2026-09-26, образ `balda-mm:0.1.10`)
|
||||
|
||||
**Сквозной путь проверен ОТ АККАУНТА ALEX — не от тестового.** Прошлая «приёмка» от
|
||||
`testuser` была ложной; эта — настоящая.
|
||||
|
||||
### Лента канала `balda-test` (`7bjw4g7o1jdsbmjbqd649xxgaw`)
|
||||
|
||||
```
|
||||
1790413414689 | edxrgupoxiyig5gzmr79tjypbme | слово ← ОТВЕТ БОТА
|
||||
1790413409055 | cbwsorzwoigbtrdnteugnx4aqo | @balda скажи одно слово ← пост ALEX
|
||||
```
|
||||
|
||||
### Лог обработки — авторизация прошла
|
||||
|
||||
```json
|
||||
{"component":"balda.handlersfx.mattermost","session_id":"mm-c-7aafea13",
|
||||
"settlement_outcome":"accepted","settlement_stage":"accepted","error_class":"none",
|
||||
"message":"conversational ingress settled"}
|
||||
{"message":"assembled provider user content","input_text_char_count":30}
|
||||
```
|
||||
|
||||
**`settlement_stage=accepted`** — не `unauthorized`. Именно этого не хватало всё время.
|
||||
|
||||
### Привязка владельца — чистая
|
||||
|
||||
```
|
||||
channel_type = mattermost
|
||||
principal = cbwsorzwoigbtrdnteugnx4aqo ← БЕЗ префикса (требование GetUserByBinding)
|
||||
display_name = mattermost:cbwsorzwoigbtrdnteugnx4aqo ← ОДИНАРНЫЙ префикс, мусора нет
|
||||
```
|
||||
|
||||
Двойной префикс вылечен **в коде** (идемпотентный `MattermostSubject`), а не в БД — в этом
|
||||
была ошибка прошлого раза.
|
||||
|
||||
### Метрики здоровья
|
||||
|
||||
| Метрика | Значение |
|
||||
|---|---|
|
||||
| `bad_seq` / `Invalid sequence` | **0** ✅ |
|
||||
| `pong` | 6 (пинг работает) |
|
||||
| `RestartCount` | **0** ✅ |
|
||||
| Образ | `balda-mm:0.1.10` (коммит `9f1e6c9c`) |
|
||||
| Старт | `mattermost transport configured` → `websocket connected` → `Balda bot started.` |
|
||||
|
||||
### Как деплоилось
|
||||
|
||||
Сборка на Mac из PR-коммита → `docker save` → zstd (**распаковка на Mac**) → `docker load`
|
||||
на Kraken → `tools/mm-switch-image.sh` (бэкап compose + `--force-recreate`).
|
||||
|
||||
⚠️ Проверка CA в образе: `docker save` даёт OCI-формат, файлы в `blobs/sha256/*` —
|
||||
`tar -tf image.tar | grep ca-certificates` даст **ложный 0**. Смотреть `docker inspect` →
|
||||
`SSL_CERT_FILE` в `Config.Env`, либо распаковывать слои.
|
||||
|
||||
### ⚠️ Известные не-блокеры
|
||||
|
||||
1. **`warn: getMe response missing result`** при старте — косметика startup-лога, на работу
|
||||
не влияет (`bot_user_id_set=true`, ответы идут).
|
||||
2. **Сессия `mm-c-7aafea13` хранит `transport_user_id = c6udeze8dfrdxm5jbgq55bd58r`**
|
||||
(это `testuser` — id прошлого владельца, записан при создании сессии в прошлой сессии).
|
||||
Авторизация идёт по `principal` из bindings и проходит верно, ответ доставляется.
|
||||
Чистая сессия — `/reset` в канале. На работу не влияет (проверено).
|
||||
|
||||
### Инструменты деплоя
|
||||
|
||||
| Скрипт (в `~/Developer/balda/tools/`, git-ignored) | Назначение |
|
||||
|---|---|
|
||||
| `mm-switch-image.sh` | смена тега образа в compose + бэкап + recreate (идемпотентно) |
|
||||
| `mm-whoami.sh` | какой MM-аккаунт у PAT (`/users/me`) — **обязательно перед приёмкой** |
|
||||
| `mm-post-as.sh`, `mm-post-user.sh` | пост от человека (единственный валидный тест ингресса) |
|
||||
| `mm-get-owner-token.sh` | `owner_auth_token` из `state.db` через `strings` |
|
||||
| `mm-fix-owner-principal.sh` | снятие транспортного префикса с `principal` (легаси-фикс) |
|
||||
|
||||
🔴 **Приёмка обязывает сверять аккаунт PAT ДО постинга** (`mm-whoami.sh /tmp/admin-tok` →
|
||||
`cbwsorzwoigbtrdnteugnx4aqo | admin`). Иначе тест уходит от чужого аккаунта = ложная приёмка.
|
||||
|
||||
---
|
||||
|
||||
## 🔴 ИСТОРИЧЕСКИЙ РАЗДЕЛ: как искали причину тишины (все закрыто)
|
||||
|
||||
> Ниже — путь диагностики. Все причины устранены, приёмка пройдена (см. выше).
|
||||
|
||||
---
|
||||
|
||||
## 🔴 СТАТУС (устаревший): НЕ ГОТОВО — бот не отвечает аккаунту Alex
|
||||
|
||||
🔴 **Предыдущая запись «ИТОГ: бот работает, приёмка пройдена» была ЛОЖНОЙ.** Сквозной путь
|
||||
проверялся от `testuser` (аккаунт, созданный для тестов), и именно `testuser` оказался
|
||||
|
||||
Reference in new issue
Block a user