From 33b4aa65993298aba0692389c4a00ea3c6fd72a0 Mon Sep 17 00:00:00 2001 From: heaven Date: Sat, 15 Aug 2026 04:47:22 +0300 Subject: [PATCH] Ratify D39.132: land the P6 acceptance into the decisions log, index, current state, backlog row 176 and topical docs; archive-pointing README --- docs/PROGRESS.md | 9 +++++---- docs/README.md | 2 +- docs/architecture/05-decisions-index.md | 1 + docs/architecture/05-decisions-log.md | 10 +++++++++- docs/architecture/15-money-path.md | 4 ++-- docs/architecture/16-events-emitter.md | 2 +- docs/product-requirements.md | 2 +- 7 files changed, 20 insertions(+), 10 deletions(-) diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 48c1f693..88bf4a6b 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,14 +1,14 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-14, голова D39.131; приёмки S3.6/S3.7 — D39.127/129, приёмка P5 — D39.130, приёмка эмиттера — D39.131). Оркестраторов ДВА (решение владельца 07.08): этот — движок/платформа/фронт/доки; параллельный (РОЛЬЮ, без номера — счётчик один, D39.112 п.6) — приёмка полигона. Одновременно не запускаются; CURRENT-STATE ведут оба, чужие строки не трогают. Норма изоляции панелей после инцидента отката чужих файлов — D39.113, гардрейлы в CLAUDE.md. +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-15, голова D39.132; приёмки 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 полигоном), потолок фазы $4.50 словом владельца (ход — секция «Полигон» ниже); при ратификации фазы Д в D-ноту: декой-правило + обязательный кросс-семейный опровергатель приёмки (одобрены владельцем 10.08) · фронт: S3.5–S3.7 ИСПОЛНЕНЫ и ПРИНЯТЫ (D39.127/D39.129, лендинги `57e6bd1`/`3e465bd`), контракт **0.2.2** в каноне, i18n-механизм построен (ПТ-36 🔶) — **гейт S4 ПАЛ (P5 принят D39.130): S4-промт по слову владельца** (вход: экраны библиотеки/загрузки на живом `POST /books` · находки приёмки S3.7 · спек-правка 0.2.3) · **платформа 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 построена — остаток у ПЛАТФОРМЫ (П-15**: маппинг exit-кодов, `refusedTheSource` по коду, unit_done присваиванием, scope потолка**)**; ⚠ **деадлок деплоя v15 — строка 174, решить ДО деплоя нового бинаря на платформу** · эскроу (136) — следующим денежным промтом. -> - **Открыто на владельце:** Приложение А контракта (148: реконструкция с баннером или заново) · продуктовое слово «остановлена: лимиты» (В-3) · К-13/Ф-31 (paused_reason один — «свой потолок» и «нет кредита» неразличимы) · В-4/Ф-30 (глава без заголовка) · фри-тир PD-104 (ноль на бете против автогранта $5 с суточным потолком) · порог 116 · мини-проба флора 44 (одобрена, промт не выдан) · подпись денежного шага 46 · лист В-3+К-6 · авто-резюм paused (вопрос платформы) · запуск S4-промта фронта / следующего платформенного касания (форма Б + П-15 половина шва) · **решение по строке 174 (деадлок деплоя v15 — до деплоя эмиттер-бинаря)** · **СТОП ja-оси фазы Д** (гардрейл 18+ на `isekai_majutsushi_jp`, 3 чанка из 184: выбросить помеченное или сменить книгу) · **возражение Sol по проходу `tier` эксп-23** (пере-судить починенным ригом или оставить с записанным возражением — PROGRESS «Полигон») · ~~поле `title` в `BookIntake`~~ РЕШЕНО 14.08: ратифицировано в 0.2.3 (замечание 12 S3.5, владелец подтвердил; исполняет S4) · фронт-вопросы зонного журнала: В-7 (плотность интерфейса; держит и Ф-54 — обрезку центра на зуме) · В-8 (слово состояния в дереве) · **В-9 (какие языки интерфейса обещает продукт — механизм готов, ПТ-36)** · Ф-38 (вкладка «Замечания») · граница ПТ-33 для добавочных полей `BankTerm` (черновик S3.5/S3.6, D39.127 п.2б). +> - **ЖИВОЕ:** полигон эксп-22/23 — дерево ЗАЛЕНДЕНО 10.08 с ревью-шапками приёмки №16 (числа подтверждены независимым пересчётом; **выводы НЕ ратифицированы** — владелец 10.08 признал постановку неполной), **фаза Д ИДЁТ (заказ 10.08)**: промт `docs/POLYGON_EXP2223_REDO_SESSION_PROMPT.md` (staged полигоном), потолок фазы $4.50 словом владельца (ход — секция «Полигон» ниже); при ратификации фазы Д в D-ноту: декой-правило + обязательный кросс-семейный опровергатель приёмки (одобрены владельцем 10.08) · фронт: S3.5–S3.7 ИСПОЛНЕНЫ и ПРИНЯТЫ (D39.127/D39.129, лендинги `57e6bd1`/`3e465bd`), контракт **0.2.2** в каноне, i18n-механизм построен (ПТ-36 🔶) — **гейт S4 ПАЛ (P5 принят D39.130): S4-промт по слову владельца** (вход: экраны библиотеки/загрузки на живом `POST /books` · находки приёмки S3.7 · спек-правка 0.2.3) · **платформа 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` — дерево бэкенда ЖДЁТ ПРИЁМКИ (строки 174/175 закрываются ею; exit 13 ратифицирован направлением) · эскроу (136) — следующим денежным промтом (П-18). +> - **Открыто на владельце:** Приложение А контракта (148: реконструкция с баннером или заново) · продуктовое слово «остановлена: лимиты» (В-3) · К-13/Ф-31 (paused_reason один — «свой потолок» и «нет кредита» неразличимы) · В-4/Ф-30 (глава без заголовка) · фри-тир PD-104 (ноль на бете против автогранта $5 с суточным потолком) · порог 116 · мини-проба флора 44 (одобрена, промт не выдан) · подпись денежного шага 46 · лист В-3+К-6 · авто-резюм paused (вопрос платформы) · приёмка S4 фронта (бежит) и бэкенд-migrate (дерево ждёт — закрывает 174/175) · **строка 172: цены DeepSeek ×2.3–4.7 с 16.08 — СТОП-решение и пере-пин, носителя-промта нет** · **СТОП ja-оси фазы Д** (гардрейл 18+ на `isekai_majutsushi_jp`, 3 чанка из 184: выбросить помеченное или сменить книгу) · **возражение Sol по проходу `tier` эксп-23** (пере-судить починенным ригом или оставить с записанным возражением — PROGRESS «Полигон») · ~~поле `title` в `BookIntake`~~ РЕШЕНО 14.08: ратифицировано в 0.2.3 (замечание 12 S3.5, владелец подтвердил; исполняет S4) · фронт-вопросы зонного журнала: В-7 (плотность интерфейса; держит и Ф-54 — обрезку центра на зуме) · В-8 (слово состояния в дереве) · **В-9 (какие языки интерфейса обещает продукт — механизм готов, ПТ-36)** · Ф-38 (вкладка «Замечания») · граница ПТ-33 для добавочных полей `BankTerm` (черновик S3.5/S3.6, D39.127 п.2б). > - **Сделано (сводно)** — снимок ленты закрытых эр в [archive/PROGRESS-2026-08-04-09.md](archive/PROGRESS-2026-08-04-09.md); детали — D-лог и слайсы. > - **Курс:** ОБЩНОСТЬ ✅ → КАЧЕСТВО БАНКА ✅ → ПАКЕТ-ЧЕКЕРОВ ✅ (D39.59–78) → **ФРОНТ-ЭРА** (D39.81–100: зоны живые, контракт API ратифицирован) → **шов/платформа/движковые блокеры построены** (D39.106–123). Хвосты курса живут строками: 16 (edit-волна не гонялась НИ РАЗУ — держит и оси голоса 13б/24) · 46 (дизайн заморожен D39.92/93, промт ждёт выдачи) · coldrun-b фаза C заморожена чекпойнтом легитимно (D39.86; эталон денег/поведения — coldrun-a, read-only); развилка 0731 решена и исполнена (D39.87/91, код `553f1a3`). > - **Горизонт (D39.62/67, освежён D39.95):** **ДОБОР ИДЕАЛА** (первым прогоном: оси голоса 24 · авто-режим · цена 16; жильцы ролей решаются ДО прогона эксп-22 — строка 149 · веса K1–K12 13а · вне-претрейн чекпоинт 55; остаток арбитража банка = рецензент спорных кластеров при ре-пробе 74 — D39.102) → ВТОРАЯ ПАРА живьём (ja→ru; преп 81) → МАСШТАБ → пилот Ф2.5 (гейт резюме-строки 80; строки 62–68, 85) → Ф3 ридер-IDE (69–71). **Стоячие:** ToS-триггер 25.10 · Ш-2 до go1.27 (⚠ + x/text Unicode 17 тем же тулчейном — строка 119, реестр §Б-108 справочника якорей) · платные прогоны разблокированы (проба провода — D39.97, конфиги 112 залендены). > - **Стек (полная карта роль→модель→конфиг→квирки — [STACK.md](STACK.md), D39.126):** draft deepseek-v4-flash thinking-ON `low` **⚠0731** → терминолог (та же модель) → editor deepseek-v4-pro БИЛИНГВ ИНТЕРИМ (топология ПОДТВЕРЖДЕНА при неразличимости жильцов — D39.117; закон-блок ОБЯЗАТЕЛЕН — строка 134; glm-5 резерв; вахта маппинга эффорта pro — §Б-108) → судья gemini (Ф2, в движке НЕ построен — строка 33); канал B Mistral+grok; ~$0.85/ранобэ (D30.4, пере-калибровка при следующем платном прогоне). ⚠ **Вендор-факты 13.08 (сняты 14.08, строка 172):** цены deepseek с 16.08 16:00 UTC ×2.3–4.7 (пик/офф-пик; пик 01–04·06–10 UTC), у pro эффорт стал настраиваемым low/high/max (квирк 3а устарел — вахта §Б-108 сработала); покупки фазы Д на deepseek до 16.08 идут по старым ценам. ⚠ **ВЕСЬ банковый контур (банкнота+терминолог+классификатор) в shipping-c1 НЕ включён** — жив ран-локальным конфигом книги (строка 140; сверка STACK.md 09.08 — факт шире прежней декларации «одна банкнота»); эскалация в shipping за `budget_usd: 0` (STACK.md §примечания). -> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 14.08 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **136** строк · зона бэкенд **67** строго / **92** широко (169 пере-зонирована 14.08: движковая половина построена D39.122; 175 заведена 14.08) (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **31** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74 (D39.102 п.2); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). +> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 15.08 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **137** строк · зона бэкенд **68** строго / **93** широко (169 пере-зонирована 14.08: движковая половина построена D39.122; 175 заведена 14.08; 176 заведена 15.08 — паника движка = exit 2, PD-212) (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **31** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74 (D39.102 п.2); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). > - Архивы хроники: `archive/PROGRESS-2026-07-04-10.md` (D31) · `-10-13` (D39.6-гигиена) · `-13-25` (стройка паков 11–16, rerun2) · **`-25-31` (паки 17–20 · мини-прогон · полигон-пакеты 5–8 · ToS · холодный прогон; D39.26–58)** · **`-08-01-02` (сессии №9/№10: общность · качество банка · coldrun-b · открытие фронта/платформы; D39.59–90, срез D39.105)** · **`-08-02-04` (сессии №11–№13: ручки эффорта · стандарты · контракт API · платформа P0 · банк-арбитраж; D39.91–105 + снимок шапки эры №15)**. Записи ниже — живой хвост (№14+, эра D39.106+). ## Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора) @@ -119,6 +119,7 @@ | 173 | **`backupStamp` секундной точности**: два `translate` в одну секунду дают коллизию имени бэкапа и exit 1, маскируя класс «проект занят» (12) — метка до наносекунд/uniquify либо распознавать коллизию явно; преexisting, вскрыт ревью эмиттер-пака | бэкенд | когда-нибудь | малое касание | приёмка D39.131 | | 174 | **Деадлок деплоя v15**: read-only `status` отказывает схеме старее бинаря, а платформа зовёт его ПЕРЕД каждым спавном и для settle ⇒ апгрейд движка запирает ВСЕ существующие книги (write-команда, которая мигрировала бы, не наступает никогда); решить ДО деплоя эмиттер-бинаря на платформу: движковая $0-команда `tmctl migrate` либо деплой-шаг «write-команда по каждой книге» | владелец → бэкенд/платформа | **скоро (гейт деплоя эмиттер-бинаря)** | отдельное решение | приёмка D39.131 (шов-ревьюер) | | 175 | **Деплой движка «в полёте» — ОСТАТОК после ресёрча 14.08** (внешний агент, две итерации: сначала абстрактная индустрия-съёмка, затем вердикт по нам; вывод — exact-match читателей на деньгах = осознанный fail-closed, корень не выдёргивать, приделать дверь). Ближняя половина УШЛА в работу: типизированная ошибка version-mismatch у `status` + money-тест — промт migrate; правило свипа «мигрировать только книги БЕЗ открытых попыток» + settle ЗАПИНЕННЫМ бинарём попытки (`run_attempts.engine_binary`, строка 139) — аддендум P6. Дальний остаток: (а) при СЛЕДУЮЩЕМ бампе схемы проставить в файл книги `application_id` + `min_reader_version` — данные-задел под окно совместимости, ~0 логики; (б) GC бинарей: удалять не пиненные ни одной незакрытой попыткой, последние 2–3 релиза держать для отката; (в) окно совместимости читателей / пин уровня книги — строить ТОЛЬКО по триггерам: много тенантов · бампы схемы еженедельно+ · потребители `status` кроме платформы | платформа/бэкенд | когда-нибудь (по названным триггерам; (а) — попутно первым бампом схемы) | данные-задел + малые касания | владелец 14.08, ресёрч 14.08, строки 139/174 | +| 176 | **Паника движка неотличима от «completed with flags»**: непойманная паника Go-рантайма = exit 2, а 2 — «успешный» код контракта; платформа записывает `ready` для прогона, упавшего посреди работы (деньги целы — расчёт из `status --json`; врёт статус). Лечение движковое: `recover` в main tmctl либо другой номер для флагов; найдено адверсариальным ревью P6 (PD-212 регистра платформы) | бэкенд | когда-нибудь (следующее касание exit-контракта) | малое касание | D39.132, PD-212 | | 49 | **Этапы Б+В спеки D15.2** (content-addressed resume / `guard_hash` — D39.31 сознательно не строил) ; этап В = tmctl export-контракт D29.1 (annot-v1 · цвет-мап+rollup · политика красных fail-closed) + операторский протокол-документ релиза гендер-твиста (D5.1): сам механизм УЖЕ построен — until_ch-правка → точечный re-edit со сметой и $0-пере-пином (`repin.go`/`rebill.go`, D39.42 п.5/D39.45) | бэкенд | скоро (ПОДТЯНУТА D39.81: annot-v1 = источник замечаний для фронта — критический путь подключения) | отдельное решение (annot-половина — по контракту 14, D39.99) | D39.34(4), D33 п.5, D39.81 | | 49а | **ALTER-шаги миграций v8–v14 не идемпотентны вопреки шапке `migrate.go:9-11`** (полу-применённая БД не сходится; счётчик версий скрывает) — находка критика полноты пака-19 | бэкенд | когда-нибудь | отдельное решение | D39.56, PACK19_BUILD §6.9 | | 50 | F3-остаток идемпотентности | бэкенд | когда-нибудь | отдельное решение | D39.34(4) | diff --git a/docs/README.md b/docs/README.md index 4a305e5e..7d2cb7fe 100644 --- a/docs/README.md +++ b/docs/README.md @@ -17,7 +17,7 @@ - `research/` — фактура ресёрчей 01–27; у принятых — ревью-шапки, часть тел под ⚠ superseded: **читай баннер прежде содержимого**. Ключевые для навигации: 15 голос · 16 ридер-IDE · 17 внешняя критика · 18 рычаги качества · 19 нарезка · 20 банк-майнинг · 21 обзор транспорта · 22 доменные харнессы · 23 шов движок↔платформа (транспорт superseded D39.106) · 25 холодное ревью шва — форма D39.106, отвергнутые альтернативы, требования к эмиттеру (читать перед любым кодом стыка) · 24 арбитраж банка (ПРИНЯТ D39.102: консилиум закрыт классом, вход фикс-пака банка — §G) · 26 официальные практики Anthropic (D39.121: записка-план, сниппеты хендоффов, карта «уже делаем/перенять»). - [PROGRESS.md](PROGRESS.md) — журнал: CURRENT-STATE + **ЕДИНЫЙ БЭКЛОГ** (единственный трекер) + живой хвост хроники. НЕ источник решений. - `scripts/counts.py` — **производные числа доков считаются им, а не руками** (голова по трём носителям · счёт очереди и зон · вес открытых строк регистра платформы · полнота реестра нот); `--check` даёт ненулевой код на расхождении; `--lint` — линтер file:line-якорей живых доков (D39.126). Его же зовёт зонный хук `scripts/githooks/pre-commit` при коммите, задевающем D-лог или PROGRESS — предупреждает, не блокирует. Заведено по D39.112 п.5б: голова отставала трижды у трёх разных оркестраторов. -- Активные хендофф-промты сессий (состав обновляется при каждом лендинге — норма D39.80): [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) (роль/нормы; состояния не дублирует) · **Полигон: [POLYGON_EXP2223_REDO_SESSION_PROMPT.md](POLYGON_EXP2223_REDO_SESSION_PROMPT.md)** — фаза Д доводки эксп-22/23 ИДЁТ (заказ владельца 10.08, потолок фазы $4.50; выводы 22/23 заморожены до неё) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (отложен) . **Фронт: [../frontend/docs/S4_SESSION_PROMPT.md](../frontend/docs/S4_SESSION_PROMPT.md)** — S4 выдан 14.08 (гейт пал D39.130, запуск одобрен владельцем: библиотека/загрузка/прогресс + спек-правка 0.2.3) · **Платформа: [../platform/docs/PLATFORM_P6_DOFIX_SESSION_PROMPT.md](../platform/docs/PLATFORM_P6_DOFIX_SESSION_PROMPT.md)** — дофикс P6 выдан 15.08 по фикс-листу приёмки (ФП-1 exit-2 status-канала — HIGH · деплой-порядок · пины гейта миграции; P6 исполнен и принят УСЛОВНО, лендится одним пакетом с дофиксом; курс владельца: платформа достраивается целиком до фронта) · **Бэкенд: [BACKEND_MIGRATE_SESSION_PROMPT.md](BACKEND_MIGRATE_SESSION_PROMPT.md)** — малое касание `tmctl migrate` (строка 174, вариант А; запуск = ратификация). Эмиттер шва ИСПОЛНЕН и ПРИНЯТ (D39.131, промт в архиве). Все ОТРАБОТАННЫЕ промты — в `archive/prompts/`, отчёты с ревью-шапками — в `archive/reports/`; статусы паков — CURRENT-STATE и D-лог, здесь не дублируются. Зонные журналы фронта/платформы — `frontend-PROGRESS.md` / `platform-PROGRESS.md` в их зонах (прогресс зон только там, D39.100). +- Активные хендофф-промты сессий (состав обновляется при каждом лендинге — норма D39.80): [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) (роль/нормы; состояния не дублирует) · **Полигон: [POLYGON_EXP2223_REDO_SESSION_PROMPT.md](POLYGON_EXP2223_REDO_SESSION_PROMPT.md)** — фаза Д доводки эксп-22/23 ИДЁТ (заказ владельца 10.08, потолок фазы $4.50; выводы 22/23 заморожены до неё) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (отложен) . **Фронт: [../frontend/docs/S4_SESSION_PROMPT.md](../frontend/docs/S4_SESSION_PROMPT.md)** — S4 выдан 14.08 (гейт пал D39.130, запуск одобрен владельцем: библиотека/загрузка/прогресс + спек-правка 0.2.3) · **Платформа: активного промта НЕТ** — P6 + дофикс ИСПОЛНЕНЫ и ПРИНЯТЫ (D39.132, промты в `platform/docs/archive/`); следующий пак — P7 (читающая поверхность), промт после приёмки бэкенд-migrate · **Бэкенд: [BACKEND_MIGRATE_SESSION_PROMPT.md](BACKEND_MIGRATE_SESSION_PROMPT.md)** — `tmctl migrate` ИСПОЛНЕН (дерево в `backend/` ЖДЁТ ПРИЁМКИ оркестратора; отчёт — PROGRESS «Бэкенд»). Эмиттер шва ИСПОЛНЕН и ПРИНЯТ (D39.131, промт в архиве). Все ОТРАБОТАННЫЕ промты — в `archive/prompts/`, отчёты с ревью-шапками — в `archive/reports/`; статусы паков — CURRENT-STATE и D-лог, здесь не дублируются. Зонные журналы фронта/платформы — `frontend-PROGRESS.md` / `platform-PROGRESS.md` в их зонах (прогресс зон только там, D39.100). - Зоны фронта (чужие, читать при касании стыка; каждая ведёт СВОЙ зонный бэклог — единый бэклог их строк не принимает, D39.84): [../frontend/](../frontend/) — веб-интерфейс: промт фронт-сессий S0–S7 + [STACK_DECISIONS.md](../frontend/docs/STACK_DECISIONS.md) (пины версий точными числами и ловушки, сверены с вебом 02.08) + [BACKLOG.md](../frontend/docs/BACKLOG.md) · [../platform/](../platform/) — SaaS control plane: README + [BACKLOG.md](../platform/BACKLOG.md) (П-1..П-14) + `docs/` (зонный журнал `platform-PROGRESS.md` · регистр дефектов · архив промтов P0–P5). - `archive/` — история ([правила архива](archive/README.md)): закрытые промты (`prompts/`) · отчёты с ревью-шапками (`reports/` — на них ссылаются приёмки) · исполненные арх-доки (`architecture/`) · слайсы хроники `PROGRESS-*.md`. Инструкции оттуда не исполнять. - Диаграммы: [../backend/docs/components.puml](../backend/docs/components.puml) · [../backend/docs/pipeline.puml](../backend/docs/pipeline.puml) — дом рядом с кодом (D39.80), правятся бэкендом одним коммитом с кодом; вручную НЕ рендерить (владелец смотрит PlantUML-расширением VS Code). diff --git a/docs/architecture/05-decisions-index.md b/docs/architecture/05-decisions-index.md index 46af3496..be305378 100644 --- a/docs/architecture/05-decisions-index.md +++ b/docs/architecture/05-decisions-index.md @@ -184,3 +184,4 @@ | D39.129 | 10.08 | Приёмка фронта S3.7 принята и залендена (3e465bd): канон контракта 0.2.2, i18n-механизм построен (ПТ-36 🔶); арбитраж 8.1 — HIGH приёмки S3.6 снята как ложноположительная, урок «браузерный вердикт только живым прогоном» | ЖИВОЕ: находки приёмки → блок S4-промта; гейт S4 пал D39.130 (промт по слову владельца); В-9 (языки интерфейса) на владельце | жив | фронт контракт процесс | | D39.130 | 14.08 | Приёмка платформы P5 в три раунда (69d485a): интейк книг с сентинелом хранилища, стоп/резюм с намерением, Prometheus; ратификации Go-floor 1.26.6 + book.yaml формой Б; строка 170, дописка 165 (PD-196) | ЖИВОЕ: гейт S4 фронта пал — S4-промт по слову владельца (вход: POST /books + находки S3.7 + спека 0.2.3); стройка формы Б — следующим касанием зоны | жив | платформа деньги контракт шов | | D39.131 | 14.08 | Приёмка эмиттер-пака (9cfe080, дофикс до лендинга): events.jsonl + exit 4/5/полоса 10-19 + пер-вызовный репэйр-гейт; строки 103/135/165/102 закрыты; ратификации: сужение класса 11, eta из темпа прогона, unit_done присваиванием (предложение платформе), кап эскалации оставлен | ЖИВОЕ: движковая половина PD-113/PD-196 построена — остаток у платформы (П-15: маппинг exit-кодов/scope/присваивание); деадлок деплоя v15 = строка 174 ДО деплоя бинаря; StreamVersion 1.1 | жив | шов деньги бэкенд платформа | +| D39.132 | 15.08 | Приёмка платформы P6 + дофикс: потребительская половина шва (exit-словарь, unit_done присваиванием, scope, TM_TRACE_ID) + интейк формы Б + дев-стенд; PD-113/PD-196 закрыты, 0 major; ратификации: day_usd вне шаблона (владелец), пере-подпись PLATFORM_DIRECTION §3, второй гейт батареи, exit 13 направлением, PD-241-направление; фикс-лист ФП-1..8 закрыт дофиксом (exit 2 status-канала) | ЖИВОЕ: шов закрыт с обеих сторон; строки 174/175 + финал exit 13 — приёмкой бэкенд-migrate; строка 176 движку (паника = exit 2, PD-212) | жив | шов деньги платформа приёмка | diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index cea00437..cbf01ca9 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,4 @@ -# Журнал решений оркестратора — контракт D1–D39.131 (живой файл: карта · эрраты · живые тела · голова D39.106+; тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`) +# Журнал решений оркестратора — контракт D1–D39.132 (живой файл: карта · эрраты · живые тела · голова D39.106+; тела закрытых эр — в слайсах `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+). @@ -501,3 +501,11 @@ **3. Находки приёмки → носители.** **ПЛАТФОРМЕННАЯ половина шва НЕ построена** — заленденный потребитель не читает новые сигналы: exit 4 превращается в `failed` (outcome() знает 0/2/3, `paused_reason` читается из stale-снапшота ДО drain), `refusedTheSource()` не смотрит на код вовсе (опечатка book.yaml по-прежнему ведёт к удалению загрузки), `Ceiling.Scope` дропается, dev-супервизор стейл ⇒ **П-15 зонного бэклога платформы** (пинг в их журнал; PD-113/PD-196 в их регистре остаются open до её стройки). **Деадлок деплоя v15**: `status` (read-only) отказывает старой схеме, а платформа зовёт его ПЕРЕД каждым спавном и settle ⇒ апгрейд бинаря запирает все старые книги — строка **174** (решить ДО деплоя нового бинаря: `tmctl migrate`-команда либо деплой-порядок). `backupStamp` секундной точности маскирует класс «занято» — строка **173**. Сериализацию писателей журнала держит только flock проекта (два конфига в одном каталоге = перемешанный поток) — наблюдение в теле, реопен при живом инциденте. **4. Инцидент нормы: «author≠reviewer» сессия исполнила как стиль чтения** (свой контекст, без второго) и в первой редакции отчёта приписала себе разделение — сама вскрыла, независимые панели провела пост-фактум; корень («требование без механизма исполнения») канонизирован п.6а норм хендофф-промтов (`aef64f3`) ДО этой приёмки. Ультраревью владельца 14.08 шва не видело (облачный бандл собирает только tracked-файлы, пак был untracked) — «молчание ревью ≠ свидетельство корректности» (14.08.2026, оркестратор №16). ✅ + +## D39.132 — ПРИЁМКА ПЛАТФОРМЫ P6 + ДОФИКС ПРИНЯТЫ И ЗАЛЕНДЕНЫ: шов закрыт с обеих сторон, PD-113 закрыт, 0 major; ратификации — day_usd вне шаблона · пере-подпись направления §3 · второй гейт батареи · exit 13 направлением (15.08). ✅ + +**1. Приёмка (оркестратор №16).** Раунд 1 — панель 5 адверсариальных верификаторов по P6 (две линзы другой моделью; исполнением: живой демон, живой PG, live-пробы) → фикс-лист ФП-1…ФП-8 (тяжёлое: `status --json` с exit 2 при flagged-юнитах читался платформой как отказ — расчёт flagged-прогона откладывался вечно, спавн по книге отказывал; порядок апгрейда в деплой-доке гонял `migrate` СТАРЫМ бинарём; денежный гейт `BooksForMigration` не запинен — посадка приёмки переживала батарею). Раунд 2 — дофикс той же сессией: все ФП закрыты, её собственное ревью нашло и закрыло ещё 6 (глоток ошибки перечитки в ветке маркера; документ-не-манифест как пустой манифест на единственном файло-удаляющем пути; stdout без потолка). Финальная верификация исполнением: батарея `-race` + живой PG + ОБА гейта — EXIT=0, скипов 0; тестов 359→**416** (команды в журнале зоны); деньги из сырого леджера стенда двумя путями; 2 СВОИХ посадки — пойманы. Механика — зонный журнал, разделы «P6» и «Дофикс P6». + +**2. Ратификации.** (а) **`day_usd` убран из платформенного шаблона книги** (решение владельца 15.08): трата прогона ограничена купленным объёмом (холд+`--ceiling-usd`), дневная ось на платформе дублирующая; в движке остаётся операторской опцией, обработка `daily_ceiling`/409 — предохранитель. **PD-199 закрыт этим же решением: `null` на проводе подтверждён**, слово в контракт не заводится. (б) **`PLATFORM_DIRECTION` §3 пере-подписан**: oapi-codegen «взять — доказано» → кандидат при P7; sqlc — привязан к P7 (масса запросов читающей поверхности); River-факт поправлен. (в) **Второй гейт батареи принят** (`TM_PLATFORM_TEST_ENGINE_BIN`+`_BOOK_TEMPLATE`, форма как у БД-гейта; с обоими гейтами скипов 0). (г) **exit 13 = `schema_mismatch` ратифицирован НАПРАВЛЕНИЕМ**: обе зоны сошлись на числе независимо (платформа — ждущий класс, движок — полоса 10–19); финализация и закрытие строк 174/175 — приёмкой бэкенд-пака migrate. (д) **PD-241 (стоп пользователя переименовывается в `paused/credit_exhausted`, если потолок приехал тем же дрейном) — направление: намерение стопа выигрывает НА СТАТУСЕ**, деньги не затронуты; исполнение — следующим касанием зоны, отменяется одной репликой владельца. + +**3. Исправления оркестратора при лендинге и хвосты.** Регистр: откачено переименование PD-198→PD-199 и удалена строка-дубль (246→245; «ID стабилен навсегда»); PD-200/PD-180 — по секциям; счёт-базис журнала «396→403» заменён воспроизводимым (359→416, PD-234). Новые остатки — строками PD-217…PD-223, PD-241…PD-245 (тяжелее прочих: PD-217 — книга на `daily_ceiling`/вечном холде блокирует апгрейд движка без выхода). Единый бэклог: строка 176 — движку `recover`/другой код на панику (exit 2 коллизия с completed-with-flags, PD-212). Урок приёмки — знанием: **шов, у которого движковая половина менялась под потребителем, проверяется перечислением ВСЕХ каналов движка** (exit-контракт сверили — status-канал упустили и сессия, и её ревью; поймала только панель). Очередь: приёмка бэкенд-migrate (дерево ждёт в `backend/`) → приёмка S4 → промт P7. (15.08.2026, оркестратор №16) ✅ diff --git a/docs/architecture/15-money-path.md b/docs/architecture/15-money-path.md index e73fb292..7f8f2b31 100644 --- a/docs/architecture/15-money-path.md +++ b/docs/architecture/15-money-path.md @@ -36,8 +36,8 @@ | Дыра | Носитель | |---|---| -| **PD-113 (major)** — стоп по потолку неотличим от аварии. **Движковая половина ПОСТРОЕНА D39.131**: событие `ceiling{scope}` + exit 4; остаток у ПЛАТФОРМЫ (П-15): outcome() знает только 0/2/3 и читает `paused_reason` из stale-снапшота до drain — до её стройки exit 4 всё ещё материализуется как `failed` | `platform/docs/DEFECT_REGISTER.md:18`, D39.131 | -| ~~Строка 165~~ **ЗАКРЫТА D39.131** (испр. оркестратором 14.08): exit 4 = потолок · 5 = graceful stop · 10–19 полоса отказов; потребительская половина у платформы = П-15 (до неё exit 4 материализуется `failed` — PD-113) | D39.131, `platform/BACKLOG.md` П-15 | +| ~~PD-113 (major)~~ **ЗАКРЫТ P6/D39.132** (испр. оркестратором 15.08): обе половины построены — событие `ceiling{scope}` + exit 4 (движок, D39.131) и потребитель (платформа, П-15): потолочный стоп = `paused` двумя независимыми каналами, причина пишется одним оператором со статусом и перечитывается после drain; открытых major в регистре платформы 0 | `platform/docs/DEFECT_REGISTER.md` (эра P6), D39.132 | +| ~~Строка 165~~ **ЗАКРЫТА D39.131** (испр. оркестратором 14.08): exit 4 = потолок · 5 = graceful stop · 10–19 полоса отказов; потребительская половина построена P6 (D39.132) — шов закрыт с обеих сторон; ⚠ exit 13 (`schema_mismatch`) едет паком migrate, ратификация направления — D39.132 | D39.131, D39.132 | | **Строка 166** — движковая поверхность оценки $/глава; $0.03 — временная мера беты (П-10 зоны) | `docs/PROGRESS.md:114` | | **PD-104** — фри-тир: док↔код закрыто, продуктовая половина (ноль на бете · агрегатный потолок · счётчик) на владельце | `DEFECT_REGISTER.md:115`, D39.110 п.3 | | **Строка 78** — леджер = нижняя граница (биллящийся decode-fail мимо request_log, ≤13% захода на ре-пробе) | `docs/PROGRESS.md:41` | diff --git a/docs/architecture/16-events-emitter.md b/docs/architecture/16-events-emitter.md index 265083b1..f327f6d0 100644 --- a/docs/architecture/16-events-emitter.md +++ b/docs/architecture/16-events-emitter.md @@ -1,6 +1,6 @@ # Эмиттер прогонных событий (шов движок→платформа) — сборка-норматив (строки 103+165, докс-пак 167) -> ⚠ **ЭМИТТЕР ПОСТРОЕН И ПРИНЯТ (D39.131, `9cfe080`, 14.08):** `events.jsonl` (StreamVersion 1.1) · exit 4/5/полоса 10–19 · пер-вызовный репэйр-гейт; развилки §5 решены (одиночный JSONL · PD-60 = громкая деградация · fsync каталога один раз · outbox «факт → outbox → файл», `spend` внутри settle-транзакции). Док остаётся справочником формы; фактический код первичен (`backend/internal/runevents/` · `pipeline/events.go` · `store/outbox.go`). Остаток шва — платформенная половина (П-15 зонного бэклога). +> ⚠ **ЭМИТТЕР ПОСТРОЕН И ПРИНЯТ (D39.131, `9cfe080`, 14.08):** `events.jsonl` (StreamVersion 1.1) · exit 4/5/полоса 10–19 · пер-вызовный репэйр-гейт; развилки §5 решены (одиночный JSONL · PD-60 = громкая деградация · fsync каталога один раз · outbox «факт → outbox → файл», `spend` внутри settle-транзакции). Док остаётся справочником формы; фактический код первичен (`backend/internal/runevents/` · `pipeline/events.go` · `store/outbox.go`). **Платформенная половина ПОСТРОЕНА P6 и принята D39.132 (15.08) — шов закрыт с обеих сторон, PD-113 закрыт**; упоминания «PD-113 открыт / остаток П-15» в теле ниже — историческая фактура эпохи стройки. > > **Статус: СБОРКА-НОРМАТИВ.** Этот док ничего не решает сам — он собирает в одно место уже ратифицированные решения об эмиттере `events.jsonl` (строка 103 бэклога), разбросанные по D-нотам, `research/25`, реестру дефектов платформы и коду зоны ingest. **Источники первичны; при любом конфликте этого дока с `05-decisions-log.md` побеждает D-лог.** Каждое утверждение несёт указатель; дословные цитаты — в кавычках-ёлочках или блоках. > diff --git a/docs/product-requirements.md b/docs/product-requirements.md index d330b930..16c32bbd 100644 --- a/docs/product-requirements.md +++ b/docs/product-requirements.md @@ -59,7 +59,7 @@ | ПТ-24 | Цикл согласования глоссария с профпереводчиком/редактором (V0-п.23) | 🔶 | подписной цикл терминолога в бэкенде есть; UI = Ф3 | | ПТ-33 | Интерфейс НЕ раскрывает конвейер: ни моделей, ни стадий, ни внутренней терминологии — пользователь видит «загрузка → разбор → перевод → подпись банка → финал → готово» (решение владельца 02.08) | ⭕ | инвариант D39.81; контракт API v0 РАТИФИЦИРОВАН (D39.99, `architecture/14-api-contract/`): словарь десяти статусов принят владельцем 04.08 (D39.100/К-1); карта «вердикт → фраза» — приложение А компаньона, слова заполняет владелец (В-3); ревью-вопрос «сменится стадия — править ли фронт?» отвечен таблицей §5 компаньона | | ПТ-34 | Пользовательский перевод НИКОГДА не попадает на публично индексируемый URL — ни витрин примеров, ни «поделиться главой», ни публичных ссылок чтения (жёсткий продуктовый запрет, решение владельца 02.08; авторское право на исходники + политика Google по масштабируемому машин-контенту действуют на весь домен) | ⭕ | инвариант D39.84; носители: двухконтурный деплой `frontend/docs/STACK_DECISIONS.md` §4 (SPA под `X-Robots-Tag: noindex` на каждом HTML-ответе; публичный контур без контента переводов) + контракт 14 (`architecture/14-api-contract/`, D39.99) + платформенный бэклог П-1 | -| ПТ-35 | Лимиты «как в Claude Code» (решение владельца 04.08, D39.100): страница лимитов/использования в настройках (статус, НЕ суммы — запрет денег на экране в силе); стоп по потолку = статус `paused` + оповещение «перевод остановлен: лимиты исчерпаны» | 🔶 | контракт К-8 закрыт, спека несёт `paused`/`paused_reason` (0.2.0+, D39.115); ручки /v0 — платформа-раннер P4 (D39.123); остаток: страница лимитов на фронте (S4+) · точное продуктовое слово — В-3 на владельце · К-13 (`paused_reason` не различает свой потолок и нет кредита, D39.115 п.6б) | +| ПТ-35 | Лимиты «как в Claude Code» (решение владельца 04.08, D39.100): страница лимитов/использования в настройках (статус, НЕ суммы — запрет денег на экране в силе); стоп по потолку = статус `paused` + оповещение «перевод остановлен: лимиты исчерпаны» | 🔶 | контракт К-8 закрыт, спека несёт `paused`/`paused_reason` (0.2.0+, D39.115); ручки /v0 — платформа-раннер P4 (D39.123); статус `paused` по потолку ЧЕСТЕН с P6 (D39.132: exit 4/событие → `paused`, не `failed`; дневной потолок оператора различим и из платформенного шаблона убран — решение владельца 15.08); остаток: страница лимитов и оповещение на фронте (после P7) · точное продуктовое слово — В-3 на владельце · К-13 (`paused_reason` не различает свой потолок и нет кредита, D39.115 п.6б) | | ПТ-36 | Интерфейс МУЛЬТИЯЗЫЧНЫЙ, русский не хардкодится в разметке (слово владельца 10.08; язык интерфейса — отдельная ось от языков перевода). ⚠ До 10.08 требование в реестре отсутствовало — пропуск поймал владелец (D39.127 п.2г) | 🔶 | ПОСТРОЕНО S3.7 (принят D39.129): каталог `frontend/src/i18n/ru.ts` (157 ключей) · механизм `@internationalized/string` · ESLint-гейт «текст местом» · стор языка с персистом · `` следует выбору; содержимое — только ru; продуктовый список языков — 🔒 владелец (В-9 зоны фронта) | ## Качество процесса и самоулучшение