[2026-09-26] eagle: personal/projects/balda/balda-mattermost-connector.md personal/projects/balda/balda-mm-delegation-plan.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-26 02:23:48 +06:00
1 parent 88782f6ad7
commit 47ff9bfacd
2 files changed
+143 -48

No files matched your search

@@ -181,41 +181,37 @@ Mattermost (Alex) — итог + артефакты
2. Сохранить стэш `whale-20260623` в отдельную ветку (не в stash — стэши теряются).
3. Снять текущий compose Валерии/Клавдия в бэкап (`~/Docker/balda-agent/`, `~/Docker/claudio-agent/`).
### Фаза 1 — Mattermost (Kraken) — 🔄 В РАБОТЕ
### Фаза 1 — Mattermost (Kraken) — ✅ СЕРВЕР РАБОТАЕТ
Детальный док: [[personal/projects/balda/mattermost-kraken-deploy]].
1. ✅ Лицензия — self-hosted **Team Edition** (free). Ограничения по числу пользователей
смотреть на момент установки.
2. 🔄 Развернуть MM на Kraken — **БЛОКЕР НАЙДЕН И РЕШЁН**: официальный образ
`mattermost/mattermost-team-edition` существует **только для amd64**, Kraken = arm64.
Официальной поддержки arm64 у Mattermost нет (KB: «not officially supported for production»).
**Решение:** собираем свой образ из **официального arm64-бинаря**
`releases.mattermost.com/11.11.1/mattermost-team-11.11.1-linux-arm64.tar.gz`.
Compose и `.env` на Kraken записаны; сборка запущена.
3. ✅ Порт выбран: **8065** (был свободен). Тома — на USB-HDD (`49e8f586…/docker/mattermost`),
НЕ на SD (иначе SD забьётся — инцидент 2026-06-24).
4. ⛔ **Бота НЕ создавать** — решение Alex 2026-09-26. Токен даст он сам.
5. ⏳ Создать команду + канал для агентов после подъёма.
6. ⏳ Cloudflare hostname **`mm.qentra.top` → HTTP `localhost:8065`** (делает Alex),
затем `MM_SERVICESETTINGS_SITEURL` → `https://mm.qentra.top`.
1. ✅ Лицензия — self-hosted **Team Edition** (free).
2. ✅ Развернуть MM на Kraken. **Блокер arm64 найден и решён:** официальный образ
`mattermost/mattermost-team-edition` — **только amd64**, официальной поддержки arm64 нет.
**Решение:** свой образ из официального arm64-бинаря `releases.mattermost.com`.
🔴 **Сборка — НА MAC, не на Kraken** (Alex, 2026-09-26): Mac — тот же arm64 и в 10× быстрее
(33 с против 346+ с), а buildkit-кэш на Kraken льётся на **SD-карту** (не на data-root).
Результат: `health=healthy restarts=0`, API `{"status":"OK"}` с Kraken и с Mac по LAN.
3. ✅ Порт **8065**; тома на USB-HDD (`49e8f586…/docker/mattermost`), НЕ на SD.
4. ⛔ **Бота НЕ создавать** — Alex даёт токен сам.
5. ✅ Админ `admin@qentra.top` создан (пароль в `.adminpw`).
6. ✅ **Регистрация закрыта** — проверено живым POST → HTTP 501 `signup_email_disabled`.
7. ✅ CF-маршрут `mm → localhost:8065` добавлен Alex'ом.
8. ⏳ `MM_SERVICESETTINGS_SITEURL` → `https://mm.qentra.top`, затем приёмка входом в браузере.
### Фаза 2 — адаптер Mattermost в Балде — 🔄 РАЗВЕДКА ЗАВЕРШЕНА
### Фаза 2 — адаптер Mattermost в Балде — ✅ КОД НАПИСАН, ⏳ ТЕСТЫ
Детальный док: [[personal/projects/balda/balda-mattermost-connector]].
1. ✅ Вместо новой директории `~/Developer/balda-mm` — работаем в `~/Developer/balda`
на ветке **`feat/mattermost-channel`**, созданной от **чистого `upstream/main`**
(`de273d8f`). Это эквивалентно «чистому клону», но без второго рабочего дерева.
2. ✅ Изучен `channel/zulip/*` целиком: adapter (331), client (289), server (316),
inbound (192), locator_codec (229), presentation, `zulipfx/` (module/prompt/structured).
3. ⏳ Написать `channel/mattermost/*` по контракту `transport-presentation-boundary.md`:
- ingress: **WebSocket** `wss://<host>/api/v4/websocket` (не outgoing webhook!);
- delivery: рендеринг Markdown MM, треды через `root_id`, файлы через `file_ids`,
edit-in-place через `PUT /posts/{id}` (в отличие от Zulip, где draft — no-op);
- 7 групп DI, как в `zulipfx/module.go`.
4. ⏳ Shared-слой: `ChannelTypeMattermost`, `TransportMattermost`, `NameMattermostMarkdown`,
`turncmd.SourceMattermost`, колонка в `docs/commands.md`.
⚠️ `channel/router.go` **не** правится — он map-based.
5. ⏳ Quality gates: `go test -race ./...` + `go tool golangci-lint run`.
1. ✅ Ветка **`feat/mattermost-channel`** от чистого `upstream/main` (`de273d8f`).
2. ✅ Изучен `channel/zulip/*` целиком как образец.
3. ✅ **Написан пакет `channel/mattermost/*`** — 12 файлов, ~2200 строк: client, locator_codec,
inbound, adapter (все 9 операций), media, ingress (WebSocket), formatting, presentation,
`mattermostfx/` (4 файла, 7 групп DI).
4. ✅ Shared-слой: `ChannelTypeMattermost`, `TransportMattermost`, `NameMattermostMarkdown`,
`turncmd.SourceMattermost`, `mattermostfx.Module` в `app.go`.
⚠️ `channel/router.go` **не** правился — он map-based (подтверждено).
5. ✅ `go build ./...` = exit 0, `go vet` чист.
6. 🔴 **Незакрыто:** импорт `mattermostfx` в `app.go` (LSP: `undefined: mattermostfx`).
7. ⏳ Тесты по образцу `zulip/*_test.go` + `go test -race ./...` + `golangci-lint run`.
### Фаза 3 — оркестратор на Kraken (~1-2 дня)
1. Развернуть Балду с MM-адаптером на Kraken, провайдер — **DeepSeek** (через API-ключ, не подписка).
@@ -244,11 +240,11 @@ Mattermost (Alex) — итог + артефакты
| Бан подписочного аккаунта за «unusual traffic» | средний | только официальный бинарь; не более 1-2 параллельных задач; не проксировать токен; мониторить письма Anthropic |
| MM-адаптер разъедется с апстримом | высокий | держать как отдельный fork-патч, ребейзить на каждый релиз; либо предложить в апстрим PR |
| Kraken: USB-HDD монтируется ~130 с, есть mount-race | известный | drop-in `RequiresMountsFor` уже применён и проверен reboot'ом; volume не на data-root |
| RPi5 не тянет сборку Балды | средний | собирать образ на Mac arm64, на Kraken только `pull`/`up` |
| Утечка секретов в MM-канал | средний | `balda.permissions.mode: ask`; redaction в job-events уже есть в апстриме |
| Mattermost free-лицензия ограничивает нужное | низкий | проверить лимиты до установки |
| 🔴 **Официального arm64-образа MM НЕ существует** | **подтверждён** | свой образ из официального arm64-бинаря; сторонние community-образы не брать. См. [[personal/projects/balda/mattermost-kraken-deploy]] |
| 🔴 **Hermes маскирует секреты в tool-выводе** | **подтверждён** | `write_file` не редактируется; значения не писать литералами — собирать на хосте. См. [[personal/tech/hermes-secret-redaction-bypass]] |
| RPi5 не тянет сборку | **подтверждён** | 🔴 **собирать ЛЮБЫЕ образы для Kraken на Mac, НИКОГДА на Kraken** — buildkit-кэш льётся на SD, плюс 10× медленнее. Перенос `docker save │ zstd` → `ssh kraken 'docker load'`. См. [[personal/projects/balda/mattermost-kraken-deploy]] |
| Mattermost free-лицензия ограничивает нужное | низкий | Team Edition работает; проверено на 11.11.1 |
| 🔴 **Официального arm64-образа MM НЕ существует** | **решён** | свой образ из официального arm64-бинаря; сторонние community-образы не брать. См. [[personal/projects/balda/mattermost-kraken-deploy]] |
| 🔴 **Hermes маскирует секреты в tool-выводе** | **решён (обход найден)** | `write_file` пишет байт-в-байт и **не** редактируется; маскировка только на ЧТЕНИИ (`code_file=True`). Значения не писать литералами — собирать на хосте. См. [[personal/tech/hermes-secret-redaction-bypass]] |
| 🔴 **uid bind-mount конфликт на Kraken** | **подтверждён (2×)** | владелец тома обязан совпадать с uid из образа. `postgres/`→`70:70`, остальное→`2000:2000`. Тот же класс, что crash-loop `hermes-kraken` |
---
@@ -292,6 +288,15 @@ Mattermost (Alex) — итог + артефакты
→ [[personal/projects/balda/balda-mattermost-connector]]
- Побочно: разобран механизм маскировки секретов Hermes и найден обход.
→ [[personal/tech/hermes-secret-redaction-bypass]]
- **2026-09-26 (позже)**: **Фаза 1 ЗАКРЫТА, Фаза 2 — код написан.**
- Alex потребовал **закрытую регистрацию** в MM — сделано и проверено живым запросом (HTTP 501).
- Alex указал на ошибку: **сборка на Kraken вместо Mac** → перенесена на Mac (33 с против 346+ с),
buildkit-кэш на SD больше не растёт. Урок зафиксирован в §Риски.
- MM на Kraken: `health=healthy restarts=0`, API OK с Kraken и Mac, админ создан.
- Коннектор: 12 файлов написаны, `go build ./...` = exit 0.
- Найдены и починены 3 дефекта деплоя: `CMD ["mattermost","server"]`, `--strip-components` в tar,
двойной uid-конфликт (`postgres/` vs остальное).
- 🔴 Незакрыто: импорт `mattermostfx` в `app.go` + тесты коннектора.
## Связанные заметки
- [[personal/projects/balda/mattermost-kraken-deploy]] — Фаза 1: MM на Kraken (arm64-блокер, деплой)