Production engineering
Reveal answer and reasoning
A mutation client should validate the exact required response shape and classify transport failure separately from known pre-commit rejection. For uncertain outcomes, query a durable request receipt or use an operation protocol whose identity and effect are committed together. Retry only under that stated semantic contract, not merely because a status is503. Compatibility testing should include each consumer’s required names, kinds and validity rules, while treating optional additions according to that consumer’s actual tolerance.
Ignoring unknown properties can be compatible for this tolerant consumer without making every added field harmless for every client. Required property names, kinds, ranges and nullability still matter. JsonDocument parsing proves syntactic JSON, while Accept supplies the narrower application contract. Likewise, a failed response does not prove the server failed before applying a mutation. Repeating the after endpoint would increment again because this endpoint intentionally has no request-receipt protocol.
The verifier also requires a fresh fixture, so old contract_effect state must not be mistaken for a failure of its zero baseline or used to claim a clean independent run.
Report representation checks, transport statuses and post-request state separately. The verifier's seven successes establish the actual bounded HTTP/JSON/SQLite observations, while the portable program supplies a narrower reasoning aid. A senior answer asks which facts remain uncertain after a lost response and how a consumer can recover them without repeating an effect blindly. It also distinguishes a tolerant local predicate from universal backward compatibility.
The central result is a reviewable contract with explicit evidence on both the representation and storage boundaries, rather than confidence based on a green server build or one successful status.
What a strong answer covers
- A mutation client should validate the exact required response shape and classify transport failure separately from known pre-commit rejection.
- Ignoring unknown properties can be compatible for this tolerant consumer without making every added field harmless for every client.
- Report representation checks, transport statuses and post-request state separately.
Common pitfall
Ignoring unknown properties can be compatible for this tolerant consumer without making every added field harmless for every client. Required property names, kinds, ranges and nullability still matter. JsonDocument parsing proves syntactic JSON, while Accept supplies the narrower application contract. Likewise, a failed response does not prove the server failed before applying a mutation. Repeating the after endpoint would increment again because this endpoint intentionally has no request-receipt protocol. The verifier also requires a fresh fixture, so old contract_effect state must not be mistaken for a failure of its zero baseline or used to claim a clean independent run.
Follow-up questions
- Which invalid bodies can the external Accept predicate reject even though the portable name-kind check would accept them?
- Why is a changed JSON property kind a compatibility failure even when transport status remains200?
Self-review
Choose what to revisit. These marks are your own assessment and are separate from lesson completion.