# Методика проверки и сборки

Дата проверки: 02.11.2026. Прогон: 20261102-01. Платные API не вызываются. Production не импортируется и не изменяется.

## Источники

Изучены prompt.txt, manifest.json, results.json/results.csv, 30 JSON рядом с оригиналами, state.json, ANALYSIS.md, pricing.json стенда, tool/run_benchmark.py, исходная галерея и public. Превью, публичные дубликаты, ZIP, __MACOSX и Apple resource forks не считаются результатами.

Проверка src/build.py читает матрицу из manifest; проверяет 30 уникальных комбинаций и уникальных файлов. Каждый PNG проходит verify и полное декодирование Pillow. Размер, формат, bytes и SHA-256 сверяются с записью. Metadata отличается только поздно записанными cost, cost_rub и download_finished_utc. Параметры совпадают с промптом и запрошенной клеткой. results и state совпадают. Сетевого журнала нет: это сверка сохранённых записей, не независимое доказательство транспортного уровня.

## Деньги

Расчёт Decimal: сумма tokens(category) × USD_per_million(category, mode) / 1 000 000. Используются входные text/image и выходные text/image. Суммы категорий проверяются против input/output/total_tokens. Неизвестные ставки не заменяются нулём: ненулевой расход при неизвестной ставке останавливает сборку. В этой выборке все ненулевые категории тарифицированы. Категории кэширования в сохранённом usage отсутствуют; льготный кэш-тариф не применяется.

Тарифы — текущая официальная таблица, проверенная в день прогона; независимого исторического подтверждения или биллинговой выгрузки нет. Рубли — единый ручной курс 80.5573. Суммирование до округления. В CSV точность float сериализации достаточна для представления; исходный расчёт Decimal, долларовые итоги в summary сохранены строками.

Потерянный Mini low оценён в $0.002522; не входит в матрицу. Старое actual_cost_usd смешивает эту оценку с расходом сохранённых результатов. Никаких новых расходов не создавалось.

## Время

Standard duration_s — monotonic вокруг api_request (POST), включает сетевой обмен и чтение/разбор ответа, исключает последующую запись PNG. Batch server_s = completed − submitted; client_s = batch_ready_detected − submitted. ready_ts в коде создаётся после получения output-файла. post_file_receive_save_s = download_finished − ready_ts; не является чистой длительностью скачивания. Разница серверной и клиентской отметки не атрибутируется определённой причине.

Batch сгруппирован по внутреннему идентификатору в 9 заданий. Идентификаторы удалены из публичных результатов; состав и времена показаны без них. Независимых замеров на каждую картинку общего задания нет. Средние скорости, p95, доверительные интервалы не вычисляются.

## Визуальный разбор

Открыты все 30 оригиналов 1024×1024. Наблюдения привязаны к именам исходных файлов. Численные оценки качества не вводились. Фрагменты high Standard вырезаны по координатам data/crops.json, без ресэмплинга. При 256 CSS px масштаб 1:1 по CSS-пикселям; физические пиксели зависят от дисплея. Разный ракурс не означает одинаковый размер предмета. Все оригиналы копируются побайтно, превью WebP 512 px создаются отдельно.

## Представления

src/article.template.md + проверенные данные → article.md → общий HTML статьи. Он используется в index.html, article-clean.html и content:encoded. Интерактивная галерея дополняет статическую галерею; без JS полный текст и изображения сохранены. Графики строит Matplotlib из нормализованных строк, сохраняет SVG, PNG и CSV; таблицы доступны в HTML. Таблицы графиков могут сворачиваться в редакционной странице для удобства чтения.

RSS с ненастроенным SITE_URL валиден как XML, но не готов к внешнему импорту. GUID стабилен и не зависит от домена. Дата — редакционная 02.11.2026, не событие публикации. Настроенная сборка переводит локальные ссылки в абсолютные URL. Внешние импортёры и Дзен не проверены.
