In the documentation, the subfilter operator is tagged as a selection constructor, but after investigating the code and trying some examples, I find that it doesn’t always ignore its input.
This simple example from the documentation illustrates it as a selection constructor:
[subfilter[one two three]addsuffix[!]]
If this example is modified to add input, then the input is ignored. IOW, the following has the same output as the above:
[tag[Filter Operators]subfilter[one two three]addsuffix[!]]
But the subfilter operator is not inherently a constructor, it only inherits its “constructor-ness” from the filter specified in its operand. Since the filter one two three
is a constructor, the subfilter acts as a constructor.
If the operand instead is a selection modifier, then the subfilter operator will act as a selection modifier. For example, the following will select the 5 most recently modified tiddlers tagged with “Filter Operators”:
<$vars recent_mods="[has[modified]!sort[modified]limit[5]]">
{{{[tag[Filter Operators]subfilter<recent_mods>addsuffix[!]]}}}
</$vars>
So I think the selection constructor tag is there only because it can be a constructor, not because it must be a constructor.
This behavior makes sense. If subfilter were only a selection constructor, then it would only be useful on the leftmost side of a filter step.