A fixed price contract buys budget certainty and pushes delivery risk onto the vendor. That is the whole trade: the vendor prices in a risk premium for unknowns, and once work starts it has an incentive to defend the letter of the spec because every deviation eats margin (Very Creatives). The mechanism only functions if the spec is bounded and checkable. Fix price without a testable definition of done and you have bought an argument with a delivery date attached.
The usual failure is not that the vendor delivers nothing. It is that "done" was never defined in a form the buyer could verify. A statement of work that lists forty capabilities but never names who runs which check leaves the final milestone open to interpretation, and the final milestone is where the money sits. Experienced buyers treat the acceptance section as the load-bearing part of the document, not an appendix.
Acceptance criteria, in the project management sense, are the conditions a piece of work must satisfy to be marked complete. Good ones are clear, concise and testable, and they describe the what rather than the how (Atlassian). Critically, they are pass or fail: met or not met, never partially fulfilled (Scrum Alliance). That binary quality is what makes them usable by someone who cannot read the code.
There is a second reason to care. Agentic and AI-heavy builds behave differently run to run, so "delivered" has to mean "performed at an agreed level on an agreed dataset" rather than "a feature exists" (Heinrich Co). A feature list cannot express that. A dataset with a threshold can.



