[2026-09-26] eagle: personal/plans/music-tags-review/1-needs-decision.md personal/plans/music-tags-review/2-medium-confidence.md personal/plans/music-tags-review/3-high-confidence.md personal/plans/music-tags-review/music-tags-review.md personal/projects/balda/balda-mattermost-connector.md personal/tech/balda-go-fx-pitfalls.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-26 14:32:09 +06:00
1 parent 519f7c443c
commit 14e9f5703f
6 files changed
+25992

No files matched your search

+41
View File
@@ -1119,6 +1119,47 @@ MM отвечал раз в 30 секунд, ровно на каждый пин
---
## 🔴 Тест-ассерт — это гипотеза, а не истина (PR-проход 2026-09-26)
Дважды за сессию падал **новый** тест, и оба раза неверным оказывался **ассерт**,
а не код. Соблазн «поправить код под тест» — прямой путь сломать работающее.
| Падающий тест | Моя гипотеза | Реальность |
|---|---|---|
| «тред и корневой пост дают одну сессию» | тред — часть канальной сессии | тред — **отдельная** сессия: корневой пост = `mm-c-a4aa02ef`, тред = `mm-t-89bbf64f`; при этом два **разных** ответа в треде дают ОДНУ сессию `mm-t-89bbf64f` — это и есть контракт |
| «`NewIngress` фолбэчит `botUserID` из клиента» | есть fallback | `onStart` **отказывается стартовать** без `bot_user_id` (guard в ingress.go) |
**Процедура при падении нового теста:**
1. Написать одноразовый пробник, печатающий **фактическое** поведение
(`t.Logf` всех вариантов), а не утверждающий желаемое.
2. Сверить с комментарием/доком функции — там часто уже написано, чему код
**обязан** соответствовать.
3. Только потом решать: ассерт или код.
⚠️ Пробник класть в пакет и **удалять** после (`rm mm_locator_probe_test.go`) —
иначе мусор в PR.
## 🔴 `goconst` / `dupword` в новых тестах
`golangci-lint` валит даже тестовые файлы. На MM-тестах поймано 4 замечания,
все — в моём новом коде:
| Линтер | Что | Фикс |
|---|---|---|
| `goconst` | `"channel-1"` — 15 вхождений, `"user-1"` — 3, `"dm-channel-1"` — 3 | константы `testTeamID`/`testChannelID`/`testDMChannelID`/`testUserID` в пакете |
| `dupword` | `"thread channel = %q, channel channel = %q"` — повтор слова `channel` | переформулировать: «thread and channel locators resolve to different channels» |
📌 Линтер **подсказывает** имя существующей константы:
`string 'channel-1' has 4 occurrences, but such constant 'testChannelID' already exists`.
Заводить константы сразу при написании тестов дешевле, чем добивать потом.
## 📌 Артефакты деплоя — вон из PR
`tools/mm-*.sh` (9 ops-скриптов) и `tools/deltas-*.json` (15 файлов дельта-групп)
— **локальный инструментарий**, в PR в апстрим не идут. Оставлять
незакоммиченными и явно перечислять в доке, чтобы не потерять.
В коммиты PR шли только: код транспорта, wiring, тесты, доки.
## Связанные заметки
- [[personal/projects/balda/balda-mattermost-connector]] — Фаза 2, где всё это найдено