доска+хендофф: cancel-тест зелёный, schedd 0.9.0, ждём GO на мок-publish

This commit is contained in:
2026-08-21 00:48:23 +03:00
parent 225d235cd5
commit 415134b929
2 changed files with 23 additions and 42 deletions

View File

@@ -1,61 +1,42 @@
---
_last_updated_: 2026-08-21T01:40:00Z
session_id: sched-cancel-rootcause-2026-08-21
_last_updated_: 2026-08-20T22:00:00Z
session_id: sched-cancel-fixed-2026-08-20
---
# Next session handoff
Сессия: cancel-канал доведён до root cause (баг sched daemon-диспетчера), фикс 0.9.0 НЕ применён — первым делом.
Сессия: **cancel-баг закрыт** — schedd 0.9.0 применён, cancel-тест зелёный. Ждём GO на реальный мок-publish.
## 🔴 CRITICAL: применить schedd 0.9.0 и повторить cancel-тест
## ✅ DONE: 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` в таске — безопасно в любом случае.
- `schedd.Dockerfile`: `@sched/daemon@0.8.0``@sched/daemon@0.9.0` (verdaccio latest, core 0.48.0), commit `225d235c`, запушен.
- `docker compose up -d --build schedd` — контейнер healthy.
- Cancel-тест (полный ран ozon, state {} → full run, cancel на generate):
- schedd: `[sched] [cancel] POST http://ozon-seller-builder:8080/cancel/<runId> runId=...` + `[cancel] ack runId=... status=200`**форвардинг реально слал сигнал** (в 0.8.0 не слался никогда).
- воркер: `[cancel] received runId=...` + `[cancel] flag set`; generate докрутился → `[stage] generate done``[cancel] stop before stage fix`.
- Стадии fix/build/postman/state/publish **НЕ выполнялись**; state.json остался `{}`; ран `cancelled (error: cancelled by user)`.
- Root cause подтверждён: daemon-диспетчер не форвардил cancel → теперь форвардит по task.runner, нет хука → no-op.
## Стенд (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/.
- schedd 0.9.0, ym-client-builder свежий (cancel-канал + логи), ozon свежий. Все контейнеры Up, schedd healthy.
- tasks.json: ozon stages [...publish] dryRun:true; yandex stages [...publish, githubDistro] dryRun:true. DRY_RUN=1 в compose.
- Ozon state.json на хосте (bind-mount), `{}` — следующий ран полный (initial).
## Мок-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 чисты — ноль мутаций.
- **Мок-npm = verdaccio** (verdaccio.kzntsv.site), **мок-GitHub = Gitea** (git.kzntsv.site, орга `apilki`, push x-access-token:TOKEN@ проверен).
- **Оба dry-publish зелёные**: yandex 13/13 (publish+githubDistro), 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-миграция — после пары дней локально.
1. **GO на реальный мок-publish**: снять `dryRun:true` → воркеры реально публикуют в verdaccio (npm) + Gitea (репо/релизы). Теперь безопасно: cancel останавливает воркера, dry-run инфраструктура мок-окружения (не npmjs/github.com).
2. VDS-миграция — после пары дней локально.
## Не делать
- Не запускать реальные публикации (publish/githubDistro без dryRun:true) без явного GO.
- Не слать реальные письма unisender — только мок.
- Не запускать реальные публикации в npmjs/github.com (реальный publish без dryRun на реальные endpoints) без явного GO.
- Не слать реальные письма unisender — только мок (unisender-mock).
- Не патчить код команд — ТЗ через их инбоксы/доски.
- Не коммитить в репо команд — только в .admin.

View File

@@ -1,10 +1,10 @@
# Admin Task Board
_Updated: 2026-08-20 — 🟡 **[sched-pipelines-local-stack]** schedd 0.5.0 применён; одновременный dry-run ozon+yandex через sched — оба зелёные (ozon 8/8, ym 11/11). timeoutMs -1 не применился (баг sched applyTask — письмо 19:30Z, требование vitya: -1=дефолт). Мок-publish: ТЗ обеим командам (publish-mockable). GO на реальный прогон не дан.
_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-миграция.
## 🟡 [sched-pipelines-local-stack] — локальный стенд: sched daemon + ym/ozon воркеры + browser/ntfy/alert-bridge, потом VDS
**Status:** active
**Where I stopped:** schedd **0.8.0** (нужно 0.9.0 — cancel-форвардинг фикс НЕ применён, см. NEXT_SESSION CRITICAL). Мок-publish dry **оба зелёные** (yandex 13/13 вкл publish+githubDistro, ozon 10/10 вкл publish; GitHub/Gitea/verdaccio чисты, ноль мутаций). Cancel-канал: все команды закрыли свои части (sched 0.7.0 канал + 0.8.0 логи; ozon 0649c80+f021f38; yandex e7cf3e5+c740bdc). **Root cause cancel-бага: sched daemon-диспетчер не форвардил cancel к раннеру** — сигнал не слался никогда; фикс daemon 0.9.0 на verdaccio. Инцидент: yandex создал репо на github.com при мок-прогоне (publish без dry-run + cancel не остановил) — удалено, всё чисто.
**Next action:** (1) schedd 0.9.0 + повторный cancel-тест (стоп воркера до publish); (2) GO на реальный мок-publish (снять dryRun:true → verdaccio+Gitea); (3) VDS-миграция.
**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) — оба зелёные, ноль мутаций.
**Next action:** (1) schedd 0.9.0 + cancel-тест — DONE; (2) **ждать GO user'а на реальный мок-publish** (снять dryRun:true → verdaccio+Gitea); (3) VDS-миграция (после пары дней локально).
**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/._