Ok, the writers block has passed. Here I use the intersection filter run prefix available 5.1.23+
Perhaps you still have a more elegant solution?
Here I test and illustrate the filters using the transclude filter format, but they could be used in a list widget filter.
Provide a list of named tags and test those that intersect with the set of titles in the tags field. Limit the output to one, so if used in a list widget the content is displayed only once if either match
{{{ todo project :intersection[enlist{!!tags}] +[limit[1]] }}}
Here I obtain the set of tags from a a text reference but it could equally be a variable.
{{{ [enlist{smart-filter!!tag-list}] :intersection[enlist{!!tags}] +[limit[1]] }}}
Here rather than use the limit[1] I have done this so the count of matches is passed through, and to avoid 0 matches being passed through use !match[0]
{{{ [enlist{smart-filter!!tag-list}] :intersection[enlist{!!tags}] +[count[]!match[0]] }}}
Did you do this before the intersection prefix was available?
This example I believe illustrates the differences with the introduction of the intersection as
documented here
Regards
Tones