[2026-10-15] eagle: personal/projects/balda/balda.md personal/projects/balda/execution-broker.md personal/projects/balda/setup.md work/projects/vscode-migration/tech-design-xcode-build-server.md work/projects/vscode-migration/xcode-build-server.md

This commit is contained in:
Alexey Martemyanov committed 2026-10-15 12:36:46 +06:00
1 parent ed60df36f8
commit a364f53bbb
5 files changed
+13 -10

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
# Balda — актуальный обзор
Проверено: **2026-10-15**. Balda принимает задачи из чата и связывает provider execution, сессии и интеграции. Текущий локальный запуск — **два инстанса на Mac, Mattermost, Codex ACP**: `balda-mm-mac` и `balda-mm-eagle`. Оба работают на upstream `ee312646`; Eagle имеет те же основные MCP и дополнительный Asana readonly. Точные версии и проверенные границы продолжений — в карточке запуска.
Проверено: **2026-10-15**. Balda принимает задачи из чата и связывает provider execution, сессии и интеграции. Текущий локальный запуск — **два инстанса на Mac, Mattermost, Codex ACP**: `balda-mm-mac` и `balda-mm-eagle`. Оба работают на source `046cc9c9` (upstream `d13035ab` с исправлением контекста канала); Eagle имеет те же основные MCP и дополнительный Asana readonly. Точные версии и проверенные границы продолжений — в карточке запуска.
## Источники текущего состояния
+3 -3
View File
@@ -13,7 +13,7 @@
| Smoke worker | `execution-broker-worker:fee5409`; один SHA256 image pin в Broker и gateway |
| OpenCode worker | `execution-broker-executors:fee5409`; один SHA256 image pin в Broker и gateway, Go SDK 1.26.9 |
| macOS bootstrap | Четыре пакета `*-fee5409.tar.gz` с Runner/Callee этого комплекта |
| Оба Balda | Upstream `ee312646`, image `balda-balda:upstream-ee312646-b1`; подробности в [[personal/projects/balda/setup]] |
| Оба Balda | Source `046cc9c9`: upstream `d13035ab` + исправление контекста канала; image `balda-balda:channel-context-046cc9c9`; подробности в [[personal/projects/balda/setup]] |
| Managed plugin | rc32 у обоих, Enabled=true, Drifted=false; прежние plugin data, revisions и marketplace сохранены |
| Release archives | `0.1.0-rc.32`, source `fee5409`; четыре платформенных архива и plugin в `dist/`, SHA256 проверены |
@@ -33,7 +33,7 @@ Artifact inputs реализованы и развёрнуты через `execu
## Продолжения и одобрения
Generic webhook в текущем Balda запускает изолированное задание. Продолжение исходной сессии использует `balda.state` и `balda.session.wait`; попытка и наблюдатель сохраняются до Start/retry. Потерянный admission восстанавливается через `execution_lookup`, отмена закрывает и поздний идентичный запрос. Прежние callback routes Broker приостановлены; недоставленные cursors сохранены.
Generic webhook в текущем Balda запускает изолированное задание. Канонический канал исходной сессии остаётся Mattermost; Telegram approval не меняет её locator. Продолжение исходной сессии использует `balda.state` и `balda.session.wait`; попытка и наблюдатель сохраняются до Start/retry. Потерянный admission восстанавливается через `execution_lookup`, отмена закрывает и поздний идентичный запрос. Прежние callback routes Broker приостановлены; недоставленные cursors сохранены.
Telegram approval bot получает вопрос только для явно выбранных сессий; иначе вопрос принадлежит исходной беседе. В текущем контуре `telegram_approvals.timeout_seconds=1800`: окно ответа — 30 минут. `min_run_ttl_seconds=3600` требует для новых запусков выбранных сессий общий TTL не меньше часа; более короткий запрос получает `approval_window_too_short` до admission. TTL включает очередь, планирование, ожидание ответа и исполнение; исходный deadline остаётся жёсткой границей и при появлении вопроса не продлевается. Сообщение сначала отправляется без кнопок, message ID сохраняется в state, затем публикуются controls. Рестарт завершает прерванную публикацию или renewal без повторного callback. Устаревшая копия очищается при callback до сохранения update cursor. Ответ владельца передаётся через bound `execution_respond`; модель не подменяет его. `execution_retry` сохраняет точный task, Story, revision, executor и действительное одобрение; новый scope требует нового решения. Для environment checkpoint используется `execution_reconfigure`; обычный retry таких runs запрещён.
@@ -42,7 +42,7 @@ Managed lifecycle и native wait restart проверены на актуаль
## Проверки
- Полные race/vet Broker на macOS ARM64 и Linux ARM64; Callee adapter, source/binary govulncheck — 0 reachable vulnerabilities, secret scan — без находок.
- Свежий Balda upstream: полный race, lint и architecture gate; managed plugin lifecycle и native wait restart.
- Развёрнутый Balda source `046cc9c9`: полный race, lint и architecture gate; SQLite/PostgreSQL migration regressions, оба migration validators, managed plugin lifecycle и native wait restart. Существующий Codex thread продолжился с исправленным Mattermost-контекстом.
- Production service acceptance: настоящий Callee Human → restart Broker/Prism → resume → шесть артефактов с проверенными SHA256 и provenance Git cache → `succeeded`, `cleanup=done`; Task и Story закрыты.
- Настоящая macOS VM: verified Go archive через scoped tunnel, `tooling.json`, один XCTest без ошибок и сохранённый xcresult; восемь артефактов с проверенными SHA256, включая `repository.json`, VM cleanup подтверждён.
- Реальные Make/C, Python, Node и JVM проекты на macOS и Linux; Docker builder/Runner/Callee cache hit и изменение Node SDK; durable смена окружения с двумя рестартами и одним выполнением внешнего действия; отдельная проверка реального `go run` при `/tmp noexec`.
+4 -2
View File
@@ -11,8 +11,8 @@
| Хост / контейнер | Mac / `balda-mm-mac` |
| Канал | Mattermost |
| Provider | `codex`, type `codex_acp`, reasoning effort `medium` |
| Образ обоих инстансов | `balda-balda:upstream-ee312646-b1`, image ID `sha256:2f2294dd0ae3061f5e1f74f15d002f10a3c4075aaf57d6bcf97b57c9f6b95a4f` |
| Balda source | `ee3126460a8f6e2667e9941f4ef68c5f5872b216`; Linux ARM64 binary SHA256 `945763163b29cd6190d21775c4ee46c7c54d1a98cea59f7109c30dbe5b6f460c` |
| Образ обоих инстансов | `balda-balda:channel-context-046cc9c9`, image ID `sha256:59acd17a994526d5122a115da57ab5829f5ff16f4ecfc10ee0a69ba0ee9be469` |
| Balda source | `046cc9c90960d57e2964110710192d7b97a6692c`: upstream `d13035ab` + закоммиченное исправление контекста канала; Linux ARM64 binary SHA256 `4636dccfcc2d32a8bae8d693af42f5638a7bc775e4062f04323a9e52d4f08e75` |
| 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` |
@@ -31,6 +31,8 @@ Eagle работает на том же Mac в `balda-mm-eagle`; Compose, config
## Продолжение задач
Тип канала берётся из канонической привязки сессии. Для Mattermost он остаётся `mattermost`, включая native waits и возврат результата; `human.delivery_channel=telegram` меняет только доставку одобрения. SQLite/PostgreSQL migration исправляет прежний сгенерированный Telegram-заголовок в сохранённых ACP instructions без `/reset`, сохраняя provider thread, capability snapshot и историю. На основном инстансе исправлены семь Mattermost-контекстов, все 1943 прежних события сохранены; у Eagle сохранённых сессий не было. Linux SQLite snapshots обоих инстансов прошли integrity/foreign-key checks. Backup и отчёты: `state/balda-channel-context-20261015/`.
В этой версии generic webhooks выполняют изолированные задания. Они не продолжают исходную сессию. Старые `routes.*.path`, `envelope.target`, `key_from_body`, `mode` и `fallback_to` удалены из конфигурации; listener задаётся через `balda.http`. Сейчас он слушает loopback `127.0.0.1:8095`.
Плагин rc32 использует `balda.state` и штатный `balda.session.wait`: наблюдатель вооружается до Start/retry и возвращается в исходную сессию. Managed lifecycle и restart-контракт проверены; conversational acceptance с реальной моделью ещё открыт. Старые callbacks Broker на `:8090` приостановлены, недоставленные cursors сохранены. Native wait acceptance не является подтверждением доставки сообщения провайдером.
@@ -16,21 +16,21 @@
- an unclear number of users and an unclear owner.
- The Swift language server (sourcekit-lsp) can get build information from a *build server* instead of a Swift package. [sourcekit-xcode-bsp](https://github.com/slime-studio/sourcekit-xcode-bsp) is an open-source build server that reads `.xcodeproj` / `.xcworkspace` with swift-build, the build engine Apple open-sourced from Xcode.
- **Requirements:**
- No change to the Xcode projects, schemes, CI or release, and nothing changes for people who only use Xcode.
- No change to the Xcode projects, schemes, CI or release, and **nothing changes** for people who only use Xcode.
- Opt-in and easy to remove.
- macOS and iOS, including tests and packages.
- **macOS and iOS**, including tests and packages.
- People who use both Xcode and VS Code don't build or index everything twice.
## Problem Statement
Code intelligence and debugging in VS Code and Cursor need build information that today only Xcode has. We want to provide it from the Xcode projects as they are, without restructuring the codebase around it.
Code autocompletion, jump-to-definition and debugging in VS Code and Cursor need build information that today only Xcode has. We want to provide it from the Xcode projects as they are, without restructuring the codebase around it.
## Recommended Approach
Add an opt-in VS Code setup to the repository: a workspace file and a few scripts in `scripts/vscode/`. Nothing else in the repository changes.
**What a developer gets**
- Completion, jump to definition, references and live errors for app, test and package code, on macOS or iOS. One platform is chosen per worktree and can be switched.
- Completion, jump-to-definition, references and live errors for app, test and package code, on macOS or iOS. One platform is chosen per worktree and can be switched.
- Tasks to build any scheme and run unit tests; errors and failed tests show in the Problems panel.
- Debugging with breakpoints:
- the macOS app, launched from the editor;
@@ -39,6 +39,7 @@ An alternative to the [[projects/vscode-migration/tech-design-spm-browser-packag
8. **Index shared with Xcode works:** with Xcode's DerivedData layout (index store = `Index.noindex/DataStore`, `INDEX_REGULAR_BUILD_*` = `Build/…`), units written by an xcodebuild build count as up to date: after building `macOS Browser`, indexing skipped all app files (2,150 files left vs 3,972). BSP prepares in `Index.noindex/SourceKitBuild` so it never shares a build DB with an open Xcode.
9. **Xcode-compatible builds:** `xcodebuild` without `-derivedDataPath` and the wrapper don't rebuild after each other (no-op 26–31 s). With `-derivedDataPath` pointing to the same folder they do.
10. **iOS simulator:** generic destination fails (`fix_libswiftWebkit_simulator.sh` needs `TARGET_DEVICE_OS_VERSION`) → build for a concrete simulator. Debugging: `simctl launch --wait-for-debugger` + lldb-dap attach by **pid** works (breakpoint in `AppDelegate`). lldb-dap with `attachCommands` or with `program` + pid never stops at breakpoints (CLI lldb does) → launch config uses `${command:pickProcess}` (newest first). VS Code substitutes variables before `preLaunchTask`, so run the task first.
10a. **Gray breakpoints in VS Code (macOS app):** the launch configs had `sourceMap` `/^wt → worktree` for all builds. lldb also applies it in reverse when setting breakpoints, so `<worktree>/…/File.swift` became `/^wt/…/File.swift`, which regular (Xcode-mode) debug info doesn't contain → "no locations". Fix: no `sourceMap`; `xcodebuild.sh` writes `.build/debug.lldbinit` per build (source map only for `DDG_WORKTREE_CACHE=1`), launch configs `command source` it in `initCommands`. Confirmed fixed in VS Code 2026-10-15.
11. Index sharing between worktrees: rejected (absolute paths + mtime-based staleness).
12. `workspace/_pollIndex` isn't in release sourcekit-lsp → indexer waits for "Indexing" progress end + 60 s quiet; gives up after 5 min without progress.
13. swift-build service runs in its own process group → stop children first.