← Все релизы EN  RU

Контроль изменений — пятница, 14 августа

v2.2.0

Это уже в проде: уехало в магазин в пятницу утром, поэтому всё описанное ниже покупатель уже видит — включая строки с пометкой «на dev». Страница написана в четверг, и эти пометки говорят, где изменение стояло тогда. Тем же утром вышел второй, меньший релиз: он исправил ссылку в каталоге, которую сломал первый. После этого Денис прошёл изменённые страницы на живом магазине и ничего сломанного не нашёл.

Пятьдесят три изменения: двадцать восемь на сайте магазина, шестнадцать в сервисах заказов и оплаты, семь в поиске и два в данных каталога и внутренней отчётности. Двадцать из них рассказаны ниже целиком; остальное — тесты и внутренняя обвязка, по абзацу на каждое.

Написано в четверг по той сборке, которая уезжает в пятницу. Все замеры ниже сняты в среду и четверг, до релиза, потому что после него «до» уже не увидеть.

Уезжает на сайт в пятницу

Уже на сайте со среды

Сделано, но пользоваться пока нельзя

Четыре вещи, которые стоит знать перед списком

Четыре из семи изменений в поиске уже на сайте — поисковый сервис перевели на текущую сборку в среду, 12 августа, до этого релиза. Здесь они перечислены, потому что относятся к этому циклу. У трёх, у которых ниже есть своя карточка, стоит пометка «уже в проде»; четвёртое — релизная проверка, она в разделе «Внутреннее». То же самое с изменением в каталоге Kuhn — его применили прямо в живой базе.

Ссылка на оплату для клиента готова, но пользоваться ей пока нельзя: нужна таблица, которую должен добавить Alex, — без неё ни один клиент не оплатит ссылку. Уезжает полностью готовой, но не готовой к включению.

Два изменения на сайте смерджены вне этого среза и не входят в него: одно легло 7 августа, уже после того релиза, второе — 13 августа. Ни одного из них на сайте нет.

Ещё одно изменение в сервисах не попало в этот список, и, похоже, должно поехать этим же поездом: фикс, смердженный 13 августа, — заказ теперь может прочитать только тот клиент, который его сделал. Это вопрос безопасности, решение нужно принять в пятницу. Отдельно: десять изменений в сервисах с прошлого цикла до сих пор не на сайте, и одно из них — оформление заказа без карты для клиентов с открытым счётом в Clinton — это настоящая возможность для клиентов, которая лежит вне прода.

Оформление и оплата — 2

Сотрудник собирает корзину за клиента и отправляет ссылку для оплаты онлайн Vova на dev новое front#3488 ps#572

Что это Сотрудник собирает корзину за клиента, ставит цену доставки и получает ссылку, которую можно отправить. Клиент открывает ссылку, видит детали и сумму и платит картой или кошельком вроде Apple Pay. Это закрывает три вида заказов, которые сегодня вываливаются из обычного оформления в телефонный звонок: адрес за пределами США, деталь, которой нужна грузовая доставка, и заказ, принятый по телефону. Дальше заказ приходит тем же путём, что и заказ с сайта, а цены перепроверяются в момент, когда клиент нажимает оплату. Обычное оформление не тронуто.

Как проверяем Войти как сотрудник, собрать корзину на странице расчётов, отправить ссылку, оплатить тестовой картой и убедиться, что заказ появился с номером и пришло письмо-подтверждение. Именно один реальный заказ от начала до конца закрывает работу; пока проходят 948 платёжных тестов, 36 новых.

Доказательства Спрошено прямо у обоих платёжных сервисов, чтобы сайт и его кеш вообще не участвовали.

Что спросилипрод сегодняcrop-dev.app
Оплатить расчёт по его ссылке 404 — такого адреса не существует Отвечает собственным сообщением «Quotes are not configured on this deployment» — адрес есть, и до него дошли
Соседний адрес, который это изменение не добавляет, — как контроль 404 404 — значит ответ выше относится именно к новому адресу, а не к заглушке на всё
Здоровье сервиса — контроль, что оба подняты 200200

Снимка нет, и пользоваться этим пока нельзя. «Не отвечает ничего», а затем адрес, отвечающий настоящим сообщением, — это честные «до» и «после», а контроль исключает заглушку на всё. Дальше — стоп. На тестовой копии расчёты выключены, поэтому ссылку получить не удалось, оплату провести тоже, и заказ искать негде; а форма сотрудника требует входа, который мы не можем воспроизвести, — поэтому и снимать нечего. Оплатить ссылку нельзя вообще, пока Alex не добавит таблицу, которая хранит расчёты. Снимок и реальный заказ здесь появятся, когда это включат.

Откат или доводка Откат — это только новые страницы, ничего из того, чем покупатель пользуется сегодня, от них не зависит, и ни одна ссылка с сайта ещё не уходила.

Стоимость доставки возвращается сразу, а не заставляет покупателя ждать до полминуты Vova на dev фикс ps#585

Что это Когда покупатель спрашивает стоимость доставки, ответ теперь уходит в тот момент, когда посчитан. Раньше мы придерживали ответ, пока заодно сохраняли его копию, и на сервере, у которого сломалось соединение с базой, это сохранение занимало от двадцати до тридцати секунд — покупатель столько и ждал число, готовое за секунду. Эти двадцать-тридцать секунд — цифра, записанная 11 августа тем, кто делал изменение, не наша, и сегодня её воспроизвести не удалось: для этого нужен сервер в таком состоянии. Копия по-прежнему сохраняется, просто больше никого не задерживает, а неудачное сохранение теперь поднимает тревогу, а не проходит молча.

Как проверяем 235 тестов доставки проходят, и два новых падают на старом коде — по правильной причине. Даже когда база недоступна, расчёт всё равно возвращается сразу.

Доказательства Настоящий запрос на доставку — Clinton NY → Mountain View CA, одна посылка в пять фунтов — задан по три раза каждому сервису.

Что спрашивалипрод сейчасcrop-dev.app
Расчёт доставки, по три прогона Ответ за 1.17 с, 1.29 с, 1.21 с Ответ за 1.60 с, 1.16 с, 1.24 с
Что вернулось Настоящие тарифы, включая самовывоз из магазина и фиксированные $9 То же самое
Те двадцать-тридцать секунд, ради которых изменение Замерить не удалось — это был один конкретный сервер 11 августа под живым трафиком Не применимо

Никакого «до и после» здесь сегодня нет, и числа выше нельзя читать как «до и после». Цифра в двадцать-тридцать секунд пришла с одного конкретного сервера, у которого умерло соединение с базой; эта поломка сервера — отдельная работа, и данное изменение её не чинит. Здоровый сервер и так отвечает примерно за секунду — это и замерено на обеих сторонах. Изменение делает другое: не даёт медленному сохранению вообще дойти до клиента, а это видно только тогда, когда сохранение зависает, — состояние, которое мы не можем вызвать по желанию. 1.2 секунды на проде читать как «прод сейчас здоров», а не как «до».

До пятничного выката нужно включить тревогу, которая следит за неудачным сохранением. Если её не включить, ровно та поломка, от которой это изменение защищает, станет незаметной вместо шумной.

Откат или доводка Откат — одно небольшое изменение на одном пути, и старое поведение было медленным, а не неправильным.

Поиск и каталог деталей — 6

Деталь показывается в наличии, только если она реально лежит на складе Vova уже в проде фикс search#877

Что это В понедельник John решил: единственное, что говорит о наличии детали, — это реальный остаток на складе CNH. До сих пор деталь могла показываться в наличии и с кнопкой покупки просто потому, что CNH числил её как то, что мы можем заказать, — даже когда на всех складах ноль; в таком состоянии было 127,404 детали. Теперь решает остаток. Кнопку Add to Cart реально потеряли только 1,052 детали, потому что у остальных её и не было: это страницы, которые считаются по запросу. Из 302,665 деталей, оставшихся в наличии, 11,972 лежат на собственном складе Clinton и уходят в тот же день, а 290,693 приходят со склада CNH со сроком обработки.

Как проверяем Открываем SBA185186320 — пример самого John. Пишет «нет в наличии», кнопки Add to Cart нет; на его снимке все четыре склада по нулям.

Доказательства Страница детали и запись, которая за ней стоит, прочитаны на обеих сторонах в среду.

Что читалипрод сейчасcrop-dev.app
Страница детали SBA185186320 $3,296.83 за штуку, «Out of Stock», кнопка «Notify me when back» — без Add to Cart Одинаково
Что читает Google на этой странице цена 3296.83, нет в наличии Одинаково
Запись, которая за ней стоит нет в наличии, на складе Clinton ничего Одинаково
An out-of-stock New Holland part page on a desktop
До — прод, десктоп
The same part page on the test copy
После — dev, десктоп
An out-of-stock New Holland part page on a desktop, on a phone
До — прод, телефон
The same part page on the test copy, on a phone
После — dev, телефон

Идентично. Оба сайта уже показывают эту деталь без наличия и без кнопки Add to Cart — это и есть поведение, о котором изменение.

