Четыре версии одного факта
Речь про состояние небольшого пилота: пять заданий, исполнители, приёмка. Вопрос «что сдано» имел ответ в трёх местах, и все три отличались друг от друга.
| Что записано в документе | Что показала проверка |
|---|---|
| сдано 3 задания из 5 | сдано 2 задания из 5 |
| пилот не тестировали | задания сданы, приёмки не было |
| веток пилота нет | ветка есть: живой рабочий каталог, известный HEAD, три коммита, на сервер не отправлена |
| Верная формулировка — четвёртая: сдано 2 из 5, приёмки не было, ветка не отправлена. Такой строки не было ни в одном из трёх документов. | |
Почему никто не посмотрел в репозиторий
Причина скучная и повторяемая у всех, кто ведёт отчётность по агентной работе: у пересказа есть автор и дата, у команды к репозиторию — нет. Документ выглядит как результат труда, запрос к системе — как рутина. Когда состояние спрашивают срочно, берут то, что уже написано словами.
Второй слой глубже. Корректирующий текст писался как разбор чужих расхождений, и авторская роль в нём — роль проверяющего. Проверяющий по умолчанию исходит из того, что уж его-то строки проверены: предмет проверки — чужие документы, а не собственный.
Класс, а не единичный промах. Документ о качестве данных не подчинили тому стандарту, который он вводил. Пока корректирующий текст не проходит ту же приёмку, что и исправляемый, он добавляет к N версиям правды версию N+1 — и делает это самым авторитетным тоном из всех, потому что заявлен как итоговый.
Отметка «проверено» и отсутствующий файл
В том же документе стояла отметка: гард против заражения контекстом реализован кодом, проверено. Ниже, в разделе о выкладке, — строка «коммит не требуется». Обе строки в одном файле, обе прошли вычитку, и вместе они означают ровно то, что и оказалось.
Сверка с историей репозитория: файла гарда нет в основной ветке и нет ни в одной другой точке истории. Три вспомогательных запускателя, написанных к нему, — та же картина.
Отговорка «служебный каталог не хранится в репозитории» здесь не работает. Механизм принудительного добавления существует и применяется постоянно: в основной ветке лежат 288 файлов .py из каталога инструментов, внесённых именно так. К гарду, закрывающему целый класс ошибок, тот же механизм не применили.
Итог одной строкой. Автоматический гард существует ровно для одного класса ошибок из восьми, разобранных за тот день, — и этого одного нет в репозитории. На бумаге закрытие класса выглядит сделанным. У любого другого исполнителя и на любой другой машине защиты нет вообще.
Что поменяли после разбора
- Состояние берётся из репозитория, а не из предыдущего документа. Одна команда, показывающая ветку и её последние коммиты, отменяет любой пересказ. Дешевле, чем сводить между собой три текста.
- Корректирующий документ проходит ту же приёмку, что и исправляемый. Отдельным проходом и желательно не тем, кто его писал: автор разбора чужих ошибок хуже всех видит свои.
- Отметка «проверено» обязана называть проверку. Не «реализован кодом», а «запрос такой-то, вывод такой-то». Соседство «проверено» и «коммит не требуется» — прямое противоречие и повод остановиться, а не стилистическая мелочь.
- Гард считается существующим с момента попадания в основную ветку. До этого он — локальная привычка одного рабочего каталога, не защита процесса.
- Формула «сдано N из M» пишется вместе со словом о приёмке. «Сдано 2 из 5, приёмки не было» и «сдано 2 из 5» — разные факты, а читаются одинаково.