# План реализации: SelfPost **Статус:** линия v1.0/v1.x до тега релиза **закрыта** — предрелизная ревизия безопасности (§ D) выполнена 2026-08-06, релизный гейт (e2e + ревизия) открыт. B.1–B.3 и C.4 закрыты — as-built в [architecture.md](architecture.md), e2e/CI в [development.md](development.md), принятые риски в [security.md](security.md). Текущее состояние и следующий шаг: [roadmap.md](roadmap.md) и [v1.x-closure-plan.md](v1.x-closure-plan.md). Объём 2.x.x — [roadmap.md](roadmap.md). **Основа:** [product.md](product.md) v1.0. --- ## D. Предрелизная ревизия безопасности — ВЫПОЛНЕНО (2026-08-06) **Проверка моделью Fable** по дифу от аудита v1.0 (Фаза 11, `bd64e80` — тега `v1.0.0` в репозитории нет, это его фактический эквивалент) до HEAD, плюс полный повторный проход по чек-листу безопасности (бывшее ТЗ 7.6, теперь [security.md](security.md)). Приоритеты из плана покрыты: аутентификация и сессии, валидация ввода, запись в конфиги/map-файлы, `os/exec`, права в `/data`, секреты. **Результат.** Эксплуатируемых уязвимостей (high/medium) не найдено. Одна находка defence-in-depth закрыта правкой до тега: логин приложения передаётся в `saslpasswd2` после `--`, чтобы значение, начинающееся с `-` (допустимо whitelist'ом), не могло быть разобрано getopt как флаг ([internal/app/sasl.go](../internal/app/sasl.go)). Принятые риски в [security.md](security.md) не пополнились — существующие записи (origin-check fallback, отсутствие CSRF-токенов, ложно-отрицательный `bounced` при сверке с `postqueue`) покрывают всё найденное. Сводка ревизии — в записи `Security` CHANGELOG `[0.5.0]`.