The plan is meant to hold only what is still open, but three of its numbered items had already been implemented and were still being read as pending work: the TRUSTED_PROXY_CIDR-gated X-Forwarded-For handling (A.1), the account settings page (A.6) and the go vet/go test CI workflow (C.10). Remove them and renumber; the residual scope note from A.6 (2FA, multiple admins) moves to section D, which is where deliberately deferred scope belongs. Same for the "done" notices at the top of the plan and the phase-by-phase retellings in progress.md: phases 12 and 13 are described in full in the CHANGELOG and git history, so the tracker now states what is closed and what is next, and nothing else. Three code comments cited plan item numbers that this renumbering would have silently pointed at a different item, and one cited a phase 13 section that no longer exists; they now state the fact instead of the reference. The CI test workflow was never recorded in the CHANGELOG, so its entry is added there before the plan item describing it goes away. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
5.2 KiB
Прогресс реализации SelfPost
Живой трекер состояния. Переживает /clear — читается первым при возобновлении работы.
План (открытые вопросы + опциональные фазы): implementation-plan.md.
ТЗ: specification.md. История релизов: CHANGELOG.md.
История сделанного по фазам (0→13, все закрыты) — в git log и в CHANGELOG, здесь не дублируется.
Как возобновить после сброса контекста
- Прочитать этот файл (текущее состояние, что дальше).
- Открыть
implementation-plan.md— там нерешённые вопросы, Фаза 14 и опциональная линия 2.x.x (Фаза O1+). - При необходимости — детали в
specification.md. - Продолжить с пункта «Следующий шаг».
Модель по типу работы
Правило: безопасность / инфра / риск-критичное → Opus; UI / документация / бойлерплейт → Sonnet; тривиальная механика → Haiku.
Коммиты
Коммит на каждом осмысленном шаге (не каждое сохранение файла, но и не только конец фазы): рабочий под-функционал, зелёная сборка, конец фазы. Минимум — один коммит на закрытую фазу + промежуточные на связные под-шаги. Ветка main (если пользователь не попросит отдельную). Push/PR — только по явной команде. Сообщение коммита завершается трейлером Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>.
На каждом таком шаге — запись в CHANGELOG.md под [Unreleased] (формат Keep a Changelog). При явном решении зарезать версию — секция [Unreleased] переименовывается в [X.Y.Z] - дата, заводится новая пустая [Unreleased]. Тег/пуш образа — только по явному запросу (см. workflow release.yml).
Протокол закрытия фазы/крупного шага
Перед /clear в конце каждого законченного шага Claude:
- Обновляет этот файл: «Текущее состояние» → что изменилось, что дальше.
- Проверяет применимые критерии «Готово, когда…».
- Дописывает
CHANGELOG.mdпод[Unreleased]. - Делает финальный коммит шага.
Текущее состояние
- Выполнено и принято: базовый линейный план 0→11 (v1.0; аудит безопасности ТЗ 7.6 — полное соответствие), Фаза 12 (UI/UX) и Фаза 13 (страница
/status, DNS-проверки домена). Что именно сделано — вgit logиCHANGELOG.md, здесь не дублируется. - Дальше — то, что перечислено в
implementation-plan.md: открытые вопросы (разделы A-D — hardening сверх обязательного 7.6, надёжность, e2e в CI), Фаза 14 — security-заголовки + документация про/data/setup-token; опциональная Фаза O1+ (входящий релей, линия 2.x.x, требует согласования). - Прод:
selfpost.example.com, реальный Let's Encrypt сертификат, живой e2e (DKIM/SPF pass).
Рабочая петля (dev loop) — ВАЖНО
Локально (Windows, <repo>) нет Go и Docker — только редактирование и git. Вся сборка/тесты идут на dev-сервере selfpost.example.com (Debian 12 bookworm, тот же, что базовый образ; провижён под разработку). Цикл: править локально → залить дерево на сервер → go build/go vet/docker build/тесты там. rsync в локальном git-bash нет, поэтому дерево едет tar'ом по ssh: tar -czf - --exclude=.git . | ssh root@selfpost.example.com 'rm -rf /root/selfpost-src && mkdir -p /root/selfpost-src && tar -xzf - -C /root/selfpost-src'; Go на сервере — в /usr/local/go/bin (не в PATH по умолчанию); образ — docker build -f build/Dockerfile -t selfpost:dev --build-arg VERSION=dev .. Источник истины и git-история — локальный репозиторий; сервер — только исполнитель сборки/тестов. Подключение: ssh root@selfpost.example.com (по ключу).