# Дорожная карта: открытая работа (1.x+) **Статус:** внутренний трекер расширений границ v1.0 после явного согласования ([product.md](product.md), [.cursor/rules/agent-rules.mdc](../.cursor/rules/agent-rules.mdc)). Детальный дизайн — в [plans/](plans/). Пункты со статусом `кандидат` требуют OK до кодирования. **Версионирование:** по умолчанию SemVer MINOR в линии **1.x+** (`1.1.0`…), если дефолты и миграции совместимы с `1.0.0`. Major `2.x` — только при явном breaking. **Процесс:** [development.md](development.md). История закрытых фаз — в `git log` и [CHANGELOG.md](../CHANGELOG.md). --- ## Индекс | ID | Тема | Статус | План | |---|---|---|---| | web-split | Разбиение `internal/web` | **согласовано** | [plans/web-split.md](plans/web-split.md) | | domain-admin | Роль администратора домена | **согласовано** | [plans/domain-admin.md](plans/domain-admin.md) | | inbound-relay | Входящий релей (backup-MX / пересылка) | **согласовано** | [plans/inbound-relay.md](plans/inbound-relay.md) | | contributing | `CONTRIBUTING.md` | кандидат | — | **Рекомендуемый порядок** (не обязателен): **web-split → domain-admin → inbound-relay** — сначала разрез пакета, затем сквозная авторизация роли, затем новый вертикальный срез входящего релея. Отклонение допустимо; жёстких фаз нет. После `/clear` — пункт со статусом `согласовано` или `в работе`, затем чеклист в linked plan. --- ## inbound-relay **Цель:** опциональный приём почты на порт 25 для явно настроенных доменов и пересылка на upstream (backup-MX / relay-forwarder). По умолчанию выключено (`INBOUND_RELAY_ENABLE=false`); исходящий тракт без флага не меняется. **Граница:** расширение v1.0 — [product.md](product.md) исключает приём входящей почты и mailbox'ы. Это relay/forward, не IMAP/POP3/webmail; антиспам-движок — вне образа, только точка подключения. **Готово, когда:** см. критерии в [plans/inbound-relay.md](plans/inbound-relay.md). **Зависимости / риски:** готовый исходящий тракт; open relay/backscatter; расширение поверхности атаки (порт 25 на приём). Модель: Opus. **Порядок:** рекомендуется после [web-split](plans/web-split.md) и [domain-admin](plans/domain-admin.md). **Версия:** целевой bump `1.x`; возможен `2.x` — уточнить по итогам реализации. --- ## domain-admin **Цель:** роль с доступом к одному домену — приложения, DKIM/DNS, журнал отправки по домену; без глобальных операций (добавление доменов, полный бэкап, очередь, `mail.log`). **Граница:** расширение v1.0 — [product.md](product.md) фиксирует одного администратора. Не вторая копия всевластного админа, а ограниченный владелец домена. **Готово, когда:** см. [plans/domain-admin.md](plans/domain-admin.md). **Зависимости / риски:** таблица пользователей, роль в сессии, авторизация в каждом хендлере, setup/бэкап. **Порядок:** рекомендуется после [web-split](plans/web-split.md), до [inbound-relay](plans/inbound-relay.md). **Версия:** `1.x` MINOR при совместимой миграции текущего админа в глобального. --- ## web-split **Цель:** осознанно разрезать `internal/web` (или зафиксировать плоский пакет) перед ростом от inbound-relay и domain-admin. **Граница:** внутренний рефакторинг; поведение панели для оператора не меняется. **Готово, когда:** пакет разрезан по выбранной схеме или зафиксировано, что остаётся плоским — см. [plans/web-split.md](plans/web-split.md). **Зависимости / риски:** экспорт пакетно-приватного API. **Порядок:** рекомендуется **первым** среди согласованных фич (до domain-admin и inbound-relay). **Версия:** `1.x`, сам по себе breaking не тянет. --- ## contributing **Цель:** `CONTRIBUTING.md` в корне — dev loop, проверки перед PR, протокол коммитов; [development.md](development.md) ссылается, не дублирует. **Граница:** документация процесса; уместна при внешнем потоке PR. **Готово, когда:** файл в корне; development.md не дублирует его. **Зависимости / риски:** пока один разработчик и нет PR — низкий приоритет. **Версия:** без значения для semver.