[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
This commit is contained in:
1 parent
1480fa8d95
commit
bf7787bcbd
3 files changed
+187
-28
No files matched your search
@@ -1,8 +1,40 @@
|
||||
> Создан 2026-09-28. Статус: **✅ ВЛИТО В АПСТРИМ (2026-09-28T13:22:13Z).**
|
||||
> Мой коммит: **`d4ab923`** (4 файла, +411/−1), ветка `fix/hosted-toolsets-duplicate-endpoint`.
|
||||
> **PR normahq/runtime#5** — **MERGED** (merge-коммит `6775d71`).
|
||||
> Ответ ревьюеру: https://github.com/normahq/runtime/pull/5#issuecomment-5867224210
|
||||
> Репо: `~/Developer/runtime-local`. Связано: [[personal/plans/runtime-pr4-openai-toolcalls-fixes]].
|
||||
> Создан 2026-09-28. Статус: **✅ MERGED В АПСТРИМ 2026-09-28T13:22:13Z (head `facb0d0`).**
|
||||
> Финальная голова PR: **`facb0d0`**. Мейнтейнер добавил **3 фикса поверх** моего `d4ab923` —
|
||||
> см. §0г. Образ Балды переведён на тег **`v2.1.0`** (= `c41939f`, содержит PR #4 + #5).
|
||||
> **PR normahq/runtime#5** — MERGED. Репо: `~/Developer/runtime-local`.
|
||||
> Связано: [[personal/plans/runtime-pr4-openai-toolcalls-fixes]],
|
||||
> [[personal/plans/balda-runtime-rebuild-mm-validation]].
|
||||
|
||||
---
|
||||
|
||||
## 0г. 🔴 Мейнтейнер нашёл 2 реальных дефекта в моём фиксе (`d4ab923` → `facb0d0`)
|
||||
|
||||
Перед мержем в ветку PR #5 добавлены 3 коммита:
|
||||
`f8011c1` fix(agentfactory): preserve MCP dedup metadata ·
|
||||
`e888d5e` fix(agentconfig): validate preferred MCP dedup ·
|
||||
`facb0d0` fix(agentfactory): keep MCP dedup silent.
|
||||
Diff: 5 файлов, +160/−10.
|
||||
|
||||
| # | Дефект в моём фиксе | Фикс мейнтейнера |
|
||||
|---|---|---|
|
||||
| **1** | 🔴 **`hydrateMCPServerConfig` не переносил `DedupKey`/`DedupPreferred`** — собирал новый `MCPServerConfig` поле за полем и **забыл новые поля**. Фикс был бы **мёртв в проде** на пути `Build()` | добавлены `DedupKey: cfg.DedupKey`, `DedupPreferred: cfg.DedupPreferred`. Покрыто тестом `TestFactoryBuildKeepsPreferredDedupEndpoint` (сквозной путь registry → hydration → `hostedToolsets`) |
|
||||
| **2** | `strings.TrimSpace(key)` **нормализовал** ключ → независимо настроенные namespace'ы с пробелами схлопывались (ровно тот cross-tenant риск, который API и предотвращает) | сравнение по **сырому** ключу; проверка пустоты отдельно: `key := resolvedMCP[id].DedupKey; if strings.TrimSpace(key) == ""`. Тест `TestDedupKeyIsOpaque` |
|
||||
| **3** | Две записи с `DedupPreferred: true` в одной группе — **молча** выбиралась одна (зависит от порядка id) | явная ошибка: `mcp dedup key %q has multiple preferred configs`. Тест `TestHostedToolsetsRejectsMultipleDedupPreferredConfigs` |
|
||||
| **4** | `fmt.Printf("[mcp] skipping …")` в **библиотеке** — печать в stdout потребителя | вывод убран (коммит «keep MCP dedup silent») |
|
||||
| **5** | `DedupPreferred: true` без `DedupKey` не валидировался | `ValidateMCPServerConfig`: `dedup_preferred requires dedup_key`. Тест `TestValidateMCPServerConfig_DedupPreferredRequiresDedupKey` |
|
||||
|
||||
📌 **Уроки (durable):**
|
||||
1. 🔴 **Добавляя поле в конфиг — грепнуть ВСЕ места ручного копирования структуры.**
|
||||
`hydrateMCPServerConfig` собирает `MCPServerConfig` поле за полем; компилятор такое **не ловит**
|
||||
(пропущенное поле = zero value, валидный код). Искать `grep -n "MCPServerConfig{"` во всём репо.
|
||||
Это ровно тот класс дефекта, что и «терпимый ассерт» / «копия логики в тесте»: **выглядит
|
||||
рабочим, молчит в проде**.
|
||||
2. ⚠️ **Opaque = opaque.** Назвал ключ «непрозрачным» у вызывающего — не нормализуй его сам.
|
||||
`TrimSpace` выглядел гигиеной, а был дырой безопасности.
|
||||
3. ⚠️ **Библиотека не печатает в stdout.** Логирование — дело потребителя.
|
||||
4. 📌 **Тест сквозного пути ловит то, что юнит-тест уровня функции пропускает.**
|
||||
Мой тест дёргал `hostedToolsets` напрямую и не проходил через hydration — дефект №1 был невидим.
|
||||
Правильный тест — через `f.Build()`.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in new issue
Block a user