ResolveWorkflowMergeCommand.java
package org.hammer.audio.workflow.history;
import java.util.List;
import java.util.Objects;
import org.hammer.audio.workflow.merge.WorkflowMergeResolution;
import org.hammer.audio.workflow.store.CommitId;
import org.hammer.audio.workflow.store.CommitMetadata;
/**
* Exact merge identities, decisions and audit metadata used to create one resolved checkpoint.
*
* @param preview exact commits and branches used by the preview
* @param expectedHead target-branch HEAD protected by optimistic concurrency
* @param resolutions immutable explicit semantic conflict decisions
* @param metadata user-facing author/message/timestamp for the resulting merge checkpoint
*/
public record ResolveWorkflowMergeCommand(
PreviewWorkflowMergeCommand preview,
CommitId expectedHead,
List<WorkflowMergeResolution> resolutions,
CommitMetadata metadata) {
public ResolveWorkflowMergeCommand {
Objects.requireNonNull(preview, "preview");
Objects.requireNonNull(expectedHead, "expectedHead");
resolutions = List.copyOf(Objects.requireNonNull(resolutions, "resolutions"));
Objects.requireNonNull(metadata, "metadata");
if (!expectedHead.equals(preview.localCommit())) {
throw new IllegalArgumentException(
"expectedHead must equal the exact local commit used by the merge preview");
}
}
}