Zum Inhalt springen

Process — Creative Submission & Moderation

Process — Creative Submission & Moderation

Section titled “Process — Creative Submission & Moderation”

Parent spec: 2026-05-23-03-ad-moderation-design.md Subsystem: 03 ad-moderation Date: 2026-05-23

Covers the end-to-end happy path (upload → auto-filter → admin queue → approval), the rejection branch, and the post-approval revocation branch. Inputs from 02 (session/user), outputs consumed by 04 (placement gate) and 05 (saga re-validation per D27).


An advertiser uploads a creative and submits it for automated safety and URL checks. An administrator reviews passing creatives, records approval and notifies the advertiser. Auctions and payment workflows check approval again before use.An advertiser uploads a creative and submits it for automated safety and URL checks. An administrator reviews passing creatives, records approval and notifies the advertiser. Auctions and payment workflows check approval again before use.

An automated safety, keyword or URL check rejects a creative, records the reason and emails the advertiser a link to the creative.An automated safety, keyword or URL check rejects a creative, records the reason and emails the advertiser a link to the creative.

24 h SLA fallback (hourly cron):

An hourly job finds creatives pending for more than 24 hours, records a system rejection and notifies each advertiser.An hourly job finds creatives pending for more than 24 hours, records a system rejection and notifies each advertiser.

An administrator revokes an approved creative and notifies its advertiser. Existing bids remain, but payment revalidation skips the revoked creative and moves to the next bidder without adding a strike in this case.An administrator revokes an approved creative and notifies its advertiser. Existing bids remain, but payment revalidation skips the revoked creative and moves to the next bidder without adding a strike in this case.

  • All moderation_decisions writes are append-only; no UPDATE on prior rows.
  • is_approved(ad_id) is a service-binding RPC (not HTTP), <50 ms p95 — required by 05 saga step budgets.
  • House ads (users.id='house') bypass auto-filter; admin-only path; used by 05 as cascade terminal.
  • Sentry tags every step with subsystem=ad-moderation, plus auto_filter_verdict and classifier_model on relevant spans.