Audits a multi-asset campaign for drift against its frozen anchors - accent hex, canvas values, CTA radius, type weight set, motion damping-ratio floor, duration bands, shot grammar - and returns a per-asset drift table naming the exact anchor each asset violates and the fix owner. Use when someone asks "do these launch assets read as one campaign side by side", "our launch assets feel inconsistent side by side", "check this campaign for drift before it goes out", "the hero, the gallery, and the social images do not match - what changed", or when a campaign reaches three or more assets or a second maker. Do NOT use to judge the quality of one asset - use creative-direction-review instead; for auditing an entire brand across every surface, use brand-consistency-audit; for writing the anchors themselves, use art-direction-brief-writer; for checking one artifact against the brand charter, use brand-application-review; for the final pre-ship production checklist, use pre-ship-creative-gate.
---
name: campaign-coherence-review
description: Audits a multi-asset campaign for drift against its frozen anchors - accent hex, canvas values, CTA radius, type weight set, motion damping-ratio floor, duration bands, shot grammar - and returns a per-asset drift table naming the exact anchor each asset violates and the fix owner. Use when someone asks "do these launch assets read as one campaign side by side", "our launch assets feel inconsistent side by side", "check this campaign for drift before it goes out", "the hero, the gallery, and the social images do not match - what changed", or when a campaign reaches three or more assets or a second maker. Do NOT use to judge the quality of one asset - use creative-direction-review instead; for auditing an entire brand across every surface, use brand-consistency-audit; for writing the anchors themselves, use art-direction-brief-writer; for checking one artifact against the brand charter, use brand-application-review; for the final pre-ship production checklist, use pre-ship-creative-gate.
---
# campaign-coherence-review
Drift is the default failure of multi-asset work: every re-description of a rule is a re-interpretation, and by asset ten the campaign visibly belongs to three different companies. Audiences perceive coherence pre-attentively - nobody can name the drifted corner radius, but the set reads "less designed" and trust drops. This review catches drift asset by asset against the brief's frozen core, before the set ships side by side, and returns values and owners instead of arguments.
## Operating procedure
Run the steps in order: anchors before assets, because there is no measurement without a ruler; the complete matrix before any ranking, because per-anchor totals are what separate maker error from brief error.
### Step 1: Gather the charter, the anchors, and the asset manifest
Paste the charter block if one exists. If the client has a charter but the foundations pack is not installed, elicit the needed values directly and label them provisional. If no charter exists at all, halt and route to premium-design-foundations - never substitute worked-example values. The charter core values are forks, accent, canvas and ink, radius, weight set, motion bands.
Then gather:
1. **Anchor set** from the art-direction brief: the 3-5 frozen constants reused verbatim across the campaign. If no written brief exists, stop and route to art-direction-brief-writer first - drift cannot be measured against memory.
2. **Asset manifest**: name, surface, maker, and channel for every asset in the campaign.
3. **Reference asset**: default to the first approved asset; pick a different reference only if that asset itself failed its own review.
4. **Launch context**: assets shipping together are held to a stricter bar than assets shipping weeks apart. If a date or count is a guess, label it a guess and move on.
Confirm the campaign threshold before proceeding: this review applies at 3 or more assets or 2 or more makers. Below that, there is no set to cohere - review the single asset with creative-direction-review instead.