Первый из двух PR почты по согласованной схеме (рабочая почта сотрудников).
Что делает
Рассылки (V6): письмо на alerts-prod@ → каждому участнику своя копия (своё «прочитано») в папку рассылки. Закрытая рассылка (по умолчанию) — только от вошедших отправителей (Kuma через monitor@, Jambotron); снаружи 550 5.7.1.
+метка → папка: bob+prod@ → ящик bob@, папка prod (создаётся сама). Системные папки так не задать. В именах ящиков/рассылок + теперь нельзя.
TRAP теперь держит только чужие адреса (одна копия в INBOX отправителя); наши ящики и рассылки доставляются — алерты staging дойдут.
Служебное API/api/service/** для Jambotron, токен SERVICE_TOKEN (генерирует secrets-init в томе секретов; без него API выключено): аккаунты (создать — пароль один раз; выключить — вон из всех рассылок; новый пароль), рассылки (точный состав, удалить).
Настройки → LISTS для администраторов: создать/изменить/удалить рассылку, участники галочками.
README: ловушка, метки, рассылки, API.
Проверено
86 тестов (новые: router — метки/рассылки/ловушка, admin lists, service API, имена папок).
Живой прогон jar на Postgres 17: миграции V1–V6; API (401 без токена, 201+пароль, 409 адрес занят рассылкой, 400 неизвестный участник, выключение → вон из рассылки, удаление 204/404); SMTP: аноним → закрытая рассылка 550; staging (TRAP) → alerts-prod@ + jambotronpw+billing@ + 2 внешних: оба участника получили копию в prod, папка billing создана, внешние — одна копия в INBOX staging@, очередь наружу пуста.
ng build OK.
После мержа: образ → redeploy почты на prod (secrets-init допишет SERVICE_TOKEN). Дальше: Kuma → alerts-prod@/alerts-staging@; второй PR почты (несколько ящиков у логина, общие ящики); PR Jambotron.
Первый из двух PR почты по согласованной схеме (рабочая почта сотрудников).
**Что делает**
- **Рассылки** (V6): письмо на `alerts-prod@` → **каждому участнику своя копия** (своё «прочитано») в папку рассылки. Закрытая рассылка (по умолчанию) — только от вошедших отправителей (Kuma через `monitor@`, Jambotron); снаружи `550 5.7.1`.
- **`+метка` → папка**: `bob+prod@` → ящик `bob@`, папка **prod** (создаётся сама). Системные папки так не задать. В именах ящиков/рассылок `+` теперь нельзя.
- **TRAP** теперь держит только **чужие** адреса (одна копия в INBOX отправителя); наши ящики и рассылки доставляются — алерты staging дойдут.
- **Служебное API** `/api/service/**` для Jambotron, токен `SERVICE_TOKEN` (генерирует `secrets-init` в томе секретов; без него API выключено): аккаунты (создать — пароль один раз; выключить — вон из всех рассылок; новый пароль), рассылки (точный состав, удалить).
- **Настройки → LISTS** для администраторов: создать/изменить/удалить рассылку, участники галочками.
- README: ловушка, метки, рассылки, API.
**Проверено**
- 86 тестов (новые: router — метки/рассылки/ловушка, admin lists, service API, имена папок).
- Живой прогон jar на Postgres 17: миграции V1–V6; API (401 без токена, 201+пароль, 409 адрес занят рассылкой, 400 неизвестный участник, выключение → вон из рассылки, удаление 204/404); SMTP: аноним → закрытая рассылка 550; staging (TRAP) → `alerts-prod@` + `jambotronpw+billing@` + 2 внешних: оба участника получили копию в **prod**, папка **billing** создана, внешние — одна копия в INBOX staging@, очередь наружу пуста.
- `ng build` OK.
**После мержа**: образ → redeploy почты на prod (secrets-init допишет `SERVICE_TOKEN`). Дальше: Kuma → `alerts-prod@`/`alerts-staging@`; второй PR почты (несколько ящиков у логина, общие ящики); PR Jambotron.
α
🤖 Generated with [Claude Code](https://claude.com/claude-code)
- V6 mail_lists + mail_list_members: письмо на alerts-prod@ → каждому участнику своя копия в папку рассылки;
закрытая рассылка — только от вошедших отправителей (550 снаружи)
- bob+prod@ → ящик bob@, папка prod (создаётся сама; системные папки нельзя)
- TRAP: чужие адреса → одна копия в INBOX отправителя; наши ящики и рассылки доставляются
- /api/service/** (SERVICE_TOKEN из secrets-init): аккаунты (пароль один раз, выключение → вон из рассылок), рассылки
- MailDirectory: одно пространство адресов для ящиков и рассылок, без «+» в именах
- Настройки → LISTS для администраторов
- 86 тестов; живой прогон на Postgres 17: миграции V1–V6, API, SMTP (рассылка/метка/ловушка)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Первый из двух PR почты по согласованной схеме (рабочая почта сотрудников).
Что делает
alerts-prod@→ каждому участнику своя копия (своё «прочитано») в папку рассылки. Закрытая рассылка (по умолчанию) — только от вошедших отправителей (Kuma черезmonitor@, Jambotron); снаружи550 5.7.1.+метка→ папка:bob+prod@→ ящикbob@, папка prod (создаётся сама). Системные папки так не задать. В именах ящиков/рассылок+теперь нельзя./api/service/**для Jambotron, токенSERVICE_TOKEN(генерируетsecrets-initв томе секретов; без него API выключено): аккаунты (создать — пароль один раз; выключить — вон из всех рассылок; новый пароль), рассылки (точный состав, удалить).Проверено
alerts-prod@+jambotronpw+billing@+ 2 внешних: оба участника получили копию в prod, папка billing создана, внешние — одна копия в INBOX staging@, очередь наружу пуста.ng buildOK.После мержа: образ → redeploy почты на prod (secrets-init допишет
SERVICE_TOKEN). Дальше: Kuma →alerts-prod@/alerts-staging@; второй PR почты (несколько ящиков у логина, общие ящики); PR Jambotron.α
🤖 Generated with Claude Code