diff --git a/.tasks/NEXT_SESSION.md b/.tasks/NEXT_SESSION.md index 61ff265..d9562ae 100644 --- a/.tasks/NEXT_SESSION.md +++ b/.tasks/NEXT_SESSION.md @@ -1,69 +1,52 @@ --- -_last_updated_: 2026-08-04T11:50:00Z -session_id: 2026-08-04-minio-config-flip-sweep -prev_session_id: 2026-08-03-minio-split-track-a-done +_last_updated_: 2026-08-04T16:35:00Z +session_id: 2026-08-04-loader-admin-api-coord +prev_session_id: 2026-08-04-minio-config-flip-sweep --- # Next session handoff -## 2026-08-04 — MinIO config sweep DONE: устаревшие `minio.kzntsv.site` → `minio.vds.kzntsv.site` в конфигах проектов. Крекнин ждёт Алексея. Retire старых minio-данных — окно до 2026-08-05. +## 2026-08-04 — Координация loader-миграции + деплой admin-api ЗАВЕРШЕНЫ. Остались MinIO-retire (≈ 05.08) и kreknin-ремонт. -### 0. MinIO config sweep (эта сессия) — ✅ DONE, запушено -Флипнул устаревшие endpoint-ссылки `minio.kzntsv.site` → `minio.vds.kzntsv.site` (CMS-медиа авторитетно на vds): -- `pilorama98.ru` apps/loader/config/default.json (`1f55fdd`) -- `artmone.pro` apps/web/config/default.example.json (`fb5237d`); **default.json gitignored → локально только** -- `MoreThenCms` fileStorageClients-s3.sample.config, 6 endpoint (`54f9f4c6`) -- `emspb.ru` deploy/README.md (`63e7a16`) -- `snolla` framework defaults 3 файла (app/content-api/admin-api) (`a1640f9`) + **inbox-письмо snolla отправлено** (учёт при следующем publish) -- `.admin` host-stacks compose comments ×5 (`9fbc44c3`) -- `modulair-rag/.env` — **gitignored, локально** (endpoint→vds + bucket→modulair-rag, сверено с прод-стеком 15) +### Эта сессия (loader/admin-api) — ✅ ВСЁ ЗАКРЫТО +- **Координация `loader-migrate-to-admin-api-client`** (pilorama98): identity PASS на staging + (229/3327), прод-импорт через API **выполнен** (224 строки, 0 ошибок, ~2070 API-вызовов чисто). + Таска pilorama98 🟢 done. Мои роли: координатор + ревьюер (обе стороны) — закрыты. +- **Деплой admin-api**: стек 25 LIVE (`admin-api.vds.kzntsv.site`, образ `ca0dfa3`, LE, ключ проходит). + ESM-гоча (extensionless imports) починена snolla. Compose source-of-truth закоммичен (`cd76ce8f`). +- **Infra**: ApiKeys DDL на обоих проде (vds + stostayer); MoreThenCms прод-лог 10ГБ→1ГБ (SIMPLE + recovery — кап-риск Express снят); staging `MoreThenCmsStaging` создана + staging admin-api 4732. +- Ключ pilorama98 `sk_6a83…` — **не ротировать** (решение vitya). Memory: `admin-api-vds-deploy`, + `morethencms-simple-recovery-log-shrink`. -**НЕ флипал (проверено mc, корректны):** books packages/config (16), books-tools, docker/infobox books-*, slovo-overlay config-templates, modules-db (.env*, бакет `modules` на books-vds — вне сплита), bookva-overlay composes. -**Наблюдения:** books-vds shared держит полные копии CMS-медиа (дубли vds); на vds typo-бакет `atrmone`. -**Закрыто:** morethencms-s3-filestorage-provider (по оператору «сделано давно»). +### 1. Retire старых minio-данных — ⏳ окно ≈ до 2026-08-05 (из прошлой сессии) +- `rm -rf /usr/docker/minio/data` (12G, shared 2020) + `docker volume rm bookva-minio-data` — + ТОЛЬКО после подтверждения стабильности (live GREEN держится с 2026-08-03). Rollback = PUT стек 30/49. -### 1. MinIO split Track A — ЗАКРЫТ (live GREEN, прозрачный апгрейд) -Оба инстанса books-vds переведены `RELEASE.2020-07-13` → `RELEASE.2025-09-07T16-13-09Z` (тот же digest что vds minio, креды `AKIAJ2…` не тронуты): -- **shared `minio` (стек 30, minio.kzntsv.site):** зеркало 17 бакетов → `/usr/docker/minio/data-new`, Portainer swap, traefik/imgproxy/books-api/task-runner/job-scheduler — GREEN. Rollback: старый `/usr/docker/minio/data` жив. -- **`bookva-minio` (стек 49):** зеркало `books` (38692 obj) → том **`bookva-minio-data-new`** (rename НЕдоступен — старый docker daemon прячет `volume rename`; имя осталось `-new`). bookva-api/task-runner GREEN. Rollback: `bookva-minio-data` (2020) + 2020 image. -- **Бэкап-скрипт обновлён** (репо + хост `/opt/stacks/backup/run.sh`) на новые пути: `/usr/docker/minio/data-new`, `/var/lib/docker/volumes/bookva-minio-data-new`. -- Gotchas записаны в runbook Track A (§ прогресс): mc multipart-баг → `--disable-multipart`; параллельные зеркала → транзиентные сбои на 3.8G хосте → **последовательно + retry**; CRLF compose → `tr -d '\r'`; 2025 minio на kernel 3.10 (CentOS 7 EOL) — WARN о perf, работает. +### 2. kreknin-repair-md3-rebuild — ⚪ ждёт (из прошлой сессии) +- Rescue done (2026-08-02). Осталось: power-off → перетык SATA → Repair md3 → scrub. **Бэкапы + (vds+books-vds) ВЫКЛЮЧЕНЫ с 31.07 — вернуть после ремонта** (критичный хвост). Всё: + `.tasks/kreknin-repair-md3-rebuild.md` + `.wiki/entities/kreknin-synology.md`. -### 2. Retire старых данных — ⏳ ЧЕРЕЗ 48ч (≈ 2026-08-05) -Старые 2020-данные держать как откат до ~2026-08-05, потом: -- `rm -rf /usr/docker/minio/data` (12G, shared 2020) — ТОЛЬКО после подтверждения стабильности. -- `docker volume rm bookva-minio-data` (2020) — после подтверждения. -- До этого: rollback = Portainer PUT стека 30/49 на 2020 image + старый путь/том. - -### 3. Крекнин-ремонт — ЗАВТРА (2026-08-04, координация с Алексеем) -План: `.tasks/kreknin-repair-md3-rebuild.md` + `.wiki/entities/kreknin-synology.md`. Power-off → перетык SATA → Repair md3 → scrub → VMM. **Бэкапы выключены с 31.07** (vds-backup 05:00 + books-vds-backup 06:00) — **вернуть после ремонта** (критичный хвост). Rescue `/mnt/rescue` не отключать. Примечание: бэкап-скрипт books-vds уже указывает на новые minio-пути — ок. - -### 4. Кэш тасков стейл — refresh ОТЛОЖЕН -projects-meta tasks.json sync 2026-07-22 (stale). `meta_restart_poller force=false` отказал (4 активных агента). НЕ force-restart пока агенты заняты. +### 3. Дефолтные/опциональные (из прошлой сессии) +- P3 imgproxy stack 29 retire / A3 bookva-дубли — опционально. +- Кэш тасков refresh (projects-meta) — отложен; `meta_restart_poller` не force-restart пока агенты заняты. ### Спроси user'а -- Retire старых minio-данных: подтвердить через ~48ч (или сделать это самому, если GREEN держится). -- books-vds imgproxy (стек 29) — вывести из эксплуатации? (P3; сейчас imgproxy.kzntsv.site → vds, books-vds imgproxy читает minio:9000, кажется мёртвым грузом). -- A3: чистка bookva-дублей в shared `books` (минор, не срочно). - -### Открытые треки -| Трек | Готовность | Entry-point | -|---|---|---| -| Retire старых minio-данных (48ч) | ⏳ до 2026-08-05 | `minio-split-cutover-runbook` §P3 | -| kreknin-repair-md3-rebuild | завтра | `.tasks/kreknin-repair-md3-rebuild.md` | -| Бэкапы (vds+books-vds) вернуть | после kreknin-ремонта | cron на хостах | -| P3 imgproxy stack 29 retire / A3 дубли | опционально | runbook §P3 | -| Кэш тасков refresh | отложен | `meta_restart_poller` после освобождения агентов | +- Retire старых minio-данных (подтвердить ~2026-08-05). +- Запуск kreknin-ремонта (координация с Алексеем). ### Не делать (preemptive guards) -- **НЕ force-restart поллера** пока активные агенты. -- **НЕ лезть в snolla-код самому** — через snolla-сессию (.admin деплоит). -- НЕ трогать rescue-диск; НЕ забыть вернуть бэкапы после ремонта. -- НЕ удалять старые minio-данные до 48ч окна (и без подтверждения). -- НЕ PS для Portainer (кириллица); креды → `pass`. +- **НЕ ротировать** API-ключ pilorama98 `sk_6a83…` (решение vitya). +- **НЕ трогать** прод admin-api (стек 25) — работает; staging 4732 жив для dev. +- НЕ удалять старые minio-данные до окна и без подтверждения; НЕ вернуть бэкапы до kreknin-ремонта. +- НЕ лезть в snolla-код самому — через snolla-сессию (.admin деплоит). +- НЕ PS для Portainer (кириллица); креды → `pass`; стеки через Portainer, не ssh compose. ### Коммиты сессии (.admin) -- `scripts/books-vds-backup-daily-kreknin/{run.sh,README.md}`, `.wiki/entities/books-vds.md`, `.wiki/concepts/minio-split-cutover-runbook.md` — Track A done + пути бэкапа на новые тома. (с этим хэндоффом). +- `cd76ce8f` feat(admin-api) — деплой admin-api (стек 25). `27de23ea` meta(admin) — координатор + loader (ApiKeys DDL). (с этим хэндоффом — status-обновления coord-таски). -### Memory updates -- `books-vds-minio-upgraded-2025-volume-names` — новые пути живых данных (data-new, bookva-minio-data-new), rename недоступен, mc `--disable-multipart`, последовательные зеркала. +### Memory updates за сессию +- `admin-api-vds-deploy` — деплой + ESM-гоча + первый консьюмер. +- `morethencms-simple-recovery-log-shrink` — SIMPLE recovery + MoreThenCmsStaging. diff --git a/.tasks/coord-loader-admin-api-client.md b/.tasks/coord-loader-admin-api-client.md index 71e6968..2c55914 100644 --- a/.tasks/coord-loader-admin-api-client.md +++ b/.tasks/coord-loader-admin-api-client.md @@ -32,6 +32,27 @@ ## Текущий статус +- 🟢 **2026-08-04T16:30Z — ПРОД-ИМПОРТ ЧЕРЕЗ API ВЫПОЛНЕН, ВСЁ ЗАКРЫТО.** + pilorama98: exit 0, 224 rows, products 224 update/0 create, pages 32, price-tables 25. + Прод admin-api: ~2070 API-вызовов, 0 ошибок (только внешние 401-пробы на /, /robots.txt). + Read-back: 229 products, контент на месте. Миграция 100% (координация + ревью + деплой + прод). +- 🟢 **2026-08-04T16:17Z — МИГРАЦИЯ ЗАВЕРШЕНА. Таска pilorama98 🟢 done.** + Все acceptance 1–4 выполнены (identity PASS, bin/* через store, TDD 105/105, ключ gitignored). + baseUrl переключён на прод `https://admin-api.vds.kzntsv.site`. **Координация закрыта.** + Остаётся операционный шаг: реальный прод-импорт (`node bin/index.js`, store:api) — решение + vitya; рекомендация — через identity-check против прод-эндпоинта. +- 🟢 **2026-08-04T16:16Z — ротация ключа: РЕШЕНО не ротировать** (vitya: «на ключ похуй», + риск приватного Gitea принят). Ключ `sk_6a83…` остаётся. Вопрос закрыт. +- 🟢 **2026-08-04T15:42Z — IDENTITY PASS ✅, миграция по коду ЗАКРЫТА.** + - Ошибки (оператор прав): (1) 400 на числовом sku → `String()` с null-guard; (2) toLegacyTag + без content → 86 breadcrumbs-diff. Пофикшены (665006f, 105/105). + - identity-check.js харнесс ревьюнут (оба пути→staging, полевой diff content, --fresh). + **PASS: 229 products / 3327 variants идентичны** (API vs DB). Acceptance №1 закрыт. + - Прод-cutover: admin-api прод жив (`https://admin-api.vds.kzntsv.site`), pilorama98 + переключает baseUrl; staging-PASS достаточно, прод-прогон опционален. +- 🟢 **2026-08-04T15:36Z — ДЕПЛОЙ admin-api LIVE на vds.** `admin-api.vds.kzntsv.site` + (стек 25, образ ca0dfa3 ESM-фикс). /health ok, LE-серт выдан, ключ pilorama98 проходит. + Prod-эндпоинт для loader'а после identity. Compose source-of-truth закоммичен (cd76ce8f). - 🔵 **2026-08-04T15:26Z — деплой admin-api: стек 25 создан, блокер в Dockerfile.** - Образ `admin-api:e1540de` собран+запушен. Стек 25 (`admin-api.vds.kzntsv.site`, env 8/8, proxy-сеть, mem_limit 512m) создан. **Контейнер крашится**: ESM `ERR_MODULE_NOT_FOUND`