The three answers
A pass is a composed outcome, not a failure. Passing well is
relationship-building, and buyer agents that run managed evaluation score
sellers on response quality, not response volume — so a doomed bid costs you
standing that a graceful decline protects.
A pass genuinely withholds your answer, and it looks like a no-fit. When
your doctrine declines a brief, the buyer’s agent gets the same response your
storefront already returns when nothing matches: no composed proposal, and no
explanation. It cannot tell “declined” from “nothing matched” — that is
deliberate. AdCP has no first-class “no bid, with reasons” message today, so
rather than invent one we reuse the answer buyers already understand.Only the composed proposal is withheld. Passthrough inventory and proposals
you finalized on an earlier turn are a different lane your doctrine never
judged, so they still ship — withholding them would make a decline detectable
by what went missing.The decline itself never leaves your side. It is written for you: your record
of why your storefront walked away, readable on the proposal pass alongside
every other composed outcome, with a receipt back to the doctrine version that
decided.
What decides it
Two numbers and a posture, set alongside your Playbook prose:
Category fit is measured against this pass’s own output — the products the
agent actually composed and the inventory that fed them — never your whole
catalogue. Inventory you did not offer for this brief did not serve it.
A brief that names no vertical or channel we can compare is not a poor fit; it
is an unmeasured one, and it pitches. That is the common shape of a short
brief, and it is why turning doctrine on changes nothing for most traffic.
Your Playbook prose keeps doing what it always did: it shapes the argument,
the register, and the judgment inside a proposal. The numbers above decide only
whether a proposal happens at all — because whether a buyer gets an answer is
the one question that should never be decided differently on two identical
runs.
Named starting points
Adopt one, edit it, or write your own.
A storefront that has never set a doctrine has no qualification gate at all.
It pitches every brief it can compose products for, exactly as it did before
doctrine existed — nothing is passed or countered on your behalf. Doctrine only
starts deciding once you set one.
Such a version reads back as
house_default with isDefault: true, and the
numbers shown for it are display and starting values, not active thresholds:
they are what you would begin from if you adopted them, not a bar your briefs
are being measured against today. You cannot adopt house_default by name, so
“no doctrine set” has exactly one spelling. To return to it, clear the doctrine
or activate a version that never had one.
Adopt one by name:
custom. So do a named
variant’s numbers after you edit one of them — the label always describes the
numbers actually in force, never the strategy you started from.
Test it before it ships
Doctrine is versioned and activated exactly like the rest of your Playbook, so the loop is: draft a version, test a brief against it, then activate it once it reads right.- Author a new version with the doctrine you are considering. Leave
activateoff to keep it out of production while you look at it. - Test that version by name — pass its number as
operatingInstructionsVersiontotest_storefront_brief, or ask Murph to test a brief against it. Omit it and the active version is used, as before. - Read the result. It carries a
bidDecision— the disposition, which rule decided it, the measured category fit, and the doctrine version behind it — andcomposedPitch, the argument or the branded decline the buyer would actually have received. The version that was evaluated is reported back, so you are never guessing which one you just tested. - Activate when it reads right.