From 8c36fb584445ccf032e4f108403ea6615aa95c06 Mon Sep 17 00:00:00 2001 From: heaven Date: Fri, 11 Sep 2026 14:39:21 +0300 Subject: [PATCH] Put the platform order into the tree with both amendments its reader earned: measure before ruling on log identity, and never free a hold while the process still runs --- ..._DOES_NOT_DEPEND_ON_LUCK_SESSION_PROMPT.md | 281 ++++++++++++++++++ docs/README.md | 1 + docs/orchestrator-norms-scratchpad.md | 5 +- 3 files changed, 285 insertions(+), 2 deletions(-) create mode 100644 docs/PLATFORM_ANSWER_THAT_DOES_NOT_DEPEND_ON_LUCK_SESSION_PROMPT.md diff --git a/docs/PLATFORM_ANSWER_THAT_DOES_NOT_DEPEND_ON_LUCK_SESSION_PROMPT.md b/docs/PLATFORM_ANSWER_THAT_DOES_NOT_DEPEND_ON_LUCK_SESSION_PROMPT.md new file mode 100644 index 00000000..094fb5d1 --- /dev/null +++ b/docs/PLATFORM_ANSWER_THAT_DOES_NOT_DEPEND_ON_LUCK_SESSION_PROMPT.md @@ -0,0 +1,281 @@ +# Платформенный пак: ОТВЕТ ДВЕРИ НЕ ЗАВИСИТ НИ ОТ ПОРЯДКА, НИ ОТ ВЕЗЕНИЯ + +> Выдан оркестратором №23, 11.09. Зона записи — `platform/`. Пак КОДОВЫЙ, платных вызовов НЕ несёт. +> Контрактный минор **0.15.0** едет ТЕМ ЖЕ лендингом (см. §4.1), не раньше. + +## 1. Какая проблема и что решит твой результат + +Платформа — это дверь, за которой читатель заказывает перевод книги и платит за него. У двери сегодня +три разных способа ответить неправильно, и все три об одном: **ответ зависит не от фактов книги, а от +того, кто успел первым, сколько раз подряд не повезло, и какую половину правды успели спросить.** + +**(а) Человек, дважды нажавший «продолжить», видит ошибку — хотя прогон в этот момент СТАРТОВАЛ.** +Два вызова читают состояние, оба видят «можно», гонятся за замок; победитель переводит прогон в +`translating`, проигравший доходит до своей проверки и получает отказ «прогон уже переводится». Деньги +целы (отказ приходит ДО холда), сломано обещание интерфейса. + +**(б) Книга, чей каталог исчез, принимает прогон и заклинивает его НАВСЕГДА с открытым холдом.** Ни +один путь не приходит к терминальному состоянию: прогон вечно `translating`, деньги вечно в холде, +пользователю видно только «идёт». Это не редкий класс — тот же клин даёт прогон, запиненный к старой +сборке движка. + +**(в) Форма заказа говорит «покрываем всю книгу» над книгой, чей каталог пропал.** Правило допуска +разрезано: факты КНИГИ из базы спрашивают обе площадки, а ДИСК спрашивает только дверь. Человек видит +зелёный вердикт, жмёт — и получает отказ. + +**Что решит твой результат.** Ответ двери станет **инвариантным к порядку** (а), **конечным** (б) и +**опирающимся на факты, которые видит и форма тоже** (в). Мерило — деньги читателя и его доверие к +экрану: в бете оплаты нет, но холд, висящий вечно, — это баланс, которым человек не может распорядиться. + +⛔ **Чего этот пак НЕ делает:** не строит эскроу целиком (это `П-18`, отдельный предмет — см. §4.2) · +не трогает `backend/` и `docs/` (кроме канона контракта, §4.1) · не заводит новых ручек API сверх +объявленного минора · не меняет модель денег. + +## 2. Зона записи и git + +Зона — **`platform/`**, плюс канон контракта `docs/architecture/14-api-contract/` **только в объёме +минора 0.15.0** и только вместе с кодом (§4.1). Читать можно всё; писать — больше никуда. + +⛔ **Ты НЕ коммитишь.** Коммитит оркестратор при лендинге. Готовое дерево оставляешь и сообщаешь. Не +делай `git add`, `git commit`, `git stash`, `reset --hard`, `checkout` поверх грязного дерева: в дереве +параллельно работают другие сессии, и их незакоммиченные правки стираются безвозвратно. Канон — +`CLAUDE.md` §«Git-координация мультисессий», он сильнее этого абзаца. + +Пинги, итоги и вопросы — **ЗОННЫЙ журнал `platform/docs/platform-PROGRESS.md`**. ⚠ В `docs/PROGRESS.md` +платформа НЕ пишет (решение владельца). Дефекты — `platform/docs/DEFECT_REGISTER.md`, зонный бэклог — +`platform/BACKLOG.md` (неймспейсы `PD-N` и `П-N`). + +## 3. Карта чтения (ЗАКОН, пять позиций; дальше — только по её ссылкам) + +1. `CLAUDE.md` — ты его уже получила. +2. ⛔ **`platform/docs/ENGINEERING_STANDARDS.md`** — ратифицированный норматив зоны: §2 базовые стандарты + (проверяются КАЖДОЙ приёмкой) и §3 критерии приёмки. **Отступление от него = пинг мне, а не решение + на месте.** Это требование канона проекта к каждому платформенному промту, не вежливость. +3. `platform/README.md` + `platform/docs/PLATFORM_DIRECTION.md` — механика зоны и ратифицированное + направление. +4. Ряды реестра **PD-448** · **PD-162** · **PD-466** · **PD-139** (`platform/docs/DEFECT_REGISTER.md`) — + предмет целиком, с адресами и замерами. +5. `docs/architecture/14-api-contract/` — канон провода. ⚠ **Версию бери ФАЙЛОМ** + (`grep '^ version:' openapi.yaml`), не из прозы: на 11.09 там **0.14.0**. + +**Код-факты добывай САМА.** Все `file:line` ниже — отправные точки, а не истина: истина — дерево. Уехавший +адрес — находка, и она идёт в отчёт. ⚠ Цитируй адреса по `HEAD`, а не по своему рабочему дереву: отчёт +живёт дольше правки, и после лендинга половина адресов, снятых с рабочей копии, укажет в никуда. + +**Ратифицированное, что тебе понадобится (вложено сюда, грепать не надо):** + +* ⭐ **`D39.246` п.6 — направление этого пака, принятое актом.** Дословно: «Окно дефекта — не гонка за + уникальный индекс, а **интервал между чтением состояния и взятием замка**… её четвёртый путь — сделать + резюм идемпотентным по существу. **Принято как направление, строит СЛЕДУЮЩИЙ пак.**» И критерий, по + которому это лечение, а не обход: **ответ становится ИНВАРИАНТНЫМ К ПОРЯДКУ.** +* ⭐ **Там же — почему это НЕ обход, и довод не мой:** «гарантию „202 = пере-открыто ЭТИМ вызовом“ проект + УЖЕ не держит — дерево отдаёт 202 проигравшему гонку, и это ЗАПИНЕНО. Значит выбор не между починкой и + обходом, а между двумя смыслами глагола». Мой исходный довод был опровергнут; наследуй опровержение, а + не его. +* **`D39.240`** — остановка ЖЁСТКАЯ, деньги терять допустимо, но остановка обязана быть КОРРЕКТНОЙ: без + гонок, без половинчатых состояний, с верным возобновлением. +* **`D39.176` п.1** — продуктовых КВОТ и фри-тир-лимитов НЕТ и они не проектируются; грант новичку 0 — + решение владельца. Не строй ограничителей «на всякий случай». +* **`D39.121`** — тесты и гейты не подгонять под зелень. Правка теста, вызванная ЗАКАЗАННОЙ этим паком + сменой поведения, — обслуживание, и её надо ОБЪЯВИТЬ в отчёте (что изменилось, какой тест это описывал, + куда уехала гарантия). Правка *чтобы прошло* — недопустима. + +## 4. Заказ. У каждого пункта размечена свобода + +### 4.1. Резюм становится идемпотентным по существу — ЯДРО ПАКА · «делай РОВНО так» в части критерия, «реши сама» в части формы + +**Критерий приёмки задан актом и не обсуждается: ответ обязан стать ИНВАРИАНТНЫМ К ПОРЯДКУ.** Два +одновременных «продолжить» дают ОДИН холд и ОБА получают прогон — кто бы ни выиграл гонку. Форму +реализации выбираешь сама и аргументируешь. + +**Три вещи, которые едут вместе, названы актом:** +1. **вырез `stop_requested`;** +2. ⛔ **ветка `translating` ВЫШЕ проверки re-pass** — иначе это полуфикс. Поправка принадлежит зоне, а не + мне, и я её наследую как есть: если поставить ветку ниже, проигравший по-прежнему успеет получить + отказ на части траекторий; +3. **НАЗВАННЫЙ остаток окна, под который строить ничего не надо.** ⚠ Это ТРЕБОВАНИЕ, а не разрешение + недоделать: в отчёте должен стоять абзац «вот интервал, который остаётся, вот почему под него не + строим, вот чем он ограничен». Остаток без имени = дыра; остаток с именем = решение. + +⛔ **КАНОН ПРАВИТСЯ ТЕМ ЖЕ ЛЕНДИНГОМ — минор `0.15.0`, не раньше.** Причина механическая, и она уже +кусала зону: гейт версии сверяет объявленную версию с каноном, и если канон уехал вперёд кода, он +красит СДАННОЕ дерево. ⇒ правка `openapi.yaml` + компаньона и правка Go лежат в ОДНОМ дереве, которое ты +передаёшь мне. Если по ходу выяснится, что четвёртый путь минора не требует вовсе — **скажи это письмом, +и мы не будем его двигать**: версия не растёт «за компанию». + +⚠ Отправные точки (пере-снять командой): `platform/internal/runs/runs.go` около `ErrNotResumable` · +`platform/internal/runs/control_test.go` `TestTwoResumesOfOneRunTakeOneHoldAndBothAnswer` — пин +действующей гарантии; он и есть носитель того, что сегодня обещано. + +### 4.2. Прогон, заклинивший навсегда с открытым холдом — `PD-162` · «реши сама и аргументируй» + +Сегодня у ЖИВОГО прогона над пропавшим каталогом нет терминального состояния: `bookMeter` вечно падает +либо расчёт вечно откладывается, прогон вечно `translating`, холд вечно открыт. + +⚠ **Половина класса уже закрыта паком P5 — не строй её заново:** у ИНТЕЙКА счётчик неудач есть +(`books.parseAttempts` = 5 → `rejected` с причиной `parser_unavailable`), и прогон на книге, не прошедшей +интейк, отвергается до денег. **Не закрыт ровно живой прогон**, и лечение того же вида: счётчик неудач на +стороне реконсилятора, после N — терминальное состояние с внятной причиной и СНЯТЫМ холдом. + +⛔ **Границу проведи и назови сама.** Полный эскроу — это `П-18`, отдельный предмет, и его СТРОИТЬ НЕ +НАДО. Вопрос, на который я жду ответа с доводом: **достаточно ли терминального состояния после N неудач, +или без эскроу деньги всё равно остаются в неопределённости?** Если достаточно — построй и объяви цену. +Если нет — **это законный ответ «в этом паке не закрывается, вот почему»**, и он засчитывается как +исполнение пункта. + +⛔ **РЕЛЕЙ 11.09, находка сессии в эхо, и её в заказе НЕ БЫЛО: снятие холда без остановки ЖИВОГО процесса +меняет один дефект на худший** — вечный холд превращается в потерянные деньги плюс работающий +процесс-сирота. ⇒ **§4.2 исполняется только вместе с ответом «а что с процессом».** Нельзя корректно +остановить его в границах пака — терминальное состояние НЕ строится, и это законный исход с доводом; +цену любого выбора назови числом. + +⚠ И второй носитель того же клина, названный ре-чеком: обязательность `reserved_usd` даёт тот же вечный +отказ спавна БЕЗ всякого удаления каталога — на прогоне, запиненном к старой сборке движка. Проверь, лечит +ли твоё терминальное состояние оба, и скажи прямо. + +### 4.3. Форма говорит «да» над книгой, чьего каталога нет — `PD-466` · «реши сама», но лечение уже названо + +Правило допуска разрезано на две половины: факты КНИГИ из базы спрашивают обе площадки (`startable`), а +ДИСК спрашивает только дверь. + +⛔ **Очевидное лечение ЗАПРЕЩЕНО, и запрет обоснован зоной:** опрашиваемый путь — не место для `os.Stat`, +зависшее монтирование повесило бы каждый опрос каждого клиента. **Не делай стат на опросе.** + +**Названное дешёвое лечение:** не стат, а **ФАКТ В БАЗЕ** — интейк уже знает, что каталог создан, а +пропажу видит свип; тогда форма спрашивает его тем же предикатом, что и дверь, и разрез исчезает. + +Твоя работа: решить, **надо ли это строить сейчас**. Аргумент против стоит в самом ряду: «удаление +каталога под живой книгой — авария оператора, а не ординарный путь», денег человек не теряет, отказ +приходит до холда. Аргумент за: обещание формы «вердикт ДО клика» сегодня ложно, а §4.1 и §4.2 всё равно +трогают соседний код. ⇒ **законны оба исхода**; незаконен только исход без довода. + +### 4.4. Что уходит в ERROR-строку — `PD-139` · «реши сама», нужна ОДНА диспозиция на класс + +Ряд открыт не как баг, а как **нерешённый вопрос**: путь каталога книги попадает в ERROR-логи внутри +обёрнутых ошибок. Норма зоны §2 запрещает идентификаторы книги и пользователя в логах; ERROR — не INFO, и +оператор чинит именно этот путь. + +⚠ **И пак «правда у двери» принял по своей новой ветке ПРОТИВОПОЛОЖНОЕ решение** (несёт операцию и errno, +но НЕ путь), объявив цену: оператор видит «каталог книги пропал» и не видит, чьей именно. ⇒ **в дереве +сейчас две диспозиции на один класс.** Нужна ОДНА, и её принимаешь ты, с доводом. Любой из двух исходов +законен; незаконно оставить обе. + +⚠ **РЕЛЕЙ 11.09, по возражению сессии в эхо — заказ пункта ИСПРАВЛЕН.** Моя формулировка «в дереве две +диспозиции на один класс» предполагала то, что надо сначала ЗАМЕРИТЬ: путь каталога и идентификатор книги +— не одно и то же. Выводится `book_id` из пути в наших логах — класс один и диспозиция обязана быть одна; +не выводится (операторский корень тома) — классов ДВА, и обе диспозиции законны рядом. **Меряй первым, +решай вторым; «классов два» — полноценный исход пункта.** + +### 4.5. Чего НЕ брать + +Эскроу `П-18` целиком · любые квоты и фри-тир-лимиты (`D39.176` п.1) · `backend/` · `docs/` вне канона +контракта · рост версии «за компанию» без нужды кода. + +## 5. Самопроверка ИСПОЛНЕНИЕМ — и где у ЭТОГО пака мягко + +Мандат: после того как работа сделана, проведи **адверсариальный проход по СВОЕЙ готовой работе**. Глубину +и веер выбираешь сама. Субагенты РАЗРЕШЕНЫ явно. Артефакт — таблица «посадка → выжила/поймана → ЧЕМ +поймана», в отчёте, с выжившими поимённо. + +⚠ **Длинная сессия: раз в несколько часов — интервальная самоверификация субагентом против ЯВНЫХ критериев +этого промта** (`D39.121`), а не «перечитаю сама». + +⛔ **Мутация засчитывается по ТЕКСТУ падения, а не по факту красноты.** Правый вердикт по неправой причине — +дыра, а не поимка. ⛔ **Мутация, которая не СОБИРАЕТСЯ, — неизмеренная, а не выжившая** (урок этой зоны, +11.09: три таких читались бы как три дыры). ⛔ **Копия под мутацию защищается ПОСТРОЕНИЕМ, а не `set -e`:** +перед любой правкой в последовательности — `test -f go.mod` и сверка `pwd`; копия живёт ВНЕ общего +скретчпада. + +**Четыре места, где мягко ИМЕННО У ЭТОГО пака:** + +1. ⛔ **ГОНКУ НЕЛЬЗЯ ПИНИТЬ ФИКСТУРОЙ, ГДЕ ОНА НЕ СЛУЧАЕТСЯ.** Ряд `PD-448` замерен при `load average + 42–48`: под нагрузкой вызовы СЕРИАЛИЗУЮТСЯ, и дефект виден, а на тихой машине оба проходят проверку + вместе и тест зелен. ⇒ фикстура обязана делать оба порядка НЕИЗБЕЖНЫМИ (а не вероятными) — например, + удерживая победителя между чтением состояния и замком, — и гоняться НЕ ОДИН раз. Пин, флейковый на + мутанте, измеряет пустой сценарий. +2. ⛔ **«Ровно один холд» пинится СЧЁТОМ, а не отсутствием второго.** Утверждение «второй холд не взят» + удовлетворяется фикстурой, где второй холд невозможен по любой причине. Нужна фикстура, где второй + холд ОБЯЗАН прозвучать при старом поведении и ДОЛЖЕН молчать при новом, и обе половины исполняются. +3. ⛔ **Ассерт, сравнивающий провод с ТОЙ ЖЕ Go-константой, вакуумен** (урок этой зоны, 11.09: + переименование обоих новых значений пережило всю батарею). Лечится литералом плюс гейтом, читающим + enum из КАНОНА. Это прямо про твой минор `0.15.0`. +4. ⛔ **Терминальное состояние после N неудач — это ДЕНЬГИ.** Денежный пин строится так, чтобы холд был + НЕИЗБЕЖЕН, а не вероятен, и гоняется не один раз: измеренный случай 10.09 давал 2 красных из 8, потому + что обрыв выходил на $0 и строка сходилась «ноль к нулю», то есть тест ПРОХОДИЛ, не дойдя до предмета. + +## 6. Предметные оси ревью + +Три, замена любой с аргументом: + +1. **Деньги** — каждая новая ветвь отвечает числом: берётся ли холд, снимается ли он, и что видит баланс. +2. **Инвариантность к порядку** — для §4.1 это и есть критерий приёмки: покажи ОБА порядка исполнением. +3. **Провод и канон** — что из правки видно снаружи; если видно, версия растёт ТЕМ ЖЕ лендингом, а гейт + версии читает enum из канона, а не из Go-константы. + +## 7. Записка-план + +До первой правки кода положи в `platform/docs/platform-PROGRESS.md` записку-план: что берёшь, в каком +порядке, что считаешь опасным. Перед сдачей — механическая сверка комплектности против §4, по пунктам, +таблицей, а не перечтением. + +## 8. Заявление = команда + +Каждое число и каждая категорика в отчёте — **с командой, которой получены**. Приёмка пере-ранит и сверит. +Число без команды считается неснятым. + +⛔ **Отрицательный замер обязан доказать, что спросил существующее.** Рядом с любым нулём ПЕЧАТАЕТСЯ +контрольная величина («строк лога прибор прочёл: N»), и — научено этой же приёмкой — **результат заведомо +ПРОХОДЯЩЕГО фильтра**: ноль, полученный форматом ключа или несуществующей колонкой, выглядит как замер. + +⚠ **Дифф `^func Test` — ИСПОЛНЕНИЕМ, а не по памяти:** список добавленных и изменённых тестов сними +командой и приложи. + +⚠ **Скипы печатаются рядом с числом `ok`,** с ПРИЧИНОЙ каждого: у этой зоны честные приборы дважды +считали разные популяции скипов, и это записывалось как расхождение, хотя оба были правы. + +## 9. Эхо-протокол старта + +**Первым действием, ДО работы**, вернись ко мне эхом ≤10 строк: **скоуп / инварианты / чего не делаю** — +⚠ **СВОИМИ СЛОВАМИ.** Дословный пересказ подтверждает канал, но не понимание, и повторяет ошибку промта +вместе с ним. Прямо скажи: **что поняла, что считаешь опасным, что считаешь неверным.** + +## 10. Что НЕ удалось + +Обязательная секция отчёта. ⛔ И вторая её половина, без которой она вырождена: **«ГДЕ ПРИБОР СЛЕП И Я ЭТО +ЗНАЮ»** — что невидимо · почему не чинила · чем закрывается. Вопрос не «что не получилось», а **«что ты +знаешь и не сказала»**: в коде названо, а в отчёте нет — значит для следующей смены НЕ названо. + +## 11. Канал вопросов и право сказать «не надо» + +Конфликт промта с кодом или доками → **пинг мне, НЕ интерпретация**. Ты вправе сказать «этого делать не +надо» с аргументом — это исполнение пункта, а не отказ; §4.2, §4.3 и §4.4 прямо это допускают. + +⚠ **Правка промта на ходу доезжает ТОЛЬКО релеем:** я передаю её отдельным сообщением, ты подтверждаешь +эхом и называешь ОТДЕЛЬНЫМ пунктом отчёта. + +## 12. Прямой канал + +Механизм — `CLAUDE.md` §«Связь между сессиями»; здесь не повторяется. Впиши свой блок в +`/tmp/textmachine-channel` первым делом, там же ищи адреса. Эхо (§9) шли по адресу оркестратора из этого +файла — оно же проверка канала. ⚠ **Нужной роли в файле нет, файла нет или имя не отвечает ⇒ КАНАЛА НЕТ, и +это НОРМАЛЬНЫЙ случай: НЕ опрашивай сессии подряд** — вопрос секцией в отчёт, работа продолжается. + +## 13. Критерий завершённости + +Работу доводишь до конца САМА. Приёмка идёт последней и вторым кругом твоей сессии не служит. + +- [ ] У каждого пункта §4 — исход: сделано · **не делаю с доводом** · пинг. +- [ ] Критерий §4.1 предъявлен ИСПОЛНЕНИЕМ в обоих порядках гонки. +- [ ] Остаток окна §4.1 НАЗВАН абзацем. +- [ ] Круги СОШЛИСЬ: последний проход не дал НОВЫХ находок; прежние закрыты таблицей + «находка → что сделано → **ЧЕМ ПРЕДЪЯВЛЕНО**». +- [ ] Таблица мутаций полная, **выжившие названы поимённо**; не-собравшиеся помечены как НЕИЗМЕРЕННЫЕ. +- [ ] Дифф `^func Test` снят командой и приложен. +- [ ] Канон и код — в ОДНОМ дереве; версия в `openapi.yaml` и гейт согласованы. +- [ ] Числа сняты ПОСЛЕ последней правки; скипы с причинами. +- [ ] Всё живое — в ДЕРЕВЕ, а не в письме. +- [ ] Явное «работа завершена, править не планирую». Без этой строки пак считается идущим. + +⚠ Перед отчётом сверь КАЖДЫЙ клейм с результатом инструмента ЭТОЙ сессии · если последний абзац отчёта — +план или обещание, сделай его сейчас · правка теста ради зелени недопустима, правка по заказанной смене +поведения — объявляется. diff --git a/docs/README.md b/docs/README.md index af6d7c1c..be3180a0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -37,6 +37,7 @@ | **Бэкенд · ЗА ОДНУ ЕДИНИЦУ ПЛАТИМ ДВАЖДЫ** | [BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md](BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md) | ⏳ **НАПИСАН 11.09, редакция 2; выдаётся СВЕЖЕЙ сессии по закрытии пака консистентности актом.** Предмет — двойная оплата единицы: на платном прогоне $0.106472 = 25.4 % цены книги ушло в выброшенные первые попытки. ⛔ **Редакция 1 стояла на ПЕРЕВЁРНУТОЙ посылке** («движок лечит болезнь возбудителем») и заказала бы отключить восстановление, которое работает 4 раза из 4; опровергатель это снял — сессия, исполнившая её буквально, отключила бы восстановление трёх чанков из четырёх, отменила `D2` п.2 и сломала `TestRetryableSubset`. ⭐ Настоящая находка редакции 2: **причин ДВЕ, лекарство одно.** Черновик — потолок мал (контроль: 6 успешных вызовов, все ≤8496 прошли сразу, все >8496 упали и прошли на удвоенном; исключений 0), редактор — размышление съело достаточный потолок (2-я попытка 11717 против упавших 16000, $0.071009 = две трети потери в одном вызове). Плюс `reasoning_tokens` не несла числа ни разу за историю проекта (0 строк при 405 базах и 58 886 строках) и молчащая подстановка цены. Ряды **414** · **415** · **422**, пин flash **413** из пака ВЫНУТ | | Бэкенд · отозванный | активного НЕТ | пак КАЧЕСТВО написан и ОТОЗВАН до выдачи 05.09 (`archive/prompts/…_WITHDRAWN.md`): предмет дешевле пака — точность чекера уже измерена, пере-снять её стоит одной команды. Следующий пак — СТРУКТУРА ГЛАВ (решение владельца 05.09 «любая книга любого формата»), пишется | | Бэкенд · прежний | активного НЕТ | пак «денежный стоп» ОТРАБОТАН и ПРИНЯТ С ДОФИКСОМ 05.09 — акт **D39.206** (`81a89e9` + `616a8e4`), промт в `archive/prompts/` с баннером исхода. Следующая работа зоны — строки **291** (флаг вместо клина, `D39.204`) · **294** (форма «сколько добавить», `D39.203`) · **296** (точечная перегенерация по промаху глоссария, после 295) | + | **Платформа · ОТВЕТ, НЕ ЗАВИСЯЩИЙ ОТ ВЕЗЕНИЯ** | [PLATFORM_ANSWER_THAT_DOES_NOT_DEPEND_ON_LUCK_SESSION_PROMPT.md](PLATFORM_ANSWER_THAT_DOES_NOT_DEPEND_ON_LUCK_SESSION_PROMPT.md) | ✅ **ВЫДАН 11.09** сессии `textmachine-37`, эхо принято. Ядро — критерий акта `D39.246` п.6: **ответ двери обязан стать ИНВАРИАНТНЫМ К ПОРЯДКУ** (`PD-448`: дважды нажавший «продолжить» видит ошибку, хотя прогон стартовал); плюс `PD-162` (живой прогон над пропавшим каталогом заклинивает НАВСЕГДА с открытым холдом) · `PD-466` · `PD-139`. Контрактный минор **0.15.0** едет ТЕМ ЖЕ лендингом, не раньше — иначе гейт версии красит сданное дерево. ⭐ **Два релея по эхо сессии:** §4.4 пере-заказан (сначала замерить, выводится ли `book_id` из пути, и «классов два» — законный исход), и в §4.2 врезана её находка — **снятие холда без остановки живого процесса меняет вечный холд на потерянные деньги и процесс-сироту** | | Платформа · ПРАВДА У ДВЕРИ | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ С ДОФИКСОМ 11.09** — акт **D39.246** (`49f74d9`, 15 путей, $0). `PD-455` закрыт, `PD-162` наполовину у обеих денежных дверей, `PD-448` разобран и НЕ построен (четвёртый путь принят направлением, строит следующий пак вместе с минором **0.15.0**). ⛔ Приёмка нашла два дефекта ВНЕ карты автора: выживший мутант на единственной проводке `BooksDir` и тихо-зелёное в самом новом гейте. Живое — `PD-162` (эскроу), `PD-466`, `PD-139`. Промт был — [PLATFORM_TRUTH_AT_THE_DOOR_SESSION_PROMPT.md](PLATFORM_TRUTH_AT_THE_DOOR_SESSION_PROMPT.md), выдан 11.09: `PD-455` (форма обещает то, в чём дверь откажет — точка роста `Blocked.code`, не закрытый enum вердикта) · `PD-448` (двойной клик по «продолжить» — **исследуй и предложи, НЕ строй**: все три законных пути требуют контрактного минора или миграции) · `PD-162` (прогон книги с исчезнувшим каталогом висит с холдом — валидация каталога ПРИ ДОПУСКЕ). ⛔ Свип сирот и потолок аплоадов СНЯТЫ подписанным пропуском: их гейт — открытая регистрация, которой в закрытой бете нет (`PD-175` + `D39.176` п.1) | | Платформа · РАЗРЕЗ ПРИЁМА И ПРАВДА О СЕБЕ | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ 08.09** — акт **D39.229** (`ddcbf0c`, 26 путей, $0); промт в `archive/prompts/` с баннером-исходом. Синхронный вход разреза под потолком, граница хвоста выведена из кода, зонный журнал и регистр приведены к правде (открытых 112 → 109, major 3 → 1). Живое из не взятого — строка **364** (потолок разрезов не есть потолок процессов движка) | | Платформа · ДЕНЬГИ И ПРАВДА | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ С ДОФИКСОМ 07.09** — акт **D39.221**, контрактный минор **0.13.0**; промт в `archive/prompts/` с баннером исхода. ⚠ **Синхронный разрез приёма остановлен правилом остановки и заландён построенным, но НЕ готовым** — десять пунктов несёт строка бэклога **332**, и она же заказ следующему паку зоны; ложный инвариант бюджета заландён осознанно (окно 8 с при дефолте в 16 минутах) | diff --git a/docs/orchestrator-norms-scratchpad.md b/docs/orchestrator-norms-scratchpad.md index 4b6f023a..8b5424bb 100644 --- a/docs/orchestrator-norms-scratchpad.md +++ b/docs/orchestrator-norms-scratchpad.md @@ -59,7 +59,7 @@ | Зона | Промт | Сессия | Состояние | |---|---|---|---| | бэкенд | `BACKEND_CONSISTENCY_YOU_CAN_SHOW_SESSION_PROMPT.md` | **textmachine-c9** | ⏳ приёмка, круг 2: шесть посадок выжили → дофикс сдан, жду финальную батарею. ⛔ F6 мною ОТМЕНЁН после пере-замера | -| платформа | — | — | 🟢 **СЛОТ СВОБОДЕН** (пак «правда у двери» закрыт актом `D39.246`) | +| платформа | `PLATFORM_ANSWER_THAT_DOES_NOT_DEPEND_ON_LUCK_SESSION_PROMPT.md` | **textmachine-37** | ✅ выдан 11.09 · эхо своими словами с тремя опасностями и верным возражением · два релея внесены | | полигон | — | — | ⛔ **ЗАКАЗ СНЯТ ВЛАДЕЛЬЦЕМ 11.09** («полигон не надо выдавать»); промт готов и лежит, пере-выдача — только его словом | | фронт | заморожен | — | разморозка по критерию `NEAR_TERM_PLAN.md` | @@ -83,7 +83,8 @@ | 3 | полигон | холодный прогон A (платный) | textmachine-23 | ✅ | ✅ закрыт актом `D39.247`; строка 16 закрыта замером | | 4 | — | ревью МОИХ записей (не пак зоны) | textmachine-9a | — | ✅ отчёт сдан; часть находок заландена 11.09 | | 5 | бэкенд | консистентность, которую можно предъявить | textmachine-c9 | ✅ | ⏳ дофикс после шести выживших посадок | -| 6 | полигон | ремонт прибора | — | — | ⛔ **готов, выдать некому**; предлагался `ed` и `5c`, обе отказались ПО НОРМЕ и обе правы | +| 6 | ~~полигон~~ | ремонт прибора | — | — | ⛔ **СНЯТ: зона вне скоупа словом владельца**, промт в архиве | +| 7 | платформа | ответ, не зависящий от везения (`PD-448` · `162` · `466` · `139`) | textmachine-37 | ✅ своими словами, 3 опасности + возражение | идёт | ⛔ **ПОЛИГОН СНЯТ ВЛАДЕЛЬЦЕМ 11.09.** Я предлагал пак трижды — `ed`, `5c` (обе отработавшие, отказались ПО НОРМЕ и были правы) и свежей `37`, — после чего владелец сказал «полигон не надо выдавать». Выдача `37` ОТОЗВАНА тем же часом. ⚠ Урок не про полигон: **я трижды искал адресата для заказа, приоритет которого не подтверждал у владельца.** Слот зоны свободен ≠ работу зоны надо заказывать.