diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 3a478ecc..988d9b09 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,6 +1,6 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-16, голова D39.144 — модель подписи банка: ОДИН ОК всему банку (слово владельца), гейт полноты снят с канона, вопрос BankTerm.decision растворён, строка 191; D39.143 — дофикс батча принят, батч отработан целиком, P7 РАЗБЛОКИРОВАН; D39.142 — приёмка батча; D39.141 — реструктуризация промта оркестратора (сжатие −59%, форма «ситуация → инструкция», чек-лист промтов); D39.140 — аудит бэклога: ПОТЕРЬ НЕТ (200/200 ID со следом), 9 бесхозных хвостов получили носителей (188–190, дописки 172-г/28, Б-108×3); D39.139 — подрезка хвостов D-лога/PROGRESS + свип планировочных доков; D39.138 — контракт-ревью ПРИНЯТО (research/28: 4 опровергателя, 42 улики, 0 опровергнуто), решения владельца 16.08 ратифицированы, батч 0.3.0 заказан отдельной спек-сессией (строка 183, промт — очередь №17); пере-пин DeepSeek — D39.137; пакет слов владельца — D39.136; приёмка S4 + контракт 0.2.3 в каноне — D39.135; приёмка бэкенд-migrate — D39.134; передача №16→№17 — D39.133; приёмки S3.6/S3.7 — D39.127/129, P5 — D39.130, эмиттера — D39.131, P6+дофикс — D39.132). Оркестраторов ДВА (решение владельца 07.08): этот — движок/платформа/фронт/доки; параллельный (РОЛЬЮ, без номера — счётчик один, D39.112 п.6) — приёмка полигона. Одновременно не запускаются; CURRENT-STATE ведут оба, чужие строки не трогают. Норма изоляции панелей после инцидента отката чужих файлов — D39.113, гардрейлы в CLAUDE.md. +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-16, голова D39.145 — промт P7 пересобран (опровергатель: демонтаж построенного гейта полноты заказан, канон дочищен эрратой 16.08-д); D39.144 — модель подписи банка: ОДИН ОК всему банку (слово владельца), гейт полноты снят с канона, вопрос BankTerm.decision растворён, строка 191; D39.143 — дофикс батча принят, батч отработан целиком, P7 РАЗБЛОКИРОВАН; D39.142 — приёмка батча; D39.141 — реструктуризация промта оркестратора (сжатие −59%, форма «ситуация → инструкция», чек-лист промтов); D39.140 — аудит бэклога: ПОТЕРЬ НЕТ (200/200 ID со следом), 9 бесхозных хвостов получили носителей (188–190, дописки 172-г/28, Б-108×3); D39.139 — подрезка хвостов D-лога/PROGRESS + свип планировочных доков; D39.138 — контракт-ревью ПРИНЯТО (research/28: 4 опровергателя, 42 улики, 0 опровергнуто), решения владельца 16.08 ратифицированы, батч 0.3.0 заказан отдельной спек-сессией (строка 183, промт — очередь №17); пере-пин DeepSeek — D39.137; пакет слов владельца — D39.136; приёмка S4 + контракт 0.2.3 в каноне — D39.135; приёмка бэкенд-migrate — D39.134; передача №16→№17 — D39.133; приёмки S3.6/S3.7 — D39.127/129, P5 — D39.130, эмиттера — D39.131, P6+дофикс — D39.132). Оркестраторов ДВА (решение владельца 07.08): этот — движок/платформа/фронт/доки; параллельный (РОЛЬЮ, без номера — счётчик один, D39.112 п.6) — приёмка полигона. Одновременно не запускаются; CURRENT-STATE ведут оба, чужие строки не трогают. Норма изоляции панелей после инцидента отката чужих файлов — D39.113, гардрейлы в CLAUDE.md. > - **Эра №15 закрыта — семь приёмок, все ПРИНЯТЫ и залендены**; лента, коммиты и разборы — D39.109–123 (D-лог) и реестр нот `architecture/05-decisions-index.md`; снимок прежних бюллетеней этой шапки — архив-слайс `-08-02-04`. > - **ЖИВОЕ:** полигон эксп-22/23 — дерево ЗАЛЕНДЕНО 10.08 с ревью-шапками приёмки №16 (числа подтверждены независимым пересчётом; **выводы НЕ ратифицированы** — владелец 10.08 признал постановку неполной), **фаза Д ИДЁТ (заказ 10.08)**: промт `docs/POLYGON_EXP2223_REDO_SESSION_PROMPT.md` (staged полигоном); деньги фазы: расход $6.0024, цепь потолков $4.50→$5.40→$6.74 — **САНКЦИОНИРОВАНО словом владельца 15.08 напрямую оркестратору №17** («потолок поднимал я, мы с полигоном в синке»); замена ja-книги на `enkan_no_hate_ja` — им же, СТОП ja-оси снят (ход — секция «Полигон» ниже); при ратификации фазы Д в D-ноту: декой-правило + обязательный кросс-семейный опровергатель приёмки (одобрены владельцем 10.08) · фронт: **ЗОНА ЗАМОРОЖЕНА словом владельца (D39.136 п.2)** после принятого S4 (D39.135, `267aa35`: путь «файл → загрузка → разбор → запуск с потолком → прогресс» в мире моков, контракт **0.2.3 В КАНОНЕ**); разморозка = лендинг P7 + ответы гейта S5 (~~В-10~~ ЗАКРЫТ 16.08 «вежливость», D39.138 п.2к · пере-заказ фраз В-11 — форма дана ревью 28: клиент рисует фразу по машинному `code`, Б-1/§8а, зонная половина — после батча 183); фикс-лист ФС-1..12 + Ф-63/Ф-28 (одобрены) — вход первого касания зоны; живой smoke против дев-стенда — легитимен и во фризе; i18n-механизм построен (ПТ-36 🔶) · **платформа P5 ИСПОЛНЕНА и ПРИНЯТА в три раунда (D39.130, `69d485a`)**: интейк книг `POST /books` с сентинелом хранилища · стоп/резюм с намерением в Postgres · Prometheus · Go-floor 1.26.6; развилка `book.yaml`: бета = форма Б (стройка следующим касанием зоны), движковая форма = строка 170 · **эмиттер ИСПОЛНЕН и ПРИНЯТ (D39.131, `9cfe080`, дофикс до лендинга)**: `events.jsonl` (StreamVersion 1.1) + exit 4 потолок / 5 graceful / полоса отказов 10–19 + пер-вызовный репэйр-гейт; строки 103/135/165/102 закрыты; движковая половина PD-113/PD-196 построена D39.131 · **платформа P6 + дофикс ИСПОЛНЕНЫ и ПРИНЯТЫ (D39.132)**: потребительская половина шва (exit-коды одним словарём, `unit_done` присваиванием, scope потолка, TM_TRACE_ID против усыновления) + интейк формы Б + дев-стенд с сидом — **PD-113/PD-196 ЗАКРЫТЫ, шов закрыт с обеих сторон, major в регистре платформы 0**; деплой-порядок против деадлока v15 записан и исполним (`tmplatformctl books --migratable`) · **`tmctl migrate` ИСПОЛНЕН и ПРИНЯТ (D39.134, `d55edd4`; панель 6 линз, 6/6 мутаций приёмки пойманы)**: exit 13 ФИНАЛИЗИРОВАН, строка 174 закрыта, 175 пере-скоуплена на дальний остаток, новая 177 — гигиена restore point; деплой эмиттер-бинаря РАЗБЛОКИРОВАН схемно (⚠ рантбук деплоя живым `migrate` end-to-end ещё НЕ гонялся — предусловие первого выката, пинг платформе 15.08) · эскроу (136) — следующим денежным промтом (П-18). > - **Открыто на владельце:** **развязка git с origin** (темп-коммит `535581d` откачен локально и пересобран чистыми коммитами — D39.134 п.0; локальная линия ИСТИННА, 15 коммитов поверх `b751ac6`, origin держит старую линию ⇒ force-push вашей рукой; не пуллить) · **запуск спек-сессии батча 0.3.0 — промт ВЫДАН 16.08** (`docs/CONTRACT_BATCH_SESSION_PROMPT.md`; первым) · **запуск P7 — промт ВЫДАН 16.08** (`platform/docs/PLATFORM_P7_SESSION_PROMPT.md`; строго ПОСЛЕ лендинга батча — гейт §1 промта) · Приложение А контракта (148: реконструкция с баннером или заново; карта «код → фраза» теперь пишется по словарю Б-1 батча) · продуктовое слово «остановлена: лимиты» (В-3) · ~~К-13/Ф-31~~ пере-суждён ревью 28 и НЕ опрокинут (§4 №9: с уходом дневной оси различие перестало быть продуктовым; остаток-описание `:879` — батч 183) · В-4/Ф-30 (глава без заголовка) · ~~фри-тир PD-104~~ ЗАКРЫТ словом владельца 16.08 (D39.138 п.2л: грант 0 на бете, начисление руками; возврат $5 — с суточным потолком при платежах; исполнение — P7-однострочник) · ~~порог 116~~ ЗАКРЫТ D39.136 п.6б (порог выборкой, по делегации) · мини-проба флора 44 (одобрена, промт не выдан) · подпись денежного шага 46 · лист В-3+К-6 · авто-резюм paused (вопрос платформы) · ~~В-11~~ ПЕРЕ-ЗАКАЗ 15.08: фразы НЕ утверждены — конкретнее причину, граница ПТ-33 пере-читана «охранять алгоритмы, не минорку» (D39.136 п.4а; новые фразы — вход S5; мультиязычность фраз всех зон РЕШЕНА ревью 28: Б-1 вариант B — клиент рисует по машинному `code`, батч 183) · ~~В-10~~ ЗАКРЫТ 16.08: «вежливость» (D39.138 п.2к — контракта не касается, `sense` обязателен, размытие — визуальное дело фронта) · ~~Ф-62~~ РЕШЕНО: `PATCH /books/{id}` title-only + `DELETE` (ревью 28 Б-5, батч 183; правка — отображение, до брифа не доезжает) · ~~Ф-63~~ ОДОБРЕНА перекраска 15.08 (первым касанием зоны) · ~~строка 172: вендор-сессия DeepSeek~~ ОТРАБОТАЛА и ПРИНЯТА (D39.137, `76049bb`: пик запинен, потолки защищают) — **на владельце остались: схема time-based** (доклад §5 отчёта; рекомендация — пик оставить + операционное правило «прогоны не стартуют в 01–04/06–10 UTC», scheduler не начинать до ответа вендора об отметке времени тарификации) **и вход ратификации фазы Д: посылка «dspro дешевле glm» в пике перевёрнута** (×1.26 дороже, D39.137 п.4) · ~~СТОП ja-оси фазы Д~~ СНЯТ 15.08 (замена книги на `enkan_no_hate_ja` — рука владельца) · **возражение Sol по проходу `tier` эксп-23** (пере-судить починенным ригом или оставить с записанным возражением — PROGRESS «Полигон»; вес вырос: Д14.10 показал нули прибора claude на реальной инверсии смысла) · ~~поле `title` в `BookIntake`~~ РЕШЕНО 14.08: ратифицировано в 0.2.3 (замечание 12 S3.5, владелец подтвердил; исполняет S4) · фронт-вопросы зонного журнала: В-7 (плотность интерфейса; держит и Ф-54 — обрезку центра на зуме) · В-8 (слово состояния в дереве) · **В-9 (какие языки интерфейса обещает продукт — механизм готов, ПТ-36)** · Ф-38 (вкладка «Замечания») · ~~граница ПТ-33 для полей `BankTerm`~~ ЗАКРЫТ 15.08: полей НЕ заводить, смысла хватает (D39.136 п.4б; sense коротковат — строка 178) · ~~санкция расхода фазы Д~~ ДАНА 15.08 · ~~дизайн-ратификация 160/161~~ ДАНА 15.08 (D39.136 п.3: Этап 0 паком, 161 — дизайн-паком с мандатом качества) · ~~PD-203~~ РАТИФИЦИРОВАН (D39.136 п.6а: флаг аккаунта только по аккаунт-причинам) · ~~Ф-28~~ ОДОБРЕН бамп пинов 15.08 (первым касанием зоны) · ~~Ф-56/Ф-57/Ф-61~~ ОТВЕЧЕНЫ ревью 28 (§6: поток на книгу Б-6а · `/capabilities` Б-2 · машинный `code` Б-1; исполнение — батч 183). diff --git a/docs/architecture/05-decisions-index.md b/docs/architecture/05-decisions-index.md index d76fbd8b..f5e23c9c 100644 --- a/docs/architecture/05-decisions-index.md +++ b/docs/architecture/05-decisions-index.md @@ -1,4 +1,4 @@ -# Реестр D-нот — карта актуальности v2 (D1–D39.144; строка 167; титул — носитель головы, бампать при каждом аппенде — испр. оркестратором №17 15.08 по аудиту: отставал на четыре ноты) +# Реестр D-нот — карта актуальности v2 (D1–D39.145; строка 167; титул — носитель головы, бампать при каждом аппенде — испр. оркестратором №17 15.08 по аудиту: отставал на четыре ноты) > Одна строка на КАЖДУЮ ноту журнала решений: № · дата · суть · статус · где тело · темы. Ведёт оркестратор при лендингах: новая нота = новая строка ТЕМ ЖЕ коммитом (полноту сторожит `docs/scripts/counts.py --check`). Суть и статус здесь — НАВИГАЦИЯ, не контракт: при конфликте побеждает ТЕЛО ноты (живой [`05-decisions-log.md`](05-decisions-log.md) → слайсы `../archive/architecture/05-decisions-*.md`). Несущие эрраты к фактам старых нот живут в шапке живого D-лога — их читать ОБЯЗАТЕЛЬНО, реестр их не дублирует. Темы (для грепа оси «какой закон по X»): деньги · шов · банк · промпт · судья · гейты · контракт · платформа · фронт · полигон · ToS · общность · процесс · нарезка · голос · инфра · модели. > Родословная: прозаическая карта D1–D39.28 (ревизии D31–D38.2) пересобрана в реестр докс-паком 167 (09.08.2026, №16): извлечение 6+6 агентов по worksheet `../archive/reports/DOC_AUDIT_INVENTORY_2026-08-09.md`, полнота сверена скриптом против заголовков всех шести файлов. «тело: жив» = живой D-лог; «слайс N» = `../archive/architecture/05-decisions-N.md`. @@ -197,3 +197,4 @@ | D39.142 | 16.08 | Приёмка батча 0.3.0 (8d82096, панель 3 линз: слепая сверка — потерь 0; холодный потребитель — анти-утечка чиста, 5 блокеров триажированы; аудит отчёта — 25+ клеймов сошлись, 9 чисел занижены): канон 0.3.0 в каноне; ратифицированы отступления (поток один книжный, Note.code, content_refused, единый page_size_default); дофикс ФБ-1..10 заказан аддендумом промта (SSE-форма, петля реконнекта, note через reconnect, Revision-противоречия); зеркало фронта временно отстаёт ратифицированно; владельцу — BankTerm.decision (рекомендация заводить); P7 после дофикса | ЖИВОЕ: дофикс у сессии батча; строка 183 пере-скоуплена | жив | контракт приёмка платформа фронт | | D39.143 | 16.08 | Дофикс батча принят (дифф прочитан целиком, гейты пере-раны): все ФБ-1..10 закрыты — SSE-форма кадра однозначна, петля реконнекта убита id:0, note-гарантия сужена до соединения + обязательное дельта-чтение, Revision одна модель (водяной знак = наименьшая ревизия обхода), resume-таблица без нового enum, приоритет носителей «нет кредита», processing_failed; числа отчёта пере-раны, вывод о доле прозы честно перевёрнут (42→47%); отступления ратифицированы (§5д ужато на месте, unverified снят с провода); батч отработан целиком, промт в архиве, P7 разблокирован | ЖИВОЕ: P7 — запуск владельцем; владельцу — BankTerm.decision (D39.142 п.4) | жив | контракт приёмка платформа | | D39.144 | 16.08 | Модель подписи банка — слово владельца напрямую: подписывается ВЕСЬ банк одним ОК (пер-термная масс-подпись — инерция контрактной линии, движок и так авто-продолжает с неподписанным D39.42 п.3); канон поправлен микро-правкой (409-полноты снят с resume, pending_decisions информационный, bank_decisions_incomplete удалён, гейты пере-раны); пост-ридинговые правки банка → пере-генерация по вхождениям — направление, механику не проектировать до полигона; строка 191, аддендум P7, пинг фронту; вопрос BankTerm.decision снят как стоящий на ложной посылке | ЖИВОЕ: строка 191; P7 — запуск владельцем | жив | контракт банк владелец фронт платформа | +| D39.145 | 16.08 | Промт P7 пересобран (слово владельца: перечитать после батча, без воды): два рубежа D39.141 — автор-перечтение (7 протуханий, худшее «кадр конца разбора» против канона) + опровергатель (8 HIGH: построенный гейт полноты reconcile.go:934-938 — демонтаж заказан явно; недочистка D39.144 — эррата 16.08-д, канон/компаньон дочищены; экспорт в P8 явно; structure_version/genre/halt_reason/heading/Note.code влиты); форма — конкретика ~120 строк, правило пофайлового диффа против required канона; PD-241 императивом | ЖИВОЕ: P7 готов, запуск — слово владельца | жив | платформа промпт контракт процесс | diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index 3206f8a3..af37c165 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,10 +1,11 @@ -# Журнал решений оркестратора — контракт D1–D39.144 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`) +# Журнал решений оркестратора — контракт D1–D39.145 (живой файл: карта · эрраты · живые тела · голова 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 живёт ниже в этом файле (голова D39.106+). > ⚠ **Эррата 15.08 (D39.132):** D39.131 п.2(а) перечисляет полосу отказов «10 конфиг · 11 источник · 12 лок · 19 безымянный» — читать через D39.132 п.2(г): полоса ДОПОЛНЕНА **exit 13 = `schema_mismatch`** (~~обе зоны сошлись на числе независимо~~; ратифицирован направлением, ФИНАЛИЗИРОВАН приёмкой D39.134). > ⚠ **Эррата 15.08-б (D39.134 п.2а, вписана по аудиту корпуса):** клейм «зоны сошлись на 13 НЕЗАВИСИМО» (строкой выше и в D39.132 п.2г) СНЯТ — платформа прочитала число из незакоммиченного дерева движка и сама это записала (`platform/internal/ingest/exit.go:63-64`); на силу ратификации не влияет. > ⚠ **Эррата 15.08-в (D39.136 п.5):** форма контракт-ревью «фазный воркфлоу оркестратора» ОТМЕНЕНА словом владельца тем же днём — исполняет ОТДЕЛЬНАЯ СЕССИЯ со своим онбордингом (норма D39.120 п.2; оркестратор — автор части ратификаций 0.2.3, author≠reviewer); запущенная воркфлоу-фаза 1 остановлена, её результаты выброшены; промт — `docs/CONTRACT_REVIEW_SESSION_PROMPT.md`. +> ⚠ **Эррата 16.08-д (D39.144 п.3):** клейм «`bank_decisions_incomplete` в файле 0» проверял ТОКЕН, а не ПРАВИЛО — четыре места канона/компаньона продолжали нести снятый гейт полноты прозой (`BankDecisionsResult.complete` «stop clears ONLY on a complete set» · `BankPage.complete` «can be cleared» · компаньон §2.14 и А-2); дочищены 16.08 при пересборке промта P7 (нашёл опровергатель промта). Плюс факт, который D39.144 не назвала: гейт полноты УЖЕ ОТЛИТ в коде платформы (`internal/runs/reconcile.go:934-938`) — его ДЕМОНТАЖ заказан P7 явным пунктом. > ⚠ **Эррата 16.08-г (D39.138 п.2а, часть «TermStatus снять с провода»):** ОПРОКИНУТА пост-ревью АВТОРА отчёта research/28 (по заказу владельца, речек оркестратора уликами): обоснование Б-0 «ни один экран их не рисует» подменяло «экрана подписи ещё НЕТ» — ось статуса ПРОДУКТОВАЯ (спека `:1070-1072`: «главный фильтр работы» S5; шов клиента уже потребляет — `frontend/src/api/vocabulary.ts:159-163`). Читать так: ось `TermStatus` ОСТАВИТЬ, движковые слова значений переименовать в продуктовые; «`TermOrigin` снять/переименовать» (`ruby` — паро-специфика) — В СИЛЕ. Контекст метода: Б-0/Б-11а/Б-23 добавлены в отчёт ПОСЛЕ раунда адверсариального судейства сессии — их основания проверять строже (помечено в ревью-шапке отчёта). > ⚠ **Навигация (актуализация 07.08, эра D39.1xx):** append-only-дисциплина (D23.3) означает, что > НЕВЕРНЫЙ ФАКТ внутри старой ноты не переписывается, а получает эрратау — и тогда он опасен ровно @@ -446,3 +447,9 @@ **3. Исполнено этой нотой (канон 0.3.0, микро-правка оркестратора по прямому слову владельца; гейты пере-раны — spectral/генератор зелёные, `bank_decisions_incomplete` в файле 0):** resume снимает банк-стоп при ЛЮБОМ состоянии решений (таблица resumeRun); `pending_decisions`/`complete` — информационные, «подпись = один акт над всем банком» записана на чтении банка; `stop_for_signing` описан как «пауза посмотреть → один resume»; `bank_decisions_incomplete` удалён из причин 409. Версия остаётся 0.3.0 — спека ещё никем не потреблена (P7 не стартовал). **4. Следствия:** строка **191** заведена (движковая граница паузы · канал P7 без гейта полноты · пост-ридинг = направление после полигона); аддендум в промт P7 («полноту не отливать в код»); пинг фронту (Ф-44/Ф-45/Ф-46 при разморозке читать через модель); **вопрос BankTerm.decision (D39.142 п.4) СНЯТ ОРКЕСТРАТОРОМ** — он стоял на ложной посылке «длинная пер-термная сессия, которую надо резюмить»; в модели одного ОК сценария «какие 17 из 300 решены» не существует. (16.08.2026, оркестратор №17) ✅ + +## D39.145 — ПРОМТ P7 ПЕРЕСОБРАН по слову владельца (перечитать после батча · без воды) + опровергатель промта: канон дочищен от снятого гейта, демонтаж построенного гейта заказан явно (16.08). ✅ + +**1. Два рубежа нормы D39.141 исполнены:** механическая сверка (11/11 блоков) + опровергатель-субагент. Автор-перечтение поймало 7 протуханий (худшее: промт заказывал «кадр конца разбора», которого в заленденном каноне НЕТ — ратифицированное отступление батча); опровергатель — 8 HIGH сверх того, два за пределами промта: (а) **гейт полноты банка уже построен** (`reconcile.go:934-938`) — запрет «не отливай» был вырожденно исполним при живом старом гейте, демонтаж теперь заказан явным пунктом; (б) **недочистка D39.144** — эррата 16.08-д, канон/компаньон дочищены, spectral зелёный. Остальные HIGH влиты: экспорт явно отложен в P8 · structure_version во всём ядре · снятие `genre` с провода (allowlist) · `Usage.halt_reason` со своим словарём · ловушка `heading` (проецировать null до строки 160) · ◆-словарь `Note.code`. Отклонено с уликой: «лимит попыток класса 2 потерян и в каноне» — он в каноне есть (`:2394-2395`). + +**2. Форма промта — по слову владельца «конкретика без прозы»:** пересобран с ~170 до ~120 строк, каждый пункт = «что сделать → где форма/факт → чего не делать»; правки построенного получили ПРАВИЛО (пофайловый дифф wire-структур против required канона) + именованный минимум; PD-241 (D39.132 п.2д «следующим касанием» — касание и есть P7) возвращён императивом. (16.08.2026, оркестратор №17) ✅ diff --git a/docs/architecture/14-api-contract/README.md b/docs/architecture/14-api-contract/README.md index 03bb406a..4e55daf1 100644 --- a/docs/architecture/14-api-contract/README.md +++ b/docs/architecture/14-api-contract/README.md @@ -307,8 +307,10 @@ rejected» (`pipeline/mining.go:201`). Отсюда: решение на тер - **`promote` → `approve`.** `promote`/`decline` — дословно глаголы оператора майнера из строки выше, и `promote` порождал `status: approved` — два слова на один акт. Теперь `approve` → `approved`. -- **Снимок стопа переехал в ЧТЕНИЕ банка** (Б-14а). `complete` — поле, по которому решается, можно - ли предлагать «продолжить» (`resumeRun` отвечает 409 при неполном наборе), — существовало только в +- **Снимок стопа переехал в ЧТЕНИЕ банка** (Б-14а). ⚠ Пере-писано D39.144 (модель владельца 16.08: + подпись — ОДИН акт над всем банком): `complete`/`pending_decisions` — ИНФОРМАЦИОННЫЕ, `resumeRun` + снимает стоп при ЛЮБОМ состоянии решений, 409-полноты НЕТ. Прежняя формулировка — «поле, по + которому решается, можно ли предлагать „продолжить“» — существовало только в квитанции POST. Экран, перезагруженный посреди стопа, мог прочитать ВЕСЬ банк и не узнать, сколько решений осталось; единственная реализация выводила признак как `left === 0` (`frontend/src/mock/handlers.ts:203-204`) — инвариант, которого контракт не объявлял. Теперь @@ -913,7 +915,7 @@ heartbeat · форма `id` кадра. Сжатие как ТРЕБОВАНИ | `run_in_flight` | 409 | `pgstore.ErrRunInFlight` (`v0.go:548`) | | `book_not_ready` | 409 | `runs.ErrBookNotReady` (`v0.go:550`) | | `run_not_stoppable` | 409 | `runs.ErrNotStoppable` (`v0.go:554`) | -| `run_not_resumable` | 409 | `runs.ErrNotResumable` (`v0.go:556`); `cause`: `bank_decisions_incomplete` · `ceiling_reached` | +| `run_not_resumable` | 409 | `runs.ErrNotResumable` (`v0.go:556`); `cause`: `ceiling_reached` (⚠ `bank_decisions_incomplete` удалён D39.144 — гейта полноты нет; построенный гейт `reconcile.go:934-938` ДЕМОНТИРУЕТСЯ в P7) | | `ceiling_unavailable` | 409 | `runs.ErrCeilingOutOfBounds` + `pgstore.ErrInsufficientCredit` (`v0.go:558`); `cause`: `bounds_moved` · `credit_held`; несёт `blocked` | | `idempotency_conflict` | 409 | форма заведена батчем; реализация — P7 | | `content_refused` | 400 | К-9; прескрин не построен (ПТ-16, строка 94). Отказ целой КНИГИ приходит не сюда, а состоянием `rejected` + `reject_reason` | diff --git a/docs/architecture/14-api-contract/openapi.yaml b/docs/architecture/14-api-contract/openapi.yaml index 81770d1f..7f390bd0 100644 --- a/docs/architecture/14-api-contract/openapi.yaml +++ b/docs/architecture/14-api-contract/openapi.yaml @@ -1836,8 +1836,9 @@ components: complete: type: boolean description: | - The set is complete. The stop clears ONLY on a complete set, so a client shows - "N of M decided" and does not offer to continue while this is `false`. + The set is complete. INFORMATIONAL, never a gate: signing is one act over the whole + bank, and `resume` lifts the stop with the decisions as they stand. A client may + show "N of M decided"; it never disables the continue action on this. terms: type: array items: { $ref: '#/components/schemas/BankTerm' } @@ -1894,7 +1895,9 @@ components: description: How many proposed terms still have no decision. complete: type: boolean - description: The set is complete and the stop can be cleared. + description: | + The set is complete. Informational, never a gate — `resume` lifts the stop with the + decisions as they stand. RunRequest: type: object