All right, I was trying avoid having to write a serious reply. But here it is: Our handling of errors is consistent, at least in this regard. What y'all are complaining about has nothing to do with error handling, really; it has to do with the fact that an empty input slot has a special meaning in the context of CALL, RUN, and other blocks, such as HOFs, that have ringed input slots. Outside the context of CALL etc.,
means the same as
; the default numeric input value is zero. In a text context, the empty slot in
means the empty string.
But in a CALL, etc., empty slots mean to fill the slot with the actual input values provided by CALL. So,
means
. You all know all this, right?
The same reasoning applies in the OP's example. In

the empty input slot provides the default list input, namely the empty list. But in

the empty input slot is filled with the list (a b).
So, now the question is, what if you're inside a CALL, but don't provide an actual input value?

This, I guess, is arguably something you could complain about. According to page 68 of the manual, if the number of actual inputs supplied doesn't match the number of empty input slots (with exactly one actual input matching any number of slots), then we supposedly don't substitute at all, and so that expression should treat the second input slot as meaning an empty list.
But as I recall, we've since changed that, but alas I forget why. Something about zero empty slots accepting any number of actual inputs, putting them in a list, I think. But that isn't what happened in this case, so I'll have to ask Jens. (Good thing he isn't old enough to start forgetting everything!)
So what's problematic is that CALL etc. substitute an empty text string in that situation, rather than substituting the appropriate default for the input type. I suppose you could call that a bug, if you don't mind categorizing it as one of those bugs that'll never be fixed.
The whole idea of using empty input slots as implicit formal parameters, places to put input values into, is controversial, I guess, even among ourselves. Even I have days when I wish I'd invented an unambiguous notation, although most days what I wish is to make it unambiguous the other way, by not using empty slots to denote using default input values. After all, we have a notation for that, the "hello·" and "world" in the JOIN block, for example. We could have put
in the palette to make the default inputs clear.
But I claim there's some good research behind using an empty slot to mean a place into which to substitute a value. Namely, if you take an eight-year-old and say "x+3=7, what's x?" you most likely get "huh?" as the answer, but if you take the same kid and say "
+3=7, what number goes in the box?" you reliably get "4." Empty slots are intuitive. If you show someone
they just
get MAP, better than five minutes of lecturing about it.
Maybe

would do just as well; someone who believes in education research more than I do should try it. But I'm guessing no, not even if you changed the notation to

,
because for that to make sense you have to be thinking about
functions, an idea you might not even have learned yet. Remember,
third graders get

+3.
The background to this was people telling us BYOB (as it was then) would never work, because anonymous functions are such an abstract idea. And yeah, if you call it that, it's scary. But
+3 isn't scary at all. I bet a really good teacher, such as Paul, could teach it to six-year-olds.
The brilliant move (if I do say so myself) we made in 4.0 was to use rings as the "type indicators" (in quotes because they actually do something) for function types, so we can use MAP without talking about functions at all! (Of course eventually we do want to talk about them.)