Should I provide typespec for each function clause?

I’ll typically use the second approach.

The different function heads which ultimately need to be defined by the spec are typically grouped together and having a spec at the top of that group makes for a reasonable signpost in the source code for the beginning of that group.