Fold documentation-plan and progress into development.md, drop docs/archive, retarget live links, and point README plus agent-rules at the new home. Co-Authored-By: Composer <noreply@cursor.com> Co-authored-by: Cursor <cursoragent@cursor.com>
9.8 KiB
План закрытия хвоста v1.x
Статус: в работе. Целевой релиз: v1.0.0 / ghcr.io/mixeme/selfpost:1.0.0.
Временный файл: после закрытия v1.x удалить (история — git + CHANGELOG). Не часть постоянного пакета docs.
Контекст: релизный гейт по коду закрыт (B.1–B.3, C.4 e2e, § D Fable). Остаток — roadmap.md § «v1.x — хвост документации и деплоя» + код из того же секции.
Политика docs: docs/archive/ не храним; устаревшие планы удаляем после переноса полезного в development.md.
Рекомендация по модели
Общее правило (переносится в development.md):
| Тип работы | Модель | Примеры в этом плане |
|---|---|---|
| Безопасность, инфра, права файлов, postfix/postqueue, open-relay-риски | Opus | mail.log в /data, entrypoint permissions, postqueue reconcile |
| UI/JS/CSS, шаблоны, документация (English), README | Sonnet | adaptive polling, development.md § Documentation, README index |
| Тривиальная механика: retarget ссылок, grep, compose bump, CHANGELOG cut | Haiku | Makefile/release.yml комментарии, удаление файлов |
| Ревизия безопасности (review, не authorship) | Fable | не в этом плане (§ D уже выполнен) |
| Фаза / коммит | Модель | Почему |
|---|---|---|
| 1. Polling | Sonnet | panel.js + HTMX, CSP |
| 2. mail.log + reconcile | Opus (+ Sonnet на unit-тесты) | postfix path, logrotate, entrypoint, postqueue |
| 3. Docs consolidation | Sonnet | development.md, README, agent-rules |
4. Release 1.0.0 |
Haiku / Sonnet | механика релиза, без новой логики |
| 5. Tag / push | Оператор | явная команда |
Сообщение коммита: трейлер Co-Authored-By: Claude <модель> <noreply@anthropic.com> с моделью, которая делала шаг.
Общий чек-лист прогресса
- Фаза 1 — адаптивный опрос мониторинга
- Фаза 2 — mail.log в
/data+ postqueue reconcile - Фаза 3 — docs: development.md, README, удаление планов и
docs/archive/ - Фаза 4 — релизный коммит
1.0.0(по явной команде) - Фаза 5 — tag
v1.0.0+ push (по явной команде) - Фаза 6 — выкат на прод (оператор)
Гейт перед тегом:
gofmt -l .чистыйgo vet ./...чистыйgo test ./...чистый (Windows-падения domain/logtail — известны, не блокер)make e2eзелёный (если Docker доступен)- grep: нет ссылок на удалённые docs в живых файлах
Фаза 1 — Адаптивный опрос мониторинга
Модель: Sonnet.
Цель: 5 s при активности, 30 s при простое; скрытая вкладка — 0 запросов. Без hx-trigger="every 5s [expr]" (CSP / unsafe-eval).
Чек-лист
status_body.html,mail_queue_body.html,system_log_body.html,deliveries_rows.html—hx-trigger="load"+ маркер pollingpanel.js—lastActivity, schedule послеhtmx:afterRequest(5s / 30s)htmx:afterSwap— реинициализация polling-элементовbeforeRequestдля hidden tab — оставленarchitecture.md— одна строка про polling- CHANGELOG
[Unreleased] - Стенд (опционально): idle → ~30s; активность → ~5s; hidden → 0 запросов
Фаза 2 — Send-log vs mail.log
Модель: Opus (infra); Sonnet (тесты).
2.1 mail.log → /data/log/mail.log
build/postfix-config.sh—maillog_fileизMAIL_LOGbuild/logrotate-mail.conf— путь +create 0640 postfix selfpostbuild/entrypoint.sh—mkdir, права (2750 postfix:selfpost, файл0640), исключение/data/logиз общегоchownнаpanelcmd/panel/main.go— defaultMAIL_LOGinternal/backup— исключитьlog/из архива (+ тест)test/e2e/mail_helpers.go— путь в контейнереguide.md—MAIL_LOG, System log, бэкап./data; README — рост дискаenvdoc_test—MAIL_LOGвbuildScriptKeys
2.2 Postqueue reconcile
internal/postfix—QueueIDs/ парсер queue-id изpostqueue -p+ тестinternal/store—ListQueuedOlderThan(cutoff)internal/logtail— periodic sweep (5 min), grace 2 min →bounced, старт только после того, как tailer дочитал лог до конца- Тесты reconcile
2.3 Документация и риски
architecture.md—/data/log, reconcile; gap «container recreate» убранsecurity.md— риск «вечный queued» снят; на его месте — ложныйbouncedи права на лог- CHANGELOG
[Unreleased]
Стенд (остаток, для оператора): Docker на машине разработки недоступен —
сборка образа и старт контейнера не проверены. Проверить при выкате: /data/log
создаётся с нужными правами, панель читает mail.log, logrotate проворачивает
файл, postqueue -p читается из-под panel.
Фаза 3 — Документация
Модель: Sonnet.
3.1 documentation-plan.md → development.md, затем delete
- development.md § Documentation:
- Documentation map (без archive; история = git + CHANGELOG)
- User-facing deliverables
- Maintaining documentation (§3 правила)
- Verifying docs against code (полная таблица §2)
architecture.mdшапка → development.md- Удалить
documentation-plan.md - Retarget
roadmap.md
3.2 progress.md → development.md, затем delete
- development.md § Resuming work
- development.md § Model routing
- development.md § Commits (слить с Release build)
- development.md § Phase closure (roadmap, не progress)
agent-rules.mdc→ development.md- Удалить
progress.md - Retarget все ссылки
3.3 Удалить docs/archive/
- Удалить
docs/archive/specification-v1.0.md - Удалить каталог
docs/archive/ - Убрать ссылки на archive из живых docs (CHANGELOG историю ниже 0.6.0 не трогать)
3.4 README
- § Documentation: operator docs + roadmap (internal, Russian)
- Без секции Archive
3.5 Проверка
gofmt/vet/test- grep живых ссылок на удалённые файлы
Фаза 4 — Релизный коммит R1
Модель: Haiku / Sonnet. Только по явной команде оператора.
- CHANGELOG:
[Unreleased]→[1.0.0] - дата, новая[Unreleased] deploy/docker-compose.yml→ghcr.io/mixeme/selfpost:1.0.0- Удалить
implementation-plan.md(если ещё есть) - Makefile,
.github/workflows/release.yml,test/e2e/main_test.go→ development.md roadmap.md— секция v1.x закрыта; убрать «переместить в archive»- Финальный grep ссылок
- Удалить этот файл (
v1.x-closure-plan.md) в том же или следующем коммите
Фаза 5 — Tag и push
Оператор. Явная команда.
git tag v1.0.0
git push origin v1.0.0
release.yml— build amd64+arm64, e2e gate, push GHCR1.0.0- compose tag и git tag совпадают
Фаза 6 — Прод (оператор)
docker compose pull→1.0.0- Разлогин (cookie
__Host-) - Reverse-proxy передаёт
Host ./data/log/создался после upgrade
Критерий «хвост v1.x закрыт»
- Все чек-листы фаз 1–4 отмечены
compose=1.0.0, тегv1.0.0в репо- Нет
implementation-plan.md,documentation-plan.md,progress.md,docs/archive/,v1.x-closure-plan.md - Нет активных ссылок на удалённые пути
development.md— процесс + Documentation + model routingroadmap.md— единственный internal tracker- Polling 5s/30s; mail.log в
/data; reconcile; риск security снят
Разбивка коммитов
- Polling — panel.js, templates, architecture (+ CHANGELOG)
- mail.log + reconcile — build, logtail, store, postfix, docs (+ CHANGELOG)
- Docs — development.md, README, agent-rules; delete documentation-plan, progress, archive; retarget (+ CHANGELOG)
- Release 1.0.0 — CHANGELOG cut, compose, delete implementation-plan, roadmap closure, delete
v1.x-closure-plan.md - Tag/push — оператор