That's strange, I'm not sure why, though I think it might have something to do with the way you're writing your query. There are a few issues here:
1) a defmapop (like s-expression-parse) should be written just like a defn form, unless it's taking parameters. Since you don't need the ^String type hint, you can actually just use read-string in your query:
(defn textline-parsed [dir]
"parse input file, it's one hash serialized as an s-expression per line"
(let [source (hfs-textline dir)]
(<- [?data]
(source ?line)
(read-string ?line :> ?data)
(:distinct false))))
With the aggregator, I'm not really sure what you're trying to do. Aggregators need to take input variables and produce output variables, like this:
(agg ?input :> ?output)
Your aggregator is effectively taking no input variables and producing 1 output variable, which is going to cause unexpected behavior.
If you're trying to pass in the ?a dynamic variable for val, you'll need to write your query like this:
(defn query [output-tap input-path]
(let [artifacts (textline-parsed input-path)]
(?<- output-tap
[?group]
(artifacts ?a)
(group-by-group-id ?a :> ?group))))
Let me know if that helps at all, and we can keep on hacking w/ an updated gist.
Cheers,
Sam