Correct the alternative the log floated: a coalesced signal is indistinguishable by state as well as by count, and after the second one the process keeps no handler at all.

This commit is contained in:
heaven 2026-09-10 22:46:44 +03:00
parent 4930363d05
commit 582fc43948

View file

@ -5,6 +5,7 @@
> ⚠ **Эррата 15.08 (D39.132):** D39.131 п.2(а) перечисляет полосу отказов «10 конфиг · 11 источник · 12 лок · 19 безымянный» — читать через D39.132 п.2(г): полоса ДОПОЛНЕНА **exit 13 = `schema_mismatch`** (~~обе зоны сошлись на числе независимо~~; ратифицирован направлением, ФИНАЛИЗИРОВАН приёмкой D39.134).
> ⚠ **Эррата 15.08-б (D39.134 п.2а, вписана по аудиту корпуса):** клейм «зоны сошлись на 13 НЕЗАВИСИМО» (строкой выше и в D39.132 п.2г) СНЯТ — платформа прочитала число из незакоммиченного дерева движка и сама это записала (`platform/internal/ingest/exit.go:63-64`); на силу ратификации не влияет.
> ⚠ **Эррата 15.08-в (D39.136 п.5):** форма контракт-ревью «фазный воркфлоу оркестратора» ОТМЕНЕНА словом владельца тем же днём — исполняет ОТДЕЛЬНАЯ СЕССИЯ со своим онбордингом (норма D39.120 п.2; оркестратор — автор части ратификаций 0.2.3, author≠reviewer); запущенная воркфлоу-фаза 1 остановлена, её результаты выброшены; промт — `docs/CONTRACT_REVIEW_SESSION_PROMPT.md`.
> ⚠⚠ **Эррата 10.09-ж (`D39.238` п.4) — МОЯ АЛЬТЕРНАТИВА БЫЛА НЕГОДНОЙ, и движковая зона объяснила почему; плюс объявлено ИЗВЕСТНОЕ СВОЙСТВО, которое не чинится.** **(а)** Я предложил определять жёсткость не СЧЁТОМ сигналов, а признаком «сигнал пришёл, когда прогон УЖЕ в мягкой остановке». Это не лечит замеренное: слипшийся бит в `sigqueue` неотличим от одного сигнала НИ счётом, НИ состоянием — разделить их может только ВРЕМЯ между ними, и «наблюдаемый вход в фазу остановки» есть ровно оно, снятое прибором. ⇒ контракт из п.3 не просто приемлем, он ЕДИНСТВЕННЫЙ возможный. **(б)** Зона всё равно перевела лестницу со счётчика на СОСТОЯНИЕ ПРОГОНА — по другому и лучшему доводу: авторитет у состояния прогона, а не у переменной в горутине обработчика, и если остановку когда-нибудь попросят не сигналом (ручкой API, вторым каналом платформы), лестница не станет врать. **(в) ⛔ ОБЪЯВЛЕНО ИЗВЕСТНЫМ СВОЙСТВОМ, ЧТОБЫ НИКТО НЕ СЧИТАЛ ЭТО БАГОМ: три нажатия в одном планировочном кванте дают МЕНЬШЕ эскалаций, чем нажатий, и это не чинится.** **(г) И следствие, которое усиливает платформенную половину сильнее, чем я сказал ей раньше:** после ВТОРОГО входа движок возвращает сигналам дефолтную диспозицию (`signal.Reset`), то есть остаётся БЕЗ ОБРАБОТЧИКА — значит повторный `systemctl kill` от свипа для него СМЕРТЕЛЕН, а не идемпотентен. ⇒ долговечная отметка «жёсткий сигнал уже послан» (`D39.238` п.3) — не гигиена, а единственное, что стоит между пере-выпуском свипа и смертью процесса без терминального кадра и без сеттла.
> ⚠ **Эррата 10.09-е (`D39.235` п.1) — ДВА ПРАВИЛА ФОРМЫ КАДРА, КОТОРЫХ НОТА НЕ НАЗВАЛА, а без них две зоны решили бы по-разному.** **(а) `Money` на исходе `stopped` — «всегда» надо читать как «всегда, КОГДА СЧЁТЧИКИ ЕСТЬ».** `moneyLedger()` возвращает `nil` не только без потолка, но и когда волн ещё не было (`backend/internal/pipeline/events.go`, греп `moneyLedger`): остановка на ингесте или севе счётчиков не имеет, и это законная пустота, а не умолчание — иначе движок не смог бы исполнить ноту буквой. **(б) ПРАВИЛО ПРИСУТСТВИЯ `Stop` — «есть, если остановку ЗАПРОСИЛИ», а НЕ «если исход `stopped`».** Прецедент дословно у соседнего поля: `Money` present iff a ceiling was REACHED, not iff the outcome is ceiling. Важно ровно в одном случае, и он в паке назван: остановку запросили, а прогон уехал `failed` из-за упавшего соседа — поле обязано БЫТЬ. Оба правила внесены в оба промта до выдачи. ⭐ Нашёл не я: нота прошла ревью старшего коллеги уже после того, как я на неё сослался в паках.
> ⚠ **Эррата 10.09-д (`D39.234` п.5) — «13 битых якорей, ВСЕ в чужих зонах» неверно: четыре были в МОЕЙ.** Прибор в тот момент показывал их в `docs/BACKLOG.md` (три указателя в контракт и один в отчёт `research/25`), а я, перечисляя корни целей, прочитал зону ЦЕЛИ вместо зоны ДОКА — тот же класс, что «знаменатель по одному глаголу» (`D39.232` п.5б). Все четыре пере-наведены 10.09. ⇒ норма: у битого якоря ДВЕ зоны, и чинит его владелец ДОКА, а не владелец цели.
> ⚠⚠ **Эррата 10.09-г (`D39.215` п.3) — НОТА НЕСЁТ УСИЛЕНИЕ, КОТОРОЕ ПРОМТ ЭТОГО ЖЕ ПАКА ЗАПРЕЩАЕТ, И ПО ПРАВИЛУ «ЖУРНАЛ БЬЁТ ВСЁ» ПОБЕЖДАЕТ НОТА.** В теле п.3 стоит «прибор ШТРАФУЕТ ровно то поведение, которое сам же заказывает» и «СИСТЕМАТИЧЕСКИ поощряет якорение на черновике». Оба оборота — усиление. Что стоит: ПРОТИВОРЕЧИЕ КОНСТРУКЦИИ доказано. Чего НЕТ: замера ВЕЛИЧИНЫ — единственная улика (пометка «отход от черновика») встречается в сыром судейском массиве **ОДИН раз**. Это сказано в двух живых носителях: `docs/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md` (греп `было преувеличением`) и строка бэклога **319** («испр. 06.09 автором строки»). ⇒ читать п.3 как «конструкция противоречива, величина не замерена»; живой носитель величины — строка **319**, и её даёт пак ремонта прибора. ⚠ Опасность была не теоретической: промт сам отсылает к ноте оборотом «ратифицировано так и не иначе», то есть сессия, пришедшая за номером, читала бы ровно ту формулу, которую промт двумя строками выше запретил. Тело ноты не переписывается (D23.3).