tasks: sched-pipelines-local-stack — стенд поднят, ТЗ разосланы, ждём фиксы

This commit is contained in:
2026-08-20 20:08:31 +03:00
parent bfcc4d5e72
commit 29839b4224
2 changed files with 61 additions and 0 deletions

View File

@@ -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), не по сырцам; порядок хендоффа 16 у них в 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, U1U4 закрыты, 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._

View File

@@ -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 (ещё не существуют).