Implemented: shared getOrCreateHomeCardItemBatch (Redis keys home:card:{oppId}:{status}:{viewerId}), wired into discovery tools, list_opportunities, intro-mode cards, home feed refactor, orchestrator opportunity_draft_ready stream, and ChatContent fallbacks. Removed buildMinimalOpportunityCard, replaceViewerNameWithYou, narratorRemarkFromReasoning from user-facing paths. Minimal discover path uses static narrator stub. For Yankı: follow-up on cache invalidation edge cases if needed.
Implemented: shared getOrCreateHomeCardItemBatch (Redis keys home:card:{oppId}:{status}:{viewerId}), wired into discovery tools, list_opportunities, intro-mode cards, home feed refactor, orchestrator opportunity_draft_ready stream, and ChatContent fallbacks. Removed buildMinimalOpportunityCard, replaceViewerNameWithYou, narratorRemarkFromReasoning from user-facing paths. Minimal discover path uses static narrator stub. For Yankı: follow-up on cache invalidation edge cases if needed.