Ноль разницы на всех поверхностях, значит, ничего не замерено. Обе стороны уже пишут «нет в наличии» и без Add to Cart — это «после». Изменение уехало на сайт в среду, до этого релиза, поэтому «до», которое оно описывает, сегодня нигде не увидеть. И сама эта деталь — плохой свидетель: при нулевом остатке на складе старое и новое правило совпадают, так что даже живое окно «до и после» не показало бы на ней разницы. Нужна деталь, на которой правила расходятся, а такая не названа.

Откат или доводка Доводка — откат снова начнёт рекламировать наличие, которого у нас нет, и это собственное решение John.

Счётчик «в наличии» рядом с результатами поиска сходится с тем, что реально выдаётся Vova уже в проде фикс search#881

Что это Ещё два места поменьше отвечали на старый вопрос. Счётчик «в наличии» в списке фильтров рядом с результатами поиска собирался из другого источника, чем плашка на самой детали: по запросу seal он утверждал 183 в наличии, а страница возвращала 18,231 результат. Теперь он считает так же, как плашка. Маленькую пометку «в наличии» в подсказках при вводе убрали, а не поправили: запрос, который стоит за этими подсказками, вообще не получает складской остаток и честно ответить не может.

Как проверяем Ищем seal. Число «в наличии» в левом списке фильтров показывает около восемнадцати тысяч — столько же, сколько половина результатов с наличием, — а не 183, как раньше.

Доказательства Один и тот же поиск прогнан по обоим сайтам и обоим поисковым сервисам в среду.

Что читалипрод сейчасcrop-dev.app
Поиск seal: счётчик «в наличии» в списке фильтров против общего числа результатов 18,149 в наличии, 11,934 нет в наличии, 31,947 результатов Одинаково
Против чисел, записанных, когда изменение делали (183 до, 18,163 после) 18,149 — уже исправленный вид, а не 183 18,149
Пометка «в наличии» в подсказках при вводе Уже нет Уже нет
Search results for seal on a desktop, with the in-stock count in the filter list
До — прод, десктоп
The same search on the test copy
После — dev, десктоп
Search results for seal on a desktop, with the in-stock count in the filter list, on a phone
До — прод, телефон
The same search on the test copy, on a phone
После — dev, телефон

Идентично, потому что это уже на сайте. Смотреть нужно на число «в наличии» в левом списке фильтров.

Окна «до и после» нет. Сайт уже отдаёт исправленное число, потому что это уехало в среду. Разница между 18,149 сегодня и 18,163, записанными во время работы, — это два дня движения каталога, а не различие между двумя копиями. Одного это изменение не закрывает и не обещает закрыть: «в наличии» и «нет в наличии» вместе дают 30,083 при общем счёте 31,947, то есть 1,864 результата не попадают ни в одну корзину. Этот разрыв одинаков на обеих сторонах и относится к отдельному вопросу.

Откат или доводка Доводка — откат вернёт счётчики, ошибающиеся на 127,000, рядом с уже исправленной плашкой.

Из данных, которые мы отдаём, убраны два оставшихся значения про наличие — на экране ничего не меняется Vova на dev фикс search#883 search#887

Что это Вместе с каждой деталью мы отдавали два лишних значения, которые уже не сходились со страницей. Первое — готовая инструкция, какую кнопку показать; она строилась только из того, можно ли по детали дать расчёт, без всякого учёта наличия, поэтому на 835 деталях она говорила Add to Cart, хотя тот же самый ответ помечал их как «нет в наличии». Второе — значение про наличие, скопированное прямо из списка CNH; на 127,490 деталях оно расходилось с плашкой. Ни то ни другое ничего не читало — проверили по сайту, сервисам заказов и сервису CNH, — потому что сайт и фид для Google определяют кнопку сами. Оба значения удалены, а не починены.

Для покупателя и для Google это незаметно, и в этом смысл: плашка, цена и кнопка покупки не тронуты. Убраны два способа для будущей страницы подхватить неправильный ответ.

Как проверяем Открываем SBA185186320, 83924760 и SBA340293195 до и после. Строка наличия, цена и кнопка на каждой одинаковые; пропали только неиспользуемые значения.

Доказательства Кроме счётчиков выше и трёх названных деталей — никаких. Снимать нечего: видимой поверхности нет, и это как раз то, что утверждается.

Откат или доводка Откат — всего удаление трёх неиспользуемых значений, вернуть их мгновенно и безвредно.

Детали, которые мы считаем только по телефону, больше не показывают цену в один цент Vova на dev фикс front#3528

Что это Деталь New Holland, цену на которую мы даём по запросу, показывала один цент, и та же цена в один цент уходила в Google Shopping. Её соседка с тем же статусом, но без цены, вела себя правильно. Теперь сам статус закрывает продажу, цену-заглушку, цену, которую Google читает на странице, и фид Google Shopping, поэтому обе детали пишут «Contact for price». Нашёл это Denis, он же написал падающий тест, приехавший вместе с фиксом.

Как проверяем Открываем деталь New Holland CT-NHL-06404120C: должно быть «Contact for price» без кнопки покупки, а соседка CT-AGC-000050147 — без изменений.

Доказательства Обе детали прочитаны на обоих сайтах, мимо кэша, плюс то, что отдаётся Google на каждой странице, и запись, которая за ними стоит.

Что читалипрод сейчасcrop-dev.app
CT-NHL-06404120C, блок покупки «$0.01 / each · USD», «Out of Stock», кнопка «Notify me when back» «Contact for price», «Out of Stock», примечание «This part isn't priced online yet — our parts desk will send you a quote», кнопка «Ask for a price»
Что отдаётся Google на этой странице Предложение по 0.01 USD, нет в наличии Предложение не отдаётся вообще
Контроль, CT-AGC-000050147 — тот же статус, без цены «Contact for price», «Ask for a price», предложения нет Одинаково — без изменений, как и задумано
Запись за обеими, на каждом поисковом сервисе только по запросу, цена 0.01, нет в наличии То же самое — значит, фикс на сайте, а не в данных
Полная высота страницы Десктоп 5,249px, телефон 8,386px Десктоп 5,249px (без изменений), телефон 8,469px (на 83px выше)
The quote-only New Holland part page on a desktop, showing a price of one cent
До — прод, десктоп
The same part page on a desktop, showing Contact for price and Ask for a price
После — dev, десктоп
The same part page on a phone, showing a price of one cent
До — прод, телефон
The same part page on a phone, showing Contact for price and the parts-desk note
После — dev, телефон

Цена в один цент и предложение, которое Google мог бы проиндексировать, исчезли, а контроль с тем же статусом не сдвинулся — именно эта пара делает из утверждения доказательство. Лишние 83 пикселя на телефоне объясняются и отдельной истории не требуют: фраза про отдел запчастей и более широкая кнопка «Ask for a price» выше, чем «$0.01» плюс «Notify me when back». Высота на десктопе не изменилась.

Одна половина сегодня не доказана. Эта деталь на сайте сейчас не в наличии, поэтому сайт и так показывает «Notify me when back», а не рабочую кнопку покупки. Утверждение, что убрали кнопку покупки, 13 августа не воспроизводится; доказать можно цену и предложение, которое читает Google.

Откат или доводка Доводка — откат вернёт цену в один цент и кнопку покупки на детали, которые мы продавать не будем.

Фильтр брендов на странице деталей предлагает на десктопе те же бренды, что и на телефоне Vova на dev фикс front#3515

Что это На десктопе фильтр Brand на странице поиска деталей предлагал более длинный список, чем страница могла объяснить: пятнадцать брендов для галочки против девяти, о которых реально сообщает поиск. Теперь список на десктопе сходится с поиском и совпадает с тем, что телефон показывал всегда.

Как проверяем Открываем страницу деталей на десктопе и считаем бренды в фильтре Brand, вместе с теми, что спрятаны за «Show more»: пятнадцать до, девять после, и эти девять — ровно те бренды, о которых сообщает поиск.

Доказательства Оба сайта прочитаны мимо кэша: посчитаны галочки и остаток за «Show more», а потом сумма сверена со списком брендов, который несёт сама страница.

Что считалипрод сейчасcrop-dev.app
Брендов предложено на странице деталей, десктоп 8 показано плюс «Show more (7)» = 15 8 показано плюс «Show more (1)» = 9
Список брендов, который несёт сама страница, — сверка 9 брендов — с пятнадцатью предложенными не сходится Те же 9 — точно сходится с девятью предложенными
Кто из Ferris, Ventrac, McHale и Marcrest ещё предлагается Все четыре — два показаны, два за «Show more» Ferris пропал; Ventrac, McHale и Marcrest по-прежнему предлагаются
Полная высота страницы, десктоп и телефон 4,731px и 9,457px Одинаково на обеих — на телефоне фильтр живёт в выдвижной панели, поэтому там это по замыслу не видно
The parts page on a desktop before the release, with the brand filter open
До — прод, десктоп
The parts page on a desktop after the change, with a shorter brand filter
После — dev, десктоп
The parts page on a phone before the release
До — прод, телефон
The parts page on a phone after the change, unchanged
После — dev, телефон, по замыслу без изменений

