Files
admin/.tasks/NEXT_SESSION.md

62 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
_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.