4e589e1080
Go module (codeberg.org/mix/selfpost), two command skeletons (panel, selfpost-backup) sharing internal/buildinfo for the -ldflags version stamp, Makefile (static CGO_ENABLED=0 build), AGPL-3.0 LICENSE, README skeleton and .gitattributes forcing LF (container scripts must not get CRLF). Verified on the dev server: go vet clean, make build produces statically linked binaries, version stamping works. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
70 lines
5.5 KiB
Markdown
70 lines
5.5 KiB
Markdown
# Прогресс реализации 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 <noreply@anthropic.com>`.
|
||
|
||
## Протокол закрытия фазы
|
||
|
||
Перед `/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`.
|
||
|
||
## Рабочая петля (dev loop) — ВАЖНО
|
||
|
||
Локально (Windows, `D:\Local\Git\selfpost`) **нет Go и Docker** — только редактирование и git. Вся сборка/тесты идут на dev-сервере `selfpost.mixfed.ru` (Debian 12 bookworm, тот же, что базовый образ; провижён под разработку). Цикл: править локально → `rsync` дерева на сервер → `go build`/`go vet`/`docker build`/тесты там. Источник истины и git-история — локальный репозиторий; сервер — только исполнитель сборки/тестов. Подключение: `ssh root@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)
|
||
|
||
## Журнал фаз
|
||
|
||
_(пока пусто — заполняется по мере закрытия фаз)_
|