[2026-09-29] eagle: C1 частично закрыта — Балда собрана и работает на Mac
- образ balda-mm:0.1.16-mac из bf4a6ae4 (head of upstream), linux/arm64 - контейнер balda-mm-mac Up, WS wss://mm.qentra.top, errors=0 - приёмка живым постом: @balda ответил работает в qentra:balda-test - 4 дефекта закрыты: backoffice bootstrap, врущий mm-bot-token-id, пустой balda_user_bindings, Hermes-редакция секретов - остаток: callee + dsh-acp + bd + prism (шаги 3-7, 9)
This commit is contained in:
1 parent
5907221b3e
commit
05ce4001f1
1 file changed
+75
-2
@@ -2,10 +2,13 @@
|
||||
|
||||
> Обновлён 2026-09-29. Статус: **C0 закрыта. Топология пересмотрена: стек переезжает
|
||||
> на Mac, на Kraken остаётся только MM-сервер.**
|
||||
> ✅ **2026-09-29: БАЛДА СОБРАНА И РАБОТАЕТ НА MAC** — контейнер `balda-mm-mac`,
|
||||
> образ `balda-mm:0.1.16-mac` из `bf4a6ae4`, сквозная приёмка пройдена (бот ответил
|
||||
> в `qentra:balda-test`). Осталось: `callee` + `dsh-acp` + `bd` + prism (шаги 3-7, 9 C1).
|
||||
> ⛔ **2026-09-29: старый Balda-стек на Kraken СНЕСЁН** (контейнеры `balda-mm`,
|
||||
> `balda-executor-mcp`, `obsidian-mcp` + все образы `balda-mm:*`). Mattermost жив.
|
||||
> Решение §6.11 «оставить Kraken-инстанс живым как запасной» — **ОТМЕНЕНО Alex'ом**.
|
||||
> C1-C5 не начаты. Часть [[personal/projects/balda/balda-mm-delegation-plan]].
|
||||
> C1 закрыта **частично**: Балда собрана и работает, callee/prism не начаты.
|
||||
> Опорная заметка по контрактам инструментов: [[personal/tech/callee-prism]].
|
||||
>
|
||||
> 🔴 **Открытая развилка (§6.7):** как давать доступ к `xcodebuild` / `lume` / `docker build` —
|
||||
@@ -643,7 +646,77 @@ callee agent import baldaworks/prism-callee --path pack/callee/prism --prefix pr
|
||||
`/-/v1/search?text=...`. ⛔ Поиск по `scope:normahq` и `scope:baldaworks` даёт пусто —
|
||||
scoped-пакеты так не индексируются.
|
||||
|
||||
### C1 — переезд стека на Mac (2-3 ч)
|
||||
### C1 — ✅ БАЛДА СОБРАНА И РАБОТАЕТ НА MAC (2026-09-29). Шаги 3-9 (callee/prism) не начаты.
|
||||
|
||||
#### Что сделано и проверено
|
||||
|
||||
| # | Шаг | Статус | Доказательство |
|
||||
|---|---|---|---|
|
||||
| 1 | Образ `balda-mm:0.1.16-mac` | ✅ | собран из `bf4a6ae4` = **head of upstream**, linux/arm64, 78.8 МБ |
|
||||
| 2 | MM-бот | ✅ | **тот же `@balda`** — решение Alex, второго бота не заводили |
|
||||
| 3-7 | callee / dsh-acp / bd / prism | ❌ | не начато |
|
||||
| 8 | `obsidian-mcp` рядом | ✅ | контейнер на Mac, `http://host.docker.internal:3101/sse` |
|
||||
| 9 | Сквозная приёмка | ✅ | **лента канала**: `cbwsorzwoi` (Alex) → `@balda ответь одним словом: работает`; `edxrgupoxi` (бот) → **`работает`** (1.7 с) |
|
||||
|
||||
Контейнер: `balda-mm-mac`, Up, `RestartCount=0`, `restart: unless-stopped`,
|
||||
WebSocket `wss://mm.qentra.top/api/v4/websocket` — `connected`, errors=0.
|
||||
|
||||
#### Файлы на Mac
|
||||
|
||||
| Путь | Что |
|
||||
|---|---|
|
||||
| `/Users/admin/Developer/balda` | исходники, `main` = `bf4a6ae4` (head of upstream) |
|
||||
| `/Users/admin/Docker/balda-mm-mac/config/config.yaml` | конфиг |
|
||||
| `/Users/admin/Docker/balda-mm-mac/.env` | `0600`: DEEPSEEK_API_KEY, MM-токен, bot_user_id, server_url |
|
||||
| `/Users/admin/Docker/balda-mm-mac/docker-compose.yml` | `image: balda-mm:0.1.16-mac`, `extra_hosts: host.docker.internal` |
|
||||
| `/Users/admin/Docker/balda-mm-mac/state/` | sqlite `state.db` + nats + session-memory |
|
||||
| `/Users/admin/Docker/balda-mm-mac/secrets/backoffice-adminpw` | `0600`, пароль backoffice |
|
||||
|
||||
**Отличия конфига Mac от Kraken:**
|
||||
- `server_url`: `http://mattermost:8065` → **`https://mm.qentra.top`** (Cloudflare API пропускает, 200)
|
||||
- `executor-mcp` **убран** (контейнер снесён); `obsidian` → `host.docker.internal:3101`
|
||||
- `BRIDGE_URL` / `BRIDGE_SECRET` не нужны
|
||||
|
||||
#### Четыре дефекта при запуске (все закрыты)
|
||||
|
||||
| # | Дефект | Симптом | Фикс |
|
||||
|---|---|---|---|
|
||||
| 1 | **Backoffice-админ не забутстрапен** | crash-loop: `administrator bootstrap is required` | `docker run --rm … balda-mm:0.1.16-mac backoffice bootstrap-admin --username admin` (образ `scratch` — `docker exec` невозможен, только `docker run` с тем же state-томом) |
|
||||
| 2 | 🔴 **`/home/kraken/balda/secrets/mm-bot-token-id` ВРЁТ** | `bot user id mismatch: configured "ejquewpbq…", token belongs to "edxrgupoxi…"` | истинный id — **из API**: `/api/v4/users/me`. Файл на Kraken содержит чужой id, **не доверять** |
|
||||
| 3 | 🔴 **`balda_user_bindings` пуст на чистой базе** | посты приняты (`post accepted for processing`), но **нет ни одной строки `settlement`/`turn_dispatcher`** — молчаливое гашение | `INSERT` binding для аккаунта Alex. На Kraken круг был замкнут (`testuser` уже владелец), на чистой базе — нет; штатный путь `/start owner=<token>` тоже доступен |
|
||||
| 4 | 🔴 **Hermes-редакция секретов калечит подстановки** | `sqlite3 < file` из heredoc с `$VAR` → 0 строк, exit 0 (тихий провал); в `.env` значения `***` | писать **литералы прямо в аргумент** `sqlite3`, БД при **остановленном** контейнере; секреты — через файлы-носители |
|
||||
|
||||
**Рабочая форма записи binding** (единственная сработавшая; контейнер остановлен):
|
||||
```bash
|
||||
cd /Users/admin/Docker/balda-mm-mac && docker-compose stop
|
||||
docker run --rm -v /Users/admin/Docker/balda-mm-mac/state:/state alpine:latest \
|
||||
sh -c 'apk add -q sqlite 2>/dev/null; sqlite3 /state/state.db "DELETE FROM balda_user_bindings; INSERT INTO balda_user_bindings (binding_id,user_id,channel_type,principal,display_name,provenance,created_at,updated_at) VALUES (…);"'
|
||||
docker-compose up -d
|
||||
```
|
||||
⚠️ **НЕ работают** (проверено, 0 строк, exit 0): `sqlite3 < /q.sql` с heredoc-подстановками;
|
||||
многострочный INSERT через `-v /q.sql:/q.sql:ro`.
|
||||
|
||||
#### Приёмка (воспроизводимо, без GUI)
|
||||
|
||||
```bash
|
||||
ssh kraken "docker exec mattermost mmctl --local token generate admin 'acc-$(date +%s)'" \
|
||||
| sed -n 's/^\([a-z0-9]*\):.*/\1/p' > /tmp/tok
|
||||
ssh kraken "bash /tmp/mm-post-admin.sh $(cat /tmp/tok) 7bjw4g7o1jdsbmjbqd649xxgaw '@balda ответь одним словом: работает'"
|
||||
ssh kraken "bash /tmp/mm-feed.sh $(cat /tmp/tok) 7bjw4g7o1jdsbmjbqd649xxgaw 12"
|
||||
```
|
||||
⚠️ `mmctl --local token generate` печатает `токен: имя` — парсить **только первую часть**, иначе получите `api.context.session_expired.app_error`.
|
||||
⚠️ `mm-feed.sh` — **позиционные** аргументы; при неверном числе `jq: Cannot iterate over null`.
|
||||
|
||||
#### ⚠️ Остаточный дефект (неблокирующий, тот же, что на Kraken)
|
||||
|
||||
```
|
||||
session_memory_worker: dead_letter, error_code: model_failure
|
||||
output does not match schema: (root): output is required
|
||||
```
|
||||
`deepseek-chat` не отдаёт structured output нужной схемы → **память сессий не наполняется**,
|
||||
ответы работают. Отдельная задача. Разбор — [[personal/plans/balda-mm-phase4-agents]] §13.
|
||||
|
||||
### C1 (исходный чеклист — для шагов 3-7)
|
||||
|
||||
Объём вырос относительно исходного варианта: теперь это не «установка callee в контейнер»,
|
||||
а **переезд Балды на Mac + установка инструментов рядом**.
|
||||
|
||||
Reference in new issue
Block a user