# Файлы остальных репозиториев

Полный перечень — [files.csv](</experiments/voice-ai/archive/v/10/29/chat-agent-corporate-review/files.csv>). Здесь отмечены назначение файлов текущего процесса и конкретные кандидаты на сокращение. Указанные изменения не внесены. Не все файлы вне runtime являются лишними: build, тесты, лицензии, миграции и эксплуатационные инструкции имеют отдельную роль.

## Chat Agent: stack

| Файл | Для чего создан / нынешний caller | Нужен обычному workflow | Предложение |
|---|---|---|---|
| [stack/webrtc.drs](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/webrtc.drs#L1>) | Полная декларация Chat Agent | Да | Оставить, нормализовать конфигурацию и provenance |
| [stack/audio-observability.drs](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/audio-observability.drs#L1>) | OTLP/Phoenix overlay пяти backend services | Да, для наблюдаемости | Оставить; факт доставки отдельно |
| [stack/Dockerfile.deploy](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/Dockerfile.deploy#L1>) | Окружение Dry Stack и проектных release-команд | Да | Сократить проектные ответвления, сохранить один контракт |
| [stack/deploy.sh](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/deploy.sh#L1>) | Entry point и dispatch normal/maintenance действий | Да | Удалить dispatch завершённых исторических действий вместе с CI aliases |
| [stack/release.rb](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/release.rb#L1>) | Ограниченный Docker executor и очищенные ошибки | Да, использует release | Сохранить ограничения; не размножать механизм |
| [stack/delivery_command.rb](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/delivery_command.rb#L1>) | Deadline/output cap subprocess | Да | Не удалять до замены вызывающего workflow |
| [stack/chat_nats_release.rb](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/chat_nats_release.rb#L1>) | Drain/prepare/update/verify/resume, а также накопленные специальные режимы | Частично | Оставить общий component release, удалить лишние feature aliases |
| [stack/known_hosts](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/known_hosts#L1>) | SSH host identity | Да | Оставить, не считать приватным ключом |
| [stack/preflight.sh](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/preflight.sh#L1>) | Обычная readiness и отдельный полный maintenance snapshot | Да | Full stats/RootFS/weather уже ограничены CI_MAINTENANCE + CI_PREFLIGHT_FULL; не выдавать их за обязательный обычный этап |
| [stack/probe_weather.py](</experiments/voice-ai/archive/w/stack/probe_weather.py#L1>) | Полный maintenance preflight weather API | Нет | Оставить только как явную диагностику либо убрать вместе с этой веткой |
| [stack/runtime_probe.py](</experiments/voice-ai/archive/w/stack/runtime_probe.py#L1>) | Проверка NATS runtime-контракта из release | Да, текущий caller есть | Не удалять как «нет Python import» |
| [stack/runtime_audio_archive_probe.py](</experiments/voice-ai/archive/w/stack/runtime_audio_archive_probe.py#L1>) | Archive repair/check из release | Maintenance | Не нужен каждой поставке; сохранить только нужную операцию |
| [stack/release_stale_agent_owner.sql](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/release_stale_agent_owner.sql#L1>) | Адресное освобождение зависшего agent owner | Нет | Caller в CI/release не найден; кандидат в историю/явный repair runbook, не выполнять автоматически |
| [stack/retirement_release.rb](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/retirement_release.rb#L1>) | Вывод старых компонентов и stateful migration checks | Нет | После подтверждения завершения — архивировать workflow вместе с CI/tests; не исполнять повторно по умолчанию |
| [stack/phoenix.drs](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/phoenix.drs#L1>) | Независимый stack Phoenix/PostgreSQL | Только при изменении Phoenix | Оставить самостоятельной целью |
| [stack/phoenix_release.rb](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/phoenix_release.rb#L1>) | Первичная/адресная поставка и проверка Phoenix | Только для Phoenix | Не обязательный шаг Front/ASR release |
| [stack/phoenix_retention.py](</experiments/voice-ai/archive/w/stack/phoenix_retention.py#L1>) | Проверка/применение retention по отдельной команде | Maintenance | У него есть caller; не удалять отдельно от retention-контракта |
| [stack/test_delivery_command.rb](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/blob/b19930bdfcb9f62e3284719404ded157e5d70e94/stack/test_delivery_command.rb#L1>) | Контракт deadlines и cleanup | Проверки helper | Оставить |

## Chat Agent: build и прикладной код

| Группа | Назначение | Что сократить / что сохранить |
|---|---|---|
| `docker/{agent,api,audio,core,front,llm,postgres}/Dockerfile` | Образы конкретных компонентов | Нужны; не заменять все одним огромным context. Восстановить соответствие общему build-контракту |
| `docker/build.sh`, `filter-build-phase.rb`, `streaming-compose.yml` | Собственный выбор фаз и специализированный manifest | Кандидаты на сокращение после удаления CI aliases; имя streaming не доказывает неиспользование |
| `docker/ci-scope.sh`, `check-source.sh`, `test-ci-scope.sh` | Выбор и проверки по влиянию | Сохранить один актуальный механизм; не дробить быстрые suites на десятки частных правил |
| `Dockerfile.browser-tests`, `Dockerfile.release-checks` | Повторяемые тестовые окружения | Нужны по соответствующим контрактам; не включать в runtime stack |
| `docker/docker-compose.yml`, `docker-compose.debug.yml` | Build и локальный debug runtime | Разделить собственные image inputs и runtime-only services; detached debug сохранить |
| `docker/front/nginx/*` | Runtime settings, HTTP routes, security/cache headers | Нужны production Front; не являются презентациями/временными файлами |
| `docker/nats/*` | Локальные NATS configs | Не путать с production Config в DRS; документировать владельца и среду |
| `docker/postgres/entrypoint-with-migrations.sh` + `src_postgres` | Существующий schema lifecycle собственной БД | Не удалять по новому generic Ruby правилу; миграции имеют действующего владельца и должны переживать обновление |
| `src_core` | Допуск, lifecycle, ASR result/replay | Оставить; удешевлять прямой путь по измерениям, не объединять с GPU worker без необходимости |
| `src_audio_ws_ingress` | PCM, последовательность, границы, запись | Оставить; проверки владельца и целостности не лишняя фильтрация текста |
| `src_api_gateway` | Browser authorization, Monitor, audio archive и domain API | Оставить; `domain_api.py` и `browser_api.start/stop` реально вызываются из main |
| `src_agent` | Чат, Pydantic agent, browser tools | Оставить; большой `widget_requests.py` требует адресного упрощения, не автоматического распила на новые слои |
| `src_llm` | Token budget и OpenAI-compatible vLLM adapter | Оставить. `fit()` повторно вызывает remote `/tokenize` при удалении каждого history item — кандидат на измерение при длинной истории, не доказанная причина текущей задержки |
| `src_shared` | Общие межсервисные контракты, archive, monitor, privacy и telemetry | Удалять только после проверки producer/consumer. Большое число файлов само по себе не доказывает лишний runtime слой |
| `src_front`, `extensions/chrome` | Страницы и расширение, общие ChatUI/Markdown/audio/VAD | Сохранить общие реализации. VAD Worker загружается bundler/Worker API, поэтому отсутствие обычного importer — ложный кандидат Repowise |
| `tests`, тесты рядом с TS | Unit/integration и regression contracts | Не удалять пять разных suite-поверхностей; удалять только тесты заменённых веток |
| `.knowledge`, `DOCS`, `openwiki`, presentations | Текущие инструкции, исследования и generated знания | Один актуальный вход; старые схемы явно архивные; OpenWiki не править вручную |
| `collect_file_contents.sh` | Старый ручной экспорт содержимого файлов | Не нужен штатному workflow, R25: не исключает настоящие .env |
| `.env`, `.env.debug`, примеры | Параметры конкретной среды/локальной отладки | Не смешивать с production desired config; не экспортировать значения в отчёт. Наличие файла не доказывает production secret |

## ASR: stack

| Файл / группа | Назначение | Предложение |
|---|---|---|
| [stack/stack.drs](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/d6e12511bd3ee26bf4208192607ac70b58e9049a/stack/stack.drs#L1>) | File UI, batch bridge, transport и CPU sidecars | Оставить независимые потребители; удалить старые streaming env |
| [stack/otlp.drs](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/d6e12511bd3ee26bf4208192607ac70b58e9049a/stack/otlp.drs#L1>) | Корпоративный overlay | Оставить: совпадает с SSB 0.0.111 |
| [stack/voice-gateway.conf](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/d6e12511bd3ee26bf4208192607ac70b58e9049a/stack/voice-gateway.conf#L1>) | Nginx routes voice UI/WebSocket | Используется gateway Config, не лишний файл |
| [stack/Dockerfile.deploy](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/d6e12511bd3ee26bf4208192607ac70b58e9049a/stack/Dockerfile.deploy#L1>), [stack/deploy.sh](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/d6e12511bd3ee26bf4208192607ac70b58e9049a/stack/deploy.sh#L1>) | Общая поставка stack | Убрать устаревший gem patch и слепой пятиразовый retry; сохранить один штатный deploy |
| [stack/Dockerfile.linto-deploy](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/d6e12511bd3ee26bf4208192607ac70b58e9049a/stack/Dockerfile.linto-deploy#L1>), [stack/deploy-linto.sh](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/d6e12511bd3ee26bf4208192607ac70b58e9049a/stack/deploy-linto.sh#L1>), [stack/linto_release.rb](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/d6e12511bd3ee26bf4208192607ac70b58e9049a/stack/linto_release.rb#L1>) | Подготовка/code-only совместимость/адресный release LinTO | Нужны текущему сценарию, не одноразовый мусор; legacy streaming mode проверить по callers |
| [stack/Dockerfile.live-bridge-deploy](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/d6e12511bd3ee26bf4208192607ac70b58e9049a/stack/Dockerfile.live-bridge-deploy#L1>), [stack/deploy-live-bridge.sh](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/d6e12511bd3ee26bf4208192607ac70b58e9049a/stack/deploy-live-bridge.sh#L1>), [stack/live_bridge_release.rb](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/d6e12511bd3ee26bf4208192607ac70b58e9049a/stack/live_bridge_release.rb#L1>) | Выпуск batch/file bridge | Удалить LINTO_WS_URL guard и повторную SSH-обвязку, сохранить фактическую границу file tasks |
| [stack/status_release.rb](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/d6e12511bd3ee26bf4208192607ac70b58e9049a/stack/status_release.rb#L1>) | Адресный выпуск status UI | Оставить как компонентный target, не отдельную архитектуру release |
| [stack/delivery_command.rb](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/blob/d6e12511bd3ee26bf4208192607ac70b58e9049a/stack/delivery_command.rb#L1>) | Общий bounded subprocess | Оставить ограничения, не размножать копии без владельца |
| `linto_known_hosts`, `scoped_known_hosts` | SSH host keys разных существующих контекстов | Не удалять как секреты; объединять лишь если контракты совпадают |
| `test_delivery_command.rb`, `test_linto_release.rb`, `test_live_bridge_release.rb`, `test_status_release.rb` | Проверки реально используемых release scripts | Сохранить применимые; удалить только вместе с удалённой веткой |

## ASR: build и прикладной код

| Группа | Назначение | Предложение |
|---|---|---|
| `docker/build-images.sh`, `docker/Dockerfile.build`, несколько `*-compose.yml` | Отбор полных/code-only образов | Один manifest/матрица входов вместо дублирующих описаний; совместимые code-only базы сохранить |
| `docker/streaming-asr`, `streaming-asr-code` | Полный и кодовый нынешний batch worker | Не удалять по старому названию |
| `docker/linto_http_ffmpeg`, `linto-code` | Закреплённый upstream LinTO, dependencies и code-only patch | Реальные build inputs; `patch_streaming.py` вызывается обоими Dockerfile и теперь содержит актуальные исправления — не мёртвый по имени |
| `validate-linto-code-base.sh`, `validate-worker-code-base.sh` | Проверка совместимости code-only base | Оставить, иначе кодовый выпуск может соединить несовместимые зависимости |
| `docker/diarization*`, `sherpa-onnx`, `sortformer` | Независимые модели файлового контура | Не удалять из-за batch Chat Agent |
| `src/stt_whisper_to_nats.py` | Batch bridge и запуск файловых режимов | Крупный компонент; разбирать по реальным независимым путям, не создавать framework |
| `src/streaming_asr/batch*.py`, transport/worker/schema/backends | Нынешний GPU batch protocol и модели | Нужны; имя каталога историческое |
| `src/webui`, job store/lock/file/staged/bench/summary | Самостоятельные файловые сценарии | Имеют DRS consumers, не являются остатком browser streaming |
| `src/utils/audio_utils.py`, `silero_onnx_vad.py`, `wire_packet.py`, `src/streaming_asr/compare_timing.py` | Заменённые алгоритмы и old timings | Четыре адресных кандидата, 393 строки; R14 |
| `src/requirements*.txt`, LinTO `requirements.in/lock` | Разные dependency/runtime контракты | Не объединять GPU dependencies с лёгким bridge. Проверить необходимость прямого onnxruntime после удаления old VAD, учитывая transitives |
| `DOCS`, `presentations`, `CODEMAP.md`, `readme_for_dumer.md` | Инструкции и исторические исследования | Сверить текущие входные README; датированные артефакты не выдавать за современную схему |

## Три Ruby RAG-репозитория

| Repo / группа | Назначение | Предложение |
|---|---|---|
| `document-ingestor/src/config.ru` | HTTP upload + NATS vectorization | Нужен; убрать credential log и ограничить исполнителей |
| `database_init.rb`, `models/*`, `document_processor.rb` | Схема, extraction/chunking/storage | Нужны; согласовать HNSW и lifecycle uploads |
| `embedding_service.rb`, `ollama_embedding_service.rb` | Локальный embedding и альтернативный backend | Оба входят в объявленный переключаемый контракт; текущая DRS-конфигурация не делает альтернативу мёртвым кодом |
| `document-ingestor/src/nats/*`, `context-retriever/src/nats/*` | Нужные request/subscribe/publish и избыточная скопированная обвязка | Сначала удалить невостребованные части; общий новый сервис не нужен |
| `context-retriever/src/context_search.rb`, `models/*`, `config.ru`, `openapi.json` | Semantic/fulltext/hybrid поиск и HTTP/MCP/NATS интерфейсы | Нужны отдельному RAG. Уточнить limit после expansion, сократить повторяющийся merge соседних chunks без изменения результата |
| Ruby `Gemfile/lock`, `.version`, `docker/ruby/Dockerfile` | Dependency/build/runtime профиль | Нужны; версии и корпоративный wrapper сверять отдельно |
| Ruby `src/spec/integration/*`, `support/*` | Реальные Rack/DB/NATS проверки | Сохранить; это не демонстрационные unit placeholders |
| `document-ingestor` и `embedder` `src/spec/unit/audio_utils_spec.rb` | Пример с длиной массива | Удалить/заменить прикладным тестом; название не соответствует назначению сервиса |
| Ruby `views/index.slim`, `layout.slim`, `presentation.html` | UI и справочная презентация | UI действительно обслуживается приложением; презентация не нужна API path, но имеет маршрут, не мёртвый файл |
| Весь `embedder` | Стандартная заготовка с примерными API | После проверки внешних потребителей убрать service и архивировать repo; не развивать пустую копию функциональности ingestor |

Исходное назначение при спорном удалении нужно проверять вместе с вызывающим кодом. Отдельные первые commits для всех файлов rag-stack приведены в [его каталоге](</experiments/voice-ai/archive/v/10/29/chat-agent-corporate-review/rag-files.md>); в остальных repos приведена роль по текущим entrypoints/build/CI, без выдумывания исторического мотива автора.
