Funciones de minimización de corpus
function HPDFMinimizeCorpusCase(const Input: TBytes;
const Predicate: THPDFFailurePredicate; MaximumAttempts: Integer;
out AInfo: THPDFCorpusMinimizationInfo): TBytes;
El reducer primero elimina spans completos de indirect objects y luego aplica reducciones de rangos de bytes progresivamente más pequeñas
Un candidato se acepta solo cuando el predicate sigue reportando la signature de fallo original
AInfo reporta los intentos, las reducciones aceptadas, los spans de objetos eliminados, los rangos de bytes eliminados, los tamaños original y final, y la signature preservada
Almacenamiento continuo de corpus
function HPDFDefaultCorpusStoreOptions: THPDFCorpusStoreOptions;
function HPDFMinimizeAndStoreCorpusCase(const Input: TBytes;
const Predicate: THPDFFailurePredicate;
const CorpusDirectory: string;
const Options: THPDFCorpusStoreOptions;
out AInfo: THPDFCorpusCaseInfo): Boolean;
function HPDFCorpusCaseInfoToJSON(
const AInfo: THPDFCorpusCaseInfo): AnsiString;
type
THPDFCorpusStoreAction = (csaAdded, csaReplaced, csaKeptExisting);
THPDFCorpusStoreOptions = record
MaximumAttempts: Integer;
MaximumInputBytes: Int64;
MaximumStoredBytes: Int64;
LockRetryCount: Integer;
end;
El store deriva un case ID estable a partir del digest SHA-256 de la signature de fallo, revalida cualquier caso existente, minimiza tanto el candidato existente como el entrante y conserva el resultado más pequeño
Un lock entre procesos serializa las decisiones de un directorio de corpus, mientras que los archivos temporales de write-through y el reemplazo atómico impiden que los lectores observen archivos PDF o de metadata parciales
THPDFCorpusStoreOptions acota los intentos de minimización, los bytes entrantes, los bytes almacenados y los reintentos de lock, y THPDFCorpusCaseInfo.Action reporta si el caso fue agregado, reemplazado o retenido
El schema sidecar hotpdf.corpus.case.v1 registra el case ID, la signature de fallo exacta, el SHA-256 del contenido y el conteo de bytes almacenados en un orden estable de campos
HPDFCompareRegressionResultsDeterministic compara signatures repetidas entre engines en los dominios de parse, render, texto y save, y rechaza las corridas inestables o fallidas