diff --git a/docs/orchestrator-norms-scratchpad.md b/docs/orchestrator-norms-scratchpad.md index c1cecc4f..b304a662 100644 --- a/docs/orchestrator-norms-scratchpad.md +++ b/docs/orchestrator-norms-scratchpad.md @@ -507,3 +507,31 @@ HTTP-код, количество, номер строки кода. Никак ради которого оно нужно**; «сессия была внимательна» не переносится на следующую смену, условие в коде переносится. ⚠ Практическое следствие для промтов: строка «построй прибор» дефектна, годная называет, ЧТО прибор обязан отказаться засчитывать. + +## ⛔ ТРЕТЬЕ СВОЙСТВО СРЕДЫ, ДАЮЩЕЕ ТИХИЙ ЛОЖНЫЙ НОЛЬ: `find` здесь — bfs, и `-newermt` он не понимает (18.09) + +Два уже записаны в каноне — обёртка `grep` чтит `.gitignore` и не видит `books/`; `sqlite3` как CLI нет. +Третье поймано сегодня и стоило двух неверных выводов подряд. + +**Замер.** `find <путь> -newermt '-10 minutes' -type f 2>/dev/null` печатает **ноль строк**. Не потому, что +файлов нет: `find` в этой среде — `bfs`, и он отвечает `bfs: error: Invalid timestamp.` с кодом **141**. +Стандартное `2>/dev/null` глушит диагностику, и остаётся чистый ноль, неотличимый от результата поиска. +Тот же каталог через `-mmin -15` даёт **7 файлов**, через `-mmin -60` — **15**. + +⇒ Цена конкретна: я дважды прочитал этот ноль как «зона не трогала дерево» и на этом основании собрался +запускать мутационную кампанию. Дерево в этот момент правилось активно — побайтовое сравнение копии с +источником поймало файл, разошедшийся ВО ВРЕМЯ `tar`, а каталог мутаций вырос 535/324 → 537/326. +Кампания на таком дереве измерила бы не тот предмет, и числа выглядели бы нормально. + +⛔ **И вторая половина, которая хуже первой: мой КОНТРОЛЬ тоже был дефектным и подтвердил негодный прибор.** +Я проверял три формы записи времени строкой `n=$(find … 2>&1 | wc -l)` и считал успехом `n ≥ 1`. Все три +формы напечатали по **десять строк ошибки**, и все три получили галочку «✓ находит заведомо свежий файл». +⇒ **контроль, считающий СТРОКИ ВЫВОДА вместо СОВПАДЕНИЙ, подтверждает что угодно, включая собственную +поломку**; `2>&1` в контроле превращает диагностику в «результат». Годный контроль сравнивает с ИМЕНЕМ +ожидаемого файла и печатает код возврата первого звена — `код возврата: 141` виден сразу, «10» не виден +никогда. + +⇒ **Практика:** относительное время в `find` — только `-mmin`/`-mtime`; рядом с любым нулём печатать +`PIPESTATUS`/код возврата; контроль прибора строить на ОЖИДАЕМОМ СОДЕРЖИМОМ, а не на количестве строк. +⚠ Родня записанного выше класса «обёртка вокруг встроенной команды даёт 127, а счётчик печатает 0» — +механизм тот же, программа другая: **ненулевой код молчит, когда его вывод отправлен в `/dev/null`.**