Два утверждения, которые звучали про это изменение, замера не пережили и здесь не повторяются. Работу описывали как удаление четырёх брендов, которые всегда возвращали пустоту. Реально пропал только один из четырёх — Ferris; Ventrac, McHale и Marcrest всё так же в фильтре, и за каждым тысячи деталей. И мы вообще не смогли замерить, что возвращает галочка на бренде: галочка не входит в адрес страницы, поэтому запросить её снаружи нельзя. Адрес, который выглядит как замена галочки, с собственными числами страницы не сходится, так что мы его не приводим. Замерено и сходится другое: список ужался с пятнадцати до девяти.

Откат или доводка Откат — один участок экрана, данные не меняются; вернётся длинный список.

Анимацию открытия панели поиска задаёт одно правило, а не два наперегонки Vova на dev фикс front#3521

Что это К панели поиска в шапке одновременно применялись две анимации открытия, и какую увидишь, зависело от того, в каком порядке собрались стили. Сегодня выглядело правильно по счастливой случайности. Теперь применяется ровно одна, и она не поменяется у нас за спиной в следующий раз, когда пересоберётся что-то постороннее. На экране ничего не выглядит иначе.

Как проверяем Открываем поиск в шапке на десктопе и смотрим, как появляется панель: движение то же, что и сегодня, и на панели ровно одна анимация.

Доказательства Не снимали, и ничего бы это не показало — всё утверждение в том, что панель выглядит и движется ровно так же, как сейчас. Меняется то, что так и останется.

Откат или доводка Откат — изменение стилей на одной панели.

Страницы брендов — 2

Детали других производителей больше не берут цену New Holland, когда номера случайно совпадают Vova уже в проде фикс search#869

Что это Один номер детали может принадлежать нескольким производителям. Когда номер детали Kuhn или Ferris совпадал с номером детали New Holland, наш каталог тихо переносил на неё цену и складской остаток New Holland. Это прекращено: деталь показывает цену своего производителя или не показывает никакой. На живом каталоге это убрало чужую цену у 5,927 деталей и чужой остаток у 37,077, а все детали New Holland остались ровно такими же.

Как проверяем Открываем страницу детали 504189487 (Ford). Цены нет, написано «нет в наличии». Деталь New Holland 47927519 по-прежнему показывает $91.36.

Доказательства Страница детали прочитана на обоих сайтах и — поскольку правда здесь в записи за ней — сама запись прочитана с обоих поисковых сервисов.

Что читалипрод сейчасcrop-dev.app
Блок покупки на 504189487 $34,103.40 за штуку, «Out of Stock», «This part was superseded», кнопка «Contact our parts desk» Одинаково, символ в символ
Запись, которая за ней стоит цена 34,103.40, нет в наличии, на складе Clinton ничего Одинаково
Где оно Изменение уже несёт Смерджено 8 августа; поисковый сервис пересобирался ещё 13 августа
The superseded New Holland part page on a desktop
До — прод, десктоп
The same part page on the test copy
После — dev, десктоп
The superseded New Holland part page on a desktop, on a phone
До — прод, телефон
The same part page on the test copy, on a phone
После — dev, телефон

Идентично, потому что это уже на сайте. Пара показывает цену и строку наличия в том виде, в каком они читаются сейчас.

Окна «до и после» здесь нет ни на одной из поверхностей. Обе стороны отвечают одинаково, а значит, сайт уже отдаёт исправленное поведение и «до» больше нет. Это сходится с тем, как изменение устроено: оно правит то, как база каталога соединяет две таблицы, а оба сервиса читают одну и ту же базу, поэтому применение сдвинуло оба сразу. Точно подтвердить, когда поиск на сайте пересобирался в последний раз, не вышло — инструмент, который это показывает, дважды отвалился по таймауту, — так что всё держится на одинаковых ответах двух сервисов, а это и так более сильное доказательство. Цена выше сама по себе ничего не доказывает ни в ту, ни в другую сторону: сравнивать её не с чем, замера до фикса нет.

Откат или доводка Доводка — откат вернёт детали чужих производителей на цены New Holland, а оно уже в проде и ведёт себя тихо.

Пустая страница схем бренда предлагает категории для клика вместо мёртвой сетки Denis на dev фикс front#3533

Что это Вкладка со схемами сама открывает самый крупный тип техники. Когда по этому типу не приходило ни одной модели — как у New Holland Construction, — покупатель получал полный каркас страницы, где все счётчики по нулям, пустую сетку, ни одного сообщения и никакого выхода. Теперь она откатывается к выбору категорий с настоящими счётчиками, так что кликнуть всегда есть куда. Покупатель, который запросил этот тип прямо по адресу, по-прежнему получит честный пустой ответ.

Как проверяем Открываем страницу схем New Holland Construction, когда список моделей по ней приходит пустым: должны быть кликабельные категории со счётчиками, а не пустая сетка с нулями.

Доказательства Оба сайта прочитаны мимо кэша: сравнивали видимый текст, плитки категорий и счётчики рядом с ними.

Что читалипрод сейчасcrop-dev.app
Страница ответилаДа, за 3.50 сДа, за 6.46 с
Видимый текст, если убрать скрипты 10,624 символа10,624 символа — одинаково
Кликабельных плиток категорий1313 — тот же набор
Счётчики рядом с плитками112, 23, 38, 74, 70, 61 и так далееОдинаково
Счётчик в панели «Showing all 404 models» «Showing all 404 models» — это не то пустое состояние, ради которого изменение
The New Holland Construction diagrams page on a desktop
До — прод, десктоп
The same page on the test copy
После — dev, десктоп
The New Holland Construction diagrams page on a desktop, on a phone
До — прод, телефон
The same page on the test copy, on a phone
После — dev, телефон

Идентично вплоть до пикселя. Пустое состояние, которое чинит это изменение, сегодня не возникает ни на одном из сайтов, поэтому пара показывает, что рабочее состояние не тронуто.

Замерить это не удалось, и честный результат — вообще никакой разницы. Сломанного состояния, которое чинит это изменение, сегодня не случается: список моделей возвращает 404 модели на обеих сторонах, поэтому сайт и так показывает кликабельные категории со счётчиками. Это «не смогли замерить», а не доказательство отсутствия изменений — на сломанный путь не заходили ни с одной стороны, так что фикс ни проверен, ни опровергнут.

Откат или доводка Откат — один участок экрана; вернётся мёртвая пустая сетка.

Страницы техники — 1

Плитки строительной техники открывают строительный раздел напрямую, а не через редирект Vova на dev фикс front#3516

Что это Две плитки на странице техники — Skid Steers и Construction Equipment — вели на сельхозадрес, который тут же перекидывал в строительный раздел. Теперь они ведут туда напрямую. Та же перекидывающая ссылка стояла и в блоке навигации на странице деталей, и Google ходил по ней при каждом обходе; её больше нет. Строительный раздел по-прежнему доступен по ссылкам брендов рядом.

Как проверяем На странице деталей считаем сельхозплитки навигации: одиннадцать, строительной среди них нет. На странице техники обе строительные плитки открывают строительный раздел без редиректа.

Доказательства Обе страницы прочитаны на обоих сайтах мимо кэша, считались различные сельхозссылки навигации.

Что считалипрод сейчасcrop-dev.app
Сельхозссылок навигации на странице деталей1211
Есть ли среди них строительнаяДаНет — пропала
Одиннадцать, которые остались balers, commercial mowers, forage, harvesters, hay tools, loaders, mowers, planting, sprayers, tillage, tractors — плюс construction Те же одиннадцать, без construction
Страница техники ответила — контроль Да, 186,358 байтДа, 182,890 байт
Куда ведут ссылки на строительную технику со страницы техники Две: строительный раздел и одна через сельхозадрес Одна: строительный раздел. Та, что через сельхозадрес, ушла
The equipment page on a desktop
До — прод, десктоп
The same page on the test copy, unchanged to look at
После — dev, десктоп
The equipment page on a desktop, on a phone
До — прод, телефон
The same page on the test copy, unchanged to look at, on a phone
После — dev, телефон

Обе страницы выглядят одинаково, и в этом смысл: изменилось то, куда ведёт плитка, а не то, что на ней. Пара приложена как доказательство, что больше ничего не сдвинулось.

Двенадцать превратились в одиннадцать, и убрана именно строительная — это совпадает с задумкой и сходится с совершенно отдельным подсчётом, сделанным для изменения блока навигации ниже на этой странице, по тем же двум документам.

Открытая половина теперь закрыта. Страница техники, прочитанная браузером на обоих сайтах: на боевом две ссылки на строительную технику — строительный раздел и одна через сельхозадрес, — а на тестовой копии только первая. Сама по себе разница в одну ссылку на странице, за которой неделя других изменений, была бы слабой; доказательством её делает совпадение с независимым подсчётом.

