Shouldn't we reset at 9, I believe that a decade counter goes as follows '0->1->2->3...->8->9->0" or at least that's how its done for synchronous BCD counters.
Because it's a ripple counter not a synchronous design.
In a synchronous counter you would generate a "load 0" or "reset to 0" signal when the counter reached 9, and it would be done on the NEXT clock edge.
In a ripple counter it happens immediately, so you wait till the counter reaches 10 then reset it immediately. The counter actually reaches 10 - but only for a few nanoseconds before clearing. In the context of a ripple counter, this is acceptable; glitches and momentarily incorrect outputs are part of their operation.