# Assistant Mode Flow

## End-to-End
1. User opens `Assistant` mode in GUI.
2. User enters message and clicks `Send`.
3. Frontend starts status ticker:
   - `Razbirayu zapros`
   - `Proveryayu kontur`
   - `Opredelyayu marshrut`
   - `Ishchu dannye`
   - `Sobirayu otvet`
4. Backend stores user message in session history.
5. Backend runs normalizer (`normalizer_v2_0_2`) with provided prompt/config.
6. Backend derives deterministic route summary from normalized payload.
7. Backend builds retrieval plan (current stage: stubbed/diagnostic).
8. Backend composes human-readable assistant answer via `answer_composer`.
9. Backend stores assistant reply in session history.
10. Backend returns reply + debug payload + updated conversation snapshot.
11. Frontend updates chat timeline and keeps debug expandable per assistant message.

## Fallback Behavior
- `out_of_scope`: polite contour boundary response.
- `clarification`: asks for concrete period/account/document/counterparty.
- `partial`: reports available in-scope part and marks unavailable part.
- `none`: reports routed fragments and planned execution path.

## Debug Drawer Data
Each assistant reply can expose:
- `trace_id`
- normalized fragments
- route summary and fallback type
- retrieval plan payload
- full normalized object snapshot

## Session Memory Rules
- scope: current backend process memory only
- key: `session_id`
- message cap: bounded in-memory list per session
- persistence: not durable across backend restart

## Why This Stage Exists
This mode creates a usable operator loop before deeper field-hardening:
- gather real dialog traces
- identify where clarification/no-route appears in practice
- evaluate answer quality and UX with real user input
