5.6 KiB
5.6 KiB
_last_updated_, session_id
| _last_updated_ | session_id |
|---|---|
| 2026-08-21T01:40:00Z | 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.
Что сделать:
schedd.Dockerfile:@sched/daemon@0.8.0→@sched/daemon@0.9.0(host-stacks/local/sched-pipelines/)docker compose up -d --build schedd- Повторить 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. - Если после 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'а
- Применить schedd 0.9.0 + повторить cancel-тест (см. CRITICAL).
- GO на реальный мок-publish (снять dryRun:true, публиковать в verdaccio+Gitea) — после зелёного cancel-теста.
- VDS-миграция — после пары дней локально.
Не делать
- Не запускать реальные публикации (publish/githubDistro без dryRun:true) без явного GO.
- Не слать реальные письма unisender — только мок.
- Не патчить код команд — ТЗ через их инбоксы/доски.
- Не коммитить в репо команд — только в .admin.