# Прогресс реализации SelfPost Живой трекер фаз. **Переживает `/clear`** — читается первым при возобновлении работы. План фаз: [implementation-plan.md](implementation-plan.md). ТЗ: [specification.md](specification.md). ## Как возобновить после сброса контекста 1. Прочитать этот файл (текущая фаза, статус, что сделано, что дальше). 2. Прочитать соответствующую фазу в `implementation-plan.md`. 3. При необходимости — детали в `specification.md`. 4. Продолжить с пункта «Следующий шаг». ## Рекомендуемая модель по фазам | Фаза | Модель | Почему | |---|---|---| | 0 — каркас + спайк milter | **Opus** | архитектура + главный технический риск (7.3) | | 1 — Docker/supervisord/обёртка | **Opus** | тонкая логика холодного старта сокетов | | 2 — SQLite/setup-link/auth | **Opus** | безопасность 7.6 (крипто-токен, сессии, bcrypt) | | 3 — домены + OpenDKIM | **Opus** | генерация конфигов + exec-safety (7.6.3–4) | | 4 — приложения + SASL + sender_login_maps | **Opus** | риск open relay / привязки отправителя | | 5 — полный Postfix | **Opus** | самый чувствительный тракт доставки | | 6 — journal-milter | **Opus** | наивысший риск (баг ломает релей) | | 7 — UI мониторинга | **Sonnet** | шаблоны/CRUD, рутинно | | 8 — rate limit L2 | **Opus** | логика лимитов в milter | | 9 — бэкап/restore/экспорт | **Opus** | целостность данных, версионирование | | 10 — деплой + docs | **Sonnet** | compose-файлы и документация | | 11 — security-проход | **Opus** | аудит соответствия 7.6 | Правило: безопасность / инфра / риск-критичное → **Opus**; UI / документация / бойлерплейт → **Sonnet**; тривиальная механика → **Haiku**. ## Коммиты Коммит на **каждом осмысленном шаге** (не каждое сохранение файла, но и не только конец фазы): рабочий под-функционал, зелёная сборка, конец фазы. Минимум — один коммит на закрытую фазу + промежуточные на связные под-шаги. Ветка `main` (если пользователь не попросит отдельную). Push/PR — только по явной команде. Сообщение коммита завершается трейлером `Co-Authored-By: Claude Opus 4.8 `. ## Протокол закрытия фазы Перед `/clear` в конце каждой фазы Claude: 1. Обновляет этот файл: статус фазы → ✅, заполняет «Сделано» и «Следующий шаг». 2. Проверяет критерии «Готово, когда…» из плана. 3. Пишет одну строку в журнал ниже. 4. Делает финальный коммит фазы. 5. Явно говорит: «Фаза N закрыта — можно `/clear`, следующая фаза N+1 на модели X». --- ## Текущее состояние - **Текущая фаза:** 0 (ещё не начата) - **Модель:** Opus - **Статус:** план и решения утверждены; инфраструктура workflow настроена - **Следующий шаг:** начать Фазу 0 — `go mod init codeberg.org/mix/selfpost`, структура каталогов, `LICENSE` (AGPL-3.0), скелет README, сборка с ldflags-версией; затем спайк go-milter на `selfpost.mixfed.ru`. ## Утверждённые решения - Module path: `codeberg.org/mix/selfpost` - SQLite: `modernc.org/sqlite` (чистый Go, без cgo) - milter: `github.com/emersion/go-milter` (проверить совместимость в Фазе 0) - Структура: стандартная Go-раскладка (`cmd/`, `internal/`) - Front-end: `html/template` + вендоренный HTMX - Коммиты — только по явной команде пользователя (ТЗ 12.1) ## Журнал фаз _(пока пусто — заполняется по мере закрытия фаз)_