diff --git a/.tasks/NEXT_SESSION.md b/.tasks/NEXT_SESSION.md index 481e276..90bd6d5 100644 --- a/.tasks/NEXT_SESSION.md +++ b/.tasks/NEXT_SESSION.md @@ -1,62 +1,57 @@ -_last_updated_: 2026-08-21T06:30:00Z -session_id: publish-mock-verified-defer-stand-2026-08-21 +_last_updated_: 2026-08-21T07:55:00Z +session_id: publish-mock-green-idempotency-2026-08-21 --- # Next session handoff -Сессия: **оба пира код-реди, остался продакшн-стенд** — ozon fix #7 и yandex -heads-up-fix проверены независимо (код + сьюты), таски закрыты на досках -проектов. Стенд-прогон отложен юзером **на следующую сессию**. +Сессия: **мок-publish кампания ЗАКРЫТА** — оба пира зелёные в моке, идемпотентность +подтверждена, режекты закрыты. Осталось: реальный деплой (отмашка юзера) + +кейс обновления спеки (сработает сам при апдейте апстрима). -## Recent commits (campaign-контекст) +## Recent commits -- ozon `325376a` fix(service): createRelease читает fetch-Response через json() — режект #7 закрыт (210/210, pushed) -- ozon `efa79b6` meta(tasks): close [publish-dryrun-contract-broken] -- yandex `3d0c6fc` fix(worker): release idempotency — 409 (Gitea) || 422 (123/123, pushed) -- yandex `dc71f66` docs(handoff): release 409 idempotency note -- .admin `5b502b63` режект #7 ozon (письмо 00:05Z — уже отработан фиксом) +- .admin `96a4deb7` chore(stand): мок обоих зелёный — readmeTemplate для ozon (bind-mount), state сброшен +- ozon `8633f25` fix(publish): package-readme.md — npm-карточка + GH-штамп из шаблона, фолбэк-префикс убран (212/212) +- yandex `a4b3432` fix: версия — первый ран без бампа, база = state.publishedVersion (130/130) +- yandex `24235b1` fix(worker): gh-distro README-штамп из шаблона + сборка до создания репо +- yandex `a131fd2` fix: publish cwd=out + --access public (ENEEDAUTH) — вставил я (admin) -## Open треки +## Состояние мок-стенда (sched-pipelines local) -| Трек | Готовность | Entry-point | -|---|---|---| -| sched-pipelines-local-stack (umbrella, mock-publish кампания) | 🟡 код-готова, **стенд не прогнан** | `.tasks/sched-pipelines-local-stack.md` + handoff ниже | +- Оба рана (ozon `3b35cb48`, yandex `898c395a`): ✅ succeeded, чистый мок +- verdaccio: `@apilki/ozon-seller@0.1.0`, `@apilki/yandex-market@0.1.0` (первый publish без бампа) +- Gitea apilki: 4 репо (typescript+postman у обоих), 4 release `v0.1.0` +- README по спеке: GH-дистро штамп `Версия: X · API от Y`, npm-карточка кастомная, бойлерплейт: 0 +- Повторные раны (ozon `bbf39c1a`, yandex `869d037f`): **noop** — идемпотентность ✅ +- Кейс «спека изменилась → minor++ → 0.2.0»: не выстрелил (апстрим yandex-market не менялся, всё ещё 6be0108668e6); покроется сам при следующем апдейте -## 🔴 ГЛАВНОЕ ДЛЯ СЛЕДУЮЩЕЙ СЕССИИ: продакшн-стенд (отмашка юзера уже есть — «в следующей сессии») +## Стенд-особенности -Порядок (из писем пиров): - -1. **ozon** — 2 полных рана **0.1.0 подряд** (dryRun:false): оба должны - `succeeded`. Проверяемый путь: повторный POST → Gitea 409 → GET - `releases/tags/v0.1.0` (реально отдаёт `{id: 114, ...}`) → PATCH по id - из `json()` (фикс #7). Если 2-й ран succeeded — idempotency доказана. -2. **yandex** — ран с токенами в env. Yandex явно просил: «Ждём отмашку + - NPM_TOKEN/GITHUB_TOKEN в env». Их фикс: 409||422 → GET tag + PATCH body. -3. Отчёт обоим пирам письмом в их инбоксы (имя файла по канону, `from: .admin`). - -**Токены:** NPM_TOKEN + GITHUB_TOKEN — из `pass` (`pass ls` / `pass show `), -НЕ из вики/конфигов (secrets rule). В handoff/git токены не писать. +- Ozon `package-readme.md` НЕ в образе (их Dockerfile без COPY) — работает через + `data.readmeTemplate=/app/data/package-readme.md` (bind-mount, tasks.json в .admin). + Если озон добавит COPY в Dockerfile — оверрайд можно снять. +- `tasks.generated.json` gitignored (в нём токен в PUBLISH_REMOTE_BASE). +- Токены/ключи: `pass sched-pipelines/local/*` (admin-key/SCHED_API_KEY и т.д.). ## Спроси user'а -- Отмашка на стенд получена («в следующей сессии») — подтвердить перед запуском. +- **Реальный деплой**: npmjs + github.com (не мок). Требует отмашки + настоящие + NPM_TOKEN/GITHUB_TOKEN (в pass). Юзер ранее: «в следующей сессии» / «жди обоих». + Не гонять без явной команды. - (нет на этом раунде) ## Не делать (preemptive guards) -- Не паблишить в реальный GitHub/verdaccio без явной отмашки юзера на этот ран. -- Не писать токены в git/handoff/письма. +- Не запускать реальный publish в npmjs/github.com без явной отмашки. +- Не писать токены в git/handoff/письма (secrets rule: только pass). +- Не лезть в код агентов самим (юзер: «ты сам в код не лезь») — фиксы через + режект-письма; исключение — стенд-конфиг (.admin) и мои инжекции типа a131fd2. - Не трогать `llm-router-failover-proxy` (юзер закрыл 2026-08-18). -- Не гонять новые режекты пирам — оба фикса приняты; следующий шаг — только стенд. ## Memory updates за сессию -- Оба письма-отчёта обработаны и проверены независимо: - - ozon `325376a`: код нормализует чтение httpGet-ответа - (`typeof r.json === 'function' ? await r.json() : r.body`), +1 тест с реальным - `new Response(...)`; `node --test` → 210/210 (прогнал сам). - - yandex `3d0c6fc`: `409 || 422` → GET tag + PATCH; их мок даёт `json()` — - разрыва тест/прод нет; `npm test` → 123/123 (прогнал сам). - - Обе ветки master in sync с origin, таски закрыты на досках проектов. -- Кандидат на wiki-ingest (см. ритуал ниже): паттерн «мок не зеркалит - прод-контракт» — 2-й случай за кампанию (режект #2 readFile, режект #7 httpGet). +- Кандидат на wiki-ingest: паттерн «мок не зеркалит прод-контракт» — 3 случая за + кампанию (readFile, fetch-Response .body, npm cwd/.npmrc). Не заингещено — + предложить юзеру в след. сессии (shared wiki, concepts/mock-must-mirror-prod-contract). +- Кандидат: «репо создаётся до сборки контента → мёртвые пустышки» (github-distro). +- Ack-письма обоим пирам отправлены 07:52Z.