/operator-cmo:ship-gate
The common failure of an agent marketing stack is not that it publishes something terrible. It is that a human promises to approve everything, the stack produces faster than the human reads, and approval quietly becomes either a queue or a rubber stamp.
Reviewing every item does not scale. Reviewing nothing is negligent. So review by tier, and cap production at the review capacity you actually have.
The three tiers
Tier A: goes out. Low blast radius, reversible, makes no claims about the company or a customer. Internal briefs, keyword research, outlines, list building, drafts that stay in the repo. No human step.
Tier B: sampled. Reversible, public, makes only claims already evidenced in positioning.md. Social posts, blog updates, newsletter sections, landing page copy edits. One in N is read in full before it goes out, N is set in the policy file, and every item is still checked automatically for the tier B rules below. If two sampled items in a rolling window of twenty fail, the tier drops to C for that channel until a review clears it. That rule is what makes sampling honest rather than optimistic.
Tier C: a human reads every one. Anything that is hard to reverse or that speaks for the company in a way a correction cannot catch up with. Pricing, legal and compliance copy, named customer references, first contact with a named account, paid spend, anything with a number that is not in positioning.md, anything a regulator or a lawyer would read differently than a marketer.
The capacity rule
This is the part that stops the bottleneck.
quarter.md states review capacity per week, by tier. Before producing, the
brief skill counts the queue in marketing/drafts/. When the queue plus the
new item exceeds capacity, production throttles. It does not downgrade a
tier, and it does not ship the overflow unreviewed.
Throughput is what gets shipped, not what gets generated. A stack producing 40 assets a week into a 10-a-week review capacity has a throughput of 10 and a backlog of 30, and reporting it as 40 is the most common lie in this category.
The automatic checks
Every draft at any tier is checked before it can leave marketing/drafts/:
- Header present, naming bet, decision rev, brief and gate tier.
claims_flagged: 0. Any flagged claim forces tier C.- No em dashes, no banned phrases from the content skill's list.
- Every number traceable to positioning.md.
- For outbound: every personalised line has a
src:, and the list was filtered against the do-not-contact file.
A draft failing any of these does not get a tier. It goes back.
Writing the policy
On first run, create marketing/policy/ship-policy.md:
# Ship policy
rev: YYYY-MM-DD · owner: <name>
## Tier A: goes out
<channels and asset types>
## Tier B: sampled 1 in <N>
<channels and asset types>
escalate to C if 2 of the last 20 sampled items fail
## Tier C: human reads every one
<channels and asset types>
## Never automated
<the short list of things this company will not let an agent do at all>
## Capacity
tier B: <n>/week · tier C: <n>/week
Ask the operator to fill "Never automated" themselves and do not suggest defaults for it. It is the one section that should come from their own risk appetite rather than from a template.
Classify mode
Given a draft, read its header and content, apply the tiers, run the automatic checks, and return: tier, checks passed or failed, whether it is inside capacity this week, and what the human has to do next. Then stop. This skill never publishes and never sends. The last action is always a person's.
No em dashes.