Files
admin/.tasks/NEXT_SESSION.md
vitya b430bce111 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>
2026-05-26 10:09:05 +03:00

53 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
_last_updated_: 2026-05-26T17:00:00+03:00
session_id: 2026-05-26-bookva-tenant-cutover-prep-4of7
---
# Next session handoff
## Recent commits
- `.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 |
|---|---|---|
| `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` |
| `books-stateful-split-execution` 🔵 | blocked on dev-prep + per-tenant-backup-and-observability в victor/books | `.tasks/STATUS.md` |
## Спроси user'а
- **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)
- **Не 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 за сессию
- **Учить — 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.