Откат или доводка Откат — только адреса ссылок; редирект, который сайт и так отдаёт, остаётся страховкой.

Что читает Google — 2

Триста пятьдесят восемь страниц, которые мы просим Google не индексировать, больше ему не отправляются Vova на dev фикс front#3520

Что это Страницы деталей Ferris, Kuhn, McHale и Marcrest намеренно придерживаются от Google, пока их данные дозревают, и каждая страница сама об этом говорит. При этом они всё равно перечислялись в списках адресов, которые мы отдаём Google, — из двух разных файлов; ровно про это противоречие Search Console и пишет: страница отправлена, но помечена как неиндексируемая. Теперь оба файла их не включают. Для покупателя ничего не меняется.

Как проверяем Считаем придержанные страницы брендов в списке адресов деталей и в списке адресов картинок: 358 до, ни одной после. Потом смотрим, как в Search Console падает счётчик «отправлено, но не проиндексировано».

Доказательства Оба списка адресов прочитаны на обоих сайтах, считались записи по страницам, а не совпадения по тексту.

Что считалипрод сейчасcrop-dev.app
Записей в списке адресов деталей 2,727 Замерить не удалось — файл вообще не отдаётся
Из них придержанных страниц брендов 358 — Ferris 123, Kuhn 163, McHale 41, Marcrest 31 Замерить не удалось
Те же страницы в списке адресов картинок Те же 358, с тем же разбиением — те же страницы отправлены второй раз Замерить не удалось
Почему тестовая копия молчит Открыта для Google, со списком адресов Полностью закрыта от Google по замыслу, поэтому вся история со списками адресов там выключена

«До» здесь точное и сходится само с собой: 123 плюс 163 плюс 41 плюс 31 — это 358, и те же самые 358 встречаются в обоих файлах, а это и есть то самое «из двух мест», ради которого изменение.

«После» до пятницы нигде не увидеть. Тестовая копия вообще не отдаёт списков адресов, потому что намеренно закрыта от Google. Это отсутствующий файл, а не счёт «ноль», и сообщать это как ноль нельзя. Единственное место, где изменение можно будет подтвердить, — сам сайт, после выката.

Откат или доводка Откат — фильтр на двух файлах, данные не меняются.

Ссылки «по типу техники» приходят вместе со страницей, а не серой полосой, которая заполняется потом Vova на dev фикс front#3542

Что это Блок навигации по типу техники на страницах деталей и брендов приходил после самой страницы. С выключенными скриптами было видно восемнадцать серых плиток-заглушек, которые так и не заполнялись, а на странице деталей — вообще ничего. Именно по этому блоку Google доходит до каждой страницы «бренд плюс тип», так что ни одной из этих ссылок в первой отдаче не было. Теперь они в самой странице: одиннадцать подписанных ссылок со счётчиками моделей, без заглушек, и на каждой странице на один отложенный блок меньше.

Как проверяем Забираем страницу бренда как краулер и считаем ссылки навигации в первой отдаче: 0 до, 11 после, без серых заглушек. Открываем с выключенными скриптами — плитки настоящие ссылки.

Доказательства Каждую страницу разрезали в том месте, где заканчивается первая отдача и начинается то, что заполняется позже, и считали ссылки по обе стороны от этой границы.

Что считалипрод сейчасcrop-dev.app
Страница деталей — ссылки навигации в первой отдаче против заполняемых позже 0 в первой отдаче, 12 заполняются позже 11 в первой отдаче, 0 заполняются позже
Страница бренда — то же деление 0 в первой отдаче, 11 заполняются позже 11 в первой отдаче, 0 заполняются позже
Мест на странице, которые ждут позднего содержимого, — независимая сверка Страница деталей 7, страница бренда 5 Страница деталей 6, страница бренда 4 — ровно на одно меньше на каждой, это блок навигации
Всего ссылок навигации где угодно на странице — чтобы видеть, что сдвинулась только отдача Страница деталей 12, страница бренда 11 Страница деталей 11 — та самая строительная ссылка, убранная выше, — страница бренда 11
The parts page on a desktop before the release
До — прод, десктоп
The parts page on a desktop after the change, visually the same
После — dev, десктоп
Страница бренда New Holland Agriculture на десктопе
До — прод, десктоп
Та же страница бренда на тестовой копии
После — dev, десктоп
Страница бренда на телефоне
До — прод, телефон
Та же страница бренда на телефоне, тестовая копия
После — dev, телефон

Страница бренда — вторая поверхность, которую задевает это изменение. После полной загрузки обе выглядят одинаково; сдвинулось то, что ссылки навигации теперь приходят вместе со страницей, а не дописываются потом.

Это самый чистый замер из всего набора, и он сходится сам с собой сразу тремя способами: ссылки переезжают из поздней половины в первую отдачу, количество мест, ждущих позднего содержимого, падает ровно на одно на каждой странице, а общее число ссылок сохраняется — кроме одной, убранной намеренно. Стоит сказать, почему очевидная проверка здесь ловушка: поиск по всей странице находит эти ссылки и на сайте тоже, просто они лежат в той половине, которая приходит позже.

Что это не доказывает. Мы замерили то, что отдают оба сайта, а не то, что реально рисует браузер с выключенными скриптами, поэтому «восемнадцать серых заглушек превратились в ноль» здесь не подтверждено. Пара снимков выше одинаковая — это ожидаемо и не является пустым результатом: их снимали со включёнными скриптами, а после того как скрипты отработали, блок занимает то же место в обоих случаях. Изменение в том, что приходит первым, а этого снимок показать не может.

Откат или доводка Откат — один участок страницы; при этом стоит помнить, что оно ставит запрос типов на критический путь, если поиск подвиснет.

Чтобы не падало — 6

Страницы внутри личного кабинета снова готовятся заранее, поэтому открываются без ожидания Vova на dev фикс front#3522

Что это Одна настройка в разделе кабинета попала в известную поломку в основе сайта: она выключала заблаговременную подготовку страниц для всего, что лежит под Account. Ссылки на историю заказов, адреса и всё остальное вместо этого каждый раз ждали свежего запроса. Настройка убрана. Замер под входом, насколько быстрее это ощущается, за нами, поэтому здесь описан механизм, а не число.

Как проверяем Под входом проходим по Account, Orders и Addresses с открытой панелью сети: следующая страница должна запрашиваться ещё до того, как случился клик.

Доказательства Снаружи можно было проверить только половину про безопасность — что посетителя без входа по-прежнему разворачивают раньше, чем что-либо отрисуется.

Что спрашивалипрод сейчасcrop-dev.app
Страница кабинета, без входа 307 → вход, ответ в 15 байт, ничего не отрисовывается раньше 307 → вход, одинаково
Та же страница, запрошенная так, как её запрашивает заранее подготовленная ссылка 307 → вход, с той же инструкцией кэширования Ответ байт в байт тот же

Это подтверждает то свойство, которое реально важно для безопасности: снятие настройки не открыло кабинет анонимным посетителям, и защита по-прежнему срабатывает до сборки страницы, на обеих сторонах.

Про пользу это не доказывает ничего. Заблаговременная подготовка страниц внутри кабинета — это поведение под входом, которое происходит в браузере. Снаружи, без входа, обе копии выглядят одинаково, и наблюдаемого «до и после» нет.

Откат или доводка Откат — одна строка; кабинет снова перестанет готовить страницы заранее.

Покупатель, зашедший впервые и ничего не сохранявший, больше не создаёт запись об отказе корзины, которого не было Vova на dev фикс front#3517

Что это Когда входил человек, который ни разу не сохранял корзину, сервис корзины отвечал, что корзины нет, а сайт считал это падением сервиса. Для покупателя ничего не ломалось, но каждый такой первый заход записывался как живая ошибка, а это хоронит настоящие. Теперь это читается как то, чем и является, — пустая корзина.

Как проверяем Входим под учётной записью, которая ни разу не сохраняла корзину, и открываем любую страницу: корзина пустая, ошибка сервиса корзины не записывается.

Доказательства Не снимали. Для этого нужна учётная запись под входом, которая ни разу не сохраняла корзину, — состояние, которое мы можем создать, но не увидеть снаружи, а убирается запись в нашем собственном журнале ошибок, а не что-то на экране. Покупатель и до, и после видит одну и ту же пустую корзину.

Откат или доводка Откат — одно небольшое изменение в том, как читается один ответ.

Сборка списков адресов для Google перестала перегружать наш собственный поиск Vova на dev фикс front#3519

Что это Когда мы собираем списки адресов для Google, мы спрашиваем детали у собственного поиска пачками. Мы просили по десять сразу у сервиса, который принимает две, поэтому от четырёх до восьми из каждых десяти отбивались и запрашивались заново — примерно четыреста в день. Теперь просим по две. Сами списки получаются такими же.

Как проверяем Собираем один список адресов и считаем отказы на поисковом сервисе в это окно: ноль вместо четырёх-восьми на каждые десять пачек.

