# Humanized Stepan — Release Checklist

**Version:** v3 (оновлено з v2.7) | **Date:** 2026-02-24

---

## PRE-DEPLOY

- [ ] **Тести пройдені локально (232/232)**
  ```bash
  python3 -m pytest \
    tests/test_stepan_invariants.py tests/test_stepan_acceptance.py \
    tests/test_stepan_light_reply.py tests/test_stepan_memory_followup.py \
    tests/test_stepan_telemetry.py tests/test_stepan_v28_farm.py \
    tests/test_stepan_v29_consolidation.py \
    tests/test_stepan_v3_session_proactivity_stability.py -v
  ```

- [ ] **Diff review** — перевірити, що змінені тільки:
  - `crews/agromatrix_crew/session_context.py` (новий файл — v3)
  - `crews/agromatrix_crew/proactivity.py` (новий файл — v3)
  - `crews/agromatrix_crew/depth_classifier.py` (stability guard + `session=` param)
  - `crews/agromatrix_crew/run.py` (3 мінімальних гачки session/proactivity)
  - `tests/test_stepan_v3_session_proactivity_stability.py` (новий файл)
  - `docs/*.md` (документація, не runtime)

- [ ] **Env перевірка**
  ```bash
  # На НОДА1 (значення масковані — тільки наявність)
  ssh root@144.76.224.179 "docker exec dagi-gateway-node1 env \
    | grep -E '^AGX_OPERATOR_IDS=|^AGX_STEPAN_MODE=|^TZ=' | sed 's/=.*/=***/' "
  ```
  - [ ] `AGX_STEPAN_MODE=inproc`
  - [ ] `TZ=Europe/Kyiv`
  - [ ] `AGX_OPERATOR_IDS` не порожній

- [ ] **memory-service доступний**
  ```bash
  docker exec dagi-gateway-node1 curl -s http://memory-service:8000/health
  ```

- [ ] **Rollback plan підготовлений** — знати попередній image tag або commit hash

---

## DEPLOY

```bash
cd /opt/microdao-daarion

# 1. Pull змін
git pull origin main   # або потрібна гілка

# 2. Rebuild тільки gateway
docker compose -f docker-compose.node1.yml up -d --build dagi-gateway-node1

# 3. Перевірка старту (чекати ~30 сек)
sleep 30
docker logs dagi-gateway-node1 --since 1m 2>&1 | grep -E "Stepan mode|STEPAN_IMPORTS_OK" | tail -5
```

**Очікувані рядки в логах після старту:**
```
Stepan mode: inproc
STEPAN_IMPORTS_OK=True
```

---

## POST-DEPLOY

### Health перевірка
```bash
# Логи без помилок
docker logs dagi-gateway-node1 --since 5m 2>&1 \
  | grep -E "ImportError|ModuleNotFoundError|Stepan disabled|ERROR" | wc -l
# Очікується: 0
```

### 5 Smoke сценаріїв (Telegram, від оператора)

| # | Повідомлення | Очікування | Лог-перевірка |
|---|---|---|---|
| 1 | `Привіт` | ≤80 символів, без "чим допомогти" | `depth=light, crew_launch=false, session_updated` |
| 2 | `Зроби план на завтра по полю 12` | Deep відповідь, crew запущений | `depth=deep, crew_launch=true, topics_push=true, session_updated` |
| 3 | `а на післязавтра?` | Light, підхоплює тему без нового push; якщо попереднє було light — `stability_guard_triggered` | `depth=light, topics_push=false, session_updated` |
| 4 | `обприскування гербіцидом якщо дощ` | Light + disclaimer "за етикеткою"/"за регламентом" | `depth=light` |
| 5 | `Дякую` | ≤40 символів, без питань | `depth=light, crew_launch=false` |

### Спостереження telemetry v3 (30–60 хв після деплою)

```bash
# Session events (перевірити що є, не занадто багато expired)
docker logs dagi-gateway-node1 --since 1h 2>&1 \
  | grep "AGX_STEPAN_METRIC session_" | tail -80

# Stability guard (має бути, але не домінувати)
docker logs dagi-gateway-node1 --since 1h 2>&1 \
  | grep "AGX_STEPAN_METRIC stability_guard_triggered" | tail -50

# Proactivity (має бути рідко)
docker logs dagi-gateway-node1 --since 1h 2>&1 \
  | grep "AGX_STEPAN_METRIC proactivity_added" | tail -20
```

### Memory validate
```bash
# Перевірити що profile зберігся після deep взаємодії
# (через memory-service API або логи)
docker logs dagi-gateway-node1 --since 10m 2>&1 | grep -E "UserProfile.*updated|FarmProfile.*updated" | tail -10
```

---

## ROLLBACK TRIGGER CONDITIONS

Негайний rollback якщо:
- [ ] `Stepan disabled` у логах після старту
- [ ] `ModuleNotFoundError` або `ImportError` у логах
- [ ] Більше 3 помилок типу `500` у gateway за 5 хв після деплою
- [ ] `light_rate < 0.40` за 30+ повідомлень (занадто багато deep)
- [ ] ZZR disclaimer з'являється на не-ЗЗР контекст > 3 рази за сесію

**v3-специфічні тригери:**
- [ ] `proactivity_added` > 3 рази за 30 хв в одному чаті → перевірити `interaction_count` логіку
- [ ] `stability_guard_triggered` домінує і deep майже зник (`light_rate > 0.90` при `total >= 30`) → guard надто агресивний
- [ ] `session_expired` > 20/год на активному чаті → перевірити TZ контейнера (`docker exec dagi-gateway-node1 date`)

```bash
# Швидкий rollback (v3-файли)
cd /opt/microdao-daarion
git checkout HEAD~1 -- \
  crews/agromatrix_crew/run.py \
  crews/agromatrix_crew/depth_classifier.py
# Якщо потрібно прибрати нові модулі повністю:
# git checkout HEAD~1 -- crews/agromatrix_crew/session_context.py
# git checkout HEAD~1 -- crews/agromatrix_crew/proactivity.py
docker compose -f docker-compose.node1.yml up -d --build dagi-gateway-node1
```
