> ## Documentation Index
> Fetch the complete documentation index at: https://docs.interchange.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Practise finding places to advertise

> Run a local, fictional planning exercise and check its result without signing in or spending money.

Start with this request:

> Help me choose where to advertise. I have £10 for an awareness campaign in
> Great Britain from 1 to 7 October 2026. Show me a plan to review before anything
> is sent or bought.

This practice task uses fictional sellers held in memory. It does not connect
an account, read real inventory, contact sellers, save a campaign, or spend
money. The dates and prices are fixed teaching examples, not current offers.
It is a candidate exercise awaiting review, not an approved first-value task.

## Run the exercise

Use a checkout of the repository containing this guide with its workspace
dependencies installed. From the repository root, run:

```sh theme={null}
pnpm --filter @scope3/v3-experience-canary --silent buyer
```

No credentials or model are needed. The command runs a scripted version of the
request above and prints a checked JSON receipt. It does not interpret your own
text or measure how well a person or model understands the request.

The version is `seller-discovery@2`, with fixture and rubric version 2 and
candidate registry version 3. For the application-owned version of the task:

> My app will decide what to do. Help it find places to advertise within this
> budget and date range. Leave approval and next steps to my app.

```sh theme={null}
pnpm --filter @scope3/v3-experience-canary --silent buyer build-ad-app
```

`agency-plan` is also available for a small-business planning persona. All three
personas exercise the same fixed data; they are three scripted runs, not three
people or three independent proofs of product success.

## Check the plan

The exercise reads both pages of six fictional sellers. Only
`fictional-newsletter` meets the region, currency, budget and readiness rules.
The other five are excluded because of price, region, blocked access, missing
readiness information, or currency. A listed option is never assumed ready.

The draft keeps the £10 limit in GBP, the awareness objective, and the exact
flight dates. It requires approval and records zero live actions. Its fixture
prices only check the arithmetic; they do not forecast delivery or guarantee
inventory. This small teaching object is not a canonical campaign brief or an
API request you can send.

The deterministic check verifies the complete shortlist, exclusion reasons,
page coverage, dates, currency, objective, budget, and approval boundary. The
plan and seller data stay in memory and are not copied into the receipt.

## Recover from the expected error

The runner deliberately tries a negative budget. The fixture must reject it
with `BUDGET_INVALID`. It then restores the original £10 budget and checks the
whole plan again. Silently accepting the invalid budget fails the exercise.
A real planning workflow should ask you to correct the budget, not increase it
without your decision. A plan with no matches keeps that result visible.

## Read the receipt

Success has `event: "candidate_task_completed"`, `job.outcome: "succeeded"`,
and `result.scores.fixtureChecks` showing three passed checks out of three:
execution, correctness and recovery. A failed check produces
`candidate_task_failed` and exit code 1. Invalid command arguments produce a
bounded error without echoing the argument.

`approval` and `buyerDomainApproval` remain null, and `kpiEligible` remains
false. Install, OAuth, intended-account verification and approved first value
remain unavailable. `activation.receipt` and `activation.completeThrough` are
null: no authenticated completion event or complete event stream was observed.
Exit code 0 proves only that this local exercise passed.

You can save standard output as a receipt. Do not combine it with terminal
logs, prompts, credentials or other data. The receipt contains fixed labels,
versions, a random receipt ID, times and check outcomes. Reuse that same saved
receipt when replaying the observation; a new run creates a new ID.

## Move to a connected workflow

The local exercise cannot establish account eligibility or approval. A connected
run needs an explicitly eligible account, real OAuth and intended-account
verification, reviewed seller-discovery and planning contracts, and approval of
the exact task and fixture. Until those exist, keep those stages unavailable.

For current connected behaviour, use [Build an agent](/v3/build-an-agent) and
[Buyer workflows](/v2/setup/v3/buyer-workflows). Seller discovery is a read;
requesting proposals, saving a campaign and launching it are separate actions
outside this exercise.
