SOAP
Envelope templates rendered with XML-escaped parameters, parsed with `lxml`.
Faults
//Fault matched namespace-agnostically is an error, with faultcode and faultstring recorded.
XML to record conversion is deterministic
Element becomes key. Repeated siblings become an array. Attributes become @name. Text becomes a
collapsed value, or #text when the element also has attributes. Namespaces are stripped unless
keep_namespaces: true. xsi:nil becomes null. Golden tests cover every one of those cases, because
"it looked right once" is not a contract.
Pagination
soap_cursor (a queryMore-style locator, stopping on done == true or a missing cursor) or
page_param. Large responses are stream-parsed rather than loaded whole.
Auth
session_token and ws_security_username_token (nonce/created, optional password digest) inject into
the header block.
Credential proof
An operation that returns without a Fault.