Projection
class Projection
What a query returns for each document it matches.
The projection vocabulary is VariantPath, and filtering's is CatalogPath. That is not an oversight: a CatalogPath describes a set of locations — $.tags[*] is every tag — which is exactly right for "does any value here match" and has no answer at all for "what is the value here". A VariantPath names one location, which is what makes it something a row can hold. So $.tags[*] is rejected as a projection, with the position, the way CatalogPath.parse rejects $.items[0] as a filter.
A path that does not resolve is null in the row rather than an error, matching Variant.select: a document without the field is a fact about the document, not a failure of the query.