"- `mock/results/inconsistent-responses.md` captures randomized SDK vs direct API mismatches",
"",
"## Deterministic Runner",
"",
"The deterministic runner executes every SDK function that can be invoked from the discovered namespace surface using the reusable scenario files in `mock/test-data/`.",
"",
"Behavior:",
"",
"- JSON endpoints are treated as successful on `2xx` responses",
"- PDF endpoints are treated as successful when they return either a valid non-empty PDF payload or a successful JSON report-generation response with `pdf_url`",
"- `402` and `403` are reported as not testable rather than failures",
"",
"## Randomized Comparison Runner",
"",
"The comparison runner chooses a random subset of SDK methods, builds matching direct API requests from the Postman collections, and compares normalized results.",
"- PDF comparison checks for either a valid binary PDF response or a successful JSON report-generation response with `pdf_url`, instead of byte-for-byte equality",
"- endpoints that are plan-restricted for the current credentials are skipped and reported separately",
"",
"## Single Endpoint Debug Runner",
"",
"Use `src/testing/test-single-api.ts` when you want to debug just one SDK method and one Postman endpoint.",
"",
"Behavior:",
"",
"- edit `SDK_TARGET` to choose the SDK function you want to inspect",
"- edit `DIRECT_TARGET_LOOKUP` to choose the matching Postman endpoint or item name",
"- leave `DIRECT_TARGET_LOOKUP` empty to reuse the SDK normalized endpoint automatically",
"- if no Postman match is found, the runner falls back to the SDK-resolved endpoint and request body for a direct live call",
"- if a Postman match exists but its request body is stale or missing fields that the SDK request already has, the runner can retry with the SDK-resolved request body and will print the fallback reason",
"- run `npm run qa:single` to print invocation args, SDK request/response, direct request/response, and comparison diff details",
"",
"## What To Port To Another SDK",
"",
"- reuse `mock/catalog/postman-endpoints.json` as the collection source of truth",
"- reuse the full `mock/test-data/` folder as the canonical scenario set",
"- recreate the same result files under `mock/results/`",
"- recreate the same process docs under `mock/docs/`",
"- implement the three runner modes: deterministic sweep, randomized compare, and single-endpoint debugging",
"- keep auth inference, PDF validation, secret redaction, and stale-Postman fallback behavior aligned with this Node.js SDK",
"",
"## Reuse In Other SDKs",
"",
"The `mock/` folder is intentionally structured so the same catalog and scenario data can be reused or translated for Swift, Kotlin, Python, and other SDK QA implementations.",