docs(handoff): мок-publish кампания закрыта — оба пира зелёные, идемпотентность , реальный деплой за отмашкой

This commit is contained in:
2026-08-21 10:53:15 +03:00
parent 96a4deb771
commit 2008487ca4

View File

@@ -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 <path>`),
НЕ из вики/конфигов (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.