diff --git a/docs/BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md b/docs/BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md index af1ddf72..de6c17ed 100644 --- a/docs/BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md +++ b/docs/BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md @@ -1,3 +1,223 @@ +# ⟶ ПЕРЕДАЧА ПАКА 15.09 (ред. 5) — ЧИТАЙ ЭТО ПЕРВЫМ + +> Оркестратор №23; прежняя сессия оркестратора `textmachine-11` оборвалась, адрес нынешней — в канале (П8). +> Пак $0. **При расхождении этот раздел СИЛЬНЕЕ тела ниже** (§1–§13, редакция 4); прямые отмены тела перечислены +> в П6. Тело остаётся описанием ПРЕДМЕТА: что заказано, почему и чем мерить. + +## П1. Что случилось и что решит твой результат + +Пак выдан 11.09 сессии `textmachine-b1`. Она построила его почти целиком — 22 изменённых и 4 новых тестовых файла +в `backend/` (+2850/−158), плюс отчёт в `docs/PROGRESS.md`; всего 27 путей, +3215/−158 — провела семь кругов +адверсариального чтения и потерялась при переезде окружения, **не объявив работу завершённой**. ⇒ пак идёт, +исполнителя у него нет, и слот бэкенда занят, пока пак не закрыт актом. + +**Твой результат — довести ЧУЖУЮ почти готовую работу до критерия §13 и сдать на приёмку.** Не перестраивать и не +улучшать сверх заказа: предмет решён владельцем и построен. + +⚠ **Почему это раздел того же промта, а не отдельный пак** (эррата 04.09-г в шапке +`docs/architecture/05-decisions-log.md` велит круг над ГОТОВЫМ паком давать отдельным паком следующей сессии). Здесь +пак НЕ готов — строки завершения нет, — и слот зоны один; копировать тело заказа в новый файл значило бы завести +второй носитель того же предмета. Свежий глаз, ради которого эррата написана, у тебя есть по построению. + +По критерию §13 открыто СЕМЬ вещей — замерено мною 15.09, команды рядом: +1. **Круги не сошлись.** Седьмой круг (узкий, по починкам шестого) дал два мажора — С1 и С2, оба починены, но круга, + проверившего эти починки, нет. Что круги находят дефекты в починках предыдущих, отчёт говорит о кругах 2–3 сам; + у 4–7 это видно по их таблицам. +2. **Секции «Числа» нет,** хотя отчёт ссылается на неё трижды. Заголовков в секции b1 — 31, ни одного про числа: + `awk '/^#### Пак «КУПЛЕНО/{f=1} f&&/^#### Пак/&&!/КУПЛЕНО/{exit} f' docs/PROGRESS.md | command grep -c '^#'`. +3. **Таблицы мутаций нет** — §13 требует полную, выжившие поимённо. +4. **П.9 раздела «Что НЕ удалось» протух:** говорит о четырёх кругах, их семь. +5. **Подозрение b1, оставленное непроверенным:** `repin.go` может дропать помеченного члена c-lite юнита (её м7 и + «Что НЕ удалось» п.8). Проверить исполнением или назвать с доводом, почему вне пака. +6. **Нет строки «работа завершена, править не планирую».** +7. **Четыре якоря в ТВОЕЙ зоне сдача b1 сдвинула:** `backend/docs/DISCLOSURE_LAW_DESIGN.md:41–44` (цели — `status.go` ×3 и + `bookbuild.go`). Перенавести по ЦЕЛИ: найти, куда уехало то, о чём говорит проза, а не подобрать токен под то, что + оказалось на строке (гардрейл `CLAUDE.md`). Ещё 17 якорей в `docs/` сдача тоже сдвинула — их перенаводит оркестратор + при лендинге, не трогать. + +## П2. Где лежит работа — и запрет, который здесь дороже обычного + +- Сдача b1 лежит **ЗАСТЕЙДЖЕННОЙ В ИНДЕКСЕ** рабочего дерева `/home/ubuntu/projects/textmachine-main`: 27 путей + (22 M и 4 A в `backend/`, плюс `docs/PROGRESS.md`). Незастейдженных правок в этих путях нет. +- **Проверка целостности** (порядок — П4.1): `git -C /home/ubuntu/projects/textmachine-main diff --cached --binary | + sha256sum` обязан дать `166997963c95db52f0ba04716017fa2e106ae0596886e29cc918a642afe7df8a`. Бэкап того же патча — + `/home/ubuntu/tm-b1-orphan-index.patch`; копия сдачи ТОЛЬКО ДЛЯ ЧТЕНИЯ — `/home/ubuntu/tm-b1-orphan` (дерево + `5dbb5cb` с наложенным патчем; корпуса книг и твоих правок в ней нет). +- **Авторство видно git'ом:** `git diff --cached -- backend/ docs/PROGRESS.md` — работа b1; + `git diff -- backend/ docs/PROGRESS.md` — твои правки поверх неё. Твои НОВЫЕ файлы не видны ни тем, ни другим — + перечисли их в отчёте: `git status --short --untracked-files=all -- backend/`. +- ⛔ **ИНДЕКС НЕ ТРОГАТЬ:** `git reset` · `git restore` (и `--staged`) · `git stash` · `git checkout -- <путь>` · + `git add` · `git clean` — запрещены. Одно неверное движение стирает работу, у которой нет второго исполнителя. +- **Ты не коммитишь.** Зона — `backend/` плюс продолжение секции b1 в `docs/PROGRESS.md` (место — П5). +- Чужие незакоммиченные файлы вне этого пака не трогай. + +## П3. Карта чтения — ЗАКОН + +1. `CLAUDE.md` — целиком. +2. Этот промт — раздел ПЕРЕДАЧИ и тело §1–§13. ⚠ `file:line` тела указывают в `HEAD` (`5dbb5cb`), а не в дерево + сдачи: адреса уехали (`stagerun.go:204` → `:216`, `:142` → `:160`, `cutcall_test.go:402` → `:451`; + `resolvedForResume` уехал ниже в `cutcall.go` и делегирует `FlagReason.AnswersForResume` в `disposition.go`, а + прежняя строка `FlagReason(cs.FlagReason) != FlagCancelled` осталась только в `cutoververdict_test.go`). Читай + тело через `git show HEAD:<путь>` либо греп-токеном, а не номером. Ссылки тела §3 (`D39.204`, `D2` п.2, ряд 291, + кодовые файлы) — справочник предмета, открывай их по мере вопроса, в счёт карты они не входят. +3. Отчёт b1 — `docs/PROGRESS.md`, от `#### Пак «КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО»` до следующего `#### Пак`. Сперва: + «Что построено», седьмой круг, «Что НЕ удалось», «Объявляю правки», «Вопросы оркестратору». +4. Сама работа: `git diff --cached --stat` и `git diff --cached -- backend/`. +5. `docs/architecture/12-go-style-notes.md` — только больные места. + +## П4. Что делать — разметка свободы + +**Делай РОВНО так** (отступление — пинг): +1. **Первые действия, в этом порядке:** блок в `/tmp/textmachine-channel` → проверка целостности (П2) → эхо (тело §9) + СВОИМИ словами. Хеш не совпал — стоп: до любой правки таблица «ожидал / получил» пингом, а если канала нет — + секцией в отчёт, и дальше не идёшь. Отдельной строкой эха: что ты считаешь недоделанным СВЕРХ моих семи пунктов. +2. **Базовая линия в ТВОЁМ дереве до первой правки:** `make battery` из `/home/ubuntu/projects/textmachine-main/backend` + (git он не трогает, пишет только в `backend/bin`, корпус книг только читает). ⚠ Мой замер на копии без корпуса + дал 9 скипов; в главном дереве корпус есть, и по коду должны побежать ещё пять корпусных пинов + (`TestCheckerLabelsCandidates` · `TestCheckerLabelsBaseline` · `TestK6LabelsBaseline` · + `TestK6TheTwoRelaxationsPricedSeparatelyOnTheSameLabels` · `TestTheInstrumentAgainstTheColdRunOracle`), так что + скипов ожидается 4: `TestMinerFullBookParity` (нет словаря jieba) · `TestCorpusBankKeyConflicts` (не задан + `TM_CORPUS`) · `TestHelperEventsRun` и `TestHelperKillLoop` (вспомогательные процессы). Это вывод из кода, не + прогон: другое число — не регрессия, но назови его. +3. **Сверка «отчёт ↔ код» в ОБЕ стороны.** (а) Каждая строка таблиц «Что построено» и седьмого круга (С1–С6) — правка + ЕСТЬ в коде. (б) Каждый ханк `git diff --cached -- backend/` (75 ханков в 26 файлах) — у него ЕСТЬ строка отчёта + (таблицы кругов, «Объявляю правки» п.1–27). Ханк без строки — находка «незаписанная работа», строка без ханка — + «записанная, но не сделанная». Обе — в отчёт, не в молчаливую починку. +4. **Мутации — только на КОПИИ.** ⛔ `-root`, указывающий на `/home/ubuntu/projects/textmachine-main/backend`, + запрещён: `tmmutate` восстанавливает байты, прочитанные в момент посадки, и затрёт твою правку в том же файле, а + убийство процесса по памяти оставит посадку в дереве, которое уедет в лендинг. + - подмножество гейта — `make mutations` из `backend/` (229 записей из 440); + - **полный каталог** — рецепт цели `mutations` из `backend/Makefile`, развёрнутый в shell, без `-battery` и с + `-logs` ВНЕ копии (`trap` удаляет копию на выходе вместе со всем, что внутри). Проверено мною 15.09 исполнением: + запись `Z-price-substitution-reports-itself-as-the-answerer` — тем же рецептом встроенной командой (логи в + скретчпаде): копия без `.env`, RED; запись `C-verdict-leaves-the-anchored-column` — ДОСЛОВНО этим текстом как + файлом-скриптом (`<тег>` подставлен, добавлен `-id`): RED двумя тестами, один из них корпусной оракул + `TestTheInstrumentAgainstTheColdRunOracle` (ветка двух корпусных переменных на копии работает), лог вне копии, + `TMMUTATE_EXIT=0`, оставленных копий 0, индекс цел. ⚠ `<тег>` замени: с ним как есть `bash -n` падает. Положи в файл вне копии и запусти фоном средствами + харнесса, `bash <файл> > <лог> 2>&1; echo "TMMUTATE_EXIT=$?" >> <лог>`, и жди строки `TMMUTATE_EXIT=` в логе, а не + уведомления: + ``` + cd /home/ubuntu/projects/textmachine-main/backend && test -f go.mod \ + && [ "$(pwd)" = /home/ubuntu/projects/textmachine-main/backend ] \ + && logs=/home/ubuntu/tm-mut-logs-<тег> && mkdir -p "$logs" \ + && tmp=$(mktemp -d) && trap 'rm -rf "$tmp"' EXIT && trap 'rm -rf "$tmp"; exit 130' INT TERM \ + && mkdir "$tmp/backend" \ + && tar -C /home/ubuntu/projects/textmachine-main/backend -cf "$tmp/tree.tar" --exclude='./.env*' --exclude=./bin . \ + && tar -C "$tmp/backend" -xf "$tmp/tree.tar" && rm -f "$tmp/tree.tar" \ + && TM_CHECKER_LABELS_DIR=/home/ubuntu/projects/textmachine-main/books/gu-zhenren/labels \ + TM_RUN_A_DIR=/home/ubuntu/projects/textmachine-main/books/gu-zhenren/door-to-file \ + go run ./cmd/tmmutate -root "$tmp/backend" -logs "$logs" + ``` + Рецепт из шапки `cmd/tmmutate/main.go` как есть НЕ годится: без двух корпусных переменных корпусные пины на + копии скипают, скип даёт `exit 0`, и посадка читается выжившей; + - одна копия — один мутатор; склейка из нескольких вызовов `-id` законна только при покрытии 440 из 440 без + пересечений И при том, что между вызовами дерево не менялось (твоя правка между ними делает склейку негодной); + - исходы `tmmutate`: `RED` — поймана · `SURVIVED` — выжила · `survives` — ЗАПИСАННАЯ и аргументированная выжившая + (в каталоге 4 такие записи с `expect: survives`, все без `battery`, поэтому видны ТОЛЬКО в полном прогоне — в + таблицу отдельной строкой, не в выжившие) · `NOTHING` и `ROTTED` — НЕИЗМЕРЕННЫЕ (в число не кладутся) · `RED!` — + запись числилась выжившей и теперь ловится · «NOT GREEN before any mutation» — прогон не состоялся вовсе. + Засчитывает мутацию ТЕКСТ падения из `-logs`, а не цвет. Время: полный каталог — больше часа. +5. **Секция «Числа» и таблица мутаций** — написать; каждое число с командой, деревом и популяцией. +6. **П.9 «Что НЕ удалось»** — исправить с пометкой «испр. 15.09». +7. **Финальная строка §13** — по исходу правила остановки (ниже) или по сходимости. + +**Решаешь сам и аргументируешь** (советы — приоры, опровергаются аргументом или замером): +- **Форма восьмого круга.** Узкий круг, вернувшийся чистым, доказывает чистоту ПОСЛЕДНИХ починок, а не сходимость + пака. Норма (эррата 04.09-б): круг идёт по дофиксу **против ИСХОДНЫХ пунктов заказа** — здесь дофикс чужой, и + тем важнее. Мой приор: один направленный читатель по С1–С6 плюс проход по пунктам тела §4.1–§4.5 против готового + дерева. Субагенты разрешены явно; веер и глубину выбираешь ты. + +⛔ **Правило остановки — РОВНО так; сам решаешь только, чинить ли найденное до стопа.** Кругов в передаче не больше +ДВУХ. Стоп наступает, если (а) любой круг нашёл дефект в починке ПРЕДЫДУЩЕГО круга (седьмого или своего) либо (б) +второй круг дал любую НОВУЮ находку. В обоих случаях — таблица «находка → класс → цена» в отчёт и пинг, если канал +жив; если канала нет — та же таблица секцией. Финальная строка в этом исходе: **«работа завершена по правилу +остановки П4, круги НЕ сошлись — остаток в таблице; править не планирую»**. Лендить ли с названным остатком, решаю я +(прецедент — `D39.245` п.1). + +## П5. Где эта передача мягкая — и куда писать + +**Уязвимые места:** +1. ⛔ **Чужие числа.** Все числа отчёта сняты приборами b1 на деревьях своего часа: «каталог 439 записей», «25 = 9 + + 3 + 1 + 12», «батарея 23/23» — утверждения автора, а не твоё знание. Её же командой ты повторишь и её ошибку: + бери другую популяцию или другую сторону улики. +2. ⛔ **Работа, оборванная на полуслове.** Самая вероятная форма дефекта — починка с одной половиной: комментарий + переписан, а пин не заведён; запись каталога заведена, а `find` не уникален; пин заведён, а посадка бьёт не в + его слой. У каждой починки седьмого круга спрашивай, где её вторая половина. +3. ⛔ **Изменённые записи каталога, а не только новые.** Кроме 33 новых, сдача изменила 8 записей `HEAD`: у шести — + `find` (у одной из них ещё и файл), у двух (`CUTCALL-a-refusal-pays-when-the-reply-outruns-the-write` · + `CUTCALL-a-reply-that-outruns-our-own-write-books-zero`) — `run`, расширенный на + `TestDeliveryEvidenceIsWhatTheMoneyBitAsks`. Значит, RED посадки §4.5(б) больше не доказывает, что её ловит + СКВОЗНОЙ пин — детерминированная таблица поймает за него. Назови по логу, какой тест краснеет. +4. ⛔ **Решения прежнего оркестратора, известные только из отчёта b1.** Переписки с ним нет. Что я подтверждаю и что + решаю сам — П6; прочее ратифицированным не считай: наткнёшься — пинг. +5. ⛔ **Зелёная батарея плюс полный каталог сходимостью не являются** — семь кругов этого пака находили дефекты при + полной зелени. + +**Куда писать в `docs/PROGRESS.md`.** Новые подсекции — в КОНЕЦ секции b1, то есть сразу после её +«Вопросов оркестратору» и перед следующим `#### Пак`: сперва «ПЕРЕДАЧА 15.09 — план» (замена тела §7, до первой +правки), затем круги, «Числа», таблица мутаций, «что не удалось» по передаче. Прежние круги b1 не переписываются +(они описывают дерево на свою дату); протухший п.9 правится на месте с пометкой. Строка завершения ставится в +ЗАГОЛОВОК секции b1 — так, как у следующей в журнале секции `#### Пак «ЗА ОДНУ ЕДИНИЦУ ПЛАТИМ ДВАЖДЫ»`. Хук якорей при +лендинге предупредит о семи якорях отчёта b1 без токена: дописать к ним `=`токен`` РАЗРЕШЕНО, текст не трогая, и +токен подбирается по ЦЕЛИ, о которой говорит проза, а не по тому, что оказалось на строке. + +## П6. Отмены тела, ответы на вопросы b1 и мои решения + +**Отменено в теле (раздел сильнее). Носитель — «Эррата 15.09-а» в шапке `docs/architecture/05-decisions-log.md`:** +- Слово владельца 11.09 (цитата — тело §4.1): отказ резервации на ретрае — СТАНДАРТНАЯ ОСТАНОВКА. У `D39.204` сняты: + в п.4 — деградация во флаг, отгрузка текста и продолжение волны; п.5 (а)–(б); в п.5 (в) — пин «купленное + доставлено ⇒ не `exit 4`». ОСТАЁТСЯ требование п.4, чтобы причина отличалась от исчерпания регенераций, — на нём + стоит `retry_unaffordable` и комментарий сдачи, ссылающийся на «D39.204 п.4». По этим расхождениям тела с журналом + не пинговать. +- Тело §2, фраза «её половина едет ОТДЕЛЬНЫМ промтом», и последнее предложение §4.4 («я передам это платформенной + сессии, и акт будет один») — сняты: платформенная половина пуста по замеру b1 (§4.4 её отчёта), отдельного + платформенного промта не будет, акт один. Обязательство ряда 291 «зеркало двух зон» закрывается этим замером. +- Тело §7 — заменено (П5). Пункты «решаешь сам» §4.1 уже решены b1 и без находки пере-решению не подлежат. + +**Ответы на «Вопросы оркестратору» b1:** +1. Ряды контракта 14 — их не хватает ТРИ (`retry_unaffordable` · `cancelled` · `attempt_timeout`; канон говорит + «Причин шестнадцать», в `flagSeverity` 19 ключей) — моя зона, делаю при лендинге. Не трогать. +2. Расхождение витрин `status` и экспорта на одной строке — ряд бэклога заведу я при лендинге. +3. Вторая дверь невидимой дыры (позиция, чья единственная трата — сожжённый ключ, метки не получает) — вопрос + владельцу, несу я. В этом паке не строится. +4. Третья читательская фраза («оплачено, но не доделано: пополните и перезапустите») — вопрос владельцу, несу я. + Ветку не трогать: она готова принять строку данных. +5. Ось «эхо только по отгруженному тексту» (`D39.18`, открытое решение владельцу) — абзац «чтение, которое берёт код» + оставить как есть. +6. Переименование `echo_edit_units` → `echo_edit_rows` — **в этом паке НЕ делается:** правка опубликованного ключа + потребовала бы нового круга по пакету, который ты сводишь, а читателей вне `backend/` у ключа ноль и на исполнимых + конфигах числа совпадают. Оговорка у поля остаётся, ряд бэклога заведу я. +7. Анкор техдолга в `docs/architecture/13-tech-debt-anchors.md` — моя зона. + +**Три просьбы b1 к оркестратору, которых нет среди её «Вопросов», — исход:** +8. Смена смысла эхо-метрики на эдит-волне (её Т1 и «Что НЕ удалось» п.7) — **решаю при приёмке**, сессия не трогает. +9. Расщепление `withheld_units` на «нужны деньги» и «нужен человек» (её М5) — контракт двух зон; ряд бэклога заведу я. +10. Ранг новой причины 4 вместо 8, стоящий на существующем пине `TestTheSeverityTableMeansWhatItsCommentsSay` — + **решаю при приёмке**, сессия не пере-решает. + +**Подтверждаю** решения прежнего оркестратора, на которых стоит построенное: (а) новый РОД дыры не заводится — довод +о пяти счётчиках платформы (`platform/internal/ingest/build.go`); (б) выбор читательской фразы спрашивает предикат +вердикта, а причина остаётся на записи дыры; (в) платформенная половина пуста — см. отмены выше. + +## П7. Среда этой машины (15.09, а не прошлой) + +- `/tmp` здесь — ext4 на общем диске, не tmpfs. Место проверяй командой `df -h /tmp` рядом с итогом тяжёлого + прогона, а не числом отсюда: `no space left on device` даёт красное, неотличимое от дефекта кода. +- Тулчейн: go 1.26.7, golangci-lint 2.12.2 (пин — 2.12.2). +- ⛔ Перед тяжёлым прогоном — `cat /proc/self/cgroup` и `memory.max` этого cgroup (гардрейл `CLAUDE.md` про + `CONSTRAINT_MEMCG`). У моего процесса потолка нет, у твоего может быть. Сужать мутационный прогон через `-run`, + чтобы влезть в память, нельзя. + +## П8. Остальное — по телу + +§5 · §6 · §8 · §9 · §10 · §11 (канал вопросов, право отказаться, тесты не под зелень, старший коллега Fable 5 — один +на сессию) · §12 · §13 действуют и адресованы тебе, с заменами из П4–П6. **Адрес оркестратора** — блок +`role=оркестратор` в `/tmp/textmachine-channel`, сверенный с `ListAgents`; ⚠ `textmachine-main-b1` в списке — пустая +сессия владельца, а НЕ сессия b1, и сессия `textmachine-11` из шапки тела мертва. Нужной роли в файле нет ⇒ канала +нет: вопросы секцией отчёта, работа продолжается (исключение — стоп по хешу, П4.1). + +--- + # Бэкенд-пак: КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО. Юнит, который не доделается НИКОГДА > Выдан оркестратором №23 (сессия `textmachine-11`) 11.09. Пак **$0** — платных вызовов в нём нет. diff --git a/docs/BACKEND_WHAT_THE_BANK_IS_MADE_OF_SESSION_PROMPT.md b/docs/BACKEND_WHAT_THE_BANK_IS_MADE_OF_SESSION_PROMPT.md index 64f2c60b..cec530f8 100644 --- a/docs/BACKEND_WHAT_THE_BANK_IS_MADE_OF_SESSION_PROMPT.md +++ b/docs/BACKEND_WHAT_THE_BANK_IS_MADE_OF_SESSION_PROMPT.md @@ -1,5 +1,13 @@ # Бэкенд-пак: В БАНК ПО РАЗНОБОЮ — впустить термин, который черновик уже написал двумя способами +> ⛔ **НЕ ВЫДАЁТСЯ В ЭТОЙ РЕДАКЦИИ: ПОСЫЛКА ОПРОВЕРГНУТА ЗАМЕРОМ 15.09 (оркестратор №23, продолжение). Инструкции +> ниже НЕ исполнять.** Строка «Выдан» неверна: пак не выдавался никому, слот бэкенда занят паком «купленное +> доставлено». Приём «по разнобою» ВАКУУМЕН — все термы со `spread ≥ 2` уже лежат в финальном банке (прогон A: 9 из 9, +> B: 8 из 8; `bank.json` стопа против `glossary` полных баз). Настоящий дефект консистентности — ПЕРЕ-РЕШЕНИЕ банка +> терминологом на подписи и, по коду, на каждой следующей покупке глав: у неподписанных строк сменились передачи +> A 12 из 69, B 14 из 66. Пример «две разные вещи — одно имя» (`宗族祠堂` / `宗祖祠堂`) — один и тот же зал. Пак +> переписывается под вопрос владельцу «копить ли решения банка между прогонами». + > Выдан оркестратором №23 (сессия `textmachine-11`). Пак **$0** — платных вызовов в нём нет. > Предмет куплен двумя платными прогонами; разбор состава банка сделан старшим коллегой по коду. diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index 062d4d1e..3b27ef5d 100644 --- a/docs/BACKLOG.md +++ b/docs/BACKLOG.md @@ -222,7 +222,7 @@ | 288 | ⛔ **«ПОПРАВИЛ ЧИТАТЕЛЯ, ОСТАВИЛ ПИСАТЕЛЯ» — ЕЩЁ ОДНО ПОЛЕ РЯДОМ, и оно бьёт в цель №2.** Сессия прибила читателя `classifyInputFor` и писателя `SetSourceScripts`; СОСЕДНЯЯ строка того же `defer` в `loadLangPack` — `backend/internal/pipeline/runner.go`, греп `CompileCheckersFor(r.pack, lang.TargetChecksFor` — не прибита ничем. **Предъявлено посадкой верификатора:** подмена `TargetChecksFor(r.Book.TargetLang)` на `TargetChecksFor("ru")` оставляет ВЕСЬ пакет `pipeline` зелёным (`ok 65s`). ⇒ Книга на →ja с включённым санитайзером компилировала бы РУССКИЕ паттерны читаемости: ложные `sanitizer_defect`, а ложный флаг ЭСКАЛИРУЕТ — это платные хопы за здоровый текст. От этой строки зависят `TargetActive()`, ёфикатор и латинский гард. Пин строится тем же двухкнижным приёмом, что и у `SourceScripts` | бэкенд | скоро | пин писателя целевых чекеров двумя книгами | верификатор приёмки 05.09, посадка вне карты отчёта | | 289 | ⛔ **ДВЕ ВЕТКИ `CheckKeys` ДАЮТ ПРОТИВОПОЛОЖНЫЙ ОТВЕТ НА ОДИН И ТОТ ЖЕ КОНФИГ, а новый тест закрепляет лейбловую на фикстуре, где её собственная посылка ЛОЖНА.** Безлейбловая ветка требует ключ хопа ТОЛЬКО при `Escal.BudgetUSD > 0` (и это ратифицировано комментарием); лейбловая берёт `ReachableModels()`, куда `ResolvedHop` попадает БЕЗУСЛОВНО. При бюджете 0 хоп в рантайме не стреляет никогда. Зонд верификатора: одна стадия с `escalate_to` на провайдере без ключа, бюджет 0 ⇒ безлейбловая `nil`, лейбловая `missing API keys`. ⚠ Что внёс `74ffe4f`: кейс «the stage's escalation hop» и `why` записи `WB65` («a labelled run CALLS its escalation hop») стоят на фикстуре БЕЗ бюджета — то есть тест ПИНИТ требование ключа для модели, которую этот прогон вызвать не может. **Зеркало класса, который пак сам и нашёл: пин на «достижима» не есть пин на «вызывается».** Лечится либо бюджетом в фикстуре, либо приведением веток к одному правилу | бэкенд | скоро | свести ветки к одному правилу ЛИБО починить посылку фикстуры | верификатор приёмки 05.09, зонд вне карты | | 290 | **ARM 1 нового теста банкноты проходит ВАКУУМНО, если каталог пары переедет — класс `WB41`, названный самой сессией.** Тест вписывает `langpack_root`, но не проверяет, что пак ЗАГРУЗИЛСЯ (`r.pack != nil`). Предъявлено: с несуществующим корнем все три плеча зелёные, а посадка `WB58` (снятие плеча контраста) **ПЕРЕЖИВАЕТ**. То есть красный `WB58` держится не тестом, а наличием каталога на диске. Лечение — посылка о состоянии пака в самом тесте. ⚠ Тот же класс: **тест исчерпаемости флагов слеп ещё на ДВЕ формы** сверх найденной первым верификатором — `var X = FlagReason("…")` на уровне пакета и `const` ВНУТРИ тела функции: обе посадки прошли, ни пол `found < 15`, ни сверка с картой не сработали (объявлено 17, найдено 16, карта 16). Итого форм пять, тест держит две, комментарий обещает «обе» | бэкенд | скоро | посылка о загрузке пака + покрыть или сузить обещание исчерпаемости | верификаторы приёмки 05.09 | -| 291 | ✅ **РЕШЕНО ВЛАДЕЛЬЦЕМ 05.09 (`D39.204`): деградировать во ФЛАГ, отличный по причине от исчерпания регенераций; текст попытки 0 оплачен и отгружается, волна идёт дальше. Вариант «минимальная покупка ≥ `step_max_usd`» СНЯТ — он стоил бы покупателю входного порога в пять глав. ⚠ Работа СВОИМ паком движка (правка пути ошибки в `stagerun.go` + новая причина флага + пин «купленное доставлено ⇒ не `exit 4`»), в принятый пак не дописывается.** ⛔ **ОБЯЗАТЕЛЬСТВО, БЕЗ КОТОРОГО ПАК НЕПОЛОН: новая причина флага выходит ОДНИМ АКТОМ С ПЛАТФОРМЕННОЙ ПОЛОВИНОЙ.** Карта заметок платформы РУКОПИСНАЯ (`platform/internal/ingest/notes.go`) и уезжает независимо от словаря движка; цена несделанного замерена — `PD-246`/эррата 04.09-в: минор 0.10.0 сутки жил ЛОЖНЫМ на проводе, причина доезжала читателю как `unspecified`, поймала это зона своей пере-проверкой ПОСЛЕ слов оркестратора «приёмка закончена». ⇒ промт этого пака обязан назвать ОБЕ зоны, а акт — предъявить зеркало. ⚠ Записано СТРОКОЙ, а не каналом, по слову сдавшей зоны: «`/tmp/textmachine-channel` не переживает рестарт — это в него и заложено», и обязательство, живущее в переписке двух сессий, умирает вместе с ними. ⚠⚠ **НИЖЕ — ИСТОРИЧЕСКИЙ РАЗБОР, ПО КОТОРОМУ РЕШАЛИ; как ЖИВОЕ не читать.** Его фраза «ВЫБОР НЕ СДЕЛАН» противоречит голове этой же строки — выбор СДЕЛАН владельцем (`D39.204`). ⛔ И ссылка «смена `D2.3`» в нём НЕВЕРНА ДВАЖДЫ, проверено по телу ноты (`../archive/architecture/05-decisions-D1-D38.md`, греп `^## D2. Диспозиция`): **(1)** `D2` уже кончается флагом («ретрай с бо́льшим `max_tokens` до капа, потом флаг») ⇒ это ДОСТРОЙКА, а не смена; **(2)** `D2.3` — по правилу подномеров ПУНКТ 3 тела `D2`, то есть «детектор вырождения перед удвоением `max_tokens`», к деградации отказа резервации отношения не имеет. **Настоящий адресат — `D2` п.2 «Тегировать `flag_reason`»**, и он делает вывод СИЛЬНЕЕ: тегирование причины там уже ТРЕБУЕТСЯ ⇒ новая причина есть **новый тег под существующим правилом**, а требование «причина обязана отличаться от исчерпания регенераций» — не добавка к канону, а его ИСПОЛНЕНИЕ. ⚠ Голова и хвост одной строки противоречили друг другу о состоянии решения — тот же класс, что находка `F7` приёмки, только не в коде, а в бэклоге; поймала сдавшая зона движка уже после закрытия своего пака. **ОТКАЗ РЕЗЕРВАЦИИ НА РЕТРАЕ НЕ ДЕГРАДИРУЕТ И НЕ ОСТАВЛЯЕТ СЛЕДА — юнит может заклинить НАВСЕГДА, а волна не может продолжиться без дыры.** `maxTokensForAttempt` удваивает бюджет на каждой регенерации (`backend/internal/pipeline/disposition.go`, греп `maxTokensForAttempt`), так что attempt 1 резервирует вдвое больше attempt 0. Отказ ретрая уходит наверх из цикла попыток (`backend/internal/pipeline/stagerun.go`, греп `return nil, err` в цикле попыток) **РАНЬШЕ `UpsertChunkStatus`** ⇒ чекпойнт attempt 0 есть (реплей за $0), **строки `chunk_status` НЕТ**, читающие модели видят юнит как `pending`, экспорт не отдаёт ничего. **Следствия два.** (1) Если потолок покупки не вмещает attempt 1 — юнит не доделается НИКОГДА: каждый резюм реплеит attempt 0 за $0 и умирает на attempt 1, прогон уходит exit 4 при ПОЛНОСТЬЮ доставленных купленных юнитах. (2) Продолжить волну после отказа ретрая нельзя без ДЫРЫ в непрерывном префиксе — то есть цена глобальной защёлки (недодача юнитов, которые влезали; разброс резервов внутри волны замерен ×2.976) различителем «свежий/ретрай» НЕ снимается. ⚠ **Оркестратор предлагал такой различитель на посылке «ретрай оставляет ФЛАГОВАННЫЙ юнит» — посылка ЛОЖНА, опровергнута зоной по строкам.** **Два пути лечения, ВЫБОР НЕ СДЕЛАН:** (а) отказ ретрая деградирует во флаг attempt 0 — смена `D2.3`, закрывает ОБА следствия; (б) минимальная покупка платформы ≥ `step_max_usd` движка (он включает ретраи именно поэтому) — закрывает только (1) и стоит продукту минимальной покупки ~5 глав | бэкенд+платформа | скоро | выбор владельца между (а) и (б) + пин | бэкенд-сессия денежного стопа 05.09, формулировка зоны | +| 291 | ⛔ **КОНСТРУКЦИЯ ПЕРЕ-РЕШЕНА ВЛАДЕЛЬЦЕМ 11.09 — «Эррата 15.09-а» к `D39.204`: отказ резервации на ретрае — СТАНДАРТНАЯ ОСТАНОВКА (не-терминальная метка позиции со своей причиной, недостача в кадре `ceiling`, пополнение и резюм доделывают юнит), а не флаг с отгрузкой и продолжением волны. Пак — `docs/BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md`; платформенная половина пуста по замеру сессии. Ниже — запись 05.09 как история.** ✅ **РЕШЕНО ВЛАДЕЛЬЦЕМ 05.09 (`D39.204`): деградировать во ФЛАГ, отличный по причине от исчерпания регенераций; текст попытки 0 оплачен и отгружается, волна идёт дальше. Вариант «минимальная покупка ≥ `step_max_usd`» СНЯТ — он стоил бы покупателю входного порога в пять глав. ⚠ Работа СВОИМ паком движка (правка пути ошибки в `stagerun.go` + новая причина флага + пин «купленное доставлено ⇒ не `exit 4`»), в принятый пак не дописывается.** ⛔ **ОБЯЗАТЕЛЬСТВО, БЕЗ КОТОРОГО ПАК НЕПОЛОН: новая причина флага выходит ОДНИМ АКТОМ С ПЛАТФОРМЕННОЙ ПОЛОВИНОЙ.** Карта заметок платформы РУКОПИСНАЯ (`platform/internal/ingest/notes.go`) и уезжает независимо от словаря движка; цена несделанного замерена — `PD-246`/эррата 04.09-в: минор 0.10.0 сутки жил ЛОЖНЫМ на проводе, причина доезжала читателю как `unspecified`, поймала это зона своей пере-проверкой ПОСЛЕ слов оркестратора «приёмка закончена». ⇒ промт этого пака обязан назвать ОБЕ зоны, а акт — предъявить зеркало. ⚠ Записано СТРОКОЙ, а не каналом, по слову сдавшей зоны: «`/tmp/textmachine-channel` не переживает рестарт — это в него и заложено», и обязательство, живущее в переписке двух сессий, умирает вместе с ними. ⚠⚠ **НИЖЕ — ИСТОРИЧЕСКИЙ РАЗБОР, ПО КОТОРОМУ РЕШАЛИ; как ЖИВОЕ не читать.** Его фраза «ВЫБОР НЕ СДЕЛАН» противоречит голове этой же строки — выбор СДЕЛАН владельцем (`D39.204`). ⛔ И ссылка «смена `D2.3`» в нём НЕВЕРНА ДВАЖДЫ, проверено по телу ноты (`../archive/architecture/05-decisions-D1-D38.md`, греп `^## D2. Диспозиция`): **(1)** `D2` уже кончается флагом («ретрай с бо́льшим `max_tokens` до капа, потом флаг») ⇒ это ДОСТРОЙКА, а не смена; **(2)** `D2.3` — по правилу подномеров ПУНКТ 3 тела `D2`, то есть «детектор вырождения перед удвоением `max_tokens`», к деградации отказа резервации отношения не имеет. **Настоящий адресат — `D2` п.2 «Тегировать `flag_reason`»**, и он делает вывод СИЛЬНЕЕ: тегирование причины там уже ТРЕБУЕТСЯ ⇒ новая причина есть **новый тег под существующим правилом**, а требование «причина обязана отличаться от исчерпания регенераций» — не добавка к канону, а его ИСПОЛНЕНИЕ. ⚠ Голова и хвост одной строки противоречили друг другу о состоянии решения — тот же класс, что находка `F7` приёмки, только не в коде, а в бэклоге; поймала сдавшая зона движка уже после закрытия своего пака. **ОТКАЗ РЕЗЕРВАЦИИ НА РЕТРАЕ НЕ ДЕГРАДИРУЕТ И НЕ ОСТАВЛЯЕТ СЛЕДА — юнит может заклинить НАВСЕГДА, а волна не может продолжиться без дыры.** `maxTokensForAttempt` удваивает бюджет на каждой регенерации (`backend/internal/pipeline/disposition.go`, греп `maxTokensForAttempt`), так что attempt 1 резервирует вдвое больше attempt 0. Отказ ретрая уходит наверх из цикла попыток (`backend/internal/pipeline/stagerun.go`, греп `return nil, err` в цикле попыток) **РАНЬШЕ `UpsertChunkStatus`** ⇒ чекпойнт attempt 0 есть (реплей за $0), **строки `chunk_status` НЕТ**, читающие модели видят юнит как `pending`, экспорт не отдаёт ничего. **Следствия два.** (1) Если потолок покупки не вмещает attempt 1 — юнит не доделается НИКОГДА: каждый резюм реплеит attempt 0 за $0 и умирает на attempt 1, прогон уходит exit 4 при ПОЛНОСТЬЮ доставленных купленных юнитах. (2) Продолжить волну после отказа ретрая нельзя без ДЫРЫ в непрерывном префиксе — то есть цена глобальной защёлки (недодача юнитов, которые влезали; разброс резервов внутри волны замерен ×2.976) различителем «свежий/ретрай» НЕ снимается. ⚠ **Оркестратор предлагал такой различитель на посылке «ретрай оставляет ФЛАГОВАННЫЙ юнит» — посылка ЛОЖНА, опровергнута зоной по строкам.** **Два пути лечения, ВЫБОР НЕ СДЕЛАН:** (а) отказ ретрая деградирует во флаг attempt 0 — смена `D2.3`, закрывает ОБА следствия; (б) минимальная покупка платформы ≥ `step_max_usd` движка (он включает ретраи именно поэтому) — закрывает только (1) и стоит продукту минимальной покупки ~5 глав | бэкенд+платформа | скоро | выбор владельца между (а) и (б) + пин | бэкенд-сессия денежного стопа 05.09, формулировка зоны | | 292 | ⛔ **ЧЕСТНОСТЬ ТРЁХ СТРОК НАБЛЮДАЕМОСТИ — ЖИВАЯ ПОЛОВИНА (б) ЗАКРЫТОЙ СТРОКИ 105, заведена 05.09 отдельным носителем.** Закрытие 105 сняло только половину (а) — предикат `isBankRole`; половину (б) чинить никто не заказывал, а на неё ссылались ДВА носителя как на «до фикса 105». Три дефекта, все воспроизведены: **(1)** строка `VOICE` берёт `rules=` из конфига ВРЕМЕНИ ОТЧЁТА (`backend/internal/pipeline/quality.go`, греп `rules=`), поэтому включение `gates.voice` ПОСЛЕ прогона печатает «измерено, чисто» для книги, которую никто не мерил; **(2)** та же строка печатается при ВЫКЛЮЧЕННОМ гейте, если `SpoilerLeaks>0` — поведение верное, неверна формулировка отчёта; **(3)** знаменатель `BANKNOTE` = `len(states)` вместе с призрачными строками `retrieval_state`, тогда как соседний агрегатор их фильтрует ⇒ после пере-чанковки покрытие ЗАНИЖАЕТСЯ. ⚠ Цена молчания прямая: отчёт говорит «измерено», когда не мерили, — это ложь читателю в том самом месте, куда смотрят, решая, готова ли книга. Печатает `cmd/tmctl/render.go` (греп `rules=`), пин — `render_observability_test.go`. | бэкенд | скоро | правка формулировки + знаменателя + тест на «включил гейт после прогона» | D39.86, D39.200; археология — `architecture/13-tech-debt-anchors.md` §Б-105 п.(б) | | 293 | ⛔ **ФАЙЛ ПОД ЛЮБЫМ КАТАЛОГОМ `books/` НЕВИДИМ ДЛЯ GIT — `git status` его не показывает, `git add` молча не берёт, и сдающая зона теряет работу, не заметив.** Предъявлено 05.09 платформенной сессией и проверено оркестратором до лендинга: `git check-ignore -v platform/internal/books/counter_test.go` → `/info/exclude:9:books`. **Причина: правило `books` в `.git/info/exclude` НЕЯКОРЕНО**, а gitignore без ведущего `/` ловит каталог с этим именем на ЛЮБОЙ глубине. ⚠ Неякорность ОСМЫСЛЕННА и снимать её нельзя не думая: `books` в связанном рабочем дереве — СИМЛИНК, а трекнутое правило `/books/` матчит только каталоги (комментарий стоит там же). ⚠ **Почему это не поймал никто:** тронутые файлы того же каталога в `git status` ВИДНЫ (игнор действует лишь на неотслеживаемое), поэтому пропажа не читается глазами; а `git commit -- <путь>` untracked роняет и без игнора. Замер: без `git add -f` уехал бы 31 файл из 32. **Лечение — не «поправить exclude»:** файл ОБЩИЙ для всех рабочих деревьев клона, включая полигонное, и менять семантику игнора под живыми сессиями нельзя. Формы, между которыми выбирать: (а) якорить правило под КОНКРЕТНЫЙ симлинк (`/books` в корне дерева) и проверить, что симлинк по-прежнему игнорируется во ВСЕХ деревьях; (б) оставить как есть и завести проверку лендинга — `git status --ignored --short <зона>` перед каждым актом. | оркестратор | скоро (гигиена лендинга, $0) | выбор формы + проверка во всех воркtree | предъявлено платформенной сессией 05.09; проверено исполнением при лендинге `7e2226a` | | 294 | ⭐ **ФОРМА «СКОЛЬКО ДОБАВИТЬ» — решение владельца 05.09, ратифицировано `D39.203`.** Наружу вместо «сколько не хватило на ЭТОТ вызов» едет **«сколько добавить, чтобы прошёл ЛЮБОЙ следующий»** = `max(shortfall, step_max − headroom)`: сегодняшняя недостача закрывает текущий вызов, а следующий может быть крупнее, и человек доплачивает дважды. ⚠ **НЕ однострочник, и объявлять его дешёвым было бы ошибкой** (зона дешевизну не подтвердила): новая величина · **ПЕРЕИМЕНОВАНИЕ поля** — `shortfall_micro_usd` станет ложным именем, кандидат `top_up_micro_usd` · минор `StreamVersion` 1.3→1.4 · зеркало словаря у платформы · пере-снятие пина белого списка кадра `ceiling`. ⚠ Построенное поле НЕ ложно, оно у́же: закрывает вызов, а не следующий шаг | бэкенд+платформа | скоро | новая величина + переименование + минор потока | **D39.203**; тензия п.(3) против п.(4) заказа найдена зоной движка | diff --git a/docs/NEAR_TERM_PLAN.md b/docs/NEAR_TERM_PLAN.md index 29d901d8..1eb4afcc 100644 --- a/docs/NEAR_TERM_PLAN.md +++ b/docs/NEAR_TERM_PLAN.md @@ -39,18 +39,18 @@ ## Горизонт -| № | зона | предмет | цена | состояние на 11.09 | +| № | зона | предмет | цена | состояние (пере-снято 15.09) | |---|---|---|---|---| | 1 | **бэкенд** | структура глав, ДИЗАЙН | $0 | ✅ **ЗАКРЫТ АКТОМ `D39.245`** без сходимости, правилом остановки | | 2 | **платформа** | правда у двери: `PD-455` · `PD-448` (разбор) · `PD-162` | $0 | ✅ **ЗАКРЫТ АКТОМ `D39.246`** с дофиксом по двум находкам приёмки | | 3 | ~~полигон~~ | **прогон A**: настоящая книга до ФАЙЛА, платный провайдер | **факт $0.419424** | ✅ **ЗАКРЫТ АКТОМ `D39.247`**; строка 16 закрыта замером; ⚠ зона ВНЕ СКОУПА с 11.09 | -| 4 | **бэкенд** | ⛔ **КОНСИСТЕНТНОСТЬ, КОТОРУЮ МОЖНО ПРЕДЪЯВИТЬ**: ряды **406** · **407** · **408** · **409**, плюс купленные прогоном **417** (закон банка не виден в тексте) и **419** (стеммер: 11 из 18 промахов — ложные) | пак, почти весь $0 | ⏳ **ВЫДАН 11.09** сессии `textmachine-c9`; приёмка, круг 2 (шесть посадок выжили → дофикс) | -| 5 | **бэкенд** | «ВЫДАЧА, КОТОРУЮ ВИДИТ ЧИТАТЕЛЬ» — ⛔ **РАЗОБРАН 11.09 ЧТЕНИЕМ РЯДОВ И РАЗВЕДЁН НА ДВА ПАКА, один ряд закрыт замером.** **(а) `291` ВЫДАН** — `BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md`, решено владельцем (`D39.204`), дефект жив и предъявлен строкой `stagerun.go:203`; акт ОДИН с платформенной половиной. **(б) `307` ЗАКРЫТ, а не заказан:** честная форма ПОСТРОЕНА и запинена коммитом `6ceb133` — `runOrderedChapters = (case when r.ordered_units is not null then null else r.ceiling_chapters end)`, плюс `TestACharacterOrdersVolumeIsPublishedInTheUnitItWasSoldIn`; ряд снят с таблицы. Заказать его значило бы заказать готовое — мой повторяющийся класс. **(в) `283` + `284` + `201` — СЛЕДУЮЩИЙ пак «структура и заголовки», и он идёт ПОСЛЕ прогона B:** 283 требует единственного окна пере-снапшота, а пере-снапшот двигает НАРЕЗКУ ⇒ единицы A и B станут несравнимыми, и B ответит на другой вопрос (поправка старшего коллеги, принята). У 284 сверх того нет слова владельца о ПОДПИСИ стадии | пак, $0 | ⏳ (а) выдан · (б) закрыт · (в) ждёт B | +| 4 | **бэкенд** | ⛔ **КОНСИСТЕНТНОСТЬ, КОТОРУЮ МОЖНО ПРЕДЪЯВИТЬ**: ряды **406** · **407** · **408** · **409**, плюс купленные прогоном **417** (закон банка не виден в тексте) и **419** (стеммер: 11 из 18 промахов — ложные) | пак, почти весь $0 | ✅ **ЗАКРЫТ АКТОМ `D39.249`** с дофиксом | +| 5 | **бэкенд** | «ВЫДАЧА, КОТОРУЮ ВИДИТ ЧИТАТЕЛЬ» — ⛔ **РАЗОБРАН 11.09 ЧТЕНИЕМ РЯДОВ И РАЗВЕДЁН НА ДВА ПАКА, один ряд закрыт замером.** **(а) `291` ВЫДАН** — `BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md`, решено владельцем (`D39.204` с «Эрратой 15.09-а»), дефект был жив на 11.09 (возврат ошибки из цикла попыток до `UpsertChunkStatus`, `backend/internal/pipeline/stagerun.go`); акт ОДИН с платформенной половиной (⚠ испр. 15.09: платформенная половина пуста по замеру сессии, отдельного промта нет). **(б) `307` ЗАКРЫТ, а не заказан:** честная форма ПОСТРОЕНА и запинена коммитом `6ceb133` — `runOrderedChapters = (case when r.ordered_units is not null then null else r.ceiling_chapters end)`, плюс `TestACharacterOrdersVolumeIsPublishedInTheUnitItWasSoldIn`; ряд снят с таблицы. Заказать его значило бы заказать готовое — мой повторяющийся класс. **(в) `283` + `284` + `201` — СЛЕДУЮЩИЙ пак «структура и заголовки», и он идёт ПОСЛЕ прогона B:** 283 требует единственного окна пере-снапшота, а пере-снапшот двигает НАРЕЗКУ ⇒ единицы A и B станут несравнимыми, и B ответит на другой вопрос (поправка старшего коллеги, принята). У 284 сверх того нет слова владельца о ПОДПИСИ стадии | пак, $0 | ⛔ (а) сессия b1 ПОТЕРЯНА 15.09, пак не завершён — передаётся свежей сессии разделом ред. 5; конструкция пере-решена владельцем 11.09: стандартная остановка, не флаг (эррата 15.09-а к `D39.204`) · (б) закрыт · (в) прогон B принят (`D39.252`), заперт теперь слотом и порядком — см. пункт 10 | | 6 | **фронт** | поверхность показа | пак | разморозка + пункты 1–5 | | 7 | ~~полигон~~ | ⛔ **ЗОНА ВНЕ СКОУПА — слово владельца 11.09**; четыре промта уведены в `archive/prompts/` с баннерами | — | снято | -| 8 | **бэкенд/деньги** | ⛔ **«ПАДЕНИЕ, КОТОРОЕ ВИДНО»** — четверть COGS в одном механизме (**415**), слепые приборы отказа (**414**, **422**), молчащая подстановка цены. ⚠ Пин цены **413** из пака ВЫНУТ: это данные и отдельное решение | пак, $0 | ✍️ **НАПИСАН 11.09** — `BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md`; выдаётся СВЕЖЕЙ сессии сразу по закрытии 4 ⛔ **КРИТЕРИЙ ПРИЁМКИ ПАКА — МЕХАНИЗМ, А НЕ ПРОПОРЦИЯ** (поправка старшего коллеги 11.09): лекарство есть распространение ратифицированного образца `D2` п.3 на вторую причину, и оно верно при 25 % и при 5 % — пропорция задаёт очерёдность, не форму. ⇒ судить по строкам «ни одного удвоения без вердикта о вырождении; каждая выброшенная попытка — строкой леджера с причиной», а не по «с 25.4 % до X». Значит прогон B пак не гейтит и паком не гейтится.| - -| 9 | **платформа+бэкенд** | ⭐ **ХОЛОДНЫЙ ПРОГОН B — платформа → бэкенд → файл, ВТОРОЙ раз.** Уточнение владельца 11.09: спрашивая «перепрогоны нужны», он имел в виду именно сквозной прогон, а не пере-запуск тестов. Покупает ЧЕТЫРЕ вещи, которых нет ни у кого: **(1)** миграция **v17** (`wave_selection`) пака консистентности ни разу не шла на живом прогоне — только в тестах; **(2)** прибор консистентности впервые даст числа с ЖИВОГО прогона, а не с пере-скана сохранённой базы прогона A — сегодня все `I1`/`I2` получены повторным чтением одних и тех же данных; **(3)** платформенный пак (идемпотентный резюм, терминальное состояние) проверяется сквозь, а не юнитами; **(4)** ⛔ **вторая точка по денежной дыре, и она нужна по норме, а не для красоты** — весь довод «четверть денег купила пустоту» стоит на ЧЕТЫРЁХ одиночных розыгрышах, а квирки §3д прямо говорят: смета DeepSeek с одиночного вызова может ошибиться на порядок, сметы строятся на ПОВТОРАХ. ⇒ у числа 25.4 % есть знак и нет величины, пока прогон не повторён. **Цена ≈$0.42 по образцу прогона A, машинный кап ≈$2.5.** ⛔ **ПРЕ-РЕГИСТРАЦИЯ ЗНАМЕНАТЕЛЯ, иначе B ответит числом на другой вопрос** (поправка старшего коллеги 11.09): B — ЕЩЁ ОДИН одиночный прогон, и две точки распределением не станут. Настоящая ценность B не «вторая точка к 25.4 %», а `request_log` ВСЕХ единиц прогона ⇒ **доля выброшенных первых попыток ПО ЕДИНИЦАМ, а не по вызовам.** Это и пре-регистрируется. ⚠ И идёт B **ПАРАЛЛЕЛЬНО** паку о падениях, а не после: они в РАЗНЫХ слотах (бэкенд против платформы), и правило «один промт на зону» их не сталкивает | ≈$0.42 | ⏳ **ВЫДАН 11.09** сессии `textmachine-82`, санкция владельца получена и положена в носитель ниже | +| 8 | **бэкенд/деньги** | ⛔ **«ПАДЕНИЕ, КОТОРОЕ ВИДНО»** — четверть COGS в одном механизме (**415**), слепые приборы отказа (**414**, **422**), молчащая подстановка цены. ⚠ Пин цены **413** из пака ВЫНУТ: это данные и отдельное решение | пак, $0 | ✅ **ЗАКРЫТ АКТОМ `D39.251`** (испр. 15.09; дальше — запись 11.09) · ✍️ **НАПИСАН 11.09** — `BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md`; выдаётся СВЕЖЕЙ сессии сразу по закрытии 4 ⛔ **КРИТЕРИЙ ПРИЁМКИ ПАКА — МЕХАНИЗМ, А НЕ ПРОПОРЦИЯ** (поправка старшего коллеги 11.09): лекарство есть распространение ратифицированного образца `D2` п.3 на вторую причину, и оно верно при 25 % и при 5 % — пропорция задаёт очерёдность, не форму. ⇒ судить по строкам «ни одного удвоения без вердикта о вырождении; каждая выброшенная попытка — строкой леджера с причиной», а не по «с 25.4 % до X». Значит прогон B пак не гейтит и паком не гейтится.| +| 9 | **платформа+бэкенд** | ⭐ **ХОЛОДНЫЙ ПРОГОН B — платформа → бэкенд → файл, ВТОРОЙ раз.** Уточнение владельца 11.09: спрашивая «перепрогоны нужны», он имел в виду именно сквозной прогон, а не пере-запуск тестов. Покупает ЧЕТЫРЕ вещи, которых нет ни у кого: **(1)** миграция **v17** (`wave_selection`) пака консистентности ни разу не шла на живом прогоне — только в тестах; **(2)** прибор консистентности впервые даст числа с ЖИВОГО прогона, а не с пере-скана сохранённой базы прогона A — сегодня все `I1`/`I2` получены повторным чтением одних и тех же данных; **(3)** платформенный пак (идемпотентный резюм, терминальное состояние) проверяется сквозь, а не юнитами; **(4)** ⛔ **вторая точка по денежной дыре, и она нужна по норме, а не для красоты** — весь довод «четверть денег купила пустоту» стоит на ЧЕТЫРЁХ одиночных розыгрышах, а квирки §3д прямо говорят: смета DeepSeek с одиночного вызова может ошибиться на порядок, сметы строятся на ПОВТОРАХ. ⇒ у числа 25.4 % есть знак и нет величины, пока прогон не повторён. **Цена ≈$0.42 по образцу прогона A, машинный кап ≈$2.5.** ⛔ **ПРЕ-РЕГИСТРАЦИЯ ЗНАМЕНАТЕЛЯ, иначе B ответит числом на другой вопрос** (поправка старшего коллеги 11.09): B — ЕЩЁ ОДИН одиночный прогон, и две точки распределением не станут. Настоящая ценность B не «вторая точка к 25.4 %», а `request_log` ВСЕХ единиц прогона ⇒ **доля выброшенных первых попыток ПО ЕДИНИЦАМ, а не по вызовам.** Это и пре-регистрируется. ⚠ И идёт B **ПАРАЛЛЕЛЬНО** паку о падениях, а не после: они в РАЗНЫХ слотах (бэкенд против платформы), и правило «один промт на зону» их не сталкивает | ≈$0.42 | ✅ **ЗАКРЫТ АКТОМ `D39.252`**, факт $0.396657 | +| 10 | **бэкенд** | ⛔ **БАНК: РЕШЁННОЕ ОСТАЁТСЯ РЕШЁННЫМ** — предмет пере-определён проверкой 15.09. Пак 12.09 «в банк по разнобою» (`BACKEND_WHAT_THE_BANK_IS_MADE_OF_SESSION_PROMPT.md`) снят баннером: все термы со `spread ≥ 2` уже в банке (A 9 из 9, B 8 из 8). Настоящий дефект приоритета №1 — пере-решение банка терминологом: на подписи замерено (у неподписанных строк сменились передачи A 12 из 69, B 14 из 66), на каждой следующей покупке глав выведено из кода — отгруженные главы по порядку слотов остаются со старыми передачами (`backend/internal/pipeline/volume.go`, греп `DELIVERY BEFORE REWORK`). Ряды 130 · 330 · 438 · 440 | $0 + центы перекупки банк-ролей | ⏳ ждёт слова владельца «копить ли решения банка между прогонами» (ряд 130, `research/34` §4 п.4) и слота бэкенда. Предложен порядок: РАНЬШЕ 5(в) — перекрой глав без якоря пере-решил бы банк платной книги | ⛔ **ПОЧЕМУ 4 ВСТАЛ ПЕРЕД 5 (решение 11.09 по мерилу владельца).** Мерило — «качественный КОНСИСТЕНТНЫЙ перевод длинных книг». Аудит банка 11.09 показал, что **книжного вопроса о консистентности не задаёт ни один @@ -129,6 +129,10 @@ API не было: 04.09 упёрлось в потолок (`PD-440`, с тех - ✅ **ПЛАТНЫЙ ПРОГОН A РАЗРЕШЁН** (слово 11.09: «Разрешаю»). Ожидание ≈$0.30, машинный кап ≈$2.5 (холд, см. раздел выше). ⚠ Санкция названа ЗДЕСЬ, потому что опровергатель 11.09 поймал: промты ссылались на неё как на факт, а в дереве её не было ни строкой — «известное со слов» не носитель. +- ✅ **ОТКАЗ ДЕНЕГ НА ПОВТОРНОЙ ПОПЫТКЕ — СТАНДАРТНАЯ ОСТАНОВКА, А НЕ ФЛАГ** (слово 11.09: «…иметь возможность поднять + просто потолок и возобновить прогон, так как это ситуация всё же СТАНДАРТНАЯ СО СТОПОМ, просто он произошёл по + какой-то другой причине»). Позиция получает не-терминальную метку со своей причиной, кадр `ceiling` несёт недостачу, + пополнение и резюм доделывают юнит. ⚠ Четыре дня жило только в промте пака; ратифицировано «Эрратой 15.09-а» к `D39.204`. - ✅ **Остановка остаётся ЖЁСТКОЙ, деньги терять ДОПУСТИМО, но остановка обязана быть КОРРЕКТНОЙ** — без гонок, без половинчатых состояний, с верным возобновлением (`D39.240`). - ✅ **ГОЛОС ВХОДИТ В ПРИОРИТЕТ №1** (слово 11.09: «Входит»). Прежнее расхождение канона проекта («термины/голоса») и ратифицированного списка 05.09 (голос №3) снято. ⛔ **Форма работы задана тем же словом: проектирует и контролирует голос FABLE, исполняет ОПУС** — сессии обсуждают имплементацию с агентом Fable 5, а не решают сами. Носитель предмета — строка бэклога **410**. ⚠ **Её голова ПЕРЕПИСАНА 11.09 пере-замером: «мёртв в четырёх местах» было НЕВЕРНО** — голос построен сквозь (схема сида · загрузчик · хранилище · инъекция · флаггер по отгруженному тексту · поле отчёта) и выключен ровно двумя вещами: профиля не написал никто ни разу, и `InjectVoice` — константа без ключа конфига, чьё включение стоит полного `--resnapshot`. ⇒ работа мельче, чем читалась: не «построить голос», а написать профиль, открыть ручку и заплатить ре-снапшотом. @@ -155,7 +159,7 @@ API не было: 04.09 упёрлось в потолок (`PD-440`, с тех с числом читателей, а не с числом книг. Носители — ряды **415** · **414** · **422**. - **Пять вопросов банка памяти**, поднятых аудитом 11.09 (стоп или флаг на разъехавшемся термине · входит ли ГОЛОС в приоритет №1 · один перевод у НЕподписанного термина · накапливать ли банк между прогонами · - остановка на подпись — опция или свойство продукта). Носитель разбора — `docs/research/34-*`. + остановка на подпись — опция или свойство продукта). Носитель разбора — `docs/research/34-*`. ⚠ **15.09: вопрос «накапливать ли банк между прогонами» получил числа и стал блокером пункта 10.** ## Вычеркнуто diff --git a/docs/README.md b/docs/README.md index 04ead5bc..61a87699 100644 --- a/docs/README.md +++ b/docs/README.md @@ -24,7 +24,7 @@ - **Активные хендофф-промты — какой файл ТВОЙ** (состав обновляется при каждом лендинге, D39.80; хроника, причины и статусы РАБОТ — CURRENT-STATE и D-лог): | Роль | Активный промт | Статус | |---|---|---| - | **Бэкенд · КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО** | [BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md](BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md) | ✍️ **написан 11.09**, выдаётся `textmachine-b1`. Предмет решён владельцем (`D39.204`): отказ резервации на РЕТРАЕ деградирует во флаг с отдельной причиной. Сегодня он уходит наверх из цикла попыток раньше `UpsertChunkStatus` ⇒ юнит виден `pending` НАВСЕГДА, прогон уходит `exit 4` при доставленных купленных юнитах. Платформенная половина — отдельным промтом, акт ОДИН на две. $0 | + | **Бэкенд · КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО** | [BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md](BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md) | ⛔ **ВЫДАН 15.09 СВЕЖЕЙ СЕССИИ `textmachine-main-b1`** — разделом ПЕРЕДАЧИ (ред. 5) в начале того же промта; жду эхо. Сессия `textmachine-b1` построила пак почти целиком и ПОТЕРЯНА при переезде окружения, не объявив работу завершённой; сдача лежит застейдженной в индексе. Предмет решён владельцем — `D39.204` **с эрратой 15.09-а**: отказ резервации на ретрае — СТАНДАРТНАЯ ОСТАНОВКА (кадр `ceiling` с недостачей, не-терминальная метка позиции, пополнение и резюм доделывают юнит), а не флаг. Платформенная половина пуста по замеру сессии, акт один. $0 | | Сквозной · ХОЛОДНЫЙ ПРОГОН B | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ 11.09** — акт **D39.252**; промт в [archive/prompts/](archive/prompts/COLD_RUN_B_SESSION_PROMPT.md) с баннером-исходом. Книга второй раз от двери до ФАЙЛА, факт **$0.396657**. ⭐ Две меры денежной дыры разошлись в РАЗНЫЕ стороны на одних данных; **85.7 % оплаченного выхода — размышление, а не текст**. ⛔ Прибор приоритета №1 солгал вердиктом по подписанному имени героя. Качество впервые судилось по ОРИГИНАЛУ рядом с переводом: 26 находок, 1 крит | | Оркестратор | [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) | роль и нормы; счётчик роли — CURRENT-STATE | | Бэкенд · ДВЕ ОСТАНОВКИ | активного НЕТ | пак ОТМЕНЁН ВЛАДЕЛЬЦЕМ 10.09 до лендинга — акт **D39.240**; промт в `archive/prompts/` с баннером. Причина — размах правки, не качество. ⚠ Предмет ЗАМЕНЁН и сузился: остановка остаётся жёсткой, **деньги терять допустимо**, но она обязана быть КОРРЕКТНОЙ (без гонок, без половинчатых состояний, верное возобновление). ⭐ Пак успел купить `D39.236`–`D39.238` и строку **385** | diff --git a/docs/architecture/05-decisions-index.md b/docs/architecture/05-decisions-index.md index ed97ea82..7720b658 100644 --- a/docs/architecture/05-decisions-index.md +++ b/docs/architecture/05-decisions-index.md @@ -262,7 +262,7 @@ | D39.201 | 05.09 | **АКТ: платформенный пак «пустить внутрь можно» ПРИНЯТ С ДОФИКСОМ** (`7e2226a` + `3e84716`; 20 находок, 5 снято, 15 устояло, 5 major — ТРИ в самом механизме бэкапа: книга в интейке не попадала в точку ни одним файлом при `complete: true`, ложная посылка дискриминатора вешала гейдж возраста в `+Inf` навсегда, рецепт восстановления не останавливает прогоны). Ратификации прозой: `bearerToken` минтится вне полосы, `character_count` — признак точности рядом с числом. Строки 269 · 270 · 274 закрыты; **282 НЕ закрыта** — состав минора внесён прозой, поле за паком формы заказа (⚠ испр.: прежняя редакция строки реестра числила её закрытой, тело ноты этого не говорит); заведена 293 | ратифицировано | живое тело | приёмка · платформа · бэкап · контракт | | D39.202 | 05.09 | **НОРМЫ СМЕНЫ: один корень у восьми случаев — прибор отвечает на свой вопрос, а читают его как ответ на свой.** Четыре вида неразличимого зелёного отчёта · девять форм ложной зелени (включая ГЕЙТ, ЗАЩИЩАЮЩИЙ ДЕФЕКТ) · правила посадок, указателей, замеров · «замер, попавший в посылку заказа, — стоп и вопрос владельцу» · норма о нормах: правило, требующее бдительности, исполняется настолько, насколько она есть | ратифицировано | живое тело | нормы · приёмка · инструменты | | D39.203 | 05.09 | **Владелец: движку МОЖНО говорить «сколько добавить»** — раскрытие оценки отказанного вызова легитимно (стена и есть цена вызова, формой не обходится). ⚠ Запрет ПТ-35 на СТОИМОСТЬ цел: наружу идёт до-вызовная ОЦЕНКА, не сеттлмент. Тензия жила внутри заказа (п.3 против п.4: `step_max_usd` — тоже оценка вызова). Создаёт работу: величина `max(shortfall, step_max − headroom)` + ПЕРЕИМЕНОВАНИЕ поля + минор `StreamVersion` 1.3→1.4; пак лендится как построен | ратифицировано | живое тело | деньги · шов · контракт · продукт | -| D39.204 | 05.09 | **Владелец: отказ резервации на ретрае ДЕГРАДИРУЕТ ВО ФЛАГ** («пусть флагает просто как-то»); вариант «минимальная покупка ≥ step_max» снят. ⚠ Это НЕ смена D2.3 — D2 уже кончается флагом, денежная ветка до него не доходит (возврат ошибки из цикла попыток ДО `UpsertChunkStatus`). Причина флага обязана отличаться от исчерпания регенераций. Строка 291 закрывается; работа — своим паком движка | ратифицировано | живое тело | деньги · диспозиция · движок | +| D39.204 | 05.09 | **Владелец: отказ резервации на ретрае ДЕГРАДИРУЕТ ВО ФЛАГ** («пусть флагает просто как-то»); вариант «минимальная покупка ≥ step_max» снят. ⚠ Это НЕ смена D2.3 — D2 уже кончается флагом, денежная ветка до него не доходит (возврат ошибки из цикла попыток ДО `UpsertChunkStatus`). Причина флага обязана отличаться от исчерпания регенераций. Строка 291 закрывается; работа — своим паком движка. ⛔ **Словом владельца 11.09 (эррата 15.09-а) отказ на ретрае — СТАНДАРТНАЯ ОСТАНОВКА** с не-терминальной меткой позиции и недостачей в кадре `ceiling`: в п.4 сняты деградация во флаг, отгрузка текста и продолжение волны (требование ОТДЕЛЬНОЙ причины остаётся); сняты п.5 (а)–(б) и пин «не `exit 4`» из п.5 (в) | ратифицировано · частично снято эрратой 15.09-а | живое тело | деньги · диспозиция · движок | | D39.205 | 05.09 | **Лестница D25.1 ЗАКРЫТА владельцем: копия без пометки = книга БЕЗ ПРОПУСКОВ; пропущенный КУСОК главы — критический** (маркер остаётся на уровне юнита). Закрывает последнюю границу D39.178 п.4. ⚠ Оркестратор поднял ложную тревогу «вы отменяете решение 30.08» — принцип «в книгу только дыры, остальное на фронт» ратифицирован D39.175 п.2 / D39.178 п.3. Гейт глоссария НЕ включается до замера точности (строка 12 — предусловие); заказ: `glossary_miss` как актуатор ремонта, но СНАЧАЛА подать подписанный канон в прогон | ратифицировано | живое тело | продукт · выдача · качество | | D39.206 | 05.09 | **АКТ: движковый пак «денежный стоп» ПРИНЯТ С ДОФИКСОМ** (`81a89e9` + `616a8e4`; каталог 201/197 RED/0 неожиданных, тесты 1172→1213). 18 находок, 6 снято, 12 устояло, 4 major — **все четыре оказались УТВЕРЖДЕНИЯМИ, а не поведением**. Строки 271 · 277 · 278 (+171) закрыты, 291 решена владельцем. Порог десяти глав снят лендингом | ратифицировано | живое тело | приёмка · движок · деньги | | D39.207 | 05.09 | **АКТ ВЕРИФИКАЦИИ обоих актов приёмки холодной сессией без пака** (воркри `/tmp/tm-verify-0509` на `d766007`, $0): 15 из 15 фактических утверждений ПОДТВЕРЖДЕНЫ, три прогоном; 7 находок вне карты (F1 — три протухших «финальных» числа в журнале, включая «0 SURVIVED» против четырёх; F2/F3 — имена в Go-комментариях, не разрешающиеся ни во что; F5 — `/tmp/.git` ломает `go build` под `/tmp`). **Норма: утверждение о замере ИЛИ о причине непроверки обязано цитировать КОМАНДУ.** Дыра скипа платформы замерена: 373 против 6 при неотличимом `exit 0` | ✅ | diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index 418c22eb..65821d5b 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -101,6 +101,26 @@ > вердикт. ⚠ И это задевает цель 6: снапшот и голден запирают ВХОД, состав банка в них не заперт. > Носитель — ряд **439**; границы замера (одна книга, шесть чанков, одна пара прогонов) названы там же. > ⚠ Тело ноты не переписано (`D23.3`). +> ⚠ **Эррата 15.09-а (`D39.204` п.3–5) — КОНСТРУКЦИЯ ПЕРЕ-РЕШЕНА ВЛАДЕЛЬЦЕМ 11.09, А ЖУРНАЛ ЧЕТЫРЕ ДНЯ ДЕРЖАЛ +> ПРЕЖНЮЮ.** Слово владельца дословно, как его записал оркестратор №23 в промт пака +> (`docs/BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md` §4.1): «Надо о таком просто сообщать в виде метаданты, +> которая сейчас и пишется предупреждением, и иметь возможность поднять просто потолок и возобновить прогон, так +> как это ситуация всё же СТАНДАРТНАЯ СО СТОПОМ, просто он произошёл по какой-то другой причине». **Читать так:** +> отказ резервации на ретрае **останавливает прогон штатно** — с тем же кодом выхода, что любая остановка по +> потолку, и кадром `ceiling` с недостачей (`D39.203`); позиция получает НЕ-терминальную для резюма метку со своей +> причиной; пополнение и резюм доделывают юнит. ⇒ **Сняты** п.4 («деградирует во флаг… текст ОТГРУЖАЕТСЯ… волна +> продолжается» — снято ТОЛЬКО это, см. «остаются»), п.5 (а)–(б) («перестаёт уходить `exit 4`», «волна продолжается») +> и в п.5 (в) пин «купленное доставлено ⇒ не `exit 4`» — пин стал «юнит получает строку · остановка несёт +> недостачу · пополнение доделывает». П.3 «юнит не доделается никогда» сильнее факта: при поднятом потолке резюм +> доделывал юнит и до пака, вечно умирает только резюм без пополнения — поправка исполняющей сессии, принятая в +> том же промте (§4.2 п.3). **Остаются:** из п.1 — снятие варианта «минимальная покупка ≥ `step_max_usd`» (его первая +> половина, «развилка закрыта в пользу деградации во флаг», снята этой же эрратой) · п.2 · +> требование п.4, чтобы причина ОТЛИЧАЛАСЬ от исчерпания регенераций · п.5 (в) в части «работа — своим паком +> движка». ⚠ Нашёл опровергатель промта передачи 15.09: цитата даёт 0 вхождений в журнале, реестре, бэклоге и +> плане (его греп) и в README (мой), при двух упоминаниях `D39.204` в журнале. Реестр, ряд 291 бэклога, README, +> `15-money-path.md` и план поправлены тем же коммитом. Класс — слово владельца, не ратифицированное в тот же день +> (`D39.248`). ⭐ **Подтверждено владельцем 15.09, дословно:** «Это ведь обычный механизм останова который должен +> отрбатать, и далее просто можно возобновить прогон пополнив или подняв траты». Тело ноты не переписано (`D23.3`). > ⚠ **Эррата 11.09-и (`D39.251` п.7 и ряд 428, слово «пере-оплата» о $0.028742) — НАЗВАНИЕ БЫЛО НЕВЕРНЫМ, > и опровергает его замер, а не мнение.** Я назвал вторую покупку терминологии на резюме «пере-оплатой > ПРИНЯТОЙ работы», то есть деньгами за уже сделанное. Замер сессии прогона B, пере-снятый мною независимо: diff --git a/docs/architecture/15-money-path.md b/docs/architecture/15-money-path.md index 543bcd86..4dc1d89b 100644 --- a/docs/architecture/15-money-path.md +++ b/docs/architecture/15-money-path.md @@ -75,7 +75,7 @@ | Семантика `--ceiling-usd` | D39.122 п.2в; `backend/cmd/tmctl/invocation.go:142`=`the book USD ceiling in force for THIS RUN ONLY`, `backend/cmd/tmctl/main.go:261`=`--ceiling-usd is NOT a per-run budget` | | Формула аргумента потолка (без reserved) · ставка · settle-формы | D39.123 п.2б/г/д; PD-158/PD-159/PD-144 в реестре | | Код денег платформы | `platform/internal/pgstore/credits.go` · `pgstore/runs.go` · `runs/spawn.go` · `runs/reconcile.go` · `pricing/pricing.go` | -| Ратификации, на которых стоит этот док | ⚠ **добавлены 05.09: `D39.203`** (владелец: движку МОЖНО говорить «сколько добавить»; наружу идёт ДО-ВЫЗОВНАЯ ОЦЕНКА, не стоимость) · **`D39.204`** (отказ резервации на ретрае деградирует во ФЛАГ; решение принято, код НЕ тронут — строка 291) · **`D39.206`** (акт приёмки денежного стопа). ⚠ **И новые движковые денежные носители того же лендинга:** `backend/internal/pipeline/reservegate.go` (шлюз резерваций и `shortfallMicroUSD`) · `priceprojection.go` (проекция цены книги) · `internal/runevents/runevents.go` (`Ceiling.ShortfallMicroUSD`, `Finished.Money`, поток 1.3). · **D39.179** (пере-пин цен 16.08, ×4.47; норма «стабилен чистый ФАЙЛ» — п.4) · **D39.181** (закон раскрытия: признак объёмного стопа едет числом) · **D39.182** (пак «деньги и честность»: план банк-ролей режется до первого вызова; порог согласия без контура банк-ролей) | +| Ратификации, на которых стоит этот док | ⚠ **добавлены 05.09: `D39.203`** (владелец: движку МОЖНО говорить «сколько добавить»; наружу идёт ДО-ВЫЗОВНАЯ ОЦЕНКА, не стоимость) · **`D39.204`** (отказ резервации на ретрае деградирует во ФЛАГ; решение принято, код НЕ тронут — строка 291; ⚠ испр. 15.09: конструкция пере-решена владельцем 11.09 — СТАНДАРТНАЯ ОСТАНОВКА с меткой позиции и недостачей в кадре `ceiling`, а не флаг; «Эррата 15.09-а») · **`D39.206`** (акт приёмки денежного стопа). ⚠ **И новые движковые денежные носители того же лендинга:** `backend/internal/pipeline/reservegate.go` (шлюз резерваций и `shortfallMicroUSD`) · `priceprojection.go` (проекция цены книги) · `internal/runevents/runevents.go` (`Ceiling.ShortfallMicroUSD`, `Finished.Money`, поток 1.3). · **D39.179** (пере-пин цен 16.08, ×4.47; норма «стабилен чистый ФАЙЛ» — п.4) · **D39.181** (закон раскрытия: признак объёмного стопа едет числом) · **D39.182** (пак «деньги и честность»: план банк-ролей режется до первого вызова; порог согласия без контура банк-ролей) | | Код денег движка | `backend/internal/store/ledger.go` · `store/store.go` · `pipeline/stagerun.go` · `pipeline/status.go` · `config/book.go` · `pipeline/rebill.go` (согласие на пере-оплату) · `pipeline/terminologist.go` (книго-широкие бюджеты банк-ролей) · `pipeline/volume.go` (объёмный потолок) | | Дефекты денег | `platform/docs/DEFECT_REGISTER.md` (PD-104·113·144·157·158·159) | | Бэклог-строки | `docs/BACKLOG.md` строки 136 · 137 · **377** · **382** (⚠ 78 ЗАКРЫТА 10.09 актом `D39.232`) (⚠ испр. 05.09: **166 отсюда СНЯТА** — движковая половина оценки построена и опубликована лендингом `81a89e9`; открыта только платформенная) (135 и 165 закрыты D39.131) | @@ -116,7 +116,7 @@ 3. **Менять надо ТРАКТОВКУ ОТКАЗА**, а не наличие резервации: «не начинаем новое» вместо «гасим всё». ⛔⛔ **ЭРРАТА 05.09 — ВСЁ НИЖЕ ОПИСЫВАЕТ ДВИЖОК ДО ПАКА «ДЕНЕЖНЫЙ СТОП» (приёмочный `81a89e9` + дофикс `616a8e4`, акт приёмки **D39.206**; ⚠ испр.: раньше здесь стояла D39.203 — это нота ВЛАДЕЛЬЦА про «сколько добавить», а не акт, и назван был только дофикс-коммит). Порог «книга короче десяти глав не переводится» СНЯТ ЛЕНДИНГОМ.** Стена стояла на том, что отказ ОДНОГО воркера ронял ВСЮ волну ⇒ резервы всех четырёх обязаны были уместиться в потолок разом. Пак это и чинил (его промт `docs/archive/prompts/BACKEND_MONEYSTOP_SESSION_PROMPT_2026-09-05.md` называл порог целью): отказ ЗАЩЁЛКИВАЕТ волну — новое не стартует, допущенное дорабатывается, — а обязательный вызов ЖДЁТ settle, когда settle может помочь. Пины: `backend/internal/pipeline/moneystop_test.go`, греп `TestUnderACeilingTheWaveFinishesWhatItAdmitted` и `TestWaitingForHeadroomDeliversTheWholeBook` («a ceiling that admits one call AT A TIME must still deliver the book»). -⇒ **Честное состояние на 05.09:** движок больше НЕ требует, чтобы вся волна умещалась в потолок; короткая книга идёт по одному вызову. Остаточный пол — ОДНА резервация (`step_max_usd` ≈ $0.07 ⇒ ~3 главы по ставке $0.03; до ИСПОЛНЕНИЯ `D39.204` удвоение на ретрае поднимает это до ~5 — ⚠ решение владельца принято 05.09, но КОД ещё не тронут, работа заведена строкой 291). ⚠ **Новый порог ВЫВЕДЕН, НЕ ЗАМЕРЕН** — отчёт пака называет это честно (`backend/docs/MONEYSTOP_REPORT.md` §9: цена защёлки не замерена, числа проекции с фактом не сверены). Замер стоит одного $0.15-прогона пятиглавой книги и передан полигону. ⚠ **Испр. 10.09: платформенная половина (потолок ДЕНЬГАМИ, D39.196) ПОСТРОЕНА, и прежний отрицательный замер здесь протух.** Та же команда сегодня: `git grep -lE "StepMax|step_max" -- platform/` → **20 файлов** (контроль: несуществующий токен — 0; файлов под `platform/` в индексе — 339), среди них боевые `platform/internal/pricing/pricing.go` (греп `func (m Model) Hold`), `platform/internal/ingest/manifest.go`, `platform/internal/pgstore/books.go`. Холд считается ИМЕННО на этих числах. ⚠ Строка **63** этого же файла предупредила об этом ещё 07.09 («вторая пережила лендинг `81a89e9`»), а фраза стояла — то есть предупреждение в доке само по себе не чинит дока. +⇒ **Честное состояние на 05.09:** движок больше НЕ требует, чтобы вся волна умещалась в потолок; короткая книга идёт по одному вызову. Остаточный пол — ОДНА резервация (`step_max_usd` ≈ $0.07 ⇒ ~3 главы по ставке $0.03; до ИСПОЛНЕНИЯ `D39.204` удвоение на ретрае поднимает это до ~5 — ⚠ решение владельца принято 05.09, но КОД ещё не тронут, работа заведена строкой 291; ⚠ испр. 15.09: по «Эррате 15.09-а» исполнение превращает отказ на ретрае в штатную остановку с меткой позиции и недостачей, а не во флаг с отгрузкой, — поэтому «до исполнения» больше не значит «после исполнения пол ниже»: снимается невидимость оплаченной половины работы, а не сам пол). ⚠ **Новый порог ВЫВЕДЕН, НЕ ЗАМЕРЕН** — отчёт пака называет это честно (`backend/docs/MONEYSTOP_REPORT.md` §9: цена защёлки не замерена, числа проекции с фактом не сверены). Замер стоит одного $0.15-прогона пятиглавой книги и передан полигону. ⚠ **Испр. 10.09: платформенная половина (потолок ДЕНЬГАМИ, D39.196) ПОСТРОЕНА, и прежний отрицательный замер здесь протух.** Та же команда сегодня: `git grep -lE "StepMax|step_max" -- platform/` → **20 файлов** (контроль: несуществующий токен — 0; файлов под `platform/` в индексе — 339), среди них боевые `platform/internal/pricing/pricing.go` (греп `func (m Model) Hold`), `platform/internal/ingest/manifest.go`, `platform/internal/pgstore/books.go`. Холд считается ИМЕННО на этих числах. ⚠ Строка **63** этого же файла предупредила об этом ещё 07.09 («вторая пережила лендинг `81a89e9`»), а фраза стояла — то есть предупреждение в доке само по себе не чинит дока. ⚠ **Класс ошибки, ради которого эррата написана так подробно: оркестратор заленджил пак, чей промт заказывал снятие этой стены, принял его — и в тот же час предупредил владельца о стене как о действующей, читая ЭТОТ абзац.** Канон, не обновлённый лендингом, врёт громче, чем отсутствующий. **ЧИСЛА, В КОТОРЫХ ЧТЕНИЯ РАСХОДИЛИСЬ (ДО-ПАКОВАЯ АРХЕОЛОГИЯ) — и оба верны на своём числе воркеров.** Зона платформы: стена diff --git a/docs/orchestrator-norms-scratchpad.md b/docs/orchestrator-norms-scratchpad.md index 8700c16d..6346662a 100644 --- a/docs/orchestrator-norms-scratchpad.md +++ b/docs/orchestrator-norms-scratchpad.md @@ -58,7 +58,7 @@ | Зона | Промт | Сессия | Состояние | |---|---|---|---| -| бэкенд | `BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md` | **textmachine-b1** | ✅ **ВЫДАН 11.09** после опровергателя (21 утверждение проверено, 4 опровергнуто, 4 умолчания дописаны); жду эхо | +| бэкенд | `BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md` | ~~textmachine-b1~~ → свежая | ⛔ **СЕССИЯ b1 ПОТЕРЯНА 15.09** при переезде окружения (`textmachine-main-b1` — пустая сессия владельца, НЕ b1). Пак не завершён: круги не сошлись, нет «Чисел», таблицы мутаций, строки завершения. Сдача — в индексе main (sha `git diff --cached --binary` = `166997963c95…`), бэкап `~/tm-b1-orphan-index.patch`, копия только для чтения `~/tm-b1-orphan`; гейт на копии зелёный (19 ok · 0 FAIL · lint 0 · 9 скипов · 23/23). Передача — разделом ред. 5 того же промта; опровергатель к нему сошёлся за три круга (21 → 3 мажора → 0 мажоров, шесть миноров последнего внесены); выдан 15.09 сессии `textmachine-main-b1` словом владельца «выдай ему», confirm по слову 11.09 получен (эррата 15.09-а); жду эхо | | платформа | — | — | 🟢 **СЛОТ СВОБОДЕН** — пак принят актом `D39.250`, минор 0.15.0 | | полигон | — | — | ⛔ **ЗАКАЗ СНЯТ ВЛАДЕЛЬЦЕМ 11.09** («полигон не надо выдавать»); промт готов и лежит, пере-выдача — только его словом | | сквозной (вне кодовых зон) | — | — | ✅ **ЗАКРЫТ актом `D39.252`** 11.09; промт в архиве с баннером. Стенд поднят до конца приёмки, гасить по pid | @@ -102,8 +102,9 @@ UNKNOWN 1 — её, дошёл один раз до правок; десять | 6 | ~~полигон~~ | ремонт прибора | — | — | ⛔ **СНЯТ: зона вне скоупа словом владельца**, промт в архиве | | 7 | платформа | ответ, не зависящий от везения (`PD-448` · `162` · `466` · `139`) | textmachine-37 | ✅ своими словами, 3 опасности + возражение | ✅ закрыт актом `D39.250`, минор 0.15.0 | | 8 | бэкенд | за одну единицу платим дважды | textmachine-61 | ✅ своими словами, 4 возражения — и первое ПЕРЕВЕРНУЛО посылку пака | ✅ закрыт актом `D39.251` с дофиксом | -| 9 | бэкенд | купленное доставлено (ряд 291 + приложение 379) | textmachine-b1 | ждётся | выдан 11.09 | +| 9 | бэкенд | купленное доставлено (ряд 291 + приложение 379) | textmachine-b1 | — | ⛔ сессия ПОТЕРЯНА 15.09 при переезде окружения, пак не завершён → строка 11 | | 10 | сквозной | ХОЛОДНЫЙ ПРОГОН B, платный, с вычиткой всего текста | textmachine-82 | ✅ своими словами, 5 опасностей — три исправили промт | ✅ **ПРИНЯТ актом `D39.252`**, факт $0.396657 | +| 11 | бэкенд | ДОВОДКА пака 9 после потери сессии — раздел ПЕРЕДАЧИ ред. 5 того же промта | textmachine-main-b1 | ждётся | выдан 15.09 после трёх кругов опровергателя (21 → 3 мажора → 0) и confirm владельца | ⛔ **ПОЛИГОН СНЯТ ВЛАДЕЛЬЦЕМ 11.09.** Я предлагал пак трижды — `ed`, `5c` (обе отработавшие, отказались ПО НОРМЕ и были правы) и свежей `37`, — после чего владелец сказал «полигон не надо выдавать». Выдача `37` ОТОЗВАНА тем же часом. ⚠ Урок не про полигон: **я трижды искал адресата для заказа, приоритет которого не подтверждал у владельца.** Слот зоны свободен ≠ работу зоны надо заказывать.