Skip to content

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

Merged
bokelley merged 4 commits into
mainfrom
feat/preview-creative-async-opt-in
Aug 8, 2026
Merged

feat(creative): add opt-in async preview rendering#6171
bokelley merged 4 commits into
mainfrom
feat/preview-creative-async-opt-in

Conversation

@bokelley

@bokelley bokelley commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Completes the bounded 3.2 slice from #3753:

  • adds buyer-opt-in allow_async to preview_creative while retaining the synchronous default
  • permits the submitted task arm only when rendering continues after the request connection is released
  • keeps active open-connection processing on working progress semantics
  • registers preview_creative in the task-type enum and terminal async-result union
  • supports polling through get_task_status and optional terminal delivery through push_notification_config
  • validates submit, poll, and webhook completion against the composed schemas
  • keeps preview read-only: async execution cannot build, approve, store, or mutate a creative
  • leaves build_creative unchanged because it already has a separate async contract

Verification

  • 5 focused async-preview lifecycle tests pass
  • async-response reference build test passes
  • all six current-version storyboard tenants pass, including creative and creative-builder
  • git diff --check

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.

@bokelley
bokelley requested a review from a team August 7, 2026 09:12
@bokelley
bokelley enabled auto-merge (squash) August 8, 2026 03:22
@bokelley
bokelley disabled auto-merge August 8, 2026 03:24
@bokelley
bokelley merged commit 3934dda into main Aug 8, 2026
40 of 53 checks passed
@bokelley
bokelley deleted the feat/preview-creative-async-opt-in branch August 8, 2026 03:24
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