Подготовить безопасный production rollout

This commit is contained in:
Zuev
2026-07-29 23:13:17 +03:00
parent a78a93f2f0
commit 8bb7fe97eb
16 changed files with 494 additions and 324 deletions

View File

@@ -1,6 +1,6 @@
# Журнал исправления проблем
Обновлено: 2026-07-19 (Europe/Moscow).
Обновлено: 2026-07-29 (Europe/Moscow).
## Область и неизменяемые данные
@@ -21,7 +21,7 @@
| `V2__subgroups_active_unique_name.sql` | `68f5525a50ddba4f8800a63cab3cd0f84779e301c4a1f29a6e0399f97fbdb30b` |
Текущая единая baseline-миграция: `V1__init.sql`, SHA-256
`fffedf66e8bf7d25d2d8c1b1a6146b45dd5b7e52233d05a68de8bf62c817f7a7`.
`a984718777f1b4695868549e3c805c8b22edbb82fbe0b8731563adf5f11e1742`.
Упоминания V2–V7 в исторических записях ниже описывают последовательность разработки до
консолидации и не означают наличие этих файлов в текущем дереве.
@@ -1047,21 +1047,41 @@
- Полностью закрыты и проверены 32 пункта. Для № 1 остаются только операторские ротация,
provisioning, rollout и очистка истории, которые исходный prompt прямо запрещает
выполнять без отдельных production-полномочий.
- Полный backend PostgreSQL/Testcontainers-прогон: 277 тестов, 0 failures, 0 errors,
- Полный backend PostgreSQL/Testcontainers-прогон: 300 тестов, 0 failures, 0 errors,
0 skipped. Четыре frontend test-suite, `npm run check`, Compose validation,
Workflow YAML, artifact/deploy shell-тесты и `git diff --check` прошли.
- `kubectl kustomize ../k8s`, production secret-scan, синтаксис deploy-скрипта и расширенный
artifact-scan прошли. В production-манифестах отсутствуют mutable `latest` и `:main`.
- Каталог Flyway содержит ровно `V1__init.sql`; V2–V4 и другие дополнительные миграции
отсутствуют. Финальный SHA-256 V1:
`fffedf66e8bf7d25d2d8c1b1a6146b45dd5b7e52233d05a68de8bf62c817f7a7`.
`a984718777f1b4695868549e3c805c8b22edbb82fbe0b8731563adf5f11e1742`.
- Исправление нумерации недель календарного графика также перенесено из промежуточной V2
непосредственно в V1. Чистое применение baseline и формула недель
`понедельник–воскресенье` подтверждены
`AcademicCalendarWeekNumberBaselineIntegrationTest`.
## Точка продолжения
Текущий этап: **реализация и проверка всех разрешённых изменений завершены**.
Текущий этап: **репозиторная реализация завершена, production подготовлен к первому
контролируемому rollout**.
Оставшееся операторское действие владельца:
29 июля 2026 года по отдельному разрешению владельца выполнена production-подготовка:
1. при готовности production-полномочий выполнить `docs/SECURITY_RUNBOOK.md`: ротацию,
provisioning, rollout и очистку истории для № 1. Эти действия не выполнялись
автоматически и не требуются для завершения репозиторной реализации.
- старый backend остановлен на `0` реплик;
- обе tenant-БД (`magistr`, `n8n`) доступны, их схемы `public` пусты, у application role
есть права `CREATE` на схему и БД;
- в `app-secret` без вывода значения добавлен новый случайный `JWT_SECRET`;
- из действующей конфигурации без вывода значений созданы переходные `tenants-secret` и
`otel-postgres-secret`;
- push в `main` больше не запускает production deploy: job разрешён только для ручного
`workflow_dispatch`;
- server-side dry-run выявил immutable `roleRef` старого RoleBinding; в
`../k8s/rbac.yaml` новый binding переименован в `backend-tenant-secret-binding`, после
чего `kubectl apply --dry-run=server -k ../k8s` прошёл.
Оставшиеся операторские действия:
1. Закоммитить и отправить изменения в `main`, дождаться checks, сборки и Trivy scan.
2. Выполнить первый rollout по digest через `../k8s/deploy.sh apply`.
3. После проверки удалить старые ConfigMap/RBAC-объекты, ротировать перенесённые DB/OTel
credentials и выполнить согласованную очистку истории по `docs/SECURITY_RUNBOOK.md`.