What is the purpose of SpanNotQuery’s getSpanScorer wrapping the includeSpans with a FilterSpans that has an accept that always returns YES?
This is a slightly hacky workaround for the fact that only the top-level Spans implementation actually does any scoring. This means that degenerate cases like single-clause SpanOrQueries or SpanNotQueries with null exclusion clauses can't just return the relevant child Spans, because it won't have a SimScorer set on it. Instead, we need to wrap it with a Spans containing a SimScorer. This is an abuse of FilterSpans though - I'll create a specialised ScoringWrapperSpans instead to use here.
If we're really worried about backwards compatibility, we could keep Spans as an empty subclass of SpanScorer. But I really don't think it's necessary - we already changed the Spans interface in 5.3 by adding Spans.collect(), so users upgrading from 5.2 from 5.3 would have had to recompile.