From 3ffbc2e71d3ec48ede651e0474325633e9e58d0c Mon Sep 17 00:00:00 2001 From: "Claude (backend session)" Date: Mon, 17 Aug 2026 00:23:24 +0300 Subject: [PATCH] Ratify the extended frontend freeze, sync its carriers, land the honesty-pack prompt, and record the code inventories as backlog row 193 and a scale note --- docs/BACKEND_HONESTY_PACK_SESSION_PROMPT.md | 190 ++++++++++++++++++++ docs/PROGRESS.md | 9 +- docs/README.md | 2 +- docs/architecture/05-decisions-index.md | 3 +- docs/architecture/05-decisions-log.md | 10 +- docs/product-requirements.md | 2 +- 6 files changed, 208 insertions(+), 8 deletions(-) create mode 100644 docs/BACKEND_HONESTY_PACK_SESSION_PROMPT.md diff --git a/docs/BACKEND_HONESTY_PACK_SESSION_PROMPT.md b/docs/BACKEND_HONESTY_PACK_SESSION_PROMPT.md new file mode 100644 index 00000000..8633e48a --- /dev/null +++ b/docs/BACKEND_HONESTY_PACK_SESSION_PROMPT.md @@ -0,0 +1,190 @@ +# Промт: бэкенд, пак «честные числа и статусы» — строки 176 · 181 · 172-г · 187 + +> Выдан оркестратором №18, 16.08.2026. Запуск — по слову владельца. +> Вес пака — лёгкий-средний: четыре точечных места, приёмка инлайн. + +## 0. Зачем (проблема, понятная без истории проекта) + +Движок — CLI (`tmctl`), который переводит книгу платными вызовами LLM и которым снаружи управляет +процесс-супервизор (платформа). Наружу он сообщает три вещи: **число денег**, **код выхода** и +**вердикт гейта**. Сегодня в четырёх местах сообщаемое расходится с происходящим: + +1. **Число, на которое оператор даёт согласие при пере-покупке, посчитано по СТАРЫМ ценам.** Цены + провайдера сменились 16.08 (до ×4.4 в пике), проекция пере-покупки складывает исторический + `cost_usd`, а резерв и расчёт считают новой таблицей. Оператор соглашается на одну сумму, платит + другую. Траты защищены потолками — врёт именно ЧИСЛО СОГЛАСИЯ (строка 181). +2. **Паника Go-рантайма неотличима от успеха.** Непойманная паника даёт exit 2, а 2 в контракте + означает «завершено, есть флагнутые главы» — потребитель записывает упавшему посреди работы + прогону «готово». Деньги при этом целы (считаются из `status --json`), врёт статус (строка 176). +3. **Ратифицированный порог приёмки классификатора не доехал до тестового рига.** Владелец 15.08 + подписал ВЫБОРОЧНУЮ форму порога, риг требует прежнюю — и сам предупреждает, что порог и выборка + расходятся. Ближайший прогон вахты упадёт ложно (строка 172-г). +4. **Два комментария кода описывают снятое поведение** — читатель кода получает неверный закон о том, + что попадает в `memory_version` (строка 187). + +**Что решит твой результат:** ни одно из четырёх мест больше не врёт, и каждое прибито тестом, +который на до-фиксном коде ПАДАЕТ. После пака можно честно пере-прогонять старую книгу (сейчас +нельзя — п.1) и честно читать исход прогона снаружи (п.2). + +## 1. Зона записи и git + +Пишешь ТОЛЬКО в `backend/`. Итог сессии — краткой записью в `docs/PROGRESS.md`, секция «Бэкенд» +(это единственный файл вне `backend/`, куда тебе можно писать). + +**Ты не коммитишь — лендит оркестратор.** `git add` / `git commit` / `git reset` / `git checkout` / +`git stash` не звать вовсе; файлы застейдженными не оставлять. +Карв-аут к «пишешь только в `backend/`»: **пробные проекты в `~/books/…` — легитимная запись** (они вне +git, и норма «персист, не scratch» требует, чтобы сырьё платной пробы легло рядом с проектом пробы, а +не в `/tmp`). Это касается только пункта 5. +⚠ **В дереве прямо сейчас работают ДВЕ чужие живые сессии** — полигон (`eval/`, `docs/experiments/`) +и платформа (`platform/`). Их незакоммиченные файлы читать можно, трогать — нельзя ни при каких +обстоятельствах. `.env` не читать никогда (там ключи). `frontend/` не трогать. + +## 2. Карта чтения (≤5, больше не нужно) + +1. `CLAUDE.md` — гардрейлы и инвариант общности (Go не ветвится по языковой паре). +2. `backend/README.md` + `docs/architecture/12-go-style-notes.md` §0 — норматив зоны. +3. Тела строк **176 · 181 · 172-г · 187** в таблице «Бэклог» файла `docs/PROGRESS.md` — это ЗАКАЗ; + в них лежат `file:line` отправные точки. Строки писала нейросеть: якоря могли уплыть, формулировка + могла устареть — **код первичен**, расхождение строки с кодом называй вслух в отчёте. +4. `docs/architecture/05-decisions-log.md`: **D39.131** (половина 0–5 контракта кодов выхода) · + **D39.134 п.2** (полоса отказов 10–19 и её обещание) · **D39.137** (пере-пин цен — откуда взялась + строка 181). Греп по номеру: сначала живой файл, потом слайсы `docs/archive/architecture/`. +5. `docs/experiments/00-provider-quirks.md` — **только если** дойдёт до пункта 5 (живой прогон вахты). + +Всё остальное — код, и его ты достаёшь сам. + +## 3. Состав + +Пункты 1–4 — **«делай РОВНО так» по ПРЕДМЕТУ** (что чинится, решено); **форма фикса внутри — твоя, +аргументируй в отчёте**. Отступление от предмета = пинг, не интерпретация. + +**1. Строка 181 — число согласия на пере-покупку.** Проекция пере-покупки обязана считать ТОЙ ЖЕ +ценовой таблицей, которой считают резерв и расчёт, а не складывать исторические суммы. Отправные +точки заказа: `internal/pipeline/rebill.go` (сложение исторического `cost_usd`; гейт согласия и его +порог), `internal/pipeline/stagerun.go` (резерв и сеттл новой таблицей). **Тест обязателен и обязан +падать на до-фиксном коде** (сценарий: единицы куплены по старой цене → цена сменилась → согласие +спрашивают на новую сумму). ⚠ Комментарий `rebill.go` про «over-estimating is the safe direction» +после фикса обязан стать правдой или уйти. +**`projected_book_usd` у `status` — В СКОУПЕ, а не «проверь и назови»**: заказ строки утверждает ту же +болезнь, и оставить её значит оставить `status` врущим. ⚠ **Развилка, которую обязан разрешить явно:** +сам ПОРОГ согласия тоже считается из этой проекции — починить числитель новой таблицей и оставить базу +порога исторической значит получить полу-исторический гейт. Реши обе половины вместе и назови решение +в отчёте; считаешь, что вторая половина не влезает — **пинг**, а не тихое сужение. + +**2. Строка 176 — паника не должна читаться как успех.** Непойманная паника рантайма обязана +приходить наружу кодом, который потребитель прочтёт как ПРОВАЛ. + +⚠ **Обе полосы кодов — ЗАМОРОЖЕНЫ, это шов, их словарь двигается только ратификацией.** +- **0–5 не трогать** (ратифицированный словарь, D39.131; шапка `cmd/tmctl/main.go`). В частности + **exit 2 НЕ переносить**: значение «завершено с флагами» зашито у потребителя намертво + (`platform/internal/ingest/exit.go:24,89` · `platform/internal/runs/reconcile.go:484` → `ready`), и + «развести номера, оставив полосу 10–19 нетронутой» **сломает шов, не нарушив буквы этого запрета** — + каждый честно флагнутый прогон станет `failed`, а чтение денег сломается вместе с ним. +- **10–19 не расширять и для паники НЕ использовать** — полоса обещает «ничего не произошло, ничего + не потрачено, ничего не записано» (D39.134 п.2г), а паника случается посреди оплаченной работы; + посадить её на 19 значит соврать наоборот. +- **Безопасное направление:** код, который сегодняшняя платформа читает как `failed` — то есть **1** + либо номер ВНЕ обеих полос. Выбрал не 1 — аргумент в отчёт и пинг, потому что это словарь шва. + +⚠ **Ловушка, на которой фикс выглядит зелёным и молчит на настоящем пути:** платный путь исполняется +пулом воркер-горутин (`internal/pipeline/waverun.go:260`), а `recover` в `main`/`run` ловит только +главную горутину. **Предмет — «паника ЛЮБОЙ горутины движка не читается как успех»**, и тест обязан +это покрывать; фикс, падающий только на синтетической панике в main, заказ не закрывает. +Стек паники обязан доехать до stderr: диагностика важнее лаконичности. + +**Попутно тем же касанием** (сам заказ строки): usage-строка `cmd/tmctl/invocation.go:96` не знает +команд `migrate` / `backup` / `seed-lint`. ⚠ Её байты запинены тестом замороженного контракта +(`cmd/tmctl/invocation_test.go:23`) — **обновить тест ВМЕСТЕ со строкой здесь санкционировано** +(ратифицированная правка контракта, D39.134 п.3): это не подгонка под зелень, и §4-запрет сюда не +применяется. Любая ДРУГАЯ правка замороженных байтов — пинг. + +**3. Строка 172-г — выборочный порог в риг вахты.** Внести ратифицированную форму порога +(**D39.136 п.6б: «≥4/5 прогонов при N=5 достигают 6/6»**) в `internal/pipeline/live_reprobe_test.go` +вместо действующего «6/6 на КАЖДОМ прогоне». Комментарий рига, объявляющий расхождение порога и +выборки открытым вопросом владельца, обязан быть переписан: вопрос ЗАКРЫТ, сошлись на выборочной +форме. Риг под тегом `live` — компилируемость проверяется `make battery` (в `vet` оба набора тегов). +⚠ **Порог не «смягчить», а внести ратифицированный.** Подгонять гейт под желаемый результат +недопустимо; если считаешь ратифицированную форму неверной — пиши пинг, не правку. +⚠ Ратифицирована форма **для N=5**; риг допускает переопределение размера выборки переменной +окружения — зафиксируй в коде и комментарии, что порог определён на N=5, а иное N выводит прогон +из-под гейта (изобретать формулу для произвольного N — не твоя работа, это ратификация). + +**4. Строка 187 — два лживых комментария.** `internal/pipeline/snapshot.go` («auto/draft исключены +per D8») и докстринг `internal/membank/memory.go` («Approved-only») описывают до-паковое поведение; +код с пака-20 сворачивает в хеш КАЖДУЮ строку любого статуса. $0, поведение не двигается. + +**5. Живой прогон вахты весов — ТОЛЬКО при явной санкции владельца в твоём запуске.** Если +санкция названа: прогнать риг из п.3 живьём (`TM_LIVE=1 TM_CLASSIFY6_CONFIG=<стендовый book.yaml> +go test -tags live -run TestLiveClassifierHarmSet -v ./internal/pipeline/`), сырьё персистить рядом с +проектом пробы, ЛЕДЖЕР не сбрасывать, принимать только `finish=stop`, потратить не больше названной +владельцем суммы. ⚠ **Стартовать вне пиковых окон DeepSeek (01–04 и 06–10 UTC)** — в пике вызов +стоит вдвое; суммы копеечные, но правило стоячее. **Санкции нет в твоём запуске — пункт НЕ исполняется**, и это не obstacle, а +норма: платные вызовы без явно названной суммы запрещены. + +**Чего НЕ делать (жёстко).** +- Не трогать ничего, что двигает провод: тела промптов, состав инъекции, версии снапшота, + `RequestHash`, `memory_version`, голден. Этот пак **wire-нейтрален** — все правки обязаны оставить + голден бит-в-бит; расхождение голдена = стоп и пинг, а не пере-съём голдена. +- Не чинить попутно другие строки бэклога, даже если увидишь. Увидел — **в отчёт списком находок**, + оркестратор заведёт строки. +- Не ветвить Go-логику по языковой паре (инвариант общности): ревью-вопрос «заработает ли на паре, + которой в репо нет, без правки Go». +- Не запускать платных вызовов вне пункта 5. + +## 4. Самопроверка ИСПОЛНЕНИЕМ (обязательный механизм, не перечитывание) + +- **Батарея:** `cd backend && make battery` — EXIT=0, и в её хвосте список SKIP: каждый скип объясни + (скип, который ты не объяснил, читается как непокрытое место). +- **Голден бит-в-бит** — командой (`go test ./internal/pipeline/ -run Golden -count=1`), а не + «батарея прошла»; результат в отчёт. +- **Фиксы пунктов 1 и 2 (включая usage-строку) прибиты тестом, падающим на до-фиксном коде** — покажи + это ИСПОЛНЕНИЕМ: временно откати свой фикс (в рабочем дереве, без git-команд), покажи красный, + верни. Формулировка «тест добавлен» без красного до-фиксного прогона не принимается. + **Для пунктов 3 и 4 требование НЕ применяется и имитировать его не надо:** п.4 — правка двух + комментариев, поведения не двигает вовсе; п.3 живёт под тегом `live`, и «красный до-фиксный прогон» + там означал бы платный вызов, запрещённый вне п.5. Их доказательство другое: п.3 — компиляция ОБОИХ + тег-сетов (`make battery` гоняет `vet` по обоим) плюс юнит на пороговую арифметику, если она + выносима из платного пути; п.4 — цитата кода против цитаты комментария в отчёте. +- **Дифф `^func Test` — исполнением**: `grep -rh '^func Test' backend --include='*_test.go' | wc -l` + до и после; удалённых имён тестов быть не должно (проверь по именам, не по числу). +- **Править или удалять существующий тест/голден/гейт ради зелени — НЕДОПУСТИМО.** Несогласие с + тестом — пинг, а не правка. +- **Адверсариальное ревью финалом — механизмом: субагенты РАЗРЕШЕНЫ и ожидаются, спавнь.** ≥2 + независимых ревьюера по финальному диффу, author≠reviewer: (а) **денежная линза** — по строке 181 + пере-считать вручную, из сырого леджера, число согласия ДВУМЯ независимыми путями и сверить с тем, + что печатает движок. ⚠ **Только на КОПИИ стендовой БД, вне живого проекта** — `translate` пишет в + проект ещё до гейта согласия (пре-флайт бэкап), и «проба на живом» испортит и стенд, и улику; + (б) **линза шва** — инвентарь ВСЕХ кодов выхода и их потребителей ЧТЕНИЕМ кода платформы + (`platform/internal/ingest/`, `platform/internal/runs/`), а не по твоему списку: изменил ли пункт 2 + то, что платформа читает. Плюс **свои посадки-мутации** в новые тесты (не из ожидаемого тобой + списка). **Артефакт — таблица «находка → диспозиция»** в отчёте; ноль находок = не верить прогону, + спавнить третьего. + Считаешь, что для этого пака вернее другие оси ревью, — **замени с аргументом**; молча сузить нельзя. +- **Записка-план:** перед сдачей — таблица «пункт заказа 1–5 → исполнено (где) / отказ (почему)», + механической сверкой против §3, а не по памяти. +- Сессия длинная — **интервальная самоверификация субагентом** против §3 и §4 в середине работы, не + только в конце. + +## 5. Дисциплина отчёта + +- **Заявление = команда.** Каждое число и каждая категорика отчёта — с командой, которой получены; + приёмка их пере-ранит. Эрудиция не улика: либо `file:line`/замер, либо пометка «мнение». +- **Перед отправкой отчёта сверь КАЖДЫЙ клейм с результатом инструмента ЭТОЙ сессии** — не с памятью + о том, как обычно бывает. +- **Последний абзац отчёта — план или обещание? Значит, сделай это сейчас**, а не пиши про это. +- **Obstacle reporting — обязательная секция:** что НЕ удалось · что не проверено · где остановился и + почему. Пустая секция при непустой работе не бывает. +- Плотность, а не объём. Без саги, без пересказа диалога, без шаблонных оговорок. + +## 6. Канал вопросов и право отказа + +Промт против кода, доков или спеки — **пинг через владельца, НЕ интерпретация**: промт писала +нейросеть, и он может быть неправ. Право сказать «этого делать не надо» — есть, с аргументом; такое +возражение ценнее тихой девиации. Промежуточный вопрос, блокирующий работу, — тоже пинг: не гадай. + +## 7. Старт и сдача + +**Эхо-протокол:** первым деливераблом — ≤10 строк «скоуп / инварианты / чего не делаю», ДО работы. +**Сдача:** запись в `docs/PROGRESS.md` секция «Бэкенд» (записка-план · команды · таблица +адверсариального ревью · obstacle · список находок вне заказа), дерево НЕзакоммиченное. diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index f264249b..8027cf61 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,14 +1,14 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-16, голова D39.146 — ЗАКРЫТИЕ СЕССИИ №17, передача №18. ОЧЕРЕДЬ №18 (единственный носитель — здесь): (а) приёмка живого P7 → лендинг → S5-промт + разморозка фронта · (б) лендинг петель полигона — ⚠ в дереве НЕзадокументированная работа 16.08 (`eval/dovodka/PLAN-16-08.md`, `ja6.py`, `naklon.py`, свежие фризы) без записи в журнале, состав выяснить у полигона · (в) вахта весов V4-Pro-0813 с порогом 116 в риге (172-г) · (г) свободные бэкенд: 160 Этап 0, 181 (дедлайн — первый пере-прогон) · (д) строка 148 после фраз владельца; лента нот эры — реестр `architecture/05-decisions-index.md`). Оркестраторов ДВА (решение владельца 07.08): этот — движок/платформа/фронт/доки; параллельный (РОЛЬЮ, без номера — счётчик один, D39.112 п.6) — приёмка полигона. Одновременно не запускаются; CURRENT-STATE ведут оба, чужие строки не трогают. Норма изоляции панелей после инцидента отката чужих файлов — D39.113, гардрейлы в CLAUDE.md. +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-17, голова D39.147 — КУРС: движок и платформа до «работает и отдаёт результат», фронт морозится ДАЛЬШЕ лендинга P7. ОЧЕРЕДЬ №18 (единственный носитель — здесь): (а) приёмка живого P7 → лендинг **БЕЗ S5 и без разморозки** (D39.147: P7 зону не размораживает) · (а2) промт бэкенд-пака честности выдан — `BACKEND_HONESTY_PACK_SESSION_PROMPT.md` (176 · 181 · 172-г · 187; п.5 живой вахты — только при названной владельцем сумме), запуск по слову владельца · (б) лендинг петель полигона — ⚠ в дереве НЕзадокументированная работа 16.08 (`eval/dovodka/PLAN-16-08.md`, `ja6.py`, `naklon.py`, свежие фризы) без записи в журнале, состав выяснить у полигона · (в) вахта весов V4-Pro-0813 с порогом 116 в риге (172-г) · (г) свободные бэкенд: 160 Этап 0, 181 (дедлайн — первый пере-прогон) · (д) строка 148 после фраз владельца; лента нот эры — реестр `architecture/05-decisions-index.md`). Оркестраторов ДВА (решение владельца 07.08): этот — движок/платформа/фронт/доки; параллельный (РОЛЬЮ, без номера — счётчик один, D39.112 п.6) — приёмка полигона. Одновременно не запускаются; CURRENT-STATE ведут оба, чужие строки не трогают. Норма изоляции панелей после инцидента отката чужих файлов — D39.113, гардрейлы в CLAUDE.md. > - **Эра №15 закрыта — семь приёмок, все ПРИНЯТЫ и залендены**; лента, коммиты и разборы — D39.109–123 (D-лог) и реестр нот `architecture/05-decisions-index.md`; снимок прежних бюллетеней этой шапки — архив-слайс `-08-02-04`. -> - **ЖИВОЕ:** полигон — **фаза Д ИДЁТ** (заказ 10.08; деньги санкционированы 15.08 напрямую полигону — ⚠ числа потолка в носителях расходятся, фактическую цепь сверить при лендинге петель; ja-книга `enkan_no_hate_ja`; при ратификации фазы Д в D-ноту: декой-правило + обязательный кросс-семейный опровергатель приёмки — одобрены 10.08; свежие фриз-коммиты полигона в дереве — НЕ трогать) · **платформа — P7 ЗАПУЩЕН 16.08** (промт `platform/docs/PLATFORM_P7_SESSION_PROMPT.md`, строит по канону 0.3.0; приёмка — очередь №18; первым шагом пака — рантбук migrate end-to-end, предусловие выката) · **фронт ЗАМОРОЖЕН** (D39.136 п.2; разморозка = лендинг P7 + первое касание зоны: зеркало 0.3.0 + перегенерация типов + моки + гейт утечки конвейера + ФС-1..12 + Ф-63/Ф-28 + фразы В-11 по словарю кодов) · **контракт 0.3.0 ФИНАЛЕН в каноне** (батч+дофикс D39.142/143 · модель подписи «один ОК» D39.144 · дочистка D39.145; зеркало фронта отстаёт ратифицированно) · закрытые стройки эры — лентой нот: эмиттер D39.131 · P5/P6 D39.130/132 · migrate D39.134 · S4+0.2.3 D39.135 · DeepSeek-репин D39.137 (тела — D-лог и слайсы). +> - **ЖИВОЕ:** полигон — **фаза Д ИДЁТ** (заказ 10.08; деньги санкционированы 15.08 напрямую полигону — ⚠ числа потолка в носителях расходятся, фактическую цепь сверить при лендинге петель; ja-книга `enkan_no_hate_ja`; при ратификации фазы Д в D-ноту: декой-правило + обязательный кросс-семейный опровергатель приёмки — одобрены 10.08; свежие фриз-коммиты полигона в дереве — НЕ трогать) · **платформа — P7 ЗАПУЩЕН 16.08** (промт `platform/docs/PLATFORM_P7_SESSION_PROMPT.md`, строит по канону 0.3.0; приёмка — очередь №18; первым шагом пака — рантбук migrate end-to-end, предусловие выката) · **фронт ЗАМОРОЖЕН** (D39.136 п.2 + **D39.147: морозится ДАЛЬШЕ лендинга P7 — слово владельца 17.08; P7 зону НЕ размораживает, S5-промт не выдаётся, разморозка отдельным словом по достижении сквозного пути**; перечень первого касания зоны — зеркало 0.3.0 + перегенерация типов + моки + гейт утечки конвейера + ФС-1..12 + Ф-63/Ф-28 + фразы В-11 по словарю кодов — не отменён, ждёт разморозки) · **контракт 0.3.0 ФИНАЛЕН в каноне** (батч+дофикс D39.142/143 · модель подписи «один ОК» D39.144 · дочистка D39.145; зеркало фронта отстаёт ратифицированно) · закрытые стройки эры — лентой нот: эмиттер D39.131 · P5/P6 D39.130/132 · migrate D39.134 · S4+0.2.3 D39.135 · DeepSeek-репин D39.137 (тела — D-лог и слайсы). > - **Открыто на владельце:** **развязка git с origin** (локальная линия ИСТИННА, force-push его рукой; не пуллить) · Приложение А контракта (148: фразы — по словарю кодов 0.3.0, структура готова) · продуктовое слово «остановлена: лимиты» (В-3) · В-4/Ф-30 (глава без заголовка — движковая половина строка 160) · мини-проба флора 44 (одобрена, промт не выдан; число — после ре-пробы 188) · подпись денежного шага 46 · лист В-3+К-6 · авто-резюм paused (вопрос платформы) · **схема time-based DeepSeek** (доклад — архив-слайс `PROGRESS-2026-08-14-15`; рекомендация: пик оставить + операционное правило «прогоны в долины», scheduler не начинать без ответа вендора об отметке тарификации) · **вход ратификации фазы Д:** посылка «dspro дешевле glm» в пике ПЕРЕВЁРНУТА (×1.26 дороже, D39.137 п.4) · **возражение Sol по проходу `tier` эксп-23** (пере-судить починенным ригом или оставить с записанным возражением — секция «Полигон») · фронт-вопросы зонного журнала: В-7 (плотность; держит Ф-54) · В-8 (слово состояния в дереве) · В-9 (языки интерфейса — механизм готов, ПТ-36) · Ф-38 (вкладка «Замечания»). Закрытые пункты листа (PD-104 · В-10 · В-11-форма · Ф-56/57/61/62/63 · Ф-28 · ПТ-33-граница · 116 · 126 · 172-пин · PD-203 · санкции фазы Д · дизайн 160/161 · title) — в нотах D39.136–145, здесь не держатся. > - **Сделано (сводно)** — снимок ленты закрытых эр в [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–15.08 (пере-пин ИСПОЛНЕН и ПРИНЯТ, D39.137):** таблица цен запинена ПИКОМ (flash 0.44/1.32 · pro 1.32/3.96/кэш-хит 0.044 за 1M; счёт шиппинг-c1 = 100% DeepSeek ⇒ ×4.2–4.4 в пике / ×2.1–2.2 в долине — замер по трём прогонам); у pro эффорт стал настраиваемым low/high/max (квирк 3а устарел — вахта §Б-108 сработала); ⚠ ВЕСА pro сменились под тем же слагом (V4-Pro-0813, класс D39.61) — вахта-риг готов (остаток 172); ⚠ посылка интерим-редактора «dspro дешевле glm» в пике ПЕРЕВЁРНУТА (×1.26 дороже — вход ратификации фазы Д, D39.137 п.4); покупки фазы Д на deepseek до 16.08 16:00 UTC — по старым ценам. ⚠ **ВЕСЬ банковый контур (банкнота+терминолог+классификатор) в shipping-c1 НЕ включён** — жив ран-локальным конфигом книги (строка 140; сверка STACK.md 09.08 — факт шире прежней декларации «одна банкнота»); эскалация в shipping за `budget_usd: 0` (STACK.md §примечания). -> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 16.08 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **149** строк · зона бэкенд **73** строго / **103** широко (175 пере-скоуплена D39.134; 176/177 заведены 15.08; 178 — D39.136; 179 ЗАКРЫТА D39.138; 180/181 — D39.137; 182 — wire-батч, аудит 15.08; 183–187 — контракт-ревью 28, D39.138; 188–190 — аудит бэклога, D39.140; 191/192 — модель подписи банка и пост-ридинговый цикл, D39.144) (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **35** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). +> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 17.08 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **150** строк · зона бэкенд **73** строго / **104** широко (175 пере-скоуплена D39.134; 176/177 заведены 15.08; 178 — D39.136; 179 ЗАКРЫТА D39.138; 180/181 — D39.137; 182 — wire-батч, аудит 15.08; 183–187 — контракт-ревью 28, D39.138; 188–190 — аудит бэклога, D39.140; 191/192 — модель подписи банка и пост-ридинговый цикл, D39.144; 193 — молчащие дыры выдачи, D39.147) (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **36** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). > - Архивы хроники: `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)** · `-08-04-09` (пинги закрытых паков эры №15) · **`-08-14-15` (закрытые бэкенд-записи №16–17: эмиттер шва · migrate · пере-пин DeepSeek; вынесено D39.139)**. Записи ниже — живой хвост (№16+, эра D39.124+; подрезка D39.139). ## Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора) @@ -134,12 +134,13 @@ | 190 | **Кросс-СЕМЕЙНЫЙ проход контракт-ревью** (не-Claude опровергатели; буква заказа владельца D39.136 п.5 «кросс-модели», исполненная в ревью только кросс-тирами Claude — ограничение честно заявлено research/28 §7/§10): проверка вердиктов доклада моделью другого семейства полигонным контуром; жила только колонкой «ЖИВОЕ» реестра нот — аудит D39.140 дал строку | полигон | когда-нибудь (после фазы Д; перед лендингом батча 183 — если владелец захочет второй рубеж) | полигон-слот с внешним провайдером | research/28 §10, аудит D39.140 | | 191 | **Подпись банка = ОДИН ОК всему банку (модель владельца 16.08, D39.144)** — пер-термный полный набор решений НЕ гейт нигде: (а) контракт поправлен (409-полноты снят с resume, `pending_decisions` информационный — исполнено D39.144); (б) **движок**: verify_bank-пауза снимается командой resume с решениями «как есть», нерешённое едет авто-строками с пометкой — авто-провод D39.42 п.3 УЖЕ так работает, проверить/ослабить только границу самой паузы; (в) **платформа**: канал решений P7 строится накопительным БЕЗ гейта полноты + проводка «resume = снятие стопа» до движка; (г) пост-ридинговый цикл правок — выселен строкой **192** (носитель думания) | бэкенд+платформа | скоро (**P7 запущен** — (в) исполняется им; (б) сверка границы паузы движка — внутри P7 чтением кода, правка движка при расхождении = пинг №18) | (б) малое касание движка · (в) внутри P7 | слово владельца 16.08, D39.144, D39.42 п.3 | | 192 | **Пост-ридинговый цикл правок банка — «наше подумать» владельца 16.08 (записано, чтобы не потерялось; точную механику «не продумал ещё никто и нигде» — его слово).** UX-модель целиком: юзер нажал перевод → черновая волна + майнинг вместе → на фронте появляются ЧЕРНОВОЙ перевод и ЧЕРНОВОЙ банк · подписывается ВЕСЬ банк одним ОК (D39.144) → перевод уходит в доработку · дальше юзер ЧИТАЕТ, и его опции: поправить термин в банке ЛИБО добавить свой → кнопка «поправить» → пере-генерация, которая по ВХОЖДЕНИЯМ правит запрошенное. Открытые вопросы дизайна: что именно перегенерируется (вхождения ключа · затронутые юниты · со сметой и согласием?) · нужен ли движковый ТОЧЕЧНЫЙ РЕДАКТОР (полигон над этим работает — фаза Д) · форма в контракте (ручки нет) и на экране. Уже лежит под ногами: движковый re-edit по ключу банка со сметой и $0-пере-пином ПОСТРОЕН (строка 49: `repin.go`/`rebill.go`, D39.42 п.5/D39.45) · пометка неподписанных строк · дельта-чтение банка (0.3.0). НЕ проектировать до полигонных итогов; затем дизайн-пак на их результатах → слово владельца → стройка | владелец+полигон → бэкенд/контракт/фронт | когда-нибудь (триггер: итоги фазы Д по точечному редактору) | дизайн-пак после полигона → слово владельца → стройка | слово владельца 16.08, D39.144 п.1 | +| 193 | **Дыры выдачи МОЛЧАТ в самом тексте книги** (инвентарь №18, всё грунтовано кодом): выпавший c-lite-член юнита исчезает из отгруженного текста БЕЗ маркера — читатель получает склейку без пропущенного куска и признака в тексте нет (`internal/pipeline/export.go:211-223`) · флагнутый юнит отдаётся пустым `final_text` (`:324-329`) · платформа поверх сознательно срезает `flag_reason`/`detail` до трёх значений (`platform/internal/ingest/export.go:21-24`) ⇒ на читательской поверхности дыра есть, а причины нет · и ни один гейт не отказывается выдать дырявую книгу: `export` возвращает успех даже при 100% pending (`cmd/tmctl/render.go:474-475` — «export is an audit projection, not a run verdict»), лестницы `run_complete/structurally_complete/publishable` в коде 0 вхождений. Родня: 141 (сноска без слова-заголовка уезжает дырой) и «политика красных» строки 49 — брать ОДНИМ касанием с ассемблером, врозь не имеет смысла | бэкенд (+платформа) | скоро (вместе с 49) | маркер дыры в тексте + причина на провод + отказ отдавать дырявое как готовое | инвентарь №18, **D39.147** п.2б | | 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) | | 51 | `human_override` LOCK (D29 п.1г, в коде 0 вхождений) | бэкенд | когда-нибудь | отдельное решение | D39.34(4) | | 52 | **Ф2-гейты вне идеала**: морфо-гейты канцелярита + L1-лемматизация (python-сайдкар) · полный OpenCC · опциональный пре-перевод гейт ; состав явно: канцелярит + РОД (строка 82) + класс Ф2-гейтов карты 04-unhappy (обсцен-гейт/феминитивы/время сцены — состав решить паком) ; + класс идиоматики (свип-хвост, D39.73): сехоуюй-словарь · вэньянь-классификатор (zh) · васэй-эйго ложные друзья (к ja-паку 81) — данные пары или закрытие «банк книги покрывает» тем же паком | бэкенд | когда-нибудь | отдельное решение | D39.34(4) | -| 54 | Масштаб целой книги: волны/каденс/потолки/ETA на сотнях глав (гоняли максимум 10; книга 7,78 млн симв., ~2284 раздела) | бэкенд | когда-нибудь (последним по курсу) | МАСШТАБ | D39.33, CURRENT-STATE | +| 54 | Масштаб целой книги: волны/каденс/потолки/ETA на сотнях глав (гоняли максимум 10; книга 7,78 млн симв., ~2284 раздела). ⚠ **Дописка инвентаря №18 (D39.147 п.2г):** жёстких потолков размера в коде НЕТ, но исходник читается в память целиком (`chunk/ingest.go:98`), чтения стора беспагинационны под `opTimeout = 10s` (`store/store.go:39`) и бюджеты нарезки калиброваны на 25 главах (`config/pipeline.go:126-138`) — ни одно из трёх на 2283 главах не проверено ничем | бэкенд | когда-нибудь (последним по курсу) | МАСШТАБ | D39.33, CURRENT-STATE | | **— ПОЛИГОН (кандидаты пакетов) —** | | | | | | | 55 | **`dialogue_dash` мерить только на невиданном тексте** (подогнан под 蛊真人; цифры мини-прогона аргументом не считаются) ; расширено до вне-претрейн чекпоинта целиком: r-коэффициенты exp01/08 · precision чекеров · частота эха · чистовик exp15-выводов ; + arity-полоса паспорта (D29.2г): решить — dialogue_dash покрывает диалоговую половину или мерить (D39.73). **Частично закрыта эксп-21 (D39.117):** направление главного вывода воспроизведено на чистом en-материале (узнавание 1/5), $0-довесок исполнен частично; **срез эксп-21 НЕ купил** (главный zh-замер на книге 4/5, без пинга) — остаток = неконтаминированный zh-срез | полигон | скоро (эксп-22 Ф0 — повторный ЖЁСТКИЙ заказ, стоп при неисполнимости) | эксп-22 | D39.37(4), D39.40, D39.46, D39.108, **D39.117** | | 56 | Ёфикатор/санитайзер-классы не размечены (§6.5 отчёта пакета-6) | полигон | когда-нибудь | полигон-пакет | D39.46, CURRENT-STATE | diff --git a/docs/README.md b/docs/README.md index dadf6a9b..3809bdb9 100644 --- a/docs/README.md +++ b/docs/README.md @@ -17,7 +17,7 @@ - `research/` — фактура ресёрчей 01–28; у принятых — ревью-шапки, часть тел под ⚠ 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: записка-план, сниппеты хендоффов, карта «уже делаем/перенять») · **28 контракт-ревью API v0 (ПРИНЯТ D39.138: решения владельца 16.08 — §8, состав батча 0.3.0 — §5; НОСИТЕЛЬ для исполняющих сессий, читать оригинал, не пересказ)**. - [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) (роль/нормы; состояния не дублирует) · **Батч 0.3.0 ОТРАБОТАН ЦЕЛИКОМ (D39.142+D39.143): канон 0.3.0 финален**, промт в `archive/prompts/`, отчёт — `archive/reports/CONTRACT_BATCH_0.3.0_REPORT.md` · **Полигон: [POLYGON_EXP2223_REDO_SESSION_PROMPT.md](POLYGON_EXP2223_REDO_SESSION_PROMPT.md)** — фаза Д доводки эксп-22/23 ИДЁТ (заказ владельца 10.08; потолки фазы поднимал владелец напрямую — числа в CURRENT-STATE; выводы 22/23 заморожены до неё), хендофф живой сессии — [POLYGON_PHASE_D_HANDOFF.md](POLYGON_PHASE_D_HANDOFF.md) (испр. оркестратором №18: файл заленден `67e3260`, в составе не значился) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (отложен). **Фронт: ЗОНА ЗАМОРОЖЕНА (D39.136 п.2)** — S4 ИСПОЛНЕН и ПРИНЯТ (D39.135, лендинг `267aa35`; контракт 0.2.3 в каноне; промт в `frontend/docs/archive/`); разморозка = лендинг P7 + гейт S5 (~~В-10~~ закрыт 16.08 «вежливость» · фразы В-11 — форма из ревью 28: клиент рисует по машинному `code`, после батча 183); живой smoke против дев-стенда легитимен и во фризе; фикс-лист ФС — запись приёмки 15.08 в зонном журнале · **Платформа: активного промта НЕТ** — P6 + дофикс ИСПОЛНЕНЫ и ПРИНЯТЫ (D39.132, промты в `platform/docs/archive/`); **P7 ЗАПУЩЕН 16.08, сессия ЖИВАЯ**: `platform/docs/PLATFORM_P7_SESSION_PROMPT.md` (читающая поверхность по финальному канону 0.3.0 + модель ошибок + форварды + PD-104 + демонтаж гейта полноты банка; приёмка — оркестратор №18) · **Бэкенд: активного промта НЕТ** — пере-пин цен DeepSeek ИСПОЛНЕН и ПРИНЯТ (D39.137, лендинг `76049bb`; промт в `archive/prompts/`), потолки снова защищают; `tmctl migrate` — D39.134 (`d55edd4`), деплой эмиттер-бинаря разблокирован. Эмиттер шва ИСПОЛНЕН и ПРИНЯТ (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) (роль/нормы; состояния не дублирует) · **Батч 0.3.0 ОТРАБОТАН ЦЕЛИКОМ (D39.142+D39.143): канон 0.3.0 финален**, промт в `archive/prompts/`, отчёт — `archive/reports/CONTRACT_BATCH_0.3.0_REPORT.md` · **Полигон: [POLYGON_EXP2223_REDO_SESSION_PROMPT.md](POLYGON_EXP2223_REDO_SESSION_PROMPT.md)** — фаза Д доводки эксп-22/23 ИДЁТ (заказ владельца 10.08; потолки фазы поднимал владелец напрямую — числа в CURRENT-STATE; выводы 22/23 заморожены до неё), хендофф живой сессии — [POLYGON_PHASE_D_HANDOFF.md](POLYGON_PHASE_D_HANDOFF.md) (испр. оркестратором №18: файл заленден `67e3260`, в составе не значился) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (отложен). **Фронт: ЗОНА ЗАМОРОЖЕНА (D39.136 п.2)** — S4 ИСПОЛНЕН и ПРИНЯТ (D39.135, лендинг `267aa35`; контракт 0.2.3 в каноне; промт в `frontend/docs/archive/`); ⚠ **разморозка БОЛЬШЕ НЕ привязана к P7** — слово владельца 17.08 (D39.147): зона морозится дальше лендинга P7, S5-промт не выдаётся, курс — движок и платформа до «работает и отдаёт результат»; разморозка отдельным словом. Перечень первого касания (зеркало 0.3.0 · типы · моки · гейт утечки · ФС-1..12 · Ф-63/Ф-28 · фразы В-11 по словарю кодов; ~~В-10~~ закрыт «вежливость») не отменён, ждёт разморозки; живой smoke против дев-стенда легитимен и во фризе; фикс-лист ФС — запись приёмки 15.08 в зонном журнале · **Платформа: активного промта НЕТ** — P6 + дофикс ИСПОЛНЕНЫ и ПРИНЯТЫ (D39.132, промты в `platform/docs/archive/`); **P7 ЗАПУЩЕН 16.08, сессия ЖИВАЯ**: `platform/docs/PLATFORM_P7_SESSION_PROMPT.md` (читающая поверхность по финальному канону 0.3.0 + модель ошибок + форварды + PD-104 + демонтаж гейта полноты банка; приёмка — оркестратор №18) · **Бэкенд: [BACKEND_HONESTY_PACK_SESSION_PROMPT.md](BACKEND_HONESTY_PACK_SESSION_PROMPT.md) ВЫДАН 17.08, запуск по слову владельца** (пак «честные числа и статусы»: строки 176 · 181 · 172-г · 187; п.5 живой вахты весов исполняется ТОЛЬКО при названной владельцем сумме) — ранее: пере-пин цен DeepSeek ИСПОЛНЕН и ПРИНЯТ (D39.137, лендинг `76049bb`; промт в `archive/prompts/`), потолки снова защищают; `tmctl migrate` — D39.134 (`d55edd4`), деплой эмиттер-бинаря разблокирован. Эмиттер шва ИСПОЛНЕН и ПРИНЯТ (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 793211e4..39c394fe 100644 --- a/docs/architecture/05-decisions-index.md +++ b/docs/architecture/05-decisions-index.md @@ -1,4 +1,4 @@ -# Реестр D-нот — карта актуальности v2 (D1–D39.146; строка 167; титул — носитель головы, бампать при каждом аппенде — испр. оркестратором №17 15.08 по аудиту: отставал на четыре ноты) +# Реестр D-нот — карта актуальности v2 (D1–D39.147; строка 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`. @@ -199,3 +199,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 готов, запуск — слово владельца | жив | платформа промпт контракт процесс | | D39.146 | 16.08 | Закрытие сессии №17, передача №18: лента D39.134–145 (приёмки migrate/S4/DeepSeek, контракт-ревью+батч+дофикс — канон 0.3.0 финален, модель подписи один ОК, аудит бэклога потерь 0, реструктуризация роли); очередь №18 — приёмка запущенного P7 → S5+разморозка фронта, лендинг петель фазы Д, вахта весов с порогом 116, свободные 160/181; CURRENT-STATE ужат, доки проверены двумя аудиторами готовности | ЖИВОЕ: очередь — CURRENT-STATE | жив | хендофф оркестратор | +| D39.147 | 17.08 | Слово владельца напрямую №18: фронт морозится ДАЛЬШЕ лендинга P7 (условие разморозки D39.136 п.2 амендировано — P7 зону не размораживает, S5 не выдаётся, разморозка отдельным словом), курс — движок и платформа до «работает и отдаёт результат», моки фронта при разморозке уступают дев-стенду платформы; инвентарь трёх аудитов кодом: ассемблера книги нет нигде и export всегда exit 0 (строка 49), дыры выдачи молчат в тексте (новая 193), боевой конфиг без банкового контура = 140 внутри wire-батча 182, беспагинационные чтения стора под 10s (дописка 54), платформа после P7 читаема но без экспорта и эскроу (136/137/П-18), блокирующих строк движка 18 из 103 и два тяжелейших не про код (54, 16) | ЖИВОЕ: курс и условие разморозки | жив | процесс фронт платформа владелец | diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index 543d7008..970e8b1b 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,4 @@ -# Журнал решений оркестратора — контракт D1–D39.146 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`) +# Журнал решений оркестратора — контракт D1–D39.147 (живой файл: карта · эрраты · живые тела · голова 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+). @@ -463,3 +463,11 @@ **3. Гигиена передачи:** CURRENT-STATE ужат (лента закрытых строек и закрытые пункты листа владельца — указателями на ноты); строки 169/186/191 приведены к «P7 запущен»; README/09-target/реестр требований актуализированы; журналы зон срезаны в зонные архивы по слову владельца (фронт 2434→469 строк — `frontend-PROGRESS-S0-S4.md`; платформа 1843→152 — `platform-PROGRESS-P4-P6.md`); секция «Полигон» ужата (закрытые записи эксп-22/23 — в слайс `PROGRESS-2026-08-14-15.md`, живое: CONFIRM/DENY-листы и фаза Д). **4. Аудиты готовности (два Опуса, полный контекст) — диспозиции.** ОБЩИЙ («готова ~90%, 3 блокера»): полигонные доки фазы Д, жившие только в индексе с 15.08, ЗАКОММИЧЕНЫ (`67e3260` — потеря при reset исключена) · очередь №18 сведена в ЕДИНСТВЕННЫЙ носитель CURRENT-STATE (пункты а–д, вкл. потерянные «лендинг петель полигона» и «строка 148») · денежные литералы фазы Д ($4.50/$6.74) СНЯТЫ с README/CURRENT-STATE — числа в носителях расходились ($6.85/цепь промта), честный указатель «сверить фактическую цепь при лендинге петель» · ⚠ дереву добавлена запись: полигон работал 16.08 БЕЗ записи в журнале (`PLAN-16-08.md`, `ja6.py`, `naklon.py`) — состав выяснять при лендинге · глоссарий/компаньон-зеркало/провенанс реестра/два якоря migrate.go/чейнджлог-шапка — починены · норма «обязательство с адресатом вне зоны закрывается файлом ВНЕ зоны» — в закон роли (жила только памятью) · ОТКЛОНЕНО: вынос живых тел D22+ из D-лога (осознанная структура диеты D39.125). ЗОННЫЙ («платформа готова, фронт нет без двух правок»): компаньон дочищен от гейта полноты в §2.9 и «15 кодов»→16 — пятое и шестое места недочистки D39.144 (к эррате 16.08-д) + мёртвые якоря mining.go:201 · фронту — дописка-пинг о четырёх нормах, сменивших знак (зеркало отстаёт ратифицированно · метка «Глава N» теперь ОБЯЗАННОСТЬ клиента · Ф-31/В-6 закрыты, EventCeiling снят · В-11 на словарь 0.3.0 + дев-стенд P6 существует) · платформе — дозакладка протухших мест зоны к §4.6 промта (релей). (16.08.2026, оркестратор №17) ✅ + +## D39.147 — СЛОВО ВЛАДЕЛЬЦА 17.08 (напрямую №18): ФРОНТ МОРОЗИТСЯ ДАЛЬШЕ ЛЕНДИНГА P7, курс — движок и платформа до состояния «работает и отдаёт результат» (17.08). ✅ + +**1. Решение (первоисточник — владелец, дословный смысл).** «Фронт морозим ещё дальше. Нам нужно довести бэкенд и платформу до логического какого-то завершения, чтоб они работали и отдавали что-то. А фронт будем накручивать уже на готовую функциональность и спиливать оттуда лишние моки, которые неплохо бы держать где-то на уровне бэкендов или как-то ещё отдельно.» ⇒ **условие разморозки D39.136 п.2 АМЕНДИРОВАНО: лендинг P7 зону БОЛЬШЕ НЕ размораживает**, S5-промт не выдаётся; разморозка — отдельным словом владельца по достижении сквозного пути. Входы первого касания зоны (зеркало 0.3.0 · типы · моки · гейт утечки конвейера · ФС-1..12 · Ф-63/Ф-28 · фразы В-11) не отменены — они ждут РАЗМОРОЗКИ, а не лендинга P7. Направление по мокам: мок-мир фронта уступает реальному источнику (дев-стенд платформы существует с P6, D39.132); форма («на уровне бэкендов или отдельно») — вопрос дизайна при разморозке, сейчас не проектируется. + +**2. Инвентарь под этот курс (три читающих аудита №18, всё грунтовано кодом; знание, не заказ — носители названы).** (а) **Движок не умеет отдать книгу:** `tmctl export` пишет только stdout — JSON либо ленту с баннерами `=== CHAPTER n CHUNK m ===` (`cmd/tmctl/render.go:477`, баннер флагнутого `:502`); ассемблера в файл нет ни в движке, ни в платформе, а `export` возвращает успех даже при 100% pending — «never an exit-2 sentinel … export is an audit projection, not a run verdict» (`cmd/tmctl/render.go:474-475`) — лестницы `run_complete/structurally_complete/publishable` в коде 0 вхождений. Носитель — **строка 49** (этап В D15.2), подтверждена кодом, вес не меняется. (б) **Дыры выдачи молчат в самом тексте** — новая **строка 193**. (в) **Боевой конфиг переводит «голым»** (0 вхождений терминолога/банкноты/майнера/классификатора/голоса/репейра в `configs/pipeline-c1.yaml`, `escalation.budget_usd: 0`): это **строка 140**, и её внесение ратифицированно живёт в wire-батче **182** — одним касанием перед первым платным прогоном; отдельной развилки нет (уточнение владельца 17.08 на вопрос №18). (г) **Масштаб:** жёстких потолков размера в коде нет, но чтения стора беспагинационны под `opTimeout = 10s` — **дописка в строку 54**. (д) **Платформа после P7 — «читаемая», не «законченная»:** экспорт-ручки отложены в P8 явно, денежный контур = холд-с-обрезкой без эскроу (перерасход срезается до холда и остаётся текстом в колонке, `platform/internal/pgstore/credits.go:212-235`), сверки с провайдером нет — **строки 136/137, П-18** зоны. (е) Раскладка бэклога движка по критерию «мешает ли сквозному пути»: 103 строки зоны, блокирующих **18** (+6 спорных), и два тяжелейших — **54** и **16** — не про код вовсе: книгу больше 10 глав и редакторскую волну не гоняли НИ РАЗУ, их закрывает только платный прогон. + +**3. Синхронизировано этим же коммитом:** CURRENT-STATE · `README.md` · ПТ-20 реестра требований · пинг в зонный журнал фронта. Очередь №18: приёмка P7 → лендинг **без** S5 и без разморозки; промт бэкенд-пака честности (176 · 181 · 172-г · 187) выдан и ждёт слова владельца на запуск. (17.08.2026, оркестратор №18) ✅ diff --git a/docs/product-requirements.md b/docs/product-requirements.md index 3961205f..6b67176d 100644 --- a/docs/product-requirements.md +++ b/docs/product-requirements.md @@ -52,7 +52,7 @@ | ID | Требование (источник) | Статус | Носитель / доказательство | |---|---|---|---| -| ПТ-20 | Ридер-IDE: VS Code-подобный фронт агентного перевода (V0-п.20/23) | ⭕ | research/16 принят (D29); строки 69–71; F3-brief — D29 п.3. Ф3 ОТКРЫТА 02.08 (D39.81): фронт-сессия живёт на моках; контракт API ратифицирован (D39.99, живой **0.2.3** — D39.135; целостное ревью ПРИНЯТО D39.138 — заказан ломающий батч **0.3.0**, строка 183); платформа построена до потребительской половины шва: вход/кредиты/квоты (P0–P3) + раннер P4 (D39.123) + интейк `POST /books` со стоп/резюмом (D39.130) + exit-словарь/фолд юнитов/дев-стенд (P6, D39.132); фронт — S3.5–S4 приняты (оболочка · слой данных · i18n · путь «файл→прогресс», D39.127/129/135), **зона ЗАМОРОЖЕНА до P7 (D39.136 п.2)** | +| ПТ-20 | Ридер-IDE: VS Code-подобный фронт агентного перевода (V0-п.20/23) | ⭕ | research/16 принят (D29); строки 69–71; F3-brief — D29 п.3. Ф3 ОТКРЫТА 02.08 (D39.81): фронт-сессия живёт на моках; контракт API ратифицирован (D39.99, живой **0.2.3** — D39.135; целостное ревью ПРИНЯТО D39.138 — заказан ломающий батч **0.3.0**, строка 183); платформа построена до потребительской половины шва: вход/кредиты/квоты (P0–P3) + раннер P4 (D39.123) + интейк `POST /books` со стоп/резюмом (D39.130) + exit-словарь/фолд юнитов/дев-стенд (P6, D39.132); фронт — S3.5–S4 приняты (оболочка · слой данных · i18n · путь «файл→прогресс», D39.127/129/135), **зона ЗАМОРОЖЕНА, и с 17.08 морозится ДАЛЬШЕ лендинга P7** (D39.136 п.2 + D39.147: сначала движок и платформа до «работает и отдаёт результат», фронт накручивается на готовую функциональность) | | ПТ-21 | Параллельное чтение двух текстов с выравниванием по смыслам (V0-п.21); выравнивание грубое, по единицам экспорта — принято владельцем 02.08, спаны внутри текста не строятся | 🔶 | механизм готов: `tmctl export --pairs` выравнивает пары побайтно по единицам редактуры (`internal/pipeline/export.go:89-93`); якорь = **edit-unit**, НЕ чанк (переформулировано D39.84 — финальный текст существует только на уровне юнита, ~1.9 юнита/главу, местами глава = один блок; читалка обязана это выдерживать); UI-читалка = Ф3 (этап S6) | | ПТ-22 | Настройки от человека: 18+, жанр и т.п. (V0-п.22) | 🔶 | `book.yaml` (labels) данными; UI = Ф3. ⚠ ЖАНР из продукта ВЫКИНУТ словом владельца 16.08 (D39.138 п.2в, строка 184: ни на чём не ветвится, влияние не измерено; снимается из промптов/брифа/контракта/формы) | | ПТ-23 | Веб-ПЕРВЫЙ фронт; SEO/ранжирование Google — куки, страницы-сироты, актуальные алгоритмы (V5-п.2); продукт = **SaaS**, не локальное приложение (решение владельца 02.08, D39.81 — натив-прицел V0-п.26 СНЯТ этим решением, вернуть только новым словом владельца); SEO только под Google, Яндекс снят; рынок глобальный; десктоп = PWA первым шагом, Tauri по явным триггерам (решения владельца 02.08, D39.84) | ⭕ | строка 71 (Ф3-бриф); SEO вошёл в стек-дизайн ДО выбора (D39.84, требование исполнено): двухконтурный деплой — SPA `app.<домен>` целиком под noindex + статический публичный контур ≤3 кликов от главной (лечение страниц-сирот), `frontend/docs/STACK_DECISIONS.md` §4; SSR-вопрос закрыт этим решением |