I'm starting not to follow this conversation so I'll bow out and let you guys work out the technical details. My main concern was that reporting tools should not have to weed out voided statements themselves, although based on your comments on the purpose of the query API, maybe they should. 

fugu13 <notifications@github.com> wrote:

>In xAPI.md:
>
>> statement will not mention "Ben" or "explosives training", but when fetching statements > with an actor filter of "Ben" or an activity filter of "explosives training", both > statements will be returned. > > +###Voided statements > +The LRS MUST not return any statement which has been voided, unless that statement has been > +requested by statementId. The LRS MUST still return any statements targetting the voided statement, > +unless they themselves have been voided. This includes the voiding statement, which cannot be voided. 
>
>The recursive case (it isn't really recursive in concept, just applying the rule consistently) is a lot more elegant, and there's a fairly simple use case: there's a statement Fact, then a statement Certify that certifies it is true (Fact is very high stake and requires careful verification), then a statement Void that voids the certification. If a subset-interested system synced Fact and Certify at one point (via a subsetting that would normally only include Fact without this rule), it needs to later sync Void (or be missing very important information).
>
>—
>Reply to this email directly or view it on GitHub.￼
>