# Шесть SKU: отбор, перестановка и pin/hide

Учебный каталог целиком вымышлен редакцией. Это детерминированный пример границы операций, не тест Algolia, Elastic или нейросети. Никаких ML-баллов, кликов, событий конверсии или показателей продаж нет.

## Вход и эталон

`input.json` отдельно задаёт каталог, порядок первичного отбора, фильтр наличия, учебную перестановку и правила. `expected.json` записан до первого запуска; генератор его не читает. На дату 29.10.2026 выполнено 18 из 18 локальных проверок в `verification.json`.

| SKU | Роль |
|---|---|
| A, B, C | Три товара, которые меняют порядок |
| P | Уже найденный товар, закрепляемый на втором месте |
| F | Найден, но исключён фильтром наличия |
| X | Есть в каталоге, но не найден первичным отбором |

База: первичный отбор `A,F,P,B,C` → кандидаты после фильтра `A,P,B,C` → заданная редакцией перестановка `C,B,A,P` → pin P на втором месте `C,P,B,A`. Дополнительный сценарий hide C применяется после перестановки и даёт `B,P,A`.

## Повторить

Нужен Python 3, только стандартная библиотека. В папке комплекта:

```sh
python3 example.py --out reproduced-base
python3 example.py --hide-c --out reproduced-hide
python3 verify.py
```

Результаты — JSON и CSV с каждым этапом. Скрипт проверок повторяет CLI в отдельной временной папке без expected.json, проверяет все шесть перестановок трёх свободных товаров и отклоняет попытки подмешать F/X в reranker.

## Что доказано и что не доказано

Сам учебный reranker получает только A/P/B/C: F/X не могут появиться от перестановки. Видимый top-N в настоящем поиске может иметь иной состав после обрезки окна, порога, скрытия или отдельного продвижения. Здесь top-N/порог не моделируются.

Pin намеренно разрешён только для уже найденного P; попытка pin X и конфликт pin+hide отклоняются как выход за область упражнения. **Это не ограничение API Algolia.** В настоящих Algolia Rules pin может вставлять запись; соответствие закреплений активным фильтрам настраивается отдельно (`filterPromotes`). Модель не задаёт общий приоритет конфликтующих правил любого поискового движка.

Первичный отбор и фильтр заданы вручную: пример не измеряет полноту или качество retrieval. Нельзя считать шесть перестановок шестью прогонами нейросети или 18 проверок доказательством качества коммерческого продукта.

Полные источники и дата проверки — в редакционном пакете `data/checks/2026-10-29-search-reranking/sources.json`. Справка относится к документам, не к продуктовому аккаунту. Публикационный и независимый визуальный допуски проверяются отдельно.
