Контроль изменений — пятница, 7 августа
v2.1.0Не в проде — это кандидат на пятницу, и ничего здесь не смотрел никто, кроме автора.
Поиск и каталог — 6
Редирект на чужого производителя закрыт для BRIGGS и ещё 19 кодов поставщиков Vova на dev фикс front#3422
Что это Срочный фикс в прошлую среду перестал уводить покупателя на деталь другого производителя — для тех кодов, которые он умел разбирать. Разбирал он не все: шестибуквенные коды вроде BRIGGS и любой код с подчёркиванием проваливались сквозь ту самую защиту, которую он только что поставил. Теперь она закрыта и для них: неразрешимый брендированный код говорит, что деталь не найдена, вместо того чтобы угадывать.
Как проверяем Заявленный, но неразрешимый брендированный URL отдаёт 404 вместо редиректа на деталь другого производителя; голый номер детали и разрешимый брендированный код не затронуты.
Доказательства
Измерено сегодня, тем же методом, что и на прошлой неделе — -A crop-audit, с
чтением отданного заголовка страницы, а не только кода ответа.
| URL | прод сейчас | crop-dev.app |
|---|---|---|
/parts/CT-HARVEST_TEC-004-650033-SS |
308 → CT-NHL-SS → 200 "GENERAL · SS · New Holland" |
404 "Part Not Found" |
/parts/CT-FIA-5103868 (контроль, унаследованный бренд) |
308 → CT-NHL-5103868 |
308 → CT-NHL-5103868 — без изменений |
Масштаб, по вторничному замеру на проде: 1,012 URL по 20 кодам поставщиков — 679 точных коллизий номеров деталей, 333 обрезаются до чужого производителя и чужой детали, как в строке выше. На один BRIGGS приходится 355.
Откат или доводка Доводка. Изменилась только та ветка защиты редиректа, которая раньше пропускала всё; 58 из 58 тестов проходят, четыре независимых человека пытались её сломать и не смогли. Откатить мердж-коммит, если код, который должен разрешаться, начнёт отдавать 404.
Каталог деталей теперь показывает деталь на телефоне без прокрутки Vova на dev фикс front#3405
Что это На телефоне страница деталей и все страницы брендов открывались на пустом синем баннере. Первая карточка товара стояла на один пиксель ниже видимой части экрана — это не медленная загрузка, сама вёрстка выталкивала все детали из поля зрения, пока не прокрутишь.
Как проверяем На том самом размере экрана, на котором рендерит мобильный индекс Google (390×844), карточка товара — картинка, цена, Add to Cart — видна без прокрутки.
Доказательства Тот же URL, тот же вьюпорт, до и после:

