# Доказательства архитектурного снимка

Дата: 2026-09-16. Source commit: `21c85b0c7bc7a96497ce78ec2ead44b113f18db6`. `SOURCE` и `LOCAL TEST` не утверждают состояние production. `CALCULATED` — арифметика из параметров кода; `MEASURED SOURCE` — статический подсчёт. Предложения не выданы за реализованные свойства.

| ID | Утверждение | Статус | Первичный источник | Граница / пробел |
|---|---|---|---|---|
| P01 | Entry point запускает stream и/или WebUI | SOURCE | [src/stt_whisper_to_nats.py](</experiments/voice-ai/archive/y/src/stt_whisper_to_nats.py>) — _main_async; SttWhisperToNatsService | Running flags UNKNOWN |
| P02 | Поток PCM формируется в соседнем Core | SOURCE | [src/utils/wire_packet.py](</experiments/voice-ai/archive/y/src/utils/wire_packet.py>) — parse_wire_packet; WebRTC WhisperStreamNode | Источник/приёмник сверены в обоих repos |
| P03 | VAD local, распознавание через LinTO HTTP | SOURCE | [src/stt_whisper_to_nats.py](</experiments/voice-ai/archive/y/src/stt_whisper_to_nats.py>) — _check_stream_buffer; _transcribe_and_publish | Реальный backend image UNKNOWN |
| P04 | Stream wildcard без queue, buffer local | SOURCE | [src/stt_whisper_to_nats.py](</experiments/voice-ai/archive/y/src/stt_whisper_to_nats.py>) — run; streams; PhraseStreamState | Требование affinity — INFERRED |
| P05 | File upload отвечает 202 и запускает task внутри процесса | SOURCE | [src/webui/server.py](</experiments/voice-ai/archive/y/src/webui/server.py>) — _file_http_handler; FileJobWorkerService.start_job | Надёжная межпроцессная job queue не найдена |
| P06 | Новый ordinary job отменяет предыдущий активный | SOURCE | [src/stt_whisper_to_nats.py](</experiments/voice-ai/archive/y/src/stt_whisper_to_nats.py>) — start_job; _cancel_active_locked | Один активный job на экземпляр |
| P07 | Combine читает сохранённые words и diarization | SOURCE / TEST | [src/webui/staged_jobs.py](</experiments/voice-ai/archive/y/src/webui/staged_jobs.py>) — _run_combine; invalidation helpers | Inference не вызывается этой веткой |
| P08 | Snapshots в JSON и artifacts на filesystem | SOURCE | [src/webui/file_mode.py](</experiments/voice-ai/archive/y/src/webui/file_mode.py>) — FileJobStore; write_state; normalized_audio_path | Crash-safe atomic write и multiwriter не доказаны |
| P09 | Lock service хранит одну lease в RAM | SOURCE / TEST | [src/webui/job_lock_server.py](</experiments/voice-ai/archive/y/src/webui/job_lock_server.py>) — FileJobLockService; ttl_s; heartbeat | Restart и split brain не покрыты live experiment |
| P10 | CONNECT не заменяется direct при ошибке | SOURCE / TEST | [src/model_transport.py](</experiments/voice-ai/archive/y/src/model_transport.py>) — model_http_session; tests/test_model_transport.py | Не тест живого H100 туннеля |
| P11 | Обычный handler допускает downgrade diarization | SOURCE / TEST | [src/webui/server.py](</experiments/voice-ai/archive/y/src/webui/server.py>) — _file_http_handler; test_file_transcribe_downgrades_to_plain_text_when_diarization_backend_is_unavailable | Fallback видим через requested/run flags |
| P12 | 115 тестов проходят | LOCAL TEST | [tests](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/tree/21c85b0c7bc7a96497ce78ec2ead44b113f18db6/tests>) — 16.09.2026, .venv/bin/python -m unittest discover -s tests | Warnings и mock pipeline error; итог OK |
| P13 | Ordinary terminal cleanup delay 30 s | SOURCE | [src/stt_whisper_to_nats.py](</experiments/voice-ai/archive/y/src/stt_whisper_to_nats.py>) — FILE_JOB_TERMINAL_CLEANUP_DELAY_S; _schedule_job_cleanup | Не долговечная история; staged lifecycle отличается |
| P14 | Benchmark измеряет RTF и quality_proxy | SOURCE / TEST | [src/webui/bench.py](</experiments/voice-ai/archive/y/src/webui/bench.py>) — build_bench_result; _rtf | WER/DER не вычислены в этом исследовании |
| P15 | Legacy CPU stack=5 service declarations | SOURCE | [stack/stack.drs](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/21c85b0c7bc7a96497ce78ec2ead44b113f18db6/stack/stack.drs>) — bridge, LinTO proxy, pyannote, sherpa, Sortformer; otlp.drs first | Public ingress — соседний repo; GPU — внешний owner |
| P16 | CI tests job закомментирована | SOURCE | [.gitlab-ci.yml](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/21c85b0c7bc7a96497ce78ec2ead44b113f18db6/.gitlab-ci.yml>) — #tests; deploy rules default branch | Из локального suite не следует CI gate |

## Метод и сохранность

Исследование началось с AGENTS.md и .knowledge. Следующим источником были calls, routes, subscriptions, DTO, schema, tests, Dockerfiles и DRS. Существующие презентации, OpenWiki и ранее написанные архитектурные обзоры не служили доказательствами.

DRS прочитан статически, без исполнения Ruby DSL. Values 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 сценариев приёмки.
