I was not objecting to .secs being zero, I was saying that .secs on the final execution of a timer should always be zero.
If .secs is zero, this could mean that it is a /timer N 0 call and is going to execute at the next timer event, which will be in zero seconds - in other words, immediately. It does not mean that it will not trigger again. So a zero value cannot be used as indication of final execution. The .secs property is not meant to be used for that.
In this example, both of foo's executions are triggered by -e, and for the final foo execution it doesn't show the original 999 seconds or the actual 0 seconds. Instead timerfoo shows the same externally viewable countdown value seen by timerbar, something it's not doing when -e is not used.
It does not show 999 because millisecond timers are not precise - the value depends on how much time has passed since the last trigger. There is also the issue of rounding which will have a different effect on second vs millisecond values.