_last_updated_: 2026-08-21T07:55:00Z session_id: publish-mock-green-idempotency-2026-08-21 --- # Next session handoff Сессия: **мок-publish кампания ЗАКРЫТА** — оба пира зелёные в моке, идемпотентность подтверждена, режекты закрыты. Осталось: реальный деплой (отмашка юзера) + кейс обновления спеки (сработает сам при апдейте апстрима). ## Recent commits - .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) ## Состояние мок-стенда (sched-pipelines local) - Оба рана (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» ПРОВЕРЕН СИМУЛЯЦИЕЙ** (сессия 2026-08-21 вечер): обоим воркерам подложен апстрим-апдейт с новым эндпоинтом `GET /v1/echo` (ozon — снапшот `snapshots/2026-08-21/`, yandex — локальный mock-репо `data-ym/upstream-mock`, tasks.json `repo=/app/data/upstream-mock`). Оба независимо: publish **0.2.0** → verdaccio `@apilki/*@0.2.0` (0.1.0 в истории), gitea `v0.2.0` на 4 репо, README-штамп `Версия: 0.2.0 · API от 2026-08-21`. **Единообразие алгоритмов подтверждено** (оба: спека→minor, рецепты→patch, ref publish-model.md). - **Откат сделан**: снапшот 2026-08-21 удалён, upstream-mock удалён, tasks.json repo → реальный github, clone пересоздан с реального апстрима `6be0108668e6`, state восстановлен из `*.bak-2026-08-21` (оба 0.1.0). Контрольный ран: **noop у обоих** ✅ ## Стенд-особенности - 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) - Не запускать реальный publish в npmjs/github.com без явной отмашки. - Не писать токены в git/handoff/письма (secrets rule: только pass). - Не лезть в код агентов самим (юзер: «ты сам в код не лезь») — фиксы через режект-письма; исключение — стенд-конфиг (.admin) и мои инжекции типа a131fd2. - Не трогать `llm-router-failover-proxy` (юзер закрыл 2026-08-18). ## Memory updates за сессию - **Артефакты для books**: verdaccio.kzntsv.site → `@apilki/ozon-seller@0.1.0`, `@apilki/yandex-market@0.1.0` (юзер скормит их books — там тесты). Доступ к verdaccio — токен из `pass`/стенда. - Кандидат на wiki-ingest: паттерн «мок не зеркалит прод-контракт» — 3 случая за кампанию (readFile, fetch-Response .body, npm cwd/.npmrc). Не заингещено — предложить юзеру в след. сессии (shared wiki, concepts/mock-must-mirror-prod-contract). - Кандидат: «репо создаётся до сборки контента → мёртвые пустышки» (github-distro). - Ack-письма обоим пирам отправлены 07:52Z.