Skip to content

# SEED_RECOVERY — Аварійне відновлення міста

## Коли використовувати

Цей процес використовується коли: - База даних була повністю втрачена - Немає доступних бекапів - Потрібно швидко відновити мінімально робочий стан DAARION City

## Крок 1: Переконатися що база порожня

    # Перевірити чи є дані
    docker exec daarion-postgres psql -U postgres -d daarion -c "SELECT COUNT(*) FROM microdao;"

    # Якщо є дані - очистити (ОБЕРЕЖНО!)
    docker exec daarion-postgres psql -U postgres -d daarion -c "TRUNCATE TABLE microdao, agents, city_rooms CASCADE;"

## Крок 2: Застосувати міграції

    cd /opt/microdao-daarion

    # Застосувати всі міграції
    for f in migrations/*.sql; do
      echo "Applying: $f"
      docker exec -i daarion-postgres psql -U postgres -d daarion < "$f" 2>&1 | grep -v "ERROR\|NOTICE" || true
    done

## Крок 3: Запустити seed-скрипт

    # Встановити змінні оточення
    export DATABASE_URL="postgresql://postgres:postgres@localhost:5432/daarion"

    # Запустити seed
    python3 scripts/seed_full_city_reset.py

Очікуваний вивід:

    🏙️  DAARION City Emergency Recovery
    ============================================================

    🔗 Connecting to database...
    ✅ Connected

    📦 Seeding MicroDAOs...
      ✅ DAARION DAO
      ✅ Energy Union
      ✅ GreenFood DAO
      ✅ Soul Retreat Hub
    ✅ Seeded 4 MicroDAOs

    🤖 Seeding core agents (NODE1)...
      ✅ DAARWIZZ
      ✅ Helion
      ✅ GreenFood Bot
      ✅ Soul Bot
    ✅ Seeded 4 core agents

    🔗 Linking agents to MicroDAOs...
      ✅ Linked daarwizz → dao_daarion
      ✅ Linked helion → dao_energy
      ✅ Linked greenfood → dao_greenfood
      ✅ Linked soul → dao_soul
    ✅ Linked agents to MicroDAOs

    ============================================================
    ✅ Recovery complete!
       MicroDAOs: 4
       Agents: 4

    📝 Next steps:
       1. Run migrations if needed
       2. Run scripts/sync-node2-dagi-agents.py for NODE2 agents
       3. Upload logos/banners to MinIO if not already done
    ============================================================

## Крок 4: Відновити DAGI-агентів NODE2

    python3 scripts/sync-node2-dagi-agents.py

Це додасть ~50 DAGI-агентів для NODE2 з `config/agents_city_mapping.yaml`.

## Крок 5: Перевірити відновлення

### Перевірка MicroDAOs

    docker exec daarion-postgres psql -U postgres -d daarion -c "
      SELECT slug, name, district, is_platform
      FROM microdao
      ORDER BY pinned_weight;
    "

Очікуваний результат:

         slug      |      name       | district | is_platform
    --------------+-----------------+----------+-------------
     daarion      | DAARION DAO     | Core     | t
     energy-union | Energy Union    | Energy   | t
     greenfood    | GreenFood DAO   | Green    | t
     soul-retreat | Soul Retreat Hub| Soul     | t

### Перевірка агентів

    docker exec daarion-postgres psql -U postgres -d daarion -c "
      SELECT COUNT(*) as total,
             COUNT(*) FILTER (WHERE node_id = 'node-1-hetzner-gex44') as node1,
             COUNT(*) FILTER (WHERE node_id = 'node-2-macbook-m4max') as node2
      FROM agents;
    "

### Перевірка через API

    # MicroDAOs
    curl -s "https://daarion.space/api/city/microdao?limit=4" | python3 -m json.tool | head -20

    # Agents
    curl -s "https://daarion.space/api/city/agents?limit=5" | python3 -m json.tool | head -20

## Крок 6: Завантажити логотипи/банери в MinIO (якщо потрібно)

Якщо логотипи ще не завантажені в MinIO:

1. Відкрити MinIO Console: `http://localhost:9001` (або `https://minio.daarion.space`)
2. Створити bucket `daarion-assets` (якщо не існує)
3. Завантажити файли:
4. `microdao/logo/daarion.png`
5. `microdao/logo/energy-union.png`
6. `microdao/logo/greenfood.png`
7. `microdao/logo/soul-retreat.png`
8. Встановити public read policy для bucket

Або використати MinIO CLI:

    # Встановити mc (MinIO Client)
    # https://min.io/docs/minio/linux/reference/minio-mc.html

    # Налаштувати alias
    mc alias set local http://localhost:9000 assets-admin <password>

    # Завантажити файли
    mc cp ./assets/logos/daarion.png local/daarion-assets/microdao/logo/daarion.png
    mc cp ./assets/logos/energy-union.png local/daarion-assets/microdao/logo/energy-union.png
    # ... і т.д.

## Що відновлюється

### ✅ Відновлюється seed-скриптом:

- 4 базові MicroDAOs (DAARION, Energy Union, GreenFood, Soul)
- 4 core агентів NODE1 (DAARWIZZ, Helion, GreenFood Bot, Soul Bot)
- Зв'язки агентів з MicroDAOs

### ❌ НЕ відновлюється автоматично:

- City Rooms (потрібно запустити `scripts/seed_city_rooms.py`)
- DAGI-агенти NODE2 (потрібно запустити `scripts/sync-node2-dagi-agents.py`)
- Node cache дані (відновляться через heartbeat)
- Логотипи/банери файли (потрібно завантажити в MinIO)

## Швидкий чекліст

- [ ] База даних створена та порожня
- [ ] Всі міграції застосовані
- [ ] `seed_full_city_reset.py` виконано успішно
- [ ] `sync-node2-dagi-agents.py` виконано (для NODE2)
- [ ] Логотипи завантажені в MinIO
- [ ] API повертає дані
- [ ] Frontend відображає MicroDAOs та агентів

## Troubleshooting

### Помилка: "relation does not exist"

Міграції не застосовані. Запустити Крок 2.

### Помилка: "duplicate key value"

Дані вже існують. Seed-скрипт використовує `ON CONFLICT`, тому це нормально.

### Помилка: "connection refused"

PostgreSQL не запущений:

    docker compose -f docker-compose.db.yml up -d db

### Логотипи не відображаються

1. Перевірити що файли в MinIO
2. Перевірити що bucket має public read policy
3. Перевірити що URL в БД правильні:

    docker exec daarion-postgres psql -U postgres -d daarion -c "SELECT slug, logo_url FROM microdao;"