Files
selfpost/docs/roadmap.md
T
mixeme 44683a4996 docs: domain-admin may cover multiple assigned domains
Clarify that the global administrator sets which domains a domain-admin can manage.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-09 13:21:43 +03:00

101 lines
6.0 KiB
Markdown

# Дорожная карта: открытая работа (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.