# AI village: generative-agent ad test (task 13)

**Read [`REPORT.md`](REPORT.md) for the full write-up, and open [`map.html`](map.html) for the replayable diffusion map.**

This is a small replication of Park et al. (2023). The town is Maple Hollow: 11 personas in 8 places, one Saturday from 08:00 to 20:00. Every perception,
plan, importance rating, reflection, line of dialogue and interview answer came from a subagent call that saw only that persona's
retrieved memories. That was 846 calls in run 1 and 798 in run 2, with no failures. The script (`sim/engine.js`) only holds world state, memory streams and
retrieval scoring (recency + importance + TF-IDF relevance). We tested four versions of one ad, a $25/week "Fernbrook Farm Box", each introduced
at one place or to one person and spread only by conversation. We ran each version twice.

| Variation (what changed) | Knew at 8 pm, memory-verified (run 1 / run 2) | Heard from a neighbour | Would sign up "yes" among those who knew (both runs) |
|---|---|---|---|
| A. Plain flyer at the café (control) | 11 / 10 of 11 | 5 / 3 | **0 of 21** |
| B. + two-sided referral reward (incentive) | 11 / 10 | 4 / 3 | 7 of 21 |
| C. "Keep the last family farm alive" (framing) | 10 / 10 | 5 / 3 | 8 of 20 |
| D. Farmer tells the café owner in person, no flyer (messenger/channel) | 11 / 10 | 10 / 10 | 5 of 21 |

There were no hallucinated yeses and no false yeses on a decoy product. Every "yes" was checked against the memory stream (§7.1.1).

**Findings.** Awareness saturated: a town of 11 talks about everything. Where the message was placed decided who heard, not the wording. What varied was belief:
a bare flyer from an unknown sender set off a "that farm's been abandoned for years" rumour in both runs, and nobody signed up.
A face (D), a story (C) or a reason to recruit (B) removed the doubt. The ordering among B, C and D flipped between runs, so it is not
established. Caveats: 11 agents, one day, two runs, one LLM playing everyone, stated intent rather than purchases, and some confabulated local history.
All of these are in REPORT.md §6.

**Deliverables.**
* Simulation code: `sim/`
* Memory streams, conversations, timelines and interviews per variation: `runs/<variation>/` (run 1) and `runs/replicate_2/<variation>/` (run 2)
* Results, one entry per variation (ad text, personas, number who knew, who-told-whom path, replicate summaries): `results.json`
* Pre-registered expectations: `PREDICTIONS.md`
* Report: `REPORT.md`
* Interactive map: `map.html`

**Assumptions.** Awareness is operationalised as "said yes and the memory stream contains how they found out". For the checker, "the product was named"
means any of: Fernbrook, farm box, Dana Whitlock or Whitlock, or the phone number. No embedding model was available, so relevance uses TF-IDF.
Simulation granularity is 2-hour blocks. The full list of simplifications is in REPORT.md §5.
