AI OnAI Off
Found my answer by browsing EPiServer QuickSilver codebase, nice serializable model for promotions can be found by using
var promotions = cart.GetFirstForm().Promotions;
That is not exactly what you asked for. IOrderForm.Promotions contains all promotions applied for that form. If you want to know which promotions applied to a specific line item, you would have to do more, getting the Entries from Promotions, then map them to each lineitem to find out what (entry-level) promotions have been applied.
I have a requirement to show a little bit of copy for promotions which are applied to each line item in a given cart.
I feel like I am missing something obvious, this is the best I can come up with at present.
Can someone please inform me of a simpler way to get promotions which affect a given line item.