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

This commit is contained in:
heaven 2026-09-11 14:39:21 +03:00
parent 8a2b9153e6
commit 8c36fb5844
3 changed files with 285 additions and 2 deletions

View file

@ -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
4248`: под нагрузкой вызовы СЕРИАЛИЗУЮТСЯ, и дефект виден, а на тихой машине оба проходят проверку
вместе и тест зелен. ⇒ фикстура обязана делать оба порядка НЕИЗБЕЖНЫМИ (а не вероятными) — например,
удерживая победителя между чтением состояния и замком, — и гоняться НЕ ОДИН раз. Пин, флейковый на
мутанте, измеряет пустой сценарий.
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` и гейт согласованы.
- [ ] Числа сняты ПОСЛЕ последней правки; скипы с причинами.
- [ ] Всё живое — в ДЕРЕВЕ, а не в письме.
- [ ] Явное «работа завершена, править не планирую». Без этой строки пак считается идущим.
⚠ Перед отчётом сверь КАЖДЫЙ клейм с результатом инструмента ЭТОЙ сессии · если последний абзац отчёта —
план или обещание, сделай его сейчас · правка теста ради зелени недопустима, правка по заказанной смене
поведения — объявляется.

View file

@ -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 минутах) |

View file

@ -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` ОТОЗВАНА тем же часом. ⚠ Урок не про полигон: **я трижды искал адресата для заказа, приоритет которого не подтверждал у владельца.** Слот зоны свободен ≠ работу зоны надо заказывать.