# Changelog — Drive Social creative pipeline

Three skills, one workflow: Codex `$brand-standards` → Claude Cowork `/creative-strategy` →
Codex `$meta-ad-creative-generator`. Versions are per skill; the handoff contract between them
is versioned separately (`drive_social_handoff`).

| Skill | Current version | Installed |
|---|---|---|
| `$brand-standards` (Codex) | 4.0 | 2026-09-11 |
| `/creative-strategy` (Claude Cowork) | 4.3 | 2026-09-11 |
| `$meta-ad-creative-generator` (Codex) | 4.1 | 2026-09-11 |
| Handoff contract | v1 out of Step 1 · v2 out of Step 2 | 2026-09-11 |

---

## v4 — 2026-09-11 · "Ideas, not templates"

**Why.** The v3 skills produced visually different ads without producing better ads. Step 2 was
assigning layouts (format families, color modes, rotation quotas, a mandatory no-photo card per
bucket) and Step 3 was executing them, so weak design decisions were being specified upstream and
rendered faithfully downstream. A Codex self-audit and a Claude review agreed on the same
diagnosis. v4 moves visual decisions to the step that can see the pixels, gives every concept a
visual idea instead of a layout, and adds a real visual-review gate before anything is presented.
The workflow also changes shape: the client approves or rejects rendered ads, approved ads go
live, and rejected ones are remade as new options in a follow-up — per-ad editing is retired.

### `/creative-strategy` — v3 → v4.3 (Claude Cowork)

Added
- **Concept count is asked every run** — "5 or 10? (or type a number)" plus a reserve count. The
  number is a ceiling, not a quota; weak concepts are cut, never padded.
- **Visual idea per concept.** Three new required fields: *Visual idea*, *Message–image
  relationship*, *Why this client*. A layout description no longer counts as a concept.
- **Per-concept asset plan** — Keep real / Enhance / Generate / Must accomplish — replacing the
  bucket-level asset mode as the operative instruction (the mode survives as a summary only).
- **Section 4: Resolved production brief.** One place listing the rules that govern the run, each
  tagged `client-approved requirement`, `strategist-approved direction`, `verified fact`,
  `proposed recommendation`, or `unresolved question`. Overrides quote the exact Appendix A rule
  they supersede.
- **Reserve ideas per bucket**, marked NOT AUTHORIZED FOR PRODUCTION, held for replacements.
- **Step 5: Replacement round** (`/creative-strategy replace`). Rejections are classified as
  *replace* (new idea, from the reserve first), *revise* (same idea, new execution), or *correct*
  (targeted fix) — proposed by the skill, confirmed by the strategist. Approved concepts get a
  `preserve` status and are otherwise byte-for-byte unchanged, verified by diffing against an
  archived copy of the prior round.
- **Visual benchmarks** — `brand/benchmarks/approved/` and `rejected/` with one-line notes; if
  none exist, the first client review establishes them.
- **Rejection scope.** Every client rejection is recorded as `execution`, `concept`, `campaign`,
  or `brand`; only the last two become restrictions.
- **Explicit restrictions** carried as a separate mandatory list with source, date, and scope,
  distinct from suggested treatments and from anything unspecified.
- Bucket rules that were previously repeated by hand: hero-product businesses, restaurants by
  occasion, shared-menu multi-location clients, both tonal registers by default, outside research
  as creative substance, no "vibes" in copy.
- Handoff contract upgraded to **`drive_social_handoff: v2`**: `round`, `concepts_per_bucket`,
  `reserve_per_bucket`, `benchmarks`, `suggested_treatments`, `restricted_treatments`, and the
  `build` / `preserve` / `revise` / `correct` action lists (IDs always quoted — `"1.10"`).

Removed
- "Resolve everything here" as the operating principle; layout is now Step 3's decision.
- The variation matrix, rotation rules, family census, and required format family / color mode /
  headline device / photo treatment fields. The vocabulary survives as an optional *Suggested
  execution* line marked provisional.
- The "at least two no-photo concepts per bucket" quota and its "cheap insurance" rationale.
- The `GEN-` plate brief table and the separate treatment-rotation table.
- The fixed 10-concepts-per-bucket default.

Changed
- `brand_tile` is optional (with `brand_tile_status: approved | reference`); `people_policy` must
  be resolved before people-dependent concepts but is asked, not assumed.
- v3 `permitted_families` / `permitted_color_modes` are read as suggested vocabulary only;
  genuine prohibitions inside them are moved into `restricted_treatments`.
- Appendix A remains verbatim for traceability but is no longer the "source of record for the
  visual system" — Section 4 governs.
- Tone rule: both registers by default, unless audience, subject, or an approved direction calls
  for one (say which).
- `run_mode: iterate` is explicitly performance-driven scaling, distinct from replacement rounds.
- v4.1 (same day): quoted YAML IDs, rejection scope, contextual tone rule, and `preserve` defined
  as a status-line change only — Codex's four compatibility refinements.
