ReceiptInputs.java

// SPDX-License-Identifier: Apache-2.0
// Copyright 2026 Egothor
// Copyright 2026 Accenture
package org.egothor.methodatlas.receipt;

/**
 * Inputs section of a reproducibility receipt — exactly the set of files and
 * provider settings whose contents influence the scan outcome.
 *
 * <p>
 * Every field is nullable on purpose: components that did not contribute to
 * a particular run (e.g. no override file supplied, AI disabled) are
 * represented as {@code null} so the JSON writer can omit them via Jackson's
 * {@code NON_NULL} inclusion policy.
 * </p>
 *
 * <p>
 * Package-private because nothing outside the {@code receipt} package needs
 * to construct this directly; {@link ReceiptBuilder} is the sole producer.
 * </p>
 *
 * @param taxonomyFile       fingerprint of the external taxonomy file, or
 *                           {@code null} when a built-in taxonomy is used
 * @param builtInTaxonomy    name of the built-in taxonomy
 *                           ({@code DEFAULT}, {@code OPTIMIZED}, …) when no
 *                           external file is configured; {@code null} when
 *                           {@code taxonomyFile} is present
 * @param overrideFile       fingerprint of the YAML classification override
 *                           file, or {@code null} when none was supplied
 * @param aiCacheFile        fingerprint of the AI cache CSV, or {@code null}
 *                           when no cache was supplied
 * @param aiProvider         AI provider name (uppercase enum constant), or
 *                           {@code null} when AI is disabled
 * @param aiModel            provider-specific model identifier, or
 *                           {@code null} when AI is disabled
 * @param classificationPromptHash SHA-256 of the effective method-classification
 *                           prompt template (built-in default, or the operator's
 *                           override) via
 *                           {@link org.egothor.methodatlas.ai.PromptTemplateSet#hash(org.egothor.methodatlas.ai.PromptTemplateKind)},
 *                           or {@code null} when AI is disabled
 * @param triageAppendixPromptHash SHA-256 of the effective folded credential-triage
 *                           appendix template, or {@code null} when AI is disabled
 * @param dedicatedTriagePromptHash SHA-256 of the effective standalone
 *                           credential-triage prompt template, or {@code null} when
 *                           AI is disabled
 * @since 4.1.0 (schema v2 — replaces the single {@code promptTemplateHash} of v1)
 */
/* default */ record ReceiptInputs(
        FileArtifact taxonomyFile,
        String builtInTaxonomy,
        FileArtifact overrideFile,
        FileArtifact aiCacheFile,
        String aiProvider,
        String aiModel,
        String classificationPromptHash,
        String triageAppendixPromptHash,
        String dedicatedTriagePromptHash) {
}