# Сверка внутренней ревизии фазы Д с телом отчёта (16.08) > Источники: `~/books/dovodka/revizia-fazy-D-11-08.json` (82 находки) и `priemka-D4-14-08.json` (49). > Сверку делал отдельный агент. **Эти находки НЕ верифицированы автором отчёта исполнением** — > их надо пере-проверить прежде, чем двигать на них выводы. Человекочитаемый вид — по просьбе > владельца 16.08 (jsonl-транскрипт ему не нужен). **Счёт:** всего 131 · отражено в отчёте 66 · **НЕ отражено 65** --- ## Находки, которых в отчёте НЕТ ### 1. [критично] P13 — вердикт по H-1 (A6/A0) определяется двумя пачками прогона, объявленного «валидацией цепочки» и судимого 11.08 по НЕ замороженному промту; паритет обвязок (П-4, paritet.py) для них не проверялся ничем. Снятие этих двух пачек даёт пол n=13 sd 1.4058 → порог 1.0917 и A6/A0 −1.0938, то есть «ПЕРЕШЁЛ ПОРОГ» вместо печатаемого «ниже порога». **Почему важно:** H-1 — гипотеза владельца «проблема в черновике». Отчёт печатает «НЕ УСТАНОВЛЕНА» (Д4.2, Д9.1, Д14.6 п.5), а Д14.11 отдельно говорит, что по ВЕРНОСТИ A6 не хуже переписа (+0.12). Переходит ли H-1 порог, решает необъявленное решение о том, считать ли валидационный прогон боевым замером — владелец этого выбора не видел. ### 2. [критично] P12 — пачка 69de717f3f осталась в замере, хотя её судила сессия, аннулированная за сравнение вариантов. Снятие: пол claude n=15 sd 2.14 порог 1.54 → n=14 sd 2.21 порог 1.65; A3/A0 −2.16 → −2.21; порог sol 3.65 → 3.89; A1B/A0 sol −4.74 → −4.81. **Почему важно:** Двигает ВСЕ печатаемые числа обоих семейств, включая порог 1.65, против которого читается «A4 неотличим, разрыв 0.11». Норма «сессия, нарушившая протокол, аннулируется ЦЕЛИКОМ» — собственная норма проекта, и её нарушение не объявлено (отчёт утверждает обратное, см. contradicted). ### 3. [важно] P07 — унаследованный гейт честности пола itog_d4 не гоняет; на данных claude его вердикт — «ПОЛ СМЕЩЁН, боевые числа снимаются» (систематический сдвиг +1.8 между наборами p1/p2). **Почему важно:** claude — семейство, несущее ОБА CONFIRM фазы. Если бы объявленный гейт был прогнан, боевые числа этого семейства снимались бы ДО чтения перевесов. Ни гейт, ни его вердикт в отчёте не упомянуты ни разу. ### 4. [важно] P42 — два пре-рег-правила о маржевом гейте противоречат друг другу: строка П-1 (:1070) велит АННУЛИРОВАТЬ пачку семейства, не взявшего маржевый контроль; Д4.4 вместо этого лишь понижает его вердикты до описательных. Код исполняет мягкое правило, выбор не объявлен девиацией. **Почему важно:** Единственный CONFIRM фазы (H-2а «опровергнута») стоит на том, что Sol считается вторым семейством. По буквальному П-1 его пачка аннулируется → остаётся одно семейство → «ЭСКАЛАЦИЯ К АДЪЮДИКАЦИИ», а не CONFIRM. Д14.6 п.2 повторно опирается на «оба семейства перешли свой порог». ### 5. [важно] P44 — клетки A4 и A1B оплачены при НУЛЕВОМ изменении текста (фиксер не исполнил ни одного указанного места); контраст A4/A0 на 4 единицах из 31 равен нулю ПО ПОСТРОЕНИЮ, а не по замеру. Штатный контроль «близнец» унаследованного рига (absjudge.py:687-696) itog_d4.py не гоняет. **Почему важно:** A4 — «кандидат в прод» и прямой ответ на заказ :86-87. Ровно это вскрытие отчёт делает для английского близнеца E4 (Д11.4: 12 из 16 побайтно равны E0, «вдвое дешевле» снято) и НЕ делает для zh A4, чей вердикт «неотличим, разрыв 0.11» после этого читается иначе. ### 6. [критично] R73 — прайор шума взят с ПОЛА, а не с контраста: замеренный контраст той же структуры в 1.40× шумнее (sd 3.063 против 2.19 на border, пере-снято исполнением). Порог различимости во ВСЕХ проходах строится из пола. Рядом лежит P40 (важно), утверждающая обратное направление: пол несёт межсессионную компоненту, которой в контрасте нет по построению, то есть порог ЗАВЫШЕН. **Почему важно:** Порог — решающее правило всей дуги: Д4 1.54/1.65, Д3 0.99/0.90, Д6 0.93, Д1 1.47, Д15 1.84, Д16 2.17. Две выжившие находки называют его смещённым в ПРОТИВОПОЛОЖНЫЕ стороны, и ни одна в отчёт не попала — то есть калибровка порога не «консервативна», а неизвестна по знаку. Прямо задевает положительные утверждения (E0/D0 перешёл, J0/D0 перешёл, «маржевый декой ПРОЙДЕН»). ### 7. [важно] R03+R04 — axiscal.py: число «заражение» (:228) вычитает счёт ЦИТАТ из суммы ОСЕВЫХ БАЛЛОВ (разные величины; Sol получает −32, цитируя в 13 раз гуще, то есть по прибору выходит «аккуратнее»); нулевой модели нет вовсе, шансовый пол атрибуции различается у семейств в 4.5×. Проверено сегодня: в выводе axiscal нет ни одной строки частоты срабатывания на случайном входе. **Почему важно:** Это прямое нарушение собственной нормы фазы Д0.6 (:836-838) в самом свежем $0-классификаторе, и именно на axiscal ссылается П-5 при выносе ТЕРМИН из НЕСУЩЕЙ суммы («axiscal показал, что посадок на ТЕРМИН нет вовсе», :1108). То есть прибор без нулевой модели определил, какие оси несут вердикты фазы. ### 8. [важно] P19+P25 — донор декоя во ВСЕХ 62 пачках оси Д4 — арм A0, при пре-рег-норме «донор декоя уравнен по армам». В каждой пачке лежит почти-копия A0 — знаменателя всех трёх первичных контрастов. **Почему важно:** Отчёт объявляет ровно этот дефект у прохода `tier` (§9, :466-473) и специально чинит его в японской ноге Д16 (:2466), но нигде не говорит, что ось Д4 — несущая ставку владельца — его повторила. Вместе с P17 (связывание меток) это работающий канал деанонимизации базы сравнения. ### 9. [важно] R76+R77 — правило Д0.4: «нижняя граница 95% ДИ» опирается на percentile-bootstrap среднего, тогда как решающий тест рига — точный перестановочный; фактическое покрытие ДИ 0.92 при n=16/32, а не 0.95; правило требует ОБЕ границы внутри ±1.50 (то есть TOST, а названо non-inferiority), поправку Холма не несёт, и его мощность нигде не посчитана (при равенстве армов шанс получить «НЕ ХУЖЕ» — 0.80…0.27 в зависимости от sd, для A6 при n=16 недостижим). **Почему важно:** Д14.6 п.2 опирается на Д0.4, чтобы объявить исход по H-2а «тем же и ТВЁРЖЕ». Прибор, которым эта твёрдость меряется, анти-консервативен и по построению смешивает α двух семейств вердиктов. ### 10. [важно] P31+P32 — детектор адъюдикации отредактирован МЕЖДУ четвёртым и пятым ответом адъюдикатора и на момент приёмки лежал незакоммиченным; второе условие правила П-1 («CONFIRM с пометкой: вынесен одним семейством, подтверждён адъюдикацией») в коде не реализовано вовсе. **Почему важно:** Эскалация A3/A0 — маршрут разрешения главной ставки владельца H-2б — разрешается только половиной объявленного правила, а решающий детектор менялся после прихода части вердиктов. Отчёт называет контроли адъюдикации дефектными (Д4.4), но именно эти два пункта не называет. ### 11. [важно] P08+P15 — свод и селфтест восстанавливают текст ГРУБОГО декоя правилами посадки ЧУЖОГО пака: 62/62 меток не сходятся с полем sig ключа. Печатаемая доля «цитат не найдено» завышена вшестеро (без CTRLdecoy у claude 0.8%, у sol 2.4% против печатаемых 5%); пункт годности пачки «цитата, которой нет в своём варианте», в bad вообще не записывается (itog_d4.py:102-107). **Почему важно:** «Замечаний годности 0» и строки контролей цитирования печатаются во ВСЕХ панелях фазы (Д3.2, Д6.2, Д1.2, Д12.2) как доказательство исправности прибора. Межсемейный разрыв по точности цитирования в текущей печати не виден вовсе. ### 12. [важно] P30 — замок кассы снимается процессом, который его не ставил, без проверки живости PID: после 20 минут ожидания любой процесс снимает чужой ЖИВОЙ замок и покупает клетку повторно. **Почему важно:** Это ровно класс двойной оплаты, ради которого замок заведён и который стоил эксп-22 верхней границы невозвратной пере-оплаты ≤$0.846103. Отчёт при этом рекламирует «атомарный O_CREAT|O_EXCL-замок с проверкой живости PID» (:824) — но это runs.py (журнал сессий), а не касса. ### 13. [важно] R23 — материал оси Д6 подменён на другую книгу без единого артефакта слова владельца; закоммиченный реестр требований по-прежнему называет исходную книгу, а улика R36 при этом зелёная. **Почему важно:** На этой книге стоят ось Д6 и вся японская нога H-4 (Д16). Отчёт (Д6.0:1367) утверждает «Книга заменена по слову владельца» — носителя у этого утверждения в репо нет, а единственный документ, против которого валиден conformance-гейт, называет другую книгу. ### 14. [важно] R70 — арм A1 получает втрое более слабое лечение на новой половине оси: банк на новых 16 единицах срабатывает вдвое-втрое реже, медиана флагов падает с 3 до 1. (Смежно R57/R34: 5 оплаченных клеток вернули вход ПОБАЙТНО, четыре из них — A1.) **Почему важно:** Половина единиц, на которых меряется H-2а, лечена почти никак — результат «не хуже A0» на таком материале означает в основном «мы почти ничего не сделали», а не свойство флагового контура. Отчёт этой асимметрии половин оси не печатает. --- ## Находки, которым тело отчёта ПРОТИВОРЕЧИТ ### 1. R31 + R40 (оба «критично», опровергнуть не удалось, числа пере-сняты двумя агентами независимо): канон-гейт — единственный источник «мест» для A1/A1B и A4 — на 78.4% состоит из срабатываний вида «канон в выходе ЕСТЬ, просто реже, чем термин в исходнике» (74 флага: 16 «нет вовсе», 58 «есть, но реже»); норма Д0.6 «всякий классификатор печатает частоту срабатывания на случайном входе» для canon_gaps не исполнена. **Отчёт говорит:** «Что ревью ОПРОВЕРГЛО (снято, чтобы не осталось в обороте). Канон-гейт `contour.py` подозревался в том, что меряет не то… прибор специфичен в 2.4 раза и нулевую модель проходит… Подозрение снято; остаётся мягкая правка формулировки флага.» Отчёт вынес в оборот ОДНУ сторону внутренне расколотой ревизии: этим контролем опровергнута только R68, а R31 и R40 выжили, и именно они говорят, что вход арма H-2а на 78% состоит из мест, которые чинить не надо. **Якорь:** `docs/experiments/23-editor-tier.md:977-981` ### 2. P12 + P43: пачка 69de717f3f сессии, аннулированной за сравнение вариантов, НЕ пере-сужена и осталась во всех числах; журнал карантина `annulled.txt` числит 11 файлов и 3 сессии против 15 файлов и 4 сессий на диске. **Отчёт говорит:** «…аннулировано за нарушение протокола 4 сессии (16 пачек) плюс 2 отдельные пачки; все пере-сужены, аудит транскриптов механический, у обоих семейств одинаковый.» **Якорь:** `docs/experiments/23-editor-tier.md:1248-1250` ### 3. P03 («критично», механика воспроизведена, опровергнуть не удалось): порог различимости строится на n ПОЛА (15) и применяется к средним по 31, 16 и 54 наблюдениям. При пороге, посчитанном на n самого среднего, гейт чувствительности Sol ПРОЙДЕН (1.925/2.466 против +2.963), а A3/A0 sol −3.13 порог 2.541 ПЕРЕХОДИТ → П-1 даёт CONFIRM по H-2б обоими семействами. (P39 опровергла только атрибуцию «дефект кода itog_d4» — весь риг делит на n пола, — но не арифметику.) **Отчёт говорит:** «Sol не прошёл гейт чувствительности (маржевый декой +3.06 против своего порога 3.65). Его вердикты по H-2а/H-2б понижены до описательных» и Д4.2 «A3/A0 = −2.21 (claude) и −3.11 (sol, свой порог 3.65 не перешёл)… НЕ ПОДТВЕРЖДЕНА». Находка процитирована в Д14.13:2357 одной строкой и нигде не применена — то есть отчёт печатает вердикты, которые сам же несёт как перевёртываемые. **Якорь:** `docs/experiments/23-editor-tier.md:1227-1229 (и 1184-1188)` ### 4. P42: по буквальной строке пре-рега П-1 семейство, не взявшее маржевый контроль (П-2), АННУЛИРУЕТСЯ на пачке; Sol маржевый гейт не взял. Тогда по A1B/A0 остаётся одно семейство и вердикт — «эскалация», а не CONFIRM. **Отчёт говорит:** «H-2а … ОПРОВЕРГНУТА (CONFIRM). A1B/A0 = −3.53 (claude) и −4.73 (sol); оба семейства перешли СВОЙ порог в одну сторону» — и повторно в Д14.6 п.2 «оба семейства перешли свой порог». Отчёт печатает ОБА пре-рег-правила (:1070 и :1227), исполняет мягкое и нигде не объявляет этот выбор девиацией. **Якорь:** `docs/experiments/23-editor-tier.md:1179-1182` ### 5. P19 + P25: донор декоя — арм A0 во всех 62 пачках оси Д4; норма «донор уравнен по армам» не исполнена и нигде не объявлена невыполненной (в реестре её улика подменена гейтом чужого пака verify23.py). **Отчёт говорит:** Д0.6 печатает норму как принятую этой фазой: «Донор декоя уравнен по армам; судье запрещено сравнивать варианты между собой и читать их рядом», а Д4.7 сводит контроли фазы в таблицу «пробел → чем закрыт» без этой строки. **Якорь:** `docs/experiments/23-editor-tier.md:830` ### 6. R09 (селфтест runs.py даёт 15 проверок, а не 16), P30 (замок КАССЫ снимается чужим процессом без проверки живости PID), R49 (атрибуция судей ключуется на mtime, а всё дерево ~/books пере-штамповано одной датой 2026-08-10 22:01). **Отчёт говорит:** «Судейские сессии регистрируются ДО запуска (`eval/dovodka/runs.py`, кап 80, атомарный `O_CREAT|O_EXCL`-замок с проверкой живости PID, селфтест 16/16). Гонка сессий по одному токену механически невозможна». **Якорь:** `docs/experiments/23-editor-tier.md:823-825` ### 7. P44: на 4 единицах из 31 клетка A4 побайтно равна A0 (фиксер не исполнил ни одного указанного места), то есть часть «неотличимости» A4 от эталона получена по построению, а не замером. **Отчёт говорит:** «A4 — кандидат в прод. Единственный арм, неотличимый от боевого по судье (разрыв 0.11 при пороге 1.65) и при этом поднимающий канон с 0.892 до 0.937… Это прямой ответ на заказ :86-87.» Ровно такое вскрытие отчёт делает для английского близнеца E4 (Д11.4) и для zh A4 не делает. **Якорь:** `docs/experiments/23-editor-tier.md:1214-1216` --- ## Инструменты, признанные негодными внутри ревизии * promptdiff.py — R00 и R01, ОБА «критично», опровергнуть не удалось. СЕГОДНЯ ЗЕЛЁНЫЙ: `eval/.venv/bin/python eval/dovodka/promptdiff.py en-ru` и `ja-ru` → EXIT=0, «ПАР-ПРОМПТЫ КОНСИСТЕНТНЫ», необъявленных строк 0. Обе дыры живы в коде: `promptdiff.py:119` по-прежнему `line.startswith(pref)` — хвост «объявленной» строки не проверяется ничем (а сам текст объявления в ALLOWED утверждает «Остаток строки совпадает дословно»); отсутствующий файл РОЛИ не роняет гейт, потому что `main()` перебирает `d.glob('*.md')` — падает только отсутствие всего каталога пары. Под зелёным гейтом стоят ФД-B, ФД-G и обе новые оси. * canon.py — R07 «важно» (снятая ревью классификация по-прежнему считается и пишется в артефакт). СЕГОДНЯ ЗЕЛЁНЫЙ: EXIT=0. Дефект жив: прогон заново персистировал `~/books/dovodka/canon- dissect.json` — те же 24 записи с полем `cls` (парафраз 19 / другой 4 / исчез 1) и полем `why` из случайных слов окна ('этот','родов','дочь','её','Он'). То есть носитель-артефакт Д5, объявленный «спецификацией канон-фиксера», продолжает отдавать машинно-читаемыми данными ту разметку, которую Д5 объявляет недействительной. ⚠ Побочный эффект моей проверки: canon.py перезаписал этот файл (mtime 15.08 22:44); содержимое совпадает с зафиксированным ревизией, потерь нет. * material_ja.py — R05 «важно» (фильтр AI-меток объявлен механическим, кода нет; провенанса книги нет ни одним артефактом) и R06 «важно» (приколка манифестом не исполнена). СЕГОДНЯ ЗЕЛЁНЫЙ: EXIT=0, 9 единиц из 9 разных глав. R05 ЖИВ: `AI直接使用`/`AI支援`/`生成AI` встречаются только в докстринге (:11-14), кода фильтра нет, артефактов провенанса (n7233mn, дата публикации) нет. R06 в основном ПОЧИНЕН: появился читатель манифеста (`units()` :151-154), `manifest-ja.json` на диске, потребители — ja_axis.py, ja6.py, d7_self.py, bank.py. * axiscal.py — R03 и R04 «важно» (заражение вычитает счёт цитат из суммы осевых баллов; нулевой модели нет, шансовый пол семейств различается в 4.5×). СЕГОДНЯ ЗЕЛЁНЫЙ: EXIT=0. Дефекты живы: строка `:228` по-прежнему печатает `заражение = off − base`, а во всём файле нет ни одного упоминания случайного входа / шансового пола. Норма Д0.6 в самом свежем $0-классификаторе не исполнена, при том что на axiscal ссылается П-5 при выносе ТЕРМИН из несущей суммы. * itog_d4.py — P03, P07, P08, P15, P44 (порог на n пола; гейт честности пола не гоняется; декой восстанавливается чужими правилами посадки; контроль «близнец» не гоняется). СЕГОДНЯ ЗЕЛЁНЫЙ: EXIT=0 и печатает те самые вердикты — «A1B/A0 → CONFIRM», «A3/A0 → ЭСКАЛАЦИЯ К АДЪЮДИКАЦИИ», «A6/A0 → не подтверждено ни одним семейством». * contour.py --selftest — R48 «важно» (селфтест утверждает тавтологию и пропустил три из пяти известных дефектов). СЕГОДНЯ ЗЕЛЁНЫЙ: EXIT=0, «ХАРНЕСС ГОДЕН». Сами дефекты, которые он пропускал (Э-4, Э-5, Э-6), в отчёте объявлены и починены; тавтологичность проверок в отчёт не попала. * runs.py --selftest — R09 «мелко» (заявлено 16/16, исполнение даёт 15) и R49 «важно» (атрибуция на mtime пере-штампованного дерева). СЕГОДНЯ ЗЕЛЁНЫЙ: EXIT=0, «ЖУРНАЛ ГОДЕН». Отчёт (:824) продолжает печатать «селфтест 16/16». * sud.py --selftest — P18 и Д14.7 п.5 самого отчёта («на трёх осях из четырёх сертифицирует чужую панель», зашит на армы d4). СЕГОДНЯ ЗЕЛЁНЫЙ: EXIT=0, «СУДЕЙСКИЙ ХАРНЕСС ГОДЕН» — то есть зелёный вхолостую ровно так, как описано. * paritet.py — P13 (для двух пачек прогона-валидации паритет обвязок не проверялся ничем) и оговорка самой ревизии «сверяет файлы репо, а не отправленное». СЕГОДНЯ ЗЕЛЁНЫЙ: EXIT=0, «ПАРИТЕТ ОБВЯЗОК СОБЛЮДЁН». * conformance.py --final — R43 и R44 «критично» (12 строк-заголовков считаются требованиями с пустой уликой, поэтому режим сдачи непроходим по построению; экранированный пайп в markdown-таблице уходит в shell литералом, из-за чего R37 зелена всегда, а R55 вечно красная). СЕГОДНЯ КРАСНЫЙ, но по ТРЕТЬЕЙ причине: EXIT=1 с «⛔ реестр отличается от закоммиченного» — то есть до структурных дефектов дело даже не доходит. Отчёт несёт красноту гейта (Д11.6) и дефект парсера у R55 (Д8 п.12), но не несёт того, что --final не может позеленеть ни при какой полноте пака. * adjud.py — P00, P01, P02 «критично» (обрезка имён осей регексом; контроль сговорчивости не слепой; посадкой считается любая цитата из декоя). ПОЧИНЕНО и отражено в отчёте (Д4.4 и Д14.8 Г-1…Г-4): сегодня `adjud.py --controls` EXIT=0, «форма карточки классы не выдаёт — контроли пригодны». Не отражены только P31 (детектор менялся после части вердиктов, незакоммичен) и P32 (второй половины правила П-1 в коде нет). * verify22.py — R26/R50/R61 «важно» (гейт чужого пака красный, число выведено из mtime). СЕГОДНЯ ЗЕЛЁНЫЙ: `eval/.venv/bin/python eval/tenant_panel/verify22.py` → EXIT=0, «ВСЕ ЧИСЛА ОТЧЁТА СХОДЯТСЯ». Эррата Э-14 отчёта соответствует состоянию на 11.08 и с тех пор устарела в лучшую сторону. --- ## Итог сверки Разобрал оба артефакта. Схема находок: revizia-fazy-D-11-08.json — 8 строк «checked» + 82 находки (severity · title · evidence · consequence · fix · verdict{refuted, why}), 23 критично / 40 важно / 19 мелко, опровергнуто ревизией 15; priemka-D4-14-08.json — 4 строки + 49 находок (то же плюс поле grounded, без fix), 10/26/13, опровергнуто 7. Итого 131 находка, из них 99 в классе критично+важно. Главная поправка к постановке задачи: утверждение «ни разу не процитированы» верно про ПУТИ ФАЙЛОВ, но не про содержание. Эррата Д0.11 (:898-981) прямо начинается словами «Ревью 82 находок … (67 выжили)» и разносит 14 из них по пунктам Э-1…Э-14; часть находок приёмки D4 разнесена по Д4.4, Д14.8, Д5, Д11. По существу отражены 66 находок из 131, не отражены 65. Из «отражённых» шесть существуют ТОЛЬКО как однострочный перечень в Д14.13 (:2353-2366) — секции, которая сама говорит, что разбор не сделан: promptdiff-префикс, promptdiff-отсутствующий-файл, canon-классификация, material_ja-фильтр, «порог на n пола» (P03) и «p1 строже p2» (P16). Из них P03 отчёт печатает как перевёртываемый вердикт и всё равно печатает вердикт. Что зона заметила и не передала — 14 позиций в поле missing, по убыванию: два вердикта по гипотезам владельца зависят от необъявленных решений о составе пачек (P13 переворачивает H-1 в «перешёл порог»; P12 — оставленная пачка аннулированной сессии двигает все числа обоих семейств); непрогнанный гейт честности пола снял бы боевые числа claude — семейства обоих CONFIRM (P07); единственный CONFIRM фазы стоит на выборе между двумя противоречащими пре-рег-правилами (P42); «кандидат в прод» A4 на 4 единицах из 31 нулевой по построению (P44); калибровка порога названа двумя выжившими находками смещённой в ПРОТИВОПОЛОЖНЫЕ стороны (R73 против P40) — то есть неизвестна по знаку; axiscal, определивший состав несущих осей, не имеет нулевой модели (R03/R04). Семь мест, где тело отчёта прямо противоречит выжившей находке, с якорями — в поле contradicted; самое тяжёлое: :977-981 объявляет подозрение к канон-гейту «снятым», хотя этим контролем опровергнута лишь одна из трёх находок класса, а две критичные (R31, R40) выжили и говорят, что 78% входа армов A1/A1B состоит из мест, которые чинить не надо. Инструменты: из шести признанных внутри ревизии негодными пять сегодня ЗЕЛЁНЫЕ с живыми дефектами — promptdiff.py (обе критичные дыры в коде на месте, `:119 startswith(pref)`), canon.py (артефакт по- прежнему несёт снятые классы), material_ja.py (фильтра AI-меток в коде нет), axiscal.py (ни строки про случайный вход), itog_d4.py; conformance.py --final красный, но по третьей причине. Починены и отражены только контроли adjud.py (Д14.8) и verify22.py. Ничего не правил и не покупал; единственное изменение на диске — canon.py при прогоне перезаписал ~/books/dovodka/canon-dissect.json своим же прежним содержимым (24 записи, парафраз 19 / другой 4 / исчез 1).