Top-level let bindings with function calls (e.g., `let result = factorial(10)`)
were emitted as static initializers, which is invalid C since function calls
aren't compile-time constants. Now globals are declared with zero-init and
initialized inside main() before any run expressions execute.
Also fixes validate.sh to use exit codes instead of grep for cargo check/build.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>