protected CompletableFuture<Void> deleteBreakpointSpecAsync(TraceObjectBreakpointSpec spec) {
		KeyPath path = spec.getObject().getCanonicalPath();
		MatchedMethod delBreak =
			matches.getBest(DelBreakMatcher.class, path, ActionName.DELETE, DelBreakMatcher.SPEC);
		if (delBreak == null) {
			return AsyncUtils.nil();
		}
		return delBreak.method
				.invokeAsync(Map.of(delBreak.params.get("specification").name(), spec.getObject()))
				.toCompletableFuture()
				.thenApply(__ -> null);
	}
When checking for register validity, we consider it valid if it or any of its parents are
valid, or any alias thereof.
Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiTarget.java