Make the freeze gate able to fail: a binary built in a linked worktree carries no VCS stamp at all, so the refusal rule was asserting silence
This commit is contained in:
parent
9053dfdfb9
commit
7ba874473f
1 changed files with 25 additions and 9 deletions
|
|
@ -151,16 +151,32 @@
|
|||
|
||||
### 4.2 Фриз — **делай РОВНО так**
|
||||
|
||||
**Фриз = sha коммита ПЛЮС бинари, собранные из `git worktree add <путь> <sha>`.** Довод — не «дерево грязное»
|
||||
(оно сейчас чистое), а **главное дерево движут параллельные сессии**: в нём прямо сейчас работают движковая и
|
||||
платформенная. Драйвер перед каждым платным шагом печатает `go version -m` и ОТКАЗЫВАЕТ при `vcs.modified=true`
|
||||
или чужом revision.
|
||||
**Фриз = sha коммита ПЛЮС бинари, собранные из ЛОКАЛЬНОГО КЛОНА** (`git clone <репо> <путь>`). Довод — не
|
||||
«дерево грязное», а **главное дерево движут параллельные сессии**: в нём прямо сейчас работают движковая и
|
||||
платформенная. Драйвер перед каждым платным шагом печатает `go version -m` и ОТКАЗЫВАЕТ при `vcs.modified=true`,
|
||||
чужом revision **или ОТСУТСТВИИ строк `vcs.*`**.
|
||||
|
||||
⛔ **ИСПР. 8 — ФРИЗ-ГЕЙТ УМЕЕТ ОБНУЛИТЬ СЕБЯ.** У линкованного воркри `.git` — ФАЙЛ, поиск корня VCS в Go его
|
||||
пропускает и уходит выше; напоровшись на посторонний `/tmp/.git`, сборка падает с «error obtaining VCS status»,
|
||||
и штатное лечение `GOFLAGS=-buildvcs=false` **стирает штамп целиком**, то есть убивает сам гейт
|
||||
(эррата `D39.202`). ⇒ **перед сборкой `test ! -e /tmp/.git`; `-buildvcs=false` в фриз-сборке ЗАПРЕЩЁН;
|
||||
воркри — вне репозитория и вне общего скретчпада.** ⚠ И штамп снимается **на КАЖДУЮ попытку**, а не один раз:
|
||||
⛔ **ИСПР. 18 — МОЙ ЦЕНТРАЛЬНЫЙ ГЕЙТ БЫЛ ПИНОМ, УТВЕРЖДАЮЩИМ МОЛЧАНИЕ. Замерено полигоном 11.09, я
|
||||
пере-проверил своим прибором.** Первая редакция велела собирать из `git worktree add`. Бинарь, собранный в
|
||||
ЛИНКОВАННОМ воркри, не несёт VCS-штампа **ВООБЩЕ** — не `vcs.modified=true`, а НИ ОДНОЙ строки `vcs.*`
|
||||
(24 строки `go version -m`, из них `vcs.*` — 0). Причина: у линкованного воркри `.git` — ФАЙЛ, и поиск корня
|
||||
VCS в Go его пропускает; выше по дереву репозитория нет, поэтому сборка не падает, а **тихо выходит без
|
||||
штампа** — тот же результат, что от запрещённого `-buildvcs=false`, только без единого предупреждения.
|
||||
⇒ правило «отказывать при `vcs.modified=true`» на воркри-бинаре выполнялось ВСЕГДА и не проверяло ничего.
|
||||
**Контроль, доказывающий, что механизм на этом хосте жив:** та же сборка из ГЛАВНОГО дерева даёт
|
||||
`vcs.revision=…` и `vcs.modified=true`.
|
||||
⇒ **Фриз-дерево — ЛОКАЛЬНЫЙ КЛОН:** у него `.git` настоящий КАТАЛОГ, и бинари несут
|
||||
`vcs.revision=<sha> · vcs.modified=false` (проверено на всех трёх). Гейт получает зубы: «штампа нет» и
|
||||
«штамп чужой» становятся отличимы от «штамп мой и чистый».
|
||||
⚠ **И в клоне НЕТ `books/`** — внешний репозиторий держит их в `.gitignore`, книги версионируются ОТДЕЛЬНЫМ
|
||||
репозиторием. Исходник читается из главного дерева как ФАЙЛ (read-only), а его провенанс — пара sha256
|
||||
(срез и оригинал) в пре-реге. Артефакт контраста кладётся в КЛОН, рядом с его `pipeline.yaml`.
|
||||
|
||||
⛔ **ИСПР. 8 — ВТОРОЙ СПОСОБ ОБНУЛИТЬ ФРИЗ-ГЕЙТ, и он остаётся в силе для КЛОНА тоже.** Напоровшись на
|
||||
посторонний `/tmp/.git`, сборка падает с «error obtaining VCS status», и штатное лечение
|
||||
`GOFLAGS=-buildvcs=false` **стирает штамп целиком** (эррата `D39.202`). ⇒ **перед сборкой
|
||||
`test ! -e /tmp/.git`; `-buildvcs=false` в фриз-сборке ЗАПРЕЩЁН; фриз-дерево — вне репозитория и вне общего
|
||||
скретчпада.** ⚠ И штамп снимается **на КАЖДУЮ попытку**, а не один раз:
|
||||
резюм может сменить бинарь под тем же прогоном (`TM_PLATFORM_RESUME_MAY_CHANGE_ENGINE`, колонка
|
||||
`runs.engine_binary`) — сверяй по `run_attempts`, а не по тому, что лежит на PATH в конце.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue