From 29839b422457137171d4a682537f830b11ce1b5e Mon Sep 17 00:00:00 2001 From: vitya Date: Thu, 20 Aug 2026 20:08:31 +0300 Subject: [PATCH] =?UTF-8?q?tasks:=20sched-pipelines-local-stack=20?= =?UTF-8?q?=E2=80=94=20=D1=81=D1=82=D0=B5=D0=BD=D0=B4=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=BD=D1=8F=D1=82,=20=D0=A2=D0=97=20=D1=80=D0=B0=D0=B7=D0=BE?= =?UTF-8?q?=D1=81=D0=BB=D0=B0=D0=BD=D1=8B,=20=D0=B6=D0=B4=D1=91=D0=BC=20?= =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .tasks/STATUS.md | 8 ++++ .tasks/sched-pipelines-local-stack.md | 53 +++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 .tasks/sched-pipelines-local-stack.md diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index 7661089..ab11423 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -1,4 +1,12 @@ # Admin Task Board +_Updated: 2026-08-20 — 🟡 **[sched-pipelines-local-stack]** локальный стенд sched + воркеры (ym/ozon) поднят: schedd 0.4.2 (verdaccio) healthy, ym-воркер envelope ✓, browser CDP ✓, ntfy ✓, alert-bridge (HMAC + ntfy ✓, email ждёт sender-domain в go2). ТЗ разосланы (ozon ×7 дефектов, ym ×2, sched ×4 вопроса). Ozon-воркер остановлен до их фиксов (entrypoint job.getTask, envelope, notify, publish, email, Dockerfile, lock)._ + +## 🟡 [sched-pipelines-local-stack] — локальный стенд: sched daemon + ym/ozon воркеры + browser/ntfy/alert-bridge, потом VDS +**Status:** active +**Where I stopped:** стек поднят (docker compose up -d, `host-stacks/local/sched-pipelines/`): schedd 0.4.2 healthy (admin 127.0.0.1:18080), задачи загружены (ozon `0 2 * * *`, yandex `30 2 * * *`), ym ping envelope+auth ✓, bridge HMAC+ntfy ✓, browser CDP ✓. Ozon-воркер остановлен (их баги: `job.getTask()` → restart-loop; envelope не реализован; нет notify/publish на sched-пути; email на старый домен; Dockerfile COPY-шелл; lock пинит yaml на verdaccio). ТЗ отправлены: ozon `2026-08-20T17-06-00Z-admin.md`, ym `2026-08-20T17-06-30Z-admin.md`, sched (впрячься) `2026-08-20T17-05-48Z-admin.md`. Секреты в pass `sched-pipelines/local/*` (api-key/admin-key/webhook-secret/unisender). Email: go2 требует sender-domain в аккаунте (код 229) — вопрос человеку. GitHub-токен: репо в оргах создаёт ✓ (apilki admin, тест create+delete). +**Next action:** ждать фиксы ozon/ym (пересобрать после пушей), ответ sched по 4 вопросам (envelope-fallback, канон контракта, missed-slot, VDS). По email — настроить sender-domain в go2.unisender.ru (вопрос юзеру). После «GO» от юзера: снять DRY_RUN, добавить publish-стадии, прогнать dry-run пайплайнов, потом живой прогон. +**Branch:** master +**Weight:** needs-claude _Updated: 2026-08-19 — 🟢 **[sched-fnf-r10] ЗАКРЫТ (их ack 17:24Z): 6/6 PASS, 0 находок, 0 замечаний** — первый раунд без фиксов после режекта. Per-task alert routing (core 0.44.0/daemon 0.4.2): r10-a регресс, r10-b on:[] тишина (массивы replace), r10-c per-task on, r10-d per-task onMissed (missed-slot только для A, delayMs 129016), r10-e мультиканал (+без корневого webhook), r10-f fail-fast на load (3 варианта). Бонус HMAC MATCH. Процесс: раунд начинался с режекта (доки не сгенерированы/битый пример/не запушено), их фикс + push + сгенерированный dist + исправленный пример → ретест 6/6. Урок: F&F тестируется по СКОМПИЛИРОВАННОЙ доке (dev-сервер localhost:5108), не по сырцам; порядок хендоффа 1–6 у них в fnf-testing-procedure.md. Репорт: sched/.agents/inbox/2026-08-19T17-24-00Z-admin-fnf-r10-report.md. Стенд: /tmp/sched-alerts-stand/r10/._ _Updated: 2026-08-19 — 🟢 **[sched-fnf-r9] ЗАКРЫТ (их ack 15:06Z, ретест не просили) — бухгалтерия.** Webhook-алерты (core 0.43.0/daemon 0.4.1): лестница 6/6 + 2 бонус-клейма PASS, багов нет. Замечания (их фикс — проза доков): `retry.backoffMs` де-факто required (`maxAttempts:1`+`backoffMs:0`); «catch-up on creation» — свежие расписания не догоняют прошлые слоты (nextRunAt = будущее), гейт lastRunAt гасит history-less late dispatch. Репорт: sched/.agents/inbox/2026-08-19T15-02-00Z-admin-alerts-webhook-fnf-r9.md._ _Updated: 2026-08-18 — 🟢 **[sched-fnf-r8] ЗАКРЫТ (приёмка №5 UI, U1–U4 закрыты, ui 0.2.1→0.2.3) — бухгалтерия.** Schedule-as-entity (core 0.40.2/daemon 0.3.0/storage-* 0.3.1/ui 0.2.0): 15 репро-скриптов, №4 admin-api 52/52 (F1 tz-hoist, F3 PATCH-merge), №5 UI 13/13 (находки U1 форма-tz→400, U2 вёрстка ~58px). Подтверждённый контракт и карта стенда: .wiki/concepts/sched-fnf-r8-verification-stand.md._ diff --git a/.tasks/sched-pipelines-local-stack.md b/.tasks/sched-pipelines-local-stack.md new file mode 100644 index 0000000..bd020f3 --- /dev/null +++ b/.tasks/sched-pipelines-local-stack.md @@ -0,0 +1,53 @@ +# sched-pipelines-local-stack + +Локальный стенд: sched daemon + HTTP-воркеры (yandex-market-partner-api-client, ozon-seller-api-client) ++ CDP-browser + локальный ntfy + alert-bridge (sched webhook → ntfy/email Unisender Go). +Потом миграция на VDS. + +## Статус (2026-08-20) + +**Поднято и проверено:** +- schedd 0.4.2 (published, verdaccio) — healthy; admin API 127.0.0.1:18080 (SCHED_ADMIN_KEY из pass) +- tasks.json: ozon `0 2 * * *`, yandex `30 2 * * *`, alerts webhook (HMAC) → alert-bridge +- ym-client-builder: envelope ✓ (ping → succeeded), auth ✓ (401 на wrong key) +- browser-cdp: Chrome 131 + CDP :9222 ✓ +- ntfy локальный :8096 ✓; alert-bridge HMAC ✓ + доставка в топик sched-alerts ✓ +- email: unisender go2 код 229 — нужен sender-domain в аккаунте (вопрос юзеру) + +**Ozon-воркер ОСТАНОВЛЕН** (их баги, ждём фиксы — ТЗ в их инбоксе): +1. envelope-контракт не реализован (всегда 200 {runId,verdict} → sched видит успех) +2. нет notify на sched-пути +3. нет publish-стадии на sched-пути (publish только в крон-пути, крон выключен) +4. email на старый домен go.unisender.ru + массив to + form → go2 JSON +5. `job.getTask()` нет в node-cron v4 → restart-loop +6. Dockerfile `COPY ... 2>/dev/null || true` — не билдится +7. lock пинит yaml на verdaccio → E401 в чистом контейнере + +**Yandex (2 дефекта, ТЗ отправлено):** +1. email-эндпоинт go2.unisender.ru/api/v1/sendEmail → 404; правильный: /ru/transactional/api/v1/email/send.json (JSON body) +2. ntfy dead-домен + email.to плейсхолдер в deploy/sched-task.json + +**sched (письмо «впрягись»):** +1. envelope-mode + non-envelope 2xx = тихий succeeded (маскирует фейлы) — позиция/фича +2. канон envelope-контракта для ozon-команды +3. missed-slot при ежедневных 2:00/2:30 — grace ок? +4. VDS: daemon без docker-runner — docker-сокет не нужен? + +## Секреты (pass) + +`sched-pipelines/local/*`: sched-api-key (общий sched→воркеры), admin-key, webhook-secret, unisender-go-api-key. +В стенде через `.env` (gitignored) → `render-tasks.cjs` → `tasks.generated.json`. + +## Команды + +```bash +cd ~/projects/.admin/host-stacks/local/sched-pipelines +node render-tasks.cjs && docker compose up -d --build +docker compose logs -f schedd +``` + +## Проверки GitHub-токена + +`OpeItcLoc03` (gh auth), orgs: schedjs, snollacms, apitano, apilki (role **admin**). +Репо в оргах создаёт ✓ (тест `apilki/token-check-*` create + delete, delete_repo scope есть). +Нужно для create-if-missing: apilki/ozon-seller-typescript, apilki/ozon-seller-postman, apilki/yandex-market-postman (ещё не существуют).