Files
selfpost/docs/roadmap.md
T
mixeme 9b3ce0b33e
test / test (push) Has been cancelled
docs: restructure roadmap as 1.x+ tracker with plan files
Split detailed design into docs/plans/ and keep roadmap as a status index;
align product, development, and README with the 1.x+ release line.

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

92 lines
5.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 | Тема | Статус | План |
|---|---|---|---|
| inbound-relay | Входящий релей (backup-MX / пересылка) | **согласовано** | [plans/inbound-relay.md](plans/inbound-relay.md) |
| domain-admin | Роль администратора домена | **согласовано** | [plans/domain-admin.md](plans/domain-admin.md) |
| web-split | Разбиение `internal/web` | **согласовано** | [plans/web-split.md](plans/web-split.md) |
| contributing | `CONTRIBUTING.md` | кандидат | — |
Жёсткого порядка реализации нет. После `/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.
**Версия:** целевой 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/бэкап. **Версия:** `1.x` MINOR при совместимой миграции
текущего админа в глобального.
---
## web-split
**Цель:** осознанно разрезать `internal/web` (или зафиксировать плоский пакет)
перед ростом от inbound-relay и domain-admin.
**Граница:** внутренний рефакторинг; поведение панели для оператора не меняется.
**Готово, когда:** пакет разрезан по выбранной схеме или зафиксировано, что
остаётся плоским — см. [plans/web-split.md](plans/web-split.md).
**Зависимости / риски:** экспорт пакетно-приватного API. **Версия:** `1.x`, сам
по себе breaking не тянет.
---
## contributing
**Цель:** `CONTRIBUTING.md` в корне — dev loop, проверки перед PR, протокол
коммитов; [development.md](development.md) ссылается, не дублирует.
**Граница:** документация процесса; уместна при внешнем потоке PR.
**Готово, когда:** файл в корне; development.md не дублирует его.
**Зависимости / риски:** пока один разработчик и нет PR — низкий приоритет.
**Версия:** без значения для semver.