diff --git a/docs/BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md b/docs/BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md index de49cde9..adf4c1eb 100644 --- a/docs/BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md +++ b/docs/BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md @@ -59,8 +59,16 @@ ### 4.1 Деградация — **делай РОВНО так в ЧАСТИ РЕШЕНИЯ, сам решай КАК** **Ровно так (решено владельцем, отступление = пинг):** -- отказ резервации на попытке **≥1** при существующем оплаченном результате попытки 0 ⇒ **флаг**, а не - ошибка наверх; +- отказ резервации ⇒ **флаг**, а не ошибка наверх — ⛔ **но предикат НЕ «индекс попытки ≥1»: эта + формулировка была моей, и она теряла бы юниты НАВСЕГДА** (поймала исполняющая сессия, я пере-проверил + кодом). Индекс попытки ПЕРЕ-ПРИСВАИВАЕТСЯ прогулкой по сожжённым ключам + (`backend/internal/pipeline/stagerun.go:201`=`attempt = att.attempt`; правило — + `stagerun.go:519`=`BURNED KEYS ARE WALKED OVER HERE`), поэтому после остановленного прогона ПЕРВАЯ + свежая покупка позиции уже идёт под индексом ≥1, а в руках нет ни текста, ни классификации. Флаг там + написал бы вердикт юниту, которого ни разу не перевели, — и поскольку `resolvedForResume` истинна для + любого флага, кроме `cancelled` (`cutcall.go:293`=`FlagReason(cs.FlagReason) != FlagCancelled`), юнит + стал бы терминальным вместе со сожжёнными деньгами. ⇒ **предикат: «в руках есть ОПЛАЧЕННАЯ + КЛАССИФИЦИРОВАННАЯ попытка»** (есть `judged`/`last`), а не «индекс ≥1»; - у флага **СВОЯ причина**, отличная от исчерпания регенераций: читатель и оператор обязаны отличать «мы перепробовали всё» от «денег не хватило на вторую попытку»; - волна **идёт дальше**. @@ -84,10 +92,18 @@ публикует денежный факт: событие `ceiling` + защёлка + `exit 4`, и платформа пишет прогону `paused` и просит пополнить. После деградации этот путь исчезает: терминальные ветки `flagged` и `clean` несут только объём, а `Money` висит на ошибочных (`backend/internal/pipeline/events.go`, греп `terminal`). **Читателю -кончились деньги — и никто ему этого не говорит.** ⇒ **делай РОВНО так:** прогон, отказавший только РЕТРАЮ, -**по-прежнему публикует денежный факт** — либо явно НЕ публикует, и тогда довод записан в отчёте и в коде. -⚠ И рядом живёт комментарий, который твой пак сделает ложным, если факт пропадёт: `runevents.go`, греп -`ITS PRESENCE RULE` — «правило присутствия — „потолок был достигнут“, а не „исход = ceiling“». +кончились деньги — и никто ему этого не говорит.** ⛔ **НО НЕ ЧЕРЕЗ `ceilingReached` — развилку разрешила исполняющая сессия, и её довод сильнее моего +первоначального «публикуй».** Я пере-проверил кодом: событие идемпотентно по ПРОГОННОМУ флагу +(`backend/internal/pipeline/events.go:454`=`already := e.ceilingSaid`), поэтому отказ ретраю **СЪЕЛ БЫ +событие настоящей остановки** позже в том же прогоне, и платформа осталась бы с остановкой без причины. +Плюс `Halted: true` переводит идущий прогон в паузу НА ХОДУ. ⇒ **делай РОВНО так: денежный факт виден +НОВОЙ ПРИЧИНОЙ на проводе юнита плюс операторской строкой с недостачей (`shortfall`); событие +`ceiling`-остановки НЕ публикуется.** Довод записывается и в код, и в отчёт. + +⚠ **И зеркало, которое твой пак делает ложным В СТОРОНУ ОТСУТСТВИЯ:** `backend/internal/runevents/runevents.go:289`=`ITS PRESENCE RULE IS` +говорит «правило присутствия — „потолок был ДОСТИГНУТ“, а не „исход = ceiling“». После пака потолок бывает +достигнут, а `Money` нет. ⇒ сузь прозу до «ОСТАНОВИЛ прогон» **в своей зоне** и **назови мне зеркала вне +её** (платформенный приёмник событий, канон 14) — я отнесу. Чужое не правь. **Решаешь сам и аргументируешь:** имя причины · где ставится деградация. ⛔ **И вот ШТАТНЫЙ носитель, который первая редакция промта пропустила:** у `runAttempt` уже есть параметр **`mandatory`** — «позволено @@ -110,6 +126,12 @@ завершён), **а не `exit 4`**. ⚠ Не «успехом»: `exit 0` требует, чтобы флагов не было вовсе, а флаг здесь есть по построению — это и есть честный исход. +⭐ **И заточка, которую дала исполняющая сессия, — она идёт В АКТ:** лечение клина НЕ зависит от того, +кончился прогон кодом 2 или 4. Даже когда потолок исчерпан совсем и попытка 0 следующего юнита законно +останавливает книгу, у деградированного юнита **всё равно появляется строка** — то есть следствие (1) +закрыто и в окне `exit 4`. **Пин ниже стережёт более узкое окно, чем сам выигрыш**, и это надо сказать, а +не выдать окно пина за границу лечения. + ⛔ **И назови СУЖЕНИЕ, иначе будешь ловить недостижимое:** утверждение верно в ОКНЕ, когда остатка потолка хватает на попытку 0 каждого следующего юнита. Кончился потолок совсем — попытка 0 следующего юнита обязательна, отказ по ней штатно останавливает книгу, и `exit 4` возвращается ЗАКОННО. Фикстуру строй @@ -130,7 +152,21 @@ `TestEveryOperatorMessageIsCatalogued` — внести новое сообщение в `backend/internal/pipeline/testdata/operator-messages.txt`. -### 4.3 Платформенная половина — **твоё дело назвать, не построить** +### 4.3 ⛔ ДЕФЕКТ, КОТОРЫЙ ТВОЙ ПАК НАКОРМИТ — и он НЕ латентный. Чинить ЗДЕСЬ + +Нашла исполняющая сессия, посылку я пере-проверил и **она у неё неверна в СТОРОНУ МЯГКОСТИ**. + +`backend/internal/pipeline/quality.go` (греп `draftEchoRecovered`) считает эхо ВОССТАНОВЛЕННЫМ по одному +признаку — `FirstFlagReason == cjk_artifact`, — **не спрашивая, флагована ли строка сейчас и чем**. Денежный +отказ эхо-рероллу даст ровно эту картину: первый флаг — эхо, итоговый — денежный, реролла не было, а отчёт +скажет «восстановлено». + +⛔ **Сессия назвала это латентным «потому что ключ 0». Ключ НЕ ноль:** `regenerate_echo_before_escalate: 1` +стоит **во всех ЧЕТЫРЁХ боевых конфигах** (`backend/configs/pipeline-c1.yaml`, `-c2`, `-arm-glm`, +`-arm-mistral` — сверено мною по каждому). ⇒ дефект оживает **в день лендинга твоего пака**, а не когда-то +потом. **Чини его в этом паке и пинь** — «диспозиция в отчёте» здесь недостаточна. + +### 4.4 Платформенная половина — **твоё дело назвать, не построить** Карта заметок платформы **РУКОПИСНАЯ** (`platform/internal/ingest/notes.go`) и уезжает независимо от словаря движка. Цена несделанного **замерена**: `PD-246` — минор 0.10.0 сутки жил ЛОЖНЫМ на проводе, причина @@ -146,7 +182,7 @@ `TestAFlaggedUnitIsNotReportedAsDelivered`). Значит грант за него не съеден, а книга честно короче — это хорошая новость, но она обязана быть СКАЗАНА в отчёте, иначе следующая смена откроет её заново. -### 4.4 Приложение — ДВА пина, краснеющих по УДАЧЕ (ряд 379, ОБЕ половины) +### 4.5 Приложение — ДВА пина, краснеющих по УДАЧЕ (ряд 379, ОБЕ половины) Отдельная от §4.1 работа; делай её ПОСЛЕ основной. ⛔ **И мой диагноз здесь был НЕВЕРЕН — опровергнут замером, а не мнением. Читай, чем именно, иначе повторишь мою ошибку.**