Доказательства На тестовой копии не снимали — по той же причине, что и в изменении выше: тестовая копия закрыта от Google и вообще не отдаёт списков адресов, так что собирать там нечего. «До» — это счёт отказов на живом поисковом сервисе; «после» можно будет посчитать только после пятничного выката. Что видит покупатель или Google, не меняется ни так, ни этак — списки получаются те же, а их страховка не тронута.

Откат или доводка Откат — одно число; вернутся ежедневные отказы, которые мы устраиваем себе сами.

Сломавшийся сервер выходит из обслуживания и перезапускается сам, а не тормозит всех часами Denis на dev фикс ps#587 ps#590 ps#591 ps#592 ps#593

Что это В хороший день покупатель здесь не видит ничего. Один сервер расчёта доставки потерял соединение с базой и оставался в обслуживании тринадцать с половиной часов, тормозя расчёты всем, кто на него попадал. Его никто не поймал, потому что короткий ответ о здоровье, который он давал, всегда говорил «всё хорошо», что бы ни происходило. Пять изменений делают одно и то же для пяти серверов, и различия между ними намеренные.

Сервер расчёта доставки теперь говорит, что ему плохо, когда база недоступна, и примерно через две минуты такого перезапускается сам. Платёжный сервер, который стоит на том же пути оформления, перестаёт принимать трафик примерно через тридцать секунд, а перезапускается примерно через три минуты — намеренно медленнее, потому что оплата может быть в процессе и перезапуск её оборвёт. Сервер каталога деталей и сервер учётных записей получают то же самое, а сборка теперь отказывается выпускать любой сервер, у которого проверок нет или одна из них настроена неправильно; три сервера намеренно исключены, и причина по каждому написана прямо в проверке, а не подразумевается. Сервер картинок раньше отвечал «готов» что бы ни было; теперь он реально дотягивается до хранилища картинок, прежде чем ответить, с потолком в три секунды. У серверов каталожных книг была обратная проблема — они целиком выходили из обслуживания при любой икоте хранилища, хотя всё, что они отдают из базы, было в порядке; хранилище вынесли в отдельную более глубокую проверку, и именно эту глубокую проверку новая версия теперь обязана пройти, прежде чем возьмёт трафик, — она заменила релизный барьер, который не проверял вообще ничего.

Как проверяем Описание каждого живого сервера показывает на нём проверку с перезапуском. Расчёт доставки: 221 тест проходит, с теми же двумя старыми сетевыми падениями, что и раньше. Оплата: 861 проходит, 6 падают — те же шесть падений из-за локального окружения, что и раньше. Сторож сборки сообщает: пять серверов обязательны, двенадцать проверок сверено, — и если убрать проверки у одного сервера, он падает и называет его. Картинки: 13 тестов проходят против 8 раньше, и новые падают на старом коде ровно с тем неправильным ответом, который он раньше давал. Каталожные книги: при упавшем хранилище обычная проверка остаётся зелёной, а глубокая краснеет — это закреплено тестами.

Доказательства

Что спрашивалипрод сейчасcrop-dev.app
Сервер расчёта доставки, «готов?» Всегда отвечал «да» Совпадает с полным ответом о здоровье и говорит «нет», когда база недоступна
Сервер картинок, «готов?» Всегда отвечал «да» — фиксированным ответом, который ничего не проверял Сообщает результат проверки хранилища и говорит «нет», когда до хранилища не достучаться
Серверы каталожных книг при упавшем хранилище Обычная проверка говорила «нет» и выводила из обслуживания каждый из них Обычная проверка говорит «да», а глубокая — «нет»

Сегодня на сайте нет ни одной проверки здоровья, ни на одном сервере. Это и есть «до», и ради этого группа и существует. Проверка, которая перекрывает трафик к плохому серверу, доказана только на одном сервере тестовой копии — на сервере картинок. Всё, что выше, попадает на сайт впервые в пятницу.

Откат или доводка Откат — настройки плюс несколько ответов о здоровье и одна проверка в сборке; без них каждый сервер работает ровно так же, а это в точности то состояние, из которого мы уходим.

Серверы перестали доедать память до того, что их убивают; сервер учётных записей умирал пять раз за две недели Vova на dev фикс ps#597

Что это Четыре сервера медленно съедали память, пока платформа их не убивала, а сервер учётных записей убивали пять раз за четырнадцать дней, последний раз — 11 августа. Причина — настройка соединений, которая каждую минуту выбрасывала все простаивающие соединения с базой и тут же создавала их заново: примерно сорок семь тысяч пересозданий в день против горстки настоящих запросов. Возврат этой настройки к значению по умолчанию от самого производителя срезает рост примерно на сорок-семьдесят процентов. Это не вся история: остальное — известная ошибка в среде выполнения, которой мы пользуемся, исправленная в версии, на которую мы ещё не перешли, так что перезапуск сервера остаётся запасным вариантом, просто нужен он теперь заметно реже.

Как проверяем Два живых сервера одного размера работают бок о бок, запущены с разницей в шестнадцать минут: с новой настройкой рост 1.91 пункта в час, со старой — 4.69. Проверка в сборке падает, если старая настройка где-нибудь вернётся.

Доказательства Сравнение бок о бок выше и есть замер, и снят он на живых серверах, а не на самом изменении. Он честен насчёт собственного предела: рост уполовинивается, а не прекращается, и лекарство — версия среды выполнения, на которую мы ещё не перешли.

Откат или доводка Откат — настройка соединений, возвращённая к значению по умолчанию от производителя; одно значение туда-сюда, запросы и страницы не меняются.

Почти 49,000 деталей Kuhn, которые никто из поставщиков продать не может, помечены как такие — ночная проверка их пропускает Alex уже применено данные hub#396

Что это Дилерский портал Kuhn ни разу не ответил по 48,709 деталям Kuhn из нашего каталога, и закрыть этот пробел мы не можем: только 96 из них встречаются в дилерском файле остатков, и ни у одной нет номеров на замену. Теперь они помечены как детали, которые мы продать не можем, поэтому ночная проверка остатков перестаёт про них переспрашивать — а это стоило 25,000 обращений за ночь. Покупатели пока разницы не видят. Должны ли эти детали заодно исчезнуть со страниц каталога — вопрос пока открытый.

Как проверяем Посчитано прямо в живой базе: помечено 54,959 из 236,680 деталей Kuhn, что сходится с сохранённым списком из 48,709 вновь добавленных.

Доказательства Счёт выше прочитан из живой базы, там же это изменение и применили — оно не ехало через релиз, поэтому в пятницу выкатывать нечего. Здесь оно перечислено, потому что относится к работе этой недели и потому что меняет то, что делает ночная проверка.

Откат или доводка Откат — 48,709 номеров деталей сохранены списком, поэтому откат будет точным.

Внутреннее — 28 изменений, которых никто вне команды не увидит

Тесты, сборочная обвязка и обновления зависимостей. Ничего из перечисленного ниже не меняет ни одной страницы. Они собраны по тому, ради чего делались, а не перечислены по одному, и каждое из них есть со своим «до» и «после» в таблице ниже.

Тесты, которые теперь умеют входить До этой недели автоматические проверки видели сайт только глазами посетителя без входа, поэтому всё, что за стеной кабинета, оставалось непроверенным. Теперь они сначала входят — как клиент или как сотрудник, — и прогон, который вошёл никем, падает, а не рапортует «зелено». Вторая проверка доказывает, что фотография, загруженная через админку, реально доходит до той страницы, с которой её применили: New Holland там намеренно закреплён как сломанный, чтобы в тот день, когда он заработает, мы об этом узнали. front#3317 front#3325

Тесты, которые тихо перестали что-либо значить Десять проверок структуры страницы ждали разметки, которую сайт перестал выдавать месяцы назад, поэтому все десять рапортовали «пропущено» и не доказывали ничего; теперь они выполняются и проходят на каждой странице бренда. Проверка, которая не даёт клиенту заплатить вчерашнюю цену, пропускала себя ровно в тот момент, когда проявилась бы настоящая поломка, — если специально ослабить допуск по цене, она теперь краснеет, как и должна. Десять самых устаревших модульных тестов сверили с кодом, который они на самом деле покрывают: пять из них продолжали бы проходить, даже если бы описанное ими поведение тихо откатили, — теперь эти пять падают, если его откатить. Ничего не удаляли. И ежедневное сравнение, красневшее с прошлого релиза, снова честное: оно падало из-за двух исправлений, уже стоящих в проде под другими именами, то есть не охраняло ничего. front#3481 front#3518 front#3502 front#3486

Тесты, падавшие по часам, а не по поломке Под нагрузкой каждый прогон валила другая часть тестов — всегда по истечении времени, а не потому, что нашлось что-то плохое; так все и учатся не обращать внимания на красное. Спрятанный предел в полторы секунды был проставлен руками в двадцати трёх разных местах; три прогона за один день упали на 1520, 1520 и 1535 миллисекундах. Теперь это одна настройка в пять секунд, и часть тестов, которая падала, проходит 2,425 тестов. Общий предел подняли тем же способом, и два прогона подряд теперь проходят 2,434 теста вообще без падений по времени. front#3467 front#3527

