Repository navigation
fix(server): preserve valid creatives in lenient legacy batches on next - #1842
Merged
Merged
Conversation
Honor explicit lenient processing for legacy creative format projection: dispatch supported siblings and return ordered per-creative failures for unprojectable formats. Preserve strict atomic rejection, original idempotency identity, rejected-assignment safety, and SDK-managed task completion results. Materialize SDK-owned failures before mutation and preserve accepted typed rows, including schema-valid assignment error keys. Unsafe destructive/filter/external-async combinations fail before dispatch and are documented. Validated with 18,863 passing repository tests and 92.16% coverage, 110 focused tests, all GitHub checks, installed-wheel probes, and independent protocol and Ladon approvals. Fixes #1839. (cherry picked from commit 2bd7751)
bokelley
marked this pull request as ready for review
November 3, 2026 13:41
There was a problem hiding this comment.
Ladon verdict: Approve
Approve.
Clean forward-port of #1841 (lenient legacy sync_creatives partial admission) to the SDK 10 beta line, plus three JOSE type-boundary annotations. No Critical/High/Medium findings.
Checked:
- No findings of any severity surfaced by the reviewer.
high_risk: truebut all reasons are(added)/(modified)on sensitive paths with no medium-or-higher concern — presumed safe per the high-risk heuristic; no(deleted)entries.gated_paths: false, so the gated-paths hard gate (row 2) does not apply despitereview_decisionbeing unknown.- No no-auto-approve team match.
- Version-translation pathway for 3.0/3.1 is covered with tests (568-line test file exercises strict/lenient, delete_missing, creative_ids, assignments, nested-wrap idempotency, pre-validation-hook keys, managed completion).
- No credentials in
ctx_metadata, no generated-code hand-edits, no import-layering break, additive private surface so no semver signal required.
No decision-table row 1–8 fired; falls through to row 9 → approve.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Forward-port the stable SDK fix from #1841 so explicit lenient legacy
sync_creativesbatches retain valid siblings on the SDK 10 beta line. A batch containing two supported creatives and one unprojectable format now returns two successful rows and one orderedUNSUPPORTED_FEATUREfailure. Strict and omitted validation modes remain atomic.The port preserves original request idempotency, assignment safety, managed task persistence/webhooks, and the documented pre-dispatch boundaries for destructive reconciliation, filtering, and custom asynchronous completion. It retains
next's mutation-outcome tracking and account-feed response projection. The source commit carriescherry picked from commit 2bd7751cb1312efda5aefc4a11fecdfab0933c9e.A separate compatibility commit gives three existing JOSE boundaries explicit return types. joserfc 1.8 now uses Python 3.11
Selfand includes cryptographic hardening, while this SDK still checks its Python 3.10 public contract. Runtime algorithms, dependency ranges, and type-check requirements remain unchanged, so fresh installations retain those upstream fixes.Validation:
make lint,make typecheck-all(1,701 source files, 77 adopter fixtures, pyright 66 fixtures, no-ignore contract), andmake validate-generatedpass.make testpasses on exact head8f53b65ac10cd67d35d85f420f4c5f70f0f4d430: 21,645 passed, 2,847 skipped, 10 deselected, 1 existing expected failure, 92.04% coverage (80% required), 48m18.52s. All 35 new mixed-batch cases pass, with no expected failures. The working tree remained clean.nextbehavior.nextchecks.This changes no package versions or release metadata. SDK 10 remains on its beta channel. Publication is coordinated separately after the stable 9.x release and this branch's required gates.
Refs #1839.