--- _last_updated_: 2026-08-21T00:52:30Z session_id: sched-pipelines-apply-0.5.0-2026-08-20 --- # Next session handoff Сессия: schedd 0.5.0 применён, timeoutMs -1, одновременный dry-run обеих тасок зелёный, мок-publish ТЗ разосланы. ## Recent commits (в .admin) - `7ec721e2` ops: schedd 0.6.0 — timeoutMs применяется к существующим таскам, absent=-1 дефолт (проверено живьём) - `3060263b` ops: стенд — schedd 0.5.0 (run-deadline), timeoutMs -1, ozon bind-mount state на хост ## Open треки | Трек | Готовность | Entry-point | |---|---|---| | `sched-pipelines-local-stack` (🟡 active) | schedd 0.5.0; **оба dry-run зелёные через sched (ozon 8/8, yandex 11/11)**; publish-мок ТЗ на досках команд | `.tasks/sched-pipelines-local-stack.md` | ## Cancel-канал (раунд 3) - **sched** ✅ (core 0.47.0/daemon 0.7.0, проверено на стенде): cancelUrl в accepted-envelope; cancel сначала POSTит {runId} воркеру, потом финиширует; провал сигнала → `cancel signal failed` в error. Выбор дизайна: **A (cancelUrl)**, письмо 00:52Z — ACK решает инцидент «cancel не остановил воркер» (сегодня в бою после cancel воркер создал репо на GitHub). - **воркеры** ⚪ `worker-cancel-url` (обе команды): принять cancelUrl, POST /cancel эндпоинт, флаг между стадиями ДО мутаций. ## Раунды ТЗ **Раунд 1 (мокабельность publish, оба закрыли):** - ozon `publish-mockable` ✅ (175/175): data.registry/remoteBase/githubApiBase + PUBLISH_* env. - yandex `publish-mockable` ✅: data.githubApiBase для REST (registry/remoteBase были). **Раунд 2 (Gitea-совместимость, оба на досках ⚪ `gitea-mock-publish`):** - Мок-publish = verdaccio (npm) + наш Gitea (git.kzntsv.site, орга apilki, API v1). - ozon: gh repo create CLI → REST POST /orgs/{owner}/repos (Gitea нет /api/v3); remoteBase URL-join. - yandex: только remoteBase URL-join (REST уже ок). - Репо руками НЕ создавать — create-if-missing воркерами (тестируемый сценарий). Gitea push auth проверен: x-access-token:TOKEN@ работает. **sched** — ✅ ЗАКРЫТО (0.6.0): applyTask timeoutMs + absent=-1 дефолт, проверено живьём. ## Стенд (host-stacks/local/sched-pipelines) - schedd **0.6.0** (daemon); tasks.json без timeoutMs — дефолт absent=-1 (никогда), применён и проверен. - Оба воркера свежие (ozon с фиксами ТЗ №1-10: envelope реализован; ym с JSDoc-фиксом). - Compose: ozon bind-mount `./data-ozon` → /app/data + `data-ozon/state.json` → /app/state.json (раньше state жил в слое образа). ym: `./data-ym` → /app/data. - Находка для ozon: run.js хардкодит state/output в ROOT образа, /app/data не используется воркером — не включено в их ТЗ (могу добавить позже). ## Спроси user'а 1. **Мок-publish стенд**: после фиксов publish-mockable от обеих команд — построить мок-GitHub (локальный HTTP-мок REST + git remote на локальный bare-репо) + мок-npm (verdaccio) и прогнать publish-стадию. Либо просто ждать GO и идти на verdaccio напрямую. 2. **GO на реальный прогон** — пока НЕ дан. План vitya: verdaccio (не npmjs) → books тестирует → релиз. Воркерам: registry verdaccio + NPM_TOKEN verdaccio. 3. **VDS-миграция** — после пары дней локально + зелёных реальных прогонов. ## Не делать - Не запускать реальные публикации (publish/githubDistro) без явного GO. - Не слать реальные письма unisender — только мок (data-mail/). - Не патчить код команд — ТЗ через их инбоксы/доски, они пушат, я пересобираю. - Не коммитить в репо команд (yandex/ozon/sched) — только в .admin. ## Memory updates за сессию - **sched run-deadline контракт**: task-level `timeoutMs` (-1 = никогда, >0 = фейл через N мс, absent = legacy 25-мин poll-потолок). Баг: applyTask при upsert не переносит timeoutMs. Требование vitya: -1 = дефолт, absent должен быть -1. - **ozon publish.js**: npm publish хардкод (нет registry), pushUrl хардкод github.com, GH API хардкод — мокабельность только через data-поля (ТЗ). - **ym github-distro.js**: data.registry (npm) + data.remoteBase (git remotes) уже есть; GH_API константа — нужен data.githubApiBase (ТЗ).