Give seven more anchors their expectation tokens across the backlog and the decisions log

This commit is contained in:
heaven 2026-09-16 21:42:47 +03:00
parent e5c46838cf
commit bc8e335196
2 changed files with 5 additions and 5 deletions

View file

@ -360,7 +360,7 @@
| 441 | **Громкий гейт: банк включён, а у цели НЕТ текстов инъекции.** Сегодня это молчание при потраченных деньгах банк-ролей: рендер закона гейтится `HasData()` (`backend/internal/membank/memory.go:746`=`if !tx.HasData()`, `:842`), в `injection.txt` 8 строк данных, все `ru`, и на любой другой цели оба банк-блока рендерятся в 0 байт (замерено `research/34`). Гейт ставится там же, где построенный образец, — до первого платного вызова | бэкенд | скоро | гейт + пин | `research/35` N-4 |
| 442 | Комментарий `backend/internal/pipeline/volume.go:341`=`are then pinned to a superseded one` обещает «stops loudly», а без `--resnapshot`, пока в книге есть новые юниты, покупка проходит без ошибки (исполнено на $0-стабе) | бэкенд | когда-нибудь | правка комментария под поведение | `research/35`, K1-3 |
| 443 | Устаревшие комментарии банкового контура: `miner_emit.go:224-227`, `terminologist.go:33`, справка `--verify-bank`, `mining.go:212-213`, `memory.go:819-822`, заголовок `injection.txt:6` про снятую пометку ⟨проверить⟩ | бэкенд | когда-нибудь | сверка комментариев с поведением | `research/35` Б-3 |
| 444 | **Ложная атрибуция в коде:** `backend/internal/membank/memory.go:947` пишет «a masculine default when unavoidable, D19.3», а в теле D19 п.3(в) этого нет; D5 п.1 говорит обратное — «не дефолтить в мужской». ⚠ `internal/terminology/classify.go:43` НЕ чинить: там D19.3 пересказан верно. Едет вместе с нотой о том, что делать при невозможной безродовой форме ⚠ **16.09 (`D39.254` п.3):** владелец решил, что делать при невозможной безродовой форме — перестроить фразу, а если литературно не выходит, писать как лучше читается. ⇒ правится и текст данных `injection.txt:12`, не только атрибуция.| бэкенд | скоро | правка атрибуции после ноты | `research/35` Б-4, G-1 |
| 444 | **Ложная атрибуция в коде:** `backend/internal/membank/memory.go:947`=`AVOID gender-marking constructions until the reveal` пишет «a masculine default when unavoidable, D19.3», а в теле D19 п.3(в) этого нет; D5 п.1 говорит обратное — «не дефолтить в мужской». ⚠ `internal/terminology/classify.go:43`=`which is a decision about a book` НЕ чинить: там D19.3 пересказан верно. Едет вместе с нотой о том, что делать при невозможной безродовой форме ⚠ **16.09 (`D39.254` п.3):** владелец решил, что делать при невозможной безродовой форме — перестроить фразу, а если литературно не выходит, писать как лучше читается. ⇒ правится и текст данных `injection.txt:12`, не только атрибуция.| бэкенд | скоро | правка атрибуции после ноты | `research/35` Б-4, G-1 |
| 445 | ⚠ **ПОЛОВИНА ЗАКРЫТА актом `D39.257`:** мусор (`dst` без букв ВООБЩЕ) больше не едет законом — он падает в `Unanswered`, стережётся пином и мутацией. **ОСТАТОК — отказ ПРОЗОЙ:** механизм построен и инертен до первой фразы в реестре, то есть ряд закрывается вместе со строкой о заполнении реестра. Ниже — исходная формулировка. **Отказ терминолога прозой становится передачей и едет редактору законом.** Неотвеченными считать и `dst` без букв, и отказную фразу (`家族 → «не термин»`, `族长 → «90»` — исполнено). ⚠ Не гигиена, а поведенческая правка на денежном пути: меняет содержимое банка, а с ним `memory_version` и пере-редактуру под согласием. Популяция на A/B нулевая (0 из 69 и 0 из 66 при контроле 69/69 и 66/66), на длинной книге у бюджетного потолка — нет | бэкенд | скоро | разбор ответа роли + пин; решение владельца по В2 | `research/35` Б-5, П3 |
| 446 | **Свёртки написания исходника — из ядра в данные языка, ЦЕЛИКОМ.** `trad2simp` плюс арифметика каны, схема замен целевой орфографии вместо литерала ё→е (ряд 14). Правило «пустой реестр — инертный no-op», образцы построены (`family-morphology.txt`, `stemmer.go`). ⚠ Цена одна в любой плоскости: версия свёрток входит в `NormVersion`, а он — в тег нарезки и ключ манифеста ⇒ только в окне перекроя глав | бэкенд | когда-нибудь (окно перекроя, ряд 161) | вынос данных + пере-снапшот | `research/35` Б-6, П8 |
| 447 | Подписанный `古月山寨` во втором проходе снова спрашивается у терминолога и оплачивается: вид держит слово владельца, счёт — нет | бэкенд | скоро | фильтр подписанных до платного вызова | `research/35` Б-7, K1 |
@ -368,7 +368,7 @@
| 449 | **Стратифицированный отбор окон KWIC — новая стройка, сегодня его нет вовсе** (контроль: `stratif` — 0 совпадений при 48 не-тестовых Go-файлах `internal/terminology` и `internal/pipeline`; `AttachKWIC` берёт первые `maxPer` «in (chapter, chunk, offset) order»). Предусловие — ответ владельца на В4 `research/35`; без него арм «стратифицированная выборка» в замере M4 неисполним. Алгоритм язык-агностичен по построению ⚠ **16.09: владелец ответил «Да»** (`D39.254` п.4) — предусловие снято. Порядок: замер M4 (санкция дана), затем стройка отбора.| бэкенд | когда-нибудь (гейт: ответ владельца по В4) | стройка отбора + замер M4 | `research/35` Б-11 |
| 450 | `kwic_per_term` / `kwic_width` — уже пар-данные и уже построены (`langpack.go:744-774`, fail-loud), ратифицировано D39.51, заленджено D39.53, **но не заполнены ни для одной пары**: файлов в `configs/langpacks` 16, задают эти ключи 0. При первой не-CJK паре заполнить, а не полагаться на умолчание 3×40 | бэкенд | когда-нибудь (при первой не-CJK паре) | заполнение пар-данных | `research/35` Б-9 |
| 451 | **«УМНЫЙ УЧАСТОК» В ТОЧКЕ БАНКА — дизайн по слову владельца 16.09** (`D39.254` п.2): у банк-ролей нет ни ретрая, ни фоллбека, и владелец считает это дырой, а не отсутствием улучшения. Собрать в один предмет: регенерация банк-роли той же ветвью, что у черновой стадии (ряд 438) · включение эскалации на другую модель (ряд 435) · отдельный переспрос нерешённой строки · детерминированный ансамбль признаков и рецензент другого семейства на спорных кластерах (остаток ряда 5). ⛔ Границы ратифицированного: равноправный совет моделей, кросс-модельные веса, self-consistency и селекция из вариантов закрыты D39.102 п.2 замером (`research/24`: потолок 17/45, у 22 промахов из 27 верного `dst` в вариантах нет вовсе) — либо проект живёт в этих границах, либо владелец снимает закрытие явно ⚠ **16.09, слово владельца: «В границах ратифицированного»** (`D39.254` п.6) — закрытие D39.102 п.2 НЕ пере-открывается, замер под него не заказывается.| бэкенд | скоро (слово владельца) | дизайн-пак, затем стройка | `D39.254` п.2, `research/35` |
| 452 | **ГОЛОС И ОБРАЩЕНИЯ ты↔вы — СТРОИТЬ (слово владельца 16.09,** `D39.254` п.5**).** Сегодня построена схема с окнами в трёх таблицах, детектор утечки есть, а записей нет: производителя нет вовсе («no miner emits them», `backend/internal/seed/seed.go:24`), подача выключена константой (`bankmaterialize.go:295`). Владелец просит алгоритмически продуманного производителя, а не ручной посев. Предусловие — размеченный набор переходов, которого нет; провод включать только в окне перекроя и только при непустом реестре, иначе включение купит ноль, неотличимый от чистоты | бэкенд | скоро (слово владельца) | производитель + данные + провод в окне перекроя | `D39.254` п.5, ряд 24 |
| 452 | **ГОЛОС И ОБРАЩЕНИЯ ты↔вы — СТРОИТЬ (слово владельца 16.09,** `D39.254` п.5**).** Сегодня построена схема с окнами в трёх таблицах, детектор утечки есть, а записей нет: производителя нет вовсе («no miner emits them», `backend/internal/seed/seed.go:24`=`no miner emits them`), подача выключена константой (`bankmaterialize.go:295`). Владелец просит алгоритмически продуманного производителя, а не ручной посев. Предусловие — размеченный набор переходов, которого нет; провод включать только в окне перекроя и только при непустом реестре, иначе включение купит ноль, неотличимый от чистоты | бэкенд | скоро (слово владельца) | производитель + данные + провод в окне перекроя | `D39.254` п.5, ряд 24 |
| 453 | **ПРИЧИНА ОТКАЗА НЕ ВЫХОДИТ НА ПРОВОД ВОВСЕ — предмет пере-определён приёмкой 16.09 (`D39.255`).** Прежняя формулировка долга («дописать в контракт 14 три причины: `retry_unaffordable`, `cancelled`, `attempt_timeout») невыполнима: дописывать некуда. На проводе у юнита стоит `enum: [translated, withheld, pending]` (`docs/architecture/14-api-contract/openapi.yaml`), `flag_reason` в спеке — 0 упоминаний, а компаньон прямо пишет, что `flag_reason` и `detail` на провод не выходят и `flagged` вычисляется на каждой эмиссии, а не хранится. ⇒ настоящий вопрос: показывать ли покупателю, ПОЧЕМУ глава не переведена, или он видит только «не переведено». Это решение владельца о продукте, а не дописка в спеку | контракт + платформа | скоро | вопрос владельцу, затем контрактный минор | `D39.255`, приёмка пака 291 |
| 454 | **Ложная атрибуция ноты в комментарии кода:** `backend/internal/pipeline/quality.go:51`=`Echo is SPLIT by stage` — «Split echo by stage (D39.18 owner decision)», а в теле `D39.18` расщепления по стадиям нет вовсе (пере-снято: «split» 0, «стади» 0); носитель решения — `D39.19` п.4, где стоит `echo_draft_rate`. Пред-существует на HEAD, паком не заведено; форма «D39.18-follow-up» на `:404` корректна и правки не требует. Тот же класс, что чинил круг 8 у четырёх других носителей | бэкенд | когда-нибудь | правка комментария | `D39.255`, приёмка пака 291 |
| 455 | ⛔ **ТРИ ОПУБЛИКОВАННЫХ КЛЮЧА КАЧЕСТВА СМЕНИЛИ СМЫСЛ ОДНИМ ПАКОМ, а его остаток называл два.** (а) `ProcessedUnits` / `processed_units` — знаменатель strip-rate теперь включает позиции со стоп-меткой, то есть юниты, не дошедшие до финальной стадии; код сам говорит «„REACHED THE FINAL STAGE“ … too strong now». (б) `EchoDraftRecovered` / `echo_draft_recovered` — числитель СУЖЕН условием `shippedText`; доккомментарий признаёт «measured before this change reads HIGHER … the two are not comparable across it». (в) эдит-числитель — снят гейт `DispFlagged` (ратифицировано `D39.255` как эррата к `D39.19` п.4). ⇒ нужен перечень «до / после» у каждого ключа и пин несопоставимости, иначе сравнение прогонов через эту границу молча врёт | бэкенд | скоро | перечень в носителе + пин | `D39.255`, приёмка пака 291 |
@ -378,7 +378,7 @@
| 459 | **РАТИФИЦИРОВАННАЯ НОТА И ДЕРЕВО РАСХОДЯТСЯ ПО ОТКАЗ-СИГНАЛУ ⟦TM-NO-DST⟧, и банковый пак упрётся в это на первой же строке.** `D39.102` п.2 числит отказ-сигнал в корзине «закрыть по нужности», ратифицированной ЦЕЛИКОМ; п.3 той же ноты добавляет его в «опровергнуто/не заводится»: «NoDst-почти-сентинел на zh-ru (target_script обязателен конфигом, OffLanguage отбивает)». ⛔ **В ДЕРЕВЕ он жив и стоит на БОЕВОМ проводе zh-ru:** `backend/prompts/zh-ru/terminologist.md:36`=`не можешь выбрать перевод уверенно` велит роли вернуть сентинел и называет это нормальным исходом; парсер ждёт его вместе с искажёнными формами (`backend/internal/terminology/terminology.go:694`=`const NoDst = "⟦TM-NO-DST⟧"`, `backend/internal/terminology/terminology.go:1248`=`func isNoDst`); счёт печатается прогоном (`backend/internal/pipeline/terminologist.go:649`=`"declined", res.Declined`). Итог консилиума повторил НОТУ, а не дерево (`docs/research/35-bank-memory-consilium.md` §П3, «исхода движка „это не термин“ нет и не вводится»). ⇒ пак обязан выбрать ЯВНО: сентинел остаётся законным исходом (тогда ряд 445 — ужесточение разбора ответа) либо снимается из промта — а это двигает хеш запроса и перекупает проход на консолидированных книгах. Найдено советчиком-фаблом, проверено деревом оркестратором | бэкенд | скоро | нота и дерево говорят одно, выбор назван нотой | совет фабла 16.09 + сверка дерева оркестратором |
| 461 | **ПЕРЕНОС БАНКА В КНИГУ-ПРОДОЛЖЕНИЕ — СТРОЙКА ПО РЕШЕНИЮ ВЛАДЕЛЬЦА `D39.256`.** Переезжают ДВА слоя: подписанное владельцем и решённое движком. ⛔ Сегодня механизма нет ВООБЩЕ: ни один из 17 не-тестовых файлов `platform/internal/books` и `httpapi` не упоминает ни сид, ни глоссарий, ни дельту, а продолжение приходит ОТДЕЛЬНОЙ книгой. Работа двухзонная: **платформа** — предложить перенос при заведении продолжения и провести выбранные слои; **движок** — форма переносимого (что именно едет: `src`/`sense`/`dst`/`gender`/`status`, и что делать с окнами `since_ch`/`until_ch`, которые нумерованы главами ДРУГОЙ книги). ⚠ Денежная сторона: перенос сокращает пожизненный пул банк-ролей тома 2 ($1+$1), а ошибочно перенесённая строка живёт во всей следующей книге — значит перенос обязан быть видимым и отменяемым, а не молчаливым. ⚠ Это первый предмет, за который платформе есть что заказать: её собственный major `PD-441` закрыт с её стороны, остальное — minor и info | платформа + бэкенд | скоро | книга-продолжение получает банк предшественницы двумя слоями, перенос виден владельцу и отменяем | `D39.256`, слово владельца 16.09 |
| 462 | **АРМ `unresolved` СЧИТАЕТСЯ ПО ЗНАМЕНАТЕЛЮ, ИЗ КОТОРОГО САМ ВЫЧТЕН — доля выходит бессмысленной, и сегодня это невидимо.** Пост-колл-знаменатель = `preCall unresolved` (`backend/cmd/tmbankprobe/main.go:324`=`rows the role ANSWERED`), а арм отбирает ровно вычтенные строки (`backend/internal/pipeline/stopcontest.go:78`=`CountUnresolved`). На купленном сырье популяция ноль ⇒ в таблице чувствительности не видно. Показано ИСПОЛНЕНИЕМ (ось приёмки, синтетический лист из двух строк): «unresolved only 1/1 = 100.0%» при двух строках листа. ⚠ Денег сегодня не стоит — платного потребителя у предиката нет вовсе, — но по этой сетке будут выбирать ПОРОГ ЗА ДЕНЬГИ, и до первого такого читателя дефект обязан уйти: либо арм считать к pre-call-знаменателю, либо печатать абсолютом без доли | бэкенд | скоро | доля арма считается по популяции, в которую он входит; пин на синтетике | `D39.257` п.5, ось денег |
| 463 | **НОВЫЙ ГАРД ЦЕЛИ ЧУВСТВИТЕЛЕН К РЕГИСТРУ, а его сосед по паку — нет.** Исполнено осью: `target="RU"``HasData=false`, `missing=[glossary_header editor_header]`; `"Ru"` и `"ru "` — то же, тогда как `DeclinePhrasesFor("RU ")` регистр и пробелы СВОРАЧИВАЕТ (`backend/internal/lang/declinephrases.go:92`), и это прямо запинено доводом «книга, написанная `RU`, молча остаётся без реестра». ⇒ книга с `target_lang: RU` раньше молча шла без блока, теперь НЕ СТАРТУЕТ вовсе. Живых книг с таким написанием 0 из 48 (контроль: yaml прочитано 180, конфигов книг 48, все `ru`) ⇒ риск будущей пары, не сегодняшний. Лечение — свёртка в `InjectionTextsFor`, одна строка | бэкенд | когда-нибудь | регистр цели сворачивается одинаково гардом и реестром | `D39.257` п.6 |
| 463 | **НОВЫЙ ГАРД ЦЕЛИ ЧУВСТВИТЕЛЕН К РЕГИСТРУ, а его сосед по паку — нет.** Исполнено осью: `target="RU"``HasData=false`, `missing=[glossary_header editor_header]`; `"Ru"` и `"ru "` — то же, тогда как `DeclinePhrasesFor("RU ")` регистр и пробелы СВОРАЧИВАЕТ (`backend/internal/lang/declinephrases.go:92`=`strings.ToLower(strings.TrimSpace(targetLang))`), и это прямо запинено доводом «книга, написанная `RU`, молча остаётся без реестра». ⇒ книга с `target_lang: RU` раньше молча шла без блока, теперь НЕ СТАРТУЕТ вовсе. Живых книг с таким написанием 0 из 48 (контроль: yaml прочитано 180, конфигов книг 48, все `ru`) ⇒ риск будущей пары, не сегодняшний. Лечение — свёртка в `InjectionTextsFor`, одна строка | бэкенд | когда-нибудь | регистр цели сворачивается одинаково гардом и реестром | `D39.257` п.6 |
| 464 | **ДОККОММЕНТАРИЙ И ПИН СЧИТАЮТ ЧЕТЫРЕ ДВЕРИ ПРИ ПЯТИ АРМАХ.** `backend/internal/pipeline/injectionpreflight.go:24`=`rows reach a book through` перечисляет четыре (терминолог, сид, мината-дельта, авто-банк), пропуская `gates.banknote`, который в самой функции стоит вторым кейсом; тот же счёт в пине (`backend/internal/pipeline/contourpreflight_test.go:349`=`disjunction over the four doors bank rows come through`) при ПЯТИ подтестах. Заголовок отчёта «арм пять» верен — расходится проза вокруг. ⚠ Класс знакомый: комментарий, несущий ЧИСЛО, протухает молча | бэкенд | когда-нибудь | число в доккомментарии и пине равно числу арм | `D39.257` п.6 |
| 465 | **РЕЕСТР ОТКАЗНЫХ ФРАЗ ЗАПОЛНЯЕТСЯ ТОЛЬКО С ИЗМЕРЕННОЙ ПОПУЛЯЦИЕЙ.** Сегодня лендится ПУСТЫМ и запинен пустым (`backend/internal/lang/declinephrases_test.go:22`=`TestTheDeclineRegistryShipsEmpty`), и это решение оркестратора, а не недоделка: цена ошибки несимметрична — ложное срабатывание выбрасывает ОПЛАЧЕННУЮ верную передачу, терм спрашивается заново, а ретрая у банк-ролей нет (ряд 438). Популяция на купленном сырье ноль: строк, похожих на отказ прозой, 0 из 265 (контроль осью). ⚠ Контрольная величина в отчёте названа неверно («23 строки файла» при 26) — пере-снять вместе с заполнением | бэкенд | когда-нибудь | фразы заведены вместе с замером их популяции на сырье; пин пустоты заменён пином состава | `D39.257` п.6, вопрос сессии 1 |
| 466 | **ПЕРСИСТЕНЦИЯ СОСТАВА БАТЧА — последний кусок вопроса «якорь против стохастики».** Тела запросов не хранятся нигде (`LOG_LLM_BODIES` пишет только в лог и только на debug), поэтому что именно менялось во входе между покупками, восстанавливается лишь частично: замер `D39.257` п.3 закрыл 25 из 26 смен, но `key` и `related` провода не восстанавливаются ничем. Форма предложена сдачей и она дешёвая: хранить не тела, а УПОРЯДОЧЕННЫЙ состав батча плюс строки якоря, ключом на `request_hash`. ⚠ Вес «скоро» потому, что на этом стоит ратифицированное `D39.256`: без записи состава якорь от стохастики не разделится никогда, сколько бы покупок ни прошло | бэкенд | скоро | состав батча и якорь пишутся ключом на хеш запроса; вопрос о якоре отвечается замером | `D39.257` п.7, вопрос сессии 2 |

View file

@ -33,9 +33,9 @@
> ⚠ **Эррата 20.08 (D39.153 п.7б):** D39.144 п.2 атрибутирует пер-термный гейт полноты банка «изобретению КОНТРАКТНОЙ линии (Ф-14 → спека → 0.3.0)» — верно про ГЕЙТ и **неверно про ФОРМУЛУ**. Формула «стоп очищается, когда каждый терм промоутнут ИЛИ отклонён» родилась 19.07 В ДВИЖКЕ как лечение ливлока R1-FL-B (отклонённый терм переспрашивался каждый прогон — тело D39.19, слайс `../archive/architecture/05-decisions-D39-arch-reset.md:22`) и живёт там до сих пор (`backend/internal/pipeline/mining.go:80-82,243`); контрактная линия 04.08 переписала её дословно и вывела из неё ЭКРАННЫЙ гейт — счётчик «решено N из M» и запрет продолжить (коммит `16e20e5`, `frontend/docs/API_CONTRACT_INPUT.md:258-264`). **Следствие, из-за которого эррата несущая:** снимая гейт, D39.144 адресовала только контракт, поэтому движковая половина осталась БЕЗ явной отмены — она сегодня ОБОЙДЕНА платформой (флаг не передаётся на resume), а не устранена; носитель — строка 191(б), развилка — строка 203(з).
> ⚠ **Эррата 27.08 (D39.158 п.7):** D39.153 п.7б объявляет «ОСТАТКА-РАТИФИКАЦИИ НЕТ… гейт проверяет полноту ФАЙЛА решений, а не подписей, и ОДИН файл со всем банком его снимает — конфликта с моделью владельца нет». Читать так: диспозиция отвечала на вопрос «снимает ли гейт один файл» (снимает) и верифицировала СОСТАВНОЕ поведение — платформа снимает флаг, движок уходит по авто-ветке. Вопрос «работает ли флажок БЕЗ обхода» ею не закрывался, и заказанное той же строкой 191(б) «ослабить границу самой паузы» исполнено не было. Исполнено D39.158: движковая половина УСТРАНЕНА, не обойдена.
> ⚠ **Эррата 27.08-б (D39.158, страница `18-bank-ontology.md`):** названный там класс дефекта «проекция без потребителя и без якоря свежести» на момент ратификации имел ОДИН ярус и не судил носитель с ДВУМЯ писателями и нулём читателей. Дописан второй ярус: расхождение писателей ничем не судится, пока читателя нет, а в день его появления СТАНЕТ семантикой, разрешаемой задним числом по накопленной истории. Найдено платформенной сессией при вычитке приёмки D39.159 (живой член — `PD-396`); правило «у источника РОВНО один писатель» с этого дня читается в обе стороны.
> ⚠ **Эррата 27.08-в (D39.158 п.1):** «движок исполняет продуктовую модель сам» сказано без ратифицированной ОГОВОРКИ — правка ОТДЕЛЬНОГО термина через дверь доступна только для mined-термов; правка СИД-терма дверью отклоняется по имени (`internal/membank/decisions.go:359`), потому что это перенос базового снапшота и пере-оплата черновой волны — другое решение (щель ратифицирована, строка бэклога 192). Ещё три места, где модель шире кода, названы строками: окно глав одним решением не правится (named-узость v1) · банк-экспорт на стопе пуст (224) · «полный останов» — это граница ПЕРЕД редакторской волной, черновая довершается (S16). Найдено вычиткой старшего при ревью D39.159.
> ⚠ **Эррата 27.08-в (D39.158 п.1):** «движок исполняет продуктовую модель сам» сказано без ратифицированной ОГОВОРКИ — правка ОТДЕЛЬНОГО термина через дверь доступна только для mined-термов; правка СИД-терма дверью отклоняется по имени (`internal/membank/decisions.go:359`=`Scoped to APPROVE`), потому что это перенос базового снапшота и пере-оплата черновой волны — другое решение (щель ратифицирована, строка бэклога 192). Ещё три места, где модель шире кода, названы строками: окно глав одним решением не правится (named-узость v1) · банк-экспорт на стопе пуст (224) · «полный останов» — это граница ПЕРЕД редакторской волной, черновая довершается (S16). Найдено вычиткой старшего при ревью D39.159.
> ⚠ **Эррата 27.08-г (D39.159 п.8):** отказ от правки `n != shape` СТОИТ, но обоснование было шире истины — «краснит семь ЗАКОННЫХ строк» неверно для двух из них. `PD-99` несла корректно markdown-экранированные черты (виноват был парсер, не строка), а `PD-197` — сырую черту в регексе, которая молча сдвигала ВЕС, потому что он читался с конца, а от конца далеко. Названный там остаточный риск ПОСТРОЕН 27.08 на эмпирике зоны (три молчаливых случая за двое суток): парсер уважает экранирование · вес регистра читается с НАЧАЛА · гейт `tail_vocab` судит словарь хвоста. Проверено подсадкой; числа не сдвинулись. Строка `PD-398` остаётся открытой на отсутствие автоматического пина у самого гейта.
> ⚠ **Эррата 27.08-д (D39.159 п.7) — норма §3 п.8 применена к СОБСТВЕННОМУ бэклогу, три строки переsуждены.** Свип грепом по путям лендинга `d1eb8a9` нашёл, что лекарство трёх строк уже в дереве. **212 ЗАКРЫТА и снята с таблицы:** голый `yaml.Unmarshal` заменён строгим `seed.DecodeFile` (`internal/membank/memseed.go:51`, код называет строку по номеру), пин двойной — `internal/seed/decode_test.go:16` и `internal/membank/seedlint_test.go:39`. **218 ЗАКРЫТА и снята:** три тест-хелпера снесены, `miner_parity_test.go:35` говорит «the old $HOME/books address is dead». **199 СУЖЕНА:** движковая половина цепи доставки правок банка ПОСТРОЕНА, открыт только платформенный конец (пункт 2в очереди) — прежняя формулировка «канал НЕ построен» отправляла бы следующий пак строить построенное. Бэклог 177 → 175. ⚠ Норма окупилась на своём авторе в тот же день, что и на чужом.
> ⚠ **Эррата 27.08-д (D39.159 п.7) — норма §3 п.8 применена к СОБСТВЕННОМУ бэклогу, три строки переsуждены.** Свип грепом по путям лендинга `d1eb8a9` нашёл, что лекарство трёх строк уже в дереве. **212 ЗАКРЫТА и снята с таблицы:** голый `yaml.Unmarshal` заменён строгим `seed.DecodeFile` (`internal/membank/memseed.go:51`=`whether the document it is ABOUT to write would load`, код называет строку по номеру), пин двойной — `internal/seed/decode_test.go:16` и `internal/membank/seedlint_test.go:39`. **218 ЗАКРЫТА и снята:** три тест-хелпера снесены, `miner_parity_test.go:35` говорит «the old $HOME/books address is dead». **199 СУЖЕНА:** движковая половина цепи доставки правок банка ПОСТРОЕНА, открыт только платформенный конец (пункт 2в очереди) — прежняя формулировка «канал НЕ построен» отправляла бы следующий пак строить построенное. Бэклог 177 → 175. ⚠ Норма окупилась на своём авторе в тот же день, что и на чужом.
> ⚠ **Эррата 27.08-е (D39.159 п.8, финал): `PD-398` ЗАКРЫТА — у построенного гейта появился пин.** `selftest_tail_vocab()` гоняется на каждом `--check`, четыре утверждения, проверен ПОСАДКОЙ трёх мутаций самого гейта (все три пойманы, базовая линия молчит). ⚠ Первая редакция пина молчала на одной из трёх: утверждение про вес проверяло `cells()`, а мутация меняет то, чем пользуется `register()`. Пин, проверенный одним прогоном вместо посадки, — ровно тот класс, который эта строка описывает; поймано только потому, что посадку сделал. Регистр 96 → 95 открытых.
> ⚠ **Эррата 27.08-ж (D39.160 п.2) — ошибка ОРКЕСТРАТОРА, найденная исполнителем пака.** Нота утверждала, что после сноса отменённой двери «канон и деплой СОВПАДУТ точно», а промт минора (§3.2-бис) — что счётчики `pending_decisions`/`complete` «навсегда нули». **Верно по ПУТЯМ, неверно по ПОЛЯМ:** проекция `GET /bank` продолжает их слать, и это не нули — `bankCountsTx` (`platform/internal/pgstore/readmodel.go:330`) считает `proposed`-строки, о чём говорит её собственный комментарий. Клиент 0.5.0 лишние поля игнорирует, но аллоулист-норма нарушена до монтажа (2в). Носитель — `PD-399`. ⚠ Контрактная сессия принесла это ПИНГОМ по §11 промта, вместо того чтобы тихо подогнать работу под неверную посылку; это и есть поведение, которого норма требует.
> ⚠ **Эррата 27.08-з (D39.156, состав пункта 2в): «воркер решений → глагол перед возобновлением» СНЯТ — посылка изменилась.** Пункт писался, когда двери в контракте не было и подразумевалось НАКОПЛЕНИЕ: платформа копит решения у себя и скармливает их движку перед `resume`. С дверью канона 0.5.0 накопления не существует — правка ПРИМЕНЯЕТСЯ в момент подачи, и гарантия «до возобновления» у синхронной формы СИЛЬНЕЕ воркерной: применено прежде, чем клиент получил `200`. Проверено исполнением с обеих сторон: движок на стопе ВЫХОДИТ (`cmd/tmctl/main.go:95`, код 3), флок не-блокирующий и отпускается ядром на выходе процесса (`store/store.go:187`), между стопом и возобновлением живого процесса на проекте нет — запинено `pipeline/bankchain_test.go:62-64`; кап 5000 решений выведен ИМЕННО из синхронности («the call stops fitting the caller's timeout»). Остаётся не воркер, а пер-книжная сериализация в обработчике. `Resume` «с решениями как они есть» не тронут.