tasks(NEXT_SESSION): refresh after bookva-tenant-cutover-prep 4/7 progress
Forward-looking: MW slot needed для stateful-split-volume-copy + Step 2/4, books-api shutdown decision (24-48ч soak ends ~2026-05-27/28), Step 6 timing question. Memory updates: Gitea reserved GITEA_* prefix, token creation requires basic auth, Portainer PUT atomic compose+env, embed-api auth matches books-api 1:1. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,24 +1,25 @@
|
||||
---
|
||||
_last_updated_: 2026-05-25T13:00:00+03:00
|
||||
session_id: 2026-05-25-es-windows-to-books-vds
|
||||
_last_updated_: 2026-05-26T17:00:00+03:00
|
||||
session_id: 2026-05-26-bookva-tenant-cutover-prep-4of7
|
||||
---
|
||||
|
||||
# Next session handoff
|
||||
|
||||
## Recent commits
|
||||
|
||||
- `tasks(iis-migration-to-ruvds): 🟢 closed Phase 1 per user decision` (`2eba1c5c`) — close.
|
||||
- `tasks(NEXT_SESSION): refresh handoff after ES migration commit` (`d746d3bd`)
|
||||
- `tasks(migrate-elasticsearch-to-books-vds): 🟢 closed — 3 indices Windows→books VDS` (`3246dabb`)
|
||||
- `tasks(NEXT_SESSION): finalize handoff at session close` (`97757b89`)
|
||||
- `tasks(books-vds-stacks-to-portainer): close 🟢 — 6 stacks migrated SSH-compose → Portainer` (`86c44c3d`)
|
||||
- `.admin ce8bf8a6` — tasks(bookva-tenant-cutover-prep): 🟡 progress 4/7 — Steps 1+3-partial+5+7 (this commit; close-of-session update)
|
||||
- `.admin 4f1a4cf4` — tasks(bookva-tenant-cutover-prep): create — 7-step VDS prep (start of session, was already there from prior morning user-driven create)
|
||||
- `victor/books 75ea320` — feat(deploy): web.compose.yml embed-api env switch (pushed; Portainer stack 24 PUT'нут atomic, container live, smoke green)
|
||||
- `victor/books 2f7b539` — fix(ci): rename secrets.GITEA_TOKEN → BOOKVA_OVERLAY_TOKEN (Gitea reserved prefix)
|
||||
- `victor/bookva-overlay 5b173de` — config-templates align to prod shape + design v3 hostname (api/scheduler templates rewritten, task-runner template NEW, README hostname table → bookseller.kzntsv.site)
|
||||
|
||||
## Open треки
|
||||
|
||||
| Трек | Готовность | Entry-point |
|
||||
|---|---|---|
|
||||
| `stateful-split-volume-copy` ⚪ | not started; lean playbook готов | `.tasks/stateful-split-volume-copy.md` |
|
||||
| `infra-inventory` ⚪ | ready, books VDS factsheet свежий (ES + 6 Portainer стэков) — момент удачный для ingest | `.tasks/infra-inventory.md` |
|
||||
| `bookva-tenant-cutover-prep` 🟡 | 4/7 done — Maintenance-window items pending | `.tasks/bookva-tenant-cutover-prep.md` § Remaining |
|
||||
| `stateful-split-volume-copy` ⚪ | not started; lean playbook готов; **блокирует Step 2 + Step 4** в bookva-tenant-cutover-prep | `.tasks/stateful-split-volume-copy.md` |
|
||||
| `infra-inventory` ⚪ | ready, books VDS factsheet ещё свежее (бы. 12 Portainer stacks now после migration) | `.tasks/infra-inventory.md` |
|
||||
| `books-bookva-user-whitelist-gathering` ⚪ | ready, long-lead gathering (email-based) | `.tasks/books-bookva-user-whitelist-gathering.md` |
|
||||
| `books-vds-bookva-bootstrap` 🔵 | blocked on tenant-split Phase 4 | `.tasks/books-vds-bookva-bootstrap.md` |
|
||||
| `books-dns-cutover-bookva` 🔵 | blocked on books-vds-bookva-bootstrap | `.tasks/books-dns-cutover-bookva.md` |
|
||||
@@ -26,24 +27,26 @@ session_id: 2026-05-25-es-windows-to-books-vds
|
||||
|
||||
## Спроси user'а
|
||||
|
||||
- **«потом миграции буут»** — user в этой сессии анонсировал ещё migration round. Какие конкретно? Возможные пункты исходя из контекста — другие сервисы с windows host → books VDS / vds-kzntsv (mssql? minio? ozon-seller-api-gateway?). Ask before starting.
|
||||
- **Backup re-fire post-ES-migration** — статус? (был triggered в 12:48 после ES migration close, polling task bt`btlfijyi6` ожидался). Verify через ntfy/email + log tail `/var/log/books-vds-backup/2026-05-25.log`. Если success → cron 06:00 auto-run завтра не нужен ad-hoc.
|
||||
- **iis-migration descoped items** — нет tracker tasks для 14 plan-to-migrate hostnames, source IIS decommission, LE renewal до 2026-07-22, cleanup, wiki concept updates. Создать ⚪ tasks или оставить в Closure note? (User в этой сессии явно отказался от 3-way split.)
|
||||
- **Maintenance window slot для `stateful-split-volume-copy` + Step 2/4 в bookva-tenant-cutover-prep.** 1-2h на books VDS — `docker stop books-db` + `cp -a` (MariaDB+Mongo) + Portainer stacks create + login-gate SQL. Когда удобно?
|
||||
- **books-api shutdown micro-task** — 24-48ч soak с embed-api на books-web уже идёт. Когда соответствующий 24-48ч окно истечёт (≈2026-05-27 вечер–2026-05-28), создавать `books-api-shutdown` micro-task или просто `docker stop books-api && rm` через Portainer ad-hoc?
|
||||
- **Step 6 PWA redirect timing.** Per spec — 1-2 нед до cutover. После maintenance window mwхочешь сразу выставить, чтобы users id=1 готовиться к redirect, или дождаться актуальной cutover date?
|
||||
- **iis-migration descoped items** (carried over from prev session) — нет tracker tasks для 14 plan-to-migrate hostnames, source IIS decommission, LE renewal 2026-07-22, cleanup, wiki concept updates. Создать ⚪ или оставить в Closure note? (Prev session user отверг 3-way split.)
|
||||
|
||||
## Не делать (preemptive guards)
|
||||
|
||||
- **Не plод follow-up tasks для iis-migration descoped items** без явного user request — user в этой сессии отверг 3-way split, всё в Closure note таски.
|
||||
- **Не trigger reg.ru DNS swap для 14 plan-to-migrate hostnames** — нет API key в pass, ручная операция user'а.
|
||||
- **Не decommission source Windows IIS** (port 8089 + traefik routes) — 16 hostnames всё ещё указывают на 94.19.247.14, decommission = downtime для них.
|
||||
- **Не выключать Windows ES** (`docker stop elasticsearch` на windows host) — source держится per user request как rollback после ES migration.
|
||||
- **Не редактировать `/opt/books/<svc>/config/default.json`** напрямую без `cp <file>.bak-<date>` перед — bind-mounted, change live для приложения.
|
||||
- **Не push без grant в next session** — auto-push grant был session-only (Rule 4). В этой сессии user разово grant'нул на `пуш` (single commit) — следующий push потребует нового grant.
|
||||
- **Не trust `https://elasticsearch.kzntsv.site/`** без basicAuth — endpoint behind traefik middleware. Pwd живёт в `/opt/books/api/config/default.json` (НЕ в pass entry).
|
||||
- **Не trigger `compose up bookva-*` stacks** — это scope of separate `bookva-tenant-cutover` task, не текущей prep. Stack acceptance — только "созданы + ID записан", не "запущены".
|
||||
- **Не stop books-api** пока 24-48ч soak с embed-api не closed. Стек продолжает работать как fallback (любой external caller на `https://books.kzntsv.site` всё ещё идёт через books-api напрямую).
|
||||
- **Не trigger Bookva deploy через deploy.yml workflow** до создания Portainer bookva stacks + записи их IDs в Gitea secrets. Workflow gracefully skip'ает (deploy.yml line 187), но shorter rollout path = avoid лишний run.
|
||||
- **Не touch templates через volume edit прямо** — `bookva-overlay/config-templates/` теперь авторитетный source. Любой edit конфига = commit + push + re-populate volume.
|
||||
- **Не редактировать bind-mount config файлы на VDS** (`/opt/books/<svc>/config/default.json`) напрямую без `cp <file>.bak-<date>` — bind-mounted, change live для приложения.
|
||||
- **Не trust `https://elasticsearch.kzntsv.site/`** без basicAuth — endpoint behind traefik middleware. Pwd живёт в `/opt/books/api/config/default.json` (не в pass).
|
||||
|
||||
## Memory updates за сессию
|
||||
|
||||
- **Учить:** на closure-time всегда run актуальный DNS probe для migration tasks с DNS scope — task file может lag user'ского background swap'а (в этой сессии user silently swap'нул 5 пар hostnames между `2026-05-24` cutover и `2026-05-25` closure, task file showed 2 swapped, real was 9).
|
||||
- **Учить:** ES kreknin daily snapshot `daily-<date>` — script `set -e` fails если `daily-<date>` уже exists в repo (idempotent НЕ). Re-fire backup в тот же день → `DELETE _snapshot/kreknin/daily-<date>?pretty` сначала.
|
||||
- **Учить:** user pattern для «закрой хорошо» = **finish properly, descope cleanly в Closure note** (НЕ create follow-up tasks). Несколько раз: ES migration close + iis-migration close — same shape. Closure notes capture what's NOT done без proliferating board state.
|
||||
- **Reference:** [[../.tasks/iis-migration-to-ruvds]] § Closure note — descope details для 5 categories of remaining work + rollback recipe.
|
||||
- **Reference:** [[../.tasks/migrate-elasticsearch-to-books-vds]] § Closure note — rollback recipe.
|
||||
- **Учить — Gitea secrets reserved prefix.** Repo secrets с именем начинающимся на `GITEA_*` (или `GITHUB_*`) returns 400 "invalid variable or secret name". Workaround: переименовать secret + соответствующий `secrets.X` reference в workflow. Env var name внутри shell-script может оставаться любым (мы оставили `GITEA_TOKEN` в shell, а secret назвали `BOOKVA_OVERLAY_TOKEN`).
|
||||
- **Учить — Gitea token creation требует basic auth.** `POST /api/v1/users/{name}/tokens` returns "auth required" даже с admin token — endpoint специально требует username+password basic auth. Workaround: user генерит PAT через UI (Settings → Applications → Tokens). Admin token недостаточен.
|
||||
- **Учить — Portainer PUT /api/stacks/<id> atomic.** Может одним вызовом обновить stackFileContent + Env, container recreates на diff. Pattern: GET текущий стек → modify → PUT с `{stackFileContent, env, pullImage:true, prune:false}`. Использовали для Step 7 embed-api switch.
|
||||
- **Учить — embed-api auth gate в books-web matches books-api exactly.** `/api/healthz`=200 (public), любой protected endpoint без token = 401 "No token provided", с invalid token = 401 "Invalid JWT token". Identical behavior — embed = port-of-books-api, не parallel impl.
|
||||
- **Pass entry added:** `gitea/victor-books-ci-bookva-overlay` — PAT scope=read:repository для clone bookva-overlay в CI. Value захардкожен в Gitea secret `BOOKVA_OVERLAY_TOKEN` в victor/books, pass = backup.
|
||||
- **Reference:** [[bookva-tenant-cutover-prep]] § Decisions log — full session trace для 4 closed steps.
|
||||
- **Reference:** [[../.wiki/concepts/portainer-stack-management-books-vds]] — books VDS Portainer endpoint 1 = primary, 12 stacks managed (legacy SSH-compose for elasticsearch/mongo/minio/books-db/traefik/portainer ушли — `books-vds-stacks-to-portainer` task closed 2026-05-25). При проверках `books-job-scheduler-mongoconfig`/`-mongodb` volumes остаются именами от legacy migration; новые bookva-* следуют new convention.
|
||||
|
||||
Reference in New Issue
Block a user