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.