Rewrite the cold run pack after thirteen majors: size the English slice by tokens, add the seven stop rules, one stand for two books, and correct a blind zone closed a month ago
This commit is contained in:
parent
0108cada05
commit
6dcd69f38b
1 changed files with 272 additions and 203 deletions
|
|
@ -4,286 +4,349 @@
|
|||
> «траты я ратифицирую, тратьте сколько нужно, сейчас на дипсике 4 доллара вам должно хватить. Тратьте,
|
||||
> главное полученный прослеженный результат».
|
||||
>
|
||||
> ⛔ **СТАРТ ГЕЙЧЕН.** Прогон не начинается, пока оркестратор не ратифицирует готовность обеих зон АКТОМ.
|
||||
> Ты можешь и должна делать всё, что до первого цента: подъём, дым по заглушке, фриз, мониторинги. Первый
|
||||
> платный вызов — только по моему явному слову.
|
||||
> ⛔ **СТАРТ ГЕЙЧЕН АКТОМ ГОТОВНОСТИ.** Делай всё, что до первого цента: подъём, дым по заглушке, фриз,
|
||||
> мониторинги, пре-регистрация. Первый платный вызов — только по моему явному слову.
|
||||
>
|
||||
> ⚠ **Редакция 2.** Первая переписана после опровергателя: **тринадцать мажоров**, из них бюджет, который
|
||||
> не сходился вдвое, отсутствующий список стоп-правил и протухшая слепая зона. Числа помечены прибором.
|
||||
|
||||
---
|
||||
|
||||
## 1. Какая проблема и что решит твой результат
|
||||
|
||||
Проект переводит книги мультиагентным LLM-пайплайном: платформа принимает книгу и продаёт прогон, движок
|
||||
переводит, дверь выгрузки отдаёт файл. Сквозной путь пройден дважды — прогоны A и B, обе китайские книги по
|
||||
три главы. **Ни разу не проверены три вещи:** книга ДЛИННЕЕ трёх глав, ВТОРАЯ языковая пара, и ДВА прогона
|
||||
одновременно.
|
||||
Платформа принимает книгу и продаёт прогон, движок переводит, дверь выгрузки отдаёт файл. Сквозной путь
|
||||
пройден дважды — прогоны A и B, обе китайские книги по три главы. **Ни разу не проверены три вещи:** книга
|
||||
длиннее трёх глав, ВТОРАЯ языковая пара, и ДВА прогона одновременно.
|
||||
|
||||
**Твой результат:** две книги — около 20 глав китайской «мастер гу» и книга Кристоффа сопоставимого объёма —
|
||||
проходят весь путь **через API платформы**, параллельно, и по итогу известно: что получилось, сколько
|
||||
стоило, где код повёл себя не так, и каково качество перевода на обеих парах.
|
||||
**Твой результат:** две книги — около 20 глав китайской «мастер гу» и срез книги Кристоффа **равного объёма
|
||||
в токенах** — проходят весь путь через API платформы, параллельно, и по итогу известно: что получилось,
|
||||
сколько стоило, где код повёл себя не так, и каково качество перевода на обеих парах.
|
||||
|
||||
⛔ **Слово владельца 18.09 про наблюдение, дословно:** «обозначь сессии чтоб она следила мониторингом за
|
||||
платформой и бэкендом чтоб смотрела на логи, события, метрики и так далее что выводится. И чтоб фиксировала
|
||||
проблемы и чтоб занесла это в отчет, пусть эта сессия холодного пака дергает все через апи платформы».
|
||||
⇒ **в отчёте должно быть сказано, ЧТО, ГДЕ и КАК в коде пошло не так** — с адресом, а не «были ошибки».
|
||||
⛔ **Слово владельца про наблюдение, дословно:** «обозначь сессии чтоб она следила мониторингом за платформой
|
||||
и бэкендом чтоб смотрела на логи, события, метрики и так далее что выводится. И чтоб фиксировала проблемы и
|
||||
чтоб занесла это в отчет, пусть эта сессия холодного пака дергает все через апи платформы». ⇒ **в отчёте
|
||||
должно быть сказано, ЧТО, ГДЕ и КАК в коде пошло не так** — с адресом, а не «были ошибки».
|
||||
|
||||
⚠ **Это не стресс-тест и не демонстрация.** Прогоны A и B ни разу не задели ни одного стоп-правила и ни
|
||||
одного потолка. На двадцати главах они, скорее всего, **выстрелят впервые** — и это и есть новое знание,
|
||||
ради которого прогон покупается. Сработавший стоп не есть провал прогона; необъяснённый сработавший стоп —
|
||||
есть.
|
||||
⚠ **Это не демонстрация.** Прогоны A и B не задели ни одного стоп-правила и ни одного потолка. На двадцати
|
||||
главах они, скорее всего, **выстрелят впервые**, и это новое знание, ради которого прогон покупается.
|
||||
**Сработавший стоп — купленное знание. Необъяснённый сработавший стоп — выброшенные деньги.**
|
||||
|
||||
---
|
||||
|
||||
## 2. Зона записи и git
|
||||
|
||||
**Твоя зона — твой рабочий каталог прогона и `docs/experiments/`.** Код `backend/` и `platform/` ты **НЕ
|
||||
правишь**: нашла дефект — фиксируешь с адресом и пингуешь оркестратора. Это жёстко: прогон, чинящий
|
||||
найденное на ходу, перестаёт быть прогоном и становится отладкой.
|
||||
правишь**: нашла дефект — фиксируешь с адресом и пингуешь. Прогон, чинящий найденное на ходу, перестаёт быть
|
||||
прогоном.
|
||||
|
||||
Коммитишь **только пре-рег фризы** — замороженный план замера ДО платных вызовов. Всё остальное лендит
|
||||
оркестратор.
|
||||
⚠ **Разрешение, снимающее противоречие первой редакции:** инструменты прежних прогонов (`eval/cold_run_b/`)
|
||||
ты берёшь **КОПИЕЙ в свой рабочий каталог** и правишь копию сколько нужно. Репозиторный `eval/` — зона
|
||||
полигона, его не трогай; свои улучшения назови в отчёте, лендить буду я.
|
||||
|
||||
⛔ **НИКОГДА не читай `.env` и `.env.*`** — там боевые ключи. Путь называть можно, содержимое нет.
|
||||
⚠ Живость ключей проверяется ПЕРВЫМ платным вызовом и ничем иным. Отказ по авторизации — стоп и мой поход
|
||||
к владельцу, не твоя попытка починить.
|
||||
Коммитишь **только пре-рег фризы** — замороженный план ДО платных вызовов.
|
||||
|
||||
⛔ **НИКОГДА не читай `.env` и `.env.*`.** Путь называть можно, содержимое нет. Живость ключей проверяется
|
||||
ПЕРВЫМ платным вызовом и ничем иным.
|
||||
|
||||
---
|
||||
|
||||
## 3. Карта чтения — пять позиций, и она ЗАКОН
|
||||
|
||||
1. `CLAUDE.md` — канон, цели, гардрейлы.
|
||||
2. `docs/experiments/24-door-to-file.md` — разбор прогона A. ⛔ **Читай §10 пп. 12–13 и §12 п. 5 как
|
||||
инструкцию, а не как историю:** там перечислены дефекты ЕГО СОБСТВЕННОГО прибора.
|
||||
1. `CLAUDE.md` — канон, цели, гардрейлы. Внутри него — ссылка на `docs/experiments/00-provider-quirks.md`,
|
||||
и её читать ОБЯЗАТЕЛЬНО перед первым платным вызовом.
|
||||
2. `docs/experiments/24-door-to-file.md` — разбор прогона A. ⛔ Читай §10 пп. 12–13 и §12 п. 5 **как
|
||||
инструкцию**: там перечислены дефекты его собственного прибора.
|
||||
3. `docs/experiments/25-door-to-file-b.md` — разбор прогона B.
|
||||
4. `eval/cold_run_b/door.py` — драйвер прогона B. **Это твоя основа**, см. §4.2.
|
||||
5. `platform/deploy/README.md` §«Дев-стенд» и §«Шаблон книги» — операторский рецепт.
|
||||
|
||||
⚠ `docs/experiments/00-provider-quirks.md` — ловушки провайдеров; читать ПЕРЕД первым платным вызовом.
|
||||
4. `eval/cold_run_b/` — драйвер `door.py` и прибор денег `measure.py`. **Это твоя основа.**
|
||||
5. `platform/deploy/README.md` — операторский рецепт: §«Дев-стенд», §«Шаблон книги», §«Артефакт контраста».
|
||||
|
||||
---
|
||||
|
||||
## 4. Работа
|
||||
|
||||
### 4.1 ⛔ ЧЕТЫРЕ ПРЕДСТАРТОВЫХ УСЛОВИЯ, каждое замерено мной и каждое сегодня НЕ выполнено
|
||||
### 4.1 ⛔ ШЕСТЬ ПРЕДСТАРТОВЫХ УСЛОВИЙ, каждое замерено, ни одно не выполнено само
|
||||
|
||||
**(1) Рабочие окружения обоих прежних стендов СЛОМАНЫ.** Замер 18.09: `/home/ubuntu-26` **не существует**
|
||||
(дом переименован), а `stand/env.sh` прогона A несёт одно упоминание этого пути, прогона B — пять. ⇒ все
|
||||
пути к бинарям, книгам, состоянию и ключам в них указывают в никуда. **Скопировать env.sh и запустить —
|
||||
первая грабля.** Пере-собери окружение, и КАЖДЫЙ путь проверь существованием, а не глазом.
|
||||
**(1) ВХОД ПАКА — АКТ ГОТОВНОСТИ, а не моё слово в переписке.** До него английская книга на боевом конфиге
|
||||
отказывала до первого цента. Пак, снимающий это, сдан и принимается сейчас; **английская рука не поднимается,
|
||||
пока я не пришлю номер акта.** Проверить сама: пишущим глаголом на заведённой английской книге, а не
|
||||
читающим — читающий проходит и тогда, когда пишущий отказывает.
|
||||
|
||||
**(2) ⛔ ДНЕВНОЙ ПОТОЛОК В ШАБЛОНЕ КНИГИ — САМАЯ ДОРОГАЯ МИНА ЭТОГО ПРОГОНА.** Шаблон прежнего стенда несёт
|
||||
`book_usd: 1.25` и `day_usd: 2.50` (строки 22–23). Арифметика: прогон A стоил $0.419424 за три главы ⇒
|
||||
≈$0.14 за главу ⇒ **двадцать глав ≈ $2.8**, что выше обоих. Книжный потолок платформа перебивает аргументом
|
||||
прогона. **Дневной — НЕ перебивается ничем.** А упершийся в него прогон встаёт в `paused`, и `resume`
|
||||
отвечает отказом: лечение — НОВЫЙ заказ, а не продолжение. Официальный операторский рецепт прямо велит
|
||||
дневной потолок в шаблон не класть (решение владельца 15.08). ⇒ **шаблон книги этого прогона обязан НЕ нести
|
||||
дневного потолка**, и это проверяется ДО интейка: платформа пишет конфиг книги ОДИН раз и больше его не
|
||||
читает.
|
||||
**(2) ⛔ АРТЕФАКТ КОНТРАСТА МАЙНИНГА — БЕЗ НЕГО ОТКАЗАН КАЖДЫЙ ПЕРЕВОД И КАЖДЫЙ РЕЗЮМ.** Инстанс поднимется
|
||||
здоровым, книги примет — и откажет на каждой работе классом конфигурации. Файл кладётся **рядом с конфигом
|
||||
пайплайна**, не с книгой. В git его нет; на машине он лежит в зеркалах прежних стендов. ⚠ Проверка делается
|
||||
**$0-глаголом и судится по СООБЩЕНИЮ, а не по коду выхода** — оба исхода дают один код. ⚠ И проверяющий
|
||||
глагол берёт эксклюзивную блокировку: на книге с идущим прогоном его запускать нельзя. ⚠ Сам гейт делает
|
||||
только `stat` и удовлетворился бы подделкой — sha сверяется руками.
|
||||
|
||||
**(2б) ⛔ ШАБЛОН КНИГИ НЕ НЕСЁТ ПАР-СВЯЗАННЫХ КЛЮЧЕЙ — условие найдено 18.09 запиской бэкенд-сессии, не мной.**
|
||||
Шаблон прежнего стенда кладёт в КАЖДУЮ книгу систему транскрипции («палладий» — систему для китайского) и
|
||||
род обращения. Пока движок принимал это свободной строкой, английская книга молча получала китайскую
|
||||
инструкцию. Пак готовности строит **громкий отказ** на имени политики, которого пара не знает, — и это
|
||||
правильно. ⇒ **но твой шаблон обязан этих ключей не нести вовсе**, иначе английская книга будет отказана
|
||||
на загрузке, и отказ будет верным.
|
||||
⚠ Почему это не блокер и не чужая зона: **шаблон книги есть артефакт ОПЕРАТОРА**, отдельный файл по
|
||||
абсолютному пути из переменной окружения (`platform/deploy/README.md:201` так и озаглавлен), платформа
|
||||
подставляет ровно пять ключей и схемы движка не знает (`platform/internal/books/render.go:189`), а в её
|
||||
зоне шаблонов нет ни одного (контроль: файлов yaml в `platform/deploy/` — 0). Шаблон создаёшь ты, вместе со
|
||||
стендом, и кладёшь в него ровно то, что нужно. Это тот же файл, в котором не должно быть дневного потолка.
|
||||
**(3) ⛔ ФАЙЛ КЛЮЧЕЙ ЛЕЖИТ НЕ ТАМ, ГДЕ ЕСТЕСТВЕННО ИСКАТЬ.** Замер 18.09: в рабочем дереве прогона
|
||||
(`textmachine-main/backend/`) файла `.env` **НЕТ** — есть только пример. Настоящий лежит в **СОСЕДНЕМ
|
||||
чекауте** `textmachine/backend/`. Прежние стенды это знали и несли путь явно. ⇒ подставишь свой — получишь на
|
||||
буте **только предупреждение**, демон объявит себя здоровым, книгу примет и **возьмёт холд денег**, а упадёт
|
||||
первый платный вызов, уже после резервирования. Проверка — существованием файла по названному пути.
|
||||
|
||||
**(3) Демон не стартует без объявленных пар.** Инстанс, принимающий загрузки без доступной пары, не
|
||||
поднимается вовсе. Для двух книг нужны **обе** пары. Проверяется ответом ручки возможностей, а не
|
||||
переменной окружения.
|
||||
**(4) ⛔ ШАБЛОН КНИГИ: чего в нём НЕ должно быть и что обязано остаться.** Шаблон есть **артефакт ОПЕРАТОРА**
|
||||
— отдельный файл по абсолютному пути из переменной окружения; платформа подставляет ровно пять ключей и схемы
|
||||
движка не знает. Ты создаёшь его сама, и в нём:
|
||||
- **НЕ должно быть дневного потолка.** Он **не перебивается ничем**, упершийся в него прогон встаёт, а
|
||||
продолжить его нельзя — только заказать заново. Официальный рецепт прямо велит его не класть;
|
||||
- **ОБЯЗАН быть книжный потолок** — валидатор требует хотя бы один из двух, иначе загрузка откажет;
|
||||
- **НЕ должно быть пар-связанных ключей** (система транскрипции, род обращения). Принятый пак строит
|
||||
**громкий отказ** на имени политики, которого пара не знает, и это правильно: он ловит ошибку оператора.
|
||||
Твой шаблон просто их не несёт.
|
||||
⚠ **И развилка, которую надо решить до интейка: шаблон ОДИН, а книги две и конфиги им нужны разные.** Либо
|
||||
правишь `book.yaml` каждой книги после интейка и до старта (платформа его больше не читает), либо доказываешь,
|
||||
что один шаблон обеим годится. Что бы ни выбрала — объяви девиацией и скажи, что именно правила.
|
||||
|
||||
**(4) Неверный путь к ключам провайдера даёт на буте только ПРЕДУПРЕЖДЕНИЕ.** Демон объявит себя здоровым,
|
||||
книгу примет и **возьмёт холд денег** — а упадёт первый платный вызов, уже после резервирования. ⇒ путь
|
||||
проверяется существованием файла, а не отсутствием ошибки в логе.
|
||||
**(5) Демон не стартует без объявленных пар, и формат — ловушка шелла.** Разделитель — «больше», а не дефис,
|
||||
и он же символ перенаправления: **значение обязано быть в кавычках**, иначе шелл создаст файл вместо
|
||||
переменной. Нужны обе пары. Проверяется ответом ручки возможностей, а не переменной.
|
||||
|
||||
⚠ **Пятое условие снято мною сегодня:** английский пакет промтов был НЕ закоммичен, и фриз-клон его бы не
|
||||
унёс. Теперь он в истории (8 файлов). Проверь это сама на своём фризе — `git ls-files`, а не `ls`.
|
||||
**(6) Базы прежних прогонов УДАЛЕНЫ, а окружения их стендов сломаны.** Каталоги стендов живы, но все пути в
|
||||
их файлах окружения указывают на домашний каталог, которого больше нет (переименован). Кластер базы данных
|
||||
жив. ⇒ окружение собираешь заново, и **каждый путь проверяешь существованием, а не глазом**.
|
||||
|
||||
### 4.2 Драйвер: бери прогон B, НЕ бери прогон A
|
||||
### 4.2 ⛔ ОДИН СТЕНД, ДВЕ КНИГИ — и это РОВНО ТАК
|
||||
|
||||
⛔ **РОВНО ТАК.** Разбор прогона A назвал четыре дефекта своего харнесса. **В драйвере A не починен ни
|
||||
один; в драйвере B починены три.** Замер: гейт бинарей у A судит три бинаря, у B — пять.
|
||||
Первая редакция говорила «две книги = два рабочих каталога», и под этим можно построить **два демона, две
|
||||
базы, два порта, две учётки** — и отчитаться «две книги прошли параллельно», не проверив ни очередь, ни общий
|
||||
леджер, ни конкуренцию за память, то есть ровно то, ради чего владелец заказывал параллель.
|
||||
|
||||
| дефект прибора A | в A | в B |
|
||||
|---|---|---|
|
||||
| ни одно HTTP-тело платного прогона не сохранено — печаталось на экран | **жив** | **починен**: каждый запрос и ответ пишется в файл ДО возврата вызывающему |
|
||||
| ложная живость: печатался максимум по попыткам, и во время второй число выглядело замершим | **жив** | **починен**: строка НА КАЖДУЮ попытку |
|
||||
| гейт фриза судит три бинаря из пяти — два инструмента собраны не из фриза и не проверены | **жив** | **починен**: все пять |
|
||||
| сборщик денег суммирует леджер по ВСЕМ учёткам сразу | **жив** | **починен**: фильтр по учётке плюс контроль «по всем» |
|
||||
**РОВНО ТАК: один демон, одна база, одна очередь, две книги.** Очередь тянет четыре задания одновременно —
|
||||
места хватает. Разделять можно и нужно **только состояние ДРАЙВЕРА** (его файл состояния и каталог улик);
|
||||
разделять стенд — нельзя.
|
||||
|
||||
⭐ И сохранение тел спасло прогон B от ЛОЖНОЙ находки: греп по ключам показал одно, а в сохранённом ТЕЛЕ
|
||||
⚠ **Учётка: одна или две — решаешь ты, но цену назови.** Две дают чистые леджеры, но убивают общий леджер как
|
||||
предмет наблюдения. Одна требует гранта не меньше суммы холдов. **Холд — не трата:** это ожидание, умноженное
|
||||
на коэффициент, плюс шаг и книжный бонд; два прогона держат два холда одновременно.
|
||||
|
||||
⛔ **И мина, которая на этом прогоне впервые достижима: при нехватке баланса старт НЕ отказывают.** Замер
|
||||
прогона B: ответ успешный, вердикт тот же, цена та же — но холд падает, а **консолидация терминов молча
|
||||
выключается**, то есть покупается урезанный продукт по той же цене. У A и B была одна книга и один холд;
|
||||
у тебя вторая книга стартует под уже висящим холдом первой. ⇒ это **стоп-правило**, см. §4.5.
|
||||
|
||||
### 4.3 Драйвер: бери прогон B, НЕ бери прогон A
|
||||
|
||||
Разбор прогона A назвал четыре дефекта своего харнесса. **В драйвере A не починен ни один; в драйвере B
|
||||
починены три** (сохранение всех HTTP-тел до возврата вызывающему · строка на КАЖДУЮ попытку вместо максимума ·
|
||||
гейт фриза на всех пяти бинарях вместо трёх). Четвёртый — счёт денег по всем учёткам сразу — починен в
|
||||
**приборе денег** `eval/cold_run_b/measure.py`.
|
||||
|
||||
⭐ И сохранение тел спасло прогон B от ЛОЖНОЙ находки: греп по ключам показал одно, а в сохранённом теле
|
||||
первым полем стояло другое. **«Грепу верила, файлу проверила.»**
|
||||
|
||||
**Но у драйвера B есть два дефекта, которых не назвал никто, и оба твои:**
|
||||
- ⛔ **он ОДНОКНИЖНЫЙ.** Рабочий каталог, файл состояния и каталог улик берутся из окружения без
|
||||
переопределения. **Две книги = два разных рабочих каталога**, иначе вторая перетрёт состояние первой и обе
|
||||
улики уедут в одну кучу. **РЕШИ САМА**, как разделить, но предъяви, что разделение работает, ДО первого
|
||||
цента;
|
||||
- ⛔ **разбивка движковых чисел по попыткам считается по ПОСЛЕДНЕМУ СИМВОЛУ идентификатора трассы**
|
||||
(`eval/cold_run_b/door.py:339`=`select substr(trace_id,-1)`). На попытке десять и дальше это уже не номер
|
||||
попытки. Предел попыток на прогон — двадцать, и на двадцатиглавой книге с паузами десять достижимы. ⇒
|
||||
**почини, прежде чем считать.** Различитель лежит в той же строке: номер попытки несёт сам идентификатор.
|
||||
⛔ **ДЕФЕКТ ДРАЙВЕРА B, КОТОРЫЙ ЧИНИТЬ ТЕБЕ — и лекарство лежит рядом.** Разбивка чисел по попыткам считается
|
||||
в драйвере по **последнему символу** идентификатора трассы (`eval/cold_run_b/door.py:339`). На попытке десять
|
||||
и дальше это уже не номер попытки, а предел попыток — двадцать. **Прибор денег это уже делает верно**
|
||||
(`eval/cold_run_b/measure.py:34`=`def attempt_of(row)`, и его докстрока прямо говорит, что номер НАЗВАН в
|
||||
строке). ⇒ возьми форму оттуда, а не изобретай. Правь **свою копию**, не репозиторий.
|
||||
|
||||
### 4.3 Два мониторинга — что именно наблюдать
|
||||
### 4.4 Два мониторинга — что наблюдать, и где прибор слеп
|
||||
|
||||
**РОВНО ТАК: наблюдение строится ДО старта, а не по ходу.** Требование владельца.
|
||||
**РОВНО ТАК: наблюдение строится ДО старта, а не по ходу.**
|
||||
|
||||
**Движок** (его база прогона и журнал процесса): строка на КАЖДЫЙ вызов с моделью, токенами, ценой,
|
||||
задержкой, причиной завершения; строка на (глава, чанк, стадия) с диспозицией и числом попыток; таблица
|
||||
трат — носитель обоих потолков; поток событий с семью типами кадров, где кадр потолка несёт **недостачу**, а
|
||||
финальный — деньги и объём. Плюс `tmctl status`/`report` — они читают базу ЖИВОГО прогона за $0.
|
||||
**Движок:** строка на каждый вызов (модель, токены, цена, задержка, причина завершения); строка на (глава,
|
||||
чанк, стадия) с диспозицией и числом попыток; таблица трат — носитель обоих потолков; поток событий с семью
|
||||
типами кадров, где кадр потолка несёт **недостачу**, а финальный — деньги и объём. Плюс читающие глаголы
|
||||
движка: они работают на живом прогоне за $0.
|
||||
|
||||
⛔ **КАК ЧИТАТЬ ЖИВУЮ БАЗУ.** Она в режиме журнала опережающей записи. Флаг «файл неизменен» на ЖИВОЙ базе
|
||||
**ставить НЕЛЬЗЯ**: он велит читателю игнорировать журнал, и тот молча получает устаревший снимок — ложный
|
||||
низкий ноль. На живой — только режим чтения; флаг неизменности — для КОПИЙ и законченных баз.
|
||||
**ставить НЕЛЬЗЯ**: он велит игнорировать журнал, и читатель молча получает устаревший снимок. На живой —
|
||||
только режим чтения; флаг неизменности — для копий и законченных баз.
|
||||
|
||||
**Платформа:** прогоны и их статусы с причиной паузы; **строка на каждую попытку** с накопленной тратой и
|
||||
кодом выхода; леджер кредитов; открытые холды; состояние юнитов; буфер событий, читаемый запросом без
|
||||
подписки; выгрузки. Плюс метрики (глубина очереди, живые прогоны, отставание чтения, застрявшие прогоны) и
|
||||
админ-команда списка прогонов — **это лучшая одноэкранная сводка для вахты на две книги**.
|
||||
**Платформа:** прогоны со статусом и причиной паузы; **строка на каждую попытку** с накопленной тратой;
|
||||
леджер кредитов; открытые холды; состояние юнитов; буфер событий, читаемый запросом без подписки; выгрузки.
|
||||
Плюс метрики и админ-команда списка прогонов — **лучшая одноэкранная сводка для вахты на две книги**.
|
||||
|
||||
**ОС, вне цепочки платформы:** маркеры выхода в каталоге состояния и состояние транзиентных юнитов. Это
|
||||
единственные по-настоящему НЕЗАВИСИМЫЕ свидетели: база платформы **материализуется** из потока событий
|
||||
движка, поэтому «платформа, диск и отчёт согласны» — это один свидетель, а не три.
|
||||
**ОС:** маркеры выхода и состояние транзиентных юнитов. Это единственные по-настоящему НЕЗАВИСИМЫЕ свидетели:
|
||||
база платформы **материализуется** из потока событий движка, поэтому «платформа, диск и отчёт согласны» —
|
||||
один свидетель, а не три.
|
||||
|
||||
⛔ **СЛЕПЫЕ ЗОНЫ — назови их в отчёте, даже если ничего не случится:**
|
||||
- **пустой ответ и обрыв по длине в телеметрии неразличимы** — оба приходят одной причиной завершения;
|
||||
различает только журнал процесса;
|
||||
- **поле ошибки пусто на ВСЕХ строках, включая провальные** — на двух прогонах 33 из 33 и 35 из 35. **Любой
|
||||
аудит отказов, написанный через это поле, прочтёт прогон как идеально чистый;**
|
||||
- **токены размышления не несли числа ни разу** за историю проекта;
|
||||
- **доли ответов классификатора банка не считает ни один счётчик**; итоговая строка стадии печатает ноль о
|
||||
другом проходе;
|
||||
- **биллинга провайдера у нас нет вовсе:** провайдер сообщает токены, доллары умножены нашим пином. Пин
|
||||
завышает примерно на шесть процентов, а пиковая цена против внепиковой даёт расхождение примерно вдвое. ⇒
|
||||
**любое число в долларах в отчёте называется «по нашему пину», а не «мы заплатили».**
|
||||
⛔ **СЛЕПЫЕ ЗОНЫ — назови в отчёте, даже если ничего не случится:**
|
||||
- **пустой ответ и обрыв по длине в телеметрии неразличимы**; различает только журнал процесса;
|
||||
- **поле ошибки пусто на ВСЕХ строках, включая провальные** — 33 из 33 и 35 из 35 на двух прогонах. Любой
|
||||
аудит отказов через это поле прочтёт прогон как идеально чистый;
|
||||
- **доли ответов классификатора банка не считает ни один счётчик**;
|
||||
- **биллинга провайдера у нас нет:** провайдер сообщает токены, доллары умножены нашим пином. ⇒ любое число
|
||||
в долларах называется «по нашему пину», а не «мы заплатили». ⚠ Поправка на завышение пина — величина
|
||||
ОДНОЙ смеси прогона A; на твою смесь она не переносится, назови популяцию.
|
||||
- ⚠ **А ВОТ ЭТО УЖЕ НЕ СЛЕПАЯ ЗОНА, и первая редакция врала:** размышление **измеримо** — прогон B закрыл
|
||||
это числом, колонка живёт в схеме и читается. ⇒ требуй ТРЁХЗНАЧНОГО отчёта (пусто / ноль / больше нуля)
|
||||
с контролем «сумма равна числу строк» на ОБЕИХ книгах. На английской это ещё и первый замер размышления
|
||||
на латинице.
|
||||
|
||||
⛔ **ОТДЕЛЬНО, и это ряд 502: упор в баланс ПРОВАЙДЕРА.** Транспорт классифицирует его верно — терминально,
|
||||
без пустых ретраев. Но типизированная ошибка не покидает пакет транспорта, и исхода, отличимого от обычного
|
||||
терминального падения стадии, у неё НЕТ. ⇒ **держи журнал процесса обеих книг под наблюдением и лови в нём
|
||||
код 402 и слова про исчерпанные средства.** Иначе упор в баланс провайдера будет прочитан как поломка движка
|
||||
на середине оплаченной книги. Событие не гипотетическое: на одной оси замеров проекта 44 записи об ошибке из
|
||||
52 — ровно такой отказ.
|
||||
⛔ **ОТДЕЛЬНО: упор в баланс ПРОВАЙДЕРА.** Принятый пак дал ему **имя для человека** — оно печатается
|
||||
в последней строке прогона и в записи об ошибке. **Программного исхода у него по-прежнему НЕТ**: словарь
|
||||
кадров — замороженный шов, и расширять его отдельное решение. ⇒ **держи журнал процесса обеих книг под
|
||||
наблюдением и лови в нём это имя.** Событие не гипотетическое: на одной оси замеров проекта 44 записи об
|
||||
ошибке из 52 — ровно такой отказ.
|
||||
|
||||
### 4.4 Улики, которые прогон уничтожает сам
|
||||
### 4.5 ⛔ СТОП-ПРАВИЛА — их семь, и без них можно потратить всё и быть построчно правым
|
||||
|
||||
Первая редакция не несла ни одного, а §13 требовал объяснить «каждое сработавшее». Это и есть «отчитаться,
|
||||
не сделав» на денежном пути.
|
||||
|
||||
1. **Суммарная трата двух книг достигла потолка, который я назову перед стартом** → СТОП и пинг. Не резать
|
||||
молча, не продолжать «чуть-чуть».
|
||||
2. **`term_consistency_funded: false` в ответе старта** → СТОП **ДО ОПЛАТЫ**. Это урезанный продукт по полной
|
||||
цене, и на двух холдах он достижим штатно.
|
||||
3. **Непустая причина паузы у любого прогона** → СТОП обеих книг, разбор, пинг. Причина называется, а не
|
||||
пере-запускается.
|
||||
4. **Срез не совпал с пре-регистрированным** (число глав, юнитов, чанков) → СТОП: прогон отвечает на другой
|
||||
вопрос.
|
||||
5. **Любой бинарь не из фриза** → СТОП. Три условия штампа, не одно.
|
||||
6. **Кто-то слушает порт локальной модели в платной фазе** → СТОП: провод может уйти не туда.
|
||||
7. **Имя исчерпания средств провайдера в журнале** → СТОП немедленно, пинг мне: дальше деньги не тратятся,
|
||||
а прогон стои́т наполовину купленным.
|
||||
|
||||
⚠ И правило про потолки: **их правка НЕ требует пере-фриза** — фриз-гейт смотрит на покупающий файл, а не на
|
||||
кассу. Не пере-фризь зря и не объявляй правку потолка девиацией.
|
||||
|
||||
### 4.6 Деньги: размер среза, две книги, и чего стоит смета
|
||||
|
||||
⛔ **«Сопоставимо по главам» — грубая ошибка, и первая редакция её несла.** Замер 18.09: китайская глава
|
||||
медианой **3 383 знака**, двадцать глав — **59 257 знаков ≈ 40 900 токенов**. Английская книга — 1.6 млн
|
||||
знаков на 126 документов, то есть её глава плотнее китайской **в семь с половиной раз**. Двадцать английских
|
||||
глав стоили бы впятеро дороже задуманного.
|
||||
|
||||
**РОВНО ТАК: английский срез задаётся ПО ТОКЕНАМ, равным двадцати китайским главам.** Замер: одиннадцать
|
||||
первых документов книги — **175 358 знаков ≈ 48 200 токенов**, перелёт **+17.9 %** против цели, и мельче
|
||||
нарезать нечем. ⚠ Проверь это своим прибором на манифесте движка, а не поверь моему счёту по тексту.
|
||||
|
||||
**Цена, двумя независимыми путями:**
|
||||
- китайская половина по факту прогона A — **≈$2.80** за 20 глав;
|
||||
- английская по собственной смете движка с поправкой на множитель «смета→факт» — **$1.44 … $3.59**.
|
||||
⇒ **итого $4.2 … $6.4** против ратифицированных $4. ⚠ Множитель ×4.99 снят на КИТАЙСКОЙ книге; английского
|
||||
множителя в проекте нет ни одного, и это перенос из чужой клетки — используй как порядок величины, не как
|
||||
прогноз.
|
||||
|
||||
⛔ **Отсюда механика, которая защищает нас от упора в провайдера:** книжные потолки обеих книг ставятся так,
|
||||
чтобы **их сумма была заведомо ниже остатка на счету**. Тогда при нехватке денег прогон встанет на НАШЕМ
|
||||
потолке — штатная остановка с понятной причиной, лечится пополнением и новым заказом, — а не упрётся в
|
||||
провайдера, у которого программного исхода нет. Числа потолков я назову перед стартом.
|
||||
|
||||
⚠ **Планируй прогон во ВНЕПИКОВОЕ окно провайдера.** Разница около двух раз на счёте; окна — в квирках,
|
||||
выходные целиком внепиковые. На бюджете в четыре доллара это половина.
|
||||
|
||||
**РОВНО ТАК:** деньги в отчёте — из сырого леджера **двумя независимыми путями**, и считаются по
|
||||
**уникальному ключу**, а не обходом файлов: свод обходом диска завышал трату **в 10.88 раза** на 449 базах.
|
||||
Рядом печатается, сколько файлов прибор обошёл и сколько из них копии.
|
||||
|
||||
**Денежные ловушки, на которых уже наступали:** накопленная трата попытки — величина НАКОПЛЕННАЯ, а не
|
||||
приращение (сумма по попыткам завысила на 38 %) · четверть денег прогона A купила пустоту, и лечение
|
||||
удвоением потолка сработало четыре раза из четырёх — **путь не рвётся, он дорожает** · согласие на
|
||||
пере-оплату выдаётся на весь бюджет прогона, разрыв с фактом был семьдесят восемь крат.
|
||||
|
||||
### 4.7 Оценка качества — два агента, и у каждого есть контроль
|
||||
|
||||
**РОВНО ТАК по форме:** по одному агенту на перевод, каждый получает **весь оригинал и весь перевод одной
|
||||
книги в одном запросе** плюс контекст репозитория. Отчёт различает три класса: ошибки смысла · ошибки
|
||||
консистентности · ошибки голоса и ритма.
|
||||
|
||||
⛔ **ТРИ ТРЕБОВАНИЯ, без которых §4.7 закрывается отчётом, которого никто не проверял:**
|
||||
- **доказательство дочитывания** — агент печатает число знаков оригинала и перевода и ПОСЛЕДНЕЕ предложение
|
||||
обоих. Не напечатал — отчёт не принимается. Так делал пре-рег прогона B, и это его узел;
|
||||
- **контрольная подмена (декой)** — в материал оценки вкладывается фрагмент заведомо испорченного перевода.
|
||||
Не нашёл — оценщик не различает качество, и его вердикт о хорошем ничего не стоит;
|
||||
- **адъюдикация числовых утверждений** — у прогона B **три числовых утверждения читателя из 26 оказались
|
||||
неверны**, тогда как цитаты были верны 10 из 10. ⇒ каждое ЧИСЛО агента пере-проверяется, цитаты можно на
|
||||
доверии.
|
||||
|
||||
⚠ **Асимметрия двух половин обязана быть пре-регистрирована ДО прогона, а не обнаружена после.** Если у
|
||||
английской книги какого-то механизма не будет (банк, заголовки, что-то ещё) — это записывается заранее как
|
||||
ОТСУТСТВИЕ МЕХАНИЗМА. Иначе оценщик припишет отсутствие консистентности переводу, паре или модели.
|
||||
⭐ И отдельный предмет для английского читателя: принятый пак довёз до модели **курсив** — около 4 842
|
||||
носителей, крупнейший класс которых есть ГОЛОС. **Цепь «исходник → маркер → чанк → экспорт» измерена, а
|
||||
поведение МОДЕЛИ на маркерах — нет.** Первую главу английского перевода прочитай глазами именно на это.
|
||||
|
||||
### 4.8 Улики, которые прогон уничтожает сам
|
||||
|
||||
Проекция банка перезаписывается атомарно в начале следующей попытки ⇒ предложения, на которых открывали
|
||||
экран подписи, выживают **только копией, снятой на стопе**. Замер прогона A: хеш файла до резюма и после —
|
||||
разные. Файл банк-стопа пишется НЕ атомарно, поэтому снимается только когда прогон стои́т.
|
||||
экран подписи, выживают **только копией, снятой на стопе**; хеши на прогоне A до и после резюма разные. Файл
|
||||
банк-стопа пишется не атомарно и снимается только когда прогон стои́т.
|
||||
⇒ **РОВНО ТАК:** снимай копии на каждой границе и печатай их хеши.
|
||||
|
||||
### 4.5 Деньги — что известно и на чём уже наступали
|
||||
### 4.9 Фриз
|
||||
|
||||
- **Накопленная трата попытки — величина НАКОПЛЕННАЯ, а не приращение.** Сумма по попыткам на прогоне A
|
||||
дала завышение на 38 %.
|
||||
- **Четверть денег прогона A купила пустоту:** 4 вызова из 27 не дали пригодного текста и стоили 25.4 %
|
||||
цены книги; самый дорогой одиночный вызов книги не дал ничего и молчал четыре минуты. Лечение в движке
|
||||
есть и сработало четыре раза из четырёх — **путь не рвётся, он дорожает**.
|
||||
- **Согласие на пере-оплату выдаётся на ВЕСЬ бюджет прогона** — на A разрыв с фактической пере-покупкой был
|
||||
семьдесят восемь крат.
|
||||
- **Смета против факта: ×4.99** на A. Две точки — разброс, не закон.
|
||||
- **Терминологический контур оплачивается дважды**, если прогон останавливался на подпись и продолжился.
|
||||
|
||||
**РОВНО ТАК:** деньги в отчёте — из сырого леджера **ДВУМЯ независимыми путями**, и рядом печатается,
|
||||
сколько файлов прибор обошёл и сколько из них оказались копиями. Свод обходом диска завышает трату кратно
|
||||
числу копий базы — замерено, было десятикратное завышение.
|
||||
|
||||
### 4.6 Оценка качества — два агента-опуса, по одному на перевод
|
||||
|
||||
**РОВНО ТАК по форме:** каждый получает **весь оригинал и весь перевод одной книги в одном запросе** и
|
||||
контекст репозитория; окна в миллион токенов на это хватает с запасом. **РЕШИ САМА**, что именно спросить,
|
||||
но отчёт агента обязан различать три вещи: ошибки смысла (переведено неверно), ошибки консистентности (один
|
||||
термин передан по-разному), ошибки голоса и ритма (translationese, сплавленные абзацы, потерянные акценты).
|
||||
|
||||
⚠ **Что уже известно и с чем сравнивать:** единственный человек, читавший выход прогона B целиком, назвал
|
||||
его «приличным любительским, на верхней границе» и указал три системные слабости — ритм (230 абзацев
|
||||
оригинала сплавлены в 158), идиомы и несведённая терминология. Это одна оценка одной книги одним читателем,
|
||||
и в таком виде она и приводится.
|
||||
|
||||
⛔ **И то, что делает английскую оценку особенной: у английской книги 4842 носителя курсива, и до правки
|
||||
ингеста они до модели НЕ ДОЕЗЖАЮТ вовсе.** Если пак готовности их довёз — оценщик обязан сказать, видно ли
|
||||
это в тексте. Если не довёз — потеря **пре-регистрируется по классам ДО прогона**, чтобы оценщик не
|
||||
приписал её паре, промту или модели.
|
||||
|
||||
### 4.7 Фриз
|
||||
|
||||
**РОВНО ТАК: фриз-дерево — локальный КЛОН, а не связанное рабочее дерево.** Бинарь, собранный в связанном
|
||||
воркри, не несёт штампа системы контроля версий ВООБЩЕ, и правило «отказывать при изменённом дереве» на нём
|
||||
выполняется всегда, то есть не проверяет ничего. Проверено по исходникам инструментария: поиск корня
|
||||
пропускает воркри, потому что там служебный путь — файл, а не каталог.
|
||||
⇒ **три условия отказа, не одно:** ревизия совпадает с фризом · дерево не изменено · **строк штампа больше
|
||||
нуля**.
|
||||
**РОВНО ТАК: фриз-дерево — локальный КЛОН, а не связанное рабочее дерево.** Бинарь из связанного воркри не
|
||||
несёт штампа версии ВООБЩЕ, и правило «отказывать при изменённом дереве» на нём выполняется всегда, то есть
|
||||
не проверяет ничего. ⇒ **три условия отказа: ревизия совпала · дерево не изменено · строк штампа больше
|
||||
нуля.** Собирай **все пять** бинарей из клона, а не три.
|
||||
⚠ У фриза несколько разных чисел — чем собраны бинари, чем заморожен план, чем заморожены инструменты. **У
|
||||
каждого в отчёте пиши, на какой вопрос он отвечает.** На прогоне A один из файлов до конца смены нёс
|
||||
ревизию брошенного дерева, из которого не собрано ничего.
|
||||
каждого пиши, на какой вопрос он отвечает.** На прогоне A один файл до конца смены нёс ревизию брошенного
|
||||
дерева, из которого не собрано ничего.
|
||||
|
||||
---
|
||||
|
||||
## 5. Самопроверка исполнением — и где у ЭТОГО пака мягко
|
||||
|
||||
Мандат обязателен: ревью исполнением своего кода, своих запросов и полученных результатов. **Субагенты
|
||||
разрешены.** Fable 5 — **ОДИН** советчик на сессию, с постоянным контекстом.
|
||||
Мандат обязателен: ревью исполнением своего кода, своих запросов и результатов. **Субагенты разрешены.**
|
||||
**Fable 5 — ОДИН советчик на сессию**, с постоянным контекстом.
|
||||
|
||||
⛔ **Нормы платного замера, каждая исполнима без открытия ноты:**
|
||||
- **пре-рег ДО денег:** фриз-коммит замороженного плана — единственный твой коммит, объявляется мне вслух
|
||||
ДО того, как сделан; девиации — НОВЫМ коммитом и явно в отчёте;
|
||||
- **не влезает в бюджет — СТОП и пинг, не резать молча;**
|
||||
- **подъём потолков просить при СРАБАТЫВАНИИ стопа, а не по проекции:** прогнозный запрос оставляет ложный
|
||||
след «владелец согласился на пере-оплату», которой не было;
|
||||
- ⛔ **живость длинного платного прогона проверяется АКТИВНО:** не ждать финального уведомления, а раз в
|
||||
пару часов сверять рост числа вызовов и трат ДВУМЯ чтениями и докладывать «жив». **Зависшая задача от
|
||||
идущей по сигналу завершения неотличима.**
|
||||
⛔ **Нормы платного замера:** пре-рег ДО денег, фриз-коммит объявляется мне вслух ДО того, как сделан ·
|
||||
девиации НОВЫМ коммитом и явно в отчёте · не влезает в бюджет — стоп и пинг, не резать молча · подъём
|
||||
потолков просить при СРАБАТЫВАНИИ стопа, а не по проекции · **живость длинного прогона проверяется АКТИВНО**:
|
||||
раз в час сверять рост числа вызовов и трат двумя чтениями и докладывать «жив». Зависшая задача от идущей по
|
||||
сигналу завершения неотличима.
|
||||
⛔ **Критик полноты — на КАЖДУЮ фазу, а не на пакет.** У прогона A два таких критика сняли две формулировки
|
||||
и дали девять находок; у B приёмка нашла деление на ноль в приборе денег ровно на той ветви, которую его же
|
||||
вывод объявлял непроверенной.
|
||||
|
||||
**ЧЕТЫРЕ МЕСТА, ГДЕ ЭТОТ ПАК МЯГОК ИМЕННО ПОТОМУ, ЧТО ОН ТАКОЙ:**
|
||||
**ПЯТЬ МЕСТ, ГДЕ ЭТОТ ПАК МЯГОК:**
|
||||
|
||||
1. ⛔ **Два прогона рядом портят числа друг друга, и порча выглядит свойством предмета.** Каждый прогон
|
||||
живёт в своём юните с собственным потолком памяти (по умолчанию четыре гигабайта), а на машине
|
||||
одиннадцать и часть занята. Убийство по нехватке памяти в юните **неотличимо от падения движка**: у
|
||||
первого нет строки-итога и уведомление приходит как убийство, у второго есть код возврата и имена
|
||||
упавших тестов. **Различай прибором, а не впечатлением.**
|
||||
1. ⛔ **Два прогона рядом портят числа друг друга, и порча выглядит свойством предмета.** Каждый живёт в
|
||||
своём юните с потолком памяти по умолчанию четыре гигабайта, на машине одиннадцать и часть занята.
|
||||
Убийство по нехватке памяти **неотличимо от падения движка**: у первого нет строки-итога и уведомление
|
||||
приходит как убийство, у второго есть код возврата и имена. Замерь доступную память ПЕРЕД стартом и
|
||||
реши, не снизить ли потолок.
|
||||
2. ⛔ **«Прогон идёт» и «прогон завис» неразличимы без активного опроса.** На прогоне B вопросы задавались
|
||||
УЖЕ КОНЧИВШЕМУСЯ прогону, и «вторая проба дала не то» оказалось про прибор, а не про предмет.
|
||||
уже КОНЧИВШЕМУСЯ прогону, и «вторая проба дала не то» оказалось про прибор, а не про предмет.
|
||||
⚠ Длительность: волны идут последовательно (число рабочих в боевом конфиге не задано, дефолт один).
|
||||
Двадцать китайских глав линейно ≈ 2–3 часа, английский срез — больше. **Пре-регистрируй ожидаемую
|
||||
длительность**, иначе «раз в час» окажется крупнее всего прогона.
|
||||
3. ⛔ **Инструмент, который пере-матчит, докладывает книгу консистентной по терму, который он ни разу не
|
||||
нашёл.** На прогоне B поиск по префиксу дал 27 «попаданий» вместо 10. **Каждую строку прибора
|
||||
консистентности проверяй руками ПРЕЖДЕ, чем нести её в отчёт.**
|
||||
консистентности проверяй руками ПРЕЖДЕ, чем нести в отчёт.**
|
||||
4. ⛔ **Сессия потеряет оба платных прогона, если потеряет сессию.** Задержка пользовательских юнитов
|
||||
выключена: они живут в менеджере твоей сессии. Это не чинится тобой — это называется в отчёте и
|
||||
выключена — они живут в менеджере твоей сессии. Это не чинится тобой, это называется в отчёте и
|
||||
учитывается в плане.
|
||||
5. ⛔ **Английская половина едет на механизмах, которым несколько часов от роду.** Пар-пак, маркер разметки,
|
||||
пар-скоупный лейбл промта, четвёртый ключ сайзинга — всё принято сегодня и ни разу не видело живой
|
||||
модели. ⇒ первые отказы английской книги вероятнее относятся к НИМ, чем к платформе, и разбирать их надо
|
||||
с этой стороны. Адреса правил английской пары — `backend/docs/EN_RU_PAIR_BASIS.md` §4–§5.
|
||||
|
||||
---
|
||||
|
||||
## 6. Оси ревью
|
||||
|
||||
- **Замеры:** пере-вывод чисел из СЫРЬЯ; у каждого фактора — арм без него; катастроф-скрин к победителю;
|
||||
вывод на агрегате до вскрытия единиц запрещён.
|
||||
- **Швы:** приёмка узла по ТРЁМ независимым следам, и помни, что платформа и движок — **один** свидетель,
|
||||
а не два.
|
||||
- **Деньги:** два независимых пути, знаменатель печатается.
|
||||
- **Замеры:** пере-вывод чисел из СЫРЬЯ; у каждого фактора — арм без него; вывод на агрегате до вскрытия
|
||||
единиц запрещён.
|
||||
- **Швы:** приёмка узла по трём независимым следам, и помни, что платформа и движок — **один** свидетель.
|
||||
- **Деньги:** два независимых пути, знаменатель печатается, счёт по уникальному ключу.
|
||||
|
||||
---
|
||||
|
||||
## 7. Пре-регистрация вместо записки-плана
|
||||
|
||||
До первого цента — **замороженный план**: что покупается, сколько ожидается, какой машинный потолок, что
|
||||
считается успехом каждого шага, и **какой знаменатель** у каждого числа, которое будет предъявлено.
|
||||
⛔ Знаменатель пре-регистрируется ДО прогона: иначе прогон ответит числом на другой вопрос.
|
||||
До первого цента — **замороженный план**: что покупается · сколько ожидается · какой машинный потолок · что
|
||||
считается успехом каждого шага · **какой знаменатель** у каждого числа · ожидаемая длительность · и
|
||||
**асимметрия двух половин**. ⛔ Знаменатель пре-регистрируется ДО прогона: иначе прогон ответит числом на
|
||||
другой вопрос.
|
||||
|
||||
---
|
||||
|
||||
## 8. Заявление есть команда
|
||||
|
||||
Каждое число и каждая категоричная фраза — с командой. У каждого НУЛЯ печатается контрольная величина.
|
||||
Каждое число — с командой. У каждого НУЛЯ печатается контрольная величина.
|
||||
|
||||
**Ловушки среды, каждая даёт тихий ложный ноль:**
|
||||
- обёртка `grep` чтит игнор-файлы и не видит каталог книг — по корню бери `command grep`;
|
||||
- `find` здесь **bfs**: относительное время только `-mmin`, и он **тоже** чтит игнор-файлы, поэтому книги им
|
||||
не находятся вовсе;
|
||||
- `find` здесь **bfs**: относительное время только `-mmin`, и он тоже чтит игнор-файлы, поэтому книги им не
|
||||
находятся вовсе;
|
||||
- командной утилиты для баз нет; читать `python3`, только на чтение;
|
||||
- ⚠ **знаки и байты — разные популяции** (кириллица весит два), «строк» и «вхождений» — тоже. **Оба прибора
|
||||
честны, и именно поэтому расхождение читается как порча данных, а не как разные вопросы.**
|
||||
- счётчик процессов по имени ловит **собственную командную строку**, если слово стои́т в тексте твоего же
|
||||
скрипта: спрашивай процессорное время и рабочий каталог, а не имя;
|
||||
- ⚠ **знаки и байты — разные популяции** (кириллица весит два), «строк» и «вхождений» — тоже. ⭐ **Оба
|
||||
прибора честны, и именно поэтому расхождение читается как порча данных, а не как разные вопросы.**
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -303,7 +366,9 @@
|
|||
## 11. Канал вопросов и право отказаться
|
||||
|
||||
Конфликт промта с деревом — **пинг, а не интерпретация**. Право сказать «этого делать не надо» с аргументом
|
||||
есть, и оно поощряется. ⚠ Прогону **запрещено чинить найденное** — только фиксировать и пинговать.
|
||||
есть и поощряется. ⚠ Прогону **запрещено чинить найденное** в `backend/` и `platform/` — только фиксировать.
|
||||
⚠ Эта редакция родилась из тринадцати мажоров опровергателя к первой: бюджет не сходился вдвое, списка
|
||||
стоп-правил не было вовсе, а одна «слепая зона» была закрыта числом ещё месяц назад. **Нашла ещё — говори.**
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -316,15 +381,19 @@
|
|||
|
||||
## 13. Когда пак считается завершённым
|
||||
|
||||
- [ ] Обе книги дошли до ФАЙЛА, и файл прочитан человеком либо агентом-оценщиком.
|
||||
- [ ] Отчёт называет **что, где и как в коде пошло не так** — с адресом, а не «были ошибки».
|
||||
- [ ] У каждого пункта §4 — исход: сделано · не делаю с доводом · пинг.
|
||||
- [ ] Круги СОШЛИСЬ: последний не дал НОВЫХ находок; прежние закрыты таблицей «находка → что сделано → **чем
|
||||
предъявлено**».
|
||||
- [ ] Обе книги дошли до ФАЙЛА, и файл прочитан.
|
||||
- [ ] Отчёт называет **что, где и как в коде пошло не так** — с адресом.
|
||||
- [ ] Оба мониторинга предъявлены: что читалось, чем, и **где была слепая зона**.
|
||||
- [ ] Деньги — двумя независимыми путями, с названием прибора и знаменателя у каждого числа.
|
||||
- [ ] Оценка качества обеих книг получена и разделена на три класса ошибок.
|
||||
- [ ] Все улики, которые прогон уничтожает сам, сняты копиями с хешами.
|
||||
- [ ] Каждое сработавшее стоп-правило и каждый упор в потолок ОБЪЯСНЕНЫ, а не просто названы.
|
||||
- [ ] Деньги — двумя независимыми путями, по уникальному ключу, с названием прибора у каждого числа.
|
||||
- [ ] Оценка обеих книг получена, разделена на три класса, **декой найден**, числа адъюдицированы,
|
||||
доказательство дочитывания напечатано.
|
||||
- [ ] Улики, которые прогон уничтожает сам, сняты копиями с хешами.
|
||||
- [ ] **Каждое сработавшее стоп-правило и каждый упор в потолок ОБЪЯСНЕНЫ**, а не названы.
|
||||
- [ ] Явное **«работа завершена, править не планирую»**.
|
||||
|
||||
⛔ **И последнее.** Ценность этого прогона не в том, что он пройдёт. Она в том, что впервые сработают
|
||||
механизмы, которые два прежних прогона не задели ни разу. **Сработавший стоп — это купленное знание.
|
||||
Необъяснённый сработавший стоп — это выброшенные деньги.**
|
||||
⛔ **И последнее.** Ценность прогона не в том, что он пройдёт. Она в том, что впервые сработают механизмы,
|
||||
которые два прежних прогона не задели ни разу — и что английская половина впервые поедет на данных, а не на
|
||||
коде. **Сработавший стоп — купленное знание. Необъяснённый сработавший стоп — выброшенные деньги.**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue