_extract_line_items() was returning [] for all checkout sessions, which meant _handle_transaction_completed never processed credit packs, sticky boosts, or business plan PDF purchases. Now fetches line items from the Stripe API using the session ID, with a fallback to embedded line_items. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>