Ночная проверка, которая реально платит тестовой картой Она падала двадцать восемь ночей подряд, то есть денежный путь каждую ночь оставался непроверенным. Первое исправление заставило её сначала выбирать оплату картой, а уже потом ждать полей карты — Stripe больше не показывает их сразу. Настоящее лекарство пришло через несколько дней: элемент, по которому она кликала, не имеет размера на экране, поэтому клик не доходил ни до чего; теперь им управляют напрямую. Прогон проходит впервые за двадцать девять попыток, оформляя настоящий заказ и получая номер заказа за сорок секунд. Учтите: эта проверка читает боевую копию сайта, поэтому до пятничного релиза она ничего не даёт. front#3482 front#3531

Ночные прогоны тестов Глубокий браузерный прогон выдавал один вердикт на 51 проверку и краснел все 28 ночей, что вообще запускался, поэтому его никто не читал. Теперь он разделён: восемнадцать доказанных проверок, которые обязаны оставаться зелёными и могут поднять тревогу, и тридцать две открыто отложенные — у каждой записана причина и назван владелец. Тринадцать проверок, написанных под экран телефона, не запускались ни разу — одна из них ссылалась на несуществующий файл, — и первый настоящий прогон даёт 37 пройдено, 9 упало и 3 пропущено, причём девять записаны. Девять этих ночных прогонов ещё и переехали на наши собственные машины: это примерно 118 из 187 платных минут, которые мы тратили за неделю, при лимите аккаунта, который по достижении блокирует сразу все проекты. Тех, кто ждёт проверки своего PR, это не задевает. front#3504 front#3507 front#3525

Инструмент для дизайна, которым неделями никто не пользовался Каждое изменение, которое трогало экран, ставило в очередь задачу: она делала свою работу за 13 секунд, потом жгла двадцатиминутный таймаут и рапортовала «отменено». Инструмент, его 40 примеров и эта задача удалены; три проверки, которые реально охраняют сайт, по-прежнему отчитываются под теми же именами. front#3500

Держим начинку свежей Основа сайта переезжает на текущую сборку — это закрывает шесть предупреждений безопасности и ещё четыре в библиотеке картинок и удаляет исключение, которое мы за собой таскали. Ничего не отрисовывается иначе. Отдельно: проверка безопасности на нашей собственной сборке снова проходит — она падала на двух предупреждениях в маленькой библиотеке и блокировала все сборки; оба теперь записаны как недостижимые — каждый вызов в нашем коде передаёт фиксированный размер, — и рядом записано точное условие, при котором эту запись надо удалить. front#3344 front#3491

Обвязка за проверками здоровья Шесть изменений, одна история, и не самая красивая. Релиз сервера каталожных книг раз за разом падал, потому что облачный инструмент на сборочных машинах не понимал новую настройку здоровья. Мы попросили более новую версию этого инструмента — оказалось, её не существует. Мы убрали настройку, чтобы разблокировать сервер, который днями сидел на старой версии. Мы сделали один намеренный тестовый релиз, чтобы выяснить, что реально стоит на сборочных машинах, потому что ни один журнал этого никогда не печатал и любое утверждение об этом, включая моё, было догадкой. Напечаталось 568 — ниже 573, которые нужны проверке трафика, — и теперь инструмент обновляет себя выше потолка собственного каталога. Ещё нашёлся сервер на тестовой стороне вообще без проверки с перезапуском, при том что сторож рапортовал «всё чисто»: он смотрел только на боевую сторону. Теперь сторож падает, когда у боевой настройки нет близнеца на тестовой стороне. ps#598 ps#599 ps#604 ps#605 ps#606 ps#601

Релизные проверки на поисковом сервисе Одна из них записала поломку как правило: она утверждала, что деталь, которую CNH числит доступной к заказу, никогда не может показывать «нет в наличии», — а это ровно то, что на этой неделе исправляется, так что её пришлось выправить, прежде чем фикс про наличие смог уехать. Теперь она подтверждает только то, что обещает, и полный прогон — 202 пройдено, 0 упало. Проверки каталогов Kuhn и Ferris существовали, но во время релиза их никто не запускал, и два их ожидания уже не совпадали с живым сайтом; теперь они выполняются на каждом релизе и печатают предупреждение, а итоговая надпись об успехе больше не может рапортовать «зелено», когда они покраснели. search#878 search#870

Задел, который пока не включён Фотографии деталей поставщиков: загрузки Ferris писали код бренда, которого в базе нет, а отклонённая запись возвращалась пустой ошибкой. Оба случая исправлены, и всё это лежит без движения, пока не появится право доступа в базе. Каталожные книги скопировали из старой базы в новую — 1,997 книг и 99,722 страницы, повторный запуск безопасен, 105 пропущено и посчитано, а не потеряно, — и оттуда их пока никто не читает, так что покупатели видят те же страницы, что и раньше. И новая ссылка на оплату для клиента ломала проверку структуры страницы на каждом PR, открытом после неё, потому что у одноразовой ссылки нет образцового адреса для проверки; она исключена по причине, уже записанной рядом, и на само исключение стоит сторож, чтобы его тихо не убрали. ps#579 ps#581 front#3539

Новый внутренний отчёт Сводка по спросу на детали CNH была файлом, который надо было открывать руками, вне панели отчётов. Теперь это отчёт National Demand в разделе Parts во внутренней панели: 45,916 строк, с поиском, номера деталей ссылаются на магазин. Он живёт во внутренней панели отчётов, а не в магазине, поэтому пятничный релиз его не трогает. bi#197

Всё в этом релизе — 53 изменения, у каждого своё «до» и «после»

