# 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 ```