Write the two-book cold run pack, built on the driver that fixed three of four harness defects, with the four pre-start conditions measured today
This commit is contained in:
parent
63e3a0d01a
commit
4706cbcc3f
1 changed files with 318 additions and 0 deletions
318
docs/COLDRUN_TWO_BOOKS_SESSION_PROMPT.md
Normal file
318
docs/COLDRUN_TWO_BOOKS_SESSION_PROMPT.md
Normal file
|
|
@ -0,0 +1,318 @@
|
|||
# Промт сессии: ХОЛОДНЫЙ ПРОГОН ДВУХ КНИГ — платформа → движок → файл, ПАРАЛЛЕЛЬНО
|
||||
|
||||
> Выдан оркестратором очереди №23. **Пак ПЛАТНЫЙ.** Траты ратифицированы владельцем 18.09 дословно:
|
||||
> «траты я ратифицирую, тратьте сколько нужно, сейчас на дипсике 4 доллара вам должно хватить. Тратьте,
|
||||
> главное полученный прослеженный результат».
|
||||
>
|
||||
> ⛔ **СТАРТ ГЕЙЧЕН.** Прогон не начинается, пока оркестратор не ратифицирует готовность обеих зон АКТОМ.
|
||||
> Ты можешь и должна делать всё, что до первого цента: подъём, дым по заглушке, фриз, мониторинги. Первый
|
||||
> платный вызов — только по моему явному слову.
|
||||
|
||||
---
|
||||
|
||||
## 1. Какая проблема и что решит твой результат
|
||||
|
||||
Проект переводит книги мультиагентным LLM-пайплайном: платформа принимает книгу и продаёт прогон, движок
|
||||
переводит, дверь выгрузки отдаёт файл. Сквозной путь пройден дважды — прогоны A и B, обе китайские книги по
|
||||
три главы. **Ни разу не проверены три вещи:** книга ДЛИННЕЕ трёх глав, ВТОРАЯ языковая пара, и ДВА прогона
|
||||
одновременно.
|
||||
|
||||
**Твой результат:** две книги — около 20 глав китайской «мастер гу» и книга Кристоффа сопоставимого объёма —
|
||||
проходят весь путь **через API платформы**, параллельно, и по итогу известно: что получилось, сколько
|
||||
стоило, где код повёл себя не так, и каково качество перевода на обеих парах.
|
||||
|
||||
⛔ **Слово владельца 18.09 про наблюдение, дословно:** «обозначь сессии чтоб она следила мониторингом за
|
||||
платформой и бэкендом чтоб смотрела на логи, события, метрики и так далее что выводится. И чтоб фиксировала
|
||||
проблемы и чтоб занесла это в отчет, пусть эта сессия холодного пака дергает все через апи платформы».
|
||||
⇒ **в отчёте должно быть сказано, ЧТО, ГДЕ и КАК в коде пошло не так** — с адресом, а не «были ошибки».
|
||||
|
||||
⚠ **Это не стресс-тест и не демонстрация.** Прогоны A и B ни разу не задели ни одного стоп-правила и ни
|
||||
одного потолка. На двадцати главах они, скорее всего, **выстрелят впервые** — и это и есть новое знание,
|
||||
ради которого прогон покупается. Сработавший стоп не есть провал прогона; необъяснённый сработавший стоп —
|
||||
есть.
|
||||
|
||||
---
|
||||
|
||||
## 2. Зона записи и git
|
||||
|
||||
**Твоя зона — твой рабочий каталог прогона и `docs/experiments/`.** Код `backend/` и `platform/` ты **НЕ
|
||||
правишь**: нашла дефект — фиксируешь с адресом и пингуешь оркестратора. Это жёстко: прогон, чинящий
|
||||
найденное на ходу, перестаёт быть прогоном и становится отладкой.
|
||||
|
||||
Коммитишь **только пре-рег фризы** — замороженный план замера ДО платных вызовов. Всё остальное лендит
|
||||
оркестратор.
|
||||
|
||||
⛔ **НИКОГДА не читай `.env` и `.env.*`** — там боевые ключи. Путь называть можно, содержимое нет.
|
||||
⚠ Живость ключей проверяется ПЕРВЫМ платным вызовом и ничем иным. Отказ по авторизации — стоп и мой поход
|
||||
к владельцу, не твоя попытка починить.
|
||||
|
||||
---
|
||||
|
||||
## 3. Карта чтения — пять позиций, и она ЗАКОН
|
||||
|
||||
1. `CLAUDE.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. Работа
|
||||
|
||||
### 4.1 ⛔ ЧЕТЫРЕ ПРЕДСТАРТОВЫХ УСЛОВИЯ, каждое замерено мной и каждое сегодня НЕ выполнено
|
||||
|
||||
**(1) Рабочие окружения обоих прежних стендов СЛОМАНЫ.** Замер 18.09: `/home/ubuntu-26` **не существует**
|
||||
(дом переименован), а `stand/env.sh` прогона A несёт одно упоминание этого пути, прогона B — пять. ⇒ все
|
||||
пути к бинарям, книгам, состоянию и ключам в них указывают в никуда. **Скопировать env.sh и запустить —
|
||||
первая грабля.** Пере-собери окружение, и КАЖДЫЙ путь проверь существованием, а не глазом.
|
||||
|
||||
**(2) ⛔ ДНЕВНОЙ ПОТОЛОК В ШАБЛОНЕ КНИГИ — САМАЯ ДОРОГАЯ МИНА ЭТОГО ПРОГОНА.** Шаблон прежнего стенда несёт
|
||||
`book_usd: 1.25` и `day_usd: 2.50` (строки 22–23). Арифметика: прогон A стоил $0.419424 за три главы ⇒
|
||||
≈$0.14 за главу ⇒ **двадцать глав ≈ $2.8**, что выше обоих. Книжный потолок платформа перебивает аргументом
|
||||
прогона. **Дневной — НЕ перебивается ничем.** А упершийся в него прогон встаёт в `paused`, и `resume`
|
||||
отвечает отказом: лечение — НОВЫЙ заказ, а не продолжение. Официальный операторский рецепт прямо велит
|
||||
дневной потолок в шаблон не класть (решение владельца 15.08). ⇒ **шаблон книги этого прогона обязан НЕ нести
|
||||
дневного потолка**, и это проверяется ДО интейка: платформа пишет конфиг книги ОДИН раз и больше его не
|
||||
читает.
|
||||
|
||||
**(3) Демон не стартует без объявленных пар.** Инстанс, принимающий загрузки без доступной пары, не
|
||||
поднимается вовсе. Для двух книг нужны **обе** пары. Проверяется ответом ручки возможностей, а не
|
||||
переменной окружения.
|
||||
|
||||
**(4) Неверный путь к ключам провайдера даёт на буте только ПРЕДУПРЕЖДЕНИЕ.** Демон объявит себя здоровым,
|
||||
книгу примет и **возьмёт холд денег** — а упадёт первый платный вызов, уже после резервирования. ⇒ путь
|
||||
проверяется существованием файла, а не отсутствием ошибки в логе.
|
||||
|
||||
⚠ **Пятое условие снято мною сегодня:** английский пакет промтов был НЕ закоммичен, и фриз-клон его бы не
|
||||
унёс. Теперь он в истории (8 файлов). Проверь это сама на своём фризе — `git ls-files`, а не `ls`.
|
||||
|
||||
### 4.2 Драйвер: бери прогон B, НЕ бери прогон A
|
||||
|
||||
⛔ **РОВНО ТАК.** Разбор прогона A назвал четыре дефекта своего харнесса. **В драйвере A не починен ни
|
||||
один; в драйвере B починены три.** Замер: гейт бинарей у A судит три бинаря, у B — пять.
|
||||
|
||||
| дефект прибора A | в A | в B |
|
||||
|---|---|---|
|
||||
| ни одно HTTP-тело платного прогона не сохранено — печаталось на экран | **жив** | **починен**: каждый запрос и ответ пишется в файл ДО возврата вызывающему |
|
||||
| ложная живость: печатался максимум по попыткам, и во время второй число выглядело замершим | **жив** | **починен**: строка НА КАЖДУЮ попытку |
|
||||
| гейт фриза судит три бинаря из пяти — два инструмента собраны не из фриза и не проверены | **жив** | **починен**: все пять |
|
||||
| сборщик денег суммирует леджер по ВСЕМ учёткам сразу | **жив** | **починен**: фильтр по учётке плюс контроль «по всем» |
|
||||
|
||||
⭐ И сохранение тел спасло прогон B от ЛОЖНОЙ находки: греп по ключам показал одно, а в сохранённом ТЕЛЕ
|
||||
первым полем стояло другое. **«Грепу верила, файлу проверила.»**
|
||||
|
||||
**Но у драйвера B есть два дефекта, которых не назвал никто, и оба твои:**
|
||||
- ⛔ **он ОДНОКНИЖНЫЙ.** Рабочий каталог, файл состояния и каталог улик берутся из окружения без
|
||||
переопределения. **Две книги = два разных рабочих каталога**, иначе вторая перетрёт состояние первой и обе
|
||||
улики уедут в одну кучу. **РЕШИ САМА**, как разделить, но предъяви, что разделение работает, ДО первого
|
||||
цента;
|
||||
- ⛔ **разбивка движковых чисел по попыткам считается по ПОСЛЕДНЕМУ СИМВОЛУ идентификатора трассы**
|
||||
(`eval/cold_run_b/door.py:339`=`select substr(trace_id,-1)`). На попытке десять и дальше это уже не номер
|
||||
попытки. Предел попыток на прогон — двадцать, и на двадцатиглавой книге с паузами десять достижимы. ⇒
|
||||
**почини, прежде чем считать.** Различитель лежит в той же строке: номер попытки несёт сам идентификатор.
|
||||
|
||||
### 4.3 Два мониторинга — что именно наблюдать
|
||||
|
||||
**РОВНО ТАК: наблюдение строится ДО старта, а не по ходу.** Требование владельца.
|
||||
|
||||
**Движок** (его база прогона и журнал процесса): строка на КАЖДЫЙ вызов с моделью, токенами, ценой,
|
||||
задержкой, причиной завершения; строка на (глава, чанк, стадия) с диспозицией и числом попыток; таблица
|
||||
трат — носитель обоих потолков; поток событий с семью типами кадров, где кадр потолка несёт **недостачу**, а
|
||||
финальный — деньги и объём. Плюс `tmctl status`/`report` — они читают базу ЖИВОГО прогона за $0.
|
||||
|
||||
⛔ **КАК ЧИТАТЬ ЖИВУЮ БАЗУ.** Она в режиме журнала опережающей записи. Флаг «файл неизменен» на ЖИВОЙ базе
|
||||
**ставить НЕЛЬЗЯ**: он велит читателю игнорировать журнал, и тот молча получает устаревший снимок — ложный
|
||||
низкий ноль. На живой — только режим чтения; флаг неизменности — для КОПИЙ и законченных баз.
|
||||
|
||||
**Платформа:** прогоны и их статусы с причиной паузы; **строка на каждую попытку** с накопленной тратой и
|
||||
кодом выхода; леджер кредитов; открытые холды; состояние юнитов; буфер событий, читаемый запросом без
|
||||
подписки; выгрузки. Плюс метрики (глубина очереди, живые прогоны, отставание чтения, застрявшие прогоны) и
|
||||
админ-команда списка прогонов — **это лучшая одноэкранная сводка для вахты на две книги**.
|
||||
|
||||
**ОС, вне цепочки платформы:** маркеры выхода в каталоге состояния и состояние транзиентных юнитов. Это
|
||||
единственные по-настоящему НЕЗАВИСИМЫЕ свидетели: база платформы **материализуется** из потока событий
|
||||
движка, поэтому «платформа, диск и отчёт согласны» — это один свидетель, а не три.
|
||||
|
||||
⛔ **СЛЕПЫЕ ЗОНЫ — назови их в отчёте, даже если ничего не случится:**
|
||||
- **пустой ответ и обрыв по длине в телеметрии неразличимы** — оба приходят одной причиной завершения;
|
||||
различает только журнал процесса;
|
||||
- **поле ошибки пусто на ВСЕХ строках, включая провальные** — на двух прогонах 33 из 33 и 35 из 35. **Любой
|
||||
аудит отказов, написанный через это поле, прочтёт прогон как идеально чистый;**
|
||||
- **токены размышления не несли числа ни разу** за историю проекта;
|
||||
- **доли ответов классификатора банка не считает ни один счётчик**; итоговая строка стадии печатает ноль о
|
||||
другом проходе;
|
||||
- **биллинга провайдера у нас нет вовсе:** провайдер сообщает токены, доллары умножены нашим пином. Пин
|
||||
завышает примерно на шесть процентов, а пиковая цена против внепиковой даёт расхождение примерно вдвое. ⇒
|
||||
**любое число в долларах в отчёте называется «по нашему пину», а не «мы заплатили».**
|
||||
|
||||
⛔ **ОТДЕЛЬНО, и это ряд 502: упор в баланс ПРОВАЙДЕРА.** Транспорт классифицирует его верно — терминально,
|
||||
без пустых ретраев. Но типизированная ошибка не покидает пакет транспорта, и исхода, отличимого от обычного
|
||||
терминального падения стадии, у неё НЕТ. ⇒ **держи журнал процесса обеих книг под наблюдением и лови в нём
|
||||
код 402 и слова про исчерпанные средства.** Иначе упор в баланс провайдера будет прочитан как поломка движка
|
||||
на середине оплаченной книги. Событие не гипотетическое: на одной оси замеров проекта 44 записи об ошибке из
|
||||
52 — ровно такой отказ.
|
||||
|
||||
### 4.4 Улики, которые прогон уничтожает сам
|
||||
|
||||
Проекция банка перезаписывается атомарно в начале следующей попытки ⇒ предложения, на которых открывали
|
||||
экран подписи, выживают **только копией, снятой на стопе**. Замер прогона A: хеш файла до резюма и после —
|
||||
разные. Файл банк-стопа пишется НЕ атомарно, поэтому снимается только когда прогон стои́т.
|
||||
⇒ **РОВНО ТАК:** снимай копии на каждой границе и печатай их хеши.
|
||||
|
||||
### 4.5 Деньги — что известно и на чём уже наступали
|
||||
|
||||
- **Накопленная трата попытки — величина НАКОПЛЕННАЯ, а не приращение.** Сумма по попыткам на прогоне A
|
||||
дала завышение на 38 %.
|
||||
- **Четверть денег прогона A купила пустоту:** 4 вызова из 27 не дали пригодного текста и стоили 25.4 %
|
||||
цены книги; самый дорогой одиночный вызов книги не дал ничего и молчал четыре минуты. Лечение в движке
|
||||
есть и сработало четыре раза из четырёх — **путь не рвётся, он дорожает**.
|
||||
- **Согласие на пере-оплату выдаётся на ВЕСЬ бюджет прогона** — на A разрыв с фактической пере-покупкой был
|
||||
семьдесят восемь крат.
|
||||
- **Смета против факта: ×4.99** на A. Две точки — разброс, не закон.
|
||||
- **Терминологический контур оплачивается дважды**, если прогон останавливался на подпись и продолжился.
|
||||
|
||||
**РОВНО ТАК:** деньги в отчёте — из сырого леджера **ДВУМЯ независимыми путями**, и рядом печатается,
|
||||
сколько файлов прибор обошёл и сколько из них оказались копиями. Свод обходом диска завышает трату кратно
|
||||
числу копий базы — замерено, было десятикратное завышение.
|
||||
|
||||
### 4.6 Оценка качества — два агента-опуса, по одному на перевод
|
||||
|
||||
**РОВНО ТАК по форме:** каждый получает **весь оригинал и весь перевод одной книги в одном запросе** и
|
||||
контекст репозитория; окна в миллион токенов на это хватает с запасом. **РЕШИ САМА**, что именно спросить,
|
||||
но отчёт агента обязан различать три вещи: ошибки смысла (переведено неверно), ошибки консистентности (один
|
||||
термин передан по-разному), ошибки голоса и ритма (translationese, сплавленные абзацы, потерянные акценты).
|
||||
|
||||
⚠ **Что уже известно и с чем сравнивать:** единственный человек, читавший выход прогона B целиком, назвал
|
||||
его «приличным любительским, на верхней границе» и указал три системные слабости — ритм (230 абзацев
|
||||
оригинала сплавлены в 158), идиомы и несведённая терминология. Это одна оценка одной книги одним читателем,
|
||||
и в таком виде она и приводится.
|
||||
|
||||
⛔ **И то, что делает английскую оценку особенной: у английской книги 4842 носителя курсива, и до правки
|
||||
ингеста они до модели НЕ ДОЕЗЖАЮТ вовсе.** Если пак готовности их довёз — оценщик обязан сказать, видно ли
|
||||
это в тексте. Если не довёз — потеря **пре-регистрируется по классам ДО прогона**, чтобы оценщик не
|
||||
приписал её паре, промту или модели.
|
||||
|
||||
### 4.7 Фриз
|
||||
|
||||
**РОВНО ТАК: фриз-дерево — локальный КЛОН, а не связанное рабочее дерево.** Бинарь, собранный в связанном
|
||||
воркри, не несёт штампа системы контроля версий ВООБЩЕ, и правило «отказывать при изменённом дереве» на нём
|
||||
выполняется всегда, то есть не проверяет ничего. Проверено по исходникам инструментария: поиск корня
|
||||
пропускает воркри, потому что там служебный путь — файл, а не каталог.
|
||||
⇒ **три условия отказа, не одно:** ревизия совпадает с фризом · дерево не изменено · **строк штампа больше
|
||||
нуля**.
|
||||
⚠ У фриза несколько разных чисел — чем собраны бинари, чем заморожен план, чем заморожены инструменты. **У
|
||||
каждого в отчёте пиши, на какой вопрос он отвечает.** На прогоне A один из файлов до конца смены нёс
|
||||
ревизию брошенного дерева, из которого не собрано ничего.
|
||||
|
||||
---
|
||||
|
||||
## 5. Самопроверка исполнением — и где у ЭТОГО пака мягко
|
||||
|
||||
Мандат обязателен: ревью исполнением своего кода, своих запросов и полученных результатов. **Субагенты
|
||||
разрешены.** Fable 5 — **ОДИН** советчик на сессию, с постоянным контекстом.
|
||||
|
||||
⛔ **Нормы платного замера, каждая исполнима без открытия ноты:**
|
||||
- **пре-рег ДО денег:** фриз-коммит замороженного плана — единственный твой коммит, объявляется мне вслух
|
||||
ДО того, как сделан; девиации — НОВЫМ коммитом и явно в отчёте;
|
||||
- **не влезает в бюджет — СТОП и пинг, не резать молча;**
|
||||
- **подъём потолков просить при СРАБАТЫВАНИИ стопа, а не по проекции:** прогнозный запрос оставляет ложный
|
||||
след «владелец согласился на пере-оплату», которой не было;
|
||||
- ⛔ **живость длинного платного прогона проверяется АКТИВНО:** не ждать финального уведомления, а раз в
|
||||
пару часов сверять рост числа вызовов и трат ДВУМЯ чтениями и докладывать «жив». **Зависшая задача от
|
||||
идущей по сигналу завершения неотличима.**
|
||||
|
||||
**ЧЕТЫРЕ МЕСТА, ГДЕ ЭТОТ ПАК МЯГОК ИМЕННО ПОТОМУ, ЧТО ОН ТАКОЙ:**
|
||||
|
||||
1. ⛔ **Два прогона рядом портят числа друг друга, и порча выглядит свойством предмета.** Каждый прогон
|
||||
живёт в своём юните с собственным потолком памяти (по умолчанию четыре гигабайта), а на машине
|
||||
одиннадцать и часть занята. Убийство по нехватке памяти в юните **неотличимо от падения движка**: у
|
||||
первого нет строки-итога и уведомление приходит как убийство, у второго есть код возврата и имена
|
||||
упавших тестов. **Различай прибором, а не впечатлением.**
|
||||
2. ⛔ **«Прогон идёт» и «прогон завис» неразличимы без активного опроса.** На прогоне B вопросы задавались
|
||||
УЖЕ КОНЧИВШЕМУСЯ прогону, и «вторая проба дала не то» оказалось про прибор, а не про предмет.
|
||||
3. ⛔ **Инструмент, который пере-матчит, докладывает книгу консистентной по терму, который он ни разу не
|
||||
нашёл.** На прогоне B поиск по префиксу дал 27 «попаданий» вместо 10. **Каждую строку прибора
|
||||
консистентности проверяй руками ПРЕЖДЕ, чем нести её в отчёт.**
|
||||
4. ⛔ **Сессия потеряет оба платных прогона, если потеряет сессию.** Задержка пользовательских юнитов
|
||||
выключена: они живут в менеджере твоей сессии. Это не чинится тобой — это называется в отчёте и
|
||||
учитывается в плане.
|
||||
|
||||
---
|
||||
|
||||
## 6. Оси ревью
|
||||
|
||||
- **Замеры:** пере-вывод чисел из СЫРЬЯ; у каждого фактора — арм без него; катастроф-скрин к победителю;
|
||||
вывод на агрегате до вскрытия единиц запрещён.
|
||||
- **Швы:** приёмка узла по ТРЁМ независимым следам, и помни, что платформа и движок — **один** свидетель,
|
||||
а не два.
|
||||
- **Деньги:** два независимых пути, знаменатель печатается.
|
||||
|
||||
---
|
||||
|
||||
## 7. Пре-регистрация вместо записки-плана
|
||||
|
||||
До первого цента — **замороженный план**: что покупается, сколько ожидается, какой машинный потолок, что
|
||||
считается успехом каждого шага, и **какой знаменатель** у каждого числа, которое будет предъявлено.
|
||||
⛔ Знаменатель пре-регистрируется ДО прогона: иначе прогон ответит числом на другой вопрос.
|
||||
|
||||
---
|
||||
|
||||
## 8. Заявление есть команда
|
||||
|
||||
Каждое число и каждая категоричная фраза — с командой. У каждого НУЛЯ печатается контрольная величина.
|
||||
|
||||
**Ловушки среды, каждая даёт тихий ложный ноль:**
|
||||
- обёртка `grep` чтит игнор-файлы и не видит каталог книг — по корню бери `command grep`;
|
||||
- `find` здесь **bfs**: относительное время только `-mmin`, и он **тоже** чтит игнор-файлы, поэтому книги им
|
||||
не находятся вовсе;
|
||||
- командной утилиты для баз нет; читать `python3`, только на чтение;
|
||||
- ⚠ **знаки и байты — разные популяции** (кириллица весит два), «строк» и «вхождений» — тоже. **Оба прибора
|
||||
честны, и именно поэтому расхождение читается как порча данных, а не как разные вопросы.**
|
||||
|
||||
---
|
||||
|
||||
## 9. Эхо старта
|
||||
|
||||
До работы — ≤10 строк **СВОИМИ словами**: скоуп · инварианты · чего не делаешь. Шли мне первым действием.
|
||||
|
||||
---
|
||||
|
||||
## 10. Что НЕ удалось и где прибор слеп
|
||||
|
||||
Обязательная секция, две половины: «что не получилось» и **«что ты знаешь и не сказала»** — что невидимо ·
|
||||
почему не чинила · чем закрывается.
|
||||
|
||||
---
|
||||
|
||||
## 11. Канал вопросов и право отказаться
|
||||
|
||||
Конфликт промта с деревом — **пинг, а не интерпретация**. Право сказать «этого делать не надо» с аргументом
|
||||
есть, и оно поощряется. ⚠ Прогону **запрещено чинить найденное** — только фиксировать и пинговать.
|
||||
|
||||
---
|
||||
|
||||
## 12. Прямой канал
|
||||
|
||||
`/tmp/textmachine-channel` — впиши свой блок первым делом. ⚠ Адрес из файла не доказывает, что сессия жива:
|
||||
сверься с `ListAgents`.
|
||||
|
||||
---
|
||||
|
||||
## 13. Когда пак считается завершённым
|
||||
|
||||
- [ ] Обе книги дошли до ФАЙЛА, и файл прочитан человеком либо агентом-оценщиком.
|
||||
- [ ] Отчёт называет **что, где и как в коде пошло не так** — с адресом, а не «были ошибки».
|
||||
- [ ] Оба мониторинга предъявлены: что читалось, чем, и **где была слепая зона**.
|
||||
- [ ] Деньги — двумя независимыми путями, с названием прибора и знаменателя у каждого числа.
|
||||
- [ ] Оценка качества обеих книг получена и разделена на три класса ошибок.
|
||||
- [ ] Все улики, которые прогон уничтожает сам, сняты копиями с хешами.
|
||||
- [ ] Каждое сработавшее стоп-правило и каждый упор в потолок ОБЪЯСНЕНЫ, а не просто названы.
|
||||
- [ ] Явное **«работа завершена, править не планирую»**.
|
||||
|
||||
⛔ **И последнее.** Ценность этого прогона не в том, что он пройдёт. Она в том, что впервые сработают
|
||||
механизмы, которые два прежних прогона не задели ни разу. **Сработавший стоп — это купленное знание.
|
||||
Необъяснённый сработавший стоп — это выброшенные деньги.**
|
||||
Loading…
Add table
Reference in a new issue