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