I'm not sure if this is working correctly in some corner case of free shipping. Let me put an example:
Create a promotion of free shipment over 100€ amount
Create a carrier with fixed shipment cost of 10€.
Sale 3 units of a product with unit price of 29€ unit_price and an tax of 10%. (Total amount = 95.70€)
After quoting the sale I get the promotion applied because the sale_shipment_cost of 10€ is included on the total amount of the sale (resulting in an amount over 95.70€). This may be desirable for some promotions but I do not think this is right for free shipment.
So for me, we are missing some way to skip the current line in the amount.
The amount can be customized so I do not see it as problem. Indeed the problem comes from the imprecision of the natural language. Also the amount set could take care of the shipment cost.
I think we could make the amount configurable with a set of checkboxes like "exclude taxes", "exclude shipment cost" etc.
For that I think we can extend get_amount to pass a filter function that will be used to exclude some line in the sum computation.