While nothing in what you said is incorrect per-se, many options that rev-list takes are parsed but then ignored by blame, simply because they do not make much sense in the context of the command, and "--before" is one of them.
It is interesting to realize that "--since" (and its synonym "--after") does make sense, unlike "--before" (and its synonym "--until") which does not.
Let's imagine a history like this (time flows from left to right):
--c1--c2--c4--c6--c8--c9
\ /
c3--c5--c7where the tip of the history is at commit "c9", and the number in the name of each commit denotes its timestamp.
- "git rev-list c9" starts from "c9", and follows the chain of
parents and would produce c9, c8, c7, c6, ..., c1, ....
- If you add "--after 2", i.e. "git rev-list --after 2 c9" does
exactly the same traversal as the above, but stops following the
chain of parents for commits that is earlier than the specified
time.
- If you add "--before 6", i.e. "git rev-list --before 6 c9" does
exactly the same traversal as the first one, but does not show
the commit whose timestamp is later than the specified time. It
would be like saying "git rev-list c5 c6" in the above topology;
the traversal from c9 down to c5 and c6 is done only to find c5
and c6 to start the "real" traversal from.
Now, "--after 2" will still show "c9", the tip you start your traversal from, and this is important in the context of "blame".
Unlike "git rev-list" (and "git log" family of commands), which can take more than one positive endpoints in the history (e.g. it is perfectly sensible to ask "git log -p ^c1 c5 c6 -- myfile" in the example topology above), "git blame" must be given exactly one positive endpoint, as "git blame ^c1 c5 c6 -- myfile" would not make any sense (ask: "do we want to know about myfile in c5? or myfile in c6?").
I think we also ignore "-n 4" in "blame -n 4 c9 -- myfile" (I didn't check), but that is not because the operation fundamentally does not make sense (like "--until") but because whoever wrote "blame" did not think of the need to support it---in other words, if somebody wants to add support for that option, I offhand do not see a fundamental reason to reject it.
I do think appearing to take and understand and then silently ignoring an option is bad, and it will help users if we tighten the error checking while parsing the command line.