- v4.2 (same day): the replacement round is explicitly **optional** — the default after a client
  review is to go live with approved ads and build fresh at the next refresh. Rejected ads are
  described in plain words (filename, headline, "the testimonial ones"); the skill matches them to
  concepts and confirms in a table. Every prompt states what it needs, why, and an example answer,
  for team members running the skill. **Client-provided assets are always approved for use, people
  in them or not** — `people_policy` governs AI-generated people only.
- v4.3 (same day): all folder references made system-agnostic for Mac and Windows team members —
  the client folder is whatever the strategist points the skills at; no built-in default path.
  The team-distributed Codex skills carry the same change.

### `$brand-standards` — v3 → v4.0 (Codex)

Added
- Six-way evidence classification in the guide: client-approved requirement, strategist-approved
  direction, verified fact, **observed website styling**, proposed recommendation, unresolved
  question. The website is a source, not a ceiling for ad design.
- Asset inventory with condition: usable-as-is, enhancement candidate, identity reference, or
  missing — with Keep real / Enhance / Generate / Must accomplish principles for Step 2.
- `suggested_treatments` and `restricted_treatments` (sourced, scoped) in the v1 handoff;
  optional `brand/benchmarks/approved/` and `rejected/` folders.
- `references/asset-intake.md` — Drive scan and download rules moved out of the main skill.

Removed
- Industry-to-font templates, fixed color area percentages, "exactly one accent" rules, family
  rotation, compulsory no-photo cards, and blanket bans on creative effects.
- `permitted_families` / `permitted_color_modes` for new guides (legacy lists, if retained, are
  labeled suggested vocabulary).
- Mandatory brand tile and the three brand-board prompts as required artifacts (both optional now).

Changed
- Rejected renders are recorded as specific execution failures, not universal bans.
- The guide does not select production concepts, set counts, or emit action lists — Step 2 owns
  those. Handoff stays at v1; the skill version is separate.

### `$meta-ad-creative-generator` — v3 → v4.1 (Codex)

Added
- **Visual gate before presentation.** Every master is opened at full size and at ~360 px; five
  checks (idea and persuasion, composition, typography, brand and fidelity, finish and placement)
  each recorded pass / revise / blocked with observable evidence. Technical validity, creative
  review, and client approval are separate statuses.
- **Execution brief per concept** written before rendering: visual idea, attention mechanism,
  image–message relationship, hero subject, composition, asset plan, and the failure to avoid.
- **Handoff v2 routing** — `build` / `preserve` / `revise` / `correct` honored as disjoint lists;
  reserves and preserved concepts fail before any API call. New `scripts/handoff_contract.py`
  validates routing; `scripts/test_workflow.py` carries 33 offline regression tests.
- **Protected originals** — `preserved-files.json` hash inventory checked before and after
  execution; approved files are never overwrite targets.
- **Two production routes**, both subject to the visual gate: a fully generated master, or AI
  imagery finished deterministically with the original logo, licensed fonts, and editable layout
  tools (this was prohibited in v3).
- **Reliable resume.** Each job writes a sidecar receipt with a fingerprint of prompt, ordered
  sources and their contents, model, quality, size, and candidate count; resume requires a
  matching receipt plus decoded dimensions and SHA-256. Changed jobs need new filenames or
  revision directories.
- **v4.1 renderer:** default model is now `gpt-image-2.5-sunburst` with `quality: high` (`xhigh`
  / `max` available for specific unmet requirements). `gpt-image-2` and Flare remain explicit
  overrides, never silent fallbacks; switching models requires a new revision path.
- Bounded exploration: up to three concepts × two candidates for a new direction, two internal
  repair rounds per concept, batches of at most five.

Removed
- **Stage A** whole-campaign background approval before any ad is built.
- The single-ad smoke test as the sole gate; the 45-ad default target; the 32% band / 42% panel
  geometry; five-family minimum; big-type quota; asset-reuse cap; universal effect bans; the
  ban on local compositing and finishing.
- Treating `gpt-image-2` output as the final master by definition.

Changed
- Similarity audit is advisory only — a duplicate warning, never a taste score or a redesign
  trigger.
- Buckets' `asset_mode` is a summary; the per-concept asset plan is operative.
- Rejected benchmarks establish specific failures, not universal bans; approved benchmarks guide
  craft without copying claims.

---

## v3 — 2026-09-10 · "Variety by layout" (superseded)

- `/creative-strategy` v3: format families, color modes, headline devices, photo treatments, a
  per-bucket variation matrix, rotation rules, and two no-photo concepts per bucket — the
  response to "ten ads look like one ad." Fixed the symptom, not the cause; replaced by v4.
- `$brand-standards` v3: brand tile, `permitted_families`, `permitted_color_modes`, `people_policy`
  added to the handoff.
- `$meta-ad-creative-generator` v3: 4:5 masters at 1088×1360; per-job `quality`, `candidates`,
  `photo_required`; dry-run variety audit; new `scripts/similarity_audit.py`.

## v2 — 2026-09-02 (the version this site previously described)

- Three-run pipeline with the single-file handoff, the bucket gate in Run 2, Stage A background
  approval and the one-ad smoke test in Run 3, 45 ads in batches of five.
