62 lines
5.6 KiB
Markdown
62 lines
5.6 KiB
Markdown
---
|
||
_last_updated_: 2026-08-21T01:40:00Z
|
||
session_id: sched-cancel-rootcause-2026-08-21
|
||
---
|
||
|
||
# Next session handoff
|
||
|
||
Сессия: cancel-канал доведён до root cause (баг sched daemon-диспетчера), фикс 0.9.0 НЕ применён — первым делом.
|
||
|
||
## 🔴 CRITICAL: применить schedd 0.9.0 и повторить cancel-тест
|
||
|
||
**sched нашёл root cause cancel-бага (письмо 21:27:46Z):**
|
||
- daemon-диспетчер НЕ форвардил `cancel` к per-task раннеру — обёртка Runner содержала только `{run, poll}`, без `cancel`. `runner.cancel` = undefined → `if (ar.cancelUrl && runner.cancel)` = false → **сигнал не слался никогда**, ран финишил `cancelled` с чистым error (провала нет → `signal failed` не откуда). Воркер продолжал стадии.
|
||
- Логи 0.8.0 в этом случае врали: `[cancel] no cancelUrl — legacy stop-polling`, хотя cancelUrl был в envelope.
|
||
- **Фикс: daemon 0.9.0** (core 0.48.0 остаётся), commit a6c8a4b, на verdaccio latest. Диспетчер форвардит cancel по task.runner; нет хука → no-op.
|
||
|
||
**Что сделать:**
|
||
1. `schedd.Dockerfile`: `@sched/daemon@0.8.0` → `@sched/daemon@0.9.0` (host-stacks/local/sched-pipelines/)
|
||
2. `docker compose up -d --build schedd`
|
||
3. Повторить cancel-тест: ран ozon (state сброшен в {} — full run) → cancel на generate → по логам `[sched] [cancel] POST <cancelUrl> runId=...` + `[cancel] ack status=200` + воркер `[cancel] received` + `[cancel] stop before stage ...` + `[stage] ... done` — стоп ДО publish.
|
||
4. Если после ack стадии продолжаются — баг воркера (флаг не проверяется), контракт-ревью с sched.
|
||
|
||
**Важно про cancel-тест:** cancel теперь реально остановит воркер (если 0.9.0 работает) — воркер не будет публиковать после cancel. Но publish у ozon с `dryRun: true` в таске — безопасно в любом случае.
|
||
|
||
## Стенд (host-stacks/local/sched-pipelines)
|
||
|
||
- schedd **0.8.0** (нужно 0.9.0!), ym-client-builder свежий (e7cf3e5 cancel-канал + c740bdc логи), ozon свежий (0649c80 + f021f38 логи).
|
||
- tasks.json: ozon stages [...publish] dryRun:true; yandex stages [...publish, githubDistro] dryRun:true. DRY_RUN=1 в compose (безопасный дефолт).
|
||
- Ozon state.json на хосте (bind-mount), сейчас {} (сброшен тестами) — следующий ран полный (initial).
|
||
- Все контейнеры Up. Исключение: **озон-контейнер был пересоздан** (docker rm + up) — образ тот же, данные в data-ozon/.
|
||
|
||
## Мок-publish статус
|
||
|
||
- **Мок-npm = verdaccio** (verdaccio.kzntsv.site), **мок-GitHub = Gitea** (git.kzntsv.site, орга `apilki` создана, API v1, push x-access-token:TOKEN@ проверен).
|
||
- **Оба dry-publish зелёные**: yandex 13/13 (publish+githubDistro, reposToCreate честно показан), ozon 10/10 (publish dryRun preview). GitHub/Gitea/verdaccio чисты — ноль мутаций.
|
||
- Репо руками НЕ создаём — create-if-missing воркеров (тестируемый сценарий).
|
||
- data dryRun в тасках: `registry/remoteBase/githubApiBase` через `__PUBLISH_*__` плейсхолдеры в render-tasks.cjs (из .env, gitignored).
|
||
|
||
## Команды — все таски закрыты, ждём только применение
|
||
|
||
- **sched**: timeoutMs (0.6.0), dry-run контракт (0.7.0 был... нет — 0.7.0 это cancel-канал), cancel-канал (0.7.0), cancel-логи (0.8.0), **cancel-форвардинг фикс (0.9.0 — НЕ применён)**.
|
||
- **ozon**: publish-mockable ✅, gitea-mock-publish ✅, dry-run-contract-align ✅, worker-cancel-url ✅, cancel-signal-logging ✅.
|
||
- **yandex**: publish-mockable ✅, gitea-mock-publish ✅, dry-run-contract-align ✅, worker-cancel-url ✅, cancel-signal-logging ✅.
|
||
|
||
## Инцидент сессии (важно для истории)
|
||
|
||
- Yandex **создал репо на github.com** (apilki/yandex-market-typescript) при мок-прогоне — потому что (а) publish без dry-run (тогда ещё не было фикса) и (б) cancel не остановил воркер (баг sched daemon-диспетчера). Репо **удалено** (204→404), npmjs не тронут, verdaccio пуст. GitHub/Gitea сейчас чисты.
|
||
- Урок: yandex publish реальный без dryRun — не запускать publish/githubDistro без явного dryRun:true или GO.
|
||
|
||
## Спроси user'а
|
||
|
||
1. Применить schedd 0.9.0 + повторить cancel-тест (см. CRITICAL).
|
||
2. GO на реальный мок-publish (снять dryRun:true, публиковать в verdaccio+Gitea) — после зелёного cancel-теста.
|
||
3. VDS-миграция — после пары дней локально.
|
||
|
||
## Не делать
|
||
|
||
- Не запускать реальные публикации (publish/githubDistro без dryRun:true) без явного GO.
|
||
- Не слать реальные письма unisender — только мок.
|
||
- Не патчить код команд — ТЗ через их инбоксы/доски.
|
||
- Не коммитить в репо команд — только в .admin.
|