Preserve exception type in crashed submission state message
Include the exception class name in the crashed state message so that
exceptions with empty or ambiguous str() remain diagnosable.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: check expiration on in-memory cache hits in ResultStore._read/_aread
ResultStore._read() and _aread() returned results from the in-memory
LRU cache without checking metadata.expiration, serving stale results
after TTL elapsed. Now both methods validate expiration before returning
cached entries, evicting expired records and falling through to storage.
Fixes OSS-7655
Co-Authored-By: alex.s <ajstreed1@gmail.com>