Skip to content

feat(creative): add creative revision identity - #6781

Open
bokelley wants to merge 3 commits into
mainfrom
creative-revision-identity
Open

feat(creative): add creative revision identity#6781
bokelley wants to merge 3 commits into
mainfrom
creative-revision-identity

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Summary

  • add optional buyer-authored revision_id to sync_creatives with immutable effective-input semantics and a typed mismatch error
  • carry accepted/current/source revision identity through sync results, library readback, status webhooks, and historical delivery reporting
  • define re-review, legacy omission, first-time adoption, stale review, dry-run, localization mutation, and fingerprint-retention behavior
  • make served variant_id an agent-unique immutable execution identity so historical delivery and variant preview remain unambiguous
  • reserve complete representation-set canonicalization for feat(creative): define delivery representations and macro resolution #6767 without minting a revision per representation

Identity model

creative_id       durable buyer creative
revision_id       immutable buyer-authored effective input state
representation_id equivalent representation inside one revision (#6767)
variant_id        agent-unique immutable served execution
build_variant_id  pre-trafficking generated candidate

This PR does not add revision history, rollback, or staged serving. Experimental staged activation is tracked separately in #6780.

Verification

  • npm run test:schemas
  • npm run test:json-schema
  • npm run test:docs-nav
  • npm run test:compliance-snippets
  • npm run test:error-code-drift
  • npm run test:oneof-discriminators
  • npm run test:storyboard-context-entity
  • node --test tests/creative-revisions.test.cjs
  • node scripts/check-changeset-protocol-scope.cjs origin/main
  • npx --yes @changesets/cli@^3.0.0 status --since=origin/main

Closes #6347

@bokelley
bokelley enabled auto-merge (squash) August 23, 2026 04:09
Comment thread static/schemas/source/core/creative-variant.json Outdated
Comment thread static/schemas/source/creative/sync-creatives-request.json

@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 review.

This PR touches the protocol source of truth (static/schemas/source/**), which is under a hard, deterministic approval gate (gated_paths: true). The current review_decision is REVIEW_REQUIRED, not APPROVED, so decision-table row 2 fires: the gate is not satisfied and the PR cannot be auto-approved.

No critical/high findings were reported. The reviewer surfaced two medium findings and two low findings — none blocking on their own — but the deterministic gate takes precedence.

Medium findings (non-blocking, for human reviewer awareness):

  • static/schemas/source/core/creative-variant.json:26 — variant_id uniqueness scope tightened (per-creative → per-agent) on a minor changeset
  • static/schemas/source/creative/sync-creatives-request.json:150 — New creatives[] per-batch uniqueness constraint not reflected in docs

Escalation reasons:

  • Gated paths touched (14 files under static/schemas/source/**, including additions creative-revision-id.json and creative-revision-content-mismatch.json plus modifications to creative-variant.json, error-code.json, index.json, and several creative task schemas) and review_decision is REVIEW_REQUIRED. Human/CODEOWNERS approval is required before merge.

Human reviewers should confirm the two coherence points above (variant_id scope semantics and the undocumented per-batch creative_id uniqueness constraint) as part of that review.

Medium findings

  • static/schemas/source/core/creative-variant.json:26 — variant_id uniqueness scope tightened (per-creative -> per-agent) on a minor changeset
  • static/schemas/source/creative/sync-creatives-request.json:150 — New creatives[] uniqueness constraint not reflected in docs

Why human review

  • Gated paths: 14 files under static/schemas/source/** are modified/added while review_decision is REVIEW_REQUIRED (not APPROVED) — human/CODEOWNERS approval required before merge.
  • Medium coherence gaps for reviewer attention: variant_id uniqueness scope tightened per-creative→per-agent, and a new per-batch creative_id uniqueness constraint is undocumented.
  • This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/creative-revision-id.json (added) matches static/schemas/source/**; static/schemas/source/core/creative-variant.json (modified) matches static/schemas/source/**; static/schemas/source/core/x-entity-types.json (modified) matches static/schemas/source/**; static/schemas/source/creative/creative-status-changed-webhook.json (modified) matches static/schemas/source/**; static/schemas/source/creative/get-creative-delivery-response.json (modified) matches static/schemas/source/**; static/schemas/source/creative/list-creatives-response.json (modified) matches static/schemas/source/**; 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/**; static/schemas/source/creative/sync-creatives-request.json (modified) matches static/schemas/source/**; static/schemas/source/creative/sync-creatives-response.json (modified) matches static/schemas/source/**; static/schemas/source/enums/error-code.json (modified) matches static/schemas/source/**; static/schemas/source/error-details/creative-revision-content-mismatch.json (added) matches static/schemas/source/**; static/schemas/source/index.json (modified) matches static/schemas/source/**; static/schemas/source/protocol/get-adcp-capabilities-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 23, 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-paths hard approval gate not yet satisfied.

This PR modifies/adds 14 files under static/schemas/source/**, which are under a hard, deterministic approval gate (gated_paths: true). The current review_decision is unknown/not APPROVED, so per decision-table row 2 the outcome must be escalate — Ladon cannot auto-approve gated protocol-schema changes until a human/CODEOWNERS approval is recorded.

The delta itself is clean: the developer walked back both prior medium findings. variant_id uniqueness is no longer tightened (default stays unique-within-agent-and-creative; agent-unique/immutable only applies when an agent advertises creative.supports_revisions), applied coherently across creative-variant.json, get-creative-delivery-response.json, preview-creative-request/response.json and the corresponding docs, with tests updated. sync_creatives.mdx now documents the creatives[] unique creative_id constraint. Schema↔docs coherence holds. No new findings in this run.

Because both prior mediums are resolved and no fresh actionable findings exist, sticky escalation (row 6) does not apply on its own — but the gated-paths gate (row 2) still stands and requires human review.

Escalation reasons

  • 14 files under static/schemas/source/** are modified/added while review_decision is not APPROVED — human/CODEOWNERS approval required before merge.

Why human review

  • Gated paths: 14 files under static/schemas/source/** are modified/added while review_decision is not APPROVED — human/CODEOWNERS approval required before merge (decision-table row 2). Affected files include static/schemas/source/core/creative-revision-id.json (added), static/schemas/source/core/creative-variant.json (modified), static/schemas/source/enums/error-code.json (modified), static/schemas/source/creative/sync-creatives-request.json (modified) and others.
  • This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/creative-revision-id.json (added) matches static/schemas/source/**; static/schemas/source/core/creative-variant.json (modified) matches static/schemas/source/**; static/schemas/source/core/x-entity-types.json (modified) matches static/schemas/source/**; static/schemas/source/creative/creative-status-changed-webhook.json (modified) matches static/schemas/source/**; static/schemas/source/creative/get-creative-delivery-response.json (modified) matches static/schemas/source/**; static/schemas/source/creative/list-creatives-response.json (modified) matches static/schemas/source/**; 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/**; static/schemas/source/creative/sync-creatives-request.json (modified) matches static/schemas/source/**; static/schemas/source/creative/sync-creatives-response.json (modified) matches static/schemas/source/**; static/schemas/source/enums/error-code.json (modified) matches static/schemas/source/**; static/schemas/source/error-details/creative-revision-content-mismatch.json (added) matches static/schemas/source/**; static/schemas/source/index.json (modified) matches static/schemas/source/**; static/schemas/source/protocol/get-adcp-capabilities-response.json (modified) matches static/schemas/source/**) and the current GitHub review decision is 'unknown', 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.

Creative revisions: immutable identity, re-review, and delivery correlation

1 participant