ExperimentDocumentPreview.java

package org.hammer.audio.experiment.document;

import java.util.List;
import java.util.Objects;
import org.hammer.audio.plugin.document.DocumentDiagnostic;

/**
 * Safe, non-mutating result of document parsing, plugin resolution and normalization.
 *
 * @param document normalized document copy
 * @param canonicalSha256 normalized document hash
 * @param diagnostics structured import diagnostics
 * @param migrations deterministic migrations that would be applied on save-as
 * @param executionAllowed whether every required capability is available and valid
 * @param readOnly whether destructive save/application must remain disabled
 */
public record ExperimentDocumentPreview(
    ExperimentDocument document,
    String canonicalSha256,
    List<DocumentDiagnostic> diagnostics,
    List<String> migrations,
    boolean executionAllowed,
    boolean readOnly) {

  /* Validate and defensively copy preview state. */
  public ExperimentDocumentPreview {
    Objects.requireNonNull(document, "document");
    canonicalSha256 = ExperimentDocument.requireSha256(canonicalSha256, "canonicalSha256");
    diagnostics = List.copyOf(Objects.requireNonNull(diagnostics, "diagnostics"));
    migrations = List.copyOf(Objects.requireNonNull(migrations, "migrations"));
  }
}