There seems to be a bug with the unionAll that doesn't allow for just one column. I can create a data set with multiple columns, but if I try to create a dataset with just one column, it gives me this error.
unionAll() expects to receive lists of rows, that is, lists of lists. forEach() returns a simple list when only one iterating expressing is given, but a list of lists when more than one is supplied. To fix your single-column case, wrap 50+it() inside another asList().
However, the expression doesn't seem to like the it() as part of the tagPath, it returns -1 for every row of the dataset. If I put a constant in instead of it(), then it returns proper values from a tag.
The tag() function is not compatible with iteration. Along with any other functions that have any asynchronous retriggering or polling behavior. (This includes any function that needs a context, like runScript(), objectScript(), and view().)
If you need to read dynamic lists of tags, use the module's tags() function (outside of any iteration).
tags() works best if the list of tagpaths to read is constructed in a separate binding. Since you are using Vision, that would need to be a dataset custom property.