Changed outer button to div with role="button" to avoid HTML validation
error of nested buttons (translate button inside complaint card).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Frontend:
- Add Synthesis type with action plan, insights, annotations
- ExecutiveSummary: Accept synthesis prop for AI narrative
- SentimentPie: Accept insight prop for contextual explanation
- IntensityHeatmap: Accept insight + highlightDomain props
- TimelineChart: Accept insight + annotations props
- All components gracefully degrade when synthesis is null
Backend:
- Add Stage 4: Synthesize for generating AI narratives
- Gathers context from classified spans
- Generates executive narrative, section insights, action plan
- Produces timeline annotations and marketing angles
- Stores synthesis in pipeline.executions table
Components show AI insights with purple gradient styling when available,
fall back to existing behavior when synthesis is not yet generated.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>