Сайт магазина 28 изменений 8 заметны покупателю или Google
ИзменениеЧто этоДоПослеСделал
front#3488Сотрудник собирает корзину за клиента и отправляет ссылку; клиент открывает её и платит.оплачиваемую ссылку сделать было нечем; заказ, принятый так 7 августа, собрали руками в платёжной панели, и до нашей системы он не дошёлодна форма выдаёт ссылку и страницу оплаты; на dev адрес отвечает, но расчёты там выключены, поэтому оплата целиком пока не доказанаVova
front#3528Детали, которые мы считаем только по телефону, больше не показывают цену в один цент с рабочей кнопкой покупки.деталь «цена по запросу» показывала цену $0.01, и этот один цент лежал в данных о товаре на самой странице, которые читает Googleта же деталь показывает Contact for price и не отдаёт данных о товаре вообще; контрольная деталь в том же статусе рядом не сдвинуласьVova
front#3542Ссылки «по типу техники» приходят вместе со страницей, а не серой полосой, которая заполняется потом.первая отдача страницы бренда несла 0 из 11 ссылок навигации и 18 серых заглушек; страница деталей — 0 из 12 и вообще ничего видимогообе страницы отдают 11 настоящих подписанных ссылок со счётчиками моделей и без заглушек, и на каждой на один отложенный блок меньшеVova
front#3520358 страниц, которые мы просим Google не индексировать, больше ему не отправляются.списки адресов несли 358 придержанных страниц деталей (123 Ferris, 163 Kuhn, 41 McHale, 31 Marcrest), а список картинок повторял те же самыеоба файла их не включают, поэтому одно с другим наконец совпадает; на тестовой копии списков адресов нет вовсе, так что подтвердить это можно только после пятницыVova
front#3515Фильтр брендов на странице деталей перестал предлагать бренды, которые страница объяснить не может.на десктопе страница деталей предлагала 15 брендов для галочки против 9, о которых сообщает сама страницадесктоп предлагает те же 9, о которых сообщает страница; из этих 15 реально пропадает только FerrisVova
front#3516Плитки строительной техники открывают строительный раздел напрямую, а не через редирект.страница деталей вела на строительный раздел через сельхозадрес, который перекидывал при каждом кликеэта ссылка ушла, сельхозсписок навигации ужимается с двенадцати плиток до одиннадцати, и страница техники больше не несёт ссылку на строительный раздел через сельхозадресVova
front#3533Пустая страница схем бренда предлагает категории для клика вместо мёртвой сетки.страница схем бренда могла отрисовать полную страницу, где все счётчики по нулям, нет карточек, нет сообщения и некуда идтив том же состоянии показывается выбор категорий с их счётчиками; сегодня это пустое состояние не возникает ни на одном из сайтов, поэтому проверить его не удалосьDenis
front#3522Страницы внутри личного кабинета снова готовятся заранее, поэтому открываются без ожидания.ни одна страница под Account не могла готовиться заранее; каждый клик там ждал свежего запросапосетителя без входа по-прежнему отправляют на вход раньше, чем что-либо отрисуется, одинаково на обоих сайтах; само ускорение требует входа в кабинет и не замерялосьVova
front#3517Покупатель, зашедший впервые и ничего не сохранявший, больше не создаёт запись об отказе корзины, которого не было.покупатель под входом без сохранённой корзины заставлял сайт записать отказ сервиса корзины при первой загрузке страницытот же ответ читается как пустая корзина: ни ошибки, ни записи в журнале, а покупатель видит ту же пустую корзину, что и раньшеVova
front#3519Сборка списков адресов для Google перестала перегружать наш собственный поиск.сборка списков била десятью запросами сразу по сервису, который принимает два, — около четырёхсот отказов в день, устроенных себе самимодновременно в работе не больше двух запросов; содержимое списков и их страховка не изменилисьVova
front#3521Анимацию открытия панели поиска задаёт одно правило, а не два наперегонки.панель поиска в шапке несла две конкурирующие анимации открытия, и победителя решал порядок стилей, а не замыселприменяется ровно одна анимация — та, что задумана; панель выглядит и движется так же, как сегодняVova
front#3317Автоматические проверки теперь умеют входить как клиент или сотрудник, поэтому кабинет наконец проверяется.автоматические проверки видели сайт только как посетитель без входа; всё за стеной кабинета оставалось непровереннымпроверки сначала входят, и прогон, который вошёл никем, теперь падает, а не рапортует «зелено»Denis
front#3325Проверка теперь доказывает, что загруженная для страницы бренда фотография реально на этой странице появляется.ничто не доказывало, что фотография, применённая через админку, вообще доходит до той страницы, с которой её применилипроверка забирает именно эту страницу и подтверждает, что фотография отдаётся; New Holland закреплён как сломанный, чтобы в тот день, когда он заработает, мы об этом узналиDenis
front#3344Основа сайта переезжает на текущую сборку, закрывая шесть предупреждений безопасности и четыре в библиотеке картинок.сайт работал на сборке основы конца июня; шесть предупреждений, исправленных с тех пор, оставались открытыми, и держалось исключение по библиотеке картинокоснова и библиотека картинок текущие, исключение удалено, и ничего не отрисовывается иначеVova
front#3491Проверка безопасности на нашей сборке снова проходит — по двум предупреждениям, до которых наш код не дотягивается.проверка безопасности падала на двух предупреждениях в маленькой библиотеке, и это падение блокировало все сборкиоба записаны как недостижимые — каждый вызов в нашем дереве передаёт фиксированный размер — с точным условием, при котором запись надо удалитьVova
front#3500Настройка инструмента для дизайна, которой неделями никто не пользовался, убрана, а с ней задача, висевшая двадцать минут.каждое изменение, трогающее экран, ставило в очередь задачу: она делала работу за 13 секунд, потом жгла двадцатиминутный таймаут и рапортовала «отменено»инструмент, его 40 примеров и эта задача удалены; три проверки, охраняющие сайт, по-прежнему отчитываются под теми же именамиDenis
front#3467Медленные тестовые машины больше не валят рабочие тесты, поэтому красный результат означает поломку.под нагрузкой каждый прогон валила другая часть тестов — всегда по истечении времени, а не потому, что нашлась поломкапредел по времени задан один раз и с запасом; два прогона подряд проходят 2434 теста вообще без падений по времениDenis
front#3527Спрятанный предел в секунду, проставленный в двадцати трёх местах, стал одной настройкой — целый класс ложных падений закрыт.в двадцати трёх местах руками стояло ожидание в полторы секунды; три прогона в тот день упали на 1520, 1520 и 1535 миллисекундаходна настройка в пять секунд заменила все двадцать три, и падавшая часть тестов проходит 2425 тестовVova
front#3481Десять проверок, месяцами тихо пропускавшихся, теперь реально выполняются на каждой странице бренда.десять проверок структуры страницы ждали разметки, которую сайт перестал отрисовывать, поэтому все десять рапортовали «пропущено» и не доказывали ничеготе же десять выполняются и проходят везде: двадцать пройдено, ни одной пропущеннойDenis
front#3502Десять самых устаревших тестов сверили с кодом, который они покрывают; пять теперь ловят настоящий откат.все десять проходили, и пять продолжали бы проходить, даже если бы описанное ими поведение тихо откатилиэти пять теперь падают, если поведение откатить; остальные пять проверены и записаны как по-прежнему верные — ничего не удалялиDenis
front#3518Проверка, которая не даёт клиенту заплатить вчерашнюю цену, теперь падает, а не пропускается.проверка устаревшей цены пропускалась ровно тогда, когда проявилась бы настоящая поломка, поэтому ослабленный допуск по цене смерджился бы зелёнымкаждый исход после её собственной проверки живости теперь утверждение; если специально ослабить допуск, проверка краснеетVova
front#3482Первое исправление ночной проверки, которая реально платит тестовой картой, — она краснела семь ночей подряд.ночная проверка оплаты картой падала семь ночей подряд, ожидая поля карты, которые Stripe больше не показывает сразупроверка сначала выбирает оплату картой; настоящее лекарство приехало через несколько дней, следующим изменениемDenis
front#3531Ночная проверка, которая реально платит тестовой картой, зелёная впервые за 29 прогонов.ни один из последних 28 прогонов не прошёл; каждый истекал по времени после клика по элементу, у которого нет размера на экране, так что клик не доходил ни до чегоэлементом управляют напрямую, а не кликают по нему, и прогон проходит с настоящим заказом и номером заказа за 40 секундDenis
front#3486Ежедневная проверка, красневшая с прошлого релиза, снова честная.ежедневное сравнение краснело из-за двух исправлений, уже стоящих в проде под другими коммитами, то есть не охраняло ничегооба записаны вместе с командой, которой любой может их подтвердить; проверка по-прежнему падает на всём, чего реально не хватаетDenis
front#3504Ночной браузерный прогон разделён на восемнадцать проверок, обязанных оставаться зелёными, и тридцать две открыто отложенные.один вердикт на 51 проверку, красный все 28 ночей, что он вообще запускался, поэтому его больше никто не читалвосемнадцать доказанных проверок блокируют и могут поднять тревогу; остальные тридцать две выполняются без блокировки, у каждой записана причина и владелецDenis
front#3507Браузерные проверки под экран телефона запустились впервые и нашли девять вещей, на которые стоит посмотреть.тринадцать проверок, написанных под экран телефона, не запускались ни разу, и одна из них ссылалась на несуществующий файлночной прогон на экране телефона даёт 37 пройдено, 9 упало и 3 пропущено, и девять падений записаныDenis
front#3525Девять ночных прогонов тестов переехали на наши машины, срезав примерно две трети платных минут.187 платных минут за неделю, около 800 в месяц, при лимите аккаунта, который по достижении блокирует сразу все проектыдевять ночных прогонов используют наши собственные машины — примерно 118 из тех 187 минут, — и тех, кто ждёт проверки своего PR, это не задеваетVova
front#3539Проверка структуры страницы, сломанная новой ссылкой на оплату, починена тем же заходом, что её и сломал.новая ссылка на оплату для клиента валила проверку структуры страницы на каждом PR, открытом после неё, потому что у одноразовой ссылки нет образцового адреса для проверкиссылка на оплату исключена по причине, уже записанной рядом со страницей проверки, и на само исключение стоит сторож, чтобы его не убралиVova
Сервисы заказов и оплаты 16 изменений 2 заметны покупателю
ИзменениеЧто этоДоПослеСделал
ps#572Сотрудник собирает корзину за клиента и отправляет ссылку для оплаты онлайн, вместо приёма заказа по телефону.отправить клиенту оплачиваемую ссылку было нечем; сделанная руками 7 августа приняла $80.85 (цифра из самого изменения) и не оставила в системе записи о заказеадрес существует и отвечает на dev, где расчёты ещё не включены; на боевом сайте такого адреса нет вовсеVova
ps#585Стоимость доставки возвращается сразу, а не заставляет покупателя ждать до полминуты.на сервере с умершим соединением к базе расчёт доставки занимал 20-31 секунду 11 августа (цифра из самого изменения, сегодня не воспроизводится); ответ был готов за однурасчёт возвращается сразу, как посчитан; копия сохраняется после, а неудачное сохранение поднимает тревогуVova
ps#587Сломавшийся сервер расчёта доставки теперь перезапускается сам, а не тормозит оформление часами.у сервера доставки не было проверок здоровья, а его короткий ответ всегда говорил «всё хорошо», поэтому сервер, застрявший на 13.5 часа, оставался в обслуживаниион говорит, что ему плохо, когда база недоступна, и примерно через две минуты такого перезапускается самDenis
ps#590Платёжный сервер выходит из обслуживания и перезапускается, когда ему плохо, а не принимает оформление сломанным.у платёжного сервера не было проверок здоровья; тот, что терял базу, продолжал принимать трафик оформления, пока не замечал человекон перестаёт принимать трафик примерно через тридцать секунд отказов и перезапускается примерно через три минуты, обе настройки закреплены тестамиDenis
ps#591Ещё два сервера перезапускаются сами, когда им плохо, а сборка отказывается выпускать сервер без проверки.у серверов каталога деталей и учётных записей не было проверок здоровья, и в сборке никто не замечал их отсутствияоба их несут, и сборка падает, если у любого сервера проверки нет или она составлена неправильноDenis
ps#592Сервер картинок теперь умеет сказать, что ему плохо; раньше он всегда отвечал «всё хорошо», даже когда это было не так.ответ о готовности сервера картинок был фиксированным «да», который ничего не проверял, поэтому любая проверка, нацеленная на него, была украшениемон дотягивается до хранилища картинок, прежде чем ответить, и, если не может, называет отказ по имениDenis
ps#593Серверы каталожных книг больше не выключают себя из-за икоты хранилища, которую могут обойти.икота хранилища выводила из обслуживания каждый сервер каталожных книг, а релизный барьер проверял ответ, который ничего не значилхранилище вынесено в отдельную более глубокую проверку; серверы продолжают отдавать данные из базы, а релизный барьер теперь использует глубокуюDenis
ps#597Серверы перестали доедать память до того, что их убивают; сервер учётных записей умирал пять раз за две недели.четыре сервера росли в памяти, пока их не убивали; учётные записи умирали пять раз за четырнадцать дней, а простаивающие соединения пересоздавались около 47,000 раз в деньпростаивающие соединения сохраняются, а не пересоздаются каждую минуту; замеренный рост — 1.91 пункта в час против 4.69 на старой настройкеVova
ps#579Задел под фотографии деталей поставщиков; для покупателя пока ничего не меняется.загрузки фотографий Ferris использовали код бренда, которого в базе нет, а отклонённая запись возвращалась пустой ошибкой серверапишется правильный код бренда, старый по-прежнему принимается, а отклонённая запись сообщается — всё лежит без движения, пока не появится право доступа в базеVova
ps#581Каталожные книги скопированы в новую базу; покупатели видят те же страницы, что и раньше.в новой базе было ноль каталожных книг и ноль каталожных страниц, поэтому читать из неё было нечего1,997 книг и 99,722 страницы перенесены, повторный запуск безопасен, 105 пропущено и посчитано, а не потеряноVova
ps#598Релизная обвязка для проверок здоровья; покупателю ничего не видно.релиз каталожных книг не выпускался, потому что облачный инструмент на сборочной машине не понимал новую настройку здоровьясборка запросила более новую версию инструмента, которой, как выяснилось, не существует, поэтому через два шага это заменилиVova
ps#599Застрявший релиз разблокирован, чтобы сервер каталожных книг снова поехал вперёд.сервер каталожных книг днями сидел на старой версии, потому что его релиз раз за разом падал на настройке, которую сборочный инструмент не мог прочитатьнегодную настройку убрали, релиз прошёл, и сервер переехал на текущую версиюVova
ps#601У сервера на тестовой стороне не было проверки с перезапуском, а сторож сборки этой дыры не видел.у одного сервера доставки на тестовой стороне не было проверки с перезапуском, а сторож смотрел только на боевую сторону, поэтому рапортовал «всё чисто»тестовая сторона несёт ту же проверку, а сторож теперь падает, когда у боевой настройки нет близнеца на тестовой сторонеVova
ps#604Один намеренный тестовый релиз, чтобы выяснить, что реально стоит на сборочных машинах.никто не знал, какую версию облачного инструмента запускают сборочные машины; любое утверждение об этом было списано из документаодин намеренный тестовый релиз на сервере картинок тестовой стороны — он упал и выдал нужную нам ошибкуVova
ps#605Сборка теперь печатает версию инструмента, на котором работает, — этого не показывал ни один журнал.версия сборочного инструмента не появлялась ни в одном журнале, поэтому любое утверждение о ней, включая моё, было догадкойсборка печатает версию перед выпуском: 568, ниже 573, которые нужны проверке трафикаVova
ps#606Проверка трафика работает: сервер картинок тестовой стороны выходит из ротации, когда не может обслуживать.сборочный инструмент упирался в 568 из-за собственного каталога, поэтому проверку, перекрывающую трафик к плохому серверу, поставить было нельзяинструмент обновляет себя выше этого потолка; сервер картинок тестовой стороны теперь несёт эту проверку, подтверждено по живому описаниюVova
Поисковый сервис 7 изменений 3 заметны покупателю или Google

