> ## Documentation Index
> Fetch the complete documentation index at: https://omniflow-vpn.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Архитектурные решения

> Записи решений, которые ограничивают развитие Omniflow, чего каждое из них стоит и при каких условиях его следует пересмотреть

Запись архитектурного решения — это не документация функции. Она фиксирует
выбор, который ограничивает дальнейшую работу, отвергнутую альтернативу, цену
этого выбора и условие, при котором кто-то будет прав, вернувшись к нему.
Описательные страницы —
[Обзор архитектуры](https://omniflow-vpn.mintlify.site/ru/architecture/overview.md) и
[Технологический стек](https://omniflow-vpn.mintlify.site/ru/architecture/technology.md) — рассказывают, чем Omniflow
является сегодня. Эти записи объясняют, почему ему позволено быть таким и никаким
другим.

Они существуют потому, что дорогие ошибки в платформе, которая двигает деньги, —
не те, о которых кто-то спорил. Это те, о споре по которым никто не помнит, и
которые отменяет участник, у которого не было ни одного способа узнать, что
причина была.

## Записи

| Запись | Решение |
| - | - |
| [0001](https://omniflow-vpn.mintlify.site/ru/architecture/decision-0001-modular-monolith.md) | Один модуль Go с тремя точками входа и без брокера сообщений |
| [0002](https://omniflow-vpn.mintlify.site/ru/architecture/decision-0002-postgresql-only-durability.md) | PostgreSQL — единственное надёжное хранилище; в Valkey нет ничего, что нельзя потерять |
| [0003](https://omniflow-vpn.mintlify.site/ru/architecture/decision-0003-contract-first-api.md) | `api/openapi.yaml` — исходный контракт, обе стороны генерируются из него |
| [0004](https://omniflow-vpn.mintlify.site/ru/architecture/decision-0004-remnawave-boundary.md) | Remnawave владеет состоянием VPN; Omniflow хранит намерение и не пишет в его хранилище |
| [0005](https://omniflow-vpn.mintlify.site/ru/architecture/decision-0005-one-web-application.md) | Клиентская и операторская поверхности — одно приложение Next.js |
| [0006](https://omniflow-vpn.mintlify.site/ru/architecture/decision-0006-ai-is-optional.md) | AI и MCP выключены, пока владелец их не включит, и никогда не действуют сами |
| [0007](https://omniflow-vpn.mintlify.site/ru/architecture/decision-0007-no-customer-password.md) | Клиенты входят через Telegram, OIDC или ссылку от бота и никогда — по паролю |

## Формат

У каждой записи одни и те же четыре раздела, и они намеренно короткие. Запись,
которую никто не дочитывает, ничего не ограничивает.

* **Контекст** — ситуация, потребовавшая выбора, в терминах, верных на тот момент.
* **Решение** — что выбрано, сформулированное так, чтобы рецензент мог понять,
  нарушает ли его пул-реквест.
* **Последствия** — чего это стоит, включая то, что теперь стало сложнее. Запись,
  перечисляющая только выгоды, — это агитация, а не решение.
* **Когда пересматривать** — наблюдаемое условие, при котором возврат к вопросу
  будет уместен. «Когда это станет проблемой» — не условие; «когда очередь
  заданий придётся разделить между двумя установками» — условие.

У каждой записи есть статус. `Принято` означает, что она ограничивает текущую
работу. `Заменено NNNN` означает, что более поздняя запись её заменила: исходный
текст никогда не правят под новое решение, потому что рассуждение, оказавшееся
неверным, — это как раз то, что стоит сохранить.

## Когда добавлять запись

Добавляйте запись, когда изменение будет дорого откатывать, а его обоснование не
видно в коде, который из него получается. На практике это: новое надёжное
хранилище, новая внешняя зависимость на пути запроса, изменение того, кто владеет
категорией данных, новая граница доверия или снятие защиты, на которую что-то
рассчитывало.

Не заводите запись ради замены библиотеки, рефакторинга или решения, обоснование
которого читатель восстановит по диффу. `AGENTS.md` называет два изменения,
которые вообще нельзя вносить без принятой записи: введение брокера сообщений и
добавление фреймворка внедрения зависимостей.

Механика — расположение файла, русское зеркало и запись в навигации — такая же,
как у любой другой страницы, и описана в
[Документации](https://omniflow-vpn.mintlify.site/ru/contributing/documentation.md). Нумеруйте файл следующим
свободным четырёхзначным префиксом; номера не переиспользуются, в том числе
номера заменённых записей.

## Смежное

> **[Обзор архитектуры](https://omniflow-vpn.mintlify.site/ru/architecture/overview.md)**
>
> Процессы, путь запроса и то, как изменение состояния фиксируется вместе со своим долговременным заданием.

> **[Технологический стек](https://omniflow-vpn.mintlify.site/ru/architecture/technology.md)**
>
> Каждый компонент, почему он здесь вместо очевидной альтернативы и чего намеренно нет.

> **[Владение данными](https://omniflow-vpn.mintlify.site/ru/architecture/data-ownership.md)**
>
> Какая система авторитетна для каждой категории данных.

> **[Документация](https://omniflow-vpn.mintlify.site/ru/contributing/documentation.md)**
>
> Как добавить страницу и не рассинхронизировать русское дерево.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.