Take the third outside pass: a rider ordering work already finished is gone, the cheapest gate now leads the pack instead of trailing it, and an instruction that would have broken the contract is withdrawn
This commit is contained in:
parent
36c737cdf3
commit
8ff6b5a40b
2 changed files with 68 additions and 63 deletions
|
|
@ -48,48 +48,7 @@
|
|||
|
||||
## 4. Состав — что делать РОВНО так и что решаешь сам
|
||||
|
||||
**(1) ДЕЛАЙ РОВНО ТАК — отказ резерва перестаёт гасить допущенное.** Отступление = пинг.
|
||||
· Отказ **защёлкивается на уровне ВОЛНЫ**: кормилец перестаёт раздавать индексы по первому
|
||||
`ReserveDeniedBook`. Без защёлки W воркеров дадут W путей ошибки вместо одной остановки.
|
||||
· Уже допущенные вызовы **дорабатываются**. `cancel()` по деньгам не зовётся.
|
||||
· При непустом полёте отказ **не окончателен**: ждать settle (settle ≤ оценки, значит запас растёт) и
|
||||
повторить тот же резерв. Отказ при пустом полёте — стоп.
|
||||
· Завершение **штатное**, с леджером сделанного и отложенного. Exit 4 и `paused` остаются: семантика
|
||||
«деньги кончились, резюмируемо» верна.
|
||||
|
||||
**(2) ДЕЛАЙ РОВНО ТАК — «сколько не хватило» доезжает наружу.** Число у тебя уже есть и печатается
|
||||
(`denied estimate=$…`), но умирает в stderr транзиентного юнита. Оно обязано ехать в событие `ceiling`
|
||||
отдельным полем. ⚠ Наружу — только НЕДОСТАЮЩАЯ сумма; цены моделей, стадий и вызовов не выходят.
|
||||
|
||||
**(3) ДЕЛАЙ РОВНО ТАК — проекция цены в `manifest --json` и `status --json`.** По ЮНИТУ: `source_chars`
|
||||
(руны ингестированного текста, включая пробелы), раздельно плотные/разреженные знаки, `expected_usd`;
|
||||
по КНИГЕ: `book_once_usd` (книжное слагаемое — терминология тратится на книгу, не на юнит) и
|
||||
`step_max_usd` (самый крупный неделимый резерв). Считается из СВОИХ цен и фертильности, **без константы
|
||||
за главу**. Плюс `structure: detected|declared|none` — признак доверия к нарезке. Всё аддитивно, версию
|
||||
манифеста НЕ двигает.
|
||||
⚠ **РЕШАЕШЬ САМ И АРГУМЕНТИРУЕШЬ (промт форму НЕ задаёт):** как считается `expected_usd` — по
|
||||
отрендеренному промпту с инъекциями или по сырому тексту, какие стадии входят, учитывать ли ретраи и
|
||||
эскалации; по какому признаку выставляется `structure: detected|declared|none`; какую форму имеет
|
||||
леджер сделанного и отложенного в `finished`. Каждый выбор — с доводом в отчёте.
|
||||
|
||||
**(4) РЕШАЕШЬ САМ И АРГУМЕНТИРУЕШЬ:** форма защёлки; где именно ждать settle; как назвать поля;
|
||||
сеттлить ли оценкой поздно отменённый вызов и по какому различителю (латентность — кандидат, порог
|
||||
обязан быть обоснован ЗАМЕРОМ, а не назначен).
|
||||
|
||||
**(5) НЕ ДЕЛАЙ:** не убирай резервацию — она единственная гарантия «не потратим больше, чем дано»;
|
||||
не резервируй «ожидаемое» вместо worst-case; не ужимай `max_tokens` под остаток (двигает `request_hash`
|
||||
⇒ снапшот и детерминизм, и даёт `finish=length` ценой целой генерации); не трогай кумулятивную
|
||||
семантику `--ceiling-usd`; не двигай `manifestVersion`, схему и контракт. ⚠ **`StreamVersion` — ИСКЛЮЧЕНИЕ и его двигать НАДО:** добавление поля в кадр — минорный бамп по правилу шва (`internal/runevents/runevents.go`, греп `IT WAS ALMOST NOT BUMPED` — там записана ровно эта ловушка). Прежняя редакция промта запрещала бамп и заказывала поле одновременно; противоречие снято 05.09.
|
||||
|
||||
## 4-бис. ДВА РАЙДЕРА — и вот почему они здесь, а не в другом паке
|
||||
|
||||
⚠ **Честно о происхождении состава:** пункты 1–3 выше выведены из денежного разбора, а не из свежего
|
||||
прочтения бэклога. Владелец поймал это вопросом «взял по инерции или вычитал?». Пере-проверка
|
||||
бэклога (42 движковые строки со статусом «скоро») дала ДВА хвоста, которые по цене ошибки идут не
|
||||
позже денежного стопа, и оба дёшевы. Они входят в пак райдерами, а не отдельным паком, потому что
|
||||
каждый — одно касание, а собирать под них третью сессию дороже, чем сделать здесь.
|
||||
|
||||
**(Р1) ДЕЛАЙ РОВНО ТАК — строка 271: правки банка пользователя едут в SYSTEM-сообщение ДОСЛОВНО.**
|
||||
**(1) ДЕЛАЙ РОВНО ТАК — ПЕРВЫМ, строка 271: правки банка пользователя едут в SYSTEM-сообщение ДОСЛОВНО.**
|
||||
Тело собирается конкатенацией `src + " → " + dst`, `dst` приходит с пользовательской двери и получает
|
||||
ровно один `TrimSpace`; предела длины нет, управляющие символы не запрещены. ⇒ `dst` с переводами
|
||||
строки дописывает свои строки внутрь системного блока КАЖДОГО платного вызова. ⚠ Ратифицированный инвариант проекта (**D25**, фактура — `docs/research/17-external-critique.md` §A10.2) требует, чтобы текст
|
||||
|
|
@ -101,17 +60,57 @@
|
|||
запрета управляющих обязано краснеть. Без этих двух пункт не сдан.
|
||||
⚠ Это обязано быть закрыто ДО того, как внутрь пустят первого внешнего человека, — а платформенный
|
||||
пак, который его пускает, идёт ПАРАЛЛЕЛЬНО твоему.
|
||||
⚠ **ПОЧЕМУ ПЕРВЫМ, а не райдером:** это ЕДИНСТВЕННЫЙ пункт пака, который реально гейтит «можно ли пускать человека», и он
|
||||
дешевле остальных. В первой редакции он стоял четвёртым, райдером после трёх денежных пунктов — след того, что состав
|
||||
вырос из денежного разбора, а не из чтения бэклога. Порядок исправлен 05.09; сессия читает первым то, что первым и надо.
|
||||
|
||||
**(Р2) ДЕЛАЙ РОВНО ТАК — строка 251: банковый контур требует артефакта, которого в git нет.**
|
||||
`mining.contrast_path` — единственный вход контура; артефакт крупный, генерируется из jieba, в
|
||||
репозитории его нет и быть не должно. Три гарда добавлены прошлым паком, но **развёртывание обязано
|
||||
положить файл рядом с конфигом ПЕРЕД выкаткой**, и сегодня об этом не сказано там, где читает
|
||||
оператор. ⚠ **ПРОВЕРЬ ПЕРВЫМ ДЕЛОМ, СДЕЛАНО ЛИ УЖЕ:** блок «⛔ РАЗВЁРТЫВАНИЕ: `mining.contrast_path`» стоит в
|
||||
`backend/configs/pipeline-c1.yaml` (греп `РАЗВЁРТЫВАНИЕ`), то есть движковая половина, возможно, ЗАКРЫТА. Если да — скажи
|
||||
это в отчёте и НЕ делай заново; твоя работа тогда сводится к тому, чтобы отказ загрузки НАЗЫВАЛ рецепт, а не только путь.
|
||||
⚠ Операторская половина (рантбук деплоя обязан положить артефакт ПЕРЕД выкаткой) — в `platform/deploy/README.md`, и её
|
||||
сегодня НЕТ (`grep -c contrast platform/deploy/README.md` → 0). Она заказана платформенному паку; если к твоему отчёту её
|
||||
там всё ещё нет — назови это незакрытой дырой, а не чужой зоной.
|
||||
**(2) ДЕЛАЙ РОВНО ТАК — отказ резерва перестаёт гасить допущенное.** Отступление = пинг.
|
||||
· Отказ **защёлкивается на уровне ВОЛНЫ**: кормилец перестаёт раздавать индексы по первому
|
||||
`ReserveDeniedBook`. Без защёлки W воркеров дадут W путей ошибки вместо одной остановки.
|
||||
· Уже допущенные вызовы **дорабатываются**. `cancel()` по деньгам не зовётся.
|
||||
· При непустом полёте отказ **не окончателен**: ждать settle (settle ≤ оценки, значит запас растёт) и
|
||||
повторить тот же резерв. Отказ при пустом полёте — стоп.
|
||||
· Завершение **штатное**, с леджером сделанного и отложенного. Exit 4 и `paused` остаются: семантика
|
||||
«деньги кончились, резюмируемо» верна.
|
||||
|
||||
**(3) ДЕЛАЙ РОВНО ТАК — «сколько не хватило» доезжает наружу.** Число у тебя уже есть и печатается
|
||||
(`denied estimate=$…`), но умирает в stderr транзиентного юнита. Оно обязано ехать в событие `ceiling`
|
||||
отдельным полем. ⚠ Наружу — только НЕДОСТАЮЩАЯ сумма; цены моделей, стадий и вызовов не выходят.
|
||||
|
||||
**(4) ДЕЛАЙ РОВНО ТАК — проекция цены в `manifest --json` и `status --json`.** По ЮНИТУ: `source_chars`
|
||||
(руны ингестированного текста, включая пробелы), раздельно плотные/разреженные знаки, `expected_usd`;
|
||||
по КНИГЕ: `book_once_usd` (книжное слагаемое — терминология тратится на книгу, не на юнит) и
|
||||
`step_max_usd` (самый крупный неделимый резерв). Считается из СВОИХ цен и фертильности, **без константы
|
||||
за главу**. Плюс `structure: detected|declared|none` — признак доверия к нарезке. Всё аддитивно, версию
|
||||
манифеста НЕ двигает.
|
||||
⚠ **РЕШАЕШЬ САМ И АРГУМЕНТИРУЕШЬ (промт форму НЕ задаёт):** как считается `expected_usd` — по
|
||||
отрендеренному промпту с инъекциями или по сырому тексту, какие стадии входят, учитывать ли ретраи и
|
||||
эскалации; по какому признаку выставляется `structure: detected|declared|none`; какую форму имеет
|
||||
леджер сделанного и отложенного в `finished`. Каждый выбор — с доводом в отчёте.
|
||||
|
||||
**(5) РЕШАЕШЬ САМ И АРГУМЕНТИРУЕШЬ:** форма защёлки; где именно ждать settle; как назвать поля;
|
||||
сеттлить ли оценкой поздно отменённый вызов и по какому различителю (латентность — кандидат, порог
|
||||
обязан быть обоснован ЗАМЕРОМ, а не назначен).
|
||||
|
||||
**(6) НЕ ДЕЛАЙ:** не убирай резервацию — она единственная гарантия «не потратим больше, чем дано»;
|
||||
не резервируй «ожидаемое» вместо worst-case; не ужимай `max_tokens` под остаток (двигает `request_hash`
|
||||
⇒ снапшот и детерминизм, и даёт `finish=length` ценой целой генерации); не трогай кумулятивную
|
||||
семантику `--ceiling-usd`; не двигай `manifestVersion`, схему и контракт. ⚠ **`StreamVersion` — ИСКЛЮЧЕНИЕ и его двигать НАДО:** добавление поля в кадр — минорный бамп по правилу шва (`internal/runevents/runevents.go`, греп `IT WAS ALMOST NOT BUMPED` — там записана ровно эта ловушка). Прежняя редакция промта запрещала бамп и заказывала поле одновременно; противоречие снято 05.09.
|
||||
|
||||
## 4-бис. ЧЕСТНО О ПРОИСХОЖДЕНИИ СОСТАВА И ЧТО В ПАК НЕ ВОШЛО
|
||||
|
||||
⚠ **Честно о происхождении состава:** пункты 1–3 выше выведены из денежного разбора, а не из свежего
|
||||
прочтения бэклога. Владелец поймал это вопросом «взял по инерции или вычитал?». Пере-проверка
|
||||
бэклога (42 движковые строки со статусом «скоро») дала ДВА хвоста, которые по цене ошибки идут не
|
||||
позже денежного стопа, и оба дёшевы. Они входят в пак райдерами, а не отдельным паком, потому что
|
||||
каждый — одно касание, а собирать под них третью сессию дороже, чем сделать здесь.
|
||||
|
||||
⛔ **РАЙДЕР Р2 (строка 251, артефакт контура) СНЯТ С ПАКА 05.09 — движковая половина УЖЕ СДЕЛАНА.**
|
||||
`backend/internal/config/pipeline.go`, греп `CheckMiningContrast`: при включённом гейте терминологии и заданном
|
||||
`contrast_path` недоступный файл даёт ОТКАЗ ЗАГРУЗКИ, и текст отказа называет путь, говорит «deployment-provided and NOT
|
||||
in git» и последствие. Непокрыто только «откуда взять артефакт» — это ОПЕРАТОРСКИЙ текст рантбука, и он заказан
|
||||
платформенному паку. ⚠ Прежняя редакция велела тебе «проверить первым делом, сделано ли уже» — это была моя работа до
|
||||
выдачи, а не твоя после.
|
||||
|
||||
⚠ **Строки 198 и 254 — БЕСХОЗНЫ, и это надо знать обеим сторонам:** 198 (апгрейд движка стирает замечания читателя) и
|
||||
**254 (пустой файл ⇒ интейк УНИЧТОЖАЕТ загрузку — потеря пользовательских данных на первом же шаге)** требуют согласования
|
||||
|
|
@ -120,7 +119,7 @@
|
|||
СВОЙ пак и своё окно пере-снапшота; строки 253/273 — швы, требующие согласования с платформой;
|
||||
256–267 — то, что зона чинит прямо сейчас в незакрытой приёмке прошлого пака.
|
||||
|
||||
## 5. Пять рисков реализации — названы зоной, проверить ОБЯЗАН
|
||||
## 4-тер. Пять рисков реализации — названы зоной, проверить ОБЯЗАН
|
||||
|
||||
(а) защёлка на уровне волны, не у воркера · (б) учёт объёма (`volume.go`, `bound()`/`reconcile`): частичная
|
||||
волна под потолком — НОВАЯ форма для этих счётчиков, и они уже дважды ловили ложные числа · (в) событие
|
||||
|
|
@ -128,7 +127,7 @@
|
|||
книжным — проверить явно · (д) эскалационный хоп: убедиться, что его деградация не опирается на саму отмену.
|
||||
⚠ **Каждый из пяти предъявляется ЯВНО:** в отчёте — команда и её вывод либо посадка и её цвет. «Проверил» без артефакта не считается: это ровно та вырожденная форма, которую канон велит ловить в промтах.
|
||||
|
||||
## 6. Мандат самопроверки ИСПОЛНЕНИЕМ
|
||||
## 5. Мандат самопроверки ИСПОЛНЕНИЕМ
|
||||
|
||||
Батарея + **собственные адверсариальные посадки ВНЕ списка автора** через `cmd/tmmutate` (каталог 152
|
||||
записи — пополняешь). **Субагенты РАЗРЕШЕНЫ явно**, модель называй имени. Обязательное условие приёмки:
|
||||
|
|
@ -139,7 +138,7 @@
|
|||
⚠ Мутации — только на ЗАКОММИЧЕННОМ дереве; на копии — `GOFLAGS=-buildvcs=false`.
|
||||
⚠ Каталог гонять ЦЕЛИКОМ: протухшая запись даёт `ROTTED` и не кладёт прогон.
|
||||
|
||||
## 6-бис. Предметные оси ревью — ТРИ, и у каждой свой артефакт
|
||||
## 6. Предметные оси ревью — ТРИ, и у каждой свой артефакт
|
||||
|
||||
⚠ Оси, а не список проверок: у каждой названо, ЧЕМ ты предъявишь результат. Сессия вправе заменить ось с аргументом.
|
||||
⛔ **ВСЕ ТРИ ПРЕДЪЯВЛЯЮТСЯ ЗА $0** — на фейк-клиенте батареи и голдене. **Платный прогон в этот пак НЕ входит**: он идёт
|
||||
|
|
@ -151,7 +150,7 @@
|
|||
· **Шов наружу.** Артефакт: событие `ceiling` с недостающей суммой, прочитанное СО СТОРОНЫ ПОТРЕБИТЕЛЯ
|
||||
(не из своего кода), и версия потока, сдвинутая по правилу шва.
|
||||
|
||||
## 6-тер. ОБЯЗАТЕЛЬНОЕ ДЛЯ КОДОВОГО ПРОМТА — пять строк канона
|
||||
## 6-бис. ОБЯЗАТЕЛЬНОЕ ДЛЯ КОДОВОГО ПРОМТА — пять строк канона
|
||||
|
||||
· **Перед отчётом сверь КАЖДЫЙ клейм с результатом инструмента ЭТОЙ сессии.** Не с памятью и не с тем,
|
||||
что было верно вчера.
|
||||
|
|
|
|||
|
|
@ -80,12 +80,15 @@ system-промпт дословно) — внешнего пользовате
|
|||
читалке.
|
||||
|
||||
**(5) ДЕЛАЙ РОВНО ТАК — СНЯТЬ ЛОЖНУЮ ПОДПИСЬ «ЗНАКОВ».** Счётчик считает руны ПОТОКА ЗАПИСИ файла: для
|
||||
UTF-8 txt это и есть знаки, для EPUB — руны zip-архива, для GB18030/UTF-16 приближение. **ДЕЛАЙ РОВНО ТАК — законная внутризонная форма ОДНА: не отдавай число там, где оно неточно.**
|
||||
`character_count` уже опционально (`*int64` у тебя, `character_count?` у фронта), значит зона вправе
|
||||
ПРОСТО НЕ ЗАПОЛНЯТЬ его для входов, где счёт лжёт (EPUB — руны zip; GB18030 и UTF-16 — приближение), и
|
||||
оставить для UTF-8 txt, где он и есть число знаков. Это не трогает контракт: поле остаётся, меняется
|
||||
только то, когда оно есть.
|
||||
⛔ **Переименовывать или снимать поле НЕ надо** — это правка контракта, которую §2 запрещает твоей рукой.
|
||||
UTF-8 txt это и есть знаки, для EPUB — руны zip-архива, для GB18030/UTF-16 приближение. ⛔ **ПРЕЖНЯЯ РЕДАКЦИЯ ЭТОГО ПУНКТА БЫЛА НЕВЕРНА И ОТОЗВАНА 05.09.** Она велела «просто не заполнять
|
||||
поле там, где счёт лжёт». Так нельзя: в каноне `character_count` стоит в `required`, тип
|
||||
`[integer, 'null']`, и `null` уже НЕСЁТ СМЫСЛ — «книга ещё загружается». Платформа `null` не шлёт
|
||||
никогда, а фронт проверяет `=== undefined` и на `null` нарисует «0». ⇒ «не заполнять» ломает и смысл
|
||||
контракта, и потребителя.
|
||||
**ДЕЛАЙ РОВНО ТАК: вынеси состав минора в ОТЧЁТ** — либо признак точности рядом с числом, либо смена
|
||||
семантики `null`. Канон правит оркестратор; своей рукой поле не трогай (§2). ⚠ Внутри зоны законно и
|
||||
нужно другое: назвать в своём журнале, ЧТО именно считает счётчик, чтобы следующий не принял руны zip
|
||||
за знаки.
|
||||
⛔ **Ветку «взять число из манифеста движка» в ЭТОМ паке НЕ бери:** сегодня манифест несёт только
|
||||
`source_bytes`, а знаки по юниту появятся ТОЛЬКО после движкового пака (его строка 278). Зависимость
|
||||
названа, чтобы ты не начала с невозможного.
|
||||
|
|
@ -96,7 +99,10 @@ UTF-8 txt это и есть знаки, для EPUB — руны zip-архив
|
|||
**(6) ДЕЛАЙ РОВНО ТАК — РАЗВЁРТЫВАНИЕ БАНКОВОГО КОНТУРА В РАНТБУКЕ.** `mining.contrast_path` —
|
||||
единственный вход контура; артефакт крупный, генерируется из jieba, в git его нет и быть не должно, а
|
||||
**рантбук о нём молчит** (`grep -c contrast platform/deploy/README.md` → 0). ⇒ Первая выкатка после
|
||||
лендинга поднимет инстанс, у которого банковый контур не исполняется вовсе. Рантбук обязан сказать:
|
||||
лендинга даст инстанс, который **ОТКАЖЕТ КАЖДОМУ ПРОГОНУ**: движок проверяет файл при загрузке конфига
|
||||
и отказывает по имени пути (`backend/internal/config/pipeline.go`, греп `CheckMiningContrast`) — это не
|
||||
«контур не работает», это конфиг не загружается. ⚠ Прежняя редакция промта описывала симптом мягче и
|
||||
была неверна; исправлено 05.09 — два промта одной ночи описывали одну выкатку по-разному. Рантбук обязан сказать:
|
||||
положить артефакт рядом с конфигом ПЕРЕД выкаткой, откуда его взять, и чем проверить. ⚠ Движковая
|
||||
половина (отказ загрузки называет путь) уже стоит в `backend/configs/pipeline-c1.yaml` — не дублируй,
|
||||
сошлись.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue