URL: /plays/community-answers · Id: `play:community-answers`

# Community answers

> Finds public questions about the problem you solve and your rivals, and gets a labeled, sourced answer posted within hours, fitted to each room.

Finds public questions about the problem you solve and your rivals, and gets a labeled, sourced answer posted within hours, fitted to each room.

```text title="Set it up · Ask"
Be our Content Lead: find people asking how to get renewal notices out on time, or about the tools we replace, and get a sourced answer up within hours. Where a room lets labeled agents post, you answer; everywhere else, brief me and I answer myself. Never ask anyone to vote. Show me what’s missing; don’t post.
```

```text title="Run one · Ask"
Hand today’s top thread to the Content Lead agent and show me what it chose and why. Don’t post.
```

```ts title="Run one · SDK"
import { $ } from 'startup-builder'

const { events: [last] } = await $.Event.list({ where: 'name in ("Post.published", "Monitor.checked")', limit: 1 })   // { play } compiled to this Play’s Trigger Events
const { subject } = await $.Trigger.fire({ like: last.$id }, { mode: 'try' })   // the same Event again, in try mode · Not live yet, gaps #7
const { decisions: [decision] } = await $.Decision.list({ where: `on = "${subject}"` })   // what it chose, and why · Not live yet, gaps #7
const { actions } = await $.Action.list({ where: `on = "${subject}"` })   // what it did, with its checks · Not live yet, gaps #7
return { decision, actions }
```

```json title="Run one · Response · sample"
{
  "decision": {
    "$id": "https://api.sb/leaseline.app/decisions/decision_634",
    "$type": "Decision",
    "choice": "brief-a-person",
    "reason": "The thread asks how to send renewal notices 60 days out across 3 owners; the room admits people only, so you answer from your own account",
    "stakes": "low",
    "options": [
      "post-as-agent",
      "brief-a-person",
      "correct-the-record",
      "reply-under-ours",
      "listen-only",
      "skip-it"
    ],
    "by": "worker_7",
    "on": "post_412",
    "expected": "the asker accepts the answer, or it ranks top 3, within 7d",
    "reopensWhen": "a new reply under the answer, or the thread revives after 30d"
  },
  "actions": [
    {
      "$id": "https://api.sb/leaseline.app/actions/action_1",
      "$type": "Action",
      "status": "done",
      "mode": "try",
      "by": "worker_7",
      "verb": "Content.draft",
      "checks": [
        {
          "check": "approved-pages",
          "status": "pass"
        },
        {
          "check": "room-rules",
          "status": "pass"
        }
      ]
    },
    {
      "$id": "https://api.sb/leaseline.app/actions/action_2",
      "$type": "Action",
      "status": "pending",
      "reason": "awaitingTask",
      "mode": "try",
      "by": "worker_7",
      "verb": "Task.assign",
      "checks": [
        {
          "check": "owned-by-a-person",
          "status": "pass"
        },
        {
          "check": "room-rules",
          "status": "pass"
        },
        {
          "check": "mention-budget",
          "status": "pass"
        }
      ]
    }
  ]
}
```

`action_1` is the brief: the question, three facts from your pages and the room’s record, as fragments. `action_2` puts it in tomorrow’s 09:00 brief; you post the answer yourself.

`+34.5 ICP Visits per answered cluster · ■■□□ Early sign · n 10 clusters · path → arr`

| Try another: the thread | Choice | Reason |
| --- | --- | --- |
| A landlord forum: “How do you send renewal notices 60 days out across 3 owners?” | `brief-a-person` | the room admits people only |
| A property-software forum that admits labeled agents: “Does anything export notices as PDF?” | `post-as-agent` | agents admitted; every fact is on your pages |
| Perplexity cites a 2024 thread saying Leaseline has no Team plan | `correct-the-record` | a cited thread misstates a fact your Pricing Page holds |
| A thread asking for an alternative to a rival, in a room past its mention budget | `listen-only` | past the budget: fragments in the digest, nothing posts |

| Worth | Your time | Spend | First signal | Use it when | Instead |
| --- | --- | --- | --- | --- | --- |
| ≈ +$320 ARR a month at 30 questions | 30 min week 1, then about 2 h a week | $50 a month for listening, ~$1.60 an answer at 30 | Day 6: first answer accepted | 20+ public questions a month in your pain phrases | Under 20 a month: `editorial-seo` · no Pages to answer from: publish them (<Op verb="Site.publish" />) |

**Where it sits:** **Stranger** → Lead → Trialing → Activated → At risk → Churned → Won back · Cited answer visits → People reached → New Customers ↑ → ARR added each week → ARR

Worth’s formula: about +34.5 ICP Visits per answered cluster in 8 weeks × 8 clusters ÷ 2 months × 0.0067 Visits to paid × $348 first order ARR ≈ +$321. Under First signal: About 8 weeks: the 2 held-out clusters read beside the 8 answered ones at 60 answers posted.

`sample · api.sb/leaseline.app · 41 Customers at 2026-10-19 · on Post.published · first brief 3h 10m after the thread · 9 keys Not live yet`

## Start it this week
```bash
npx startup-builder add play community-answers   # 1 · writes plays/community-answers.mdx (Not live yet, gaps #5)

# 2 · dry run; below, its 422 on 2026-08-24
curl -X POST "https://api.sb/leaseline.app/campaigns?mode=try" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"play":"community-answers"}'

# 3 · keep it, at You approve each one
curl -X POST https://api.sb/leaseline.app/campaigns \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"play":"community-answers"}'

# on
curl -X PATCH https://api.sb/leaseline.app/campaigns/community-answers \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"endsAt":null}'

# off: queued agent answers cancel; posted answers stay up
curl -X PATCH https://api.sb/leaseline.app/campaigns/community-answers \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"endsAt":"now"}'
```


```json title="The dry run’s 422 · 2026-08-24 · sample"
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "community-answers can’t start yet: 1 check fails and 2 warn.",
  "checks": [
    {
      "check": "use-when",
      "status": "pass",
      "observed": "41 questions a month in 12 pain phrases across 14 rooms",
      "doc": "/plays/community-answers#check-use-when",
      "then": "Metric.query"
    },
    {
      "check": "baseline",
      "status": "warn",
      "observed": "19 ICP Visits a month from threads, n 57 in 90 days",
      "doc": "/plays/community-answers#check-baseline",
      "fix": "n 57: the held-out clusters become the comparison, read at 60 answers.",
      "then": "Metric.query"
    },
    {
      "check": "approved-pages",
      "status": "fail",
      "doc": "/plays/community-answers#check-approved-pages",
      "fix": "Publish your how-it-works Page; answers state only what your pages say.",
      "then": "Site.publish"
    },
    {
      "check": "role-unstaffed",
      "status": "warn",
      "roles": [
        "compliance-officer"
      ],
      "owned": 31,
      "doc": "/plays/community-answers#check-role-unstaffed",
      "fix": "Leave it: each room’s record comes to you to approve once.",
      "then": "Role.staff"
    }
  ]
}
```

