diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index 56a9aaf7..ff98fdcf 100644 --- a/docs/BACKLOG.md +++ b/docs/BACKLOG.md @@ -325,5 +325,5 @@ | 401 | **МУСОР НА ДИСКЕ ПОСЛЕ ОБРЫВА: три носителя, ни один не подметается.** **(а)** артефакт сборки при смерти платформы посреди неё остаётся на месте — перечень удаляемого берёт только строки с путём (`platform/internal/exports/exports.go`, греп `Unlinked`); **(б)** временные файлы движка чистит ТОЛЬКО следующая сборка того же идентификатора, которой при обрыве не будет; **(в)** частичный бэкап движка ложится под именем, которого платформа не знает (`platform/internal/runner/backup.go`). ⚠ Отдельно, инертно, но противоречит леджеру: отметка о расчёте может остаться пустой навсегда, если расчёт прошёл, а её запись — нет; читателей столбца вне тестов **0** (греп: только писатели и комментарии) | платформа | когда-нибудь | обрыв не оставляет на диске файлов, которых никто не подметёт, и отметка о расчёте не расходится с леджером | разбор старшего коллеги, 10.09 | | 402 | **ТРИ УТВЕРЖДЕНИЯ, КОТОРЫЕ ВЫНОС ХРОНИКИ В АРХИВ ОСТАВИЛ БЫ БЕЗ НОСИТЕЛЯ — заведены ТЕМ ЖЕ движением, что и вынос** (условие ока старшего коллеги на дифф, `D39.239` п.4). **(а) Стейл-упоминания снятого маркера `⟨проверить⟩` ВНЕ движка** — вынесенный отчёт называл `platform/internal/runs/spawn.go`, `platform/internal/runs/reconcile_test.go`, `platform/docs/DEFECT_REGISTER.md` (PD-277) и `eval/pilot/memory_eval.py`; все места живы сегодня, плюс `eval/pilot/kana_precision.py`. ⚠ **Стейл ли они — НЕ доказано:** в движке маркер стоит в **10** не-тестовых носителях и 7 тестовых, то есть снят он, судя по числам, только с провода инъекции. Проверять и чинить — чужим зонам (платформа, полигон), пинги им отправлены. **(б) Следствие ФЧ-7: прогон, который УПАЛ поверх потолка, приезжает `paused` с пустым кодом выхода** — по терминам «упал поверх потолка / ФЧ-7 / exit_code nil» носителей **0** в журнале решений, едином бэклоге и регистре платформы (PD-113 — исходный класс, не это следствие). Код платформы принимает это как конструкцию (греп `survives ANY exit`), но выбор «краш невидим за `paused`» нигде не записан как ПРИНЯТЫЙ. **(в) Две границы «не проверено» заланденного пака, у которых нет носителя нигде:** качество рода не измерено на живой книге; цена банкового контура в `c1` на реальной книге не мерена | доки | скоро | каждое из трёх либо получило носитель в своей зоне, либо признано неверным и снято | условие ока на вынос хроники 11.09 | | 403 | **ЦЕПОЧКА «СВИП → ОСТАНОВКА → НАСТОЯЩИЙ systemd» НЕ ПРОЙДЕНА НИЧЕМ, и это объявлено ЗАРАНЕЕ, а не найдено потом.** Платформенная сессия дважды за смену упиралась в одно: пины говорят о ЮНИТЕ (живой systemd-стенд у зоны есть) либо о СТОРЕ (живой Postgres есть), а утверждения о поведении живут в СВИПЕ — и стенда, который проводит служебный обход через настоящую остановку настоящего юнита, в зоне нет. ⇒ две правки этой смены (`--no-block` в `560ca20` и ответ живым именем юнита в `00d590e`) доказаны каждая на своём уровне и НЕ доказаны сквозной цепочкой; так и записано в обеих секциях «что не удалось». ⚠ Заведено строкой по её же просьбе — чтобы следующий не открывал вопрос заново и не принял «пин зелёный» за «цепочка проверена». ⭐ Отдельно ценно, что предупреждение сделано ДО сдачи, а не после: сессия назвала границу своего доказательства сама | платформа | когда-нибудь | есть стенд, проводящий свип через настоящую остановку настоящего юнита, ИЛИ записано решение, что такой стенд не строится и почему | объявленная граница платформенной сессии, 11.09 | -| 404 | ⛔ **МУТАЦИЯ С УЕХАВШИМ ЯКОРЕМ НЕ КРАСНЕЕТ — ОНА ПЕРЕСТАЁТ САЖАТЬСЯ, и в отчёте «не посадилась» неотличимо от «пережила».** Найдено движковой сессией 11.09 на СВОЕЙ работе: одна из трёх новых записей каталога была написана под условие, которое рефактор той же смены заменил одним контрактом; после рефактора её `find` в дереве не находился. ⇒ **рефактор молча разоружает мутацию**, и прибор проверки тестов даёт ложную зелень — класс опаснее вырожденного пина, потому что пин лжёт про один тест, а этот про весь мутационный прогон. ⚠ Родня строки о каталоге, держащем дословные строки из `waverun.go`: там про хрупкость якорей вообще, здесь про то, что поломку НЕ ВИДНО в выводе. Сегодня лечится только рукой — сессия пере-навела запись и проверила все три на совпадение `find` с живым деревом по одному хиту; оркестратор пере-снял это своим прибором при лендинге `3084766`. **Механизма, который поймал бы это сам, нет** | бэкенд | скоро | `make mutations` печатает, сколько записей НЕ ПОСАДИЛОСЬ, отдельным числом от «пережило» — либо отказывается идти, пока хоть один `find` не находится | находка движковой сессии на своей работе, 11.09 | +| 404 | ⚠ **СТРОКА ПЕРЕ-ПИСАНА 11.09: её центральное утверждение было МОЕЙ ОШИБКОЙ.** Первая редакция говорила, что мутация с уехавшим якорем «не краснеет, перестаёт сажаться, и в отчёте „не посадилась“ неотличимо от „пережила“», и что механизма против этого НЕТ. **Механизм есть, и он в самом `tmmutate`:** запись с уехавшим якорем получает вердикт `rotted`, печатается отдельной строкой и **засчитывается как неожиданный исход — прогон завершается ненулевым кодом**; довод записан в самом инструменте (`backend/cmd/tmmutate/main.go`, греп `an entry whose anchor moved guards nothing`). Пере-снято мной по возражению движковой сессии, которая в этот класс наступила и была поймана СВОИМ ЖЕ прибором: `make mutations` дал `MAKE-EXIT=2 · RED 151 · SURVIVED 0 · ROTTED 1`, и протухшей оказалась ЧУЖАЯ запись, сломанная её правкой. ⛔ **ЖИВОЙ ОСТАТОК КЛАССА — не мутации, а ДОКИ И КАТАЛОГИ, где такого счётчика нет.** Линтер доков сверяет ПО СОДЕРЖИМОМУ только якоря опт-ин токен-формы; голый `файл:строка` он не видит по построению, и его протухание не даёт ни красноты, ни строки в выводе (замер 10.09: из 19 голых якорей живых секций реестра долга съехали 10, при 9 из 9 целых токен-формных). ⭐ И побочный урок, названный сессией: знаменатель проверки якорей надо брать ИЗ КАТАЛОГА, а не из своих правок — она проверила три свои записи и не проверила чужую, которую сломала | доки | скоро | у голых `файл:строка` в живых доках есть счётчик, дающий ненулевой выход, — либо они переведены в токен-форму | находка движковой сессии 11.09, пере-снята оркестратором | | 405 | **РАЗМЕН ПО СТРОКЕ 375 ИМЕЕТ НАЗВАННУЮ ЦЕНУ: проекция расходится с леджером на оборванной попытке.** Починка «обрыв не стирает уже заработанный вердикт» (заландена `3084766`) оставляет позиции прежний `cost_usd`, поэтому деньги ОБОРВАННОЙ попытки в попозиционную проекцию не добавляются: **леджер полон, проекция нет**. Названо самой движковой сессией при сдаче, а не найдено потом. ⇒ тот, кто будет сверять проекцию с леджером на книге, где были обрывы поверх отгруженных позиций, увидит расхождение и не должен принять его за потерю денег — деньги в леджере. ⚠ Заведено ОТДЕЛЬНОЙ строкой намеренно: это цена размена, который оркестратор утвердил осознанно (потеря отгруженного текста хуже неточности отчёта), и она обязана стоять рядом с ним, а не всплыть через месяц | бэкенд | когда-нибудь | попозиционная проекция и леджер сходятся на книге с обрывами поверх отгруженных позиций, либо расхождение объявлено в самой проекции | сдача движковой сессии 11.09 |