Complete milestone 18 optional-field patch scope#266
Conversation
* Add adgroup tracking params flags * test: cover adgroup tracking params add rejection --------- Co-authored-by: axisrow <[email protected]>
* feat(sitelinks): support turbo page id * test(sitelinks): cover turbo page json input --------- Co-authored-by: axisrow <[email protected]>
* feat(retargeting): add description flags * fix(retargeting): preserve empty description --------- Co-authored-by: axisrow <[email protected]>
* feat(adgroups): add negative keyword flags * fix(adgroups): report invalid negative set ids as usage errors --------- Co-authored-by: axisrow <[email protected]>
* feat(vcards): add nested contact fields * fix(vcards): preserve grouped flag usage errors --------- Co-authored-by: axisrow <[email protected]>
Co-authored-by: axisrow <[email protected]>
Co-authored-by: axisrow <[email protected]>
|
To use Codex here, create an environment for this repo. |
|
@codex @claude review. Focus on critical issues only: bugs, security vulnerabilities, logical errors, data loss risks, performance problems, CLI contract violations, WSDL/API mismatch, milestone-scope gaps, and incorrect issue closure/triage. Do NOT nitpick style, naming conventions, minor formatting, or subjective preferences; only flag issues that could break functionality, violate the public CLI contract, or make milestone 18 incomplete. |
|
Claude finished @axisrow's task in 8m 8s —— View job Review — PR #266 (milestone 18 optional-field gate)Scope-filtered review per trigger: bugs, security, logic errors, data-loss risks, perf, CLI-contract, WSDL/API mismatch, milestone-scope gaps, triage. Style/naming/format intentionally skipped. Verdict: no blocking issues. Two minor concerns worth flagging. Verified clean
Minor — not blocking, worth a follow-up
Things I deliberately did not flag
|
There was a problem hiding this comment.
Pull request overview
Completes the remaining milestone-18 optional-field parity work by adding typed CLI flags (and dry-run coverage) for several previously-unexposed WSDL optional fields, while keeping the canonical CLI contract (typed flags, single-line README examples, no public JSON payload forwarding).
Changes:
- Add typed flags for: adgroups negative keywords/shared-set IDs + tracking params; TEXT_AD update video/price extensions; retargeting list description; sitelink TurboPageId; vCard InstantMessenger + PointOnMap; feeds UrlFeed RemoveUtmTags + credentials (with clear flags for update).
- Extend dry-run tests and the WSDL parity/optional-field audit mappings to mark these fields as supported and to re-scope FileFeed follow-ups to #264.
- Update README examples (EN/RU) to reflect the new canonical typed flags.
Reviewed changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| tests/WSDL_OPTIONAL_FIELD_AUDIT.md | Updates optional-field audit classifications/counts; moves FileFeed follow-up to #264. |
| tests/test_wsdl_parity_gate.py | Extends optional-field coverage mapping and follow-up registry for new typed flags. |
| tests/test_dry_run.py | Adds dry-run payload tests + incompatibility/no-op guard tests for new flags. |
| README.md | Updates canonical CLI examples/documentation for newly supported typed flags (EN/RU). |
| direct_cli/utils.py | Extends sitelink spec parser to support optional TurboPageId segment. |
| direct_cli/commands/vcards.py | Adds typed flags and payload builders for InstantMessenger + PointOnMap. |
| direct_cli/commands/sitelinks.py | Adds TurboPageId support for both pipe-spec and JSON/file inputs with validation. |
| direct_cli/commands/retargeting.py | Adds typed --description with max-length validation for add/update. |
| direct_cli/commands/feeds.py | Adds UrlFeed.RemoveUtmTags + feed credentials; supports clearing credentials on update. |
| direct_cli/commands/ads.py | Adds TEXT_AD-only VideoExtension.CreativeId + PriceExtension typed flags with subtype rejection. |
| direct_cli/commands/adgroups.py | Adds typed negative keyword flags + shared-set IDs + tracking params, with validation and dry-run support. |
|
Addressed independent scope-review blocker in a5dbb45: CHANGELOG.md and CLAUDE.md now describe optional WSDL audit depth as unbounded, matching tests/WSDL_OPTIONAL_FIELD_AUDIT.md and the generator. Verification: rg confirms no stale 'depth 2' text; python3 -m pytest tests/test_cli.py tests/test_dry_run.py tests/test_wsdl_parity_gate.py -> 379 passed, 6 skipped.\n\n@codex @claude review. Focus on critical issues only: bugs, security vulnerabilities, logical errors, data loss risks, performance problems, CLI contract violations, WSDL/API mismatch, milestone-scope gaps, and incorrect issue closure/triage. Do NOT nitpick style, naming conventions, minor formatting, or subjective preferences; only flag issues that could break functionality, violate the public CLI contract, or make milestone 18 incomplete. |
|
Claude finished @axisrow's task in 7m 0s —— View job Review of PR #266 — milestone 18 optional-field scope
Critical findings1. Milestone-scope gap —
None of the seven flag additions ship a public CHANGELOG entry, even though they ship under 0.3.12 as a public PyPI release:
This is a real publish-readiness gap: PyPI users upgrading to 0.3.12 will see a one-bullet release that omits every flag this PR is named after. Either each child PR's CHANGELOG bullet needs to land in this branch's 0.3.12 section, or the milestone-rollup commit on this branch should add them in a single batch before tagging. Non-blocking observations (verified clean)
I could not run Bottom lineNo code-level critical bugs, security vulnerabilities, data-loss paths, CLI-contract violations or WSDL/API mismatches found. The only milestone-completeness blocker is the missing 0.3.12 CHANGELOG bullets for the seven typed-flag groups shipped on this branch — the release tag would otherwise misrepresent what 0.3.12 actually contains for PyPI users. |
|
Codex Review: Didn't find any major issues. You're on a roll. ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
Addressed Claude's CHANGELOG publish-readiness blocker in ebffa64: 0.3.12 now documents all milestone-18 typed-flag groups shipped by this branch (#242, #243, #245, #246, #253 URL-feed portion, #256, #257) plus the existing #238/#239 entries. Verification: python3 -m pytest tests/test_cli.py tests/test_dry_run.py tests/test_wsdl_parity_gate.py -> 379 passed, 6 skipped.\n\n@codex @claude review. Focus on critical issues only: bugs, security vulnerabilities, logical errors, data loss risks, performance problems, CLI contract violations, WSDL/API mismatch, milestone-scope gaps, incorrect issue closure/triage, and release-note blockers. Do NOT nitpick style, naming conventions, minor formatting, or subjective preferences; only flag issues that could break functionality, violate the public CLI contract, or make milestone 18 incomplete. |
|
Claude finished @axisrow's task in 2m 37s —— View job Review of PR #266 — milestone 18 optional-field scope (post-ebffa64)
Verdict: no remaining critical issues. Publish-readiness blocker resolved.
Important correction — my prior review had the issue→surface mapping wrongMy earlier comment listed:
The new CHANGELOG ships the correct mapping, which I verified against the original
The CHANGELOG is correct as written; my prior table was the one with the scrambled labels. Apologies for the noise — the author addressed the real blocker (missing entries), not a phantom one. Nothing to change here. Re-verified clean (unchanged from prior review)
The reporter's Non-blocking carryover from prior review (still unaddressed, still not in milestone-18 scope)
|
|
Codex Review: Didn't find any major issues. You're on a roll. ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Summary\n- complete milestone 18 compact typed-flag scope for #242, #257, #256, #243, #246, #245, and #253\n- keep public CLI canonical: typed flags only, no public --json examples, single-line README examples\n- split FileFeed upload/base64 support to #264 and move broad parity epics out of milestone 18\n\n## Milestone state\n- milestone 18 (0.3.12) has 0 open issues / 10 closed issues\n- large follow-ups moved out of milestone with comments: #240, #244, #247, #249, #250, #251, #252, #254, #255\n\n## Verification\n- python3 -m pytest tests/test_cli.py tests/test_dry_run.py tests/test_wsdl_parity_gate.py\n- per-child PR review-cycle with @codex @claude, 5 minute waits, actionable comments fixed, CI green before merge\n\nDocs checked during child PRs include Yandex Direct API Feeds.add/update: https://yandex.ru/dev/direct/doc/en/feeds/add and https://yandex.ru/dev/direct/doc/en/feeds/update.