# План: вывод 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 тормозил