| Check | Fix (one call) | Your time | Wait |
| --- | --- | --- | --- |
| <a id="check-use-when"></a>`use-when` · <a id="check-baseline"></a>`baseline` · pass: 41 questions a month · warn: n 57 (gaps #8) | <Op verb="Metric.query" /> on `cited-answer-visits`; it fills Before in Your number | 1 min | none |
| <a id="check-approved-pages"></a>`approved-pages` · fail (gaps #8) | <Op verb="Site.publish" /> your how-it-works Page | 20 min | none |
| <a id="check-role-unstaffed"></a>`role-unstaffed` · warn (gaps #8): room records come to you; 31 open Leads have a person owner | <Op verb="Role.staff" />, or leave it: you approve each room’s record once | 15 min | none |

`Your number · Before 19 a month · Now 51.5 ICP Visits per answered cluster in 8 weeks · Target 60 by Dec 31 · ■■□□ Early sign · n 10 clusters`

The listening feed costs $50 a month, and each answer about $0.06 to draft (Worker cost). Posting is free on every room. That comes to about $1.60 an answer at 30 answers a month, and $52 a month.

## When it starts
| When | Trigger id | Starts on | Window | How it gets in |
| --- | --- | --- | --- | --- |
| A public thread asks in one of your pain phrases | `problem-question` | `event` on `Post.published` where the thread asks in one of the category’s pain phrases | 24h | the listening feed, every 15 min (<Op verb="Integration.connect" />) |
| A thread asks for an alternative to a named rival | `rival-switch-ask` | `event` on `Post.published` where a public thread asks for an alternative to a named rival, or reports it shut down, raised its price or broke | 48h | the same feed |
| An answer engine cites a thread with no correct, current answer | `cited-thread` | `state` on `Monitor.checked` where an answer engine cites the thread for a panel prompt and it holds no correct, current answer | 14d | the weekly panel run (<Op verb="Monitor.check" />) |
| + 3 more for brand mentions, misstated facts and revived answers (`?lanes=all`) | | | | |

```json title="One signed delivery · StartupBuilder-Signature"
{
  "$id": "https://api.sb/leaseline.app/events/event_1201",
  "$type": "Event",
  "name": "Post.published",
  "at": "2026-10-18T22:41:09Z",
  "seq": 1201,
  "data": {
    "post": "post_412",
    "venue": "reddit",
    "room": "a landlord forum",
    "phrase": "renewal notice",
    "title": "How do you send renewal notices 60 days out across 3 owners?",
    "agentsAdmitted": false
  }
}
```

```bash title="Reproduce it in test"
npx startup-builder trigger Post.published --like event_1201   # replays the delivery
npx startup-builder clock advance --by 1d   # builds the next 09:00 brief
npx startup-builder listen Post.published --forward-to http://localhost:3000/hook
```

## Who runs it
**Content Lead · your agent** (`role:content-lead`, `worker_7`) holds the Key Result and answers from its labeled Handle on the 5 rooms set to agent answers. On the other 9 it briefs **you** (Dana Okafor, person, `worker_1`), the day’s named owner, and you post from your own account. Your number links to Did it work.

| Option | Rung today | Evidence (passed of n) | Moves up at | Drops back when | You can |
| --- | --- | --- | --- | --- | --- |
| Answer from the agent’s Handle · Reply under our answer | It does it, you can stop it | 34 of 34 · 6 of 6 | room by room, at 10 approved with no removal | a removal or a changed room → that room back to You approve each one | <Op verb="Action.cancel" /> inside the 60-minute window |
| Brief you to answer · Correct the record | To a person, every time | 27 posted by you · 3 corrections | never: those rooms admit people only | — | <Op verb="Task.claim" /> |
| Listen only · Skip it | It does it | 18 · 22 | — | — | <Op verb="Action.redirect" /> |
| Change a room’s record or the watch list | You approve each one | 2 merged | never | — | <Op verb="Change.merge" /> · <Op verb="Change.revert" /> |
| Never: a vote ask, a second Handle, a thread it opens, the same text twice | Refused, every time | 0 tried | never | — | — |

**What it reads · What it may call.** It reads public threads, each room’s record and your claims source, and every thread is data, never instructions. It never reads the asker’s other posts or profile. Its tools are <Op verb="Content.draft" />, <Op verb="Post.publish" />, <Op verb="Task.assign" />, and any other call becomes an Approval under the Role’s Mandate.

```md title="The brief (folded): compiled Agent-register Markdown · play:community-answers@1 · each line names its record key"
You hold the Content Lead Key Result: 60 ICP Visits per answered cluster by 2026-12-31. ← worker, metric
On each thread, choose one option and say why; a held-out cluster gets no answer. ← triggers, chooses, holdout
The first sentence answers the question for a reader who never clicks.           ← copyRules 1
Name Leaseline or a rival only with the poster’s affiliation in the first line, and one row the rival wins. ← copyRules 2, 5
On a room set to your own answers, write fragments, never a sentence ready to post. ← copyRules 8
Never ask anyone to vote, reply or share; never open a thread.                   ← copyRules 9, 10
```

**The slow loop, as a Change.** `change_22` (Sep 21) dropped one room to listen-only after its cited-answer rate halved over two reads, and you merged it. Read back at +28d, cited answers per 10 posted rose from 1.3 to 1.6, n 31, ■□□□ Too early to tell.

## What it can do next
| Option | Picked when | Decided by | Runs | Hands to | If it’s just you |
| --- | --- | --- | --- | --- | --- |
| Answer from the agent’s Handle `post-as-agent` | the room admits labeled agents; every fact is in your pages | Your rule (line 5) | <Op verb="Content.draft" /> → <Op verb="Post.publish" /> from the labeled Handle after the 60-minute window | nobody | the same |
| Brief you to answer `brief-a-person` | people only, or the thread names a rival or Leaseline | Agent’s call, with its reason | <Op verb="Content.draft" /> fragments → <Op verb="Task.assign" /> in the 09:00 brief | you post it, due 1 business day · Take this one | the same |
| Correct the record `correct-the-record` | an engine or a cited thread misstates a fact | Agent’s call, with its reason | <Op verb="Content.draft" /> the correcting fact → <Op verb="Task.assign" /> | you post it, due 1 business day · Take this one | the same |
| Reply under our answer `reply-under-ours` | a new reply under a Leaseline answer | Agent’s call, with its reason | <Op verb="Content.draft" /> → <Op verb="Post.publish" />, never a withdrawal | you, on a room set to your own answers | the same |
| Listen only `listen-only` | a listen-only room, or past its mention budget | Your rule (the Mention budget) | <Op verb="Content.draft" /> fragments into the weekly digest | nobody | the same |
| Skip it `skip-it` | a fact your pages lack, or the room’s record skips it | Your rule (copyRules 4) | nothing; `approved-pages` or the room’s record holds it | nobody | the same |

| When they write back | Fixture reply | What happens | Who answers | By when | Call |
| --- | --- | --- | --- | --- | --- |
| Interested | “Trying it now. How do I import my leases?” | a reply under the answer with the import help Page | Content Lead · your agent, or you on a room set to your own answers | 24 h | <Op verb="Post.publish" /> |
| Send me pricing | “What does it cost?” | the Pricing Page’s list Price, with the affiliation in the first line | the same | 24 h | <Op verb="Post.publish" /> |
| Not now | “We’re fine with spreadsheets for now.” | no further reply; the answer stays as it is | nobody | at once | <Op verb="Task.complete" /> |
| Wrong person | “Ask in the bookkeeping forum instead.” | nothing posts elsewhere: the Play never opens a thread | nobody | at once | <Op verb="Task.complete" /> |
| Out of office | “Away until Monday; back then.” | the reply under the answer waits for their next post | nobody | their next post | <Op verb="Post.schedule" /> |
| Question it can’t answer | “Does it sync with our accounting system?” | To a person: the question in tomorrow’s brief | you | 1 business day | <Op verb="Task.assign" /> |
| Stop | “Stop advertising in here.” | counts toward `spam-call`; you reply once, and the answer stays up | you | 1 business day | <Op verb="Task.assign" /> |

## When it hands to you
Briefs for rooms set to your own answers and corrections come to **you** (Dana Okafor, person), the day’s named owner, in one 09:00 brief. One Brief per Role, as captured (`brief` is Not live yet, gaps #7).

```json title="What lands in each queue · sample"
[
  {
    "$id": "https://api.sb/leaseline.app/tasks/task_644",
    "$type": "Task",
    "assignee": "worker_1",
    "due": "2026-10-19T23:00:00Z",
    "on": "post_412",
    "brief": {
      "who": "a landlord forum thread, 3 owners, 40 units",
      "said": "How do you send renewal notices 60 days out across 3 owners?",
      "chose": "brief-a-person",
      "why": "the room admits people only",
      "fragments": [
        "one notice calendar per owner, each with its own lead time",
        "notices go 60 days out by default",
        "state your affiliation in the first line"
      ],
      "never": [
        "a vote ask",
        "the asker’s other posts",
        "a sentence ready to post"
      ]
    }
  }
]
```

You answer with <Op verb="Task.claim" /> (Take this one), <Op verb="Task.return" /> with a reason, or <Op verb="Action.redirect" />. Once you claim a thread, the agent posts nothing in it, and every new reply comes to your brief. Three briefs unopened in a row stop drafting (`owner-absence`) and drop the Play to listen-only with a weekly digest.

**On time:** you, 27 of 30 posted within 1 business day, median 5 h 40 min, n 30, ■■□□ Early sign beside Other Startups’ 84 % on time. **Your queue:** counted by kind: about 4 briefs a week and 1 correction every 2 weeks; the agent posts about 4 answers a week itself.

**The fixed line:** <Op verb="Deal.assign" /> sets `owner` to the receiving person, the agent is never a Deal’s owner, and Meetings land on the owner’s calendar under the owner’s name.

## When it won’t send
| Check (refuses one send) | Refuses | Fix | Then |
| --- | --- | --- | --- |
| <a id="check-owned-by-a-person"></a>`owned-by-a-person` (rule j; Not live yet, gaps #8) | an agent answer to an asker whose Lead or open Deal a person owns | Leave it to the person who owns it: the draft waits in their queue. | <Op verb="Task.assign" /> |
| `approved-pages` (Not live yet, gaps #8) | a clause no approved Page backs, or a technical step not run in a sandbox | Cut the clause, or publish the Page that says it. | <Op verb="Site.publish" /> |
| <a id="check-room-rules"></a>`room-rules` (the record’s room check) | an answer the room’s record holds back, or an agent answer on a room set to your own answers | Brief a person, or skip the room. | <Op verb="Task.assign" /> |
| <a id="check-mention-budget"></a>`mention-budget` (the record’s Mention budget) | a Leaseline mention past the room’s budget | Strip the mention, or skip the answer. | <Op verb="Content.draft" /> |

| Stop (pauses the Play) | Pauses when | Then |
| --- | --- | --- |
| <a id="stop-room-removal"></a>`room-removal` | a removal of a Leaseline answer | that room pauses 14 days and returns to You approve each one |
| <a id="stop-venue-removal"></a>`venue-removal` | 2 removals on one Venue in 30 days | that Venue pauses until you review its room list |
| <a id="stop-handle"></a>`handle` | a suspension, a posting block, or an answer hidden from logged-out readers | that Handle pauses everywhere; no new Handle replaces it |
| <a id="stop-spam-call"></a>`spam-call` | 2 replies in 14 days in one room calling an answer spam, an ad or a bot | that room pauses 14 days |
| <a id="stop-owner-absence"></a>`owner-absence` | 3 daily briefs unopened in a row | drafting stops; a weekly digest only |
| <a id="stop-cited-floor"></a>`cited-floor` | under 1 cited answer per 10 posted, after 60 | the run stops for review |
| <a id="stop-kill-switch"></a>`kill-switch` | you press it | queued agent answers cancel; posted answers stay up |

The captured refusal, then the Stop that fired as a `Campaign.paused` reason (Not live yet, gaps #2); the rewrite that posted is the second thread in Example.

```json title="The captured refusal · sample"
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "The answer in a property-software forum did not post: that room’s mention budget is spent.",
  "checks": [
    {
      "check": "mention-budget",
      "status": "fail",
      "doc": "/plays/community-answers#check-mention-budget",
      "fix": "Strip the mention, or skip the answer.",
      "then": "Content.draft"
    },
    {
      "check": "approved-pages",
      "status": "pass"
    }
  ]
}
```


```json title="The Stops that fired, as Campaign.paused reasons · sample"
[
  {
    "reason": {
      "limit": "room-removal",
      "observed": "1 removal",
      "bound": "0",
      "window": "14d"
    },
    "doc": "/plays/community-answers#stop-room-removal",
    "task": "task_571"
  }
]
```

## Did it work
The 10 prompt clusters were drawn at random, and the 2 held out got no answer for 8 weeks, so both halves read from the same assignment (rules m–o). Each figure’s call is <Op verb="Metric.query" /> by node, and every node above the leaf is Not live yet (gaps #4).

`+34.5 ICP Visits per answered cluster · ■■□□ Early sign · n 10 clusters · path → arr`

| Node | Answered (8 clusters) | Held out (2 clusters) | Added | Confidence | Basis |
| --- | --- | --- | --- | --- | --- |
| `cited-answer-visits` | 51.5 ICP Visits per cluster (412 in 8 weeks) | 17.0 (34) | +34.5 [+4.0, +65.0] | ■■□□ Early sign | held back at random · n 10 clusters · 61 answers posted |
| `icp-reached` ↑ | 640 ICP People reached per cluster | 470 | +170 [−120, +460] · Not carrying up yet | ■□□□ Too early to tell | the same assignment |
| `new-arr` ↑ | $1,044, 3 Customers · Booked $1,044: credited, not all caused by this Play | $0, 0 Customers | +$130 per cluster [−$90, +$350] · Worth about +$320 a month | ■□□□ Too early to tell (3 vs 0 Customers) | the same · 4 trials still deciding |
| `net-new-arr` · `arr` | +$1,044 | $0 | carried: it moves no other bridge term | ■□□□ Too early to tell | carried from `new-arr` |

The leaf counts ICP Visits from a cited answer (accepted by the asker, top 3 with 5 points, or cited by an answer engine) per cluster over 28d, read at 60 answers posted. Held-out clusters get no answer from the agent or from you.

**How it moves it:** a median of 3 h 10 min from thread to brief and 5 h 40 min to your posted answer; 9 of 61 answers were cited, 1.5 per 10.

**Guardrails:** treated against held out: removals, 1 of 61 answers against the 2-in-30-days Stop, and spam calls, 1 reply in 8 weeks.

```json title="The Campaign card · sample"
{
  "$id": "https://api.sb/leaseline.app/campaigns/community-answers",
  "$type": "Campaign",
  "play": "play:community-answers@1",
  "path": [
    "cited-answer-visits",
    "icp-reached",
    "new-arr",
    "net-new-arr",
    "arr"
  ],
  "experiment": {
    "metric": "cited-answer-visits",
    "unit": "count",
    "heldBack": 2,
    "decision": null
  },
  "readout": {
    "value": 34.5,
    "n": 10,
    "maturing": 0,
    "interval": [
      4,
      65
    ],
    "readability": "C",
    "basis": "held-back",
    "pooled": false
  },
  "ledger": {
    "spend": 100,
    "workerCost": 4,
    "hours": 14.5,
    "pipelineArr": 1392,
    "wonArr": 1044,
    "projectedArr": 321,
    "paybackDays": 35
  }
}
```

Outside benchmark: Reddit held 1.01 % to 2.02 % of all citations in answer-engine responses (238k prompts, a search-analytics vendor’s citation study, October 2025 and January 2026).

**Before it · After it.** Before it: `category-kit` hands over open term threads after T+7, and `aeo` names the cited threads with no current answer. After it: `instant-response` answers the Visitors who write in, and `editorial-seo` turns the questions asked most into Pages.

## Example
Leaseline ran it from 2026-08-24 to 2026-10-19 (56 days). Listening read 1,880 items, kept 260, briefed 96, and 61 answers posted: 34 from the agent’s labeled Handle on 5 rooms and 27 by you on 9. Read every captured thread at `?threads=all`; three follow the tables.

| What happened, by option | Decisions | Posted | Cited · Customers (Booked: credited, not all caused by this Play) |
| --- | --- | --- | --- |
| Answer from the agent’s Handle · Reply under our answer | 34 · 6 | 34 · 6 | 5 · 1 |
| Brief you to answer · Correct the record | 30 · 3 | 27 by you · 3 | 4 · 2 |
| Listen only · Skip it | 18 · 22 | 0 | — |
| In the 2 held-out clusters | 19 threads | 0, by design | — |
| At 20 questions a month (the Use it when volume) | about 60 answers in 12 weeks | reads then | Other Startups’ results: +28 per cluster, ■■□□ Early sign, n 37 |

| Day | Event | What happened | Your time |
| --- | --- | --- | --- |
| 0 | `event_118` Campaign.created | the three steps; the dry run fails `approved-pages` | 20 min |
| 0–2 | `event_131` Change.merged, first of 14 | you approve each room’s record once | 45 min |
| 6 | `event_211` Post.published | the first answer accepted by its asker | — |
| 9 | `event_248` Campaign.paused | `room-removal`: a moderator removed one answer; that room paused until day 23 | 5 min |
| 28 | `event_452` Change.merged | `change_22`: one room to listen-only after its cited rate halved | 5 min |
| 41 | `event_603` Action.refused | `mention-budget` refused an agent answer; the rewrite with no mention posted | — |
| 1–56 | `event_140` Task.assigned, first of 30 | you posted 27 answers from the 09:00 brief | 11 h · **total 14.5 h measured, 16 h asked** |

> **A property-software forum, Oct 2, 09:12** · “Does anything export renewal notices as PDF for owners who want paper?”
>
> **Leaseline’s Content Lead (an agent, affiliated with Leaseline), 10:31** · Yes: each notice exports as a PDF from its row, one file per owner.¹ I work for Leaseline, which does this; the steps are on its help Page.² *The Handle’s profile states it is Leaseline’s agent.*³
>
> **The asker, 11:05** · marked it the accepted answer. Perplexity cited the thread from Oct 9.

```diff title="A property-software forum, 2026-10-04 · the draft mention-budget refused, then the rewrite that posted"
- Leaseline does this: one renewal calendar per owner, set once.
+ Set one notice calendar per owner, each with its own lead time; most tools let you set it once per owner.
```

> **A landlord forum, 2026-10-18 22:41** · “How do you send renewal notices 60 days out across 3 owners?” · **Content Lead · your agent, Oct 19 09:00** · in your brief with three fragments and the room’s record, due 23:00 (`task_644`). · **Dana, 13:20** · posted her own answer, affiliation first.

¹ The first sentence answers the question. ² The affiliation, and every fact from an approved Page. ³ The agent’s Handle states that it is an agent.

## Your settings
```mdx title="plays/community-answers.mdx"
---
holdout: 0.2      # 2 of 10 prompt clusters get no answer for 8 weeks
brief: 09:00
---
Answer from the agent’s Handle only where a room admits labeled agents. Everywhere else, brief me and I answer.
```

```text
$ npx startup-builder show plays/community-answers
holdout 0.2 · brief 09:00 · agent rooms only     your file  plays/community-answers.mdx:2-3,5 (Ask 2026-08-24; one room to listen-only by change_22, 2026-09-21)
family demand · worker role:content-lead, owns never · chooses 6 (3 rule, 3 read) · sequences none · checks owned-by-a-person, approved-pages, room-rules, mention-budget · stops 7 · placements reddit, hacker-news, stack-overflow, github, x, 5 answer engines    catalog  play:community-answers@1 (Not live yet, gaps #5)
```

### Every key from the catalog
| Key | Id | What it is |
| --- | --- | --- |
| Tactic | <a id="tactic-community-listening"></a>`community-listening` | Community listening reads licensed feeds for a watch list, drops what Suppression or the room’s record excludes, and ranks one candidate per thread. Starts at Sends nothing. |
| Tactic | <a id="tactic-room-rules-compile"></a>`room-rules-compile` | Room read reads each community place’s sidebar, pinned posts and top answers weekly into its room record and sets the room’s mode. Starts at You approve each one. |
| Tactic | <a id="tactic-answer-brief"></a>`answer-brief` | Answer brief gives the daily owner the top threads, each with facts, sandbox output, a draft or fragment brief, its mode and a post-by time. Starts at You approve each one. |
| Tactic | <a id="tactic-room-check"></a>`room-check` | Room check is the Guard every community answer passes: mode, caps, karma floor, mention budget, links, duplicates and siblings, downgrading what it refuses. Starts at Sends nothing. |
| Tactic | <a id="tactic-answer-publish"></a>`answer-publish` | Answer publish posts an answer from the agent’s labeled Handle on a room set to agent answers, after the room’s approval or delay window. Starts at You approve each one. |
| Tactic | <a id="tactic-answer-follow-through"></a>`answer-follow-through` | Answer follow-through checks each answer’s visibility, replies, acceptance and citations at fixed times, and routes follow-ups back to the owner. Starts at Sends nothing. |
| Tactic | <a id="tactic-cited-answers-readout"></a>`cited-answers-readout` | Cited answers readout counts cited-answers weekly per room and mode, reads the prompt-cluster holdout and the decay check, and records a Decision per room. Starts at Sends nothing. |
| Trigger | <a id="trigger-rival-switch-ask"></a>`rival-switch-ask` | Rival switch ask: `event` on `Post.published`, window 48h. |
| Trigger | <a id="trigger-problem-question"></a>`problem-question` | Problem question: `event` on `Post.published`, window 24h. |
| Trigger | <a id="trigger-brand-mention"></a>`brand-mention` | Brand mention: `event` on `Post.published`, window 24h. |
| Trigger | <a id="trigger-cited-thread"></a>`cited-thread` | Cited thread: `state` on `Monitor.checked`, window 14d. |
| Trigger | <a id="trigger-misstated-fact"></a>`misstated-fact` | Misstated fact: `event` on `Monitor.checked`, window 7d. |
| Trigger | <a id="trigger-answer-revived"></a>`answer-revived` | Answer revived: `event` on `Post.published`, window 48h. |
| Benchmark | <a id="benchmark-reddit-citation-share"></a>`reddit-citation-share` | Reddit’s share of all citations in answer-engine responses.: 1.01–2.02 % (A search-analytics vendor’s citation study, readings for October 2025 and January 2026., 2026-10-24). |
| Benchmark | <a id="benchmark-devtool-subreddit-comment-share"></a>`devtool-subreddit-comment-share` | Share of items in developer-tool subreddits that are comments rather than posts.: 87.4 % (A listening vendor’s subreddit dataset., 2026-09-10). |