Summary
Close the remaining DRY_RUN_PAYLOAD_EXCLUSIONS tail and ship the WRITE_SANDBOX coverage audit (#122). Final patch before 0.4.0.
Entries to resolve (per-entry decision)
For each remaining exclusion, decide either "write a PAYLOAD_CASE" or "keep with documented technical reason":
adimages.add — image-data fixture; likely keep with reason "media payload".
advideos.add — same.
vcards.add — large contact-card payload; likely keep with reason "contact-card complexity".
feeds.add — WSDL parser limitation per current comment; verify and keep.
retargeting.add — typed --rule fixtures; write PAYLOAD_CASE if feasible.
reports.get — TSV endpoint; keep with reason "custom non-RPC contract".
agencyclients.add — runtime-deprecated; keep, link to RUNTIME_DEPRECATED_METHODS.
adextensions.add — callout-only currently; write PAYLOAD_CASE.
dynamicfeedadtargets.*, strategies.* — already covered by focused tests; either add PAYLOAD_CASE entries that mirror those tests, or keep with explicit "covered by test_dry_run.py::<test>" reason.
Build scripts/sandbox_write_audit.py per #122 detailed plan. Output Markdown table to stdout + JSON artifact at build/sandbox_audit.json. CI gate.
Acceptance criteria for closing this issue
Refs: parent #127, #122.
Contract source rule
When this issue touches API contracts, V4 Live methods, request bodies, response shapes, safety classification, or CLI command payloads:
- Treat official Yandex Direct docs and safe live probes as the only authoritative sources for wire shape.
- Do not treat issue examples, guessed param names, or vendored method registries as authoritative by themselves.
- If official docs are missing, 404, ambiguous, disabled, or contradict this issue, stop implementation and record the docs drift before coding.
- Public CLI must stay typed and canonical: no public
--json passthrough for user-facing input.
- Mutating or financially sensitive V4 commands stay dry-run-only unless the issue explicitly says otherwise after verification.
- Update
direct_cli/v4_contracts.py source status (confirmed-live, docs, undocumented) and add focused tests for exact request bodies.
Closure checklist
Non-blocking follow-up: #213 tracks the intentionally deferred live sandbox scenarios for clients.update, v4tags.update-banners, and v4tags.update-campaigns.
Summary
Close the remaining
DRY_RUN_PAYLOAD_EXCLUSIONStail and ship the WRITE_SANDBOX coverage audit (#122). Final patch before 0.4.0.Entries to resolve (per-entry decision)
For each remaining exclusion, decide either "write a PAYLOAD_CASE" or "keep with documented technical reason":
adimages.add— image-data fixture; likely keep with reason "media payload".advideos.add— same.vcards.add— large contact-card payload; likely keep with reason "contact-card complexity".feeds.add— WSDL parser limitation per current comment; verify and keep.retargeting.add— typed--rulefixtures; write PAYLOAD_CASE if feasible.reports.get— TSV endpoint; keep with reason "custom non-RPC contract".agencyclients.add— runtime-deprecated; keep, link toRUNTIME_DEPRECATED_METHODS.adextensions.add— callout-only currently; write PAYLOAD_CASE.dynamicfeedadtargets.*,strategies.*— already covered by focused tests; either add PAYLOAD_CASE entries that mirror those tests, or keep with explicit"covered by test_dry_run.py::<test>"reason.Plus #122
Build
scripts/sandbox_write_audit.pyper #122 detailed plan. Output Markdown table to stdout + JSON artifact atbuild/sandbox_audit.json. CI gate.Acceptance criteria for closing this issue
DRY_RUN_PAYLOAD_EXCLUSIONShas a documented technical reason — not "no fixture written".nested_schema_violations == [].summary.schema_parity_ok == true.python3 scripts/sandbox_write_audit.pyexits 0; every WRITE_SANDBOX row classified.Refs: parent #127, #122.
Contract source rule
When this issue touches API contracts, V4 Live methods, request bodies, response shapes, safety classification, or CLI command payloads:
--jsonpassthrough for user-facing input.direct_cli/v4_contracts.pysource status (confirmed-live,docs,undocumented) and add focused tests for exact request bodies.Closure checklist
scripts/sandbox_write_audit.py, thescripts/test_sandbox_write.sh --auditmode, and the audit/coverage tests.python3 scripts/sandbox_write_audit.pyexits 0 and writesbuild/sandbox_audit.json.WRITE_SANDBOXrows: 80PASSand 3NOT_COVEREDlinked to Follow up: classify clients.update and v4tags update live sandbox gaps #213.python3 -m pytest -q tests/test_api_coverage.py tests/test_smoke_matrix.py tests/test_sandbox_write_audit.pypasses.python3 scripts/build_api_coverage_report.pyreportssummary.schema_parity_ok == trueandschema.nested_schema_violations == [].DRY_RUN_PAYLOAD_EXCLUSIONSsummary to Close mutating dry-run payload schema exclusions for 0.4.0 #127 as the closing comment.Non-blocking follow-up: #213 tracks the intentionally deferred live sandbox scenarios for
clients.update,v4tags.update-banners, andv4tags.update-campaigns.