Files
obsidian-vault/personal/plans/zulip-decommission.md
T

147 lines
8.8 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# План: вывод Zulip из эксплуатации (decommission)
_Создан: 2026-09-29_
## Цель
Снести Zulip-стек на Mac (Colima Docker), **сохранив историю переписки**.
Транспорт Hermes уже переехал на Mattermost — Zulip держится только ради истории.
## Состояние
| Этап | Статус |
|---|---|
| 1. Выгрузка истории в SQLite | ✅ сделано 2026-09-29 |
| 2. Верификация целостности | ✅ сделано |
| 3. Правка ссылок на Zulip DB в скиллах/SOUL | ✅ **сделано 2026-09-29** |
| 4. Снос стека | ⛔ не начато — ждёт команды Alex |
**Артефакт этапа 1:** `~/Documents/zulip_message_history.sqlite` (81.9 MB на диске, 134 734 сообщения)
→ инструкция по поиску в [[tech/zulip-message-history]]
**Артефакт этапа 3:** скилл `message-history-search` + 21 переписанный файл
→ см. §«Этап 3 — что сделано» ниже
ℹ️ **Параллельная задача 2026-09-29 (ЗАКРЫТА):** «отключи автогенерацию скиллов» —
разбор механизма фонового review (`skills.creation_nudge_interval`, `review.allowed_toolsets`)
в [[tech/hermes-self-improvement-review]], §«Как ВЫКЛЮЧИТЬ».
**Внесено:** `creation_nudge_interval: 15 → 0` в `~/.hermes/hermes-whale/config.yaml`,
коммит `d2e1586`. Вариант «+ убрать `skills` из `review.allowed_toolsets`» Alex **не выбрал** —
память продолжает обновляться фоновым review. На этап 4 (снос) не влияет.
## Решение: формат истории
Рассматривались три варианта:
| Вариант | Плюсы | Минусы | Итог |
|---|---|---|---|
| `pg_dump` (custom format) | полный бэкап, восстановим одной командой | нечитаем без psql; тянет за собой весь Postgres | ❌ отклонён |
| Экспорт в markdown-файлы по тредам | читаемо в Obsidian, grep-абельно | 197 файлов, ломает структуру при правках, нет поиска по тексту | ❌ отклонён |
| **SQLite + FTS5** | один файл, структура тредов через FK, полнотекстовый поиск | нужен `sqlite3` CLI | ✅ **выбран** |
**Явное указание Alex:** «никаких вложений и меты. только история переписки».
Поэтому pg_dump, volume `zulip_zulip-data`, аплоады и аватары в выгрузку не попали.
## Этап 3 — что сделано (2026-09-29)
Изначально предлагались варианты A/B/C (переименовать скилл vs переписать тело).
**Alex решил иначе — жёстче:** снести 3 zulip-скилла целиком, из USER.md удалить,
в SOUL и остальных скиллах переписать.
### Снесено (3 скилла)
| Скилл | Роль | Поглощён в |
|---|---|---|
| `zulip-db-forensics` | запросы к Zulip Postgres, forensic-разбор | `message-history-search` |
| `zulip-thread-handoff` | перехват треда у другого агента | `message-history-search` |
| `zulip-bot-routing` | архитектура роутера + диагностика ботов | `message-history-search` |
Удаление через `skill_manage(action='delete', absorbed_into='message-history-search')`.
### Создано (1 скилл)
`~/.hermes/skills/note-taking/message-history-search/SKILL.md` — 7 744 б.
Схема, 5 готовых запросов, синтаксис FTS5, лимит покрытия, питфоллы.
### Переписано (21 файл)
| Файл | Что заменено |
|---|---|
| `~/.hermes/SOUL.md` | RULE 5 — ссылка на `zulip-db-forensics` → SQLite + `message-history-search` |
| `~/.hermes/hermes-whale/SOUL.md` | блок про Zulip DB → путь к SQLite + запрос |
| `hermes-whale/memories/USER.md` | «ищи в базе → Zulip psql» → «→ sqlite3 … СРАЗУ» |
| `project-progress-audit` | 4 места: `related_skills`, Source 2, pitfalls |
| `eagle-dashboard` | восстановление треда после `--replace` |
| `systematic-debugging` | «та же проблема» → поиск в архиве |
| `claude-cli-proxy-diagnostics` (+ ref) | 3 psql → `sender` из `messages` |
| `executor-autonomous-tick` | запрос истории executor'а |
| `vault-profile-onboarding` | Step 4 — восстановление из истории |
| `claude-design` | «Check Zulip DB» → архив |
| `personal-os-daily-brief`, `media-stack-reconciliation-audit`, `htpc-steam-shortcuts`, `truenas-administration/references/zfs-panic-recovery`, `.archive/truenas-zfs-panic-recovery`, `remote-host-administration` | `related_skills` + ссылки |
| `systematic-debugging/references/postgres-fk-cascade-data-loss` | «читай с конца» → архив |
### 🔴 Питфолл: `~/.hermes/SOUL.md` ≠ `~/.hermes/hermes-whale/SOUL.md`
`skills/` — это **симлинк** (`hermes-whale/skills → ~/.hermes/skills`), поэтому правка скилла
видна по обоим путям. А **SOUL.md — два разных файла**:
| Путь | Размер | Дата |
|---|---|---|
| `~/.hermes/SOUL.md` | 9 732 б | 17 мая — RULE 5, «Core Rules» |
| `~/.hermes/hermes-whale/SOUL.md` | 8 244 б | правится этой сессией — ADHD-секция |
Правка только одного оставила бы RULE 5 битым. **Всегда править оба.**
Проверка: `ls -la` — если размеры/даты разные, файлы независимы.
### Оставлено как есть (осознанно)
`docker-balda-service/references/balda-env-recovery.md` и `zulip-router-rules.md` —
там psql читает **живые API-ключи ботов**, это не история. Добавлена шапка-предупреждение
о декоммишене, запросы не тронуты. Если Zulip снесут — файлы придётся переписать.
### Бэкап
`~/.hermes/hermes-whale/backups/20260929-zulip-to-sqlite/` — 464 K, 51 файл
(SOUL.md, USER.md, 3 снесённых скилла целиком, все правимые скиллы).
## Шаг 4 — снос (выполнять ПОСЛЕ шага 3)
```bash
cd ~/Developer/zulip
docker compose down
docker volume rm zulip_zulip-data zulip_zulip-pgdata zulip_zulip-rabbitmq zulip_zulip-redis
docker rmi zulip/docker-zulip:11.6-0
```
### 🔴 Порядок важен: сначала зависимости
1. **`zulip-router`** (`~/Developer/zulip-router/`, порт 8090) — поллит Zulip Events API.
Снести/остановить **до** Zulip, иначе словит restart-loop на мёртвом API.
2. **Hermes `platforms: zulip`** в `~/.hermes/config.yaml` — уже не используется (транспорт
Mattermost), но платформа в конфиге останется висеть. Убрать или выключить.
3. **Bot-роутинг** (Валера/Клавдий/Eagle/Кит webhook `host.docker.internal:8644-8645`) —
уходит вместе с Zulip. Balda-боты остаются без транспорта.
### Что освободится
| Ресурс | Объём |
|---|---|
| Образ `zulip/docker-zulip:11.6-0` | 3.84 GB |
| Volume `zulip_zulip-pgdata` | 503 MB (на диске) |
| Volume `zulip_zulip-data` | 38.1 MB |
| Контейнеры (5 шт) | ~260 MB |
## Проверка перед сносом (обязательно)
- [ ] `sqlite3 ~/Documents/zulip_message_history.sqlite "PRAGMA integrity_check;"` → `ok`
- [ ] `count(*)` из `messages` = **134 734**
- [ ] FTS-запрос по известному слову возвращает результаты
- [ ] Файл продублирован вне Mac (Time Machine / Kraken / NAS) — **не сделано**,
Alex не подтвердил необходимость
## Связанные документы
- [[tech/zulip-message-history]] — SQLite с историей и инструкция по поиску
- [[projects/zulip-router]] — архитектура роутера, конфиг ботов
- [[tech/hermes-whale-mattermost-transport]] — текущий транспорт Hermes
- [[tech/docker-mac-disk-issues]] — контекст: почему Zulip тормозил