diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index c2f3842..af814dd 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -1,4 +1,5 @@ # Admin Task Board +_Updated: 2026-05-30 — заведена ⚪ `vehicles-loader-progress-deploy` (handoff из stostayer.new). Progress-logging 0.4.0 зашипан в коде (stostayer.new `a74ef73`, 24/24 теста); ops-follow-up — rebuild образа той же схемой (build здесь → push `docker.stostayer.ru` → host pull+re-tag) и снять `journalctl` с боевого прогона (закрывает не-верифицированный 5-й критерий «journalctl показывает движение»). Попутно добивает остаток email-SEND из `vehicles-loader-image-distribution`._ _Updated: 2026-05-29 — 🟢 `vehicles-loader-image-distribution` **closed**: канал поставки = собственный registry клиента `docker.stostayer.ru`, build у нас (verdaccio-депы запекаются → клиенту verdaccio не нужен), без Portainer (oneshot + systemd-timer). Доки финализированы (stostayer.new `e55cfba`). Открытие `pass stostayer/client` показало свою инфру клиента (Portainer+registry) → развилка A/B пересмотрена. Фактический prod-деплой — follow-up, ждёт grant'а._ _Updated: 2026-05-29 — **РЕЦИДИВ того же инцидента, диагноз сменён.** Вчерашняя гипотеза «оператор в cutover» **опровергнута**. Истинная причина: ES публиковал `0.0.0.0:9200` мимо traefik (free-ES без auth) → **ransom-бот** удалял индексы by-name (мимо Control #1), оставлял `read_me` с BTC-выкупом. accessLog (Control #2) пуст — бот шёл прямо в порт. **Control #3 (fix):** убрана публикация host-порта (Portainer PUT stack 33) → дыра закрыта; `epz/products/artmone` restore из `daily-2026-05-25`. Второй, отдельный баг: epz-поиск падал у ОБОИХ тенантов — `config.get("tenant")` (node-config) не задан ни в `default.json`, ни в env-маппинге, `TENANT` env был мёртвым грузом → добавил `tenant` в overlay `default.json` (slovo/bookva), резолвится, ошибки прекратились (products работал — другой код-путь). accessLog откатан (сторожил не ту дверь). Exposure-audit → ⚪ `harden-books-vds-exposed-ports`. См. `.wiki/concepts/es-destructive-delete-incident-2026-05-26.md` § «Рецидив 2026-05-29»._ _Updated: 2026-05-28 (вечер) — 🟢 `restore-elasticsearch-indices-books-vds` **closed** в ту же сессию через snapshot restore (46 сек) из `daily-2026-05-25` (полные данные, ~2ч после оригинального reindex'а). RCA: 5 индексов (включая system `.tasks`) удалены через ES API `DELETE _all` за 1 сек на 2026-05-26 10:21 UTC, **1ч 11мин после создания bookva-es** — оператор в cutover-prep попал на canonical вместо internal-only bookva-es. Caller identity не восстановим (audit log = X-Pack платный, traefik accessLog был выключен, Portainer audit = enterprise). 2 preventive фикса applied + verified: (1) ES env `action.destructive_requires_name=true` — `DELETE _all` / wildcard теперь 400; (2) traefik JSON accessLog в `/letsencrypt/access.log` — будущие DELETE оставят forensic след. См. таску + `.wiki/concepts/es-destructive-delete-incident-2026-05-26.md`._ @@ -22,6 +23,17 @@ _Updated: 2026-05-26 — заведена `bookva-tenant-cutover-prep` ⚪ (7-st _Updated: 2026-05-25 (`iis-migration-to-ruvds` 🟢 closed Phase 1 per user decision — 9/24 hostnames live на RUVDS, source IIS оставлен running. `migrate-elasticsearch-to-books-vds` 🟢 closed ранее сегодня. 16 IIS hostnames + LE renewal pipeline + decommission — descoped в Closure note, не отдельные tracker tasks.)_ +## ⚪ [vehicles-loader-progress-deploy] — задеплоить vehicles-loader **0.4.0** (прогресс-логирование) на прод клиента + live-verify journalctl. Handoff из stostayer.new (код-таска `vehicles-loader-progress-logging` 🟢 closed by-inspection, commit `a74ef73`). См. [vehicles-loader-progress-deploy.md](vehicles-loader-progress-deploy.md). + +**Status:** ready +**Where I stopped:** (not started) — код 0.4.0 на master stostayer.new (НЕ запушен, Rule 4); образ 0.3.0 на проде, нужен rebuild. +**Next action:** build здесь → push `docker.stostayer.ru/vehicles-loader:0.4.0` → host pull + re-tag `:latest` → дождаться/прогнать sync на changed-выгрузке → `journalctl -u vehicles-loader.service` показывает фазы+батчи+delete-sweep. +**Blocker (soft):** push stostayer.new master ИЛИ build из локального дерева (commit `a74ef73` пока локальный). +**Branch:** n/a + + +--- + ## 🟢 [restore-elasticsearch-indices-books-vds] — closed 2026-05-28 — snapshot restore из `kreknin:daily-2026-05-25` за 46 сек (epz=820604, products=105922, artmone=2621, counts == source). Forensics: 5 индексов удалены через ES API `DELETE _all` 26.05 10:21 UTC, через 1ч 11мин после создания `bookva-es` — оператор в cutover-prep попал на canonical вместо internal-only bookva. Caller identity unrecoverable (audit log = X-Pack платный, traefik accessLog был выключен). 2 preventive фикса applied: ES env `action.destructive_requires_name=true` + traefik JSON accessLog в `/letsencrypt/access.log`. См. [restore-elasticsearch-indices-books-vds.md](restore-elasticsearch-indices-books-vds.md) § Closure + `.wiki/concepts/es-destructive-delete-incident-2026-05-26.md`. **Branch:** n/a diff --git a/.tasks/vehicles-loader-progress-deploy.md b/.tasks/vehicles-loader-progress-deploy.md new file mode 100644 index 0000000..c9470be --- /dev/null +++ b/.tasks/vehicles-loader-progress-deploy.md @@ -0,0 +1,71 @@ +# vehicles-loader-progress-deploy + +## Goal + +Доставить `@stostayer/vehicles-loader` **0.4.0** (прогресс-логирование) на прод клиента и +верифицировать, что `journalctl` во время боевого `sync` показывает движение, а не ~2ч тишины. + +Код-сайд готов: progress-logging зашипан в `stostayer.new` master (commit `a74ef73`, bump +0.3.0 → 0.4.0, 24/24 теста зелёные). Это чисто ops-handoff: rebuild образа на той же +схеме, что и 0.3.0 (build здесь → push в registry клиента `docker.stostayer.ru` → host +pull + re-tag), затем дождаться/прогнать sync и снять лог. + +Закрывает единственный не-верифицированный acceptance-критерий исходной таски +`stostayer.new/.tasks/vehicles-loader-progress-logging.md` — «journalctl показывает движение» +(остальные 4/5 покрыты unit-тестами; этот по природе требует живого прод-прогона). + +## Что нового в 0.4.0 (что должно появиться в логе) + +- Фазовые строки: `▶ — start` / `✓ — done: N rows, ` для + branches / vehicles / units / delete-sweep. +- Батч-прогресс: ` manufacturers: 18/183 (12s)`, ` units: 5/26 (…)` — авто-шаг ≈ total/10. +- delete-sweep per-model: ` delete-sweep : N disabled` / `0 — выгрузка полная` / + `skip (пустой seen-set)`. + +## Pending ops actions + +- [ ] **Build & push** на dev-машине из корня `stostayer.new` (та же схема, что 0.3.0, + см. `vehicles-loader-image-distribution` closed-блок): + `docker build -f packages/vehicles-loader/Dockerfile -t docker.stostayer.ru/vehicles-loader:0.4.0 .` + `docker push docker.stostayer.ru/vehicles-loader:0.4.0` + (verdaccio-депы запекаются при build здесь — клиенту verdaccio не нужен.) +- [ ] **На хосте клиента:** `docker pull docker.stostayer.ru/vehicles-loader:0.4.0` + + re-tag `:latest` (systemd-юнит запускает `:latest`). +- [ ] Дождаться планового прогона (systemd timer 06:20 MSK) **или** прогнать вручную + `systemctl start vehicles-loader.service` на changed-выгрузке (на unchanged будет + `skipped-unchanged`, прогресса не будет — нужен изменённый zip или сброс baseline). +- [ ] **Live-verify:** `journalctl -u vehicles-loader.service -f` (или `--since`) — видны + `▶ … start`, периодический батч-прогресс, `✓ … done`, per-model delete-sweep. + +## Acceptance criteria + +- Образ `docker.stostayer.ru/vehicles-loader:0.4.0` собран здесь и доступен на хосте клиента, + `:latest` указывает на 0.4.0. +- В `journalctl -u vehicles-loader.service` боевого прогона видно движение по фазам + + батч-прогресс + per-model delete-sweep counts (не тишина после трёх `Total …`). +- Данные залились корректно (`importRun` новый `ok`-ряд), email-отчёт ушёл (попутно + закрывает остаток «живой email-SEND в составе sync» из `vehicles-loader-image-distribution`). + +## Decisions log + +- 2026-05-30: заведено из `stostayer.new` session по явному указанию (закрыть код-таску + by-inspection, live-verify вынести в .admin как deploy-follow-up). Push кода НЕ сделан + (Rule 4) — деплою предшествует push master или build из локального дерева. + +## Open questions + +- [ ] Push `stostayer.new` master нужен до build, или билдим из локального рабочего дерева? + (commit `a74ef73` пока только локально.) +- [ ] Где взять changed-выгрузку для немедленной проверки, или ждём естественного изменения + `units.json` к ближайшему 06:20? + +## Notes + +- Схема деплоя 0.3.0 + обе инфра-гочи (IPv4 DB host; custom `/etc/hosts` для mail-DNS) — + `stostayer.new/.wiki/concepts/client-infra-access.md` + `vehicles-loader-docker-deploy.md`. +- Источник: `stostayer.new/.tasks/vehicles-loader-progress-logging.md` (🟢 closed by-inspection), + commit `a74ef73`. +- Предшественник: `.admin vehicles-loader-image-distribution` (🟢 closed 2026-05-29) — канал + поставки + первый боевой прогон 0.3.0. + +