мок-publish заблокирован: контракт dryRun сломан в ozon (payload.data вместо плоского payload), письмо-ТЗ отправлено
This commit is contained in:
@@ -1,42 +1,53 @@
|
|||||||
_last_updated_: 2026-08-20T22:00:00Z
|
_last_updated_: 2026-08-20T22:00:00Z
|
||||||
session_id: sched-cancel-fixed-2026-08-20
|
session_id: publish-dryrun-contract-blocked-2026-08-20
|
||||||
---
|
---
|
||||||
|
|
||||||
# Next session handoff
|
# Next session handoff
|
||||||
|
|
||||||
Сессия: **cancel-баг закрыт** — schedd 0.9.0 применён, cancel-тест зелёный. Ждём GO на реальный мок-publish.
|
Сессия: **cancel-канал закрыт (schedd 0.9.0, тест зелёный)**, но мок-publish **ЗАБЛОКИРОВАН** —
|
||||||
|
найден сломанный контракт dryRun в ozon. Письмо отправлено, ждём их фикс + отчёт.
|
||||||
|
|
||||||
## ✅ DONE: schedd 0.9.0 применён + cancel-тест ЗЕЛЁНЫЙ
|
## 🔴 БЛОКЕР: ozon publish-dryrun-contract-broken (письмо 21:55Z)
|
||||||
|
|
||||||
- `schedd.Dockerfile`: `@sched/daemon@0.8.0` → `@sched/daemon@0.9.0` (verdaccio latest, core 0.48.0), commit `225d235c`, запушен.
|
**Root cause:** `generator/worker/server.js:159` читает `payload.data` (вложенный ключ), но
|
||||||
- `docker compose up -d --build schedd` — контейнер healthy.
|
в sched-режиме `payload` = `envelope.data` ЦЕЛИКОМ (worker-http.js:88) — вложенного `data`
|
||||||
- Cancel-тест (полный ран ozon, state {} → full run, cancel на generate):
|
в таске нет. → `mergedData.dryRun` всегда `undefined` → `effectiveDryRun` = env `DRY_RUN` =
|
||||||
- schedd: `[sched] [cancel] POST http://ozon-seller-builder:8080/cancel/<runId> runId=...` + `[cancel] ack runId=... status=200` — **форвардинг реально слал сигнал** (в 0.8.0 не слался никогда).
|
**true всегда** (compose DRY_RUN=1). Снятие `dryRun:true` в таске НЕ перебивает env —
|
||||||
- воркер: `[cancel] received runId=...` + `[cancel] flag set`; generate докрутился → `[stage] generate done` → `[cancel] stop before stage fix`.
|
publish-стадия ozon навсегда в dry-runDiff. Та же дыра для registry/remoteBase/githubApiBase
|
||||||
- Стадии fix/build/postman/state/publish **НЕ выполнялись**; state.json остался `{}`; ран `cancelled (error: cancelled by user)`.
|
(читаются как `payload.data.*` → undefined → env-фоллбек).
|
||||||
- Root cause подтверждён: daemon-диспетчер не форвардил cancel → теперь форвардит по task.runner, нет хука → no-op.
|
|
||||||
|
**Контракт (сосед yandex делает ПРАВИЛЬНО, worker/stages/publish.js:92):**
|
||||||
|
`data = ctx.data ?? {}` (плоский envelope.data) → `dryRun = typeof data.dryRun === 'boolean' ? data.dryRun : env`.
|
||||||
|
|
||||||
|
**Что требует письмо от ozon:**
|
||||||
|
1. server.js: `...((payload && payload.data) || {})` → spread плоского payload `...(payload || {})` (или читать `payload.dryRun` и т.д. напрямую), комментарий обновить.
|
||||||
|
2. Тот же плоский контракт в entrypoint.js cron-пути.
|
||||||
|
3. Тест: envelope data.dryRun:false → реальный publish (мутации); data.dryRun:true → dryRunDiff; отсутствие → env-фоллбек.
|
||||||
|
4. Сьют без регрессий.
|
||||||
|
5. **Отчёт письмом в .admin.**
|
||||||
|
|
||||||
## Стенд (host-stacks/local/sched-pipelines)
|
## Стенд (host-stacks/local/sched-pipelines)
|
||||||
|
|
||||||
- schedd 0.9.0, ym-client-builder свежий (cancel-канал + логи), ozon свежий. Все контейнеры Up, schedd healthy.
|
- schedd **0.9.0** (cancel-форвардинг, commit 225d235c), healthy. Cancel-тест зелёный
|
||||||
- tasks.json: ozon stages [...publish] dryRun:true; yandex stages [...publish, githubDistro] dryRun:true. DRY_RUN=1 в compose.
|
(generate done → stop before stage fix; стадии после не шли; state.json остался {}).
|
||||||
- Ozon state.json на хосте (bind-mount), `{}` — следующий ран полный (initial).
|
- tasks.json: ozon+yandex dryRun:true (DRY_RUN=1 в compose). **НЕ трогать, пока ozon не фикснет.**
|
||||||
|
- ym-client-builder / ozon-seller-builder / browser / ntfy / alert-bridge / unisender-mock — Up.
|
||||||
|
- Ozon state.json на хосте, `{}` — следующий ран полный (initial).
|
||||||
|
|
||||||
## Мок-publish статус
|
## Мок-publish — ЗАМОРОЖЕН
|
||||||
|
|
||||||
- **Мок-npm = verdaccio** (verdaccio.kzntsv.site), **мок-GitHub = Gitea** (git.kzntsv.site, орга `apilki`, push x-access-token:TOKEN@ проверен).
|
- yandex готов (13/13 dry, контракт правильный). ozon НЕ готов — контракт сломан, фикс от них.
|
||||||
- **Оба dry-publish зелёные**: yandex 13/13 (publish+githubDistro), ozon 10/10 (publish dryRun preview). GitHub/Gitea/verdaccio чисты — ноль мутаций.
|
- Снять dryRun:true можно ТОЛЬКО после письма-отчёта от ozon + повторной проверки контракта.
|
||||||
- Репо руками НЕ создаём — create-if-missing воркеров (тестируемый сценарий).
|
- Репо руками не создаём — create-if-missing воркеров (тестируемый сценарий).
|
||||||
- data dryRun в тасках: `registry/remoteBase/githubApiBase` через `__PUBLISH_*__` плейсхолдеры в render-tasks.cjs (из .env, gitignored).
|
|
||||||
|
|
||||||
## Спроси user'а
|
## Спроси user'а
|
||||||
|
|
||||||
1. **GO на реальный мок-publish**: снять `dryRun:true` → воркеры реально публикуют в verdaccio (npm) + Gitea (репо/релизы). Теперь безопасно: cancel останавливает воркера, dry-run инфраструктура мок-окружения (не npmjs/github.com).
|
1. Проверить письмо-отчёт ozon → если фикс корректный, GO на мок-publish (снять dryRun:true → verdaccio+Gitea).
|
||||||
2. VDS-миграция — после пары дней локально.
|
2. VDS-миграция — после пары дней локально.
|
||||||
|
|
||||||
## Не делать
|
## Не делать
|
||||||
|
|
||||||
- Не запускать реальные публикации в npmjs/github.com (реальный publish без dryRun на реальные endpoints) без явного GO.
|
- Не запускать реальные публикации в npmjs/github.com без явного GO.
|
||||||
- Не слать реальные письма unisender — только мок (unisender-mock).
|
- Не слать реальные письма unisender — только мок.
|
||||||
- Не патчить код команд — ТЗ через их инбоксы/доски.
|
- Не патчить код команд — ТЗ через их инбоксы (письмо уже отправлено).
|
||||||
- Не коммитить в репо команд — только в .admin.
|
- Не коммитить в репо команд — только в .admin. Письма доставляются на диск (inbox-монитор), не коммитятся.
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
# Admin Task Board
|
# Admin Task Board
|
||||||
_Updated: 2026-08-20 — 🟡 **[sched-pipelines-local-stack]** schedd **0.9.0 применён + cancel-тест ЗЕЛЁНЫЙ** (cancel реально останавливает воркера ДО publish: generate done → stop before stage fix; fix/build/postman/state/publish не выполнялись, state.json остался {}, ран cancelled). Мок-publish dry оба зелёные ранее (ozon 10/10, yandex 13/13). Осталось: GO на реальный мок-publish (снять dryRun:true) + VDS-миграция.
|
_Updated: 2026-08-20 — 🟡 **[sched-pipelines-local-stack]** schedd **0.9.0 применён + cancel-тест ЗЕЛЁНЫЙ**. **НО мок-publish ЗАБЛОКИРОВАН**: контракт dryRun в ozon сломан (`payload.data` вместо плоского `payload` → data.dryRun=false не доезжает до publish-стадии, env DRY_RUN=1 всегда выигрывает). Письмо-ТЗ отправлено (21:55Z), ждём фикс + отчёт. Yandex контракт правильный.
|
||||||
|
|
||||||
## 🟡 [sched-pipelines-local-stack] — локальный стенд: sched daemon + ym/ozon воркеры + browser/ntfy/alert-bridge, потом VDS
|
## 🟡 [sched-pipelines-local-stack] — локальный стенд: sched daemon + ym/ozon воркеры + browser/ntfy/alert-bridge, потом VDS
|
||||||
**Status:** active
|
**Status:** active
|
||||||
**Where I stopped:** schedd **0.9.0** применён (verdaccio latest, core 0.48.0), commit 225d235c. **Cancel-тест зелёный**: полный ран ozon → cancel на generate → `[sched] [cancel] POST http://ozon-seller-builder:8080/cancel/<runId>` + `ack status=200`; воркер `[cancel] received`/`flag set`, `[stage] generate done` → `[cancel] stop before stage fix`; fix/build/postman/state/publish НЕ выполнялись; state.json остался {}; ран `cancelled (error: cancelled by user)`. Инцидент с github.com-репо (yandex) — закрыт (репо удалено, GitHub/Gitea чисты). Мок-publish dry: yandex 13/13 (publish+githubDistro), ozon 10/10 (publish) — оба зелёные, ноль мутаций.
|
**Where I stopped:** schedd **0.9.0** применён (verdaccio latest, core 0.48.0), commit 225d235c. **Cancel-тест зелёный**: полный ран ozon → cancel на generate → `[sched] [cancel] POST .../cancel/<runId>` + `ack status=200`; воркер `[cancel] received`/`flag set`, `[stage] generate done` → `[cancel] stop before stage fix`; стадии после НЕ шли; state.json остался {}; ран cancelled. **БЛОКЕР мок-publish**: ozon server.js:159 читает `payload.data` (вложенный) — в sched-режиме payload = envelope.data целиком, вложенного data нет → mergedData.dryRun всегда undefined → effectiveDryRun = env DRY_RUN = true всегда. Снятие dryRun:true в таске не перебивает env — ozon publish навсегда в dry-runDiff. yandex контракт правильный (плоский data.dryRun). Письмо-ТЗ ozon: 2026-08-20T21-55-00Z-admin.md. Инцидент с github.com-репо (yandex) — закрыт.
|
||||||
**Next action:** (1) ✅ schedd 0.9.0 + cancel-тест — DONE; (2) **ждать GO user'а на реальный мок-publish** (снять dryRun:true → verdaccio+Gitea); (3) VDS-миграция (после пары дней локально).
|
**Next action:** (1) ✅ schedd 0.9.0 + cancel-тест — DONE; (2) 🔴 **ждать фикс ozon (publish-dryrun-contract-broken) + их отчёт** → проверить контракт → GO user'а на мок-publish (снять dryRun:true → verdaccio+Gitea); (3) VDS-миграция (после пары дней локально).
|
||||||
**Branch:** master
|
**Branch:** master
|
||||||
**Weight:** needs-claude
|
**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-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/._
|
||||||
|
|||||||
Reference in New Issue
Block a user