хендофф: режект #4 (push non-fast-forward), фиксы #1-#3 приняты

This commit is contained in:
2026-08-21 01:50:29 +03:00
parent 0aa5fbeb50
commit 7b7603e7a6

View File

@@ -8,7 +8,13 @@ session_id: publish-mock-reject-3-git-identity-2026-08-20
реально прошли), но **режект #3 ozon**: git push падает `Author identity unknown`.
Ждём фикс #3.
## 🔴 БЛОКЕР (режект #3): ozon git identity (письмо 22:45Z)
## 🔴 БЛОКЕР (режект #4): ozon push non-fast-forward (письмо 23:10Z)
**Симптом:** 2-й полный ран ozon (dryRun:false): npm publish прошёл (0.1.0, после моего unpublish), create-if-missing ок (репо существует), commit с identity прошёл (фикс #3 работает), но **push упал**: `failed to push some refs / git pull before pushing again` — ghPublish всегда `git init` в tmp (publish.js:180, mkdtemp 297) → локальный main без ancestor с origin/main (README auto_init). 1-й ран работает (репо создаётся в этом же ране), 2-й — non-fast-forward. Yandex: ensureRepo→cloneRepo→assemble→push (github-distro.js:79-92). **ТЗ:** clone существующего репо вместо init (как yandex) + тест на 2-й ран (push fast-forward, реальный git как в publish-gh.test.js:87).
## ✅ Принято (проверено независимо)
- **Фикс #1** (297bc31) dryRun плоский payload; **#2** (5ce9852) prodDeps readFile; **#3** (06db835) git identity -c user.name/-c user.email — все проверены, 204/204, интеграционный тест реального git. commit вживую прошёл.
**Симптом:** 3-й полный ран ozon (dryRun:false): стадии 8/10 прошли, publish:
- ✅ npm publish `@apilki/ozon-seller@0.1.0` → verdaccio (проверено `npm view` → 0.1.0)
@@ -19,11 +25,7 @@ session_id: publish-mock-reject-3-git-identity-2026-08-20
**ТЗ в письме:** (1) `-c user.name=apilki -c user.email=apilki@users.noreply.github.com` в git-команду commit; (2) тест на сборку команды (assert `-c user.name=` в строке — их exec-стаб identity не ловит), идеально — интеграционный с реальным git в tmp; (3) сьют без регрессий; (4) отчёт письмом.
## ✅ Принято (проверено независимо)
- **Фикс #1** (297bc31): dryRun-контракт — плоский `...(payload || {})` вместо `payload.data`. Проверено: 202/202, e2e dryRun=false→real, dryRun=true→dryRunDiff.
- **Фикс #2** (5ce9852): prodDeps(root) — readFile/writeFile/removeFile (fs.promises) в deps ОБЕИХ точек (server.js createPublishStage + entrypoint.js cron). e2e больше НЕ подставляет readFile руками (стабы только exec/httpGetFn/httpPostFn/log/warn/recipesVersion). Проверено: 202/202, код в пересобранном контейнере (`...prodDeps({ root })` server.js:194, `deps: prodDeps({ root: ROOT })` entrypoint.js:126).
- Yandex: плоский `data.dryRun` (publish.js:92), прямые fs.readFileSync, git identity в команде — контракт правильный. **Yandex не запускал** — жду стабильного полного ozon-цикла.
Артефакты стенда: verdaccio `@apilki/ozon-seller@0.1.0` (мок), Gitea `apilki/ozon-seller-typescript` существует пустой (push не прошёл). После фикса #4: удалить репо руками (чистый create-if-missing тест), прогнать 2 рана.
## Артефакты стенда (мок)
@@ -32,10 +34,9 @@ session_id: publish-mock-reject-3-git-identity-2026-08-20
## Стенд (host-stacks/local/sched-pipelines)
- schedd 0.9.0 healthy. ozon контейнер пересобран (фиксы #1+#2 внутри).
- tasks.json: **dryRun:false у ОБОИХ тасок** (по GO user'а), schedd рестартнут.
- state.json обновился (sha записан) — следующий ран ozon пойдёт diff-путь,
npm версия 0.1.0→0.1.1 (или patch), репо существует → push в существующее.
- schedd 0.9.0 healthy. ozon контейнер пересобран (фиксы #1+#2+#3 внутри).
- tasks.json: **dryRun:false у ОБОИХ тасок**, schedd рестартнут.
- state.json: {} (сбрасывал для initial) — следующий ран initial. Внимание: initial → версия 0.1.0 — при существующем в verdaccio 0.1.0 будет E409 (уже ловили) — перед initial-раном unpublish из verdaccio или diff-ран (0.1.1).
## Мок-publish — ждём фикс #3