Доказательства архитектурного снимка
Дата: 2026-09-16. Source commit: 772de4a714ae6c5abea91946e85a1953ee919ec3. SOURCE и LOCAL TEST не утверждают состояние production. CALCULATED — арифметика из параметров кода; MEASURED SOURCE — статический подсчёт. Предложения не выданы за реализованные свойства.
| ID | Утверждение | Статус | Первичный источник | Граница / пробел |
|---|---|---|---|---|
| W01 | HTTP входы, WebRTC и общий путь текста | SOURCE | src_core/main.py — setup_routes; handle_transcription.py; handle_track.py | Named live voice smoke не выполнялся |
| W02 | Agent является владельцем runtime и истории | SOURCE | src_agent/agent.py — run; _run_with_optimistic_lock; utils/db.py | Не измерялась частота конфликтов |
| W03 | Runtime UPDATE и persist_chat_turn не в общей транзакции | SOURCE | src_agent/repositories/runtime_state.py — save_runtime_state; src_agent/utils/db.py:persist_chat_turn | Последствия частичного отказа — INFERRED |
| W04 | Три workflow, DRS default ruby_node | SOURCE | stack/webrtc.drs — WORKFLOW_RUNTIME; NATS_WORKFLOW_RUN_SUBJECT | Фактический env работающего stack UNKNOWN |
| W05 | Две Ruby реализации subscribe без queue group | SOURCE | src_langgraph_rb_node/lib/src_langgraph_rb_node/runtime/service.rb — Service.run; src_langgraph_rb/lib/src_langgraph_rb/runtime/service.rb | Дубли при репликации — вывод из семантики NATS, не live trace |
| W06 | Agent, LLM, API tools имеют queue groups | SOURCE | src_agent/service.py — subscribe; src_llm/utils/base_service.py; src_api_gateway/main.py | Это не решает идемпотентность и порядок turn |
| W07 | Аэропорты: новый turn 2 LLM calls; route только при intent | SOURCE / TEST | src_langgraph_rb_node/spec/scenarios/find_nearest_airport_spec.rb — routing_decision + tool_params; tool_calls assertions | LLM/tool ответы подменены |
| W08 | Audio producer создаёт task до semaphore | SOURCE | src_core/processors/whisper_stream_node.py — handle_frame; _publish | Не выполнен overload benchmark |
| W09 | LLM задачи также создаются до semaphore | SOURCE | src_llm/utils/base_service.py — _handle_message; _process_message | duration_ms отсчитывается после ожидания semaphore |
| W10 | Браузер подписан на фиксированный user123 subject | SOURCE | src_front/src/config/appConfig.ts — natsEventsSubject; assistantApp.ts:handleServerEvent | Broker ACL и live tenant isolation UNKNOWN |
| W11 | init_map: 2 последовательных HTTP calls и session на запрос | SOURCE | src_core/handlers/handle_init_map.py — init_map_handler | Потребность в согласованном snapshot требует решения API |
| W12 | API: фиксированная позиция и демонстрационные данные | SOURCE | src_api_gateway/main.py — _current_position; _tool_get_weather; _build_route_data | Нет утверждения о реальных рейсах/дорожном маршруте |
| W13 | GraphRunner результаты внешних шагов держит в RAM | SOURCE | src_langgraph_rb_node/lib/src_langgraph_rb_node/runtime/graph_runner.rb — request_results; src_langgraph/engine.py:compile() | Crash resume не доказан |
| W14 | 25 Ruby examples и 7 Python tests проходят | LOCAL TEST | src_langgraph_rb_node/spec — Docker с read-only mount exact worktree; tests/test_llm_routing.py | 16.09.2026; не E2E |
| W15 | CI tests job закомментирована | SOURCE | .gitlab-ci.yml — build push; deploy; #tests | Полный CI test gate не подтверждён |
| W16 | Raw PCM=32000 B/s; 50 frames/s | CALCULATED | src_core/handlers/handle_track.py — 16000 samples/s × 2 B × mono; frame_duration_ms=20 | Без metadata, NATS, RTP overhead |
| W17 | Physical code lines: 2263 / 4205 / 3913 | MEASURED SOURCE | src_langgraph — tracked .py/.rb; воспроизводимая команда ниже | Включены tests/comments; не dead code и не cognitive complexity |
| W18 | Документация создана по remote main | SOURCE | AGENTS.md — HEAD 772de4a; detached worktree локальный источник | Основной локальный main f0a6eac сохранён |
Метод и сохранность
Подсчёт физических строк выполнялся отдельно для src_langgraph, src_langgraph_rb и src_langgraph_rb_node; <runtime> ниже заменяется точным именем каталога:
git ls-files <runtime> | rg '\.(py|rb)$' | xargs wc -l
Исследование началось с AGENTS.md и .knowledge. Следующим источником были calls, routes, subscriptions, DTO, schema, tests, Dockerfiles и DRS. Существующие презентации, OpenWiki и ранее написанные архитектурные обзоры не служили доказательствами.
DRS прочитан статически, без исполнения Ruby DSL. Значения credentials не переносятся в документы. Готовые материалы не меняют код приложения и не публикуются в runtime.
CW: cw sync --pull --company monitorsoft остановился на dirty shared scope. cw sync --company monitorsoft установил текущие рабочие skills; cw validate прошёл без ошибок и предупреждений (76 skills, 33 agents во всём проверенном каталоге). Fetch корневого и shared repositories показал 0/0 divergence. Локальные правки shared сохранены.
Что остаётся неизвестным
Текущие image digests, число реплик, фактические лимиты ресурсов и p50/p95/p99 не измерялись. Тесты с подменёнными модельными ответами подтверждают ветвление, но не качество LLM/ASR. Изменения архитектуры требуют своего baseline и named сценариев приёмки.