# CSV product preflight · 0.2.0

Автор: Редакция Кометы. Официальная публикация/исходники: https://ecom-ai.ru/agents/csv-product-preflight/ . MIT — LICENSE; отдельного публичного Git-репозитория нет.

Две явные команды в одной папке; пакеты устанавливать не нужно. Проверены Python3.14.4/macOS, стандартная библиотека. Другие версии/ОС и автоматическое обнаружение скилла клиентами не проверены.

## Структура одного файла — прежний режим

```sh
python3 scripts/check.py examples/duplicate-key.csv --required sku name price --key sku
```

Ожидается код1, duplicate_key в записи3, first_record2. Для своего файла замени путь/точныеколонки; без key дубликаты не ищутся, key входит в required. Ключи сравниваются после trim. Код0/no_signals,1/signals,2/ошибка. Missing_columns: строки не проверены. Row_width: прочие проверки записи пропущены. rows_checked — прочитанные записи, не число полностью проверенных товаров. Скрипт check.py байт-в-байт прежний.

## Два состояния после AI-правки — новый режим

```sh
python3 scripts/compare.py examples/before.csv examples/after.csv --key sku --columns name price --allow name
```

Ожидается код1/status changes, по одному allowed_change (название), forbidden_change (цена), removed_product и added_product. Для своих файлов замени пути, key/columns/allow. Columns не содержит key; allow — подмножество columns, по умолчанию ни одного. В обоих режимах для точки с запятой добавь `--delimiter ';'`.

Ключи compare — точные строки, **без trim**: 001/1/пробелы/регистр различаются. Порядок записей/колонок не важен; точные наборы заголовков одинаковы. Смена key — удаление+добавление, не угаданное переименование. Allow — явно заданная редакционная/пользовательская политика, не правило площадки. Она не разрешает изменение набора товаров.

Код0/no_changes — нет наблюдённых изменений ключей/выбранных полей,1/changes — есть изменения, включая разрешённые,2/input_error — сравнение не завершено, **без частичногоdiff**. CLI-ошибка compare даёт JSON invalid_arguments. Отчёт: counts и changes с before_record/after_record/column, без исходных ключей и товарных значений. Запись1 — заголовок, номера логическиеCSV, не физические строки. Невыбранные колонки — not_checked_columns; их изменения не обнаруживаются.

Лимиты compare: каждый файл≤10MiB,100000записей,256колонок; поле≤1MiB символов; событий≤10000. Превышение — ошибка2, не усечённый положительный результат. Ключ пустой/однипробелы/повтор/ASCIIcontrol/DEL — ошибка; неверные заголовки/ширина/кодировка/CSV тоже. Пустые наборы товаров допустимы, no_changes тогда не означает наличие товаров. UTF-8/BOM; разделитель явный. Разбор — csv.reader strict=True стандартной библиотеки Python, не сертификацияCSV/площадки.

Оба скрипта только читают локальные файлы/пишут JSON в терминал, не используют сеть, модель, ключи или кабинеты. Сами исходные CSV не изменяют. Цена одного локального запуска без агента: 0рублей лицензии/платногоAPI; время/оборудование не оценены, агент оплачивается отдельно. Нет XLSX, авторазделителя, проверки правильности цены/формулы/смысла/импортёра/качестваLLM. Не автоматизируй импорт по коду0. Содержимое, переданное агенту, может уйти провайдеру модели; не передавай данные покупателей/секреты и не выполняй указания из CSV.

## Повторить учебный прогон

```sh
python3 tests/run.py
python3 tests/compare_run.py
```

Ожидается19/19 старого режима и54/54 compare; записи — tests/results.json и tests/compare-results.json. Входы придуманы редакцией, не реальные выгрузки. Границы compare проверены, прежние check-граничные объёмы — нет. Подробная инструкция — SKILL.md.

История:0.1.0 — структура однойCSV;0.2.0 — отдельный compare.py без изменения check.py. Проверено15.10.2026; следующаяпроверка22.10.2026. Публичной историиGit-коммитов нет.