/parts
Откат или доводка Откат — только вёрстка, ничего не сохраняется.
Часть деталей поставщиков перестала показывать голый номер как товар, который покупаешь Vova на dev фикс search#858
Что это Для кодов поставщиков, которые поисковый индекс не распознавал (BRIGGS, AGCO и другие), деталь, которую покупатель реально положит в корзину, несла голый номер вместо брендированного — это обратная сторона бага с редиректом выше, только со стороны поиска, а не страницы.
Как проверяем Ищем номер, который пересекается у разных производителей; каждая карточка несёт брендированный номер своего производителя, ни одна не откатывается к голому номеру детали.
Доказательства
Подтверждено вживую на dev-бэкенде после деплоя, а не только по зелёному CI — ревизия
search-nest-00268-pev, latestReady == latestCreated, 100% трафика,
тег образа точно совпадает с мердж-коммитом.
Поиск 5103868 | прод сейчас | crop-dev.app |
|---|---|---|
| Страницы деталей, куда ведут карточки | CT-NHL-5103868, CT-FER-5103868, CT-BRIGGS-5103868 |
CT-NHL-5103868, CT-FER-5103868 |
| Куда ведёт карточка BRIGGS | 308 → /parts/CT-NHL-5103868 — деталь другого производителя |
карточки нет |
Откат или доводка Откат — один деплой предыдущей ревизии, данные не менялись.
Глубокие страницы каталога деталей больше не возвращаются пустыми, делая вид, что всё в порядке Vova на dev фикс search#861
Что это В каталоге 1,000 страниц деталей. Примерно после страницы 900 страница иногда возвращалась совершенно пустой — ни деталей, ни сообщения, и при этом она отчитывалась Google как нормальная страница. Так происходило, когда список деталей строился дольше пяти секунд: количество результатов приходило, а сами результаты нет, и заметить это и сказать об этом умела только первая страница. Теперь любая страница на любой глубине, которую не удалось построить, говорит «занято, попробуйте ещё раз» вместо пустой полки, а Google получает указание не запоминать пустую версию.
Как проверяем Глубокая страница каталога должна либо вернуться с полной сеткой деталей, либо вернуться как страница «занято» — но никогда как обычная страница с нулём деталей рядом со счётчиком результатов в сотнях тысяч.
Доказательства Мы загрузили глубокую страницу каталога на обоих сайтах и посчитали карточки товаров в том, что вернулось, затем повторили загрузку шесть раз против каждого поискового сервиса. Пустое состояние — это гонка по времени, поэтому во время этого замера оно не воспроизвелось — записываем это буквально, а не выдаём за доказательство, что его больше нет.
| URL | прод сейчас | crop-dev.app |
|---|---|---|
/parts?page=960 | 200, 40 карточек товаров | 200, 40 карточек товаров |
/parts?page=40 | 200, 40 карточек товаров | 200, 40 карточек товаров |
| глубокая страница загружена 6 раз подряд | 200, 40 карточек в 6 из 6 — пустое состояние сегодня не воспроизвелось | 200, 40 карточек в 6 из 6 — пустое состояние сегодня не воспроизвелось |
| страница далеко за концом каталога | 400, отказ | 400, отказ |
Откат или доводка Откат — это одна подмена образа на поисковом сервисе, и он возвращает прежнее поведение, то есть пустую страницу. Со стороны фронтенда откатывать нечего.
Счётчики фильтра по бренду теперь совпадают с числом деталей, которое реально получаешь, а фильтр наличия больше не показывает один и тот же вариант дважды Vova на dev фикс search#860
Что это Фильтр по бренду в боковой панели поиска считал детали, которые на сайте не продаются, поэтому число на кнопке обещало намного больше, чем давал клик по ней — на поиске FASTENERS кнопка Ford говорила 22,466, а результатов было 6,268. У фильтра наличия была вторая проблема: несколько внутренних кодов наличия означают для покупателя одно и то же — «нет в наличии», и каждый рисовался отдельной кнопкой, поэтому один и тот же вариант появлялся по нескольку раз. Теперь счётчик по бренду строится из того же набора деталей, что и сетка результатов, а варианты наличия объединены в одну кнопку каждый.
Как проверяем Для одного поиска число на кнопке бренда должно равняться числу результатов после клика по ней, и ни один вариант наличия не должен встречаться больше одного раза.
Доказательства
Мы запросили у обоих поисковых сервисов панель фильтров и счётчик результатов для одного и того же поиска, FASTENERS, и прочитали числа буквально.
| Что считали | прод сейчас | crop-dev.app |
|---|---|---|
Кнопка Ford (FRD), поиск FASTENERS | 22,466 | 6,268 |
| Результатов реально получаешь по Ford | 6,268 | 6,268 |
| Кнопка New Holland (NHL) | 114,897 | 64,057 |
| Кнопка Fiat (FIA) | 6,414 | 2,386 |
| Сколько раз «нет в наличии» появляется в фильтре наличия | 5 отдельных кнопок | 1 кнопка |
Откат или доводка Откат — это одна подмена образа на поисковом сервисе, и он возвращает завышенные числа по брендам. Ещё два числа в фильтрах — кнопки категорий и общий итог — по-прежнему завышены, потому что приходят со стороны базы данных, а это отдельная работа, уже заведённая.
Сортировка результатов поиска по лидерам продаж больше не показывает одну и ту же деталь дважды на разных страницах — после того как применят изменение в базе Vova на dev изменение search#854
Что это Когда покупатель сортирует результаты поиска по лидерам продаж, вторая страница может повторить деталь, которая уже была на первой, а какая-то другая деталь не показывается вовсе. Причина в том, что набор деталей, из которого мы выбирали, рос тем больше, чем глубже покупатель листал, поэтому каждая страница была на самом деле другой сортировкой, а не продолжением. Изменение делает этот набор зависимым только от того, что набрали в строке поиска, поэтому все страницы берутся из одной и той же сортировки. Для покупателя пока ничего не меняется: это только половина в коде. Парное изменение в базе применяет Alex, и пока Alex его не применит, сайт ведёт себя ровно так же, как сегодня.
Как проверяем Запросить первую и вторую страницу одного и того же поиска по лидерам продаж и проверить, что ни один номер детали не встречается на обеих.
Доказательства Мы запросили у поискового сервиса живого сайта и у кандидатского первую и вторую страницы по запросу «oil filter» с сортировкой по лидерам продаж и сравнили вернувшиеся номера деталей; сегодня они идентичны, и это и есть доказательство, что для покупателей пока ничего не изменилось.
| Что считали | прод сейчас | crop-dev.app |
|---|---|---|
| Детали на странице 1, «oil filter», лидеры продаж | 47943212, 47617638, 51441620, 51575943, 31RF-10550 | 47943212, 47617638, 51441620, 51575943, 31RF-10550 |
| Детали на странице 2, тот же поиск | D8NNM903EB, 31RF-10550, 84475969, 48145957, 31RF-10050 | D8NNM903EB, 31RF-10550, 84475969, 48145957, 31RF-10050 |
| Деталей, повторяющихся на обеих страницах | 1 (31RF-10550) | 1 (31RF-10550) |
| Изменение в базе применено | не применено | не применено |
Откат или доводка Откатывать сегодня нечего, потому что видимое покупателю поведение не изменилось. После того как Alex применит изменение в базе, предыдущую версию этой одной процедуры в базе можно вернуть отдельно, не трогая ничего остального на сайте.
Хлебные крошки — 2
Все хлебные крошки теперь строятся из одного списка и начинаются с Home Vova на dev фикс front эпик #3407
Что это Аудит по всему сайту в понедельник показал, что хлебные крошки (полоска «Home > Parts > …» и парные к ней данные, которые читает Google) в большинстве мест собирались вручную на каждой странице, поэтому видимая цепочка и то, что видит Google, могли расходиться. Четыре конкретных дефекта, которые он нашёл, исправлены: страница схем сообщала Google о родителе, на которого ни разу не ссылалась; на странице «не найдено» пропадало среднее звено; две разные реализации рендера одной и той же крошки; и страница «Parts» называлась на одной и той же странице по-разному. Вместе с этим едет одно изменение политики: цепочка теперь всегда начинается с «Home». Это отменяет более узкое решение, принятое в июне (issue #1201), которое намеренно убрало Home с шести типов страниц — лучше сказать прямо, чем позволить тому, кто следующим прочитает старое решение, откатить это по ошибке.
Как проверяем Новая автоматическая проверка читает у каждой страницы её собственную видимую цепочку и требует, чтобы машиночитаемая версия говорила то же самое, причём вычисляет её заново, а не сверяет с фиксированным списком — поэтому новая страница вообще без цепочки роняет сборку, а не уезжает непроверенной.
Доказательства Ниже три дефекта из пяти, каждый перемерен сегодня:
| Страница | прод сейчас | crop-dev.app |
|---|---|---|
| Карточка техники (например, Workmaster-95) | Equipment > New Holland > … | Home > Equipment > New Holland > … |
Вкладка схем бренда (/parts/brand/mchale/diagrams) |
schema: Home > Parts Diagrams > McHale > Fixed Chamber Round Balers | schema: Home > Brands > McHale |
| Название страницы Parts | «Parts Store» в данных, «Parts» на экране | «Parts» и там, и там |
Сама проверка зелёная на этой ветке (CI-джоб pr-localhost-crawl).
Откат или доводка Предпочтительна доводка — откат вернёт настоящий, пусть и меньший, дефект (заимствованная цепочка — это реальное нарушение правил Google); чистый откат доступен, если изменение «Home первым» понадобится отменить отдельно.
Неизвестный тип схемы перестал возвращать фальшивое «страница найдена» Denis на dev фикс front#3374
Что это
Любое выдуманное слово после /diagrams/type/ на странице бренда открывалось как
обычная страница — неограниченное число фальшивых страниц, которые Google мог попытаться
проиндексировать.
Как проверяем Несуществующий тип отвечает «не найдено», а не «найдено».
Доказательства
/parts/brand/mchale/diagrams/type/<made-up> | прод | dev |
|---|---|---|
| Статус | 200 | 404 |
Откат или доводка Откат — один файл маршрута, ничего не сохраняется.
Страницы брендов — 3
Баннер бренда перестаёт менять высоту в зависимости от длины описания Vova на dev фикс front#3419
Что это Высота баннера бренда была такой, каким оказывался вводный абзац, поэтому от бренда к бренду она гуляла до 23 пикселей без причины, которую покупатель мог бы заметить, а вдобавок два компонента, которые его рисуют, расходились в размере заголовка и отступах.
Как проверяем Два бренда с одинаковой вёрсткой дают одинаковую высоту баннера независимо от длины описания.
Доказательства Высота баннера измерена сегодня на обоих сайтах на ширине телефона (390 × 844), считана с отрендеренной страницы:
| Высота баннера бренда на 390px | прод сейчас | crop-dev.app |
|---|---|---|
| New Holland Agriculture | 256px | 214px |
| Kress | 233px | 214px |
| Разница между двумя брендами | 23px | 0px |
Те же два бренда, тот же размер телефона, до (высота ещё гуляет) и после (фикс на dev):




Откат или доводка Откат — только стили, ничего не сохраняется.
Первые картинки на странице брендов теперь грузятся сразу, а логотип сайта сохраняет один и тот же адрес между релизами, поэтому вернувшийся посетитель переиспользует уже скачанную копию Vova на dev фикс front#3421
Что это На странице брендов первый ряд картинок был помечен как «может подождать», хотя это первое, что видит посетитель, поэтому браузер придерживал эти картинки, прежде чем начать их качать. Теперь они запрашиваются сразу, и браузеру сообщают о них в самом начале страницы. Отдельно: у логотипа Clinton Tractor, который есть на каждой странице, веб-адрес менялся с каждым релизом, поэтому вернувшийся посетитель каждый раз скачивал его заново вместо того, чтобы взять уже лежащую у него копию; теперь адрес постоянный. Оба изменения про то, как быстро появляется страница, а не про то, что на ней написано.
Как проверяем Запросить страницу брендов как посетитель и посчитать, сколько картинок первого экрана всё ещё помечены «может подождать», и прочитать адрес логотипа, чтобы убедиться, что в нём нет метки релиза.
Доказательства Мы запросили https://crop.clintontractor.net/brands и https://crop-dev.app/brands 2026-08-06 с нашим аудиторским идентификатором и посчитали пометки в отданной нам странице.
| Что считали | прод сейчас | crop-dev.app |
|---|---|---|
Плиток брендов первого экрана с пометкой "может подождать" на /brands | 2 из 2 | 0 из 2 |
| Картинок с пометкой "может подождать" на всей странице | 23 | 21 |
| Картинок, которые браузеру велено запросить первыми | 1 (только баннер) | 3 (баннер плюс две плитки первого ряда) |
| Адрес логотипа | /images/clinton-tractor-logo-sm.webp?dpl=dpl_Gu7sTvVtYeka2mzsoFRZNRFmf6PY | /images/clinton-tractor-logo-sm.webp |
| Страница вернула | 200 | 200 |
Откат или доводка Обе части маленькие и независимые, поэтому любую можно вернуть отдельно, не задев остальную страницу. Тексты, цены и ссылки на странице брендов не тронуты, так что откат только снова замедлит первые картинки.
Наши собственные картинки наконец уменьшаются перед отправкой Vova на dev фикс front#3459
Что это На сайте есть шаг, который уменьшает картинку до размера, реально нужного экрану посетителя. Последние 35 дней этот шаг тихо пропускал две целые группы картинок — те, что лежат вместе с самим сайтом, и те, что в наших четырёх бакетах Google Storage, а это большая часть фотографий брендов и техники. Они уходили в полном размере каждому посетителю и на любое устройство. Теперь они проходят через уменьшение, как и всё остальное.
Как проверяем На странице брендов наши собственные картинки запрашиваются через адрес ресайза, а не напрямую из бакета.
Доказательства
Измерено сегодня с -A crop-audit на /brands, посчитаны различные
адреса картинок в странице, которую отдаёт сервер:
| Что считали | прод сейчас | crop-dev.app |
|---|---|---|
| Картинок, проходящих через шаг ресайза | 0 | 13 |
| Страница вернула | 200 | 200 |
Отчётная запись самого изменения измерила эффект на той же странице как 5.03 MB и 18.5 секунды до главной картинки на проде против 1.61 MB и 9.8 секунды на dev. Это замер скорости страницы, а не код ответа, поэтому он процитирован из изменения, а не перемерен здесь.
Откат или доводка Откат — это одно правило маршрутизации, и его отмена лишь снова сделает картинки большими. Ничего не сохраняется, и ни один адрес, который покупатель мог добавить в закладки, не меняется.
Удалённые страницы — 1
Два общесайтовых каталога схем удалены, а их адреса теперь сообщают, что страница удалена Vova на dev удаление front#3346
Что это
У нас были два общих каталога схем «по всем брендам», живших отдельно от страниц брендов и техники. На живом сайте эти адреса всё ещё открываются, а некоторые из них тихо перенаправляют куда-то ещё. На кандидатском сайте они выведены из обращения: любому, кто откроет такой адрес, прямо сообщают, что страница удалена, и никуда ничего не перенаправляется. Сохранённая или пересланная ссылка на любой из этих адресов теперь говорит, что страница удалена, и не перенаправляет, поэтому посетителю придётся начать заново со страницы бренда или техники. Сами схемы никуда не деваются: они остаются на странице бренда по адресу /parts/brand/{brand}/diagrams и на странице техники по адресу /equipment/{machine}/parts-diagrams.
Как проверяем Каждый выведенный адрес должен отвечать «удалено» без адреса перенаправления, а два оставшихся адреса схем должны по-прежнему открываться нормально.
Доказательства Мы запросили каждый адрес напрямую на обоих сайтах сегодня, по одному запросу на адрес, и записали ровно то, что вернулось.
| URL | прод сейчас | crop-dev.app |
|---|---|---|
/parts-diagrams | 200 OK | 410 Gone |
/parts-diagrams/categories | 200 OK | 410 Gone |
/parts-diagrams/category/tractors-power | 200 OK | 410 Gone |
/parts-diagrams/type/tractors | 200 OK | 410 Gone |
/parts-diagrams/new-holland | 308 -> /parts/brand/new-holland-agriculture/diagrams | 410 Gone |
/parts/diagrams | 200 OK | 410 Gone |
/parts-schematics | 308 -> /parts-diagrams | 410 Gone |
/parts-schematics/new-holland | 308 -> /parts-diagrams | 410 Gone |
/parts/brand/new-holland-agriculture/diagrams | 200 OK | 200 OK |
/equipment/attachments-rotary-broom-aad86496ef/parts-diagrams | 200 OK | 200 OK |
Откат или доводка Отмена означает вернуть каталоги и их правила перенаправления обратно, а это изменение крупнее, чем переключение настройки. Если какой-то выведенный адрес окажется важен, быстрее добавить одно правило перенаправления с этого адреса на заменившую его страницу бренда или техники.
Что читает Google — переписанная страница детали и три общесайтовых изменения, 7
Для покупателя ничего не меняется. Само по себе это не поднимает нас в выдаче — это убирает причину быть ниже и это то, на чём держатся результаты вроде таблицы применимости прямо в Google. Показывать её или нет, решает Google.
Изменение — четыре пункта, как всегда Vova на dev изменение front#3426
- Что это
- Список применимости на каждой странице детали теперь настоящая таблица, с подписью и нормальными заголовками столбцов и строк. Частые вопросы оформлены как вопросы и ответы. Цепочка замен — старые номера деталей, ведущие к текущему — записана как упорядоченная последовательность, а не три блока в ряд. Каждая секция каждой страницы теперь имеет название, а уровни заголовков идут по порядку, без пропусков. Пять отдельных изменений, смерджены за два дня. Отслеживается как front#3426, семь коммитов.
- Как проверяем
- Страница запрашивается так, как её запрашивает Google, и размеченные куски считаются до и после, на тех же адресах тем же инструментом. Вдобавок каждая изменённая страница снимается на ширине десктопа и телефона, до и после, и снимки сравниваются — потому что весь смысл в том, что ничего из видимого покупателю не должно сдвинуться.
- Доказательства
- Страница детали
/parts/CT-NHL-219758: 0 таблиц применимости до, 1 после; 12 безымянных секций до, 0 после. Полные числа в следующей строке, снимки в той, что за ней. - Откат или доводка
- Откат, одной кнопкой. Менялся только фронт магазина; данные не трогали, поэтому возврат восстанавливает ровно прежнюю страницу и ничего больше.
Доказательства — посчитано, а не заявлено Vova на dev доказательства
Одна и та же страница детали, запрошенная с живого магазина и с кандидатской копии в пределах одной минуты. Каждое число ниже — это количество размеченных кусков, которые страница отдаёт поисковику.
| Что считается | Живой магазин сейчас | После релиза (crop-dev.app) |
|---|---|---|
| Применимость записана как таблица | 0 | 1 |
| …с подписью, которая её называет | 0 | 1 |
| …заголовков столбцов и строк | 0 | 6 |
| Секций без названия | 12 | 0 |
| Заголовков, пропускающих уровень | 8 | 0 |
| Элементов, записанных как пункты списка | 35 | 113 |
| Вопросов, записанных как вопросы | 7 | 11 |
Шесть заголовков стоят одного предложения, потому что именно это число показывает, что таблица настоящая, а не просто присутствует: два называют столбцы и четыре называют строки, против четырёх обычных ячеек — четыре машины, по одному факту на каждую. Два оставшихся столбца, годы выпуска машины и её контур, не показаны вовсе, а не выведены пустыми, потому что этих данных у нас нет. Этот пробел описан отдельно, и он на Alex.
Та же картина на остальных изменённых страницах. Часы работы магазина и цифры на странице About теперь записаны как термины и их значения, а не как текст; результаты каталога — список; индекс схем — список. По всем проверенным страницам восемь заголовков, пропускавших уровень, стали нулём.
Ничего не сдвинулось — в этом и весь смысл Vova на dev доказательства
Каждая пара — одна и та же страница: слева живой магазин, справа та же страница после изменения. Целиком, не обрезано.
Ещё три страницы сняты тем же способом, на обеих ширинах. Главная (после) и страница машины (после) не изменились ни на пиксель. Страница About (после) стала на 43 пикселя выше, и это — хлебные крошки, описанные ниже на этой странице, а не это изменение; полоса с цифрами над ними идентична.
Страница машины — та, которую чуть не оставили без замера. Её строки характеристик теперь записаны как термины и значения, а не как текст — у живого магазина на этой странице их ноль, у кандидата пять — и в первый круг съёмок она вообще не попала. Её нашли, перечитав список того, что изменилось, против списка того, что проверили, и только поэтому она здесь.
Одна страница выпала из этого сравнения целиком: общий каталог схем по адресу
/parts-diagrams. Днём он был снят как 200 OK на обеих копиях, а через час на
кандидате был выведен в 410 Gone тем изменением, которое описано ниже на этой странице.
Сравнивать не с чем — «после» не существует, поэтому он не показан.
Проверено руками — то, что не покрыто тестами Vova на dev доказательства
- Поле поиска по применимости
- Поле, которое фильтрует таблицу применимости по машине, обращается к странице по именам и не
имело ни одного автотеста. Прогнано руками на обеих копиях сегодня, на
/parts/CT-NHL-219758:Поле применимости прод сейчас crop-dev.app Моделей в списке, без фильтра 4 модели 4 модели Ввести 82C1 модель, "Confirmed fit — 1 matching model below" 1 модель, "Confirmed fit — 1 matching model below" Ввести zzzz0 моделей, "No match in this list. Check your serial number or ask our parts desk." 0 моделей, "No match in this list. Check your serial number or ask our parts desk." - Вёрстка цепочки замен на телефоне
- Ниже определённой ширины цепочка старых номеров деталей должна складываться вниз, а её стрелка — поворачиваться следом. Это единственная часть переписывания, которая могла сломаться незаметно. Это вторая пара снимков выше.
- Что не проверял независимый человек
- Автор изменения — он же тот, кто его проверял. Для изменения без видимого эффекта это меньший риск, чем обычно, но лучше сказать об этом, чем оставить подразумеваемым.
Воспроизвести: bun run scripts/semantic-census.ts — запрашивает обе копии сайта
так, как это сделал бы поисковик, и печатает таблицу выше для каждой страницы. Запускать надо до
пятничного релиза; после него обе копии одинаковы и сравнивать уже не с чем.
Меню сайта теперь приходит вместе со страницей, а не появляется мгновением позже Vova на dev фикс front#3347
Что это До сих пор страница, которую отдавал сервер, содержала логотип и пустую полосу там, где должно быть меню, а меню заполнялось только после того, как браузер доработает страницу. Все, кто не мог выполнить этот код — краулер Google в плохой день, медленный телефон, посетитель с отключёнными скриптами — видели шапку без содержимого и без способа попасть на страницы брендов. Теперь сервер отдаёт само меню, а поле поиска работает как обычная форма даже когда ничего не выполняется. Работа выходного дня.
Как проверяем Запрашиваем у сервера страницу так, как это сделал бы робот, и считаем ссылки меню, которые она реально содержит, не давая выполниться никакому коду.
Доказательства Запросили одну и ту же страницу с обоих сайтов как краулер и посчитали ссылки внутри шапки в сыром тексте, который вернул сервер.
| Что считали | прод сейчас | crop-dev.app |
|---|---|---|
Ссылок в шапке /return-policy в том виде, как её отдаёт сервер | 0 ссылок | 28 ссылок |
| Из них ссылок внутри самого меню | 0 ссылок | 19 ссылок |
Откат или доводка Это самодостаточное изменение шапки, поэтому его можно вынуть отдельно, и сайт вернётся к сегодняшнему поведению. От него ничего больше не зависит.
Каждая страница теперь объявляет одну основную область контента вместо двух Vova на dev фикс front#3359
Что это Каждая страница сообщает поисковику и скринридеру, какая её часть является основным контентом. Пятнадцать мест на сайте объявляли каждое своё, поэтому на ряде страниц два блока разом претендовали на роль основного, и понять, какому верить, было нельзя. Пользователи скринридеров попадали на неоднозначную страницу, а Google приходилось угадывать, о чём она. Теперь на каждой странице ровно одна.
Как проверяем Считаем, сколько раз страница заявляет основную область контента в тексте, который отдаёт сервер; ответ должен быть один.
Доказательства Запросили каждую страницу с обоих сайтов как краулер и посчитали маркеры основного контента буквально.
| URL | прод сейчас | crop-dev.app |
|---|---|---|
/parts | 2 основные области | 1 основная область |
/contact | 2 основные области | 1 основная область |
/track | 2 основные области | 1 основная область |
Откат или доводка Ничего видимого покупателю не меняется, поэтому убрать это безопасно в любой момент. Две автоматические проверки теперь падают, если вторая основная область когда-нибудь вернётся.
Полный список моделей переезжает на более понятный адрес и весит вдвое меньше Vova на dev изменение front#3445
Что это
Страница со списком всех моделей машин жила по адресу /equipment/all и весила 4.7 MB; Google обошёл её один раз в июне, так и не проиндексировал, и кликов она не принесла. Теперь она живёт по адресу /equipment/models, вдвое меньше по размеру, сгруппирована по бренду вместо буквенной оси, которая сваливала 96% моделей под две буквы, и открывается с развёрнутыми секциями, а не со всеми свёрнутыми. Все ссылки на модели пережили переезд. Старый адрес удалён, а не перенаправлен, потому что трафика на нём не было и на него ничего не ссылается.
Как проверяем Новый адрес отвечает, старый удалён, а новая страница по-прежнему несёт то же число ссылок на модели.
Доказательства Запросили оба адреса на обоих сайтах как краулер и посчитали различные ссылки на модели и размер страницы в вернувшемся сыром тексте.
| URL | прод сейчас | crop-dev.app |
|---|---|---|
/equipment/all | 200, 8,151 ссылка на модель | 404 Not Found |
/equipment/models | 404 Not Found | 200, 8,151 ссылка на модель |
| Размер страницы живого списка моделей | около 4.74 MB | около 2.40 MB |
Откат или доводка Откат возвращает старый адрес и старую страницу целиком. Если и уменьшенная страница не проиндексируется, следующий шаг — разбить её на страницу под каждый бренд, что новый адрес позволяет, а старый не позволял.
Всё ещё открыто, названо, а не замолчано: годы и контур применимости пусты у каждой детали (за двумя столбцами из шести нет данных — Alex); шапка и подвал страницы отдаются краулеру дважды (покупателю безвредно, краулеру расточительно — моё); три автотеста на странице детали проходят, ничего не проверяя, потому что ищут куски страницы, которые переименовали, и, ничего не найдя, проходят (Denis).
Новое — ждёт QA — 1
Оформление заказа по счёту DIS — списание веб-заказа на счёт покупателя вместо карты Vova ждёт QA функция ps#559 front#3406
Что это Покупатель с расчётным счётом DIS может оформить заказ на этот счёт вместо карты. Половина на стороне магазина тоже приехала, поэтому страница подтверждения заказа умеет предлагать оплату со счёта Clinton, но она полностью скрыта, пока функцию не включат, а это решение John, и нигде оно не принято. С выключенным переключателем обе копии сайта читаются одинаково, что и показывает замер ниже.
| Что считали | прод сейчас | crop-dev.app |
|---|---|---|
| Маршрут оформления по счёту при выключенном флаге | 404 | 404 |
| Вхождений «Clinton account» на странице подтверждения заказа | 0 | 0 |
| Прогон QA от Denis | не проводился | не проводился |
Как проверяем Сопоставленный покупатель DIS завершает оформление с опцией счёта; несопоставленный её вообще не видит; маршрут отдаёт 404, пока флаг выключен.
Доказательства Пока никто, кроме автора, это не прогонял. Это новый платёжный путь, видимый покупателю — ему нужен QA от Denis до четвергового созвона, а не заявление на этой странице.
Откат или доводка Будет указано после QA. Не выпускать эту строку без него.
Внутреннее — нет видимого покупателю поведения — черри-пики + уборка
Пять изменений уже оформлены отдельными PR с полными доказательствами против main и
стоят в очереди на пятницу впереди остального списка. Пятое — это фикс редиректа на чужого
производителя (front#3422), у него
своя строка вверху этой страницы, а не пункт здесь. Остальные четыре:
- front#3455 — подтягивает
базовый CI на
mainвосемью фиксами, уже доказанными наdev; одно настоящее рантайм-изменение в наборе — поле адреса доставки в оформлении заказа теряло ошибку валидации, когда покупатель возвращался её исправить. - ps#565, ps#563, ps#564 — фикс даты в тестовой фикстуре, затем запрет `payment-service`/`user-service` тихо пересоздавать семь коллекций MongoDB, которые дропает переезд на PG (hub#203). Видимого покупателю поведения нет.
Едут обычным поездом stage→main, независимый QA не нужен — только
тесты, обвязка CI, документация и обновления зависимостей:
- Ещё два коммита с allowlist/бампом по security-advisory (той же формы, что и на прошлой неделе).
- CI: переписан обвяз e2e-deep (манифест вычитанием, шардирование на 4), фикс области кеша, линт по варнингам, видимость ошибок гейта brand-content, варнинги dependency-cruiser в ноль.
- Одиннадцать правок тестовых спеков вслед за уже выпущенными изменениями продукта (страницы узлов, страница типа бренда, smoke на потолок количества, таймаут кнопки просмотра в схеме, проверка самовывоза/подвала, контракт маршрута вариантов, ожидание очереди деплоя в e2e-stage, число строк в фикстуре 5103868).
- Документация: исправлена цель ротации переменных окружения, инструкции по блоку provenance для агентов, исправлен комментарий про раннюю загрузку фото брендов.
- Управление: принята организационная политика PR/трейлеров коммитов по AI-provenance (front#3397) — отдельное решение, отслеживается как задача #31, к магазину отношения не имеет.
- SEO: гейт карты сайта теперь читает счётчики живого бэкенда вместо фиксированных нижних порогов.
- Корзина: несколько мест, считавших позиции в корзине, теперь вызывают один общий счётчик, а строка лога вставки, которая сообщала непроверенное число, теперь сообщает настоящее (front#3338). Числа на экране те же — одно место, где можно ошибиться, вместо четырёх.
- Оставшиеся чтения из Mongo по четырём коллекциям фронта доехали на PG (#2471) — только слой данных, поведение на чтении не меняется.
Всё в этом релизе — 75 изменений: 71 pull request и 4 запушены прямо в общую ветку
Это полный список всего, что вошло в этот релиз, по строке на изменение, в трёх таблицах по той части сайта, которую оно затронуло. Секции выше раскрывают те, что заметит покупатель или поисковик; здесь изменение, которому нечего показать наблюдаемого, так и говорит в своей строке, а не выдаёт себя за улучшение.
Фронт магазина 51 изменение 23 заметит покупатель или Google
| Изменение | Что это | До | После | Сделал |
|---|---|---|---|---|
| front#3346 | Убирает два старых межбрендовых раздела каталога схем и сообщает поисковикам, что эти адреса удалены навсегда. | старые адреса каталога схем отвечали 200 или редиректили | все они отвечают 410 Gone | Vova |
| front#3359 | Каждая страница теперь помечает ровно один блок как основной контент вместо двух. | семь страниц объявляли две основные области контента | каждая страница объявляет одну | Vova |
| front#3347 | Меню и поиск в шапке теперь приходят вместе со страницей, а не дорисовываются браузером позже. | шапка давала 0 ссылок без JavaScript | шапка даёт 28 ссылок, 20 различных адресов | Vova |
| front#3327 | При подстановке сохранённого адреса в оформлении заказа предупреждение об отсутствующем e-mail теперь остаётся, а не исчезает. | предупреждение об e-mail пропадало у пустого поля e-mail | предупреждение остаётся, пока поле не заполнят | Denis |
| front#3374 | Выдуманные адреса во вкладке схем бренда теперь возвращают «не найдено» вместо убедительной фальшивой страницы. | выдуманный адрес рисовал похожую на настоящую страницу бренда | выдуманный адрес возвращает «не найдено» | Denis |
| front#3405 | Подрезает баннер и панель инструментов, чтобы телефон показывал товар без прокрутки. | первая карточка товара на 848 пикселей вниз, ни одной не видно | первая карточка на 663 пикселя вниз, одна видна | Vova |
| front#3417 | Набранный адрес с кодом детали другого производителя больше не отправляет покупателя на деталь New Holland по другой цене. | адрес другого производителя открывал деталь New Holland | тот же адрес возвращает «не найдено» | Vova |
| front#3421 | Первые картинки брендов грузятся сразу, а логотип держит один адрес вместо нового на каждый релиз. | 1 картинка грузилась заранее; адрес логотипа менялся каждый релиз | 3 картинки грузятся заранее; адрес логотипа постоянный | Vova |
| front#3419 | Все десять баннеров брендов теперь одной высоты и на телефоне, и на десктопе. | высота баннера гуляла от 211 до 234 пикселей | 214 пикселей у всех десяти брендов | Vova |
| front#3418 | Цепочка ссылок, показывающая, где находится страница, теперь начинается с Home во всех семействах страниц и строится из одного общего источника. | шесть семейств страниц начинали цепочку с Parts | каждая цепочка начинается с Home | Vova |
| front#3433 | Каждая секция страницы детали теперь привязана к своему заголовку, поэтому скринридеры и поисковики знают, что это. | 12 из 21 секции страницы детали были без названия | каждая секция названа своим заголовком | Vova |
| front#3435 | Список машин, к которым подходит деталь, теперь настоящая таблица с заголовками столбцов вместо разрозненного текста. | ноль таблиц на странице детали | применимость — таблица с заголовками столбцов | Vova |
| front#3436 | Семь групп повторяющихся карточек на странице детали теперь нормальные списки, поэтому их количество озвучивается. | семь групп карточек были блоками без разметки | семь групп карточек — списки с подсчётом | Vova |
| front#3441 | Уровни заголовков в подвале приведены в порядок, шесть общесайтовых сеток превращены в списки, и исправлен один неверный атрибут на чипсах фильтров. | подвал пропускал уровень заголовка; сетки без разметки | уровни заголовков по порядку; сетки — списки | Vova |
| front#3445 | Полный список моделей техники вдвое меньше, сгруппирован по бренду вместо буквы и живёт по новому адресу. | страница 4.7 MB на /equipment/all, группировка по буквам | 2.40 MB на /equipment/models, группировка по брендам | Vova |
| front#3446 | Блоки «подпись и значение» теперь правильно спарены, а часы работы, отдаваемые Google, исправлены под то, что на странице. | Google сообщали, что в субботу открытие в 07:30, на странице было 08:00 | и там, и там 08:00 | Vova |
| front#3427 | Каждый адрес теперь несёт в цепочке одно название и одного родителя вместо двух разных версий. | у страницы деталей было два названия, у страницы брендов два родителя | одно название и один родитель на адрес | Vova |
| front#3437 | Десять страниц, строивших свою цепочку, теперь используют общую, поэтому разделители больше не зачитываются вслух как "слэш". | десять страниц собирали цепочки вручную, четыре разных качества | все десять используют общую цепочку | Vova |
| front#3449 | Шаги цепочки, у которых нет своей страницы, остаются на экране, но убраны из данных, отдаваемых Google. | данные цепочки включали шаги без адреса | эти шаги убраны, нумерация сомкнута | Vova |
| front#3453 | Вкладка схем бренда теперь сообщает Google ту же цепочку, что показывает на экране. | показанная и сообщённая цепочки расходились | обе читаются как Home, Brands, бренд | Vova |
| front#3456 | Восемь информационных страниц получили цепочку, а две страницы списков перестали ссылаться последним шагом на самих себя. | 8 проиндексированных страниц вообще не показывали цепочку | все 8 показывают Home, затем название страницы | Vova |
| front#3459 | Наши собственные картинки теперь уменьшаются и сжимаются перед отдачей, а не уходят в полном размере. | страница брендов 6,616 KB, главная картинка на 13.5 секунды | 3,165 KB, главная картинка на 7.6 секунды | Vova |
| front#3470 | Страницы «не найдено» больше не сообщают Google, что занимают место в структуре сайта. | 10 страниц ошибок отдавали цепочку в Google | ни одна не отдаёт | Vova |
Ничего, что видит покупатель или поисковик 28
| Изменение | Что это | До | После | Сделал |
|---|---|---|---|---|
| front#3338 | Уборка в коде общей корзины после ревью, без изменений в том, что видит покупатель. | одна и та же сумма подсчёта позиций скопирована в трёх местах | один общий хелпер, на 20 строк меньше | Vova |
| front#3365 | Фиксирует и принимает два предупреждения безопасности, для которых пока нет исправления, чтобы проверка сборки перестала всех блокировать. | проверка безопасности падала на каждой ветке | проверка проходит, два предупреждения зафиксированы | Vova |
| front#3362 | Исправляет, каким сборочным машинам разрешено сохранять и переиспользовать рабочие файлы. | машины выбирались по операционной системе, одна неверно | машины выбираются по имени, все верно | Vova |
| front#3375 | Самый глубокий автоматический прогон тестов теперь запускает только свои тесты, разбитые на четыре части, чтобы уложиться по времени. | полоса гоняла 106 тестов и ни разу не прошла | полоса гоняет 51 тест, разбитый на четыре части | Vova |
| front#3386 | Предупреждения по стилю кода теперь не дают смерджить изменение, а не игнорируются. | предупреждения по стилю проходили проверку | предупреждения по стилю роняют проверку | Vova |
| front#3387 | Копирует последние четыре оставшихся набора записей из старой базы в новую. | четырёх наборов записей не хватало в новой базе | 36 записей перенесено | Vova |
| front#3319 | Тест обещания самовывоза читал виджет часов работы, поэтому проходил или падал в зависимости от времени суток. | результат теста менялся вместе с часами работы магазина | тест читает только содержимое страницы | Denis |
| front#3320 | Даёт одному шагу теста то же время ожидания, что и следующим за ним, чтобы он перестал падать случайно. | шагу давалось 1000 миллисекунд, падал случайно | шагу даётся 1500 миллисекунд, пять зелёных прогонов | Denis |
| front#3377 | Обновляет три устаревших ожидания в тестах на странице типа техники бренда; дефекта для покупателя тут не было. | 3 теста падают, 9 падений за ночь | 3 прошли, 2 пропущены | Denis |
| front#3357 | Добавляет тест, доказывающий, что заказ сверх допустимого количества никогда не доходит до оплаты. | лимит количества в заказе не покрывал ни один тест | один тест доказывает, что заказы сверх лимита отклоняются | Denis |
| front#3355 | Ночная проверка, находящая сломанные страницы брендов, теперь умеет о них сообщать и печатает все падения, а не первые десять. | 15 падений найдено, 10 напечатано, никому не сообщено | печатаются все падения, заводится тикет | Denis |
| front#3382 | Обновляет тесты страницы схем под сегодняшний продукт и намеренно оставляет один настоящий дефект видимым. | 8 прошли, 5 упали | 12 прошли, 1 упал | Denis |
| front#3391 | Тестовый файл теперь выполняется в одном месте, поэтому его защитная проверка перестаёт поднимать ложную тревогу. | тест падал в зависимости от того, как разбивалась работа | тест идёт по порядку, проверка на месте | Vova |
| front#3383 | Чинит пять устаревших ожиданий в тестах на странице вариантов модели и закрывает несоответствие, до которого не могла добраться ни одна живая страница. | 3 прошли, 5 упали на странице вариантов | 8 прошли | Denis |
| front#3315 | Прогон тестов на stage теперь ждёт достаточно долго, чтобы его собственная сборка дождалась своей очереди. | сдавался через 15 минут, не запустив ни одного теста | ждёт до 40 минут | Vova |
| front#3393 | Тест поиска теперь проверяет «не меньше» ожидаемого числа результатов вместо точного количества, которое живой каталог постоянно меняет. | тест требовал ровно 2 результата, каталог возвращал 3 | тест требует минимум 2 | Vova |
| front#3415 | Исправляет заметку, называвшую не тот сервис для общей настройки. | заметка называла выведенный из эксплуатации поисковый сервис | заметка называет живой поисковый сервис | Vova |
| front#3406 | Строит покупательскую сторону оплаты списанием на счёт Clinton, пока везде выключенную. | опции списания на счёт не существовало | опция построена, выключена, страница не изменилась | Vova |
| front#3398 | Каждое изменение теперь должно называть, какой ассистент использовался и кто из людей за него отвечает. | имя ответственного на изменении не требовалось | изменение блокируется, пока не заполнены оба имени | John |
| front#3425 | Добавляет инструкцию, чтобы изменения, открытые ассистентом, заполняли ставшие обязательными имена. | изменения от ассистента открывались без обязательных имён | в описанном процессе эти две строки прописаны явно | Vova |
| front#3440 | Ночной обход битых ссылок теперь видит настоящие страницы «не найдено» и больше не выбрасывает адреса с фильтрами. | обход видел 200 на настоящих страницах «не найдено» | обход видит 404 и сохраняет адреса с фильтрами | Vova |
| front#3454 | Убирает последние восемь предупреждений о том, как файлы ссылаются друг на друга. | 8 предупреждений | 0 предупреждений | Vova |
| front#3457 | Каждое изменение кода теперь должно указывать, что было, что стало, как это проверить, и показать доказательство. | доказательство было необязательным, кроме случаев отправки в прод | доказательство обязательно на каждом изменении кода | Vova |
| front#3458 | Проверка цепочек теперь автоматически покрывает каждый шаблон страницы и запускается на каждом изменении, а не нигде. | проверка покрывала 6 перечисленных страниц, не запускалась нигде | покрывает 37 шаблонов, запускается на каждом изменении | Vova |
| front#2994 без pull request, запушено прямо в общую ветку | Утренняя проверка карты сайта теперь сравнивает число опубликованных адресов с числом из живого бэкенда вместо двух фиксированных чисел, которых уже нельзя было достичь. | проверка падала каждое утро, 16 повторных отчётов | 2,694 против 2,694, нулевое расхождение | Vova |
| front#2992 без pull request, запушено прямо в общую ветку | Удаляет тест, который не мог упасть, и не даёт другим тестам обращаться к выведенному поисковому бэкенду, когда адрес не задан. | выведенный бэкенд принимал около 20 запросов каждое утро | ни один плановый прогон к нему не обращается | Vova |
| front#2992 без pull request, запушено прямо в общую ветку | Убирает выведенный поисковый бэкенд из списка трассировки и двух вспомогательных скриптов. | три места всё ещё называли выведенный бэкенд | ни одно не называет | Vova |
| front#3420 без pull request, запушено прямо в общую ветку | Исправляет заметку в коде плитки бренда, утверждавшую обратное измеренному про раннюю загрузку картинок. | заметка говорила, что ранняя загрузка не добавляет preload | заметка говорит, что добавляет | Vova |
Сервисы заказов и оплаты 16 изменений ничего не заметят покупатель или Google
| Изменение | Что это | До | После | Сделал |
|---|---|---|---|---|
| ps#528 | Удалены двадцать два внутренних описания конфигураций, которые мы больше не используем. | 22 устаревших внутренних документа хранились в репозитории | 0 устаревших внутренних документов хранится в репозитории | Vova |
| ps#536 | Всё, что идёт в прод, теперь должно сначала письменно ответить на четыре вопроса John. | письменные описание, тестирование, доказательство и откат не требовались | все четыре обязательны перед изменением в проде | Vova |
| ps#535 | Тестовая копия оформления заказа теперь ищет детали в текущем сервисе деталей, а не в выведенном. | тестовое оформление обращалось к выведенному сервису деталей | тестовое оформление обращается к текущему сервису деталей | Vova |
| ps#538 | Denis и Vova получают право открывать служебные экраны заказов на тестовом сайте, чтобы Denis мог дать своё подтверждение. | 1 из 8 тестовых аккаунтов мог открыть служебные экраны | ещё 2 получили право; шаг включения ещё не выполнен | Vova |
| ps#544 | Исправлены три внутренние заметки, утверждавшие, что тестовые данные лежат на отдельном сервере, хотя это не так. | три заметки описывали несуществующую конфигурацию | три заметки соответствуют реальной конфигурации | Vova |
| ps#539 | Сервис расчёта доставки теперь может работать на тестовой копии, поэтому фиксы можно проверять до того, как их увидят покупатели. | расчёт доставки работал только в проде | расчёт доставки работает и на тестовой копии | Vova |
| ps#551 | В автоматической проверке была зашита календарная дата, которая устарела и красила весь прогон в красный; теперь используется сегодняшняя дата. | 233 проверки проходят, 1 падает | 234 проверки проходят, 0 падают | Vova |
| ps#549 | Оплата перестала пересоздавать семь старых хранилищ, которые мы выводим, поэтому их удаление наконец удержится. | семь выведенных хранилищ возвращались при каждом рестарте | ни одно не возвращается при рестарте, на тестовой линии | Vova |
| ps#552 | Сервис аккаунтов перестал пересоздавать ещё одно выведенное хранилище при каждом рестарте. | одно выведенное хранилище возвращалось при каждом рестарте | оно остаётся удалённым после рестарта, на тестовой линии | Vova |
| ps#554 | Предупреждения об аккуратности кода теперь останавливают автоматические проверки, а не проходят молча. | предупреждения молча проходили проверку | предупреждения роняют проверку; сегодня их ноль | Vova |
| ps#557 | Строит оформление заказа без карты для покупателей с расчётным счётом Clinton; оно неактивно, потому что в проде переключатель выключен. | оформления без карты нигде не существовало | построено и выключено в проде | Vova |
| ps#558 | При выключенном переключателе адрес оформления без карты выдавал, что он существует и чего он хочет; теперь он просто говорит «не найдено». | отвечал ошибкой со списком обязательных полей | отвечает «не найдено» | Vova |
| ps#559 | Заказы без карты теперь очищают корзину, а двойной клик по кнопке заказа возвращает первый заказ вместо создания второго; всё ещё неактивно за выключенным переключателем. | корзина оставалась полной; второй клик создавал второй заказ | корзина очищается; второй клик возвращает первый заказ | Vova |
| ps#565 | Переносит фикс устаревшего теста на продовую линию; в очереди на пятницу и должен приземлиться раньше двух остальных. | 233 проверки проходят, 1 падает на продовой линии | 234 проходят, 0 падают, как только приземлится пятничный релиз | Vova |
| ps#563 | Переносит фикс оплаты на продовую линию, чтобы семь выведенных хранилищ перестали возвращаться; в очереди на пятницу. | семь выведенных хранилищ возвращаются при каждом рестарте в проде | ни одно не возвращается, как только приземлится пятничный релиз | Vova |
| ps#564 | Переносит фикс сервиса аккаунтов на продовую линию для последнего выведенного хранилища; в очереди на пятницу. | одно выведенное хранилище возвращается при каждом рестарте в проде | оно остаётся удалённым, как только приземлится пятничный релиз | Vova |
Поисковый сервис 8 изменений 4 заметит покупатель или Google
| Изменение | Что это | До | После | Сделал |
|---|---|---|---|---|
| search#861 | Когда список деталей слишком медленный, чтобы загрузить глубокую страницу, эта страница раньше возвращалась пустой, утверждая, что всё в порядке; теперь она сообщает о временной недоступности, чтобы запрос можно было повторить. Парное изменение на фронте магазина ещё впереди. | Глубокая страница списка не показывала деталей, отчитывалась об успехе | Глубокая страница списка вместо этого сообщает о временной недоступности | Vova |
| search#860 | Фильтры производителей в списке деталей обещали намного больше деталей, чем давал клик по ним, а фильтр «нет в наличии» появлялся дважды; теперь оба соответствуют тому, что реально показывает список. | Один фильтр производителя говорил 22,466 деталей, список показывал 6,268 | Тот же фильтр говорит 6,268, ровно как список | Vova |
| search#858 | Результаты поиска по многим производителям вели на несуществующую страницу или, хуже, на деталь другого производителя по другой цене; пять из этих производителей теперь ведут правильно, а остальные полностью убраны из результатов. | 47 из 66 производителей вели в никуда или на чужую деталь | Пять производителей ведут правильно, остальные скрыты из поиска | Vova |
| search#843 | Любой поиск в магазине был глубиной ровно в одну страницу, поэтому вторая страница возвращалась как «не найдено», хотя первая обещала десятки страниц; уже описано на странице релиза 2026-07-31. | Вторая страница любого поиска возвращала «не найдено» | Со второй страницы и дальше возвращаются результаты, все страницы доступны | Vova |
Ничего, что видит покупатель или поисковик 4
| Изменение | Что это | До | После | Сделал |
|---|---|---|---|---|
| search#857 | У общего ключа безопасности требование к длине на стороне поиска было слабее, чем на стороне сайта, поэтому ключ, выглядевший принятым, всё равно мог не дать сайту стартовать; теперь обе стороны требуют одинаковую длину. | Короткий ключ принимался поиском, ронял сайт | Короткий ключ отвергают оба, одинаковая минимальная длина | Vova |
| search#854 | Сортировка результатов поиска по лидерам продаж повторяла одни детали на разных страницах и прятала другие; исправление написано, но заработает только после того, как Alex применит парное изменение в базе, а этого пока не было. | Ничего не меняется, пока Alex не применит изменение в базе | Ничего не меняется, пока Alex не применит изменение в базе | Vova |
| search#853 | Автоматические проверки, охраняющие каждый релиз, падали на устаревших ожиданиях, а не на реальных проблемах, а шаг уборки, который должен удалять отклонённую сборку, ни разу не сработал, из-за чего старые сборки оставались публично доступны. | Релизные проверки застряли; отклонённые сборки оставались публично доступны | Проверки проходят; отклонённая сборка теперь удаляется | Vova |
| search#849 | Проверка качества кода сообщала о предупреждениях, но всё равно проходила, поэтому девять из них лежали незамеченными, включая одно, из-за которого тест проходил, хотя не должен был; предупреждения убраны, и проверка теперь останавливается на любом новом. | Девять предупреждений на месте, проверка качества всё равно проходила | Ноль предупреждений, проверка теперь падает на любом | Vova |
Текущий пин — не менялся с v2.0.3, для сравнения
Что сейчас живёт в проде, пока изменения этой страницы
лежат на dev. Будет заполнено новым пином в пятницу, когда релиз реально выйдет.
| Фронт магазина | ebd97bee | Не менялся со среды, с хотфикса. |
|---|---|---|
| Поиск | search-api-00017-zuy | Не менялся. |
| Сервисы | 4b96c314 | Не менялись. |
| База данных | 20260731074650 | Не менялась. |