@Override
	public final ConditionResult run(TaskMonitor monitor) throws CancelledException {

		// make sure the program isn't closed while we are working
		if (!sourceProgram.addConsumer(this)) {
			return new ConditionResult(ConditionStatus.Cancelled);
		}

		if (!destinationProgram.addConsumer(this)) {
			sourceProgram.release(this);
			return new ConditionResult(ConditionStatus.Cancelled);
		}

		try {
			return doRun(monitor);
		}
		finally {
			sourceProgram.release(this);
			destinationProgram.release(this);
		}
	}
Validator objects looks for specific preconditions that should exist in order to get optimal
results when applying a program correlator.
Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/validator/VTPreconditionValidator.java