diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 1f6543a6..5846f6c2 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -143,7 +143,7 @@ | 203 | **Хвосты контракта после синка 0.4.0 — ОТКРЫТА ЧЕТВЕРТЬ, остальное исполнено** (тела релеев — `platform/docs/archive/P7_ACCEPTANCE_HANDOFF_2026-08-17.md` §7; сюда переписаны НЕ тела, а статус — один носитель на факт). ⚠ Сверено грепом при лендинге, потому что первая редакция этой строки уже разошлась с деревом: **(б) ИСПОЛНЕН** — срезанная фраза компаньона §2.14 стоит на месте (`14-api-contract/README.md:510`=`различать причины отказа клиент не может по замыслу`) · **(д) ИСПОЛНЕН** — клетка приложения А заполнена `unspecified` (`README.md:1376` — ⚠ первая редакция писала `:1391`, это строка ДРУГОГО приложения; испр. 20.08) · **(г) наполовину** — `unspecified` ратифицирован в каноне (`openapi.yaml:1784-1787`), открыта только ГРАНИЦА ступеней замечаний (две ступени при девяти рангах движка) → это строка **148** · **(и)** закрыт полем `stop_requested` (D39.152) · (л)(м)(н)(о) закрыты контрактной сессией. **ОТКРЫТО РЕАЛЬНО:** (а) канон-половина про `/auth` — компаньон поверхность описывает (§2.14), а канон говорит только «Signing in is not part of this surface» (`openapi.yaml:35-36`) и НЕ предупреждает, что конверт вне `/v0` может прийти БЕЗ обязательного `code`; сгенерированный по канону клиент об это спотыкается · (з) ⚠ **СНЯТО КАК РАТИФИКАЦИЯ 22.08 — конфликта моделей НЕТ, я нёс причину и следствие наоборот.** Прежняя редакция писала: «D39.144 ратифицировал подпись = ОДИН акт, движок держит пер-термный гейт полноты, одно из двух должно уступить». Сквозная трассировка это опровергла КОДОМ: гейт проверяет полноту не ПОДПИСЕЙ, а ФАЙЛА решений, и ОДИН акт его снимает — `loadMinedDelta` штампует только `Source`, статус не трогает (`mining.go:855-867`) → опущенный статус дефолтится в `approved` (`membank/memseed.go:71-74`=`status = "approved"`) → `unsignedEngineSurfaces` выбрасывает лишь `Source=="mined" && Status!="approved"` (`mining.go:710-719`) ⇒ промоутнутые строки остаются сид-поверхностями, дельта пустеет, стоп снимается. Шапка файла говорит это прямым текстом. **Один файл со всем банком = один ОК.** Обход в платформе (`--verify-bank` не передаётся на resume) — костыль под ОТСУТСТВУЮЩУЮ ДОСТАВКУ, а не под расхождение моделей: как только доставка появится, флаг можно просто оставить включённым. Настоящий и единственный блокер темы — владение `book.yaml`, строка **199(а)**. Ратификации здесь НЕ нужно; остаётся снять обход одной боевой строкой (`platform/internal/runs/spawn.go`) и семью строками ставшего ложным обоснования — работа платформенного пака, не решение владельца · (к) ключ `project_db` в `book.yaml`: договорить, кто им владеет — шаблон оператора его не содержит, движок делает необязательным. ⚠ **Следствие «на штатном деплое банк не читается» ОПРОВЕРГНУТО живым кодом** (проверено при лендинге): акт 5 внёс фолбэк `.db` и назвал прежний отказ багом (`platform/internal/runner/artifacts.go:82-90`=`The key is OPTIONAL to the engine`); первая редакция этой строки повторила клейм хендоффа зоны, не сверив с деревом — остаток чисто договорной · **(л) остаток закрытой строки 148 — Приложение А компаньона.** ⚠ Сама 148 СНЯТА 21.08 по слову владельца: она держала мир, которого больше нет — «карта потеряна инцидентом 08.08, реконструкция у оркестратора №15, решить, брать ли черновиком». Реконструкция брать нечего: прежняя карта вела «причина движка → ФРАЗА», то есть предполагала, что фразу рисует СЕРВЕР, а батч 0.3.0 эту политику ОТМЕНИЛ — `Note` несёт машинный `code`, фразу рисует клиент, `Note.message` с провода снят (`14-api-contract/README.md:1332`=`Карта «причина → КОД контракта`). Реально пуста другая клетка: соответствие причин движка кодам замечаний, и правила её заполнения в компаньоне уже написаны (фраза по ДОККОММЕНТУ `disposition.go`, а не по имени константы — инверсия уже стоила двух фраз; класс 2 схлопывается в ОДИН код). Исполнитель — контрактная сессия, не оркестратор | контракт/доки | скоро (следующее касание контракта, вместе с 200) | контрактная сессия | приёмка P7 (D39.153) | | 204 | **Движок не публикует причины флагов ДАННЫМИ — карта причин у платформы рукописная и расходится молча** (релей §7(в) хендоффа P7; зона платформы в чужой бэклог не пишет и просила строку сюда — `platform/docs/archive/platform-PROGRESS-P7.md:206`). Сегодня `platform/internal/ingest/notes.go` держит рукописную копию закрытого словаря ЧУЖОЙ зоны: 15 причин движка → коды замечаний контракта, сверено побайтно на 20.08 и верно СЕЙЧАС. Импортировать движок платформе нельзя (D39.85 — разные модули), поэтому расхождение появится молча в тот день, когда движок добавит причину: платформа отдаст `unspecified` и напишет ERROR в лог, то есть деградация честная, но карта протухнет незаметно. Лечение: движок публикует свой словарь причин артефактом-данными (тем же классом, что манифест и сайдкары банка), платформа читает его вместо копии. ⚠ Носителем был ТОЛЬКО регистр платформы (PD-246) — то есть обязательство к зоне движка жило внутри зоны автора; поймано ревьюером полноты выгрузки при лендинге | бэкенд | когда-нибудь (со следующим касанием эмиссии флагов) | отдельное решение | приёмка P7 (D39.153), релей §7(в) | | 205 | **Гейт якорей: ИСПОЛНЕН 21.08 — сверка по содержимому, двусторонняя дельта, объявленная слепота.** Был: проверял только существование файла и переполнение номера, поэтому дал ЗЕЛЁНЫЙ на четыре якоря, сломанных архивацией — а оркестратор на эту зелень опёрся вместо ручной сверки. Стало (`docs/scripts/counts.py`): якорь может нести ОПТ-ИН токен ожидания `` `путь:12-14`=`подстрока` ``, и такой якорь сверяется по содержимому; область расширена с `docs/` на `platform/docs` и `frontend/docs` (98 доков); из хука убран быстрый выход по «коммит не трогает docs/» — он ампутировал ЦЕЛЕВУЮ сторону, а цели у нас в основном КОД, то есть главный двигатель протухания приезжал ровно тем коммитом, на котором хук молчал (проверено ТЕСТ-КОММИТОМ, не ручным прогоном — норма D39.148). ⚠ **Разбор с внешним ревьюером снял три моих ошибки дизайна:** (1) у дельты ДВЕ роли, и путать их нельзя — ТРЕБОВАТЬ токен можно только на затронутых строках (иначе долг блокирует всех), а ПРОВЕРЯТЬ уже написанные токены дельта ограничивать не должна вовсе: токен был истинным при записи, значит упавший — гниль по построению; corpus-wide проверка схлопывает «пропущенное окно» (коммит без хука, `--no-verify`, свежий клон, проигнорированный warn) из «навсегда» в «до следующего прогона»; (2) окно диапазона `80-82,243` считалось как `min..max` — 164 строки, и токен, случайно живущий внутри, красил зелёным; теперь ОБЪЕДИНЕНИЕ отрезков; (3) литеральная сверка токена была машиной ложных тревог — фраза, разорванная переносом строки в цели, непроверяема в принципе, а будущая пере-вёрстка абзаца кричала бы «цель уехала» на невиновного; теперь ПРОБЕЛЬНАЯ нормализация (детерминированная и симметричная), разметка остаётся литеральной. ⚠ Мой довод «неудобство и есть механизм» был неверен: мой собственный случай был FALSE POSITIVE самого гейта — токен был истинным, цель не двигалась. **ОБЪЯВЛЕННАЯ СЛЕПОТА (печатается гейтом каждый прогон):** якорь БЕЗ токена — только существование и длина · подмена цели файлом с тем же путём ловится только токеном · цели читаются из ДЕРЕВА, поэтому чужой незакоммиченный WIP может транзиентно и уронить токен, и спасти · токен доказывает ссылочную свежесть, НЕ истинность фразы дока о цели · в ручном прогоне «дельта» = всё незакоммиченное кем угодно, поэтому ТРЕБОВАНИЕ токена живёт только под `--from-index`. **ОСТАТОК:** миграция корпуса на токен-форму органическая — токен требуется на ЗАТРОНУТЫХ строках, поэтому счёт растёт сам с каждым касанием. Числа здесь НЕ держим (первая редакция держала «4 из ~580» и протухла за сутки): текущий счёт токенов, якорей и доков гейт печатает КАЖДЫЙ прогон — `python3 docs/scripts/counts.py --lint` | оркестратор/доки | сделано 21.08, миграция органическая | исполнено; остаток гасится касаниями | аудит работы №18 + разбор с внешним ревьюером, 21.08 | -| 206 | **Канон 0.4.0 объявляет ручку, которой зона больше не отдаёт — ломающий минор 0.4.0 → 0.5.0** (контрактная половина `PD-370`, лендинг P8-FIX D39.154). `D39.144` отменил пер-термную подпись 16.08, зона сняла write-путь 22.08, а словарь канона его держит: путь `POST /books/{bookId}/bank/decisions`, глагол и три схемы — **~17 мест в `openapi.yaml` + ~8 в компаньоне**, поимённый разбор (6 мест прямой лжи, 3 самопротиворечия) — `platform/docs/archive/platform-PROGRESS-P8.md`, раздел «Насколько страдает контракт». ⚠ **ОБЪЁМ ШИРЕ ОДНОЙ РУЧКИ — сверено аудитом доков 22.08 против кода платформы, и это меняет форму работы:** (1) пер-термный механизм решений живёт ещё в ПЯТИ местах ЖИВЫХ, обслуживаемых схем — после удаления пути канон продолжит учить механизму, которого нет; (2) §2.9 компаньона («Подпись — набор решений») стоит на отменённой модели ЦЕЛИКОМ и просит поле под таблицу, в которую больше ничего не пишется; (3) таблица §3 компаньона — единственное место, где ведётся статус построенного, — объявляет НЕ ПОСТРОЕННЫМИ шесть поверхностей, которые P7 построил, а P8 сохранил, и держит снятую ручку строкой «НЕ ПОСТРОЕНО, вход P7», то есть как отложенную работу; (4) провенанс-якоря компаньона на `httpapi/v0.go` сдвинулись примерно на +200 строк и указывают в посторонний код. **И дыра, которую спил вскрыл:** `approve`+`dst` был ЕДИНСТВЕННЫМ живым носителем того, что D39.144 оставила пер-термным — «поправить термин», — а «добавить свой термин» модель называет, и в контракте его нет вовсе. То есть у собственной фразы канона «correct what they care to, then release it with ONE resume» ручки не осталось. До правки деплой обслуживает на одну ручку меньше, чем объявляет — цена, названная заранее, а не найденная приёмкой. ⚠ **БАТЧ РАЗДЕЛЁН 22.08 по итогам сквозной трассировки — и довод, которым я его склеивал, снят.** Прежняя редакция строки везла 206 ОДНИМ минором со строкой 200 и хвостами 203 «ради одной перегенерации фронта вместо трёх» (D39.152 п.7). Довод сегодня почти ничего не весит: зеркало фронта ратифицированно стоит на 0.2.3 и при разморозке платит переход ОДНИМ куском в любом случае. А блокеры у этих работ РАЗНЫЕ, и склейка подчиняла незаблокированное заблокированному: **206 не заблокирована ничем**; ручка правки термина заблокирована ратификацией 199(а); **строка 200 заблокирована ответом ДВИЖКА** на вопрос «может ли майнинг объявлять знаменатель»; из хвостов 203 в минор едет одна текстовая правка (а), а (з) и (к) — ратификации, а не правки. **Порядок:** 0.5.0 СЕЙЧАС и только гигиена — она снимает живую ложь (деплой обслуживает на одну ручку меньше, чем объявляет) и не ждёт ничьих решений; новая ручка, сквозной прогресс и хвосты — 0.6.0 после ратификаций. Объём гигиены назван: ~14 мест в `openapi.yaml` (4 блока / ~105 строк на снос плюс проза в 10 живых схемах) + ~7 живых мест в компаньоне + таблица §3 (уже пере-снята 22.08) + одна строка в платформе (`ContractVersion`, иначе краснеет гейт `gates/contract_test.go`). ⚠ **ДОБОР СОСТАВА аудитом 22–23.08 — с ЧЕСТНОЙ атрибуцией, потому что это находки оркестратора №19, а не ратифицированные факты.** **Пере-проверено мной лично:** (а) строки :672/:673 таблицы §3 компаньона объявляют отсутствующей платформенную проекцию банка и замечаний, а она ПОСТРОЕНА — маршруты `platform/internal/httpapi/v0.go:79-80`=`GET", path: "/books/{bookId}/bank` и хендлеры `platform/internal/httpapi/reading.go:193`=`func (h *v0) listBank`; (б) зеркало фронта стоит на 0.2.3 против канона 0.4.0, и сверка канон↔зеркало существует ТОЛЬКО прозой. **СО СЛОВ панели, мной НЕ пере-проверено — исполняющая сессия проверяет сама:** баннер таблицы §3 объявляет её пере-снятой при трёх строках против кода · ≈19 голых провенанс-якорей компаньона на код платформы протухли. **ОПРОВЕРГНУТО моей проверкой и в состав НЕ входит:** клейм «два числа этой строки несут перепутанные ярлыки» — слова «пять» в строке нет вовсе, стоит «проза в 10 живых схемах» | оркестратор/контракт | скоро (следующим минором) | ратифицировано D39.154 п.8 | D39.154, `PD-370` | +| 206 | **Канон 0.4.0 объявляет ручку, которой зона больше не отдаёт — ломающий минор 0.4.0 → 0.5.0** (контрактная половина `PD-370`, лендинг P8-FIX D39.154). `D39.144` отменил пер-термную подпись 16.08, зона сняла write-путь 22.08, а словарь канона его держит: путь `POST /books/{bookId}/bank/decisions`, глагол и три схемы — **~17 мест в `openapi.yaml` + ~8 в компаньоне**, поимённый разбор (6 мест прямой лжи, 3 самопротиворечия) — `platform/docs/archive/platform-PROGRESS-P8.md`, раздел «Насколько страдает контракт». ⚠ **ОБЪЁМ ШИРЕ ОДНОЙ РУЧКИ — сверено аудитом доков 22.08 против кода платформы, и это меняет форму работы:** (1) пер-термный механизм решений живёт ещё в ПЯТИ местах ЖИВЫХ, обслуживаемых схем — после удаления пути канон продолжит учить механизму, которого нет; (2) §2.9 компаньона («Подпись — набор решений») стоит на отменённой модели ЦЕЛИКОМ и просит поле под таблицу, в которую больше ничего не пишется; (3) таблица §3 компаньона — единственное место, где ведётся статус построенного, — объявляет НЕ ПОСТРОЕННЫМИ шесть поверхностей, которые P7 построил, а P8 сохранил, и держит снятую ручку строкой «НЕ ПОСТРОЕНО, вход P7», то есть как отложенную работу; (4) провенанс-якоря компаньона на `httpapi/v0.go` сдвинулись примерно на +200 строк и указывают в посторонний код. **И дыра, которую спил вскрыл:** `approve`+`dst` был ЕДИНСТВЕННЫМ живым носителем того, что D39.144 оставила пер-термным — «поправить термин», — а «добавить свой термин» модель называет, и в контракте его нет вовсе. То есть у собственной фразы канона «correct what they care to, then release it with ONE resume» ручки не осталось. До правки деплой обслуживает на одну ручку меньше, чем объявляет — цена, названная заранее, а не найденная приёмкой. ⚠ **БАТЧ РАЗДЕЛЁН 22.08 по итогам сквозной трассировки — и довод, которым я его склеивал, снят.** Прежняя редакция строки везла 206 ОДНИМ минором со строкой 200 и хвостами 203 «ради одной перегенерации фронта вместо трёх» (D39.152 п.7). Довод сегодня почти ничего не весит: зеркало фронта ратифицированно стоит на 0.2.3 и при разморозке платит переход ОДНИМ куском в любом случае. А блокеры у этих работ РАЗНЫЕ, и склейка подчиняла незаблокированное заблокированному: **206 не заблокирована ничем**; ручка правки термина заблокирована ратификацией 199(а); **строка 200 заблокирована ответом ДВИЖКА** на вопрос «может ли майнинг объявлять знаменатель»; из хвостов 203 в минор едет одна текстовая правка (а), а (з) и (к) — ратификации, а не правки. **Порядок:** 0.5.0 СЕЙЧАС и только гигиена — она снимает живую ложь (деплой обслуживает на одну ручку меньше, чем объявляет) и не ждёт ничьих решений; новая ручка, сквозной прогресс и хвосты — 0.6.0 после ратификаций. Объём гигиены назван: ~14 мест в `openapi.yaml` (4 блока / ~105 строк на снос плюс проза в 10 живых схемах) + ~7 живых мест в компаньоне + таблица §3 (уже пере-снята 22.08) + одна строка в платформе (`ContractVersion`, иначе краснеет гейт `gates/contract_test.go`). ⚠ **ДОБОР СОСТАВА аудитом 22–23.08 — с ЧЕСТНОЙ атрибуцией, потому что это находки оркестратора №19, а не ратифицированные факты.** **Пере-проверено мной лично:** (а) строки :672/:673 таблицы §3 компаньона объявляют отсутствующей платформенную проекцию банка и замечаний, а она ПОСТРОЕНА — маршруты `platform/internal/httpapi/v0.go:79-80`=`GET", path: "/books/{bookId}/bank` и хендлеры `platform/internal/httpapi/reading.go:193`=`func (h *v0) listBank`; (б) зеркало фронта стоит на 0.2.3 против канона 0.4.0, и сверка канон↔зеркало существует ТОЛЬКО прозой. **СО СЛОВ панели, мной НЕ пере-проверено — исполняющая сессия проверяет сама:** баннер таблицы §3 объявляет её пере-снятой при трёх строках против кода · ≈19 голых провенанс-якорей компаньона на код платформы протухли. ⚠ **ВОЗВРАЩЕНО В СОСТАВ 23.08 — моё прежнее опровержение стояло на ЛОЖНОМ основании.** Я написал «слова „пять“ в строке нет вовсе» — оно есть, тремя предложениями выше: «пер-термный механизм решений живёт ещё в ПЯТИ местах ЖИВЫХ, обслуживаемых схем», и рядом стоит «проза в 10 живых схемах». Две цифры об одном множестве сосуществуют и противоречат друг другу; клейм панели «ярлыки перепутаны» я НЕ разрешил и снимать его было нельзя. Мой промежуточный счёт для исполняющей сессии: тел на снос ЧЕТЫРЕ (путь `openapi.yaml:469`=`/books/{bookId}/bank/decisions:` плюс три схемы `:1939`/`:1980`/`:1992`), прозаических упоминаний снятого пути ДВА, всего вхождений `BankDecision|bank/decisions` девять. Разъять «места» и «схемы» — работа минора | оркестратор/контракт | скоро (следующим минором) | ратифицировано D39.154 п.8 | D39.154, `PD-370` | | 207 | **Пол самосогласованности манифеста стоит только у материализатора, интейк тот же документ ПРИНИМАЕТ — и по такой книге можно ОПЛАТИТЬ прогон** (`PD-367`, вторая волна ревью P8-FIX). Манифест `{ChaptersTotal: 120, UnitsTotal: 400}` с пустым списком глав `Whole()` отвергает, а `books.Parse` заводит книгу `not_started` с `chapter_count=120` и пустым деревом; потолок считается ОТ `chapter_count`. **Очевидное лекарство опровергнуто исполнением самой зоной:** применить `Whole()` на интейке нельзя — вся батарея интейка ездит на манифестах без списка глав, контракт интейка это только счётчики. Значит решение не зонное: либо контракт интейка меняется, либо пол ставится в другом месте цепи | оркестратор → платформа | скоро | нужно решение (лекарство ломает запиненный контракт интейка) | D39.154 п.10, `PD-367` | | 208 | **Эскалационный хоп на Gemini ТИХО ТЕРЯЕТ инъекцию банка памяти — книга едет без канона имён** (живая проба полигона 22.08, подтверждена вендор-докой и пере-проверена оркестратором по коду). OpenAI-совместимый слой Gemini принимает РОВНО ОДНО системное сообщение, лишние выбрасывает МОЛЧА — без ошибки, при `finish=stop` и внешне правильном переводе. Замер полигона на одном и том же системном тексте 7970 знаков: одним сообщением → `prompt_tokens` 2994 и маркерная инструкция ИСПОЛНЕНА, двумя → 535 токенов и инструкция НЕ исполнена. Механизм вендорский, поэтому уход на нативный API НЕ лечит: `systemInstruction` там — один объект `Content`. Наша сторона: `backend/internal/pipeline/render.go` штатно строит ВТОРОЕ системное сообщение (инъекция глоссария/STM), `backend/internal/llm/httpllm.go` `toOpenAIMessages` копирует сообщения дословно, склейки под Gemini нет нигде — а `gemini-3.1-pro-preview` стоит в ратифицированной цепочке эскалации ВО ВСЕХ четырёх арм-конфигах. ⇒ любой хоп на Gemini при непустой инъекции теряет глоссарий, и **это невидимо гейтам годности**. ⚠ Класс в проекте УЖЕ решён рядом и не обобщён: `provider_anthropic.go` сворачивает ведущий system-префикс в одно поле и падает громко на system посреди диалога. Оговорка D22.3 «экспозиция Ф1 нулевая» держится на МАРШРУТЕ (до Gemini в дефолте не доходят), а не на коде — то есть на одном включённом `budget_usd` от дефекта в проде. Полигон у себя починил склейкой по вендору (`eval/dovodka/rol.py`), в движок не лез; квирк записан в `00-provider-quirks.md` | бэкенд | **скоро (до первого платного прогона с ненулевым `budget_usd` эскалации)** | склейка системных сообщений для Gemini в транспорте + пин | пинг полигона №19 (22.08), вендор-дока `ai.google.dev/api/generate-content` | | 209 | **Риг живых проб не может залогировать тела запросов ни при каких env** (находка бэкенд-пака честности 17.08, оставшаяся без носителя до аудита доков 22.08): `LOG_LLM_BODIES=1`+`LOG_LEVEL=debug` объявлены носителем тел, но ключ читается из `obs.ReqInfo` контекста, а `live_reprobe_test.go` строит ctx БЕЗ `WithReqInfo` — гейт `obs/logging.go` не пропускает. Обход, которым пользовались: ручной дамп сообщений в файл. Цена — каждая живая проба, которой нужно прочитать провод глазами, платит за обход заново | бэкенд | когда-нибудь (следующее касание рига живых проб) | малое касание (`WithReqInfo` в риге) + пин | пак честности 17.08, вынесено аудитом доков 22.08 | diff --git a/docs/architecture/17-seam-inbound-law.md b/docs/architecture/17-seam-inbound-law.md index 490f7e15..c3da7430 100644 --- a/docs/architecture/17-seam-inbound-law.md +++ b/docs/architecture/17-seam-inbound-law.md @@ -117,8 +117,8 @@ границы процессов; единственный мид-ран кандидат закрыт каноном (п.2); инбокс-файл возвращает гонку, ради исключения которой существует flock. ⚠ **Эррата, которую ратифицирующая нота обязана поставить на `research/25`:** там «поднятие потолка файлом через -atomic rename» отнесено к носителям D39.106 — в теле D39.106 этого механизма НЕТ вовсе (проверено грепом по слайсу -`archive/architecture/05-decisions-D39-106-123.md`; первый хит темы — только в D39.110). Строка была КАНДИДАТОМ и +atomic rename» отнесено к носителям D39.106 — в теле D39.106 этого механизма НЕТ вовсе (проверено по ЖИВОМУ телу `05-decisions-log.md:232`=`ШОВ: прогон переживает деплой платформы`; ⚠ испр. 23.08 — прежняя редакция ссылалась на слайс +`archive/architecture/05-decisions-D39-106-123.md`, где тела D39.106 НЕТ, и греп по нему подтвердил бы эррату вакуумно; первый хит темы — только в D39.110). Строка была КАНДИДАТОМ и никогда не ратифицировалась, а живой канон решил ось иначе (п.2). - **Пере-открытие транспорта** (gRPC/сокет/брокер/пуш) — `research/25`, у каждой альтернативы 0 diff --git a/docs/research/25-seam-cold-review.md b/docs/research/25-seam-cold-review.md index e01e84b0..c80663d8 100644 --- a/docs/research/25-seam-cold-review.md +++ b/docs/research/25-seam-cold-review.md @@ -1,10 +1,10 @@ # 25 · Шов движок↔платформа: ратифицированная форма и почему не иначе -> ⚠ **ЭРРАТА D39.156 (23.08): «поднятие потолка ФАЙЛОМ через atomic rename» (§ниже, строка 69) НИКОГДА НЕ РАТИФИЦИРОВАЛОСЬ.** +> ⚠ **ЭРРАТА D39.156 (23.08): «поднятие потолка ФАЙЛОМ через atomic rename» (пункт ниже, дословно `потолка — файлом через atomic rename на границах юнитов`) НИКОГДА НЕ РАТИФИЦИРОВАЛОСЬ.** > Отчёт относит этот механизм к носителям решения D39.106 — в теле D39.106 его НЕТ вовсе (проверено грепом по слайсу -> `archive/architecture/05-decisions-D39-106-123.md`, первый хит темы — только в D39.110). Строка была КАНДИДАТОМ панели, +> живого тела D39.106 — `../architecture/05-decisions-log.md:232`=`ШОВ: прогон переживает деплой платформы`; первый хит темы — только в D39.110. ⚠ Испр. 23.08: прежняя редакция ссылалась на слайс `archive/architecture/05-decisions-D39-106-123.md`, где тела D39.106 НЕТ — греп по нему подтвердил бы эррату вакуумно). Строка была КАНДИДАТОМ панели, > а живой канон решил ось иначе: **потолок едет со стартом прогона и после не меняется**, лекарство при упоре — НОВЫЙ прогон -> (`platform/internal/runs/reconcile.go:1222-1227`=`answering 202 with the run in the state`). Читать строку 69 как отвергнутого +> (`platform/internal/runs/reconcile.go:1222-1227`=`answering 202 with the run in the state`). ⚠ Испр. 23.08: прежняя редакция звала «строку 69», но вставка самого баннера сдвинула нумерацию — 69-я строка теперь несёт ЖИВОЙ денежный механизм («холд не освобождается по выходу юнита»), и исполнение прежней инструкции пометило бы отвергнутым НЕ ТО. Номера строк здесь больше не называем, только подстроку. Читать НАЗВАННЫЙ ВЫШЕ пункт как отвергнутого > кандидата, а не как обязательный механизм; закон входной двери шва (`../architecture/17-seam-inbound-law.md` п.2) это фиксирует: > посреди прогона внутрь идёт ТОЛЬКО сигнал. diff --git a/platform/docs/PLATFORM_P8_REVIEW_SESSION_PROMPT.md b/platform/docs/PLATFORM_P8_REVIEW_SESSION_PROMPT.md index ef5b6090..2335d06c 100644 --- a/platform/docs/PLATFORM_P8_REVIEW_SESSION_PROMPT.md +++ b/platform/docs/PLATFORM_P8_REVIEW_SESSION_PROMPT.md @@ -39,7 +39,7 @@ ## 2. Зона и git -Пишешь только в `platform/`. Отчёт и вопросы — `platform/docs/platform-PROGRESS.md`; строки находок — `platform/docs/DEFECT_REGISTER.md` (это твой файл). **Ты не коммитишь** — лендит оркестратор (канон — `CLAUDE.md`, таблица зон). Чужие зоны read-only; живой полигон (`eval/`, `docs/experiments/`) не трогать; `.env` не читать; git не трогать вовсе — ни `add`, ни `commit`, ни `reset`/`checkout`/`restore`/`clean`/`stash`/`rebase`/`push`/`merge`/`switch`/`rm`/`mv`; файлы застейдженными не оставлять. ⚠ В дереве живёт НЕЗАКОММИЧЕННАЯ работа полигона (13 изменённых файлов и 6 новых под `eval/`) — не трогать и не «прибирать». Индекс на 22.08 чист (прежняя редакция писала «частично застейдженная» — испр.), но полигон-сессия жива и стейдж может появиться в любой момент. +Пишешь только в `platform/`. Отчёт и вопросы — `platform/docs/platform-PROGRESS.md`; строки находок — `platform/docs/DEFECT_REGISTER.md` (это твой файл). **Ты не коммитишь** — лендит оркестратор (канон — `CLAUDE.md`, таблица зон). Чужие зоны read-only; живой полигон (`eval/`, `docs/experiments/`) не трогать; `.env` не читать; git не трогать вовсе — ни `add`, ни `commit`, ни `reset`/`checkout`/`restore`/`clean`/`stash`/`rebase`/`push`/`merge`/`switch`/`rm`/`mv`; файлы застейдженными не оставлять. ⚠ В дереве живёт НЕЗАКОММИЧЕННАЯ работа полигона (состав НЕ дублируем здесь — он менялся под руками уже трижды; смотри пинг оркестратора в `docs/PROGRESS.md`, секция «Полигон», и сверяй командой `git status --short -- eval/` ПЕРЕД работой) — не трогать и не «прибирать». Индекс на 22.08 чист (прежняя редакция писала «частично застейдженная» — испр.), но полигон-сессия жива и стейдж может появиться в любой момент. **⚠ РОВНО: кода не менять.** Ни одной правки `.go`, ни «заодно поправил очевидное». Причина не бюрократическая: правка, внесённая тем же, кто нашёл, лишает следующий пак независимой проверки, а тебя — чистого измерения «сколько тут дефектов». Исключение одно — временные правки в КОПИИ дерева ради посадки мутаций (см. §5), в репозиторий они не возвращаются. diff --git a/platform/docs/platform-PROGRESS.md b/platform/docs/platform-PROGRESS.md index 0abf4846..c17915b7 100644 --- a/platform/docs/platform-PROGRESS.md +++ b/platform/docs/platform-PROGRESS.md @@ -36,9 +36,12 @@ *(Промт `P8-REVIEW` жив и ждёт слова владельца. ⚠ Правка к этой же записи, 23.08: я объявил в ней ДВА дефекта промта — реальным оказался ОДИН и он ПОЧИНЕН (миграция `00019` названа денежной, хотя это -`00019_read_model_debt.sql`, долг read-модели; ось 1 по ней ушла бы не туда). Второй — «протухший счёт -чужого дерева в шапке» — при проверке НЕ воспроизвёлся: грепа `13 изменённых|6 новых|2166` в промте ноль, -протухал он в `docs/PROGRESS.md` и там уже исправлен. Записываю, потому что обещание зоне, исполненное +`00019_read_model_debt.sql`, долг read-модели; ось 1 по ней ушла бы не туда). ⚠⚠ **Второй дефект РЕАЛЕН, и моё прежнее «не воспроизвёлся» было ЛОЖЬЮ — снимаю её здесь же.** +Я написал зоне «грепа `13 изменённых|6 новых|2166` в промте ноль». Греп СОВПАЛ: строка 42 промта несёт +«в дереве живёт НЕЗАКОММИЧЕННАЯ работа полигона (13 изменённых файлов и 6 новых под `eval/`)». Я обрезал +вывод грепа по ширине, увидел начало строки и принял совпадение за отсутствие. Счёт при этом действительно +протух: на 23.08 в дереве **14 изменённых и 5 неотслеженных**. Дефект ПОЧИНЕН тем же заходом — числа из промта +убраны, он теперь ссылается на единственный носитель счёта, а не держит свою копию. Записываю, потому что обещание зоне, исполненное наполовину без объяснения, читается как невыполненное.)* - **P8-FIX ПРИНЯТ И ЗАЛЕНДЕН оркестратором №18 (22.08).** Тело приёмки — ратифицированная нота