City Report
Linear: RYR-221 — enrichment + FUB→Kit sync + Ghost archive (2026-07-23 vault→Linear audit) Verification correction (2026-07-24): No-email active leads = 70 (live BQ 2026-07-24), not 31. FUB→Kit
reconcile.pyalready exists — it needs scheduling, not building. Ghost archive: 5 drafts exist, none published (Ghost API 2026-07-24). (RYR-221)One-line description. A monthly, per-city local-intelligence newsletter to Ry's owned seller leads — what's getting built, opening, and closing in their city, plus real market numbers — segmented so each lead gets their own city. Write once, send by city. 90% give, 10% soft ask.
Why
Owned leads go cold, and the usual agent "what's your home worth?" email reads as a monthly ask for business. People ignore it. City Report flips that: it leads with what's actually changing on their streets (new communities, new restaurants, apartments going up, stores closing) with Ry's one-line read on what each means for their home's value, then closes with the city's real numbers and a soft "reply with your address" offer. The value is genuine and costs the reader nothing — it earns the open.
It's repeatable by design: the format is locked, and only each city's news and numbers change. That's what makes "create once, send to all by city" work, and what lets it scale to more cities without more writing.
Current state
- Status: in-flight — first send confirmed SENT (Tue 2026-06-16, 6 PM CT) — checked Kit directly 2026-06-30: broadcasts 24564967 (FW) + 24564968 (Dallas) both show
status: completed. Multi-agent rollout started 6/15. - Last update: 2026-06-16; re-verified 2026-06-30 (send confirmed; Marissa's-admin-send thread status not re-checked this pass)
- Blocked on: nothing confirmed. Status of Marissa's heads-up email / admin-send (was "awaiting Ry's send" as of 6/16) not re-verified this turn.
Ry's send (Kit, auto): 5 cities / 55 recipients fire automatically at 6 PM CT today — Fort Worth 26, Dallas 14, Arlington 10, Denton 2, Little Elm 3 (broadcasts 24564967/68/69 + 24573136/37). Deliverability solved (rycolston.com authenticated as a Kit sending domain via 3 Cloudflare CNAMEs; inbox-verified). System + skill + issues on main (MRs !562/564/566/569/570/578/591/602). Audience = active only (Closed/Archive/Trashed excluded; filter baked into the backfill). Denton/Little Elm numbers are board/aggregator, pin TRERC next cycle.
Multi-agent (2026-06-15): runs per agent in two models — Ry = Kit (tags renamed Ry City Report - [City]); team agents = FUB + Google Doc templates, admin-sent. Marissa Tah LIVE: Carrollton (183) + Frisco (17) FUB-tagged (Marissa City Report - [City]); two Google Doc templates shared with her + admins James Lin & Princess May Esogon; her admins send via FUB (target today). Paul Harding = not a fit (too fragmented). Reproducible per-agent recipe + FUB tagging method are in the project memory and belong in skills/city-report/SKILL.md.
Next 3 actions
- Send Marissa's heads-up email (drafted, awaiting Ry's OK) so her admins send Carrollton + Frisco via FUB today.
- Confirm both sends fired today (Ry's Kit 5-city auto-send + Marissa's 2 admin-sends) and review open / reply rates.
- Next month: run
/city-reportfor Ry's Kit cities; replicate the per-agent FUB process for the next agent/cities; pin TRERC numbers for Denton/Little Elm/Carrollton/Frisco; enrich no-email leads; automate the FUB admin-send. Add the team-agent (FUB) variant into the skill so it's reproducible.
Decisions log
- Format is locked — news-led, numbers-as-closer, city-limits only, a recognizable landmark on every line, local road names ("287" not "US-287"), verbatim ask block, 90/10 give-to-ask. Canon:
systems/city-report/format-spec.md. - Data source: TRERC now (v1), NTREIS/MLS later (v2). TRERC city pages are free, city-level, monthly, no login. MLS adds zip-level + days-on-market + active comps.
- Send model (corrected 2026-06-30 — this line contradicted "Current state" above and was stale): for Ry's own Kit cities,
/city-reportbuilds the draft but Kit fires it automatically at the scheduled send time once approved — confirmed 24564967/24564968 both showstatus: completed, not draft. Team-agent cities (Marissa etc.) are admin-sent via FUB, not Kit, and stay manual.
Open issues
- Ship June issues (Kit drafts → send) — confirmed sent 2026-06-16, verified via Kit broadcast status 2026-06-30
- Email enrichment for the 31 no-email owned leads
- FUB→Kit city-tag keep-fresh sync (monthly)
- First Ghost archive post → add archive URL to Web Properties registry
References
- Code home:
~/rylobasic/systems/city-report/(spec, cities.yaml, templates, issues/, skill) - Skill:
/city-report - Data source: Texas A&M TRERC housing activity
- Related projects: Newsletter Architecture · Capri · Agent Newsletter (the system this is modeled on)
Why this template exists
Every project follows the same shape so any new contributor (or future-you) knows where to look.
- 2026-07-01 — Hardened (MR !1013): reconcile.py (subscribers drift + broadcast status, dry-run default) caught real FW drift day one (removal applied per Ry; cjsld add DECLINED — standing decision); June archive truth-up (all 5 issues status:sent, verified); double-send guard + real send_at policy in SKILL; kit-broadcast rule now covers this system. Open owner calls: June Ghost + calendar backfills.
- 2026-07-02 — July issue built end-to-end + skill retro: 5 issues drafted (parallel per-city research agents, zero June reuse), Ry-approved city-by-city; TRERC pinned May-2026 for ALL five (Denton/Little Elm carve-out closed — June's Denton numbers were county-scope); [TEST July] proofs sent + approved; broadcasts 24825511-15 SCHEDULED Mon 7/6 6PM CT (verified via Kit API); FIRST Ghost archive drafts (publish = owner call → then Web Properties row); calendar rows logged; MRs !1031 (issues) + !1032 (skill retro: interpreter gotcha, exclusion-first research, source list, test-send step, audit gates) merged. Eater Dallas confirmed dormant (RYR-58 noted). Owner-copy: Ry now in all 5 tags; reconcile exclusion live (!1029). Still open: June Ghost/calendar backfill; the reply-CTA question if July also gets 0 replies.