Детерминированные дифференциальные regression-пробы

HPDFCompareRegressionResultsDeterministic многократно прогоняет два адаптера движков по выбранным доменам, отбраковывает нестабильные или упавшие прогоны и записывает один упорядоченный машиночитаемый результат

API

function HPDFCompareRegressionResultsDeterministic(
  const Input: TBytes;
  Domains: THPDFRegressionDomains;
  const LeftProbe, RightProbe: THPDFRegressionProbe;
  const Options: THPDFDifferentialProbeOptions;
  out AInfo: THPDFDifferentialRegressionInfo): Boolean;

function HPDFProbeHotPDFDocument(
  Domain: THPDFRegressionDomain;
  const Input: TBytes): AnsiString;

function HPDFDifferentialRegressionInfoToJSON(
  const AInfo: THPDFDifferentialRegressionInfo): AnsiString;

Домены

ДоменВстроенная сигнатура HotPDF
rgdParserСводка по страницам, объектам, версии, аннотациям, шрифтам, изображениям, формам, подписям, encryption, AcroForm и структуре
rgdRendererSHA-256 пикселей BGR сверху вниз на фиксированном DPI без альфы и выравнивания scan line
rgdTextSHA-256 UTF-8 с разделителями по страницам после нормализации CRLF и CR
rgdSaveSHA-256 и длина в байтах ограниченного вывода, созданного с детерминированным порядком словарей

Устаревшие значения rgdSignature и rgdConformance остаются доступными, чтобы существующие адаптеры проб сохраняли свои порядковые значения и совместимость исходников

HPDFRegressionDomainName(Domain) возвращает стабильное имя в нижнем регистре для одного значения THPDFRegressionDomain, например parser или renderer, для журналов и полей отчётов

Контракт стабильности

HPDFDefaultDifferentialProbeOptions задаёт три прогона, лимит входа 256 MiB и стабильные запасные имена движков

RepeatCount принимает от 2 до 64 прогонов; изменение сигнатуры внутри одного движка помечает домен нестабильным, даже если его первая сигнатура совпала со вторым движком

Исключения в пробах конвертируются в стабильные сигнатуры ошибок с классом исключения и SHA-256 сообщения, а любая ошибка заставляет домен с расхождением безопасно отказывать

Один и тот же неизменяемый вход подаётся в фиксированном порядке доменов и движков, а каждый выбранный домен попадает в JSON-отчёт ровно один раз

Встроенные ограничения

Настраиваемая перегрузка HPDFProbeHotPDFDocument принимает DPI рендеринга, максимум страниц и максимум байтов вывода

Render-fingerprint исключает альфу и выравнивание строк, текстовые fingerprint нормализуют представление переводов строк, а вывод сохранения перед хэшированием идёт через ограниченный stream

Отчёт

THPDFDifferentialRegressionInfo несёт множества сравненных и различающихся доменов, левые и правые сигнатуры, множества нестабильных и ошибочных доменов, имена движков, число повторов и SHA-256 входа

HPDFDifferentialRegressionInfoToJSON выдаёт фиксированную схему hotpdf.differential.v1 со стабильным порядком полей и доменов для CI, разбора корпуса и аудиторского хранения

Хелпер совместимости

HPDFCompareRegressionResults сохраняет исходное поведение с одним прогоном и callback для вызывающих, кто уже получает внешне стабилизированные сигнатуры