The results of the <<now>> macro are directly stored in the target variable. There is no need for the extra step of wrapping it inside a “filtered transclusion”.
The compare operator’s “mode” should be “eq” (as in “equal”), not “eg”
The description of the syntax for compare (see https://tiddlywiki.com/#compare%20Operator) may be confusing, in that it uses “[<operand>]” to show where a literal value should be inserted; e.g. “[3]”. However, because in this case the operand is actually a variable reference, you omit the square brackets around it, and just use <target>
Also, instead of using the compare:string:eq filter operator for checking a text value, you can use the much simpler match filter operator, like this: <$vars todayfilter="[get[task_date]match<target>]">
P.S. In Discourse, when posting code containing angle brackets, you should select the code text and use the </> button (or press ctrl-E) in the editor to make the code “preformatted” so that the angle brackets and enclosed syntax aren’t treated as embedded HTML, but instead appear exactly as entered.
To generate the exception you need at least one tiddler containing the required field.
I’ve prepared a tiddlywiki for your convenience to see the bug.
As I cannot attach any item from this forum please look at the GG post here https://groups.google.com/g/tiddlywiki/c/XW-t1KWeDt8