From a02de817a58465b79a63059192c896eb0f808324 Mon Sep 17 00:00:00 2001 From: OpeItcLoc03 Date: Mon, 25 May 2026 04:46:48 +0000 Subject: [PATCH] meta(tasks): create [books-stateful-split-execution] in OpeItcLoc03/admin --- .tasks/STATUS.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index d868234..f00e49b 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -138,3 +138,39 @@ _Updated: 2026-05-25 (`unify-backup-notifications` 🟢 closed — 3 scripts п 7. Закрыть с note: «whitelist (N users) подтверждён учредителем, готов к применению на cutover'е». **Branch:** n/a + +## 🔵 [books-stateful-split-execution] — Ops-таска для **Фазы 1** дизайна `tenant-split` из victor/books. Выполнить playbook на shared VDS в maintenance window — docker volume copy для MariaDB + Mongo + MinIO bucket rename + DELETE cleanup. Identical bit-for-bit копии через `cp -a` alpine helper. Никаких mysqldump/mongodump/mc cp. + +**Playbook (dev-source, читать целиком до начала):** `victor/books/.tasks/stateful-split-volume-copy.md`. + +**Контекст дизайна:** `mcp__projects-meta__knowledge_get slug=concepts/tenant-split` § «Фаза 1 — Physical stateful split + overlay-repos». Brainstorm trace: `~/projects/.workshop/.archive/2026-05-24-books-tenant-split.md`. + +**Container naming:** drop `books-` prefix → `bookva-` / `slovo-`. + +**TDD-режим:** `[skip-tdd: one-off migration on maintenance window]` — verify через post-cleanup audit. + +**Acceptance:** +- `bookva-db` + `slovo-db` контейнеры живые, audit `SELECT DISTINCT idSeller` = `{1}` / `{2}` соответственно. +- `bookva-mongo` + `slovo-mongo` контейнеры живые, agenda-история preserved, jobs чужого tenant'а cleanup'нуты. +- MinIO (один shared) имеет bucket'ы `bookva` + `slovo` вместо `books`; объекты чужого tenant'а удалены. +- Shared catalog tables (`books`, `editions`, `epz`, `epz_pages`, `warehouses`, `products`) — полные копии в обеих БД. +- Smoke с двух сетей: login через `bookva.` → Bookva-данные; текущий URL → Slovo. +- Через 7-14 дней parallel-run без откатов → cleanup старых `books-*` контейнеров и volumes (отдельный заход). + +**Status:** blocked +**Where I stopped:** (not started) +**Next action:** **Pre-step:** прочитать `victor/books/.tasks/stateful-split-volume-copy.md` целиком. Убедиться что 7 open questions resolved (закрыто dev-prep таской `victor/books stateful-split-volume-copy`): FK CASCADE, units/receipts strategy, MinIO key structure, users whitelist, task_runs handling, chrome/traefik shared. + +1. Подтвердить overlay-репо `victor/bookva-overlay` + `victor/slovo-overlay` готовы — compose-файлы для `bookva-*` / `slovo-*` стеков на месте. +2. Подтвердить per-tenant backups настроены (`victor/books per-tenant-backup-and-observability`) — иначе нет точки rollback. +3. Объявить maintenance window 1-2ч (без записи). +4. Execute Steps 0-11 из playbook на shared VDS. +5. Post-execution audit: `SELECT DISTINCT idSeller FROM `, `db.agendaJobs.distinct('data.idSeller')`, `mc ls` on MinIO. +6. Smoke с двух сетей. +7. Через 7-14 дней parallel-run без откатов → cleanup старых `books-*` контейнеров+volumes (отдельный заход). +8. Closing note: «Physical split done, bookva-* + slovo-* контейнеры живут на shared VDS, audit clean, parallel-run start ». +**Blocker:** `victor/books stateful-split-volume-copy` (dev-prep — 7 open questions resolved + dev-DB test passed) + `victor/books per-tenant-backup-and-observability` (Фаза 2 — per-tenant backups настроены) +**Branch:** n/a + + +---