[2026-09-28] eagle: personal/plans/balda-runtime-rebuild-mm-validation.md personal/plans/runtime-pr5-toolset-dedup-review-fixes.md personal/projects/balda/balda-kraken-mm-deploy.md personal/tech/adk-hostedagent-openai-mcp.md
This commit is contained in:
1 parent
3ae2f056d4
commit
1480fa8d95
4 files changed
+410
-106
No files matched your search
@@ -23,8 +23,11 @@
|
||||
|
||||
> Создан 2026-09-26. Обновлён 2026-09-27 (**✅ ФАЗА ЗАКРЫТА — боевая приёмка пройдена, включая
|
||||
> ВЫЗОВ ИНСТРУМЕНТОВ**).
|
||||
> 🔄 **ОБНОВЛЕНО 2026-09-28: задеплоен `balda-mm:0.1.14`** — runtime переведён с локального
|
||||
> форка на **апстрим `v2.1.0`** (PR #4 + #5 влиты), приёмка тулинга и MM пройдена повторно.
|
||||
> Разбор: [[personal/plans/balda-runtime-rebuild-mm-validation]].
|
||||
> Статус: **✅ РАБОТАЕТ. Бот отвечает аккаунту Alex и исполняет MCP-инструменты.**
|
||||
> Текущий образ на Kraken — **`balda-mm:0.1.13`** (см. блок ниже). Первая приёмка боевого
|
||||
> Текущий образ на Kraken — **`balda-mm:0.1.14`** (см. блок ниже). Первая приёмка боевого
|
||||
> пути была на `0.1.10` (коммит `9f1e6c9c`, он же PR baldaworks/balda#8) — но тогда
|
||||
> инструменты не исполнялись.
|
||||
> 🔴 **КОРЕНЬ (исправлено 2026-09-27, проверено кодом):** Balda регистрирует bundled MCP-сервер
|
||||
@@ -224,17 +227,70 @@ display_name = mattermost:cbwsorzwoigbtrdnteugnx4aqo ← ОДИНАРНЫЙ п
|
||||
|
||||
| Скрипт (в `~/Developer/balda/tools/`, git-ignored) | Назначение |
|
||||
|---|---|
|
||||
| `mm-switch-image.sh` | смена тега образа в compose + бэкап + recreate (идемпотентно) |
|
||||
| `mm-switch-image.sh` | смена тега образа в compose + бэкап + recreate (идемпотентно). 🔄 **2026-09-28: тег теперь аргумент** — `mm-switch-image.sh balda-mm:0.1.15`. Раньше был хардкод на строке 9 |
|
||||
| `mm-whoami.sh` | какой MM-аккаунт у PAT (`/users/me`) — **обязательно перед приёмкой** |
|
||||
| `mm-post-as.sh`, `mm-post-user.sh` | пост от человека (единственный валидный тест ингресса) |
|
||||
| `mm-post-admin.sh` | пост от **владельца** через PAT (`mmctl --local token generate`) — настоящая приёмка |
|
||||
| `mm-feed.sh` | чтение ленты канала |
|
||||
| `mm-get-owner-token.sh` | `owner_auth_token` из `state.db` через `strings` |
|
||||
| `mm-fix-owner-principal.sh` | снятие транспортного префикса с `principal` (легаси-фикс) |
|
||||
|
||||
🔴 **Питфоллы скриптов приёмки (найдены 2026-09-28):**
|
||||
|
||||
1. **`chmod +x` обязателен** после `ssh kraken 'cat > /tmp/x.sh' < tools/x.sh`.
|
||||
Без него: `bash: /tmp/mm-post-admin.sh: Permission denied`.
|
||||
2. 🔴 **НЕ пайпить `docker exec curl` в host `jq`:**
|
||||
```bash
|
||||
# ❌ падает: jq: error (at <stdin>:0): Cannot iterate over null (null)
|
||||
docker exec mattermost curl -s -H "$HD" ".../posts" | jq -r '...'
|
||||
# ✅ писать в файл и парсить из файла
|
||||
docker exec mattermost curl -s -H "$HD" ".../posts?per_page=$N" > "$OUT"
|
||||
jq -r '.posts as $p | .order[] | $p[.] | "\(.create_at) | \(.message)"' "$OUT"
|
||||
```
|
||||
Причина — гонка потока `docker exec` со stdin `jq`.
|
||||
3. 📌 **jq-форма для posts-endpoint MM:** `.posts as $p | .order[] | $p[.] | …`.
|
||||
Вариант `.order[] as $o | .posts[$o]` падает на вложенном контексте.
|
||||
4. ⚠️ Проверять `md5` локального и залитого файла — редакция секретов Hermes умеет портить
|
||||
файл молча. И `bash -n` **на хосте**, не глазами.
|
||||
|
||||
🔴 **Приёмка обязывает сверять аккаунт PAT ДО постинга** (`mm-whoami.sh /tmp/admin-tok` →
|
||||
`cbwsorzwoigbtrdnteugnx4aqo | admin`). Иначе тест уходит от чужого аккаунта = ложная приёмка.
|
||||
|
||||
### 🔄 Runtime: с локального форка на апстрим (2026-09-28)
|
||||
|
||||
Раньше: `replace github.com/normahq/runtime/v2 => ./runtime-local` — локальная копия форка
|
||||
с tool_calls (PR #4). Копия была **снапшотом файлов runtime**, снятым руками, без `.git`,
|
||||
и **протухла**: `DedupKey` (PR #5) в ней отсутствовал.
|
||||
|
||||
После мержа PR #4 и #5 в апстрим (тег **`v2.1.0`** = `c41939f` = `upstream/main`):
|
||||
- `go.mod`: `require github.com/normahq/runtime/v2 v2.1.0`, директива **`replace` удалена**;
|
||||
- `Dockerfile.release`: удалён `COPY runtime-local/ ./runtime-local/`;
|
||||
- каталог `runtime-local/` **вынесен из дерева** (был git-ignored).
|
||||
|
||||
📌 **Проверка перед удалением такой копии:** `diff -rq runtime-local <чистый upstream-чекаут>`.
|
||||
В нашем случае отличались ровно 3 файла, и апстрим был новее во всех трёх → потери нет.
|
||||
|
||||
⚠️ **Осиротевший каталог чужого модуля ломает `go-arch-lint`.** Пока `runtime-local/` лежал
|
||||
в корне, arch-lint давал **56 notices** `File /runtime-local/taskmaster/core.go not attached to
|
||||
any component in archfile`, хотя каталог не участвовал в сборке. После выноса →
|
||||
**`OK - No warnings found`**.
|
||||
|
||||
### 🔴 Известный не-блокер: bridge `balda-executor-mcp` (2026-09-28)
|
||||
|
||||
Инструмент `executor_health` возвращает:
|
||||
```
|
||||
rejected by transport: sending "tools/call": Internal Server Error
|
||||
```
|
||||
Диагноз: контейнер `balda-executor-mcp` на Kraken — `Up`, но `HTTP 000`, в логах
|
||||
`json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)`.
|
||||
Локальный Mac-бридж `balda-executor` — `Up 2 days (healthy)`.
|
||||
📌 **Конвейер тулинга при этом ЦЕЛ** — `get_vault_stats` из того же тулсета исполняется штатно
|
||||
(`function_response_part_count=1`). Сломан конкретно bridge к executor, это **отдельная**
|
||||
инфраструктурная задача, не дефект Balda/рантайма.
|
||||
|
||||
---
|
||||
|
||||
|
||||
## 🔴 ИСТОРИЧЕСКИЙ РАЗДЕЛ: как искали причину тишины (все закрыто)
|
||||
|
||||
> Ниже — путь диагностики. Все причины устранены, приёмка пройдена (см. выше).
|
||||
|
||||
Reference in new issue
Block a user