From f76558d6d3702777ac85729719096a0a49152190 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Wed, 14 Oct 2026 20:40:18 +0600 Subject: [PATCH] [2026-10-14] eagle: personal/projects/archive/balda-reference-before-2026-10-14.md personal/projects/balda/balda.md personal/projects/balda/execution-broker.md personal/projects/balda/setup.md personal/projects/balda/soul.md personal/projects/balda/workspace-context.md --- .../balda-reference-before-2026-10-14.md | 227 ++++++++++++++++++ personal/projects/balda/balda.md | 127 ++-------- personal/projects/balda/execution-broker.md | 70 ++++-- personal/projects/balda/setup.md | 91 ++++--- personal/projects/balda/soul.md | 54 +---- personal/projects/balda/workspace-context.md | 58 +---- 6 files changed, 372 insertions(+), 255 deletions(-) create mode 100644 personal/projects/archive/balda-reference-before-2026-10-14.md diff --git a/personal/projects/archive/balda-reference-before-2026-10-14.md b/personal/projects/archive/balda-reference-before-2026-10-14.md new file mode 100644 index 00000000..a044d0e5 --- /dev/null +++ b/personal/projects/archive/balda-reference-before-2026-10-14.md @@ -0,0 +1,227 @@ +# Balda — историческая карточка и шаблоны до 2026-10-14 + +> [!WARNING] Архив +> Эти сведения и инструкции относятся к прежним версиям. Они не описывают текущий запуск и не применяются автоматически. +> Актуальные карточки: [[personal/projects/balda/balda|Balda]], [[personal/projects/balda/setup|runbook]], [[personal/projects/balda/execution-broker|Broker и приёмка]]. +> Старые PR #8 и #12 уже merged. Литералы старых credentials заменены ссылкой на приватное хранилище. + +## Карточка Balda до актуализации + +> **Актуальный статус — 2026-10-03.** Mattermost-интеграция PR #8 уже в upstream. [PR #12](https://github.com/baldaworks/balda/pull/12) по маршрутизации webhook открыт на `73e02156`: 8/8 GitHub checks прошли; повторное ревью после исправления запрошенных изменений ещё ожидается. Balda запущена из чистого текущего HEAD PR `73e02156`, и хеш бинарника в контейнере совпадает с собранным артефактом. Ревьюер запросил изменения в PR #12 из-за 404 при временном сбое lookup session. Исправление `73e02156` уже отправлено: теперь ответ 503, добавлен HTTP-тест; локальные race tests и lint прошли, все 8 checks нового HEAD прошли. До повторного сквозного прогона merge/release — NO-GO. Прежний вывод о другом SHA был ошибкой: `d094943b` относился к внешнему репозиторию Broker, а `deepseekfix` был старой меткой образа. Локальных правок кода Balda в текущем бинарнике нет; новый сквозной прогон ещё нужен. Приёмочный Broker run `run-fbe2cb459fe2965554402aba1bd5fcd0` прошёл; Mattermost отправил апрув и финал в исходный тред. Результат `4dafb9d` был доставлен в `go-cli-test` вручную через Broker API: Balda пропустила автоматическую публикацию. Broker теперь сам проверяет commit/quality/bundle без обязательного SHA от Balda; webhook и плагин rc.19 требуют публикацию до закрытия Story. Новый end-to-end прогон ещё не проведён. Общий release — NO-GO. Детали и текущие проверки: [[personal/plans/balda-callee-prism-plan]]. Ниже сохранена историческая документация; старые статусы PR и конфигурации не являются текущими. + +Аналог Hermes. Go-сервис: берёт задачи из чата (Telegram или Zulip), запускает AI CLI и отвечает. + +## Репо + +- Upstream: https://github.com/baldaworks/balda (старое имя `normahq/balda` — редирект) +- Fork: https://github.com/mallexxx/balda +- Local: ~/Developer/balda +- Ветка: `feat/mattermost-channel` (PR [#8](https://github.com/baldaworks/balda/pull/8), OPEN, 8/8 CI, MERGEABLE) + +### 🔴 Два репозитория — не путать + +| Репо | Что там | PR | +|---|---|---| +| **`baldaworks/balda`** | сам бот, транспорты (Mattermost, Zulip) | [#8](https://github.com/baldaworks/balda/pull/8) Mattermost, OPEN · [#1](https://github.com/baldaworks/balda/pull/1) Zulip, merged | +| **`normahq/runtime`** | библиотека рантайма (`agentfactory`, `hostedagent`) | [#5](https://github.com/normahq/runtime/pull/5) фикс MCP-тулинга, OPEN · **`CHANGES_REQUESTED`** (3 дефекта, план — [[personal/plans/runtime-pr5-toolset-dedup-review-fixes]]) · [#4](https://github.com/normahq/runtime/pull/4) OpenAI tool_calls, OPEN (4 дефекта закрыты, [[personal/plans/runtime-pr4-openai-toolcalls-fixes]]) | + +Форки: `mallexxx/balda`, `mallexxx/runtime` — **разные**, клоны тоже разные. +Детали по runtime-PR → [[personal/projects/balda/balda-valera]]. + +⚠️ **PR из форка: CI не запускается сам.** GitHub требует ручного подтверждения workflows +владельцем репо («Approve and run workflows») → `mergeStateStatus: UNSTABLE` при +`check-runs: total_count 0`. Это не поломка PR. + +## Архитектура + +- NATS JetStream — event bus (embedded) +- SQLite — состояние (owner, sessions, tasks) +- Telegram — через polling или webhook +- Zulip — через outgoing webhook bot +- Providers: codex, opencode, copilot, gemini, claude (ACP protocol) + +## Zulip Integration + +Полностью реализована. Webhook-based (не polling). +Тип бота: **Outgoing webhook** (не Generic bot). + +### Credentials (zulip.qentra.top) + +- Bot email: `balda-bot@zulip.qentra.top` +- API key: `<из приватного хранилища>` +- Server URL: `https://zulip.qentra.top` +- Webhook token: берётся из Settings → Bots → balda-bot → Edit → Token + +### Config (env vars) + +``` +BALDA_ZULIP_BOT_EMAIL=balda-bot@zulip.qentra.top +BALDA_ZULIP_API_KEY=<из приватного хранилища> +BALDA_ZULIP_SERVER_URL=https://zulip.qentra.top +BALDA_ZULIP_WEBHOOK_TOKEN=<из настроек бота> +BALDA_ZULIP_WEBHOOK_ENABLED=true +``` + +### Webhook setup в Zulip + +1. Settings → Bots → balda-bot → Edit +2. Bot type: Outgoing webhook +3. Endpoint URL: `http://:8090/zulip/webhook` +4. Скопировать token → `BALDA_ZULIP_WEBHOOK_TOKEN` + +### Авторизация + +После запуска написать боту в DM: +``` +/start owner= +``` + +## Реализованные команды (Telegram parity) + +| Команда | Статус | +|---------|--------| +| `/start owner=` | ✅ | +| `/start invite=` | ✅ | +| `/goal ` / `/goal clear` | ✅ | +| `/topic` | ✅ (создаёт сессию для нового топика) | +| `/user add ` | ✅ | +| `/user list` | ✅ (с инвайтами + expiry) | +| Typing indicator | ✅ (isDM-aware: true в DM, false в стримах) | +| plan_updates / SendDraftPlain | ➖ no-op (нет аналога в Zulip) | + +## Upcoming: mention-based thread takeover + +Когда `@balda-bot` упоминается в топике без активной сессии — бот автоматически берёт топик под контроль. + +Механизм (аналог whale-thread-guard в Hermes): +- Webhook payload поле `trigger == "mention"` → auto-create session +- `allowed_owners` список в конфиге: Zulip email без токена +- После захвата топик отвечает на все сообщения (обычная сессия) + +## Конфиг и инструкции + +- [`balda/soul.md`](../balda/soul.md) — soul (global_instruction) — редактировать здесь, синхронизировать в config.yaml +- [`balda/workspace-context.md`](../balda/workspace-context.md) — per-provider system_instructions (рабочий проект/стек) +- `~/Developer/balda/.config/balda/config.yaml` — основной конфиг (runtime + balda) +- `~/Developer/balda/.env` — секреты (Zulip API key, webhook token) + +### Запуск + +```bash +cd ~/Developer/balda && ~/.local/bin/balda start +``` + +После первого запуска: из логов взять `owner_token` и отправить боту в Zulip DM: +``` +/start owner= +``` + +## Docs + +- `docs/zulip-webhook.md` — полное руководство по настройке +- `docs/balda.md` — техническая спецификация + +## Исторический шаблон global instruction: Валера / Zulip + +> Это глобальная инструкция Балды (Валеры). Вставляется в system prompt каждой сессии. +> После правки — синхронизировать вручную в `~/Developer/balda/.config/balda/config.yaml` +> (поле `balda.global_instruction`), затем перезапустить Балду. + +--- + +Ты **Валера** — практичный AI-ассистент команды в Zulip. + +## Стиль + +- Отвечай на языке собеседника (русский или English). +- Кратко и конкретно. Никакой воды, никаких вступлений. +- Показывай результат, а не процесс. +- Код и команды — в fenced code blocks. +- Не объясняй что ты сделал — пользователь видит результат. + +## Работа + +- Берёшь задачу и доводишь до конкретного результата. +- Если задача большая или неоднозначная — уточни объём, прежде чем начать. +- Возвращай что-то осязаемое: код, файл, ответ, список шагов. +- Не останавливайся на полпути — если начал, закончи. + +## Ограничения + +- Не делай деструктивных действий (удаление файлов, force push) без явного подтверждения. +- Не пиши в main/master напрямую. Используй ветки. +- Если нужны credentials или secrets — попроси, не угадывай. + +## Память + +- Durable факты и предпочтения команды сохраняй через `balda.memory.remember`. +- Не сохраняй промежуточные состояния задач и временный контекст. +- Сохраняй: соглашения, предпочтения, архитектурные решения, стек. + +## Workspace + +- Если workspace включён (mode=on/auto) — используй worktree per session. +- `balda.workspace.import` — перед началом крупных правок. +- `balda.workspace.export` — после завершения, Conventional Commit message. +- Не делай merge/rebase через raw git если доступны workspace MCP tools. + +## Формат ответов в Zulip + +- Zulip поддерживает Markdown: **bold**, `code`, ```fenced blocks```, таблицы. +- Для длинных результатов используй сворачиваемые блоки: `:::spoiler Заголовок`. +- Цитируй исходное сообщение только если нужна явная привязка. + +## Исторический шаблон workspace context: Claude + +> Provider-level `system_instructions` — дополнение к soul.md для конкретного провайдера. +> Задаётся в `~/Developer/balda/.config/balda/config.yaml` под +> `runtime.providers.claude_code.system_instructions`. + +--- + +## Текущий контекст + +Рабочий проект и стек пока не заданы. Заполни этот раздел когда Балда будет прикреплена +к конкретному репозиторию или задачам. + +Шаблон для заполнения: +``` +## Проект + +- Репо: ~/Developer/ +- Стек: +- Основная ветка: main + +## Команда + +- alex (owner) — говорит по-русски, можно и по-английски +- <другие участники> + +## Соглашения + +- Стиль коммитов: Conventional Commits (feat/fix/chore/docs) +- PR: через gh cli, base=main +- Тесты: +- Линтер: + +## Workflow + +- Задачи приходят в Zulip топик +- Результат: коммит в ветку + краткий отчёт в тот же топик +``` + +## Провайдер + +`claude_code_acp` с моделью `claude-sonnet-4-6`. + +Если нужны особые флаги модели: +```yaml +runtime: + providers: + claude_code: + type: claude_code_acp + system_instructions: | + <вставить сюда содержимое этого файла> + claude_code_acp: + model: claude-sonnet-4-6 +``` diff --git a/personal/projects/balda/balda.md b/personal/projects/balda/balda.md index 26b1e3e6..368d016d 100755 --- a/personal/projects/balda/balda.md +++ b/personal/projects/balda/balda.md @@ -1,115 +1,40 @@ -# Balda (Валера) — AI Worker Bot +# Balda — актуальный обзор -> **Актуальный статус — 2026-10-03.** Mattermost-интеграция PR #8 уже в upstream. [PR #12](https://github.com/baldaworks/balda/pull/12) по маршрутизации webhook открыт на `73e02156`: 8/8 GitHub checks прошли; повторное ревью после исправления запрошенных изменений ещё ожидается. Balda запущена из чистого текущего HEAD PR `73e02156`, и хеш бинарника в контейнере совпадает с собранным артефактом. Ревьюер запросил изменения в PR #12 из-за 404 при временном сбое lookup session. Исправление `73e02156` уже отправлено: теперь ответ 503, добавлен HTTP-тест; локальные race tests и lint прошли, все 8 checks нового HEAD прошли. До повторного сквозного прогона merge/release — NO-GO. Прежний вывод о другом SHA был ошибкой: `d094943b` относился к внешнему репозиторию Broker, а `deepseekfix` был старой меткой образа. Локальных правок кода Balda в текущем бинарнике нет; новый сквозной прогон ещё нужен. Приёмочный Broker run `run-fbe2cb459fe2965554402aba1bd5fcd0` прошёл; Mattermost отправил апрув и финал в исходный тред. Результат `4dafb9d` был доставлен в `go-cli-test` вручную через Broker API: Balda пропустила автоматическую публикацию. Broker теперь сам проверяет commit/quality/bundle без обязательного SHA от Balda; webhook и плагин rc.19 требуют публикацию до закрытия Story. Новый end-to-end прогон ещё не проведён. Общий release — NO-GO. Детали и текущие проверки: [[personal/plans/balda-callee-prism-plan]]. Ниже сохранена историческая документация; старые статусы PR и конфигурации не являются текущими. +Проверено: **2026-10-14**. Balda принимает задачи из чата и связывает provider execution, сессии и интеграции. Текущий локальный запуск — **Mac, Mattermost, Codex ACP**, контейнер `balda-mm-mac`. -Аналог Hermes. Go-сервис: берёт задачи из чата (Telegram или Zulip), запускает AI CLI и отвечает. +## Источники текущего состояния -## Репо +- [[personal/projects/balda/setup|Работающий контейнер, конфигурация, MCP и перезапуск]] +- [[personal/projects/balda/execution-broker|Broker/Balda: проверенные версии, артефакты и незавершённая работа]] +- [[personal/projects/balda/soul|Снимок global instruction]] +- [[personal/projects/balda/workspace-context|Provider context]] -- Upstream: https://github.com/baldaworks/balda (старое имя `normahq/balda` — редирект) -- Fork: https://github.com/mallexxx/balda -- Local: ~/Developer/balda -- Ветка: `feat/mattermost-channel` (PR [#8](https://github.com/baldaworks/balda/pull/8), OPEN, 8/8 CI, MERGEABLE) +Эти карточки различают проверенный код, результаты CI и реально развёрнутый образ. Готовность Broker не следует из открытия PR Balda. -### 🔴 Два репозитория — не путать +## Репозитории и PR -| Репо | Что там | PR | -|---|---|---| -| **`baldaworks/balda`** | сам бот, транспорты (Mattermost, Zulip) | [#8](https://github.com/baldaworks/balda/pull/8) Mattermost, OPEN · [#1](https://github.com/baldaworks/balda/pull/1) Zulip, merged | -| **`normahq/runtime`** | библиотека рантайма (`agentfactory`, `hostedagent`) | [#5](https://github.com/normahq/runtime/pull/5) фикс MCP-тулинга, OPEN · **`CHANGES_REQUESTED`** (3 дефекта, план — [[personal/plans/runtime-pr5-toolset-dedup-review-fixes]]) · [#4](https://github.com/normahq/runtime/pull/4) OpenAI tool_calls, OPEN (4 дефекта закрыты, [[personal/plans/runtime-pr4-openai-toolcalls-fixes]]) | +| Репозиторий / изменение | Подтверждённый статус | +| --- | --- | +| [baldaworks/balda](https://github.com/baldaworks/balda) | Upstream бота; fork — [mallexxx/balda](https://github.com/mallexxx/balda) | +| [PR #8 — Mattermost](https://github.com/baldaworks/balda/pull/8) | **MERGED**, 2026-09-29 | +| [PR #12 — webhook routing](https://github.com/baldaworks/balda/pull/12) | **MERGED**, 2026-10-03 | +| [PR #52 — durable ingress/question recovery](https://github.com/baldaworks/balda/pull/52) | **OPEN**, HEAD `085a0d43`; **11/11 CI SUCCESS**, не draft, mergeable, ещё не merged | -Форки: `mallexxx/balda`, `mallexxx/runtime` — **разные**, клоны тоже разные. -Детали по runtime-PR → [[personal/projects/balda/balda-valera]]. +Checkout кандидата PR #52: `/private/tmp/execution-broker-balda-upstream`, ветка `codex/ingress-outbox-v2`. Локальные проверки и self-review завершены. CI включает восемь required jobs и три native-launch jobs (Ubuntu/macOS/Windows). Зелёный CI не означает, что кандидат установлен: production image остаётся `balda-balda`, его точный ID указан в runbook. -⚠️ **PR из форка: CI не запускается сам.** GitHub требует ручного подтверждения workflows -владельцем репо («Approve and run workflows») → `mergeStateStatus: UNSTABLE` при -`check-runs: total_count 0`. Это не поломка PR. +PR #52 добавляет durable admission и автономное восстановление SQL-сохранённого ответа без повторного Telegram update, затем независимую очистку controls. Включены retention, opt-in NATS budgets и regression tests. Операционные ограничения и миграции SQLite 63 / PostgreSQL 28 описаны в карточке Broker. -## Архитектура +## Конфигурация и владение -- NATS JetStream — event bus (embedded) -- SQLite — состояние (owner, sessions, tasks) -- Telegram — через polling или webhook -- Zulip — через outgoing webhook bot -- Providers: codex, opencode, copilot, gemini, claude (ACP protocol) +Действующий конфиг: `/Users/admin/Docker/balda-mm-mac/config/config.yaml`. Dev-конфиг в `~/Developer/balda` — отдельный файл. Provider — `codex_acp`, reasoning `medium`; Obsidian MCP — `type: http`, `http://host.docker.internal:3101/mcp`. -## Zulip Integration +Balda и локальные агенты владеют оркестрацией, MCP, search/Obsidian и прикладными workflows. Execution Broker владеет disposable worker, lifecycle, credentials, инструментами и артефактами; его незавершённые задачи перечислены отдельно. -Полностью реализована. Webhook-based (не polling). -Тип бота: **Outgoing webhook** (не Generic bot). +Документация кода: [README](https://github.com/baldaworks/balda/blob/main/README.md), [configuration](https://github.com/baldaworks/balda/blob/main/docs/reference/configuration.md), [plugins](https://github.com/baldaworks/balda/blob/main/docs/reference/plugins.md). Для поведения ещё не merged PR смотреть его точный HEAD. -### Credentials (zulip.qentra.top) +## История -- Bot email: `balda-bot@zulip.qentra.top` -- API key: `AtC9FypdIl6F0hNICW0lcOzehrVrWhPr` -- Server URL: `https://zulip.qentra.top` -- Webhook token: берётся из Settings → Bots → balda-bot → Edit → Token - -### Config (env vars) - -``` -BALDA_ZULIP_BOT_EMAIL=balda-bot@zulip.qentra.top -BALDA_ZULIP_API_KEY=AtC9FypdIl6F0hNICW0lcOzehrVrWhPr -BALDA_ZULIP_SERVER_URL=https://zulip.qentra.top -BALDA_ZULIP_WEBHOOK_TOKEN=<из настроек бота> -BALDA_ZULIP_WEBHOOK_ENABLED=true -``` - -### Webhook setup в Zulip - -1. Settings → Bots → balda-bot → Edit -2. Bot type: Outgoing webhook -3. Endpoint URL: `http://:8090/zulip/webhook` -4. Скопировать token → `BALDA_ZULIP_WEBHOOK_TOKEN` - -### Авторизация - -После запуска написать боту в DM: -``` -/start owner= -``` - -## Реализованные команды (Telegram parity) - -| Команда | Статус | -|---------|--------| -| `/start owner=` | ✅ | -| `/start invite=` | ✅ | -| `/goal ` / `/goal clear` | ✅ | -| `/topic` | ✅ (создаёт сессию для нового топика) | -| `/user add ` | ✅ | -| `/user list` | ✅ (с инвайтами + expiry) | -| Typing indicator | ✅ (isDM-aware: true в DM, false в стримах) | -| plan_updates / SendDraftPlain | ➖ no-op (нет аналога в Zulip) | - -## Upcoming: mention-based thread takeover - -Когда `@balda-bot` упоминается в топике без активной сессии — бот автоматически берёт топик под контроль. - -Механизм (аналог whale-thread-guard в Hermes): -- Webhook payload поле `trigger == "mention"` → auto-create session -- `allowed_owners` список в конфиге: Zulip email без токена -- После захвата топик отвечает на все сообщения (обычная сессия) - -## Конфиг и инструкции - -- [`balda/soul.md`](balda/soul.md) — soul (global_instruction) — редактировать здесь, синхронизировать в config.yaml -- [`balda/workspace-context.md`](balda/workspace-context.md) — per-provider system_instructions (рабочий проект/стек) -- `~/Developer/balda/.config/balda/config.yaml` — основной конфиг (runtime + balda) -- `~/Developer/balda/.env` — секреты (Zulip API key, webhook token) - -### Запуск - -```bash -cd ~/Developer/balda && ~/.local/bin/balda start -``` - -После первого запуска: из логов взять `owner_token` и отправить боту в Zulip DM: -``` -/start owner= -``` - -## Docs - -- `docs/zulip-webhook.md` — полное руководство по настройке -- `docs/balda.md` — техническая спецификация +- [[personal/projects/archive/balda-reference-before-2026-10-14|Прежняя карточка, Zulip и старые provider templates]] +- [[personal/projects/balda/balda-mattermost-connector|Исторический дизайн Mattermost-коннектора]] +- [[personal/plans/balda-callee-prism-plan|Архив раннего плана Broker/Callee/Prism]] +- Старые Kraken/Valera/Claudio runbooks помечены историческими и не задают текущий запуск. diff --git a/personal/projects/balda/execution-broker.md b/personal/projects/balda/execution-broker.md index 205ea0ce..150e48ed 100644 --- a/personal/projects/balda/execution-broker.md +++ b/personal/projects/balda/execution-broker.md @@ -1,42 +1,71 @@ # Execution Broker — текущий локальный контур -Проверено: 2026-10-14. Репозиторий: `/Users/admin/Developer/execution-broker`. +Проверено: **2026-10-14**, включая GitHub, репозитории, конфигурацию и работающие контейнеры. -## Состояние приёмки +## Текущий статус -`main` и `origin/main` Broker остаются на `437cbf8`. Локальный кандидат `0.1.0-rc.26` зафиксирован в `codex/production-readiness` на `b64a1ba83c82475b08276ea3fb6a54c99d4a1509`. Смежные исправления Balda — отдельная ветка `codex/production-readiness` на `223b85ad213f77edebd452147d0058588813fe6c`, checkout `/private/tmp/execution-broker-balda-production`. Broker-кандидат не развёрнут и не опубликован. Для актуальной ветки Balda открыт [upstream PR #52](https://github.com/baldaworks/balda/pull/52). Указанная Balda `223b85ad` — отклонённый прототип; актуальный HEAD `085a0d43` находится в отдельной ветке `codex/ingress-outbox-v2`, см. пересмотр после ревью ниже. +**Broker ещё не полностью реализован и не прошёл production-приёмку нового кандидата.** Локальные проверки rc.26 завершены; работающий контур использует прежние образы. Открытый [PR #52](https://github.com/baldaworks/balda/pull/52) относится к **Balda**: все **11/11 GitHub checks SUCCESS**, PR открыт и не draft, mergeable, ещё не merged. Одобрение независимого reviewer отсутствует. -Действующий Broker — `execution-broker:production-a3594c3`, gateway — `execution-broker-gateway:quality-437cbf8`, Prism — `execution-prism-adapter:session-fix-20261004`. Сверка обнаружила drift: `broker.json` и `worker.json` выбирают разные immutable images для `linux-smoke` и `linux-opencode-deepseek`; три coding-профиля worker.json по-прежнему содержат Docker socket/group. В исходниках rc.26 этот доступ запрещён, а несовпадение image pin отклоняется до выделения worker с освобождением недоставленного credential. До применения кандидата старый работающий контур этих защит не получает. macOS bootstrap-пакеты и dynamic build contexts также требуют согласованного обновления Runner/Callee/config/workflow pins. Проверки из предыдущей приёмки ниже относятся к прежним развёрнутым версиям. +## Репозитории и действующие образы -### Локальная приёмка rc.26 — 2026-10-14 +| Компонент | Подтверждённое состояние | +| --- | --- | +| Broker repository | `/Users/admin/Developer/execution-broker`; `main` и `origin/main`: `437cbf8` | +| Broker candidate | `0.1.0-rc.26`; код проверен на `b64a1ba83c82475b08276ea3fb6a54c99d4a1509`; текущая `codex/production-readiness`: `b7106b5` с последующими изменениями документации | +| Broker production | `execution-broker:production-a3594c3` | +| Gateway production | `execution-broker-gateway:quality-437cbf8` | +| Prism production | `execution-prism-adapter:session-fix-20261004` | +| Balda production | контейнер `balda-mm-mac`, образ `balda-balda`, image ID `sha256:56c00100258b1a478484ef20e044981ed0a569ec0ae7d6ba8608e8878a9e1f95` | +| Balda PR candidate | `codex/ingress-outbox-v2`, HEAD `085a0d435f727a1f4628a3259998c6498d42fcf2`, checkout `/private/tmp/execution-broker-balda-upstream` | -По решению владельца GitHub Actions заменены локальным прогоном. Все запущенные финальные проверки прошли: полный Broker `make check build` на macOS ARM64 и Linux ARM64 (Colima), race-тесты Callee на обеих ОС, Balda `go test -race ./...`, golangci-lint и architecture check, проверка плагина на закреплённой версии Balda, source/binary govulncheck и gitleaks всей истории. Для Broker, Callee и Balda — 0 вызываемых уязвимостей; недостижимые findings остаются отдельно видны в полных отчётах. Исправлены Go 1.26.8 → 1.26.9 и x/net 0.58 → 0.60 у Balda/Callee. Gitleaks исключает только точный fingerprint ложного срабатывания на старый Mattermost post ID. +Ветка Broker остаётся локальной. Ветка Balda опубликована в `mallexxx/balda`. Открытие PR не обновляло контейнеры. -Проверены реальные Docker/Callee Human pause → restart → resume → 5 артефактов → cleanup, embedded Beads и signed host-plan с rollback. Отдельно Linux ARM64 архив установлен без Go и source checkout: 4 сервисных образа, MCP, перезапуск Broker, 5 артефактов, succeeded и cleanup=done. Чистая установка закреплённых Claude/OpenCode/Node и ACP initialize прошла на macOS/Linux ARM64 без provider inference. Все четыре release-архива выполнили проверки версий, vault import/revoke, MCP, отказа без авторизации и SQLite backup; AMD64 на обеих ОС проверен через эмуляцию, не на native AMD64. Пять архивов rc.26 и SHA256SUMS лежат в `dist/`. +## Что проверено у Broker rc.26 -Полный отчёт и логи: `/Users/admin/Developer/execution-broker/state/production-readiness-20261014/local-checks.json`. Прежнее закрытие локальной задачи Balda `balda-7w4` пересмотрено после ревью: она переоткрывалась и закрыта заново после исправлений и новых проверок; подробности ниже. Обе ветки и коммиты сохранены локально, checkout чистые; автоматическая проверка запретила push исходников и истории без явного разрешения владельца. +На принятой ревизии прошли `make check build` и проверки Callee на macOS ARM64 и Linux ARM64, race-тесты, adapter/plugin checks, source/binary govulncheck и gitleaks истории. Reachable vulnerabilities — 0; недостижимые findings сохранены в отчётах. -### Границы Broker и оставшаяся работа +Реальный изолированный Docker/Callee flow прошёл Human pause → restart → resume → пять артефактов → cleanup. Linux ARM64 архив отдельно установлен без Go и source checkout: четыре сервисных образа, MCP, перезапуск Broker, пять артефактов, `succeeded`, `cleanup=done`. Закреплённые Claude/OpenCode/Node и ACP initialize проверены на macOS/Linux ARM64 без provider inference. -Предыдущий список смешивал Broker с локальными агентскими сценариями. Полный iPad sign/upload/install/unlock/launch, конфигурация search/Obsidian MCP, PR-workflows, миграция Hermes и решения об общем доступе к vault принадлежат Balda/локальному агенту или конкретному проекту. Включение их в условия готовности релиза Broker было ошибкой. Никакая новая политика прав Obsidian этим прогоном не реализована и не применялась. UI red/green и запись для конкретного приложения — его workflow; Broker отвечает за используемые им общие механизмы worker/guest execution и артефактов. +Четыре платформенных архива rc.26 и отдельный plugin находятся в `dist/` с SHA256SUMS. Runtime probes архивов прошли; результаты AMD64 получены через эмуляцию. Native AMD64 этим не подтверждён. Старые live coding runs ниже относятся к прежним образам. -В актуальном `docs/work-plan.md` остаются собственные задачи Broker: согласованное развёртывание принятых бинарников/образов/bootstrap/plugin, универсальная подготовка стеков Linux/macOS, immutable tooling/Git caches, run-to-run artifact inputs и retention holds. Настраиваемый remote-action API — отдельное будущее расширение; обычный локальный агент может работать по SSH без него. Native AMD64 и off-host/Keychain disaster recovery остаются отдельными неподтверждёнными границами заявляемой поддержки. Физический iPad не является release gate Broker. +## Что остаётся у Broker -### Пересмотр патчей Balda после ревью — 2026-10-14 +| Область | Состояние | +| --- | --- | +| Согласованное развёртывание | Не выполнено для кандидата: Broker/gateway, Runner/Callee, workflow/config pins, VM bootstrap и plugin должны составлять один принятый комплект | +| Финальная live-приёмка | После обновления нужны реальный conversational run, артефакты, credential settlement, cleanup и outage/restart на совместимой версии Balda | +| Универсальная подготовка стеков | В плане: версии инструментов, проверенные источники, readiness probes и восстановимое изменение окружения для Make/C/C++, CMake/Ninja, Python, Node, Rust/JVM на Linux/macOS | +| Immutable caches | Общие tooling/Git caches остаются в плане; существующий Go SDK cache не является универсальным provisioning | +| Артефакты между запусками | Digest-bound inputs и retention holds остаются в плане | +| Платформы и recovery | Native AMD64 и восстановление после потери хоста/Keychain не подтверждены | -Старая `codex/production-readiness` / `223b85ad` — отклонённый прототип. Текущая `codex/ingress-outbox-v2` в `/private/tmp/execution-broker-balda-upstream` имеет HEAD `085a0d435f727a1f4628a3259998c6498d42fcf2`. База завершённых локальных проверок и саморевью — `9dcd366023105e217467510ef39582c2133ac5b9`, включённая merge-коммитом `09224f7e`. При открытии PR upstream продвинулся до `9cb3c2d7` (только QA layout test); ветка 1 behind / 7 ahead, конфликтов нет, дерево чистое, go.mod/go.sum не менялись. По явному запросу владельца ветка опубликована в `mallexxx/balda`, открыт [upstream PR #52](https://github.com/baldaworks/balda/pull/52), ready for review. GitHub CI запустился; его результат хранится отдельно от завершённых локальных проверок. Deploy не выполнялся. +В текущих `broker.json` и `worker.json` сохраняется drift image pins для `linux-smoke` и `linux-opencode-deepseek`; три coding-профиля содержат Docker socket. Защиты rc.26 запрещают такой доступ и отклоняют несовпадение pin до allocation, но прежний production-контур этих новых защит не получает. -Повторное ревью выявило, что прежний replay-only фикс `4713490a` не закрывал webhook P1: pinned tgbotkit возвращает HTTP 200 до handler, поэтому второго callback или исходного text update может не быть. Этот вывод исправляет предыдущую оценку готовности. Коммит `085a0d43` сохраняет ответ и два recovery-маркера одной SQL-операцией. Отдельный `jobs/questionoutbox` запускается через Fx и автономно восстанавливает continuation после ошибки admission или рестарта без нового inbound. После durable receipt admission помечается отдельно, затем через общий outbox сохраняется очистка controls. Ошибка cleanup не переотправляет continuation; положительный Selected следует receipt. Поздняя привязка нового delivery ref возобновляет только cleanup, старый ref не может завершить новую очистку. Повтор идентичного delivery и уже завершённой очистки не создаёт её заново. +Источник объёма работ — `/Users/admin/Developer/execution-broker/docs/work-plan.md`. Настраиваемый remote-action API — отдельное будущее расширение. iPad, прикладные UI/PR workflows, search/Obsidian и общая политика прав локального агента принадлежат Balda или конкретному проекту. Новая политика доступа к Obsidian этим прогоном не вводилась. -Новый regression использует настоящий pinned webhook/runtime, один HTTP update, production control publisher и Telegram adapter/messenger. Десять случаев — callback/text × ошибка AppKV, остановка до admission, ошибка до записи admission-маркера, commit маркера с ошибочным результатом, ошибка admission cleanup — проходят close/reopen SQLite и автономное восстановление без bot/второго callback. Проверяются ровно один continuation, сохранённый ответ и отсутствие раннего удаления controls/положительного ack. Отдельные контракты SQLite/PostgreSQL проверяют restart, delivery binding и независимые маркеры; миграционные тесты сохраняют прежние данные. +## Balda: PR #52 и восстановление ingress -Выполнено самостоятельное ревью всего diff относительно upstream: 58 файлов, включая предыдущие outbox/NATS/architecture/CI/path fixes, новые файлы и документацию. В ходе него отдельный тест воспроизвёл повтор завершённой очистки; ошибка исправлена до финальных проверок. Хэши всех 58 файлов совпали с итоговым коммитом. Это self-review основного агента, не независимый PR review. +[PR #52](https://github.com/baldaworks/balda/pull/52) открыт из `085a0d43` в `baldaworks/balda:main`. Все восемь required checks прошли: lint, test, SQLite/PostgreSQL integrations, architecture lint, projection replay, JetStream, ingress E2E. Дополнительно прошли native-launch jobs **Ubuntu, macOS и Windows** — всего 11/11 SUCCESS. Это проверки Balda; native AMD64 acceptance Broker остаётся отдельной границей. -На окончательном коде прошли `go test -race ./...` в штатном macOS TMPDIR, полные SQLite/PostgreSQL integration race suites, lint (0 issues), architecture, govulncheck (0 reachable vulnerabilities), обе Goose validations, настоящий projection replay 15 раз, JetStream, все ingress job packages, explicit native macOS MCP/stdio/provider/upgrade scenarios и build. PostgreSQL 17-alpine был одноразовым и удалён после тестов. Test cache использовался штатно. Это локальные проверки macOS ARM64; GitHub coverage upload и native Windows/Linux jobs не объявляются выполненными. Первые неудачные fixture/lint прогоны и red/green cleanup regression сохранены вместе с итоговыми логами. +Локально основной агент отревьюил весь diff из 58 файлов. Прошли полный `go test -race ./...` в штатном macOS TMPDIR, обе tagged SQL integration suites, lint, architecture, govulncheck, Goose validations, projection replay 15 раз, ingress/native MCP scenarios и build. Хэши проверенных файлов совпадают с HEAD PR. Одноразовый PostgreSQL удалён. GitHub CI завершился после локальных проверок; полный `test` job завершился 2026-10-14 14:13:40 UTC. -README, configuration, operations и architecture docs обновлены. SQL migrations — SQLite 63 / PostgreSQL 28; перед обновлением нужен согласованный backup. Исторические answered-записи автоматически не переигрываются, потому что их прежний admission неизвестен. Гарантия начинается с сохранённого SQL-ответа; HTTP 200 означает только приём transport. Сохраняются документированные границы: один publisher на state DB, outbox expiry до 24 часов, terminal dedupe/GC семь дней. Предыдущие исправления accepted после локального сохранения, retention и opt-in NATS budgets сохранены; `07546cae` по-прежнему исправляет CI selectors. +Durable admission сохраняет команду до receipt, background publication переживает NATS outage. Terminal receipts/tombstones собираются через семь дней, новые NATS budgets включаются только явно. Retry policy принадлежит `jobs/commandoutbox`, автономное восстановление ответов — `jobs/questionoutbox`; concrete wiring находится в `commandoutboxfx`. -Отчёт, история пересмотренных оценок, хэши self-review и логи: `/Users/admin/Developer/execution-broker/state/production-readiness-20261014/review-followup.json`. Beads `balda-7w4` закрыта после всех финальных проверок в явно локальной временной базе; это не shared upstream task. CLI: `/private/tmp/execution-broker-native-tools/bd`, в PATH не установлен; проектная база без issue_prefix не переинициализировалась. +Ответ и два recovery-маркера сохраняются одной SQL-операцией. Worker восстанавливает continuation без нового inbound, после receipt отдельно сохраняет cleanup controls. Ошибка cleanup не переотправляет continuation, положительный Telegram Selected следует durable admission. Late delivery binding и повтор завершённой очистки проверены. Regression использует реальный pinned webhook/runtime, production control publisher, один HTTP update и десять failure/restart случаев для callback/text; второго bot/callback после reopen нет. + +SQLite migration **63** / PostgreSQL migration **28** требуют согласованного backup. Исторические answered-записи не переигрываются автоматически. Гарантия начинается с SQL settlement; webhook HTTP 200 означает transport intake. Сохраняются границы: один publisher на state DB, outbox pending lifetime до 24 часов, terminal dedupe семь дней. PR ещё не merged; его исправления не объявляются развёрнутыми. + +Прежняя Balda `codex/production-readiness` / `223b85ad` — отклонённый прототип, оставленный для истории. Источником текущей реализации является PR #52. PR [#8](https://github.com/baldaworks/balda/pull/8) merged 2026-09-29, PR [#12](https://github.com/baldaworks/balda/pull/12) merged 2026-10-03. + +## Навигация и доказательства + +- [[personal/projects/balda/setup|Balda: действующая конфигурация и перезапуск]] +- [[personal/projects/balda/balda|Balda: обзор и актуальные PR]] +- `state/production-readiness-20261014/review-followup.json` — текущий Balda diff, self-review, проверки, PR/CI и история пересмотренных выводов. +- `state/production-readiness-20261014/local-checks.json` — исторический прогон Broker rc.26. Его результаты по старому Balda prototype не заменяют текущий review-followup. +- `state/production-readiness-20261014/balda-v5-reviewed-files.json` — хэши 58 проверенных файлов; полные логи лежат рядом. +- Beads `balda-7w4` закрыта в явно локальной временной базе. Это не shared upstream issue и не независимый PR review. +- [[personal/plans/balda-callee-prism-plan|Архив прежнего плана]], [[personal/projects/archive/balda-reference-before-2026-10-14|архив прежней карточки и шаблонов]]. ### История приёмки действующих версий @@ -82,4 +111,5 @@ Detached HEAD — штатный checkout закреплённой ревизи `execution_diagnostics` проверяет checksum артефактов и извлекает bounded причину Callee или Runner из `callee.log`, даже без `quality.json`, для failed, expired и canceled. Реальный expired run проверен через MCP после развёртывания fd29974. Отдельным тестом воспроизведён прежний отказ журнала для длинного Human: теперь вопрос до 256 КиБ сохраняется целиком, Human event ограничен 512 КиБ, остальные события — 32 КиБ. Конкретная ошибка обработки события сохраняется в редактированном логе Runner. Ошибки cleanup записываются отдельно в cleanup_error и не заменяют исходную причину исполнения. Cleanup, завершившийся во время отложенной доставки terminal, получает отдельное уведомление; более поздний receipt не скрывает его. -Подробные контракты: `docs/telegram-approvals.md`, `docs/operations.md`, `docs/protocol.md`, `docs/testing.md`. Будущие host permissions, SSH command catalog, iPad и прочие миграционные задачи — отдельные планы в `docs/work-plan.md`; они не объявлены реализованными этой приёмкой. +Подробные контракты: `docs/telegram-approvals.md`, `docs/operations.md`, `docs/protocol.md`, `docs/testing.md`. Собственные задачи Broker и границы релиза перечислены в `docs/work-plan.md`. iPad, search/Obsidian, общие права локального агента и персональные workflows относятся к вызывающему проекту или Balda; они не являются release gates Broker. + diff --git a/personal/projects/balda/setup.md b/personal/projects/balda/setup.md index 3f3b436e..e2a3b8cf 100755 --- a/personal/projects/balda/setup.md +++ b/personal/projects/balda/setup.md @@ -1,87 +1,82 @@ # Balda — актуальный локальный запуск -Execution Broker, Telegram-одобрения и текущая приёмка: [[personal/projects/balda/execution-broker|Execution Broker — текущий локальный контур]]. +Проверено: **2026-10-14** по работающему контейнеру, Compose, конфигурации и GitHub. -Broker-кандидат 2026-10-14: `0.1.0-rc.26` / `b64a1ba`, локальные проверки сохранены отдельно. Старая Balda `223b85ad` / `codex/production-readiness` отклонена. Текущая `codex/ingress-outbox-v2` / `085a0d43` синхронизирована merge’ем с upstream `9dcd3660` в `/private/tmp/execution-broker-balda-upstream` (1 behind / 7 ahead после нового QA-only коммита upstream `9cb3c2d7`, конфликтов нет, дерево чистое). +Обзор: [[personal/projects/balda/balda|Balda]]. Broker, готовность кандидата и оставшаяся работа: [[personal/projects/balda/execution-broker|Execution Broker — текущий локальный контур]]. -Прежний replay-only фикс Telegram был недостаточен: webhook HTTP 200 предшествует handler. Теперь ответ и recovery-маркеры сохраняются атомарно в SQL, а worker восстанавливает continuation после рестарта без второго update; controls durably допускаются после continuation. Реальный single-update webhook regression с production control publisher прошёл десять failure/restart случаев для callback и текста. Самостоятельно проверен весь diff ветки (58 файлов); прошли финальный полный race-gate, обе storage integration suites, lint/architecture/security/migrations, projection/JetStream/ingress, native macOS MCP scenarios и build. SQLite migration 63 / PostgreSQL migration 28 требуют backup; исторические answered-записи не переигрываются. Полные границы и логи — в карточке выше. +## Что работает сейчас -По явному запросу владельца ветка опубликована в `mallexxx/balda`; открыт [upstream PR #52](https://github.com/baldaworks/balda/pull/52), GitHub CI запустился. Изменения не развёрнуты; контейнер `balda-mm-mac` остаётся на прежнем образе. Публикация PR не меняет действующий сервис. +| Параметр | Фактическое значение | +| --- | --- | +| Хост / контейнер | Mac / `balda-mm-mac` | +| Канал | Mattermost | +| Provider | `codex`, type `codex_acp`, reasoning effort `medium` | +| Образ | `balda-balda`, image ID `sha256:56c00100258b1a478484ef20e044981ed0a569ec0ae7d6ba8608e8878a9e1f95` | +| Compose | `/Users/admin/Docker/balda-mm-mac/docker-compose.yml` | +| Активный конфиг | `/Users/admin/Docker/balda-mm-mac/config/config.yaml` | +| State / plugins | `/Users/admin/Docker/balda-mm-mac/state` | +| Workspace | `/Users/admin/Docker/balda-mm-mac/work` | +| Home volume | `balda_balda-home`, mounted в `/home/node` | -_Проверено: 2026-10-09._ +Config bind-mounted в `/workspace/.config/balda` read-only для контейнера; state и work доступны ему на запись. Файл `~/Developer/balda/.config/balda/config.yaml` относится к отдельному dev checkout и не управляет этим контейнером. -> Это основной runbook для текущей Balda на Mac. Старые документы про `balda-agent-valera-1`, Zulip и Kraken — исторические. +## Проверенная ветка и PR -## Текущая схема +[PR #52](https://github.com/baldaworks/balda/pull/52): `codex/ingress-outbox-v2`, HEAD `085a0d43`, **OPEN**, не draft, mergeable; все **11/11 CI checks SUCCESS**, включая native Ubuntu/macOS/Windows. PR ещё не merged и не развёрнут. -- Хост: Mac. -- Контейнер: `balda-mm-mac`. -- Канал: Mattermost. -- Провайдер: Codex ACP. -- Compose: `/Users/admin/Docker/balda-mm-mac/docker-compose.yml`. -- Конфиг: `/Users/admin/Docker/balda-mm-mac/config/config.yaml`. -- Состояние и managed plugins: `/Users/admin/Docker/balda-mm-mac/state`. -- Рабочие каталоги: `/Users/admin/Docker/balda-mm-mac/work`. +Локальные race/integration/lint/security/migration/E2E проверки и self-review 58 файлов завершены. Исправление сохраняет SQL handoff ответа и восстанавливает continuation после рестарта без второго webhook update; controls durably допускаются после continuation. SQLite migration 63 / PostgreSQL migration 28 требуют backup; исторические answered-записи автоматически не переигрываются. Подробности и границы — в карточке Broker выше. -Каталоги `config`, `state` и `work` bind-mounted в контейнер. Домашний каталог контейнера хранится в Docker volume `balda_balda-home`. +PR #8 и #12 уже merged. Старые ссылки на открытые #8/#12, Kraken, Валеру и Zulip относятся к архивам. -## Что применять какой командой +## Изменения и перезапуск | Изменение | Действие | -|---|---| -| Только содержимое `config/config.yaml` | `docker restart balda-mm-mac` | -| `.env`, environment, mounts или service definition в Compose | `docker-compose up -d balda` | -| Новый image/tag | `docker-compose pull && docker-compose up -d balda` | -| Изменение исходного кода | Собрать image, затем `docker-compose up -d balda` | -| Managed plugin | Использовать `/plugin install\|upgrade\|enable\|disable\|remove` | -| Plugin/skill для уже открытой беседы | `/reset` после активации изменения | +| --- | --- | +| Только host `config/config.yaml` | `docker restart balda-mm-mac`: процесс перечитывает конфигурацию при старте | +| `.env`, environment, mounts, service definition | Из каталога Compose: `docker-compose up -d balda` | +| Новый image | Сначала получить или собрать выбранный образ, затем `docker-compose up -d balda`; в действующем Compose нет build-секции | +| Код в checkout | Сам по себе не обновляет образ; нужен отдельный build и применение выбранного image | +| Изменение catalog / skills существующей беседы | Обычный `/reset` для выбора текущего capability snapshot | -`docker restart` перечитывает bind-mounted `config.yaml`, потому что Balda читает его при старте процесса. Он не перечитывает `.env` и не применяет изменения Compose. +`docker restart` не применяет изменения Compose или `.env`. `--force-recreate` для изменения только config.yaml не требуется. До смены image сохраняют согласованный state backup и прежний image/config для отката. -Принудительное `--force-recreate` для изменения только `config.yaml` не требуется. +## Plugins, skills и инструкции -## Plugins и skills +Managed plugin revisions неизменяемые; вручную редактировать их содержимое в state нельзя. Каноническая документация выбранной ветки описывает управление пакетами через **Backoffice → Operations → Plugins**: Installed/Marketplaces, review exact revision, install/upgrade/enable/disable/rollback/remove. Проверять доступность поверхности на используемой версии, а не переносить команды из архивных runbooks: [plugins reference](https://github.com/mallexxx/balda/blob/085a0d435f727a1f4628a3259998c6498d42fcf2/docs/reference/plugins.md). -Managed plugin revisions в `state` неизменяемые и проверяются по digest. Их нельзя редактировать вручную в папке. Изменения устанавливаются через команды `/plugin`. +Management не сбрасывает существующие сессии. Новая сессия выбирает текущий catalog; существующая принимает capabilities через обычный `/reset`. Standalone skills также редактируются отдельно от уже закреплённого session snapshot. -Каталог плагинов обновляется в работающем процессе после install/upgrade/enable/disable/remove. Уже созданная сессия закреплена за старым snapshot, поэтому для неё нужен `/reset`. - -Файлы standalone skills редактировать можно, но существующая сессия также увидит новый snapshot только после `/reset`. +[[personal/projects/balda/soul|Global instruction]] содержит сверенный снимок `balda.global_instruction`. [[personal/projects/balda/workspace-context|Provider context]] описывает `runtime.providers.codex.system_instructions`; сейчас отдельное значение не настроено. Редактирование заметки не меняет работающий конфиг. ## Codex ACP -Актуальный reasoning effort: `medium`. - -Codex авторизация хранится в home-volume контейнера. Для headless-входа: +Reasoning effort в активном конфиге — `medium`. Авторизация CLI хранится в home volume. Для отдельного headless-входа используется команда из каталога Compose: ```bash -cd /Users/admin/Docker/balda-mm-mac docker-compose run --rm --entrypoint codex balda login --device-auth ``` ## Obsidian MCP -Codex ACP поддерживает `stdio` и Streamable HTTP. SSE-конфигурация не поддерживается. +Проверенный блок активной конфигурации находится в `runtime.mcp_servers`: ```yaml -mcp_servers: - obsidian: - type: http - url: http://host.docker.internal:3101/mcp - name: obsidian +runtime: + mcp_servers: + obsidian: + type: http + url: http://host.docker.internal:3101/mcp ``` -После изменения только этого блока: +Используется Streamable HTTP. Для Codex ACP SSE-конфигурацию из старых заметок не переносить. После изменения этого блока нужен перезапуск Balda. Новая политика прав vault или folders здесь не вводится. -```bash -docker restart balda-mm-mac -``` - -## Проверка +## Диагностика ```bash docker ps --filter name=balda-mm-mac docker logs --tail 120 balda-mm-mac ``` -В логах должны быть успешная инициализация Codex ACP, готовность provider и подключение Mattermost WebSocket. +Проверять успешный startup provider и подключение Mattermost. Не копировать токены, cookie или login URLs из логов в заметки. + +Архив старых схем и шаблонов: [[personal/projects/archive/balda-reference-before-2026-10-14]]. diff --git a/personal/projects/balda/soul.md b/personal/projects/balda/soul.md index c7c5e3f9..41f5e54a 100755 --- a/personal/projects/balda/soul.md +++ b/personal/projects/balda/soul.md @@ -1,49 +1,21 @@ -# Balda Soul — Global Instruction +# Balda — global instruction -> Это глобальная инструкция Балды (Валеры). Вставляется в system prompt каждой сессии. -> После правки — синхронизировать вручную в `~/Developer/balda/.config/balda/config.yaml` -> (поле `balda.global_instruction`), затем перезапустить Балду. +Проверено: **2026-10-14**. Ниже точный снимок `balda.global_instruction` из активного `/Users/admin/Docker/balda-mm-mac/config/config.yaml`. Он относится к контейнеру `balda-mm-mac`; dev-конфиг в `~/Developer/balda` является отдельным файлом. ---- +Порядок инструкций в Balda: built-in → `balda.global_instruction` → `runtime.providers..system_instructions`. Текущий provider — `codex`; отдельные provider-level инструкции не настроены. -Ты **Валера** — практичный AI-ассистент команды в Zulip. +## Действующее значение -## Стиль +Ты Балда — AI-помощник в Mattermost. -- Отвечай на языке собеседника (русский или English). -- Кратко и конкретно. Никакой воды, никаких вступлений. -- Показывай результат, а не процесс. -- Код и команды — в fenced code blocks. -- Не объясняй что ты сделал — пользователь видит результат. +Отвечай кратко и по делу. Русский или English — как к тебе обратились. +Код и команды в fenced code blocks. +Не объясняй процесс, показывай результат. +В каналах ты отвечаешь только когда тебя упомянули через @balda. +For execution-broker calls, use the exact current Balda Session ID shown under Session in the system instruction as chat_id and an empty topic_id. The channel type is also shown there; never infer Telegram from numeric Mattermost metadata. Numeric chat_id=0 and topic_id=0 are transport placeholders and must never be sent to execution tools. Never ask the user to supply a Session ID. If an existing Story has chat_id=0 or topic_id=0, create a new Story and Task with the current Session ID and new Story and run idempotency keys before starting a new execution. Do not reuse the placeholder-bound Story because Prism cannot sync it. At a coding approval question, forward the exact free-text requirement change with execution_respond for that run; Callee will regenerate the plan and ask again without a new Story or run. Reply approved only after the user approves the latest plan. -## Работа +## Как поддерживать этот снимок -- Берёшь задачу и доводишь до конкретного результата. -- Если задача большая или неоднозначная — уточни объём, прежде чем начать. -- Возвращай что-то осязаемое: код, файл, ответ, список шагов. -- Не останавливайся на полпути — если начал, закончи. +Изменение заметки само по себе не меняет production-конфигурацию. Изменение глобальных инструкций применяется отдельно через активный host config и перезапуск Balda по [[personal/projects/balda/setup|runbook]]. При последующей актуализации заметку снова сверяют с этим файлом. -## Ограничения - -- Не делай деструктивных действий (удаление файлов, force push) без явного подтверждения. -- Не пиши в main/master напрямую. Используй ветки. -- Если нужны credentials или secrets — попроси, не угадывай. - -## Память - -- Durable факты и предпочтения команды сохраняй через `balda.memory.remember`. -- Не сохраняй промежуточные состояния задач и временный контекст. -- Сохраняй: соглашения, предпочтения, архитектурные решения, стек. - -## Workspace - -- Если workspace включён (mode=on/auto) — используй worktree per session. -- `balda.workspace.import` — перед началом крупных правок. -- `balda.workspace.export` — после завершения, Conventional Commit message. -- Не делай merge/rebase через raw git если доступны workspace MCP tools. - -## Формат ответов в Zulip - -- Zulip поддерживает Markdown: **bold**, `code`, ```fenced blocks```, таблицы. -- Для длинных результатов используй сворачиваемые блоки: `:::spoiler Заголовок`. -- Цитируй исходное сообщение только если нужна явная привязка. +Исторический шаблон для Валеры/Zulip сохранён в [[personal/projects/archive/balda-reference-before-2026-10-14]]. Контекст конкретного provider описан в [[personal/projects/balda/workspace-context]]. diff --git a/personal/projects/balda/workspace-context.md b/personal/projects/balda/workspace-context.md index 52c122fe..18338aea 100755 --- a/personal/projects/balda/workspace-context.md +++ b/personal/projects/balda/workspace-context.md @@ -1,54 +1,22 @@ -# Balda Workspace Context +# Balda — provider context -> Provider-level `system_instructions` — дополнение к soul.md для конкретного провайдера. -> Задаётся в `~/Developer/balda/.config/balda/config.yaml` под -> `runtime.providers.claude_code.system_instructions`. +Проверено: **2026-10-14** по активному конфигу `/Users/admin/Docker/balda-mm-mac/config/config.yaml`. ---- +Текущий provider — `codex`, type `codex_acp`, reasoning effort `medium`. Поле `runtime.providers.codex.system_instructions` **не настроено**; эта заметка не объявляет Balda привязанной к одному репозиторию. -## Текущий контекст +Дополнение для этого provider задаётся в активном host config, отдельно от [[personal/projects/balda/soul|global instruction]]. Пример структуры: -Рабочий проект и стек пока не заданы. Заполни этот раздел когда Балда будет прикреплена -к конкретному репозиторию или задачам. - -Шаблон для заполнения: -``` -## Проект - -- Репо: ~/Developer/ -- Стек: -- Основная ветка: main - -## Команда - -- alex (owner) — говорит по-русски, можно и по-английски -- <другие участники> - -## Соглашения - -- Стиль коммитов: Conventional Commits (feat/fix/chore/docs) -- PR: через gh cli, base=main -- Тесты: -- Линтер: - -## Workflow - -- Задачи приходят в Zulip топик -- Результат: коммит в ветку + краткий отчёт в тот же топик -``` - -## Провайдер - -`claude_code_acp` с моделью `claude-sonnet-4-6`. - -Если нужны особые флаги модели: ```yaml runtime: providers: - claude_code: - type: claude_code_acp + codex: + type: codex_acp system_instructions: | - <вставить сюда содержимое этого файла> - claude_code_acp: - model: claude-sonnet-4-6 + <контекст и соглашения для этого provider> + codex_acp: + reasoning_effort: medium ``` + +Пример — шаблон, а не установленная конфигурация. Описание конкретного проекта должно содержать точный repository/worktree, задачу, критерии приёмки и команды проверок; стек определяется проектом. Изменение заметки не применяет эти настройки к контейнеру. + +Пути, перезапуск и session boundaries: [[personal/projects/balda/setup]]. Старый Claude/Zulip template: [[personal/projects/archive/balda-reference-before-2026-10-14]].