Skip to content

docs(creative): creatives outlast campaigns + signal state changes (#2260)#4628

Merged
bokelley merged 2 commits into
mainfrom
bokelley/issue-2260-scope
May 17, 2026
Merged

docs(creative): creatives outlast campaigns + signal state changes (#2260)#4628
bokelley merged 2 commits into
mainfrom
bokelley/issue-2260-scope

Conversation

@bokelley
Copy link
Copy Markdown
Contributor

Summary

Resolves #2260 — the 3.0 spec punted on creative retention with "Retention of unassigned creatives is seller-defined." Platform research (Meta, Google Ads, GAM, DV360, FreeWheel, TTD, Spotify, TikTok, Reddit, Amazon DSP) showed no industry consensus on a numeric floor — GAM is indefinite by policy, Meta ~37mo, FreeWheel 25mo, most others publish nothing. The dominant pattern is "archive, never hard-delete," and the buyer-side guarantee that actually matters is observability of state changes, not a fixed retention number.

This PR drops the hedge and replaces it with two normative rules:

  1. Creatives outlast campaigns. A creative MUST persist in the library independently of the buys that reference it. Holds regardless of submission path — sync_creatives, inline on create_media_buy, or platform-native upload.
  2. State changes are observable. When a seller archives an unassigned creative (inactivity, post-flight expiry, storage policy) or transitions approvedrejected, the seller MUST signal it — via impairment if there's a live buy, via a creative state-change notification otherwise. Transport mechanics are owned by Creative lifecycle webhooks: formalize state-change notifications outside media buy lifecycle #2261.

A library creative is the bundle of buyer-supplied inputs (uploaded assets, a brief, brand+catalog pointers, or any combination). This sidesteps the generative/non-generative fuzziness — retention applies to the bundle. Whether a format's rendered outputs are individually addressable (PMax-style fan-out vs. addressable variants) is a format-level concern, handled by RFC #3305 / #3307.

What's intentionally not here

  • No retention floor number. No defensible single number — see platform research above.
  • No new creative.expired event type. That's Creative lifecycle webhooks: formalize state-change notifications outside media buy lifecycle #2261's job. We say "MUST signal" and let the webhook foundation work define transport.
  • No generative carve-out for inline creatives. Bundle-of-inputs framing handles it; inline lifecycle stays identical to sync_creatives (already established at creative-libraries.mdx:252).
  • No new enum values, no new fields. Description-only widening of archived enumDescription. Fully additive.

Files

  • docs/creative/creative-libraries.mdx — new "Creatives outlast campaigns" subsection, replacing the seller-defined hedge at line 35.
  • static/schemas/source/enums/creative-status.json — widened archived enumDescription to acknowledge seller-initiated archive and require the state-change signal.
  • .changeset/2260-creative-retention-outlasts-campaigns.md — minor bump.

Cross-refs

Test plan

  • CI passes (precommit suite ran clean on commit)
  • Docs render correctly — verify new section anchors and the #health-and-dependency-impairment cross-link resolve
  • WG review of the two MUST clauses (no live-buy signal carve-out, no unassigned-creative signal carve-out)

🤖 Generated with Claude Code

bokelley and others added 2 commits May 17, 2026 05:45
…2260)

Replace the 3.0 "retention seller-defined" hedge with a normative rule:
library creatives MUST persist independently of the buys that reference
them, regardless of submission path (sync_creatives, inline, or
platform-native). Sellers MAY archive unassigned creatives for
inactivity, post-flight expiry, or storage policy, but MUST signal any
state change on a buyer-synced creative — via impairment on the buy when
live assignments exist, via a creative state-change notification
otherwise (#2261 owns transport).

Widen the creative-status archived enumDescription to acknowledge
seller-initiated archive and require the state-change signal. Additive
description-only change; no new enum values, no new fields.

Frame a library creative as the bundle of buyer-supplied inputs (assets,
brief, brand+catalog pointers, or any combination), sidestepping the
generative/non-generative fuzziness. Variant addressability is a
format-level concern handled by #3305/#3307.

Closes #2260. Refs #2261, #3305, #3307.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two blockers from protocol review:

1. Replace "MUST emit via buyer's registered notification channel" with
   the surface that exists today — list_creatives must reflect the new
   status on the next read. Aligns with the snapshot-and-log contract,
   which already names list_creatives as the conformant signal for
   resource state changes outside an active buy. #2261 owns the future
   push channel; promoted to SHOULD-additionally once it ships.

2. Add approved → archived (seller-initiated) edge to the creative
   state machine, scoped to creatives without active package
   assignments. Sellers MUST NOT seller-archive a creative with active
   assignments — the approved → rejected revocation path with an
   impairment is the only conformant route when active serving is
   involved.

Friction note from product review: add explicit "library can be a thin
view over per-buy storage" line for CTV/podcast vendors whose ad server
has no library object distinct from per-buy attachment.

Docs nits: tighten archived enumDescription wording; constrain
seller-archive to no-active-assignments; update changeset to reflect
the state-machine edit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bokelley bokelley merged commit e6cd62c into main May 17, 2026
18 checks passed
@bokelley bokelley deleted the bokelley/issue-2260-scope branch May 17, 2026 10:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Creative retention contract: define seller/creative-agent obligations for unassigned creatives

1 participant