Give research/33's eleven debts carriers in the tracker, fix four claims it got wrong, and put the recut window's order and its bans in the decisions log
This commit is contained in:
parent
e9890685b4
commit
4d0b68ed7e
7 changed files with 129 additions and 12 deletions
|
|
@ -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). Здесь только долг и его диспозиции.
|
||||
> - **СЧЁТ ОЧЕРЕДИ на 05.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **249** строк · зона бэкенд **120** строго / **165** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175), платные прогоны разблокированы · «скоро» **114** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже).
|
||||
> - **СЧЁТ ОЧЕРЕДИ на 07.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **256** строк · зона бэкенд **126** строго / **172** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175), платные прогоны разблокированы · «скоро» **118** (перечень — грепом по таблице, рукописный список снят 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; правки — только через оркестратора)
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
| 13 | **Включение платной петли ремонта + per-class исходы ремонта** (схемное решение принимается вместе) — вернуться при расширении классов детекторов и ненулевом остатке; ⚠ при включении: репэйр-гард №5 после #10 слеп на одно-Han-дифференциал (демоция в обоих прогонах ⇒ 0>0 — репэйр, стёрший верно отрендеренный одно-Han-термин, не ветируется; D39.78-ревью) | владелец | когда-нибудь | отдельное решение | D39.38, D39.39(а), D39.78, CURRENT-STATE |
|
||||
| 13б | **`speech-cue.txt` zh НЕ шипить до замера голос-флаггера; замера НЕТ (D39.86) — оси не считались НИ РАЗУ.** ⚠ **Причина ПЕРЕ-НАЗВАНА: прежний довод «редакторская волна не гонялась» ПРОТУХ 31.08** (холодный прогон `coldrun-v16` её гонял и оплатил — строка 16); живой блокер — ПУСТОЙ РЕЕСТР профилей, см. ниже. ⚠ **ГЕЙТ ПЕРЕ-СНЯТ 05.09:** прежний требовал «подписанных профилей (строка 24)», а подпись владелец снял (D39.198 п.5) — значит гейтом остаётся ОДНО: первый прогон добора идеала С редакторской волной. ⛔ **Но снятие подписи открыло дыру, и её надо закрыть раньше стройки:** реестр `voices:`/`addresses:` физически заполняет только подпись (`backend/internal/config/seed.go`, греп `no miner emits them`), и если подписи нет — заполняет НИКТО. Вопрос вынесен строкой 24. ⚠ Сам гейт в схеме ЕСТЬ (`internal/config/pipeline.go` `VoiceGate`, пак-19/D39.55). ⚠ `rules=` в отчёте = «гейт СКОНФИГУРИРОВАН», не «отработал» — до фикса читать по знаменателям `replies=` — носитель **292** (испр. 05.09: 105 закрыта D39.200 только половиной (а), знаменатели уехали в 292). Археология дословно — `architecture/13-tech-debt-anchors.md` §Б-13б. ⚠ **ПОПРАВКА 23.08 (№19):** заполнить `voices:`/`addresses:` может только подпись владельца (`internal/seed/seed.go:23`=`Voices and Addresses are the two D21 record types` — «no miner emits them»), а при пустом реестре `RunVoiceChecks` выходит на `!reg.HasData()` ДО ВСЕХ осей, поэтому нулями отдаются и оси, и знаменатели — «ноль флагов» неотличим от «оси не считались». ⚠ Отдельно: `gates.voice` отсутствует в `backend/configs/`, НО в конфигах реальных прогонов (вне git) он ВКЛЮЧЁН — `~/books/gu-zhenren/coldrun-a/pipeline.yaml:68` и `coldrun-b:71`, `enabled: true`; дыра не «оператор забыл включить», а «шаблоны репозитория гейт не несут» | владелец | отложено-до-замера | первый прогон добора идеала С РЕДАКТОРСКОЙ ВОЛНОЙ (оси голоса, строка 24) → отдельное решение | D39.56, PACK19_BUILD §7.2, чат 31.07, D39.86 |
|
||||
| 14 | **Четыре data-инженерных флага фазы-2 общности, каждый с рекомендованным дизайном** (§5 отчёта): ё-фолд → target-данные (`char_fold`; смена сигнатуры core-примитива через вердикт-несущий банк, сдвиг `memory_version`) · segmentation-фолбэк громким (ломает контракт corridor-фолбэка `pipeline.go:839-848` + голден-фикстура на нём; лечение — объявить блок в голден-yaml) · `Fertility` per-script map (калибровка ждёт боевого токенизатора) · `source-encoding.txt` + Go-реестр декодеров | владелец | когда-нибудь (следующий пак общности) | отдельное решение | D39.64, GENERALITY_PHASE2 §5.1–5.4 |
|
||||
| 86 | **Мелкие открытые решения одним списком** (свип D39.66): echo-семантика дропнутого c-lite-члена (D39.18 — оставить pre-c-lite?) · magnitude-кап тяжёлой CJK-утечки (D38.3 п.4в; сейчас strip+flag) | владелец | когда-нибудь | отдельные решения | D39.66, D39.69(feed_cap закрыт §1) |
|
||||
| 86 | **Мелкие открытые решения одним списком** (свип D39.66): echo-семантика дропнутого c-lite-члена (D39.18 — оставить pre-c-lite?) · magnitude-кап тяжёлой CJK-утечки (D38.3 п.4в; сейчас strip+flag) · ⚠ дописка 07.09: `internal/lang/data/zh/numeral.txt` отстаёт от эталона `cjk-section.txt` на `〇两兩` — намеренно или недосмотр? Потребитель — канал «числительное + ранг-слово» майнера (research/33 §7.1) | владелец | когда-нибудь | отдельные решения | D39.66, D39.69(feed_cap закрыт §1) |
|
||||
| **— ХВОСТЫ ХОЛОДНОГО ПРОГОНА (исполнен достаточно, D39.58; Р7 владельца) —** | | | | | |
|
||||
| 16 | **Полная цена холодного старта — ЖИВОЙ ОСТАТОК ОДИН: цена ДОВЕДЁННОЙ ДО КОНЦА книги не измерена.** Холодный прогон `coldrun-v16` 31.08 отдал 3 юнита из 14 и остановлен снапшот-гардом. ⚠ **Довод «редакторская волна не гонялась» ПРОТУХ 31.08** (испр. 02.09): она гонялась и оплачена — 4 чекпойнта `edit/editor/deepseek-v4-pro` на $0.214865; не мерена именно ПОЛНАЯ цепь одним заходом до конца книги. **Числа ДО редактуры — база прогона `~/books/gu-zhenren/coldrun-b/reprobe/bank-low/guzhenren-bank-low.db`** (10 глав, `low` на черновике И на бэнк-ролях; арифметика снята 23.08 №19): вся ДРАФТ-стадия $0.031639 (flash $0.021289 + pro $0.010350) · терминолог $0.005750 · классификатор $0.007706 · **весь заход $0.045095**, слагаемые дают именно его. ⚠ Числа в ИЮЛЬСКИХ деньгах — множитель пере-пина DeepSeek 4.47 (D39.179 п.1), сегодня тот же заход $0.2017. ⚠ Фаза C `coldrun-b` закрыта владельцем как неуспешная (02.08, D39.90), её деньги не тронуты ($0). Строка держит и оси голоса (13б/24) | бэкенд | когда-нибудь (гейт: первый ЗАВЕРШЁННЫЙ прогон) | добор идеала | D39.58, **D39.90** |
|
||||
| 18 | **Эмиссия головы 蛊**: сид-половина = чек-лист (определяющий терм книги сидится `allow_short`, D39.50); эмиссия-КАНАЛ демотирован до ИЗМЕР-ГЕЙТА (Q7): полигон-замер «меняет ли эмиссия головы рендер композитов» — строить ТОЛЬКО по эффекту и ПОСЛЕ #10 (однознаковый пост-чек чинится чекер-паком); перед стройкой резолвить K-гейт и KWIC-грязь одиночной головы | полигон → бэкенд | скоро (санкция Q7 D39.70 — после #10, очередью с ре-пробой) | полигон-замер → решение | D39.58, D39.60, D39.69 |
|
||||
|
|
@ -103,7 +103,7 @@
|
|||
| 170 | **`tmctl init` — движок сам заводит книгу** (форма В развилки интейка): платформа зовёт $0-команду, движок пишет СВОЙ `book.yaml` — требования к полям живут там же, где проверяются (`config/book.go`); до неё бета живёт формой Б (рендер из деплой-шаблона платформой при создании книги, ратификация D39.130) | бэкенд | когда-нибудь (после беты формы Б) | малый пак | приёмка P5, **D39.130** |
|
||||
| 172 | **Остаток после пере-пина DeepSeek (пин ИСПОЛНЕН и ПРИНЯТ — D39.137, `76049bb`):** (а) **схемное решение владельца по time-based** — доклад §5 отчёта вендор-сессии (рекомендация: пик оставить; scheduler-вариант строки 60 не начинать до ответа вендора «по какой отметке времени тарифицируется вызов» — вендором НЕ задокументировано — и замера доли пика; дешёвый рычаг: операционное правило «прогоны не стартуют в 01–04/06–10 UTC» — почти всё ×2 без строчки Go; гибрид «резерв пиком, сеттл по окну факта» назван) · (б) пере-калибровка ставки $0.03/глава (166/П-10; множитель счёта замерен) · (в) exp08 v3 (85) обязателен до budget_usd · (г) **вахта весов V4-Pro-0813** (класс D39.61): риг готов, порог ратифицированной ВЫБОРОЧНОЙ формы («≥4/5 прогонов N=5 достигают 6/6», D39.136 п.6б) **в риге ИСПОЛНЕН** паком честности — арифметика вынесена в `live_reprobe_threshold_test.go`, сам риг применяет её же. ⚠ **ИМЯ СТРОКИ ВВОДИТ В ЗАБЛУЖДЕНИЕ (испр. №18 17.08, сверено кодом):** названный риг меряет роль КЛАССИФИКАТОРА, а она ходит на **flash** (стендовый `pipeline.yaml:64` + артефакт прошлого прогона `model = deepseek-v4-flash`), тогда как сменившиеся веса — у **pro**, а pro у нас = РЕДАКТОР (`configs/pipeline-c1.yaml:62,76`). Владелец 17.08 санкционировал ТОЛЬКО вариант (а) — пере-съём классификаторного гейта, потолок $0.20, исполняется п.5 пака честности. **По этому прогону строку НЕ закрывать:** вопрос «сменились ли веса редактора» остаётся открытым, дешёвый вход к нему — данные фазы Д, где pro гоняется именно редактором (спросить полигон прежде, чем покупать новый замер) | владелец → бэкенд/полигон | скоро (схема — на владельце; вахта — после 16.08) | СТОП-решение (схема) + замер (вахта) | вендор 13.08, **D39.137**, строка 60, D30.4 |
|
||||
| 180 | **`prices_checked` — одно поле на ВСЮ таблицу цен** (находка вендор-сессии, D39.137): бамп по факт-чеку одного вендора сдвинул 120-дневный гейт свежести остальным семи моделям (дедлайн уехал ~07.11→~13.12); лечение — пер-модельная дата проверки (правка схемы) ЛИБО ре-чек остальных вендоров отдельным заходом до исходного дедлайна | бэкенд | когда-нибудь (ре-чек вендоров — до ~07.11) | малое касание / вендор-заход | D39.137, отчёт §7.1 |
|
||||
| 182 | **Wire-батч перед добором идеала — КОПИТЬ и вносить ОДНИМ касанием** (каждая правка двигает RequestHash / `memory_version` / снапшот = перекупка волн; дриблить по одной = платить пере-снапшот несколько раз): 46 экран цели (+предпосылка 113 фикстура) · 134 инжект-заголовки (гейт пал D39.108) · 131 кап инъекции · 140 банковый контур в shipping (СТОП-решение) · 105(а) вердикт-половина классификатора · 130-остаток (мердж авто-банка, гейт WARN второго прогона) · 14 ё-фолд (носитель «следующий пак общности») · **119+124(+115 пер-парный хеш EmbeddedVersion) — ОДНИМ дизайн-паком** (строка 124 требует принимать целиком; сверено кодом: `cutTag` фолдит `chunkerVersion`/`EmbeddedVersion`/`NormVersion` — `manifest.go:160-169`); вне батча свободен только 118 (tools/go.mod). Состав — аудит корпуса 15.08 (archive/reports/CORPUS_AUDIT_2026-08-15.md §В.г) | оркестратор → бэкенд | скоро (собрать к ратификации фазы Д; вносить перед первым платным прогоном добора идеала) ⚠ **СОСТАВ ОКНА 04.09 (D39.190 п.4 ратифицировал пере-снапшот единым актом):** в выданный вайр-батч вошли **210 · 113→46 · 134 · 140 · 184(а)**; СНАРУЖИ остались и это сказано вслух, а не умолчано — **131** (кап инъекции: своя цена и своё СТОП-решение, и сама строка велит «пере-замерить ПОСЛЕ 134», то есть её очередь следующая), **105(а)** и **14** (ждут следующего окна), **119+124+115** (только одним дизайн-паком), **160** (бампает `manifestVersion`, отложена ПОРЯДКОМ — D39.190 п.2), **142** (после шагов 0–1 полигона — D39.190 п.3). | координационная строка → промт(ы) батча | аудит 15.08, D39.134/136/137 |
|
||||
| 182 | **Wire-батч перед добором идеала — КОПИТЬ и вносить ОДНИМ касанием** (каждая правка двигает RequestHash / `memory_version` / снапшот = перекупка волн; дриблить по одной = платить пере-снапшот несколько раз): 46 экран цели (+предпосылка 113 фикстура) · 134 инжект-заголовки (гейт пал D39.108) · 131 кап инъекции · 140 банковый контур в shipping (СТОП-решение) · 105(а) вердикт-половина классификатора · 130-остаток (мердж авто-банка, гейт WARN второго прогона) · 14 ё-фолд (носитель «следующий пак общности») · **119+124(+115 пер-парный хеш EmbeddedVersion) — ОДНИМ дизайн-паком** (строка 124 требует принимать целиком; сверено кодом: `cutTag` фолдит `chunkerVersion`/`EmbeddedVersion`/`NormVersion` — `manifest.go:160-169`); вне батча свободен только 118 (tools/go.mod). Состав — аудит корпуса 15.08 (archive/reports/CORPUS_AUDIT_2026-08-15.md §В.г) ⚠ **испр. 07.09: ссылка на «105(а)» ПРОТУХЛА** — строки 105 в живом трекере нет (греп `^| 105 |` = 0 при 249 рядах), она закрыта `D39.200`; наружный состав окна читать без неё | оркестратор → бэкенд | скоро (собрать к ратификации фазы Д; вносить перед первым платным прогоном добора идеала) ⚠ **СОСТАВ ОКНА 04.09 (D39.190 п.4 ратифицировал пере-снапшот единым актом):** в выданный вайр-батч вошли **210 · 113→46 · 134 · 140 · 184(а)**; СНАРУЖИ остались и это сказано вслух, а не умолчано — **131** (кап инъекции: своя цена и своё СТОП-решение, и сама строка велит «пере-замерить ПОСЛЕ 134», то есть её очередь следующая), **105(а)** и **14** (ждут следующего окна), **119+124+115** (только одним дизайн-паком), **160** (бампает `manifestVersion`, отложена ПОРЯДКОМ — D39.190 п.2), **142** (после шагов 0–1 полигона — D39.190 п.3). | координационная строка → промт(ы) батча | аудит 15.08, D39.134/136/137 |
|
||||
| 173 | **`backupStamp` секундной точности**: два `translate` в одну секунду дают коллизию имени бэкапа и exit 1, маскируя класс «проект занят» (12) — метка до наносекунд/uniquify либо распознавать коллизию явно; преexisting, вскрыт ревью эмиттер-пака | бэкенд | когда-нибудь | малое касание | приёмка D39.131 |
|
||||
| 175 | **Деплой движка «в полёте» — ДАЛЬНИЙ ОСТАТОК** (ближняя половина ИСПОЛНЕНА паком migrate — D39.134; правило свипа и settle запиненным бинарём — аддендум P6, D39.132). Остаток: (а) при СЛЕДУЮЩЕМ бампе схемы проставить в файл книги `application_id` + `min_reader_version` — данные-задел под окно совместимости, ~0 логики; (б) GC бинарей: удалять не пиненные ни одной незакрытой попыткой, последние 2–3 релиза держать для отката; (в) окно совместимости читателей / пин уровня книги — строить ТОЛЬКО по триггерам: много тенантов · бампы схемы еженедельно+ · потребители `status` кроме платформы. Археология захода — ресёрч 14.08 (вывод: exact-match читателей на деньгах = осознанный fail-closed, корень не выдёргивать, приделать дверь) | платформа/бэкенд | когда-нибудь (по названным триггерам; (а) — попутно первым бампом схемы) | данные-задел + малые касания | владелец 14.08, ресёрч 14.08, строка 139, D39.134 |
|
||||
| 177 | **Гигиена restore point `tmctl migrate`** (находки приёмки ВНЕ карты отчёта; фикс-лист ФМ — запись приёмки 15.08, слайс [archive/PROGRESS-2026-08-14-15.md](archive/PROGRESS-2026-08-14-15.md)): ретрай в ту же секунду после сорванного шага = exit 1 «backup already exists» вне полосы — ровно на цикле самолечения платформы · kill -9 посреди шва оставляет РВАНУЮ копию под легитимным именем (ручной откат по ней = потеря данных; лечение — temp+rename) · копии restore point не подчищаются (повтор после срыва копит их) · SIGINT/SIGTERM в migrate не прерывают (ctx не доезжает) · комментарий migrate.go «no money touched» на no-op неверен (recovery зануляет leftover reserved) | бэкенд | когда-нибудь (следующее касание migrate/бэкапа) | малое касание + тесты | D39.134, приёмка №17 |
|
||||
|
|
@ -174,14 +174,14 @@
|
|||
| 97 | **→ переехала в `platform/BACKLOG.md` П-2** (глобальный брокер рейт-лимитов; гейт «до второго параллельного пользователя» зафиксирован там же) | платформа | — | зонный бэклог | D39.81, D39.84 |
|
||||
| 127 | **Устаревший DDL-коммент `glossary.source`** (`migrate.go:194`: «seed|ruby|auto», фактические пути записи — seed/ruby/mined, `auto` не пишет никто; фантом уже утёк во фронт-доки дважды) — поправить коммент | бэкенд | когда-нибудь (попутно любым паком store) | однострочная правка | ревью контракта 04.08, D39.99 |
|
||||
| 106 | **Слой 3: целевой контракт «узкие мандаты + ДИФФЫ» против текущего full-regen — гейт «перепроверить до стройки» в силе, приоритет ПОНИЖЕН (D39.117: full-regen выигрывает у ремонта; оговорка полигона — чинил дешёвый фиксер по предложению, не сильный редактор узким мандатом).** Реактивация — только через эту строку. Археология дословно (эмпирика D39.108 · история дыры учёта) — `architecture/13-tech-debt-anchors.md` §Б-106 | владелец → бэкенд | когда-нибудь (пере-проверка «сильный редактор × узкий мандат» — перед стройкой слоя 3) | замер → решение владельца | 09 §Слой 3, D39.90, D39.108, **D39.117** |
|
||||
| 114 | **Конфиго-слой ручки эффорта: два дешёвых хвоста приёмки (вне снапшота, $0 прогонов).** (а) **Д4 отчёта:** `gates.terminology.target_script` НЕ сверяется с `book.target_lang` — `target_lang: ru` + `target_script: Latin` грузится чисто и **ИНВЕРТИРУЕТ** банковский экран (ловит целевой, пропускает чужой); сверка при загрузке против `lang.LangScripts(TargetLang)` — тот же дата-план, что у экрана строки 46, громкий отказ на несовпадении. (б) **Находка-2 приёмки:** стейл-доккоммент `capability.go:78` — у константы `ReasoningExtraBodyDisable` до сих пор «effort "" leaves the provider default», противореча проводу (`applyToBody` мержит disable на `""`, комментарий в теле arm это прямо объясняет) и починенному `ThinksOnWire`; однострочник тем же касанием | бэкенд | скоро (мелкий пак или попутно со строкой 46) | правка Go, снапшот не двигает | D39.91, EFFORT_HANDLE Д4 |
|
||||
| 114 | **Конфиго-слой ручки эффорта: два дешёвых хвоста приёмки (вне снапшота, $0 прогонов).** (а) **Д4 отчёта:** `gates.terminology.target_script` НЕ сверяется с `book.target_lang` — `target_lang: ru` + `target_script: Latin` грузится чисто и **ИНВЕРТИРУЕТ** банковский экран (ловит целевой, пропускает чужой); сверка при загрузке против `lang.LangScripts(TargetLang)` — тот же дата-план, что у экрана строки 46, громкий отказ на несовпадении. (б) **Находка-2 приёмки:** стейл-доккоммент `capability.go:78` — у константы `ReasoningExtraBodyDisable` до сих пор «effort "" leaves the provider default», противореча проводу (`applyToBody` мержит disable на `""`, комментарий в теле arm это прямо объясняет) и починенному `ThinksOnWire`; однострочник тем же касанием ⚠ **(в) дописка 07.09:** зеркало `ThinksOnWire` ↔ `applyToBody` не пиньётся ни одним кейсом (мутация арма оставляет батарею зелёной при разъехавшемся зеркале) — при следующем касании файла делегация в `Capability.SuppressesThinking`, ~40 строк, снапшот-нейтрально: `snapshot.go:535` фолдит JSON-форму `llm.Capability`, а не её методы (research/33 Д2) | бэкенд | скоро (мелкий пак или попутно со строкой 46) | правка Go, снапшот не двигает | D39.91, EFFORT_HANDLE Д4 |
|
||||
| 115 | **`//go:embed` целевых данных — ЯВНЫЙ список файлов: новая ЦЕЛЬ требует правки Go (Д6 отчёта).** `internal/lang/embedded.go:22` перечисляет файлы поимённо, `CompileCheckers` паникует при неполном файле цели ⇒ на канон-вопрос «заработает ли пара, которой в репо НЕТ, без правки Go» ответ сегодня **НЕТ** — дыра в ратифицированной «ФАЗЕ 2 ОБЩНОСТИ ✅» (D39.64), и она не про язык, а про строку эмбеда. Решить форму: `embed data/*` (и как манифест фолдится в `EmbeddedVersion`, чтобы НЕ перекупать чужие пары) против явного списка как осознанного гейта полноты данных цели | оркестратор → бэкенд | когда-нибудь (триггер: первая новая целевая пара; учтён в реестре 108) | отдельное решение | D39.91, EFFORT_HANDLE Д6, D39.64 |
|
||||
| 108 | **Реестр ЗАГЕЙЧЕННЫХ ТРИГГЕРОВ (триггер → что вернётся → источник) — ВЫСЕЛЕН ДОСЛОВНО в `architecture/13-tech-debt-anchors.md` §Б-108; сверять на каждом переходе горизонта (норма D39.66 «каждое отложено получает носитель» в силе).** ⚠ Живое оттуда: go.work-триггер УЖЕ наступил (`platform/go.mod` заведён) — ⚠ **тот же факт несёт строка 237(а), испр. 05.09: чинится ОДИН раз и там, здесь он ЗАПИСЬ РЕЕСТРА, а не заказ** · вахта маппинга эффорта dspro «early August 2026» · движение тулчейна к go1.27 ⇒ строка 119 ПЕРВОЙ | оркестратор | скоро ($0, гигиена трекера) | завести реестр + сверку в норму лендинга | D39.66, D39.90 |
|
||||
| 109 | **Продуктовые требования без строки-носителя: ПТ-6 (структура абзацев) · ПТ-7 (слабый оригинал — вопрос владельца) · ПТ-22 (продуктовый интейк настроек) · ПТ-10 (механизм веб-фетча).** Носители заводить при первом касании тем; реестр `product-requirements.md` первичен. Разбор дословно — `architecture/13-tech-debt-anchors.md` §Б-109 | оркестратор/владелец | скоро ($0 — расписать носители) | завести строки/вопросы → диспозиции | D39.90, product-requirements |
|
||||
| 110 | **Детектор повторов лемм / защита авторских рефренов** (`04-unhappy-paths.md:97,130 п.5`): $0-минимум исполнен промптом (editor.md, пакет-чекеров 02.08), механизм явно не строился — «нет размеченного класса; связка с alignment/Bertalign». Строки-носителя не было; предмет живой, потому что отличить дефектный повтор от авторского рефрена без выравнивания нельзя | бэкенд/полигон | когда-нибудь (с корпусом пилота, строка 85) | размеченный класс → решение | 04-unhappy §5, D39.90 |
|
||||
| 111 | **Дубль ключа пар-файла: фикс накрыл половину.** D39.82 закрыл строку 53 через `putUniqueDC` в `parseDCCheckers`, но генерик-парсер категорий `parseCategoryRows` (`internal/lang/langpack.go:806-826`, строка `cats[f[0]][f[1]] = val`) по-прежнему МОЛЧА last-wins — а якорь техдолга указывал именно на него. Пар-данные с опечаткой-дублем тихо теряют первую строку | бэкенд | когда-нибудь (малое касание, с любой правкой langpack) | fail-loud + тест | 13-tech-debt-anchors, D39.82, D39.90 |
|
||||
| 118 | **tools/go.mod — РЕШЕНИЕ ПРИНЯТО (D39.97 п.4): строить отдельным малым паком.** `cmd/tmvet`+`internal/archguard` → отдельный модуль (`backend/tools/`); `make battery` гоняет оба модуля; `tool`-директива Go 1.24 НЕ решает (MVS общий). Выигрыш: бамп инструментов физически не двигает x/net/x/text. Sqlite 1.55 остаётся (D39.97 п.4) | бэкенд | скоро (до следующего бампа зависимостей) | малый пак по D39.97 п.4 | D39.96 п.6, D39.97 |
|
||||
| 119 | **x/text-детерминизм: вердикт-несущие вызовы НЕ свёрнуты в версии (находки-5/6 приёмки).** `SanitizerVersion` не сворачивает ничего x/text-ного, а `detectCJKLeak` зависит от `width.Fold` (`sanitizer.go:211,687`) — смена x/text перевернула бы вердикт БЕЗ смены снапшота; `ExportNormalize` меняет экспортные байты вне хешей (`sanitizer.go:709`); `xTextVersion` пинит строку go.mod, НЕ скомпилированные таблицы — тулчейн go1.27 переключит x/text на Unicode 17.0.0 МОЛЧА (`tables17.0.0.go //go:build go1.27`; жилец реестра 108). Делать: явные версии-свёртки + механическую сверку «таблицы↔константа» вместо совпадения | бэкенд | скоро | правка версий-свёрток + тест | D39.96 п.6, отчёт §5 находки-5/6 |
|
||||
| 119 | **x/text-детерминизм: вердикт-несущие вызовы НЕ свёрнуты в версии (находки-5/6 приёмки).** `SanitizerVersion` не сворачивает ничего x/text-ного, а `detectCJKLeak` зависит от `width.Fold` (`sanitizer.go:211,687`) — смена x/text перевернула бы вердикт БЕЗ смены снапшота; `ExportNormalize` меняет экспортные байты вне хешей (`sanitizer.go:709`); `xTextVersion` пинит строку go.mod, НЕ скомпилированные таблицы — тулчейн go1.27 переключит x/text на Unicode 17.0.0 МОЛЧА (`tables17.0.0.go //go:build go1.27`; жилец реестра 108). Делать: явные версии-свёртки + механическую сверку «таблицы↔константа» вместо совпадения ⚠ **дописка 07.09 — stdlib-половина того же класса:** `unicode.Version` вплетён в 5 версионных констант, 4 из них — в НЕрепинуемые поля снапшота (`snapshot.go:428/429/431/447`), пятая через `NormVersion` уезжает в `cutTag` (`manifest.go:264`) ⇒ апгрейд тулчейна = громкий `--resnapshot` всех незакрытых книг. ⚠ Это НАМЕРЕННО (`render.go:53` — «weaving unicode.Version makes it a loud --resnapshot»), и вопрос строки не «дыра», а нужна ли громкость на осях estimator/cheapgate, которые вердикта не двигают (research/33 §7.1) | бэкенд | скоро | правка версий-свёрток + тест | D39.96 п.6, отчёт §5 находки-5/6 |
|
||||
| 120 | ⚠ **ЛИД УКАЗЫВАЕТ НА НЕСУЩЕСТВУЮЩУЮ ФУНКЦИЮ — испр. 05.09:** продового `buildCheckers` нет (`grep -rn 'buildCheckers' backend --include=*.go` → только тест-хелпер), и `lang.Load(` вне тестов не вызывается вовсе. Класс «бейзлайны ключуются по классу, не по паре» может быть жив — но искать его надо не здесь. ⚠ **Где искать (пере-снято 05.09): единственный прод-носитель бейзлайнов сегодня — `backend/internal/config/models.go`, и ключуются они по KIND ПРОВАЙДЕРА, а не по паре;** пара-специфика чекеров живёт данными `internal/lang`. ⇒ строка держится как ревью-вопрос общности («заработает ли пара, которой в репо НЕТ»), а не как известный адрес правки: **прежде чем строить — предъявить дефект на паре, которой нет.** **`buildCheckers` жёстко берёт `lang.Load(root,"zh","ru")`, бейзлайны ключуются по классу, не по паре (§7-8) — приезд ja-ru требует правки Go, против мандата общности §0.1.** Родня строки 115 (явный embed-список целей) — брать одним касанием | бэкенд | скоро | правка Go + тест на паре-которой-нет | D39.96 п.6, отчёт §7-8 |
|
||||
| 121 | **archguard v2 — остаток (б)/(в)/(г)/(д); (0а)/(0б)/(а) ЗАКРЫТЫ дофиксом D39.97.** Полный фикс-лист посадок приёмки D39.96 с file:line — дословно в `architecture/13-tech-debt-anchors.md` §Б-121 | бэкенд | скоро (остаток: (б) тип вместо свитча · (в) build-теги · (г) 4-й анализатор · (д) семь пропусков) | правка анализатора + посадки | D39.96 п.2/п.6, отчёт §7-9/12/13 |
|
||||
| 122 | **Гигиена пака стандартов — 11 микро-пунктов, не-блокеры приёмки (D39.96/97).** Полный список дословно — `architecture/13-tech-debt-anchors.md` §Б-122 | бэкенд | когда-нибудь | мелкие правки | D39.96 п.6, отчёт §7-6/7, §9 хвост |
|
||||
|
|
@ -190,7 +190,7 @@
|
|||
| 221 | **Джойн «предложено × решено × нерешено» живёт ТОЛЬКО в движке.** Читаемый банк несёт итоги без предложений, карта подписи — предложения без решений; семантика «решено ли» (`ownerHandled`) существует в двух файлах движка и больше нигде (греп по трём зонам). Экран подписи при разморозке фронта заставит платформу пере-реализовать движковый закон у себя — дубль, запрещённый п.6 закона шва. **Фикс:** движок публикует нерешённость (секцией банк-экспорта или отдельной проекцией) — но ТОЛЬКО когда экран закажут: рефакторить под несуществующий экран не надо. Сейчас — ноль кода ⚠ **КОНСИЛИУМ 27.08 (оркестратор №19 + автор движковой двери), итог записан, чтобы его не выводили заново.** **(1) Это ОДИН дефект, а не три:** 221 и 224 — ось СОДЕРЖАНИЯ (проекция не несёт предложенное и не несёт джойн), остаток компаньона — ось СВЕЖЕСТИ (дверь пишет источники мгновенно, проекция ждёт границы прогона, которой при стоящем прогоне не наступает). Классический разрыв CQRS. Чинить порознь = три полу-лечения. **(2) Поле `BankTerm.decision` МЕРТВО СТРУКТУРНО** — довод сильнее прежнего «запрет владельца»: decline выражает себя ИСЧЕЗНОВЕНИЕМ строки, а не значением поля (`writeAutoBank` делает `continue` на `ownerHandled`, `mining.go:709+`), и негде показаться ни в одном из трёх окон; для approve поле избыточно — `status: approved` публикуется. Проверено двумя независимыми трассами. ⚠ Вопрос был СНЯТ ещё D39.144 вместе с ложной посылкой «марш к нулю, 17 из 300»; сегодняшняя потребность иная и уже — перезагруженный экран показывает СДЕЛАННЫЕ ПРАВКИ. **(3) Форма-кандидат Д′:** ДВЕ проекции, у каждой РОВНО ОДИН писатель — «решено на границе» пишет прогон рядом с картой, «решено после границы» пишет дверь при записи; экран склеивает по паре (поверхность, `map_id`), счёт приезжает ПОСЧИТАННЫМ. Правило единственного писателя остаётся буквально, поправка онтологии НЕ нужна. Конверт карты из дофикса-2 получает здесь первого потребителя. ⚠ Колонка `undecided` обязана ехать с тем же НЕ-гейтовым контрактом, что `SignatureState`, иначе пер-термная модель вернётся через новую проекцию. **(4) Подпункт «история»:** `glossary_revisions` построен наполовину — читатель вызывается только из тестов, графа `reason` заполняется литералом `seed-replace`, а ревизия пишется лишь для ОСТАВШИХСЯ строк, то есть журнал слеп к отклонениям; владельческий `note` доезжает до вида (`glossary.go:41,161`) и не публикуется ни одной проекцией. ⚠ Journal append-only: не заказать ревизии без исчезновений задним числом уже не выйдет. **Пак не заказан — ждёт слова владельца** | бэкенд | гейчена разморозкой фронта | аддитивное поле проекции | приёмка двери 27.08, D39.158 |
|
||||
| 222 | **ВНУТРИкнижный остаток оси арбитра: второй конфиг ТОЙ ЖЕ книги с другим `project_db` пишет ту же пару файлов решений под ДРУГИМ локом**, мимо флока живого прогона. Достижимо по построению: пути решений считаются от каталога `book.yaml` и `book_id`, лок — от `project_db`. Рукотворная конфигурация оператора (две базы одной книге), лечение трогает ратифицированный п.2 закона (второй арбитр на идентичности файлов решений либо отказ при загрузке). ⚠ Межкнижная версия ЗАКРЫТА снятием объявляемых ключей (D39.158 п.5) | бэкенд | когда-нибудь (непропорционально: правка ратифицированного закона ради операторского футгана) | второй арбитр ЛИБО отказ при загрузке | приёмка двери 27.08, D39.158 |
|
||||
| 223 | **Майнерский хвост за потолком структурно недостижим.** Потолок эмиссии (200) применяется ДО фильтров пригодности, сида и отказов, а детектор кандидатов сида и отказов не видит вовсе — репозиторий пишет это про себя дословно. Замер: 2110 ранжированных → 442 годных во всём алфавите → 117 внутри окна потолка → **325 невидимы постоянно**; отклонение всех 117 не подняло ни одного. ⚠ Решения владельца слотов НЕ освобождают, и это верно СЕГОДНЯ, а не следствие флажка; цитата «пере-предлагается once these are signed or declined» относится только к ОБРАТНОЙ секции. Двигать потолок — трогать фрозен-паритет, отдельное решение. Якорь-пин: `internal/miner/emissioncap_test.go` | бэкенд | когда-нибудь | решение о потолке, не правка | приёмка двери 27.08, D39.158 |
|
||||
| 224 | **Банк-экспорт на стопе ПУСТ** — проекция, наиболее пустая ровно в момент, когда её читает экран подписи. Замерено: стоп с двумя предложенными термами даёт `total=0`, авто-банк на стопе отсутствует, потому что он пишется только в ветке авто-продолжения; при этом комментарий рядом называет стоп «границей, которую читает экран подписи», а платформа читает именно `.bank.json`. Член класса «проекция без контракта потребителя» (`architecture/18-bank-ontology.md`) ⚠ **ФОРМУЛИРОВКА ПРОТУХЛА, испр. оркестратором 05.09 по итогу стратегического веера:** лид говорит «экспорта на стопе нет, пишется только в ветке авто-продолжения» — сегодня `exportBank(ctx, "bank-mining/signature-stop")` НА СТОПЕ ЕСТЬ (`backend/internal/pipeline/mining.go`, греп `signature-stop`). Отсутствует не ВЫЗОВ, а НАПОЛНЕНИЕ: `exportBank` проецирует таблицу глоссария, а майненные строки попадают в неё только через `writeAutoBank`+`seedGlossary`, и оба лежат ВНУТРИ ветки `if !stopping`. ⇒ Экран подписи читает артефакт, гарантированно пустой ровно от тех строк, ради которых открыт. **Кто пойдёт чинить по прежнему тексту — будет искать несуществующий пропущенный вызов.** | бэкенд + платформа | скоро (держит экран подписи вместе с 221) | публиковать предложенное на стопе | приёмка двери 27.08, D39.158 |
|
||||
| 224 | **Банк-экспорт на стопе ПУСТ** — проекция, наиболее пустая ровно в момент, когда её читает экран подписи. Замерено: стоп с двумя предложенными термами даёт `total=0`, авто-банк на стопе отсутствует, потому что он пишется только в ветке авто-продолжения; при этом комментарий рядом называет стоп «границей, которую читает экран подписи», а платформа читает именно `.bank.json`. Член класса «проекция без контракта потребителя» (`architecture/18-bank-ontology.md`) ⚠ **ФОРМУЛИРОВКА ПРОТУХЛА, испр. оркестратором 05.09 по итогу стратегического веера:** лид говорит «экспорта на стопе нет, пишется только в ветке авто-продолжения» — сегодня `exportBank(ctx, "bank-mining/signature-stop")` НА СТОПЕ ЕСТЬ (`backend/internal/pipeline/mining.go`, греп `signature-stop`). Отсутствует не ВЫЗОВ, а НАПОЛНЕНИЕ: `exportBank` проецирует таблицу глоссария, а майненные строки попадают в неё только через `writeAutoBank`+`seedGlossary`, и оба лежат ВНУТРИ ветки `if !stopping`. ⇒ Экран подписи читает артефакт, гарантированно пустой ровно от тех строк, ради которых открыт. **Кто пойдёт чинить по прежнему тексту — будет искать несуществующий пропущенный вызов.** ⚠ **дописка 07.09 — закрывать ВМЕСТЕ с пином ПОРЯДКА, иначе фикс не сторожится ничем:** мутация «`exportBank("bank-mining/signature-stop")` раньше `writeAutoBank`/`seedGlossary`» и мутация «`exportBank("run-start/seeded")` раньше `seedGlossary`» (`bookrun.go:174/180`) обязаны краснеть; сегодня в каталоге про порядок 0 записей у `bookrun.go` и 0 из 8 у `mining.go`. Прецедент — строка **257** → пины `volumeslot_test.go`; подмножество каталога в `make battery` реально (`tmmutate -id`, `cmd/tmmutate/main.go:88`), пакет `internal/pipeline` проходит за 15 с (замер 07.09: `go test ./internal/pipeline/ -count=1` → `ok 15.053s`) (research/33 Д9) | бэкенд + платформа | скоро (держит экран подписи вместе с 221) | публиковать предложенное на стопе | приёмка двери 27.08, D39.158 |
|
||||
| 225 | **Гейт «строка `open`, а лекарство уже в дереве».** При лендинге пересекать ПОЛНЫЕ пути застейдженных файлов с якорями открытых строк регистра и бэклога; совпадение — вопрос лендеру, а не находка следующего пака. Замерено прежде решения: по именам файлов 22 совпадения, почти все ложные; по полным путям 2, оба настоящие, и один из них (`PD-157`) убил мой же лендинг `d1eb8a9`. Норма-половина уже стоит в `platform/docs/ENGINEERING_STANDARDS.md` §3 п.8; здесь — машинная половина, режимом `counts.py` | оркестратор | скоро (окупился до постройки) | режим `counts.py`, берущий список путей и печатающий открытые строки, чьи якоря в них целят | приёмка пака P8-REVIEW 27.08, D39.159 п.7 |
|
||||
| 226 | **История ПРЕДЪЯВЛЕННОГО не ведётся — «почему меня не остановило на этом термине» ответить нечем.** Карта и человеческая таблица стопа перезаписываются каждым прогоном, память флажка — плоское множество поверхностей без `map_id` и без времени. Это прямая расплата за то, что стоп срабатывает ОДИН раз (кластерная память, названный остаток дофикса-2), и единственная возможная диагностика спора. Кандидат в пак решённости, не заказ. ⚠ Шестое, названное консилиумом и оставленное владельцу: авторство и время решения — сегодня цена нуля (владелец один), станет нужным при мультипользовательской платформе, и тогда его захотят ЗАДНИМ ЧИСЛОМ | бэкенд | скоро (диагностики нет вовсе) | движок метит предъявленное `map_id` и временем; оверлей отвечает «что предъявлялось на прошлом стопе» | консилиум по читающей стороне банка 27.08 |
|
||||
| 250 | **Заголовок глоссария на проводе ОПИСЫВАЕТ маркер, которого после пака больше нет — живая строка с висячей ссылкой.** Строка данных `ru glossary_header` (`backend/internal/lang/data/injection.txt`) дословно объясняет модели: «строки с пометкой ⟨проверить⟩ — неподтверждённые кандидаты», а пункт 3 вайр-батча снимает маркер с провода по `D39.104` п.2 ⇒ на проводе не останется НИ ОДНОЙ помеченной строки, а заголовок продолжит объяснять пометку. ⚠ Это НЕ мёртвая строка данных (те — `editor_unverified_header` и `unverified_marker`, они просто перестают читаться), это ЖИВАЯ строка, которую читает модель. По `D39.104` п.1 клаузула становится ВАКУУМНОЙ, а не ложной, вред не измерен — поэтому не блокер. ⛔ **Чинится ТОЛЬКО правкой `injection.txt`, а она двигает `EmbeddedVersion` → `cutTag` → ключ манифеста → снос `unit_resolutions` книги (строка 198).** Носитель — ближайшее ОКНО правки эмбед-данных: строка **160** идёт своим паком и всё равно бампает форму манифеста. Найдено бэкенд-сессией вайр-батча 04.09 — она правильно НЕ тронула и принесла предмет | бэкенд | скоро (в окне строки 160) | правка `injection.txt` в окне 160 | пинг бэкенд-сессии 04.09 |
|
||||
|
|
@ -284,3 +284,11 @@
|
|||
| 341 | **ПРЕДЛОЖЕНИЕ ДВИЖКА ПРОВЕСТИ `--ceiling-usd` В `status` ВИСИТ БЕЗ ДИСПОЗИЦИИ С 09.08** (пинг №15). `backend/internal/pipeline/status.go` отвечает «a read path never carries a run-scoped override» — то есть у движка есть позиция, а решения нет ни за, ни против. ⇒ принять или отклонить, но не оставлять третий месяц | бэкенд | когда-нибудь | диспозиция оркестратора одной строкой | вопросы платформы 07.09 |
|
||||
| 342 | **ВОССТАНОВЛЕНИЕ ИЗ БЭКАПА НЕ ПРЕДЪЯВЛЕНО НА МАСШТАБЕ.** Предъявлено на малых данных; не проверено на книге в сотни мегабайт, при заполненном диске и при чужих открытых соединениях. `PD-462` покрывает СОСЕДНИЙ класс, этот — нет. ⚠ Бэкап, не проверенный на условиях, в которых он понадобится, — это не бэкап, а намерение | платформа | скоро | восстановление предъявлено на большой книге, полном диске и чужих соединениях | вопросы платформы 07.09 |
|
||||
| 343 | **`counts.py` ДЕРЖИТ РЕГИСТР ОДНИМ ПУТ<D0A3>ём И НЕ ГЛОБИТ СЛАЙСЫ — предусловие нарезки `DEFECT_REGISTER.md`.** Вынос без этого молча уронит счёт открытых рядов, а гейт чисел покажет зелень: он читает ровно один файл. ⚠ План нарезки живёт в `docs/DOC_CLEANUP_PLAN.md` (Б14в) | доки | скоро | прибор читает регистр и его слайсы, счёт не меняется при выносе | вопросы платформы 07.09 |
|
||||
| **— ТЕХДОЛГ БЭКЕНДА: разбор research/33 (D39.224) —** | | | | | |
|
||||
| 344 | ⛔ **ШОВ «ЗАГОЛОВОК ГЛАВЫ» НЕ УТВЕРЖДАЕТСЯ НИЧЕМ: ТРИ МУТАНТА ПЕРЕЖИВАЮТ ПОЛНУЮ БАТАРЕЮ, И ПОД ОДНИМ ГОТОВАЯ КНИГА ТЕРЯЕТ ВСЕ НАЗВАНИЯ ГЛАВ.** `chunk/chunker.go:145` кладёт заголовок в `chapterChunks[0]`, `pipeline/manifest.go:664` восстанавливает его по `ChunkIdx == 0` на read-пути (так читается артефакт `tmctl export`, который берёт платформа), `pipeline/export.go:176/342/343` берёт `u.Members[0].Heading`; боевой код КОРРЕКТЕН — не защищено ровно РАСПОЛОЖЕНИЕ заголовка. ⚠ Мутанты живут в ДВУХ файлах, не в одном: M1 (`manifest.go:664` → `if i == 0`, заголовок на первый чанк каждого ЮНИТА) и M2 (`→ if false`) — в манифесте, M5 (заголовок на последний чанк) — в `chunker.go:145`. Замер 07.09: M2 и M5 посажены на копии HEAD `e989068` и прогнаны полной батареей — каждый **18 ok / 0 FAIL, exit 0**; M1 — ⟲ research/33. Под M2 `bookbuild.go:526-528` подставляет номер при пустом `Heading`, и готовая книга выходит с «1», «2» вместо «Глава 1», «Глава 2». Причина — вырожденные фикстуры двух тестов, чьи имена обещают эту гарантию: `chunker_heading_test.go:101` даёт короткие главы и утверждает только `chunks[0]`; `contractblockers_test.go:294` — ja→ru книга с русским текстом через `\f`, правило заголовка не матчится ⇒ `Heading` пуст с обеих сторон и сравнение вырождается в `"" == ""`. В каталоге мутаций `internal/chunk/chunker.go` — **0** записей из 211 (контроль: `bankdecisions.go` 20). Сосед по шву — строка **201**; ⚠ сосед по СИМПТОМУ — строка **160**: вычитка боевого перевода нашла потерянный заголовок у 6 глав из 17 (`D39.190` п.2), причина там другая, но читателю видно то же. Лечение $0 и снапшот-нейтрально, боевой код не трогается: обеим фикстурам главу, которая реально режется, и правило заголовка zh-ru · утверждение «не-первый чанк главы несёт пустой `Heading`» · M1/M2/M5 в `mutations.json` | бэкенд | скоро (шаг 0 research/33 — параллельно дизайн-паку 161, ДО пака стройки) | невырожденные фикстуры + утверждение о не-первом чанке + три записи каталога | research/33 Д10/Д11, D39.208 п.5 |
|
||||
| 345 | ⛔ **НОВАЯ ПАРА МОЖЕТ ОТВЕЧАТЬ СВОИМИ СЛОВАМИ КЛАССОВ, И ВСЯ БАТАРЕЯ ЗЕЛЁНАЯ — словари классификатора закрыты в Go и прозой промта.** `terminology/classify.go:18` `Types`, `:26` `CandidateTypes`, `:50` `Genders`; третья копия — `pipeline/banknote.go:80` `bankTypeOK` (не упомянут ни одним тестом); те же слова прозой в `prompts/zh-ru/classifier.md`. Леджер меток промтов смотрит на одну пару (`promptlabel_test.go:53` `const pair = "zh-ru"`), а off-vocabulary ответ модели — только `Log.WarnContext` (`terminologist.go:603`), отказа нет. ⟲ research/33: подложенная `prompts/ja-ru/classifier.md` с локализованными словами классов (人名 · 地名 · 称号 · 用語) проходит батарею БЕЗ единого шага автора; цена — молчаливая потеря качества на второй паре (тип неверен 12–22 %, `name/place` форсирует транслитерацию — D39.65). Бьёт прямо по цели №2: дежурный ревью-вопрос «заработает ли пара без правки Go» получает ответ «да, и молча неверно». Лечение $0: линт КАНОНИЧЕСКОЙ формы промта (комментарии снять — наивная версия ложно-зелёная, слова есть в HTML-шапке) в существующем `internal/config/prompt_lint_test.go` (89 строк; сам объявляет целью «ja-ru or en-ru pack authored by copying the zh-ru one») + свести `bankTypeOK` к `terminology.CandidateTypes` (одна строка импорта, уже экспортирован). ⛔ Обратная дорога (словарь в данные) двигает `prompt_sha256`/`RequestHash`/`classifierVersion` и ЗАПРЕЩЕНА — D39.194 п.9 и **D39.195 п.5** (⚠ испр. 07.09: research/33 и первая редакция этой строки ссылались на D39.199 п.5 — там закрытие строки 264, не запрет) | бэкенд | скоро (шаг 0 research/33, $0) | линт в `prompt_lint_test.go` + одна строка импорта | research/33 Д1 |
|
||||
| 346 | ⛔ **ПРАВИЛО ЗАГОЛОВКА РАЗЪЕХАЛОСЬ ПО ТРЁМ ПРЕДИКАТАМ, И «第零章» ЛОМАЕТ ПРОЛОГ — две половины с РАЗНОЙ ценой.** Страж длины живёт только в ингесте (`chunk/ingest.go:307` `chapterHeaderMaxRunes = 60`, применён `:323`; в `chunker.go` `RuneCountInString` — 0 хитов), осмысленность номера — только в чанкере (`chunk/chunker.go:316` `if !any || v <= 0`). Воспроизведено исполнением 07.09 (выброшенная проба на копии дерева): `第零章:序幕` ингест режет главой, а чанкер заголовок НЕ снимает — `heading=""`, сырой CJK-маркер уезжает модели; `parseSectionNumeral` на `零`/`0`/`〇` даёт `0,false` (контроль: `一`=1, `十二`=12); номера расходятся (`第一章` = `Chapter 2` при «Глава 1»); 84-рунный заголовок: ингест `false`, чанкер `ok=true` (контроль на 12 рунах сходится). Перекрёстного теста нет ни в одном из 97 тестов `internal/chunk`. **(а) $0 СЕЙЧАС — пин ИЗВЕСТНОГО расхождения, а не паритет:** красный тест в `main` не ложится (`Makefile:58` `battery: build vet fmt lint test`), скип — класс D39.208; поэтому тест утверждает, что на `第零章` и на 61–84-рунной строке ингест и чанкер СЕГОДНЯ расходятся, назван этой строкой и краснеет ровно тогда, когда приземлится фикс (б), заставляя фиксера его перевернуть. Дизайн-пак 161 §4.5 паритет-тест ОПИСЫВАЕТ, пишет его пак стройки — пин (а) этому не мешает. **(б) В ОКНО ПЕРЕНАРЕЗКИ:** сам фикс меняет ТЕКСТ чанка ⇒ бампает `chunkerVersion` ⇒ снапшот обеих волн (`render.go:55-58` — «a deliberate re-translation»); отдельным актом он платит ту самую перепокупку, которую отменяет. ⚠ Ось «обязательность юнита» — НЕ трогать: носитель строка **303** (⚠ испр. 07.09: research/33 приписывал её `D39.207`, в теле ноты этого нет — греп по предмету 0 при 23 строках тела) | бэкенд | скоро для (а); (б) — в окне перекроя (шаг 3) | (а) пин расхождения · (б) сведение двух предикатов к ингестовским стражам внутри пака перекроя | research/33 Д3, research/27 §6 |
|
||||
| 347 | **ПАР-ДАННЫЕ НЕЛЬЗЯ ЗАВЕЗТИ ПО ЧАСТЯМ: манифест требует ≥1 канал, и транслитерационный канал зашит в китайскую форму.** `lang/langpack.go:632` — «manifest declares no channel — omit the file to ship all channels, or list at least one»; каналов два и они закрыты в Go (`source-morphology`, `transliteration`, `:108-114`), а `validate()` при `transliteration` требует ПОИМЁННО пиньинь-категории (`:521-527`); морфологический канал просит общие таблицы (`:507-516`) и в китайскую форму не зашит. Отказ жёсткий: при `gates.terminology.enabled` и `pack == nil` прогон отказывает `RefusalBadConfig` (`pipeline/runner.go:349`), а в боевом `pipeline-c1.yaml:151` гейт включён ⇒ вторая пара выбирает между фиктивными данными китайской формы и прогоном БЕЗ банка терминов (продуктовая цель №1). ⚠ **Триггер — первая новая ИСХОДНАЯ пара, и он РАНЬШЕ строки 115:** манифест лежит в `<root>/<src>/` и хешируется языком-ИСТОЧНИКОМ (`langpack.go:252`), а 115 — про новую ЦЕЛЬ; ближайшая исходная пара в трекере — ja→ru (строка **81**), цель у неё ru. ⚠ **Пять строк снимают отказ, но банка на не-Han источнике НЕ дают** — детектора нет (строка **35**: en-детектор не существует, ja с zh-таблицами активно неверен); заказывать вместе, иначе строка обещает больше, чем покупает. Сегодня не оплачено ни разу: 0 `manifest.txt` в `configs/`, каталог пары один. ⚠ D39.64 П4 ратифицировала ОБРАТНОЕ намерение («источник без пиньинь-морфологии грузится без Palladius-файлов») — строка `list at least one` не дошла шаг до собственной цели | бэкенд | когда-нибудь (вход пака второй пары; триггер общий со строками 81 и 35) | разрешение нулевого числа каналов + решение по форме каналов | research/33 Д7, D39.64 П4 |
|
||||
| 348 | ⛔ **ШАПКИ АРМ-КОНФИГОВ ОБЪЯВЛЯЮТ «ЕДИНСТВЕННОЕ ИЗМЕНЕНИЕ», А АРМ РАСХОДИТСЯ С БОЕВЫМ НА ДВА ДЕСЯТКА КЛЮЧЕЙ — включая снятый банк терминов; лжёт и сам гейт.** Замер 07.09, две независимые методики: голый дифф не-комментарных строк против `configs/pipeline-c1.yaml` — glm **26** / mistral **28** / deepseek-pro **23**; тот же дифф со снятыми пустыми и хвостовыми комментариями — **18/18/15** (КОНТРОЛЬ обеих: c1 против себя = 0). Популяции разные, вывод один: во всех трёх армах `banknote:` 0, `terminology:` 0, `contrast_path` 0, `classify_types` 0, `target_script` 0, `prompt_override` 0 — при 1/1/3/1/1/3 в c1. ⚠ **Носителей лжи ТРИ, и они разной силы.** (1) Шапки армов («копия боевого C1 с ЕДИНСТВЕННЫМ изменением») — ложны буквально. (2) `internal/config/echo_mine_test.go:227/234` `TestSwapArmConfigs` обещает в доке «swaps ONLY the editor model … only the editor differs», а утверждает лишь модель редактора, `few_shot` и `rate_limit` — гейт, который назвал себя сторожем этого свойства и им не является (класс D39.208 п.5). (3) `docs/STACK.md:12` («резерв; флип = один арм-конфиг») буквально ВЕРНА — флип и правда подмена одного файла — и подлежит не правке, а дописке о цене подмены. Дрейф датирован: `b8154cd` (04.09) дал c1 +64 строки банкового контура, а всем трём армам — только `prompt_version`. ⚠ **Риск ЛАТЕНТНЫЙ, а не текущий:** деплой прибит к боевому (`platform/deploy/README.md:216`), кодового пути выбора арма нет, армы читают только тесты, платные прогоны идут по книго-локальным конфигам вне git. Цена наступает при ФЛИПЕ деплоя на арм, и она денежная: платформа берёт за банк плоские $2.00 по c1 (`platform/internal/ingest/manifest.go`), а движок без `contrast_path` возвращается до построения кандидатов (строка **251**) ⇒ пользователю выставят $2 за банк, которого никто не майнил. ⚠ **Наследования конфигов НЕТ — испр. 07.09:** research/33 §7.13 и первая редакция этой строки называли его ратифицированным `D39.23` п.(г); в теле ноты (г) — слой пар-КАЛИБРОВОК (`configs/pairs/<пара>`, fertility/len_ratio_bounds, промпт-резолв конвенцией), а в `internal/config/pipeline.go` `extends|inherit|base_config` — 2 хита, оба про ручку, которая «deliberately NOT inherited». Лечение — не «подтянуть наследованием», а пере-снять три арма копией c1 со сменённым редактором и заставить `TestSwapArmConfigs` утверждать «арм == c1 вне блока редактора» | доки + бэкенд | скоро (до любого флипа деплоя на арм) | пере-снятые армы + гейт равенства + дописка в STACK | research/33 §7.13, строка 251 |
|
||||
| 349 | **ОСТАТКИ ОПРОВЕРГАТЕЛЕЙ research/33 — мелочи одной строкой, носителей не было.** (а) `pipeline/snapshotdiff.go:157-159` при движении одного `memory_version` дописывает оператору причину, которой НЕ проверял («the auto-bank grew between purchases»). (б) `pipeline/snapshot.go:206-218` — протухшие клаузы про «последовательный драйвер», драйвер один (`bookrun.go:242`). (в) `backend/README.md` называет `export.go`/`quality.go`/`status.go` read-only проекциями, а `status.go:1174` внутри `Runner.Redrive` (`:1047`) зовёт `Store.ResetChunkStages` (`store/chunkstatus.go:161`) — единственный деструктивный путь движка (сверено оркестратором 07.09); вторая половина находки — «`status_test.go:376` обещает замок, который в одиночку не держит» — со слов агента research/33, не пере-проверена. (г) `tracedCtx()` во флаг-фикстуре. ⚠ Заявленный мутационный пробел по `CacheWritePerM` СУЖЕН: ненулевая фикстура уже есть на уровне юнита (`ledger/pricing_test.go:20` `CacheWritePerM: 2.5`), пробел — если он есть — уровня пайплайна, где 25 YAML-фикстур `internal/pipeline/*_test.go` пишут явный 0, а ненулевых там 0 (счёт 07.09). Всё снапшот-нейтрально, берётся попутно | бэкенд | когда-нибудь (попутно с касанием этих файлов) | правки на месте | research/33 §7.7/7.11/7.12/7.14/7.17 |
|
||||
| 350 | **РЕФАКТОРИНГ ОБЛЕГЧЕНИЯ ВЕДЕНИЯ (санкция владельца 07.09) — снапшот-нейтрально, и заказ здесь «решить», а не «удалить».** Вызовов вне определения ноль у шести функций (греп 07.09; КОНТРОЛЬ — `SplitChunks` 34 живых вызова): `obs.SafeGo`, `text.TokenizeCyrillic`, `CheapGateResult.UnitScaleHard`/`UnitScaleSoft`, `Bank.Voices()`, `Bank.Pairs()`. ⚠ **Четыре из шести стоят НАМЕРЕННО, и слепое удаление снимет намеренное:** `UnitScaleHard/Soft` сами называют, кого ждут — `checks/cheapgates.go:155-156` «for the report and a future hard gate», то есть строку **12**; `TokenizeCyrillic` — образец паттерна value-default, на который ссылаются `checks/sanitizer.go:21` и `:197`; `SafeGo` — намеренный контраст к `obs/panic.go`, названный решением `pipeline/waverun.go:405` («NOT obs.SafeGo»), и его удаление повесит два комментария в воздухе — класс строки **299**; `Voices`/`Pairs` (`membank/memory.go:371-376` «frozen for the job») ждут потребителя, которого держит строка **13б**. ⇒ по каждой ОДИН исход с объявлением в отчёте: удалить ЛИБО назвать причину жизни в комментарии. Плюс «последняя стадия» дважды одинаковым инлайном (`pipeline/export.go` и `quality.go`) при готовом `finalStageWave()` (`snapshot.go:247`, 20 живых вызовов) и словарь родов в четырёх носителях (`membank/memory.go`, `membank/memseed.go`, `terminology/classify.go:50`, промт), где текст собственной ошибки врёт о принимаемом множестве. ⛔ Границы санкции: НЕ дробить `internal/pipeline` и НЕ переписывать `Runner` (`12-go-style-notes.md` §1, D39.23), ничего, что двигает снапшот / хеш запроса / ключ манифеста. ⚠ Адреса сняты research/33 на `e69902a`, а лендинг 07.09 тронул `memseed.go` и `export.go` — пере-снимать командой, не по тексту | бэкенд | когда-нибудь | попутный проход с батареей + объявление исхода по каждой функции | research/33 §7.1, санкция владельца 07.09 |
|
||||
|
|
|
|||
|
|
@ -87,12 +87,30 @@
|
|||
не через `buildSnapshotID`, довод — `repinnable()` истинен только на bank-only move, а фолд протухает все
|
||||
`chunk_status`. Приор, а не запрет: опровергается аргументом.
|
||||
|
||||
⛔ **Сюда же — МЕСТО СТРОКИ 160, и ответ обязателен** (`D39.224` п.6). `D39.190` п.2 поставила Этап 0 СВОИМ паком после двери выдачи, СТОП-МИРОМ: у бампа `manifestVersion` безопасного порядка деплоя нет ни в одну сторону (`PD-436`), гейт интейка платформы — строгое равенство одной константе. Перекрой пере-минтит КЛЮЧИ манифеста, но двигать его ФОРМУ не обязан ⇒ назови, ложится ли Этап 0 в тот же стоп-мир, что перекрой. Два стоп-мира вместо одного — цена, которую никто не назначал, и умолчать её нельзя.
|
||||
|
||||
### 4.4а Контент-адресуемый resume (долг `D15.2`) — **делай РОВНО так**
|
||||
|
||||
Это механизм, на котором стоит денежное обещание §1: деньги и память ключуются хешами СЕГМЕНТОВ, а глава —
|
||||
их группировка (`research/27` §5 п.8). Пере-нарезка тогда есть ПЕРЕГРУППИРОВКА уже оплаченного, а не его
|
||||
потеря. Без этого пункта §4.1 решает адресацию, но не отвечает, почему перекрой не сжигает купленное.
|
||||
|
||||
### 4.4в Предикат осей — **делай РОВНО так** (критерий ратифицирован `D39.224` п.8)
|
||||
|
||||
Сегодня `classifySnapshotMove` знает ОДНО re-pinnable поле (`repin.go:54`), всё прочее — `moveOther`. Дизайн
|
||||
обязан выдать явную карту осей, и она проверяемая, а не декларативная: **(1)** таблица относит КАЖДЫЙ
|
||||
JSON-ключ снапшота (`snapshot.go:342-425` — на 07.09 их 22) ровно к одной оси — провод · вердикт · банк · крой; **(2)**
|
||||
рефлексивный тест по образцу `TestEveryCutInputMovesTheTag` (`cuttag_test.go:26`) краснеет на ключе БЕЗ оси,
|
||||
чтобы ни один не попадал в `moveOther` умолчанием; **(3)** резюм-тест: сдвинут ТОЛЬКО вердикт-ключ ⇒ ноль
|
||||
платных вызовов, вердикт пере-вынесен из текста чекпойнта (сегодня `resume.go:24-26` отдаёт сохранённый
|
||||
слепо); **(4)** `TestRepinRefusesAnyMoveThatIsNotBankOnly` (`miningstop_join_test.go:1686`) пере-скоупится
|
||||
ЗАКАЗОМ пака и объявляется в отчёте (`D39.183`); **(5)** `projectRebill` показывает контентную и позиционную
|
||||
оси (`rebill.go:33-36` сам называет их непроецируемыми). ⚠ **Что этот предикат НЕ покупает:** wire-правка
|
||||
меняет рендер провода ⇒ `ContentHash` другой ⇒ модель придётся вызвать при любой карте осей
|
||||
(`stagerun.go:91-92`). Норма «копить одним касанием» падает только для ВЕРДИКТ-оси — так и напиши, иначе
|
||||
дизайн пообещает больше, чем механизм даёт. Мерило: бамп `CheapGateVersion` на продолжаемой книге ложится с
|
||||
нулём платных вызовов и без `--resnapshot`.
|
||||
|
||||
### 4.4б IR, формато-адаптеры и индуктор — **реши сам, аргументируй ГЛУБИНУ**
|
||||
|
||||
Строка 161 называет IR + адаптеры (EPUB `nav`/NCX построен, **FB2 нет вовсе**) + индуктор с валидаторами и
|
||||
|
|
@ -129,7 +147,7 @@
|
|||
|
||||
⛔ **Конфликт, который ты встретишь на первом часу, и его диспозиция.** `research/33` §5 «Шаг 0 — ДО дизайна»
|
||||
заказывает пять $0-правок кода (включая «паритет-тест пишется сейчас»). **В этом паке они НЕ делаются:**
|
||||
§2 запрещает код. Ты их НАЗЫВАЕШЬ как предусловия пака стройки; если какая-то нужна, чтобы ответить на
|
||||
§2 запрещает код, и они уже заказаны ОТДЕЛЬНО — строки **344** · **345** · **346**(а) · **349** и дописка **224**, порядок ратифицирован `D39.224` п.3: шаг 0 идёт СВОИМ паком ПАРАЛЛЕЛЬНО тебе и обязан лечь до пака СТРОЙКИ, не до тебя. Ты их НАЗЫВАЕШЬ как предусловия пака стройки; если какая-то нужна, чтобы ответить на
|
||||
вопрос дизайна, — ставь выброшенную пробу (§5 п.3), в дерево она не попадает.
|
||||
|
||||
## 5. Мандат самопроверки ИСПОЛНЕНИЕМ — «перечитал сам» не считается
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Журнал прогресса
|
||||
|
||||
> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-09-07, голова D39.223 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №23** (единственный носитель — здесь; роль передана 06.09, №22 закрыт нотой передачи D39.217; ⚠ испр. 06.09: коммит передачи `c992ee5` бампнул голову и НЕ тронул номер — гейта на номер очереди нет вовсе, `counts.py` сверяет только голову, поэтому носитель разошёлся молча). ⚠ **ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ПЕРВЫМ:** (0а) **ревизия документации на ПРОТУХШЕЕ** — по всем зонам, не только тронутым; (0б) **планы доработок в БЭКЕНД и ПЛАТФОРМУ** по остатку бэклога и регистра; (0в) **вынос неактуального в АРХИВ** (`docs/archive/`, `platform/docs/archive/`) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): **90** живых дока в `docs/` (пере-счёт 04.09: `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`), 8 в `platform/docs`, 9 в `backend/docs` — ⚠ из 94 ВРЕМЕННЫЙ остался ОДИН (`DOC_CLEANUP_PLAN`, живой до закрытия батчей Б14/Б15/Б17); два прежних временных уехали в `archive/reports/` 02.09; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 112 (major 3), всего рядов 465 (пере-счёт `python3 docs/scripts/counts.py`; с 04.09 оба числа под гардом `--check`, прежние 95/3 разошлись молча) ⚠ (ревизией 02.09 ряды **154** и **157** переведены из «скоро» в «когда-нибудь»: их гейтом стоял первый холодный прогон, он ОТРАБОТАЛ 31.08 и оба предусловия оказались другими — разбор в самих ячейках, ни одна НЕ закрыта). ⚠ Числа доков `counts.py` НЕ сторожит — при переносе файлов пере-считывать руками командой `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`. ⚠ И предупреждение о МЕТОДЕ, купленное сменой №21: «выглядит протухшим» ≠ «протухло». Три факта оркестратора опровергнуты ЗАМЕРОМ сессий, а якоря `15-money-path.md` в девяти случаях из двенадцати РОДИЛИСЬ верными и сгнили дрейфом — то есть ревизия обязана быть исполнением, а не чтением. ⚠ **ОЧЕРЕДЬ, унаследованная от №21** (три лендинга 31.08 — секция «СОСТОЯНИЕ ПАКОВ» ниже): **(1) ~~РАЗРЫВ ЦИКЛА~~ ЗАМКНУТ ЖИВЬЁМ 04.09** — пользователь получил EPUB настоящего ПЛАТНОГО перевода ЧЕРЕЗ API, `epubcheck` 5.3.0 на СКАЧАННОМ файле 0/0/0/0 (книга `bk_SS5VES2JELESJSTR`, потрачено $0.278319 из гранта $0.60 при потолке пака $1.5, санкция D39.189). Дверь выдачи построена и проверена исполнением: `202`+`Location`, поллинг с `Retry-After`, Range 206 · второй клиент 200 · аноним 401 · чужая книга 404, TTL с GC, идемпотентность третьего создающего вызова. Все ТРИ сценария строки 216 предъявлены живьём (подпись банка · halt на потолке с exit 4 · `409 run_not_resumable/ceiling_reached` и лечение новым прогоном).
|
||||
> ⛔ **ЧЕТЫРЕ ПОТОКА РАБОТЫ — состояние на 07.09, утро (пере-снято лендингами смены №23).**
|
||||
> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-09-07, голова D39.224 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №23** (единственный носитель — здесь; роль передана 06.09, №22 закрыт нотой передачи D39.217; ⚠ испр. 06.09: коммит передачи `c992ee5` бампнул голову и НЕ тронул номер — гейта на номер очереди нет вовсе, `counts.py` сверяет только голову, поэтому носитель разошёлся молча). ⚠ **ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ПЕРВЫМ:** (0а) **ревизия документации на ПРОТУХШЕЕ** — по всем зонам, не только тронутым; (0б) **планы доработок в БЭКЕНД и ПЛАТФОРМУ** по остатку бэклога и регистра; (0в) **вынос неактуального в АРХИВ** (`docs/archive/`, `platform/docs/archive/`) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): **90** живых дока в `docs/` (пере-счёт 04.09: `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`), 8 в `platform/docs`, 9 в `backend/docs` — ⚠ из 94 ВРЕМЕННЫЙ остался ОДИН (`DOC_CLEANUP_PLAN`, живой до закрытия батчей Б14/Б15/Б17); два прежних временных уехали в `archive/reports/` 02.09; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 112 (major 3), всего рядов 465 (пере-счёт `python3 docs/scripts/counts.py`; с 04.09 оба числа под гардом `--check`, прежние 95/3 разошлись молча) ⚠ (ревизией 02.09 ряды **154** и **157** переведены из «скоро» в «когда-нибудь»: их гейтом стоял первый холодный прогон, он ОТРАБОТАЛ 31.08 и оба предусловия оказались другими — разбор в самих ячейках, ни одна НЕ закрыта). ⚠ Числа доков `counts.py` НЕ сторожит — при переносе файлов пере-считывать руками командой `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`. ⚠ И предупреждение о МЕТОДЕ, купленное сменой №21: «выглядит протухшим» ≠ «протухло». Три факта оркестратора опровергнуты ЗАМЕРОМ сессий, а якоря `15-money-path.md` в девяти случаях из двенадцати РОДИЛИСЬ верными и сгнили дрейфом — то есть ревизия обязана быть исполнением, а не чтением. ⚠ **ОЧЕРЕДЬ, унаследованная от №21** (три лендинга 31.08 — секция «СОСТОЯНИЕ ПАКОВ» ниже): **(1) ~~РАЗРЫВ ЦИКЛА~~ ЗАМКНУТ ЖИВЬЁМ 04.09** — пользователь получил EPUB настоящего ПЛАТНОГО перевода ЧЕРЕЗ API, `epubcheck` 5.3.0 на СКАЧАННОМ файле 0/0/0/0 (книга `bk_SS5VES2JELESJSTR`, потрачено $0.278319 из гранта $0.60 при потолке пака $1.5, санкция D39.189). Дверь выдачи построена и проверена исполнением: `202`+`Location`, поллинг с `Retry-After`, Range 206 · второй клиент 200 · аноним 401 · чужая книга 404, TTL с GC, идемпотентность третьего создающего вызова. Все ТРИ сценария строки 216 предъявлены живьём (подпись банка · halt на потолке с exit 4 · `409 run_not_resumable/ceiling_reached` и лечение новым прогоном).
|
||||
> ⛔ **ПЯТЬ ПОТОКОВ РАБОТЫ — состояние на 07.09 (пере-снято лендингами смены №23).**
|
||||
> **(1) ПОЛИГОН — «ремонт прибора»** (`docs/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md`, строки 319 · 300 · 265 · 143):
|
||||
> ⚠ **ЕДИНСТВЕННЫЙ ПОТОК, НЕ СДВИНУВШИЙСЯ ЗА СМЕНУ — сессия по промту так и не стартовала.** Блокирующая линза
|
||||
> слепого чтения меряет верность ЧЕРНОВИКУ, а судимой руке предписано отходить от него по исходнику (`D39.215` п.3)
|
||||
|
|
@ -15,6 +15,12 @@
|
|||
> инвариант бюджета заландён осознанно (окно лжи 8 секунд при дефолте в 16 минутах, ломается идемпотентность).
|
||||
> **(4) ДИЗАЙН-ПАК 161 — ✅ НАПИСАН 07.09** (`docs/CHAPTER_STRUCTURE_DESIGN_SESSION_PROMPT.md`, `7f84c8d`), прошёл оба
|
||||
> рубежа. ⚠ **НЕ ВЫДАН: новый пак идёт НОВОЙ сессии, обе ночные отработали** — запуск за владельцем.
|
||||
> **(5) ТЕХДОЛГ БЭКЕНДА — разбор `research/33` в трекер: ✅ ЗАЛЕНДЕН 07.09, акт `D39.224`.** Заведены строки
|
||||
> **344–350**, дописки в 86/114/119/182/224; «переписать» не получил ни один из одиннадцати долгов. Ратифицированы
|
||||
> ПОРЯДОК (шаг 0 параллельно дизайну 161 → шаги 2+3 ОДНИМ окном перенарезки, wire-очередь **182** ложится в него
|
||||
> же → шаг 4 аддитивно) и ФОРМА запретов (жёсткие — только под ратифицированной базой, прочее — условия с
|
||||
> механизмом, чтобы не спорить с дизайн-паком). ⚠ **Пак шага 0 ещё НЕ НАПИСАН** — это $0 и снапшот-нейтрально
|
||||
> (строки 344 · 345 · 346(а) · 349, плюс пины порядка из дописки 224); он и есть следующий ход по этому потоку.
|
||||
> ⛔ **ЧТО ЖДЁТ СЛОВА ВЛАДЕЛЬЦА, поимённо:** строка **340** — сужение входа действует только на синхронной ветви,
|
||||
> при деплойном классе книга одним полотном попадает в библиотеку МОЛЧА, и закрыть нечем без пятой причины отказа
|
||||
> (`source_unreadable` терминален и УДАЛЯЕТ исходник) · строка **326** — критерия впуска в дереве нет, консьерж
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
- Топикальные входы (D39.126; НЕ источники истины, при конфликте побеждает D-лог): [15-money-path.md](architecture/15-money-path.md) — деньги от гранта до settle одним маршрутом · [16-events-emitter.md](architecture/16-events-emitter.md) — сборка-норматив эмиттера шва — обязательное пре-чтение перед кодом эмиттера · **[17-seam-inbound-law.md](architecture/17-seam-inbound-law.md) — закон ВХОДНОЙ двери шва движок↔платформа — РАТИФИЦИРОВАН D39.156: семь пунктов дисциплины, двери встают паками без нового решения владельца** · **[18-bank-ontology.md](architecture/18-bank-ontology.md) — онтология банка памяти (РАТИФИЦИРОВАНА D39.158): три роли носителей, единственные писатели, дисциплина проекции — обязательное пре-чтение перед кодом, трогающим банк или его артефакты** · [STACK.md](STACK.md) — карта «роль → модель → конфиг → квирки».
|
||||
- Исторические, читать через ⚠-баннеры: [01-decisions.md](architecture/01-decisions.md) (Р1–Р10) · [02-mvp-plan.md](architecture/02-mvp-plan.md) · [03-implementation-notes.md](architecture/03-implementation-notes.md) · [04-unhappy-paths.md](architecture/04-unhappy-paths.md) · [06-memory-risk-registry.md](architecture/06-memory-risk-registry.md).
|
||||
- `experiments/` — эмпирика полигона: [00-provider-quirks.md](experiments/00-provider-quirks.md) — **читать перед любым вызовом провайдера**; [08-cost-model-v2.md](experiments/08-cost-model-v2.md) — денежная модель; [09-pilot-protocol.md](experiments/09-pilot-protocol.md) — пилот Ф2.5; остальные — отчёты экспериментов. ⚠ **У каждого отчёта статус в его ревью-шапке: читай шапку прежде тела** — она первична и говорит, ратифицированы выводы или заморожены.
|
||||
- `research/` — фактура ресёрчей; у принятых — ревью-шапки, часть тел под ⚠ superseded: **читай баннер прежде содержимого**. Ключевые для навигации: 15 голос · 16 ридер-IDE · 17 внешняя критика · 18 рычаги качества · 19 нарезка · 20 банк-майнинг · 21 обзор транспорта · 22 доменные харнессы · 23 шов движок↔платформа · 25 холодное ревью шва — **читать перед любым кодом стыка** · 24 арбитраж банка · 26 официальные практики Anthropic · 28 контракт-ревью API v0 — **носитель для исполняющих сессий, читать оригинал, не пересказ**.
|
||||
- `research/` — фактура ресёрчей; у принятых — ревью-шапки, часть тел под ⚠ superseded: **читай баннер прежде содержимого**. Ключевые для навигации: 15 голос · 16 ридер-IDE · 17 внешняя критика · 18 рычаги качества · 19 нарезка · 20 банк-майнинг · 21 обзор транспорта · 22 доменные харнессы · 23 шов движок↔платформа · 25 холодное ревью шва — **читать перед любым кодом стыка** · 24 арбитраж банка · 26 официальные практики Anthropic · 28 контракт-ревью API v0 — **носитель для исполняющих сессий, читать оригинал, не пересказ** · 27 детекция глав · 33 техдолг бэкенда — **основание курса перекроя; диспозиции ратифицированы D39.224, адреса §3 читать через эррату шапки**.
|
||||
- [PROGRESS.md](PROGRESS.md) — журнал: CURRENT-STATE + состояние паков + живой хвост хроники и зонные секции «Бэкенд»/«Полигон». НЕ источник решений.
|
||||
- [BACKLOG.md](BACKLOG.md) — **ЕДИНЫЙ БЭКЛОГ проекта** (единственный трекер; «строка N» — стабильный ID). Вынесен из `PROGRESS.md` 06.09 (D39.218; исключение из дословности названо в шапке того файла); зонные бэклоги — свои и с другими ID (`П-N`, `Ф-N`, `PD-N`).
|
||||
- **Тулчейн на чистой машине.** Версии не здесь — их носители: `backend/Makefile` и `platform/Makefile` (`GO_MIN_VERSION`, `GOLANGCI_VERSION`), `frontend/package.json` (`engines`), `platform/docs/STACK_DECISIONS.md` §«Postgres на стенде без root», `eval/requirements.txt` + `eval/.python-version`. Здесь только то, чего нет нигде: ставим в `~/.local/opt/<инструмент>` с симлинком в `~/.local/bin` (он уже в `PATH`), берём **последний патч пинованного минора, а не следующий минор** — линтер пинован точным равенством и разъедется. Root требуют ровно два пакета: `build-essential` (без C-компилятора нет `-race`, а снять `-race` значит выдать отсутствие тулчейна за зелёный прогон — см. комментарий над целью `test` в `backend/Makefile`) и `python3-venv` (в системном питоне нет `ensurepip`, и установка полигона по `eval/README.md` обрывается на первом шаге).
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Реестр D-нот — карта актуальности v2 (D1–D39.223; титул — носитель головы, бампать при каждом аппенде)
|
||||
# Реестр D-нот — карта актуальности v2 (D1–D39.224; титул — носитель головы, бампать при каждом аппенде)
|
||||
|
||||
> ⚠ **Колонку «тело» `counts.py --check` НЕ сторожит по устройству:** он сверяет полноту НОМЕРОВ, а не
|
||||
> место тела, поэтому колонка держится дисциплиной лендинга. Не нашёл тело по колонке — иди в слайсы,
|
||||
|
|
@ -282,3 +282,4 @@
|
|||
| D39.221 | 07.09 | **АКТ: платформенный пак «деньги и правда» ПРИНЯТ С ДОФИКСОМ** + минор **0.13.0** (четыре исхода `POST /v0/books`). Правило остановки сработало: 9 major из 11 в одном механизме, синхронный разрез заландён построенным, но НЕ готовым — десять пунктов, строка **332**. Дофикс: базис расчёта был ВЫВЕРНУТ на чистом завершении (предъявлено строкой леджера) · гейдж не запинен на экспозиции · гейт 305 пинил таргет, а не использование · рунбук против кода · комментарий объявлял полноту при трёх способах. Строки 285 · 305 · 325 закрыты | жив | ЖИВОЕ: строка 332; ложный инвариант бюджета заландён осознанно (окно 8 с, дефолт в 16 минутах) | лендинг платформа контракт минор приёмка |
|
||||
| D39.222 | 07.09 | **АКТ: движковый пак «закон банка честно» ПРИНЯТ С ДОФИКСОМ**. Непокрытая пара закрыта, слепое пятно постчека названо В КОДЕ, два ложных комментария сняты; репорт-онли подтверждён исполнением (снапшот, `memory_version`, `manifest_key` не двигаются). Приёмка: 3 major — обещание о `src` достроено и запинено идемпотентностью нормализатора · гарантия `approvedNeighbours` жила только в комментарии (пин заведён, пере-проверен мутацией оркестратора) · утверждение отчёта опровергнуто его же §9. Шесть кругов, 43 находки в своей работе; цена подпорки измерена — ТРИ круга. Строки 267 · 318 закрыты | жив | ЖИВОЕ: строка 333 (шов-близнец), 320(б) — стоп-мир данных | лендинг бэкенд банк приёмка мутации |
|
||||
| D39.223 | 07.09 | **ТРИАЖ ОТКРЫТОГО ПОСЛЕ ДВУХ ЛЕНДИНГОВ**: строки **334–343** заведены (в т.ч. 340 — асинхронная ветвь интейка проницаема, закрыть нечем без пятой причины отказа, НА ВЛАДЕЛЬЦЕ); два пункта отклонены с причиной. ⚠ Пропуск носителей на обоих актах нашёл ВОПРОС ВЛАДЕЛЬЦА, а не гейт. Находка платформы про §2.12 компаньона оказалась половинчатой: каналы разные, утверждение истинно, мертвы были якоря | жив | ЖИВОЕ: строка 340 ждёт слова владельца | триаж носители приёмка контракт |
|
||||
| D39.224 | 07.09 | **РАЗБОР research/33 В ТРЕКЕР**: заведены строки **344–350** (шов заголовка · словари классификатора · правило заголовка и `第零章` · каналы langpack · арм-шапки · остатки · рефакторинг по санкции владельца), дописки в 86/114/119/182/224; «переписать» не получил ни один из 11 долгов. Порядок: шаг 0 ПАРАЛЛЕЛЬНО дизайну 161 → шаги 2+3 одним окном перенарезки (wire-очередь 182 ложится в него же) → шаг 4 аддитивно; цена «дважды» условна (D39.190 п.4), ограничение — время до интейка. Запреты только под ратифицированной базой, остальное — условия с механизмом | жив | ЖИВОЕ: место строки 160 относительно стоп-мира перекроя — вопрос дизайну (п.6); критерий шага 1 (п.8) — в дизайн-пак; четыре ошибки разбора названы в п.9 | техдолг трекер порядок деньги |
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Журнал решений оркестратора — контракт D1–D39.223 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`)
|
||||
# Журнал решений оркестратора — контракт D1–D39.224 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`)
|
||||
|
||||
> **⟶ КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Работая с контрактом (греп номера: живой файл → слайсы, целиком НЕ читать — D39.125), держи под рукой, что чем перекрыто:
|
||||
> ⚠ **Эррата 09.08 (D39.125):** D39.111 п.1 предписывал промту S3 «максимум = баланс МИНУС открытые холды» — формула ОШИБОЧНА (вычитание дважды), исправлена D39.115 п.2(а): максимум = Balance КАК ЕСТЬ; тело D39.111 — в слайсе `../archive/architecture/05-decisions-D39-106-123.md` (испр. 05.09: прежнее «живёт ниже в этом файле» протухло подрезкой D39.139) (голова D39.106+).
|
||||
|
|
@ -2917,3 +2917,76 @@ mined-посадки (её поверхность есть подстрока у
|
|||
`platform/internal/httpapi/` этих полей **0 файлов** при контроле **2** по `balance` ⇒ утверждение §2.12
|
||||
ИСТИННО и снятию не подлежит. Мертвы были только якоря — пере-наведены на `status.go:184`/`:180`, различение
|
||||
каналов вписано туда же, чтобы вопрос не открывали заново.
|
||||
|
||||
## D39.224 — РАЗБОР research/33 В ТРЕКЕР: семь носителей, порядок окна перекроя, и запреты только там, где под ними ратифицированная база (07.09, оркестратор №23) ✅
|
||||
|
||||
**1. Что ратифицировано, а что нет.** `docs/research/33-backend-debt.md` остаётся ФАКТУРОЙ: его утверждения
|
||||
нотой не становятся. Ратифицируются ДИСПОЗИЦИИ ниже — состав носителей, порядок работ и форма запретов.
|
||||
|
||||
**2. Носители заведены; у пяти находок их не было.** Строки **344** (шов заголовка главы не утверждается
|
||||
ничем) · **345** (словари классификатора закрыты в Go и прозе промта) · **346** (правило заголовка тремя
|
||||
предикатами, `第零章`) · **347** (манифест langpack требует ≥1 канал) · **348** (арм-шапки против боевого
|
||||
конфига) · **349** (остатки опровергателей) · **350** (рефакторинг облегчения ведения — санкция владельца
|
||||
07.09). Дописки ВМЕСТО вторых носителей: **114**(в) делегация `ThinksOnWire` · **119** stdlib-половина
|
||||
`unicode.Version` · **224** пин порядка предвычисления · **86** вопрос про `zh/numeral.txt` · **182**
|
||||
протухшая ссылка на закрытую строку 105. Вердикта «переписать» не получил НИ ОДИН из одиннадцати долгов;
|
||||
20 снятых опровергателями находок и 8 косметических в трекер не заводятся — довод в §7 самого ресёрча.
|
||||
|
||||
**3. Порядок — «шаг 0 ПАРАЛЛЕЛЬНО дизайну», а не «до него».** Ресёрч ставит шаг 0 перед дизайном; из пяти
|
||||
его пунктов дизайн кормит только ЗНАНИЕ по Д3, и его дизайн-пак добывает сам выброшенной пробой (§5 п.3).
|
||||
Файлы не пересекаются: шаг 0 пишет тесты `internal/chunk`/`internal/pipeline`, `mutations.json`,
|
||||
`prompt_lint_test.go`, `banknote.go`; дизайн — `backend/docs/`. ⇒ сериализуются ЛЕНДИНГИ, не старты; шаг 0
|
||||
обязан лечь ДО пака СТРОЙКИ, а не до дизайна.
|
||||
|
||||
**4. Одно окно или два — гибрид, и он назван вслух.** (а) Шаги 2+3 — ОДНА перенарезка и НАДМНОЖЕСТВО любого
|
||||
wire-окна: бамп `chunkerVersion` перекупает обе волны. (б) Живые wire-правки очереди **182** ложатся в это же
|
||||
окно — отдельного батча больше не собирать (сам батч заландён `b8154cd`, D39.190 п.4). (в) Шаг 1 распечатывает
|
||||
ТОЛЬКО вердикт-ось: wire-правка меняет рендер провода ⇒ `ContentHash` другой ⇒ модель придётся вызвать при
|
||||
любом предикате осей (`stagerun.go:91-92`), и для неё норма «копить» физическая, а не наведённая.
|
||||
|
||||
**5. Цена «заплатить дважды» УСЛОВНА; жёсткое ограничение — время.** D39.190 п.4: пере-снапшот стоит денег
|
||||
только на книге, которую ПРОДОЛЖАТ, а таких нет ⇒ сегодня $0. Ограничение — первая книга внешнего
|
||||
пользователя (строка 161). Формулировка «разнести = заплатить дважды» без этой оговорки читается как
|
||||
сегодняшний счёт, которого нет.
|
||||
|
||||
**6. Место строки 160 — вопрос дизайну, а не умолчание.** D39.190 п.2 поставила Этап 0 СВОИМ паком после двери
|
||||
выдачи, стоп-миром: у бампа `manifestVersion` безопасного порядка деплоя нет ни в одну сторону (`PD-436`).
|
||||
Перекрой пере-минтит КЛЮЧИ манифеста, но не обязан двигать его ФОРМУ ⇒ дизайн обязан ответить, ложится ли
|
||||
Этап 0 в тот же стоп-мир, что перекрой. Два стоп-мира вместо одного — цена, которую никто не назначал.
|
||||
|
||||
**7. Запреты — только под ратифицированной базой; остальное УСЛОВИЯ с механизмом.** ⛔ Запреты: байты промтов
|
||||
и словарей и `classifierVersion` не двигать (D39.194 п.9, **D39.195 п.5**) · ось «обязательность юнита» вне
|
||||
пака 2 не трогать (носитель — строка **303**) · `Runner` не переписывать и `internal/pipeline` не дробить
|
||||
(`12-go-style-notes.md` §1, D39.23) · снапшот-нейтральные мелочи в окно перекроя не втаскивать, а шаг 0 не
|
||||
откладывать. ⚠ УСЛОВИЯ (опровергаются аргументом — та же сила, что у приора в дизайн-паке §4.4): фолд
|
||||
`structure_version` в снапшот законен ТОЛЬКО вместе с осью в `classifySnapshotMove`, иначе адресная
|
||||
перепокупка становится полной (`repin.go:305-318` + `stagerun.go:91-92`) · вердикт-ключ становится
|
||||
re-pinnable ТОЛЬКО с $0-переклассификацией из чекпойнта, доказанной тестом (`resume.go:24-26` сегодня отдаёт
|
||||
сохранённый вердикт слепо) · детектор границ с нуля не строится, пока не назван счёт за бамп `chunkerVersion`
|
||||
(100 % обеих волн). **Форма выбрана намеренно:** жёсткий запрет там, где база не ратифицирована, создал бы
|
||||
второй носитель ДРУГОЙ силы против уже написанного дизайн-пака, и следующая сессия не узнала бы, что действует.
|
||||
|
||||
**8. Критерий шага 1 — проверяемый, уходит в дизайн-пак.** (1) Таблица относит КАЖДЫЙ JSON-ключ снапшота
|
||||
(`snapshot.go:342-425` — 22 ключа, счёт мой; ⚠ напарник дал `:426-449`, там json-тегов ноль) ровно к одной оси: провод · вердикт · банк · крой. (2) Рефлексивный тест по образцу
|
||||
`TestEveryCutInputMovesTheTag` (`cuttag_test.go:26`) краснеет на ключе без оси — ни один ключ не попадает в
|
||||
`moveOther` умолчанием. (3) Резюм-тест: сдвинут ТОЛЬКО вердикт-ключ ⇒ ноль платных вызовов, вердикт
|
||||
пере-вынесен из текста чекпойнта. (4) `TestRepinRefusesAnyMoveThatIsNotBankOnly` (`miningstop_join_test.go:1686`)
|
||||
пере-скоупится ЗАКАЗОМ пака и объявляется в отчёте (D39.183). (5) `projectRebill` показывает контентную и
|
||||
позиционную оси. Мерило «норма копить пала»: бамп `CheapGateVersion` на продолжаемой книге ложится с нулём
|
||||
платных вызовов и без `--resnapshot`.
|
||||
|
||||
**9. Четыре ошибки самого этого разбора — названы, чтобы их не унаследовали.** Найдены напарником, каждая
|
||||
пере-проверена мной командой. (а) `D39.23` п.(г) — слой пар-КАЛИБРОВОК (`configs/pairs/<пара>`,
|
||||
fertility/len_ratio_bounds, промпт-резолв конвенцией), а НЕ наследование арм-конфигов: утверждение «механизм
|
||||
наследования есть и ратифицирован» пришло из research/33 §7.13, было мной скопировано и снято — в
|
||||
`internal/config/pipeline.go` греп `extends|inherit|base_config` даёт 2 хита, оба про ручку, «deliberately NOT
|
||||
inherited». Это самая дорогая из четырёх: она отправила бы сессию строить на несуществующем механизме.
|
||||
(б) Запрет двигать `classifierVersion` ратифицирован D39.195 п.5, а не D39.199 п.5 (там закрытие строки 264) —
|
||||
ошибка тоже унаследована из ресёрча. (в) Ось «обязательность юнита» приписана `D39.207` ложно: в теле ноты
|
||||
греп по предмету 0 при 23 строках тела; носитель — строка 303. (г) Триггер строки 347 — первая новая
|
||||
ИСХОДНАЯ пара (манифест хешируется языком-источником, `langpack.go:252`), а не строка 115 про новую ЦЕЛЬ.
|
||||
|
||||
**10. Эррата к research/33.** Замер снят на `e69902a`, `backend/` с тех пор уехал на 18 файлов (+1115/−71),
|
||||
и часть адресов §3 протухла. Пере-снято: `export.go:174/340/341` → `:176/342/343` · `terminologist.go:570` →
|
||||
`:603` · `PROGRESS.md:31` → `:52`. Контроль в другую сторону: якоря `mining.go` (234/241/244/269) лендинг НЕ
|
||||
тронул, порядок экспорта банка на стопе открыт ровно как описан.
|
||||
|
|
|
|||
|
|
@ -31,6 +31,17 @@
|
|||
> `internal/`**, **1246 по всему `backend/`** (с `cmd/`), **1252** с Benchmark/Fuzz ✔. Батарея на HEAD
|
||||
> `e69902a`: 18 `ok` + 2 без тестов, EXIT 0 ✔. `internal/pipeline` — 17 236 строк / 41 файл = 37 % прод-кода ✔.
|
||||
|
||||
> ⚠ **ЭРРАТА 07.09 (оркестратор, `D39.224` п.10): АДРЕСА §3 ЧАСТЬЮ ПРОТУХЛИ.** Замер снят на `e69902a`;
|
||||
> `git diff --stat e69902a <HEAD> -- backend/` даёт 18 файлов (+1115/−71) — лендинг движкового пака 07.09.
|
||||
> Пере-снято: `export.go:174/340/341` → `:176/342/343` · `terminologist.go:570` → `:603` · `PROGRESS.md:31` →
|
||||
> `:52`. Контроль в другую сторону: якоря `mining.go` (234/241/244/269) не тронуты, порядок экспорта банка на
|
||||
> стопе открыт ровно как описан. ⇒ **адрес перед использованием пере-снимать командой, а не читать отсюда.**
|
||||
> Диспозиции по этому файлу ратифицированы `D39.224`: носители — строки 344–350 и дописки в 86/114/119/182/224.
|
||||
> ⚠ Там же (п.9) сняты ЧЕТЫРЕ утверждения, унаследованные из этого текста: наследование арм-конфигов НЕ
|
||||
> ратифицировано `D39.23` п.(г) (§7.13) · запрет двигать `classifierVersion` — `D39.195` п.5, не `D39.199` п.5
|
||||
> (Д1) · ось «обязательность юнита» не в `D39.207`, а в строке 303 (Д3) · триггер Д7 — новая ИСХОДНАЯ пара,
|
||||
> не строка 115.
|
||||
|
||||
---
|
||||
|
||||
## 1. Ответ владельцу одной оценкой
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue