[2026-05-19] psychologist-app: анкета онбординга, state persistence, analytics.md, rate limiting, сброс данных

This commit is contained in:
Alexey Martemyanov
2026-05-19 01:33:43 +06:00
parent 87cfb3ae6d
commit 6df08fc334
4 changed files with 256 additions and 1 deletions
@@ -162,7 +162,42 @@ UI алгоритм (не агент!)
---
## 5. Открытые вопросы
## 5. State Persistence & Session Recovery
### Сохранение стейта на каждом шаге
Каждый шаг сессии сохраняется немедленно — не в конце:
```
step_state {
session_id: "2026-05-19",
user_id: "...",
phase: "dialogue", // intro | questionnaire | dialogue | insight | closing
current_question_idx: 2,
answered: [ {q: "...", a: "..."}, ... ],
last_activity_ts: 1747612800
}
```
При следующем открытии приложения — автоматически восстанавливается точка, где пользователь остановился. Не начинает с начала.
### Заброшенная сессия (пользователь пропал посередине)
**Триггер**: last_activity_ts > 20 часов, сессия не завершена.
**Действие (backend cron)**:
1. Принудительно **завершить сессию** — агент пишет partial summary на основе того, что успело ответить
2. Обновить `profile.md` — даже неполные данные полезны
3. Пометить сессию как `completed_partial`
**Уведомление**: на следующий день **примерно в то же время** (± 30 мин от last_activity_ts предыдущих сессий) — push:
> "Мы не успели закончить в прошлый раз. Вернёмся?"
**Retention protocol** (Stage 2): при N пропущенных сессиях подряд — запускается отдельный флоу "возвращение пользователя" с мягким реактивационным сообщением. Детали — в будущем документе.
---
## 6. Открытые вопросы
- [ ] Как именно Narrator детектирует что вопросы в 3-м лице и нужно переформулировать? Prompt rule или регекс-паттерн?
- [ ] Сценарий планировщика — отдельный агент или встроен в посредника?