Replace panic calls in generateID() and generateThreadID() with time-based fallback when crypto/rand.Read fails. This is an extremely rare error case, but panicking is not the right behavior for ID generation functions. 🤝 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>