147 lines
8.8 KiB
Markdown
Executable File
147 lines
8.8 KiB
Markdown
Executable File
# План: вывод 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 тормозил
|