Четыре из этих семи — первые четыре строки — уже на сайте, переехали туда в среду, 12 августа, до этого релиза. Оставшиеся три уезжают в пятницу.

ИзменениеЧто этоДоПослеСделал
search#877Деталь показывается в наличии, только если она реально лежит на складе.127,404 детали читались как доступные к покупке, потому что CNH числил их доступными к заказу, при том что на всех складах CNH был нольналичие берётся только из складского остатка; 1,052 детали потеряли кнопку Add to Cart, а 302,665 остаются в наличииVova
search#881Счётчик «в наличии» рядом с результатами поиска сходится с тем, что реально выдаётся.поиск seal показывал 183 детали в наличии в списке фильтров, тогда как страница результатов возвращала 18,231тот же поиск сегодня даёт 18,149 в наличии из 31,947 результатов на обоих сайтах; пометки «в наличии» в подсказках при вводе больше нетVova
search#869Детали других производителей больше не берут цену New Holland, когда номера случайно совпадают.5,927 деталей не-CNH показывали цену New Holland, которая им не принадлежит, а 37,077 показывали складской остаток New Hollandэти детали показывают свою цену или никакой, а деталь без цены пишет «нет в наличии»; детали CNH не изменилисьVova
search#878Релизная проверка, закрепившая старое правило наличия, исправлена, чтобы фикс мог уехать.релизная проверка утверждала, что деталь, которую CNH числит доступной к заказу, никогда не может показывать «нет в наличии», — поломка, записанная как правилопроверка подтверждает только то, что обещает её фильтр; полный прогон релизных проверок — 202 пройдено, 0 упалоVova
search#883Убрана оставшаяся инструкция, которая велела всем, кто её читает, показывать Add to Cart на деталях без наличия.данные, которые мы отдавали, несли готовую инструкцию Add to Cart, построенную вообще без учёта наличия, — неверную на 835 деталях без наличияэти два значения ушли из каждого ответа; сайт сам определяет кнопку по наличию и цене, поэтому на экране ничего не изменилосьVova
search#887Убрано второе значение про наличие, которое мы отдавали и которое расходилось с плашкой на странице.данные, которые мы отдавали, несли второе значение про наличие от CNH; на 127,490 деталях оно противоречило плашке «нет в наличии» на страницеэто значение ушло из каждого ответа; плашка, цена и кнопка покупки не изменились, потому что его никто не читалVova
search#870Проверки каталогов Kuhn и Ferris выполняются на каждом релизе и предупреждают нас до того, как что-то дойдёт до сайта.проверки каталогов брендов существовали, но во время релиза их никто не запускал, и два их ожидания уже не совпадали с живым сайтомони выполняются на каждом релизе и печатают предупреждение; итоговая надпись об успехе больше не может рапортовать «зелено», когда эти проверки покраснелиVova
Данные каталога и внутренняя отчётность 2 изменения ни одно не уезжает в пятницу
ИзменениеЧто этоДоПослеСделал
hub#396Почти 49,000 деталей Kuhn, которые никто из поставщиков продать не может, помечены как такие — ночная проверка их пропускает.в каталоге лежали 48,709 деталей Kuhn, по которым дилерский портал Kuhn ни разу не ответил, а ночная проверка про них переспрашивалаони помечены как детали, которые мы продать не можем, и ночная проверка их пропускает; пометку теперь несут 54,959 из 236,680 деталей KuhnAlex
bi#197Во внутренней панели появился новый отчёт National Demand по деталям CNH.сводка по спросу на детали CNH существовала только как файл, который надо было открывать руками, вне панели отчётовэто отчёт National Demand CNH в разделе Parts во внутренней панели: 45,916 строк, с поиском, номера деталей ссылаются на магазинAlex

Что такое v2.2.0 — точка, куда возвращаться

Эти четыре строки — то, что сейчас в проде, прочитано с работающих систем в четверг, 13 августа. Это то, куда возвращаться, если в пятницу что-то пойдёт не так. Все четыре надо перечитать после пятничного выката и заменить эту таблицу тем, что реально уехало, — здесь пока ничего не описывает новый релиз.

Фронт магазина703a02deНе менялся с релиза 7 августа. Vercel держит предыдущую сборку, так что возврат — одна кнопка.
Поискsearch-api-00016-qscИзменился с прошлой страницы релиза: Vova перевёл поисковый сервис на текущую сборку в среду, 12 августа, — поэтому четыре из семи изменений поиска ниже уже на сайте. Возвращаться сюда имеет смысл только ради трёх, которые ещё не уехали.
Сервисы58a42db9 / 1e0c2cf9Платёжный сервис и всё остальное, оба с релиза 7 августа. Ни одно из шестнадцати изменений в сервисах из этого релиза не уехало. Учтите: сегодня на сайте нет проверок здоровья ни на одном сервере — именно это меняет пятница.
База данных20260805213545Последняя миграция, записанная на прошлой странице релиза. В отличие от трёх строк выше, эту не перечитывали из живой базы — это зона Alex, и запись его. Изменение по Kuhn, описанное выше, применили прямо в живой базе, и как миграция оно не появляется.