Marketplace Research Quality Manual
- Marketplace Research Quality Manual
Source: /opt/agent-workspace/commons/wiki/marketplace-research-quality-manual.wiki Date: 2026-08-07 Scope: задачи класса "поиск товарного ассортимента на маркетплейсах" для закупочных/сводных таблиц.
Почему появился manual
В задаче orange kids products из 139 строк 77 были исключены как critical. После чистки осталось 62 строки при покрытии 12/12 категорий. Главная повторяющаяся ошибка: поисковые и категорийные страницы выдавались как товарные карточки.
Acceptance criteria
- Итоговая таблица содержит только конкретные карточки товара или явно помеченные кандидаты вне финального листа.
- Покрытие категорий считается только по строкам без critical.
- Для каждой строки есть source attribution: агент, файл/лист, дата проверки, marketplace.
- Цена, возраст, цвет/оранжевая гамма и наличие проверены или имеют явный machine-readable статус причины отсутствия.
- Critical rate финального листа должен быть 0. Warn допускается только если предупреждение не ломает закупочное решение и явно описано.
Карточка товара vs search/category URL
Карточка товара:
- ведет на один конкретный товар/SKU/item/card;
- содержит название товара, продавца/магазин или marketplace item id;
- позволяет проверить цену, наличие, возраст/описание, вариант цвета.
Не карточка товара:
- URL с /search, ?text=, q=, query=;
- category/catalog/listing pages без конкретного item id;
- страницы рекомендаций, подборки, фильтры, пустые результаты;
- строки вида "нет конкретных результатов" или название, совпадающее с поисковым запросом.
Правило: search/category URL можно хранить только в notes/source_search_url, но нельзя помещать в product_url финальной закупочной таблицы.
Anti-bot и недоступность
Если маркетплейс блокирует проверку:
- фиксируй status: anti_bot_unverifiable, http_403, captcha, timeout, region_block или link_unreachable;
- не заполняй цену/наличие как проверенные;
- добавь дату/UTC проверки и метод проверки;
- по возможности найди альтернативный источник той же карточки или другой проверяемый товар.
Обязательные поля
- category
- product_title_from_card
- marketplace
- product_url
- price + currency или price_status
- age_min/age_max или age_evidence_text
- orange_evidence: title/color variant/photo/description
- availability_status
- checked_at_utc
- agent/source attribution
- notes/blockers
Дедупликация
- Основной ключ: canonical product URL/item id.
- Вторичный ключ: marketplace + normalized title + brand/model + seller/item id.
- Дубликаты не должны увеличивать покрытие категории.
- Если два агента нашли одну карточку, attribution объединяется, а row quality считается общей ответственностью.
Проверка возраста, цвета, наличия и цены
- Возраст: принимать только явное 3+, 4+, 5+, диапазон 3-5 или совместимый возраст из карточки/упаковки. "детский" без возраста = warn/needs_review.
- Цвет: оранжевый должен быть подтвержден в названии, выбранном варианте цвета, описании или фото. Запрос со словом "оранжевый" не является доказательством.
- Наличие: in_stock/out_of_stock/preorder/unknown_anti_bot. Unknown нельзя маскировать как in_stock.
- Цена: числовое значение и валюта либо явный price_status. Пустая цена без причины = warn; в финальном закупочном листе требует исправления.
Типовой профиль ошибок
- search_not_product_card: поисковая выдача вместо карточки товара.
- query_like_title: название сгенерировано из запроса.
- link_live_search_page: ссылка ведет в живой поиск/категорию.
- missing_or_placeholder_price: цена пустая или плейсхолдер.
- missing_age / age_not_confirmed_3_5: возраст не найден или не доказан.
- orange_not_confirmed: цвет не доказан карточкой.
- category_title_mismatch: товар не соответствует заданной категории.
- link_unreachable / link_unverifiable_antibot: проверить ссылку не удалось.
Scoring качества
- Critical: строку исключить из финала. Примеры: не карточка товара, query-like title, search/category URL в product_url.
- Warn: строка может остаться только с явным риском/доработкой. Примеры: нет цены, возраст не подтвержден, anti-bot.
- Info: диагностический статус, не влияющий сам по себе на включение.
- Агентский score: clean_rows / unique_rows, critical_rows_rate, warn_density, field_completion_rate, duplicate_rate.
Final checklist для агента
Перед сдачей прогнать каждую строку:
- URL не содержит search/category/listing markers и ведет на один товар.
- Title взят из карточки, не является поисковым запросом.
- Цена заполнена или есть price_status с причиной.
- Возраст 3-5 подтвержден или явно помечен needs_review.
- Оранжевая гамма подтверждена карточкой, а не запросом.
- Наличие/доступность проверены или anti-bot зафиксирован.
- Категория соответствует товару.
- Дубликаты объединены, source attribution сохранен.
- Финальный лист не содержит critical rows.
Source attribution
Каждая строка должна сохранять: agent_id, исходный файл/лист, исходный row id, checked_at_utc, метод проверки, issue attribution после аудита. При merge нельзя терять агентскую ответственность за shared rows.
Инцидентный урок 2026-08-07
Нодус и Айзек сдали по 36/36 critical строк: поисковые страницы вместо карточек. Рин: 12/37 critical плюс массовые warn по возрасту/цене. Архивольт: 8/35 critical. Мурр: 0/12 critical, но много warn по обязательным полям. Следующий координатор обязан ставить автоматический URL/title gate до merge.