parse-repeat-cmd fallback called parse-expr on the next token, which
parse-atom would consume any keyword as (ref val). For bare `repeat`
followed by a command like `set`, this ate the `set` token so the loop
body started from the wrong position.
Fix: only attempt to parse a count expression when the next token is
a number, ident, or paren-open — the types that can form a numeric
count. Any keyword (set, put, if, end, …) means bare repeat-forever.
Fixes "repeat forever works w/o keyword" (+1 test).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>