Skip to content

feat(creative): add opt-in async preview rendering - #6171

Open
bokelley wants to merge 2 commits into
mainfrom
feat/preview-creative-async-opt-in
Open

feat(creative): add opt-in async preview rendering#6171
bokelley wants to merge 2 commits into
mainfrom
feat/preview-creative-async-opt-in

Conversation

@bokelley

@bokelley bokelley commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Implements the bounded 3.2 slice from #3753:

  • adds allow_async to preview_creative, defaulting to false
  • permits status: "submitted" + task_id only when the buyer opts in
  • keeps the three synchronous response arms mutually exclusive with the submitted arm
  • documents polling through get_task_status
  • leaves build_creative unchanged because it already has an async submitted contract

This avoids unilateral behavior change for existing buyers while allowing slow video/template renderers to return promptly.

Verification

  • 3 contract tests pass
  • all 660 source schemas validate
  • changeset protocol scope check passes

Closes #3753.

@bokelley
bokelley marked this pull request as ready for review August 3, 2026 14:38

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ladon verdict: Escalate to human review

Escalate — gated schema paths require human/CODEOWNERS approval.

This PR modifies static/schemas/source/creative/preview-creative-request.json and static/schemas/source/creative/preview-creative-response.json, both under the deterministic hard approval gate (gated_paths: true). The required review status is REVIEW_REQUIRED, not APPROVED, so the gate is not satisfied (decision table row 2). Outcome must be escalate.

The change itself looks clean: an additive, opt-in async preview_creative (allow_async default false) plus a fourth PreviewCreativeSubmitted response arm returnable only when opted in. The reviewer confirms all four arms carry distinct discriminator consts at the live head (commit 2 fixed the discriminator regression from commit 1), so audit-oneof --check stays green; docs match the schema; and the minor changeset is correct for a non-breaking opt-in. No blocking or Medium findings.

Escalation reason:

  • Modifies gated schema files static/schemas/source/creative/preview-creative-request.json and static/schemas/source/creative/preview-creative-response.json; review_decision is REVIEW_REQUIRED. Human/CODEOWNERS approval is required before merge.

Why human review

  • Modifies gated path static/schemas/source/creative/preview-creative-request.json and preview-creative-response.json under the hard approval gate; review_decision is REVIEW_REQUIRED (not APPROVED). Human/CODEOWNERS review required.
  • This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/creative/preview-creative-request.json (modified) matches static/schemas/source/**; static/schemas/source/creative/preview-creative-response.json (modified) matches static/schemas/source/**) and the current GitHub review decision is 'REVIEW_REQUIRED', not APPROVED. This is a hard gate enforced in code — Ladon cannot auto-approve until a human/CODEOWNERS approval is recorded, regardless of how clean the diff is.

@aao-secretariat aao-secretariat Bot added the ladon/needs-human-review Ladon has escalated this PR for human review. label Aug 3, 2026

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ladon verdict: Escalate to human review

Escalate — gated path requires human/CODEOWNERS review.

This PR modifies published protocol schema source under static/schemas/source/** (preview-creative-request.json, preview-creative-response.json), which sits behind a hard, path-based approval gate (gated_paths: true). The current review_decision is REVIEW_REQUIRED, not APPROVED, so decision-table row 2 fires and the outcome cannot be approve or plain comment.

The change itself looks clean per the reviewer: adds buyer-opt-in async rendering to preview_creative — a request-side allow_async boolean (default false) plus a fourth response oneOf arm PreviewCreativeSubmitted. The oneOf stays cleanly discriminated via response_type const across all four arms, with belt-and-suspenders not:{status==submitted} guards on the sync arms. Change is fully additive and opt-in-gated (a non-opting buyer never receives the submitted shape), so the minor changeset is the correct class, and schema↔docs are coherent (allow_async row + Opt-in async section mirror the field). No blocking or medium findings were reported.

Because the diff is additive/opt-in and non-breaking, this reads as a Normative (non-breaking) change rather than a Breaking-class change. However, the deterministic gated-paths gate still stands: a human/CODEOWNERS approval is required before merge. Requesting escalation reviewers.

Why human review

  • Modifies gated protocol schema source static/schemas/source/creative/preview-creative-request.json and preview-creative-response.json; gated_paths: true and review_decision is REVIEW_REQUIRED (not APPROVED) — human/CODEOWNERS review required before merge.
  • This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/creative/preview-creative-request.json (modified) matches static/schemas/source/**; static/schemas/source/creative/preview-creative-response.json (modified) matches static/schemas/source/**) and the current GitHub review decision is 'REVIEW_REQUIRED', not APPROVED. This is a hard gate enforced in code — Ladon cannot auto-approve until a human/CODEOWNERS approval is recorded, regardless of how clean the diff is.

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

Labels

ladon/needs-human-review Ladon has escalated this PR for human review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(spec): support async task envelope on preview_creative / build_creative

1 participant