Files
admin/.tasks/NEXT_SESSION.md
vitya feeba28433 tasks(NEXT_SESSION): session-close — tenant scheduler seller-pinning live
Scheduler seller-pinning выкачен на slovo+bookva (16 джоб, idSeller/ch
per-tenant), task-runner добавлен в auto-deploy, wiki ingested. Открытые
треки: slovo-overlay deploy не активен (legacy bundled compose), docs-commit
триггерит лишний redeploy, bookva compose без DEPLOY_AT.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:22:52 +03:00

6.3 KiB
Raw Blame History

_last_updated_, session_id
_last_updated_ session_id
2026-05-26T22:00:00+03:00 2026-05-26-tenant-scheduler-seller-pinning

Next session handoff

Recent commits

  • victor/books d1054bd — wiki(ingest): tenant-scheduler-seller-pinning + task-runner auto-deploy
  • victor/books 81e0f29 — ci(deploy): task-runner добавлен в auto-deploy matrix (+ secret PORTAINER_STACK_ID_BOOKVA_TASK_RUNNER=48)
  • victor/books 519d8dc — feat(tenant-split): tasks.json per-tenant defaults + Group C idSeller filter (job-scheduler 1.6.0, task-runner 0.4.0, tasks 0.1.0)
  • victor/slovo-overlay f8b7bc5 — scheduler tasks.json template (slovo=2) + mount-path fix /app→/usr/src/app
  • victor/bookva-overlay c49afd7 — scheduler tasks.json template (bookva=1)

Что сделано / LIVE сейчас

Scheduler seller-pinning выкачен на оба tenant'а, verified в живых контейнерах:

  • 16 джоб запинены: slovo idSeller=2/salesChannels=[2], bookva idSeller=1/[1]. Zero cross-tenant leakage (проверено node-скриптом в обоих job-scheduler контейнерах).
  • Group C code-патчи (idSeller-фильтр в 4 handler'ах) + удалены 3 latent-бага: hardcoded idSeller:1 (loadSellersPrices), salesChannels:[1] (load-products-to-ozon), cross-seller хардкод (withdrawProductsFromSale). 13/13 тестов green.
  • Все 4 контейнера (books-job-scheduler, books-task-runner, bookva-scheduler, bookva-task-runner) на master-519d8dc+, healthy.
  • task-runner теперь в auto-deploy pipeline — будущие code-changes раскатываются без ручных шагов. Деталь: slovo tr бандлен в job-scheduler стек, bookva tr = отдельный Portainer-стек 48.
  • Wiki: concept [tenant-scheduler-seller-pinning] + source ingested в books/.wiki.

bookva volume tasks.json залит (md5-verified), backup на VDS /tmp/bookva-tasks-live-backup-20260526-212259.json.

Открытые треки

Трек Готовность Entry-point
slovo-overlay deploy НЕ активен slovo сейчас работает на legacy bundled compose (books-job-scheduler стек = mongo+proxy+task-runner+scheduler в одном, bind-mount только default.json). slovo-overlay deploy/*.compose.yml (named volumes, mount-path fix) — подготовлены, но не задеплоены. Миграция = отдельная таска (parity audit с bookva). slovo-overlay/deploy/
docs-commit → лишний redeploy .wiki/-only push триггерит build→skip→deploy.yml workflow_run→полный redeploy (idempotent, но шумно). Можно добавить .wiki/+docs/ в skip-pattern detect-changes в build.yml, либо guard в deploy workflow_run. books/.gitea/workflows/build.yml
bookva compose без DEPLOY_AT bookva-overlay compose используют ${CORE_SHA} → recreate только при смене digest (не force). slovo использует __TAG__+__DEPLOY_AT__. Для re-deploy того же тега bookva не пересоздаётся. Норма для нашего flow (новый код = новый digest), но асимметрия. bookva-overlay/deploy/*.compose.yml
books-api-shutdown (из прошлой сессии) soak с bookva LIVE — проверить всё ещё ли books-api нужен для slovo fallback. TBD
bookva-ozon-credentials-audit (user-deferred) bookva ozonSeller.clientId = slovo's (cp-a). Финансовый риск. User: «сам подумаю». TBD
bookva-mongo-cleanup (user-deferred) 2817 agendaJobs из cp-a. User: «не трогай не стирай». TBD

Спроси user'а

  • slovo→slovo-overlay миграция — мигрировать slovo на slovo-overlay deploy (named volumes, как bookva) или оставить legacy bundled compose? Сейчас работает, но parity нарушен (mount-path fix в репо не применён к live).
  • docs-redeploy guard — фиксить пайплайн чтобы .wiki/-коммиты не триггерили redeploy?
  • withdrawProductsFromSale — была cross-seller логика (snять seller2 если seller1 снял тот же offer_id). Я её удалил (single-seller). Если бизнес-смысл cross-coordination всё ещё нужен между Ozon-аккаунтами — пересмотреть.

Не делать (preemptive guards)

  • Не stop bookva-* / books-* контейнеры (db,mongo,es,minio,api,web,scheduler,task-runner,ntfy) — production на bookseller.kzntsv.site + slovo URL.
  • Не push без grant в next session — auto-push был session-only (этот session был grant'нут).
  • task-runner для bookva — теперь авто-деплоится (стек 48). НЕ нужно руками. Но если меняешь bookva-task-runner стек руками — помни что pipeline его перезапишет.
  • bookva-mongo agendaJobs 2817 docs — user explicit «не трогай не стирай».
  • Не trust деплой «успех» без smoke — bookva compose без DEPLOY_AT может не пересоздать контейнер при том же digest; проверяй APP_VERSION/uptime после деплоя.

Memory updates за сессию

  • idSeller == idSalesChannel маппинг (канон): bookva=1, slovo=2. User-fixed, без проверки БД.
  • Deploy-механика: slovo job-scheduler чит tasks.json из image built-in (bind только default.json), bookva — из named volume (shadow'ит image).
  • deploy.yml auto-deploy покрывает api/web/task-runner/job-scheduler (task-runner добавлен 2026-05-26). slovo tr бандлен в scheduler-стек, bookva tr отдельный стек 48.
  • books CI build path-filter: tasks.json триггерит web+scheduler ребилд; packages/tasks или packages/task-runner → task-runner ребилд.
  • Креды: pass books-vds/full-env (SSH key id_ed25519_books_ops, Portainer URL+key), pass gitea/admin-token (Gitea API).