fix: expire story status cache entries after 24 hours
StoryStatusCache now stores an expiresAt timestamp (latestAt + 86400s)
per author entry. hasStory, author, authorsByDid, and didsWithStories
all filter expired entries; purgeExpired() removes them from the backing
dict and is called on app foreground and background via async Task so
it doesn't block the main-thread launch path.
Also fixes ViewedStoryStorageTests isolation: setUp/tearDown now clear
UserDefaults keys so stale persisted state doesn't pollute later tests.
authored by