Skip to content

Fix reporting consistency and v1 request serialization - #9

Draft
cameronehrlich wants to merge 2 commits into
mainfrom
codex/apple-search-ads-cli-reporting-consistency
Draft

Fix reporting consistency and v1 request serialization#9
cameronehrlich wants to merge 2 commits into
mainfrom
codex/apple-search-ads-cli-reporting-consistency

Conversation

@cameronehrlich

Copy link
Copy Markdown
Owner

Summary

  • make every comparable Campaign Management API v5 performance report default to ORTZ, request Apple grand totals, and fetch/verify every response page
  • preserve returned-row totals while adding source_totals and explicit filtering, truncation, pagination, and async-report coverage
  • move optimizer and budget comparisons to exact completed windows, expose the organization currency, and keep action candidates distinct from source totals
  • preserve Platform API v1 page-shaped report/Insight responses while documenting the pagination and UTC/ORTZ automation contract
  • fail closed on live-confirmed Platform v1 request gaps: CampaignCreate placement/source pairing, APPSTORE_SEARCH_RESULTS, required AdGroupCreate startTime, required mutation --file, and SDK-generated omitted-null serialization
  • regenerate focused help/reference guidance and add near-miss regression fixtures

Read-only Fax It reproduction

Window: 2026-08-10...2026-08-16.

Surface 1.1.2 This branch
campaign summary UTC; 131 impressions, 2 taps, 1 install, 3.8978 spend ORTZ; 140 impressions, 3 taps, 1 install, 5.5639 Apple grand-total spend
keywords UTC; 131 impressions, 3.8978 spend ORTZ; 140 impressions, 5.5639 Apple grand-total spend
search terms ORTZ; 140 impressions, 3 taps, 1 install, 5.5638 summed row spend ORTZ; same rows plus 140 impressions / 5.5639 Apple source total and explicit complete coverage

The 0.0001 difference between search-term row sums and Apple grand totals is row-level money rounding. Cross-report comparisons now use source_totals. All live calls used for this receipt were reads; no Fax It ad state was changed.

Compatibility

  • v5 client report results remain list-compatible through a ReportRows subclass
  • schema version 1 and returned-row totals remain intact; source_totals and coverage are additive
  • non-search v5 API callers can still request UTC explicitly; search terms stay ORTZ-only
  • Platform v1 reports and Insights still return one unmodified Apple/SDK page rather than a new merged envelope
  • explicit mutation request files are now required, omitted model fields stay omitted on the wire, and server-confirmed request gaps fail before invocation
  • get_all_custom_reports() now honors its name by default; an explicit limit remains available

Verification

  • ruff check .
  • pytest -q — 451 passed
  • Platform manifest check
  • generated skill/reference check — 20 files current
  • release metadata check — 1.1.2 / SDK 1.109.0 consistent
  • live read-only summary, keyword, search-term, and optimizer receipts

Release recommendation

Recommend shipping this eventually as 1.1.3: the changes are correctness and safety fixes with additive machine metadata and conservative write validation. This PR intentionally does not bump the version, tag, publish, merge, or release anything.

Owner follow-ups

  • approve the 1.1.3 release/version bump after review
  • decide whether a future release should expose a user-facing UTC option for non-search invoice reconciliation (the lower-level client still supports it)
  • decide whether to formalize per-field explicit-null clearing guidance for Platform v1 updates beyond the current exact-preview rule

@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ac1e630a-e751-4b1f-9bf5-622625ee74b0

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant