Record that a copy under an active mutation campaign is a moving tree, and that archiving answers which commit rather than which content

This commit is contained in:
heaven 2026-09-18 04:03:01 +03:00
parent 4706cbcc3f
commit 11c272a798

View file

@ -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 <rev>:backend` дал `013097b0fb3fba1d246cd73c8dfaf6e754a6a289` с обеих сторон.
у вопроса «то же ли содержимое» есть прибор, отвечающий именно на него; архив отвечает на соседний.
**Формулировка сессии, которая накрывает все три случая смены и сильнее перечисления:** *оба прибора
честны, и именно поэтому расхождение читается как порча данных, а не как разные вопросы.* За смену этот
класс поймал нас пятью лицами: строк против вхождений · скипы в ворктри против скипов над копией · знаки
против байтов · архив против дерева · копия под мутатором против снимка.