diff --git a/docs/orchestrator-norms-scratchpad.md b/docs/orchestrator-norms-scratchpad.md index 9eb75346..781ae27e 100644 --- a/docs/orchestrator-norms-scratchpad.md +++ b/docs/orchestrator-norms-scratchpad.md @@ -608,3 +608,37 @@ HTTP-код, количество, номер строки кода. Никак `vcs.modified`» на нём выполняется всегда и не проверяет ничего. Фриз-дерево — локальный КЛОН. 11. **Потолки заданы ДО первой траты** и заданы в `book.yaml` книги эксперимента — глобального носителя у дневного потолка нет, он по-книжный. + +## ⛔ СРАВНИВАТЬ КОПИЮ С `HEAD`, ПОКА ПО КОПИИ ИДЁТ МУТАЦИОННАЯ КАМПАНИЯ, НЕЛЬЗЯ ПО ПОСТРОЕНИЮ (18.09) + +**Замер.** Готовя акт, я взял прибор «то же ли содержимое у замороженной копии и у `HEAD`» и получил ДВА +расхождения: `.env.example` (отсечён маской копирования — доказательство чистоты, не порча) и +`internal/pipeline/volume.go`. Второе выглядело настоящим: файл кода разошёлся с историей. + +⇒ **Ни то, ни другое не было расхождением.** Построчный `diff` того же файла дал **ноль строк**, а время +правки в копии — секунды назад. Это **мутатор**: `tmmutate` сажает правку в файл, гоняет пакет и +восстанавливает исходное. `diff -rq` поймал его на середине посадки. + +⛔ **Норма: пока по копии идёт кампания, копия НЕ ЕСТЬ снимок — это движущееся дерево, и движет его твой же +инструмент.** Утверждение «копия совпадает с `HEAD`» снимается либо ДО старта кампании, либо ПОСЛЕ её +конца; снятое в середине оно ложно в обе стороны — можно и увидеть расхождение, которого нет, и не увидеть +того, которое есть (файл в момент сравнения окажется восстановленным). +⚠ И родственное, дороже: **этим же свойством нельзя проверять «цела ли копия» после инцидента.** Байтовая +идентичность копии источнику говорит о КАТАЛОГЕ, а не о ЧИСЛАХ: записи, снятые в окно вмешательства, всё +равно испорчены. Это уже записано выше про чужого мутатора — здесь то же самое про своего. + +⇒ **Для акта годится замер, снятый при ЗАМОРОЗКЕ:** тогда `diff -rq` дал 0 расхождений, и это число и идёт +в акт с указанием момента. Пост-фактум сравнение — только после `MUT_EXIT`. + +### И третья ловушка того же часа: `git archive | sha256sum` отвечает «тот же КОММИТ», а не «то же СОДЕРЖИМОЕ» + +Поймала сдавшая сессия, я пере-снял и подтвердил: архивы двух коммитов с ПОБАЙТНО одинаковым `backend/` +дают разные хеши (`9de2b9e20c36` против `e4cd073cadd7`) при нулевом диффе содержимого, потому что в tar +попадает `pax_global_header` с идентификатором коммита. **Верный прибор — объект дерева:** +`git rev-parse :backend` дал `013097b0fb3fba1d246cd73c8dfaf6e754a6a289` с обеих сторон. +⇒ у вопроса «то же ли содержимое» есть прибор, отвечающий именно на него; архив отвечает на соседний. + +⭐ **Формулировка сессии, которая накрывает все три случая смены и сильнее перечисления:** *оба прибора +честны, и именно поэтому расхождение читается как порча данных, а не как разные вопросы.* За смену этот +класс поймал нас пятью лицами: строк против вхождений · скипы в ворктри против скипов над копией · знаки +против байтов · архив против дерева · копия под мутатором против снимка.