$npx -y skills add TserenTserenov/FMT-exocortex-template --skill restore-exocortexRestore IWE memory from an exocortex backup on a new device or after data loss — NL wrapper around restore-from-exocortex.sh.
| 1 | # /restore-exocortex — Восстановление памяти из exocortex |
| 2 | |
| 3 | > **Роль:** R6 Кодировщик |
| 4 | > **Триггер:** «восстанови экзокортекс / память», новое устройство, потеря/повреждение `memory/` |
| 5 | > **Service Clause:** DP.SC.153 (родительский, скиллы); реализация #125 |
| 6 | |
| 7 | ## Обещание (контракт) |
| 8 | |
| 9 | **Вход:** (опц.) путь к governance-репо. По умолчанию `$WORKSPACE_DIR/$GOVERNANCE_REPO` (`~/IWE/DS-strategy`). |
| 10 | **Выход:** восстановленные `memory/` + `extensions/` + `CLAUDE.md` + симлинк `memory/`; отчёт + напоминание перезапустить Claude Code. |
| 11 | **Инвариант:** НЕ перезаписывает населённую `memory/` или `extensions/` без явного подтверждения пользователя. |
| 12 | |
| 13 | > **Оркестрация, не реализация.** Скилл судит (свежее устройство vs существующая инсталляция, резолв пути, подтверждение) и зовёт детерминированный примитив `scripts/restore-from-exocortex.sh`. Сам file-ops не делает. На голом терминале без агента используется скрипт напрямую — это bootstrap-путь (см. SETUP-GUIDE). |
| 14 | |
| 15 | ## Алгоритм |
| 16 | |
| 17 | ### Шаг 1. Резолв скрипта и пути |
| 18 | - Скрипт: `$IWE_SCRIPTS/restore-from-exocortex.sh` → fallback `$WORKSPACE_DIR/FMT-exocortex-template/scripts/restore-from-exocortex.sh`. Нет файла → см. Режим отказа. |
| 19 | - Governance-репо: аргумент пользователя, иначе `$WORKSPACE_DIR/${GOVERNANCE_REPO:-DS-strategy}`. Убедиться, что `<gov>/exocortex/` существует. |
| 20 | |
| 21 | ### Шаг 2. Pre-flight (judgment — здесь LLM уместен) |
| 22 | - Определить целевую auto-memory: `~/.claude/projects/$(echo "$HOME" | tr '/_.' '-')-IWE/memory` (Claude Code слугифицирует `/`, `_`, `.` → `-`; `tr '/' '-'` промахнётся при `_` в username). |
| 23 | - **Пусто/нет** → свежее устройство, восстановление без `--force`. |
| 24 | - **Населена** → существующая инсталляция. Это destructive: показать `--dry-run` и **спросить подтверждение** перед `--force` (Правило 7, исключение «необратимое»). |
| 25 | |
| 26 | ### Шаг 3. Превью → восстановление |
| 27 | 1. Всегда сначала `restore-from-exocortex.sh <gov> --dry-run` — показать пользователю, что будет сделано. |
| 28 | 2. После согласия (или сразу, если memory пуста) — запуск без `--dry-run` (с `--force`, если memory населена и пользователь подтвердил). |
| 29 | |
| 30 | ### Шаг 4. Отчёт |
| 31 | - Сколько memory-файлов восстановлено, восстановлен ли `CLAUDE.md`, создан ли симлинк. |
| 32 | - **Напомнить: перезапустить Claude Code** — память грузится при старте сессии. |
| 33 | |
| 34 | ## Режим отказа |
| 35 | |
| 36 | | Сценарий | Поведение | |
| 37 | |---------|-----------| |
| 38 | | `exocortex/` не найден | Стоп: backup отсутствует/не запушен. Подсказать `git pull` governance-репо или проверить путь | |
| 39 | | Скрипт не найден | До мержа #151 — взять из ветки: `git checkout feat/exocortex-sync-restore -- scripts/restore-from-exocortex.sh`; иначе bug-report | |
| 40 | | memory населена, нет подтверждения | НЕ перезаписывать. Показать dry-run, ждать явного «да»/`--force` | |
| 41 | | Агент ещё не настроен (голое устройство) | Скилл недоступен → инструктировать запуск скрипта из терминала (bootstrap-путь, SETUP-GUIDE) | |
| 42 | |
| 43 | <!-- USER-SPACE --> |
| 44 | <!-- /USER-SPACE --> |