Зачем мне эта тема сейчас
Я долго пытался выбрать сторону. То казалось правильным «только ловить», то — «только понимать, как устроен обход». Оба пути в одиночку быстро начинали врать — красиво, убедительно и неправильно.
Если я пишу только детектор, я обрастаю теориями. «Вот это точно автоматизация». «Вот это точно живой человек». Теории любят тишину. Пока напротив нет контролируемого браузерного контура, на котором гипотезу можно сознательно сломать, она живёт слишком долго и обрастает исключениями. Исключения я начинаю называть «особыми случаями», потом «шумом», потом просто перестаю их видеть.
Если я пишу только исследовательский Chromium, я начинаю оптимизировать «чтобы было похоже». Но похоже на что? Без зеркала детекта легко подогнать внешний вид под фантазию лаборатории, а не под реальную согласованность слоёв: заявления браузера, поверхности Web API, поведения во времени, сети как контекста. Получается красивый стенд, который убеждает автора и врёт эксперименту.
Поэтому я держу два зеркала в одной комнате. Одна рука собирает контур, который ищет противоречия. Другая — браузер, на котором эти проверки можно честно провалить и увидеть, где я сам себя обманул. Это не раздвоение личности и не «игра за обе команды ради хайпа». Это способ фальсифицировать собственные идеи быстрее, чем они успеют стать догмой.
Коротко: мне нужна лаборатория, а не трибуна.
Как я пришёл к формату «детект ↔ билд»

Сначала у меня был только один полюс — «поймать странность». Странностей в вебе хватает: заявления User-Agent, подсказки Client Hints, графика, воркеры, сенсоры, сеть. Каждая странность провоцирует правило. Правило провоцирует ложное срабатывание. Ложное срабатывание провоцирует ещё одно правило. Через месяц я уже не помнил, какую гипотезу я вообще проверял.
Потом появился второй полюс — «собрать свой Chromium и посмотреть, что изменится». Это опьяняет иначе: контроль переменных, теги исходников, ощущение, что мир наконец измерим. Но без встречного вопроса «а что именно я пытаюсь согласовать?» билд превращается в коллекцию патчей «на всякий случай».
Стык двух полюсов случился в простой мысли. Если я не могу воспроизвести класс противоречия на контролируемом браузере, я плохо понимаю противоречие. Если я не могу сформулировать противоречие словами детекта (без магических ярлыков), я плохо понимаю, что меняю в браузере.
Так родился ритуал двух зеркал: гипотеза → открытый источник/рамка → прогон на эталоне (живой телефон / обычный Chrome) → прогон на исследовательском контуре → вывод «что согласовалось / что нет» → что я не буду публиковать.
Общедоступная рамка

