From 5ba6fe39de300ee2407aa5ee230ba6e8283d1891 Mon Sep 17 00:00:00 2001 From: heaven Date: Wed, 16 Sep 2026 22:55:40 +0300 Subject: [PATCH] Record the five 16.09 acts in the status board and chronicle, name the plan's single open platform row, and retarget two anchors onto the lines their prose names --- docs/BACKLOG.md | 6 +++--- docs/NEAR_TERM_PLAN.md | 4 ++-- docs/PROGRESS.md | 1 + docs/architecture/05-decisions-log.md | 12 ++++++++++++ docs/architecture/09-target-architecture.md | 2 ++ docs/architecture/13-tech-debt-anchors.md | 2 +- docs/research/31-harness-independent-critique.md | 2 +- docs/research/35-bank-memory-consilium.md | 10 ++++++++++ 8 files changed, 32 insertions(+), 7 deletions(-) diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index 9428c011..e5a44d5e 100644 --- a/docs/BACKLOG.md +++ b/docs/BACKLOG.md @@ -3,7 +3,7 @@ > **Единственный трекер проекта.** Здесь живут строки, на которые доки, промты и D-ноты ссылаются словами «строка N» / «строка бэклога N»: **ID строки стабилен навсегда**, не перенумеровывается и не переиспользуется (D39.80). Правки — только через оркестратора; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено. > ⚠ **Это НЕ бэклог зоны `docs/`, а бэклог ПРОЕКТА.** У зон свои, с другими неймспейсами ID, и единый их строк не принимает (D39.84): платформа — [../platform/BACKLOG.md](../platform/BACKLOG.md) (`П-N`) и её регистр дефектов `platform/docs/DEFECT_REGISTER.md` (`PD-N`); фронт — [../frontend/docs/BACKLOG.md](../frontend/docs/BACKLOG.md) (`Ф-N`). > ⚠ **Состояние проекта — не здесь.** Очередь, курс, CURRENT-STATE, состояние паков и живая хроника — шапка [PROGRESS.md](PROGRESS.md). Здесь только долг и его диспозиции. -> - **СЧЁТ ОЧЕРЕДИ на 16.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **347** строк · зона бэкенд **179** строго / **232** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **180** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). +> - **СЧЁТ ОЧЕРЕДИ на 16.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **347** строк · зона бэкенд **178** строго / **231** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **180** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). > - ⚠ **Переезд 06.09 (D39.218):** таблица вынесена из `PROGRESS.md` ДОСЛОВНО и ни один ID не сдвинут — **с единственным исключением: две ячейки (строки 220 и 306) тронуты РОВНО в номере якоря `docs/scripts/counts.py:566`→`:569` и `:592`→`:595`**, потому что цель сдвинул этот же коммит; текст ячеек не менялся, длины равны. В `PROGRESS.md` на прежнем месте оставлен заголовок-указатель, поэтому ссылки «секция „Бэклог“» доезжают в один хоп. ## Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора) @@ -357,7 +357,6 @@ | 438 | ⛔ **БАНК-РОЛИ ИДУТ МИМО ОБЕИХ ВЕТВЕЙ ЛЕЧЕНИЯ: у черновой стадии лекарство есть, у терминолога нет ни лекарства, ни счётчика.** Обе ветви живут в цикле `runStage` (`backend/internal/pipeline/stagerun.go`, греп `regenerating with less thinking` и `regenerating with a larger budget`), а `terminologist.go` (греп `return r.runAttempt`) зовёт попытку НАПРЯМУЮ. ⛔ Замер прогона B: на попытке 1 классификатор дал `asked=22 answered=4` (`length`, $0.012646) и `asked=24 answered=0` (`empty`, $0.012133) — **42 терма из 66 без машинного типа, оба провальных батча ОПЛАЧЕНЫ, регенерации не было**; у черновой стадии та же мина вылечена 5 раз из 5. ⚠ **Это СТОХАСТИКА, а не регрессия** (сказала сама зона): на резюме тот же классификатор ответил 22/22 · 19/19 · 24/24, у прогона A все три батча чисты. ⚠ И вторая половина — НАБЛЮДАЕМОСТЬ: итоговая строка печатает `classify_batches_dropped=0 unanswered=0`, и это не ложь, а ОТСУТСТВИЕ — счётчик считает батчи, выброшенные БЮДЖЕТОМ (комментарий `terminologist.go` сам предупреждает, что «unanswered читается как вердикт о ТЕРМАХ, когда он отчасти вердикт о ДЕНЬГАХ»), а счётчика доли ОТВЕТОВ нет ни одного; единственный носитель факта — WARN посреди прохода ⚠ **16.09 (`D39.254` п.2):** владелец ожидает у банк-ролей ретрай и отдельный переспрос как штатный механизм, а не как улучшение. Предмет входит в первый банк-пак вместе с N-1. ⛔ **ДОБАВКА 16.09, СВЕРЕНО ДЕРЕВОМ — у петли регенерации есть денежная мина, и её надо заказать вместе с петлёй:** тождество запроса включает индекс попытки и `maxTokens` (`backend/internal/pipeline/stagerun.go:485`=`attemptRequest is the ONE definition`), а проба «уже оплачено» у банк-батча спрашивает ТОЛЬКО попытку 0 с базовым бюджетом (`backend/internal/pipeline/terminologist.go:840`=`paidAfterBurns(st, st.Model`). ⇒ попытка с другим бюджетом пробе НЕВИДИМА, и доккомментарий рядом сам называет исход: ложное «оплачено» пропускает покупку мимо ролевого суб-бюджета, «under nothing but the book ceiling». **Петля обязана расширить пробу на лестницу попыток (attempt × maxTokens), иначе кап пожизненного пула на повторы не действует.** Нашёл советчик-фабл, проверено деревом оркестратором.| бэкенд | **скоро** | банк-роль получает ту же ветвь регенерации, что черновая стадия, ПЛЮС счётчик доли ответов в итоговой строке | прогон B, акт `D39.252` п.9 | | 439 | ⛔⛔ **БАНК КНИГИ НЕДЕТЕРМИНИРОВАН ПО ПОСТРОЕНИЮ: он есть функция ЧЕРНОВИКА, а черновик — стохастический выход модели.** Замер сессии прогона B, пере-снятый оркестратором СВОИМ запросом и сошедшийся дословно: `retrieval_state.banknote_detail` двух прогонов на ОДНИХ И ТЕХ ЖЕ шести чанках, побайтно один исходник (sha среза сверена) и тождественный покупающий конфиг (sha `pipeline-c1.yaml` совпал) — предложений **A 98 · B 93 · общих 74 ⇒ ЖАККАР 0.63**. ⛔ **Расходится не только СОСТАВ, но и ГРАНУЛЯРНОСТЬ ключа:** на `ch3/1` прогон A предлагает СОСТАВНЫЕ (`丙等资质` · `族长家老` · `舅父舅母`), а B — их СОСТАВЛЯЮЩИЕ (`丙等` · `资质` · `族长` · `家老` · `舅母` · `舅父`); на `ch2/0` предложение B — строгое ПОДМНОЖЕСТВО A, беднее на восемь. Отсюда же исчезновение `舅父舅母`, которое встречается в исходнике **14 раз** и есть в банке A при отсутствии в B — частотным порогом это не объясняется. ⛔ **СЛЕДСТВИЕ СТАРШЕ РЯДА 436: консистентность мерится ПО СТРОКАМ БАНКА, а строки между прогонами разные ⇒ у `I1`/`I2` двух прогонов РАЗНЫЕ ЗНАМЕНАТЕЛИ, и они несравнимы не потому, что прибор плох, а по построению.** ⚠ И это прямо задевает цель 6 («воспроизводимый прогон — повторение без сюрпризов»): снапшот и голден стерегут ВХОД, а состав банка в них не заперт. ⚠ Границы замера названы сессией: одна книга, три главы, шесть чанков, ОДНА пара прогонов — установлен РОД расхождения (состав + гранулярность), не его обычная величина; как из предложений собирается финальный банк, не читал никто ⛔ **ПОСЫЛКА «ТОЖДЕСТВЕННЫЕ ВХОДЫ» НЕВЕРНА, снято 12.09 опровергателем и пере-проверено оркестратором.** Совпадение sha `pipeline-c1.yaml` было выдано за тождество входов: `diff -rq` двух фриз-деревьев даёт **52 расходящихся пути** (`chunkrun.go`, `stagerun.go`, `waverun.go`, `disposition.go`, `quality.go`, стеммер), и снапшоты РАЗНЫЕ (`cfd53cc0…` против `fef36e1d…`). ⚠ **Что при этом устояло и держит вывод:** `internal/miner` и `internal/terminology` между фризами **побайтно идентичны** (0 различий), langpack идентичен, `bankParseVersion` совпал, диф `models.yaml` — только комментарии. ⇒ **детерминированная половина не двигалась, двигалась ЧЕРНОВАЯ сторона — а она и производит банкноты.** ⛔ Но ДОЛЯ расхождения, приходящаяся именно на температуру, ЭТОЙ парой прогонов не измерена и измерима быть не может: нужен повтор на ОДНОМ движке, и такого прогона нет. ⚠ И метод числа назвать обязательно: 0.63 — это сумма ПОЧАНКОВЫХ пересечений (74 из 98+93−74); книго-уровневые множества дают 53 из 82 = **0.65**. Вывод переживает оба, число без метода — нет | бэкенд | **скоро** | состав банка воспроизводим при повторе прогона ЛИБО названо и ратифицировано, что банк стохастичен, и тогда числа консистентности сравниваются только ВНУТРИ прогона | прогон B, дописка 12.09 | | 440 | ⛔ **МАЙНЕР ОТСЕКАЕТ ЦЕНТРАЛЬНЫЕ ТЕРМИНЫ КНИГИ ПО ПОСТРОЕНИЮ, А НЕ ПО ПОРОГУ — и это несовпадение ДВУХ РАЗНЫХ ВОПРОСОВ.** Формулировка сессии прогона B, принята дословно: **контраст спрашивает «характерно ли слово для ЭТОГО текста на фоне китайского вообще», а продукт спрашивает «нужна ли слову ОДНА закреплённая передача на всю книгу».** Для `家族` ответ на первый — НЕТ, на второй — ДА. Замер (контроль напечатан: словарь-контраст jieba 0.42.1, **349 046 строк**): `家族` · `族` · `炼制` · `楼阁` · `先机` · `老妈子` — **ЕСТЬ в словаре-контрасте и потому НЕТ в банке ни одного из двух прогонов**, тогда как `方源` · `古月山寨` · `丫头片子` · `怀璧之罪` в словаре отсутствуют и в банк попали. ⇒ **шесть из восьми терминов, на которых читатель поймал разнобой, отсечены ПОТОМУ ЧТО ОНИ ОБЫЧНЫЕ КИТАЙСКИЕ СЛОВА.** ⛔ Цена названа текстом: `族` встречается в срезе **29 раз**, `家族` — **9**, и «род ↔ клан» есть КРУПНЕЙШАЯ находка приоритета №1 за оба прогона. ⚠ Лечится в ПОЛНОТЕ МАЙНИНГА, а не в гейте: энфорсер не молчал — ему не о чем было говорить ⛔⛔ **ПРИЧИННОСТЬ ЭТОГО РЯДА ОПРОВЕРГНУТА 12.09 ЧТЕНИЕМ КОДА — механизм НЕ контраст.** `backend/internal/miner/miner_emit.go`, функция `emissionEligible`: **первым** стоит `if !hasAnyType(c.Types, "name", "place", "title") { return false }`, **вторым** — `if c.Freq < emitMinFreq \|\| subsumed[c.Src] \|\| runeLen(c.Src) < 2`. ⇒ **`族` отсечён БЕЗУСЛОВНО как ОДНОРУННЫЙ**, к контрасту это отношения не имеет; **`家族` отсечён ТИПОМ** — у него 2 руны и freq 9 при `emitMinFreq` 5, то есть он проходит всё, на что ряд указывал, и падает на том, о чём ряд молчал. ⭐ **И настоящая находка ШИРЕ прежней: детерминированный канал по построению эмитирует ТОЛЬКО `name\|place\|title`.** Обычное существительное, несущее в книге (`家族` «род/клан», `炼制` «выплавить»), не может войти в банк этим каналом НИКОГДА — сколько бы раз оно ни встретилось. Это же объясняет, почему строк с провенансом `mined`-без-банкноты **ноль в обоих прогонах**: тип-фильтр так узок, что всё им пропущенное черновик называет и так. ⚠ Прежняя формулировка («ЕСТЬ в словаре-контрасте и ПОТОМУ НЕТ в банке») выдавала корреляцию 6 из 8 за механизм — класс назван и в `CLAUDE.md`. Нашёл опровергатель промта, пере-проверено оркестратором чтением функции | бэкенд | **скоро** | решение владельца: имеет ли право обычное существительное входить в банк детерминированным каналом, и если да — каким признаком, кроме типа | прогон B, §18.1(а) + дописка 12.09 | -| 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`=`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 | @@ -365,7 +364,7 @@ | 446 | **Свёртки написания исходника — из ядра в данные языка, ЦЕЛИКОМ.** `trad2simp` плюс арифметика каны, схема замен целевой орфографии вместо литерала ё→е (ряд 14). Правило «пустой реестр — инертный no-op», образцы построены (`family-morphology.txt`, `stemmer.go`). ⚠ Цена одна в любой плоскости: версия свёрток входит в `NormVersion`, а он — в тег нарезки и ключ манифеста ⇒ только в окне перекроя глав | бэкенд | когда-нибудь (окно перекроя, ряд 161) | вынос данных + пере-снапшот | `research/35` Б-6, П8 | | 447 | Подписанный `古月山寨` во втором проходе снова спрашивается у терминолога и оплачивается: вид держит слово владельца, счёт — нет | бэкенд | скоро | фильтр подписанных до платного вызова | `research/35` Б-7, K1 | | 448 | Предупреждение «This is a ONE-TIME cost; every later run replays for $0» (`terminologist.go:498`) после N-1 станет лгать: «часть решена, часть оплачена» будет обычным состоянием КАЖДОЙ покупки. Пере-формулировать и запинить текст; гарантия образца держится на безусловности фильтра (`:1166-1167`) — брать вместе с ней | бэкенд | когда-нибудь (вместе с паком N-1) | правка текста + пин | `research/35` Б-8 | -| 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 | +| 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) — предусловие снято. ⚠ **Испр. 16.09 (сквозной аудит): порядок был ОБРАТНЫМ тому, на что ряд сам ссылается.** Итог `research/35` (Б-11, О-2) говорит: без стройки арм «стратифицированная выборка» в замере M4 НЕИСПОЛНИМ. ⇒ верный порядок: стройка отбора, затем M4 с этим армом; либо 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`=`no miner emits them`), подача выключена константой (`bankmaterialize.go:295`). Владелец просит алгоритмически продуманного производителя, а не ручной посев. Предусловие — размеченный набор переходов, которого нет; провод включать только в окне перекроя и только при непустом реестре, иначе включение купит ноль, неотличимый от чистоты | бэкенд | скоро (слово владельца) | производитель + данные + провод в окне перекроя | `D39.254` п.5, ряд 24 | @@ -383,3 +382,4 @@ | 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 | | 467 | **ЛЕНДИНГ, ДВИГАЮЩИЙ СТРОКИ КОДА, ОБЯЗАН НАЗЫВАТЬ СДВИНУТЫЕ ЯКОРИ — сегодня это не норма, а случайность.** Пак `D39.257` сдвинул строки под 25 якорями живых доков (импорт + новые функции), и отчёт об этом молчал, включая секцию «проверено и дефекта не найдено». Поймала ось приёмки, перенавёл оркестратор. ⛔ Почему это не мелочь: пред-коммитный хук зовёт якорный линт **warn-only** (`docs/scripts/githooks/pre-commit`, греп `--lint`), то есть лендинг не остановится и расхождение станет нормой молча. Зона кода доки править не вправе — но НАЗВАТЬ обязана: «файл вырос на N строк выше строки X» стоит одной команды. ⇒ либо строка в промты зон, либо гейт, считающий дельту якорей до и после | оркестратор | скоро | сдача, двигающая строки, приносит список сдвинутых якорей; правит оркестратор | `D39.257` п.4 | +| 468 | **СЕКЦИЯ `consolidation` БАНК-СТОПА ТОЖЕ БЕЗ ЧИТАТЕЛЯ — ряд 224 накрывал только `proposed`.** Движок публикует, что банк консолидирован ЧАСТИЧНО (неотвеченные строки, выброшенные батчи), а платформа этого не читает: человек подписывает как ПОЛНЫЙ банк то, что движок сам называет неполным. ⛔ Пере-снято мной (не по чужому отчёту): `consolidat\|unanswered\|batches_dropped` по `platform/internal` — **3 хита при 195 не-тестовых и тестовых .go**, и все три посторонние (подметание в `runs/sweep_test.go`, комментарии о книжных проходах в `pricing/pricing.go:112` и `ingest/manifest.go:97`). Движковая половина закрыта 08.09 (`D39.228`), платформенная не построена. ⚠ Форма лечения названа заранее, чтобы не нарушить закон шва: бит полноты берётся ГОТОВЫМ у движка, а не выводится платформой заново (иначе это дубль движкового закона, запрещённый п.6 закона шва); поле на странице банка — минором к контракту 14. Нашёл сквозной аудит закрытости 16.09 | платформа + контракт | скоро | подписывающий видит, что банк консолидирован частично, и бит берётся у движка | аудит 16.09, смежный ряд 224 | diff --git a/docs/NEAR_TERM_PLAN.md b/docs/NEAR_TERM_PLAN.md index 1b8a20f0..48393982 100644 --- a/docs/NEAR_TERM_PLAN.md +++ b/docs/NEAR_TERM_PLAN.md @@ -25,7 +25,7 @@ механизм — `http.MaxBytesReader` (`middleware.go:22`). ⇒ **Живой остаток — операционная гигиена, и `D39.176` п.1 прямо называет её инженерной, без слова владельца:** число аплоадов ничем не ограничено · у статуса `rejected` нет выхода · каталоги-сироты никто - не подметает. Плюс три ряда регистра (`PD-162` · `PD-455` · `PD-448`). Платформа, дни. + не подметает. Плюс ряды регистра: ⚠ **испр. 16.09 (сквозной аудит) — живой ОДИН, `PD-162`**; `PD-455` и `PD-448` закрыты паками «правда у двери» и «ответ двери», в регистре их статус уже не `open` (пере-снято мной по списку открытых). Платформа, дни. ⛔ **Продуктовых квот и фри-тир-лимитов НЕ ПРОЕКТИРОВАТЬ** — `D39.176` п.1 закрыл вопрос целиком. 2. ⛔ **СОДЕРЖИМОЕ УЗЛА ПОДПИСИ БАНКА** — человеческий узел потока показывает ПУСТОТУ: у секции предложений читателя нет (`json:"proposed` — 0 хитов при 356 json-тегах), живой экран 04.09 отдал `total 0, signed 0`. @@ -50,7 +50,7 @@ | 7 | ~~полигон~~ | ⛔ **ЗОНА ВНЕ СКОУПА — слово владельца 11.09**; четыре промта уведены в `archive/prompts/` с баннерами | — | снято | | 8 | **бэкенд/деньги** | ⛔ **«ПАДЕНИЕ, КОТОРОЕ ВИДНО»** — четверть COGS в одном механизме (**415**), слепые приборы отказа (**414**, **422**), молчащая подстановка цены. ⚠ Пин цены **413** из пака ВЫНУТ: это данные и отдельное решение | пак, $0 | ✅ **ЗАКРЫТ АКТОМ `D39.251`** (испр. 15.09; дальше — запись 11.09) · ✍️ **НАПИСАН 11.09** — `BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md`; выдаётся СВЕЖЕЙ сессии сразу по закрытии 4 ⛔ **КРИТЕРИЙ ПРИЁМКИ ПАКА — МЕХАНИЗМ, А НЕ ПРОПОРЦИЯ** (поправка старшего коллеги 11.09): лекарство есть распространение ратифицированного образца `D2` п.3 на вторую причину, и оно верно при 25 % и при 5 % — пропорция задаёт очерёдность, не форму. ⇒ судить по строкам «ни одного удвоения без вердикта о вырождении; каждая выброшенная попытка — строкой леджера с причиной», а не по «с 25.4 % до X». Значит прогон B пак не гейтит и паком не гейтится.| | 9 | **платформа+бэкенд** | ⭐ **ХОЛОДНЫЙ ПРОГОН B — платформа → бэкенд → файл, ВТОРОЙ раз.** Уточнение владельца 11.09: спрашивая «перепрогоны нужны», он имел в виду именно сквозной прогон, а не пере-запуск тестов. Покупает ЧЕТЫРЕ вещи, которых нет ни у кого: **(1)** миграция **v17** (`wave_selection`) пака консистентности ни разу не шла на живом прогоне — только в тестах; **(2)** прибор консистентности впервые даст числа с ЖИВОГО прогона, а не с пере-скана сохранённой базы прогона A — сегодня все `I1`/`I2` получены повторным чтением одних и тех же данных; **(3)** платформенный пак (идемпотентный резюм, терминальное состояние) проверяется сквозь, а не юнитами; **(4)** ⛔ **вторая точка по денежной дыре, и она нужна по норме, а не для красоты** — весь довод «четверть денег купила пустоту» стоит на ЧЕТЫРЁХ одиночных розыгрышах, а квирки §3д прямо говорят: смета DeepSeek с одиночного вызова может ошибиться на порядок, сметы строятся на ПОВТОРАХ. ⇒ у числа 25.4 % есть знак и нет величины, пока прогон не повторён. **Цена ≈$0.42 по образцу прогона A, машинный кап ≈$2.5.** ⛔ **ПРЕ-РЕГИСТРАЦИЯ ЗНАМЕНАТЕЛЯ, иначе B ответит числом на другой вопрос** (поправка старшего коллеги 11.09): B — ЕЩЁ ОДИН одиночный прогон, и две точки распределением не станут. Настоящая ценность B не «вторая точка к 25.4 %», а `request_log` ВСЕХ единиц прогона ⇒ **доля выброшенных первых попыток ПО ЕДИНИЦАМ, а не по вызовам.** Это и пре-регистрируется. ⚠ И идёт B **ПАРАЛЛЕЛЬНО** паку о падениях, а не после: они в РАЗНЫХ слотах (бэкенд против платформы), и правило «один промт на зону» их не сталкивает | ≈$0.42 | ✅ **ЗАКРЫТ АКТОМ `D39.252`**, факт $0.396657 | -| 10 | **бэкенд** | ⛔ **БАНК: РЕШЁННОЕ ОСТАЁТСЯ РЕШЁННЫМ** — предмет пере-определён проверкой 15.09. Пак 12.09 «в банк по разнобою» (`BACKEND_WHAT_THE_BANK_IS_MADE_OF_SESSION_PROMPT.md`) снят баннером: все термы со `spread ≥ 2` уже в банке (A 9 из 9, B 8 из 8). Настоящий дефект приоритета №1 — пере-решение банка терминологом: на подписи замерено (у неподписанных строк сменились передачи A 12 из 69, B 14 из 66), на каждой следующей покупке глав выведено из кода — отгруженные главы по порядку слотов остаются со старыми передачами (`backend/internal/pipeline/volume.go`, греп `DELIVERY BEFORE REWORK`). Ряды 130 · 330 · 438 · 440 | $0 + центы перекупки банк-ролей | ⛔ **ПРОЕКТ ОРКЕСТРАТОРА ОТОЗВАН 15.09.** «Банк — журнал решений с окнами» (две редакции Fable 5) расходился с 12 пунктами решённого, замеренного и этого же плана и опирался примерно на десятую часть относящегося; улики — `archive/reports/BANK_CONSILIUM_INPUTS_2026-09-15/`. ✅ **КОНСИЛИУМ ОТРАБОТАЛ, акт `D39.253` (16.09).** Итог — `research/35-bank-memory-consilium.md`: банк как решение по уликам с пятью событиями пересмотра, N-1 на построенном фильтре, N-3 на сборке вида, ряды бэклога 441–450. ✅ **СЛОВО ВЛАДЕЛЬЦА ПОЛУЧЕНО 16.09** (`D39.254`): держать решение между покупками — да · при невозможной безродовой форме — перестроить фразу, иначе «как лучше читается» · богаче контекст — да, меру решает замер M4 · голос и ты↔вы — строить. ⚠ **Вопрос об отказе терминолога ПЕРЕ-ОПРЕДЕЛЁН владельцем:** у банк-ролей нет ни ретрая, ни фоллбека (ряды 435, 438), и он считает это дырой ⇒ заведён ряд 451 «умный участок в точке банка», ряд 452 — голос. ✅ **ГРАНИЦЫ ДАНЫ ВЛАДЕЛЬЦЕМ 16.09** — «в границах ратифицированного», и слот бэкенда освобождён приёмкой `D39.255`. ✅ **ПАК 1 ПРИНЯТ 16.09 актом `D39.257`** (29 путей, $0; посылка В1 закрыта замером — 25 из 26 при идентичном входе). Промт написан был 16.09 — `BACKEND_BANK_ZERO_LAYER_SESSION_PROMPT.md`, пак $0 (громкий отказ при цели без инъекционных текстов до первой траты · отказ роли перестаёт ехать законом · предикат «спорный» как ДВА предиката с заданными знаменателями · носитель посылки «новой улики не было»); круг опровергателя пройден, ждёт слова владельца о выдаче. Вопросы владельцу, в том числе ряд 130 (`research/34` §4 п.4), ставит его итог; он же решает порядок относительно 5(в). Довод «перекрой глав без якоря пере-решил бы банк платной книги» остаётся входом | +| 10 | **бэкенд** | ⛔ **БАНК: РЕШЁННОЕ ОСТАЁТСЯ РЕШЁННЫМ** — предмет пере-определён проверкой 15.09. Пак 12.09 «в банк по разнобою» (`BACKEND_WHAT_THE_BANK_IS_MADE_OF_SESSION_PROMPT.md`) снят баннером: все термы со `spread ≥ 2` уже в банке (A 9 из 9, B 8 из 8). Настоящий дефект приоритета №1 — пере-решение банка терминологом: на подписи замерено (у неподписанных строк сменились передачи A 12 из 69, B 14 из 66), на каждой следующей покупке глав выведено из кода — отгруженные главы по порядку слотов остаются со старыми передачами (`backend/internal/pipeline/volume.go`, греп `DELIVERY BEFORE REWORK`). Ряды 130 · 330 · 438 · 440 | $0 + центы перекупки банк-ролей | ⛔ **ПРОЕКТ ОРКЕСТРАТОРА ОТОЗВАН 15.09.** «Банк — журнал решений с окнами» (две редакции Fable 5) расходился с 12 пунктами решённого, замеренного и этого же плана и опирался примерно на десятую часть относящегося; улики — `archive/reports/BANK_CONSILIUM_INPUTS_2026-09-15/`. ✅ **КОНСИЛИУМ ОТРАБОТАЛ, акт `D39.253` (16.09).** Итог — `research/35-bank-memory-consilium.md`: банк как решение по уликам с пятью событиями пересмотра, N-1 на построенном фильтре, N-3 на сборке вида, ряды бэклога 441–450. ✅ **СЛОВО ВЛАДЕЛЬЦА ПОЛУЧЕНО 16.09** (`D39.254`): держать решение между покупками — да · при невозможной безродовой форме — перестроить фразу, иначе «как лучше читается» · богаче контекст — да, меру решает замер M4 · голос и ты↔вы — строить. ⚠ **Вопрос об отказе терминолога ПЕРЕ-ОПРЕДЕЛЁН владельцем:** у банк-ролей нет ни ретрая, ни фоллбека (ряды 435, 438), и он считает это дырой ⇒ заведён ряд 451 «умный участок в точке банка», ряд 452 — голос. ✅ **ГРАНИЦЫ ДАНЫ ВЛАДЕЛЬЦЕМ 16.09** — «в границах ратифицированного», и слот бэкенда освобождён приёмкой `D39.255`. ✅ **ПАК 1 ПРИНЯТ 16.09 актом `D39.257`** (29 путей, $0; посылка В1 закрыта замером — 25 из 26 при идентичном входе). Промт написан был 16.09 — `BACKEND_BANK_ZERO_LAYER_SESSION_PROMPT.md`, пак $0 (громкий отказ при цели без инъекционных текстов до первой траты · отказ роли перестаёт ехать законом · предикат «спорный» как ДВА предиката с заданными знаменателями · носитель посылки «новой улики не было»); круг опровергателя пройден. ✅ **ВЫДАН и ПРИНЯТ 16.09** — акт `D39.257`. Вопросы владельцу, в том числе ряд 130 (`research/34` §4 п.4), ставит его итог; он же решает порядок относительно 5(в). Довод «перекрой глав без якоря пере-решил бы банк платной книги» остаётся входом | ⛔ **ПОЧЕМУ 4 ВСТАЛ ПЕРЕД 5 (решение 11.09 по мерилу владельца).** Мерило — «качественный КОНСИСТЕНТНЫЙ перевод длинных книг». Аудит банка 11.09 показал, что **книжного вопроса о консистентности не задаёт ни один diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 66651182..60b9076e 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -13,6 +13,7 @@ > `3d90943`). Строки 285 · 305 · 325 закрыты. ⚠ **Синхронный разрез приёма принят ПОСТРОЕННЫМ, НО НЕ ГОТОВЫМ** — > сработало правило остановки (9 major из 11 в одном механизме), десять пунктов несёт строка **332**; ложный > инвариант бюджета заландён осознанно (окно лжи 8 секунд при дефолте в 16 минутах, ломается идемпотентность). +> **(26) ✅ ДВА ПАКА 16.09 ПРИНЯТЫ, БАНК ПЕРЕЕЗЖАЕТ В КНИГУ-ПРОДОЛЖЕНИЕ — акты `D39.253`–`D39.257`.** `D39.253` — консилиум банка памяти закрыт, итог `research/35-bank-memory-consilium.md`; `D39.254` — пять решений владельца по нему. `D39.255` — движковый пак «КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО» принят (29 путей, $0): ⛔ три опубликованных ключа качества уехали смыслом (`ProcessedUnits`, черновиковый и эдит-числитель эха), и пере-классификация `cancelled` меняет счёт слотов на книгах, которые УЖЕ в поле — оба названы остатком, не умолчаны. `D39.257` — пак «БАНК ЗА $0» принят: громкий отказ, когда цель есть, а инъекционных текстов нет, — ДО первой траты; отказ роли перестал ехать в банк законом и разведён с мусором; два предиката «спорный» построены без платного потребителя. ⭐ Судилось ПЯТЬЮ приборами (батарея 24/24, мой собственный мутационный прогон, три оси аудита вне сдачи, пере-снятие чужих чисел, денежная ось: 0 платных путей при контроле 192 прочитанных файла). ⭐ **`D39.256` — решение владельца: банк переезжает в КНИГУ-ПРОДОЛЖЕНИЕ ПОДПИСАННЫМ ПЛЮС РЕШЁННЫМ ДВИЖКОМ**, стройка двухзонная — ряд **461**. ⚠ **Две эрраты того же дня, обе к моим собственным утверждениям:** 16.09-а — число «48 конфигов книг» я взял из чужого отчёта, не пере-мерив (верно 24), и каталожный прогон закрыт числом 267/267; 16.09-б — ноты `D39.256` и `D39.257` утверждают ПРИЧИНУ, которой замер не давал («причина смен передачи — якорь»), измерено лишь отсутствие новой улики во ВХОДЕ ⇒ причина остаётся ГИПОТЕЗОЙ, гейченной рядом **466**. Ряды: закрыты **291** · **379** · **441** · **460**; заведены **457–468**; **445** сужен наполовину. > **(25) ✅ ПЛАТФОРМЕННЫЙ ПАК «ОТВЕТ ДВЕРИ НЕ ЗАВИСИТ НИ ОТ ПОРЯДКА, НИ ОТ ВЕЗЕНИЯ» ПРИНЯТ С ДВУМЯ ДОФИКСАМИ, акт `D39.250`**, контрактный минор **0.15.0** (27 путей, 24 новых теста, $0). ⭐ Предмет ПЕРЕ-ОПРЕДЕЛЁН замером зоны ДО первой правки: не редкая гонка под нагрузкой, а ОРДИНАРНЫЙ путь — любой резюм живого прогона отвечает 409 детерминированно. ⛔ **Оба денежных предохранителя оказались проверены не тем прибором** (гард судил шаблон, а проба рендерит свой $0-пайплайн строкой выше; рецепт проверен текстовым сканом вместо загрузчика — `EXIT=10`), и ответ лежал в дереве комментарием того же хелпера. ⭐ Лечение — СНОС рецепта, а не починка: `П-22` и `П-23` схлопнулись, мина стережётся по умолчанию. Закрыты `PD-448` · `PD-466` · `PD-162` · `PD-139` · `П-22` · `П-23`; живое — эскроу `П-18` и одно названное слепое пятно > **(24) ✅ БЭКЕНД-ПАК «КОНСИСТЕНТНОСТЬ, КОТОРУЮ МОЖНО ПРЕДЪЯВИТЬ» ПРИНЯТ С ДОФИКСОМ, акт `D39.249`** (26 путей, $0). ⭐ **Приоритет №1 владельца впервые ИЗМЕРИМ по тексту, который читает человек:** два инварианта по ОТГРУЖЕННОМУ тексту с печатаемыми знаменателями, секция `BOOK CONSISTENCY` в отчёте сборки. ⛔ Первый круг приёмки дал ШЕСТЬ выживших посадок из шести — худшая оставляла прибор без провода к прогону. Порядок колонок ратифицирован и отменён в тот же день; правило и два триггера пере-открытия — ряд **406**. Каталог **169/169 RED, выживших 0** (прогон оркестратора: зону убивал потолок cgroup, 26 убийств `CONSTRAINT_MEMCG`). Ряды: закрыты 406 · 418; наполовину 407 · 417 · 419; не закрыт 408 (мотив опровергнут замером). Новые — 425–427 · 428 · 431 · 432 > **(23) ⛔ РЕШЕНИЯ ВЛАДЕЛЬЦА 11.09 РАТИФИЦИРОВАНЫ, акт `D39.248`.** Голос ВХОДИТ в приоритет №1 (проектирует Fable 5, исполняет опус — пак обязан нести пункт «обсудить с Fable») · потолок **1–2 агента Fable на сессию**, прежняя «рекомендация» ОТОЗВАНА · автономия смены с мерилом «ценности продукта → архитектура → необходимый рефакторинг → без велосипедов» · ⛔ **полигон выведен из скоупа целиком**, четыре его промта в `archive/prompts/` с баннерами. **Рабочий скоуп — платформа и бэкенд.** Прежде решения жили в рабочей записке, которая удаляется при исполнении плана. diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index d1afca60..4c89f612 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -3918,3 +3918,15 @@ bought NOTHING». ⇒ **`tmctl manifest` есть НИЖНЯЯ граница, > вычтен» сидит и в §4.4-компараторе — `方源` исключён из числителя смен, но остался в знаменателе, поэтому верные доли > **12 из 68** и **14 из 65**; сами числа смен и совпадений (12 · 11 · 14 · 14, итог 25 из 26) не двигаются. Ряд 462 покрывает оба места. +**11. Какие строки акт закрывает.** Ряд **441** («громкий гейт: банк включён, а у цели нет текстов инъекции») — построен и принят по п.1, снимается с таблицы. ⚠ **Отсутствие этой секции в первой редакции акта и было корнем того, что ряд остался жить:** у `D39.255` она есть (п.9), здесь её не было, и ряд простоял в трекере с текстом в настоящем времени при построенном гарде. Нашёл сквозной аудит закрытости, проверено мной. + +> ⚠ **Эррата 16.09-б — к `D39.256` п.3 и `D39.257` п.3 разом: обе ноты утверждают ПРИЧИНУ, которой замер не давал.** +> Обе написали «причина смен — якорь и состав батчей, а не знание о книге». **Это сильнее измеренного.** Измерено +> ровно одно: во ВХОДЕ строки новой улики не было — 25 из 26 байт-идентичны, включая окна KWIC. Разделить «якорь +> против стохастики модели» замер не мог по построению: состав батча и содержимое якоря не сохраняются НИГДЕ, и +> отчёт пака говорит это прямым текстом. ⇒ **«причина — якорь» есть ГИПОТЕЗА**, гейченная рядом 466 (персистенция +> состава батча ключом на хеш запроса). ⚠ Решение `D39.256` от этой поправки НЕ меняется: оно стоит на отсутствии +> новой улики во входе, а не на названной причине. Нашёл сквозной аудит, проверено мной по обоим телам и по отчёту. +> ⭐ Класс для памяти: **вывод, записанный в ноту, живёт дольше замера, которым он был получен** — и потому в ноте +> утверждение обязано быть не сильнее прибора, даже когда «и так понятно». + diff --git a/docs/architecture/09-target-architecture.md b/docs/architecture/09-target-architecture.md index b1a8720a..df373fa0 100644 --- a/docs/architecture/09-target-architecture.md +++ b/docs/architecture/09-target-architecture.md @@ -14,6 +14,8 @@ > > ⚠ **ПЛАТФОРМЕННЫЙ ШОВ — что построено 03.09 (D39.188, пак P13).** Оплаченный прогон продолжается на ТЕ деньги, за которые продан: `reopen` читает бюджет ИЗ ХОЛДА первой попытки, а прогон без холда отвечается ОШИБКОЙ, не цифрой (прежде бюджет пере-выводился по текущей ставке — `PD-168`) · **владение потоком переживает проход свипа:** чтение ОСТАНАВЛИВАЕТСЯ на чужом handshake'е (`ErrForeignStreamAhead`), потому что до этого чужие события ложились на оплаченную попытку — чужой `ceiling` ставил `paused` живому прогону, `unit_done` писал непокупленные главы (`PD-438`, major) · операторские ручки: `run unquarantine` и колонка QUARANTINE · условия хоста батареи ВЫВОДЯТСЯ из тестовых исходников (`make conditions`), а не держатся списком в прозе · два гейта в `platform/internal/gates/`: перечень условий против исходников и класс «тревожный ряд ушёл из счёта незамеченным». ⚠ **Бамп формы манифеста безопасного порядка деплоя НЕ ИМЕЕТ ни в одну сторону** (`PD-436`): гейт интейка — строгое равенство одной константе, окна двух форм нет ⇒ стоп-мир. Пока окно двух паков открыто, форма ЗАМОРОЖЕНА (D39.190 п.5). > +> ⚠ **АКТЫ 16.09, которых эта шапка не знала** (найдено сквозным аудитом закрытости; строка «освежена 05.09» выше относится к пакам 05.09 и этих не покрывает): `D39.253` — консилиум банка принят, итог `../research/35-bank-memory-consilium.md` · `D39.254` — пять решений владельца по банку · `D39.255` — пак «КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО» · `D39.256` — банк переезжает в КНИГУ-ПРОДОЛЖЕНИЕ подписанным плюс решённым движком (стройка двухзонная, ряд 461) · `D39.257` — пак «БАНК ЗА $0»: в СЛОЙ 4 «Память» добавлены громкий отказ при цели без инъекционных текстов ДО первой траты, разведение отказа роли и мусора по корзинам и два предиката «спорный» без платного потребителя. ⚠ Эррата 16.09-б: «причина смен передачи — якорь» в `D39.256`/`D39.257` сильнее замера, измерено отсутствие новой улики во ВХОДЕ. +> > **ВХОДНАЯ ДВЕРЬ ШВА ПОСТРОЕНА** (D39.158): закон двери — `17-seam-inbound-law.md`, онтология банка, который она обслуживает, — `18-bank-ontology.md`. **Шапка — не переписывание: тело ниже = замысел арх-ресета 13.07**, и при расхождении тела с шапкой первична шапка. > | Слой | Статус | Пак / D | > |---|---|---| diff --git a/docs/architecture/13-tech-debt-anchors.md b/docs/architecture/13-tech-debt-anchors.md index 98a7752b..148dd204 100644 --- a/docs/architecture/13-tech-debt-anchors.md +++ b/docs/architecture/13-tech-debt-anchors.md @@ -174,7 +174,7 @@ Go-гейт стоит на v1 без поглощения кавычек: `back ### Б-106 — тело строки 106 на 09.08.2026 -**Слой 3 НЕ достроен: контракт редактора = full-regen, а целевой — узкие мандаты + ДИФФЫ.** `docs/architecture/09-target-architecture.md:109`=`узкие мандаты + диффы` дословно: «research/07 предписывает узкие мандаты + диффы, а не полную перегенерацию — сейчас ровно наоборот (4 мандата, full-regen), что и породило хвост инверсий» (⚠ прежний голый якорь `:121-126` съехал на слой 5/6); целевой контракт — редактор правит anchored search/replace-спанами с детерминированным Go-apply (ограниченный blast-radius, дешевле, аудируемо, структурно omission-safe). Пак-16 построил петлю РЕМОНТА (починка флагнутого спана постфактум), а не diff-контракт роли ⇒ это разные вещи. **Строки не было ни одной** — дыра учёта, найденная сверкой 02.08 (грепы `diff`/`мандат`/`span` по бэклогу = 0). Смежное: арм Q4b «diff-fidelity+style редактор» (`exp15:108`) не прогонялся НИ РАЗУ, хотя трек B объявлен завершённым. **ЭМПИРИКА ПОЛУЧЕНА (D39.108, экспы 19/20):** дифф-контракт механически исправен (комплаенс 0.966 на боевой единице, аппликатор 15/15), но по замороженному гейту Q4b диффы ОТЛОЖЕНЫ (fidelity-trap 11/12; дороже full-regen на dspro×ru ×2.5–2.9 при невскрытой причине; D21.4/D21.10 закрыты явно). **Эксп-21 (D39.117):** полный regen выигрывает у точечного ремонта (`C2/A_law` −3.75 Holm 0.0006) — довод против диффов, НЕ опровержение: чинил дешёвый фиксер по предложению, а не сильный редактор узким мандатом; гейт «перепроверить до стройки» в силе, приоритет понижен +**Слой 3 НЕ достроен: контракт редактора = full-regen, а целевой — узкие мандаты + ДИФФЫ.** `docs/architecture/09-target-architecture.md:111`=`узкие мандаты + диффы` дословно: «research/07 предписывает узкие мандаты + диффы, а не полную перегенерацию — сейчас ровно наоборот (4 мандата, full-regen), что и породило хвост инверсий» (⚠ прежний голый якорь `:121-126` съехал на слой 5/6); целевой контракт — редактор правит anchored search/replace-спанами с детерминированным Go-apply (ограниченный blast-radius, дешевле, аудируемо, структурно omission-safe). Пак-16 построил петлю РЕМОНТА (починка флагнутого спана постфактум), а не diff-контракт роли ⇒ это разные вещи. **Строки не было ни одной** — дыра учёта, найденная сверкой 02.08 (грепы `diff`/`мандат`/`span` по бэклогу = 0). Смежное: арм Q4b «diff-fidelity+style редактор» (`exp15:108`) не прогонялся НИ РАЗУ, хотя трек B объявлен завершённым. **ЭМПИРИКА ПОЛУЧЕНА (D39.108, экспы 19/20):** дифф-контракт механически исправен (комплаенс 0.966 на боевой единице, аппликатор 15/15), но по замороженному гейту Q4b диффы ОТЛОЖЕНЫ (fidelity-trap 11/12; дороже full-regen на dspro×ru ×2.5–2.9 при невскрытой причине; D21.4/D21.10 закрыты явно). **Эксп-21 (D39.117):** полный regen выигрывает у точечного ремонта (`C2/A_law` −3.75 Holm 0.0006) — довод против диффов, НЕ опровержение: чинил дешёвый фиксер по предложению, а не сильный редактор узким мандатом; гейт «перепроверить до стройки» в силе, приоритет понижен ### Б-108 — тело строки 108 на 09.08.2026 diff --git a/docs/research/31-harness-independent-critique.md b/docs/research/31-harness-independent-critique.md index d3b0b079..2ca4bef2 100644 --- a/docs/research/31-harness-independent-critique.md +++ b/docs/research/31-harness-independent-critique.md @@ -59,7 +59,7 @@ Контрпример проверен исполнением: две книги различаются персонажем в предыдущей главе; следующая начинается одинаковым «终于答应了» — «наконец согласился/согласилась». Реальный `TranslateBook` с текущими zh→ru промптами и подставным провайдером дал разные запросы предыдущих единиц и побайтно одинаковые запросы текущих переводчика и редактора. Условия: пустой одинаковый банк, майнинг выключен, банкнота включена; две главы и две редакторские единицы на вариант. Это проверка доступности информации; частоту неправильных переводов живой модели она не устанавливает. Артефакт и воспроизведение — в конце документа. -Отрицательные результаты carryover не закрывают весь класс: в exp15 широкое чтение, lookahead и состояние сцены остались неисполненными (`docs/experiments/15-segmentation-empirics.md:489`). Сам target-architecture ограничивает перенос результатов классом исследованных книг (`docs/architecture/09-target-architecture.md:134`). Работа над структурой глав полезна, но она отвечает на другой вопрос. +Отрицательные результаты carryover не закрывают весь класс: в exp15 широкое чтение, lookahead и состояние сцены остались неисполненными (`docs/experiments/15-segmentation-empirics.md:489`). Сам target-architecture ограничивает перенос результатов классом исследованных книг (`docs/architecture/09-target-architecture.md:138`=`НИКОГДА не переносится в продукт`). Работа над структурой глав полезна, но она отвечает на другой вопрос. **Коррекция:** проверить зависимости через границы редакторских единиц: субъект, адресат, намеренная неоднозначность, смена регистра, позднее раскрытие смысла термина. Сначала сравнить текущий вход с минимальным необходимым исходным контекстом; затем выбирать окно, поиск исходных фрагментов или состояние сцены. Не начинать со строительства универсальных summaries/графа. В строке 80 бэклога (`docs/PROGRESS.md:153`) уточнить: ссылка на исходник проверяется детерминированно, её семантическое толкование — нет. Требование безошибочного детерминированного толкования заранее заблокирует исследование этой задачи. diff --git a/docs/research/35-bank-memory-consilium.md b/docs/research/35-bank-memory-consilium.md index 5df51014..426d7867 100644 --- a/docs/research/35-bank-memory-consilium.md +++ b/docs/research/35-bank-memory-consilium.md @@ -1661,3 +1661,13 @@ D39.50 (просьба владельца против «до него kwic не «переносить ли банк в книгу-продолжение и какую его часть: только подписанное · подписанное плюс решённое движком · ничего» — не отвечен и умолчания не имеет. Заведён строкой бэклога. +## ⚠ ТРЕТЬЯ ПОМЕТКА 16.09 (оркестратор №23) — подпункт В1 ЗАКРЫТ, вторая пометка устарела в тот же день + +Вторая пометка выше объявляет подпункт В1 («переносить ли банк в книгу-продолжение и какую его часть») открытым +вопросом владельца. **Он закрыт в тот же день, позже той пометки:** владелец ответил «переносим подписанное плюс +решённое движком», решение ратифицировано нотой `D39.256`, ряд бэклога 460 снят, носитель стройки — ряд **461** +(работа двухзонная: платформа проводит перенос при заведении продолжения, движок определяет форму слоя). + +⚠ Пометка не правит вторую, а дополняет её: тело улики и её поправки не переписываются задним числом (D23.3), +поэтому читатель видит обе и порядок между ними. Нашёл сквозной аудит закрытости, проверено мной по телу `D39.256`. +