Bug: report_per_component used scored[:args.report_top_n] which took top N by score (all positive for components with only positive scores). JSON correctly separated positive and negative poles. Fix: Use same positive/negative separation logic for report as JSON.