Я стараюсь опираться на публичную грамотность, а не на «секретный соус».
В материалах detect.expert мне близка идея сдвига: от простого декларативного чтения «что есть в navigator» к более честной проверке согласованности заявленного профиля с тем, что реально измеряется. Там же звучит критика культа одного большого хеша полей — и это хороший противовес слайдам про «уникальный отпечаток навсегда». Мне не нужно соглашаться со всеми их цифрами точности; мне нужна инженерия мышления.
Исходники Chromium для меня — измерительный прибор. Я могу зафиксировать версию, понять, откуда берётся поверхность Web API, и отделить «так устроен движок» от «так я себе нафантазировал антидетект». Это литература и лаборатория одновременно: открытый код, открытые release notes Chrome, открытые споры в issue tracker.
Отдельно я держу в голове простую истину из публичных consistency-инструментов вроде x-bot.tech: клиентский JavaScript классифицирует поверхность, а не выдаёт судебную экспертизу «человек / бот» и не доказывает физическую ОС. Если инструмент честен с читателем, он так и пишет. Я хочу той же честности в своём дневнике.
Документация по User-Agent Client Hints добивает важный гвоздь: даже «официальные» подсказки браузера бывают урезаны политикой приватности. Заявление — гипотеза. Гипотезу проверяют другими слоями, а не боготворят.
Что я наблюдаю в лабе общими словами
Картина повторяется достаточно часто, чтобы стать методом.
Когда работает только детектор
Я ловлю себя на желании «добавить ещё одну проверку». Без зеркала билда проверка обрастает ложными срабатываниями на живом быту: человек в приватном режиме, человек на VPN, странный драйвер GPU, урезанный User-Agent, редкая локаль, старый телефон, корпоративный прокси. Детектор начинает путать шум жизни с автоматизацией — и я получаю «победу», которой стыдно.
Типичный внутренний монолог: «ну это же странно». Странно — да. Автоматизация — не следует автоматически. Между этими словами должна быть пропасть, заполненная контекстом.
Когда работает только билд
Я ловлю себя на желании «подтянуть ещё один слой, чтобы выглядело роднее». Без зеркала детекта легко чинить симптом в одном месте и не заметить, что другая «комната» браузера уже говорит иначе: другой контекст исполнения, другой сетевой слой, другое поведение во времени. Получается декорация согласованности — витрина для автора.
Типичный внутренний монолог: «стало зеленее на публичном чекере». Хороший дымовой тест. Плохой диплом.
Когда зеркала смотрят друг на друга
Вместе контуры работают как взаимный фальсификатор. Гипотеза либо держит удар с двух сторон, либо умирает. Мне нужны быстрые смерти гипотез. Долгоживущая красивая ошибка дороже короткого стыда.
Ещё один повторяющийся урок: успех в публичном «бот-чекере» и успех в думающей лаборатории — разные виды успеха. Чекер учит алфавиту поверхности. Лаборатория учит не врать себе про смысл букв.
Один день ритуала (без секретов)
Как это выглядит practically, без внутренних имён сигналов.
Утром я беру одну гипотезу на человеческом языке. Например: «если браузер заявляет одну версию, а поверхность API выглядит как другая эпоха — это противоречие заявления и измерения». Гипотеза намеренно общая. Её можно обсуждать по release notes и открытым consistency-страницам.
Днём я смотрю эталон: обычный браузер на живом устройстве. Не чтобы «снять отпечаток навсегда», а чтобы понять бытовой шум: что прыгает само, что стабильно, что зависит от разрешений и сети.
Вечером я смотрю исследовательский контур Chromium с одной контролируемой переменной — не сотней сразу. Если я меняю всё подряд, я не узнаю, что именно сломало согласованность.
На выходе у меня не «список побед». У меня журнал: гипотеза; что подтвердилось; что умерло; что оказалось бытовым шумом; что я не буду тащить в публичный текст.
Что это меняет в детекте и в билде
В детекте я учусь формулировать вывод как противоречие слоёв, а не как ярлык личности. Фраза «заявление не сходится с измерением» честнее, чем «ты бот». Ярлык требует контекста, истории, поведения, иногда — признания неопределённости. Противоречие можно показать и обсудить. Ярлык часто служит лени.
Практически это меняет и ритм. Я реже добавляю проверки «на всякий случай» и чаще спрашиваю: какую гипотезу это убивает? Если ответ «никакую, просто тревожно» — проверка подозрительна уже на входе.
В билде я учусь ставить цель эксперимента иначе. Не «пройти неизвестный антифрод бренда X». А «проверить, держится ли согласованность заявления и поверхности при контролируемом изменении переменной». Это другая этика и другой критерий «готово».
Я реже радуюсь «стало зеленее на чекере» и чаще спрашиваю: что именно согласовалось — и что могло остаться противоречивым за кадром, в другой комнате браузера или на другом слое (поведение, сеть)?
Ошибки, которые я уже совершал (и буду совершать)
Я путал редкость с враждебностью. Редкий GPU-стек или странный timezone сами по себе не доказывают автоматизацию.
Я путал стабильность с правдой. Стабильный набор полей может быть стабильно несогласованным.
Я путал контроль эксперимента с контролем чужого продакшена. Моя лаба измеряет мои гипотезы. Она не даёт мне морального права публиковать «как обойти X».
Эти ошибки не исчезают навсегда. Два зеркала просто делают их заметнее раньше.
Чего я не скажу и почему
Я не публикую внутренние пороги, каталоги сигналов продакшена, схемы привязки сессии и рецепты «как пройти сайт X». У серии есть устав: грамотность слоёв — да; помощь в злоупотреблении конкретными системами — нет.
Я также не обещаю «непробиваемый» исследовательский браузер. Кто обещает невидимость, обычно продаёт сказку или вредит. Я обещаю дневник: что проверял, на каких открытых основаниях, где ошибся, что переформулировал.
Я не разбираю в этой серии живые регрессии чужих боевых антифродов как инструкцию. Это другой жанр — и он сознательно вынесен за красную линию.
Короткий вывод
Два зеркала — способ не врать себе. Детект без контролируемого браузера слепнет в теории. Браузер без детекта оптимизирует не ту цель. Я держу оба контура, чтобы гипотезы проверялись на мне же — быстро, честно и без театра войны продуктов.
Дальше в серии я зафиксирую жанр дневника (почему это не «кто кого обошёл») и главный язык лаборатории: согласованность вместо культа одного хеша.
