Skip to content

feat(leads): intent qualification on by default, at a measured bar - #159

Merged
ralyodio merged 1 commit into
masterfrom
feat/intent-on-by-default
Jul 28, 2026
Merged

ralyodio merged 1 commit into
masterfrom
feat/intent-on-by-default

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

Writing to people who never asked is the failure mode the feature exists to avoid — so it should be what you turn off deliberately, not what you remember to turn on. New campaigns default to it; existing ones are moved to the same bar.

Choosing the number exposed a worse one behind it

The 36-hour half-life was invented, not derived. At that decay:

44  solicitation, one day old     ← the best kind of lead
40  a fresh complaint from nobody ← not a lead at all

Four points apart. Those threads stay answerable for days — replying to a three-day-old request costs little, missing it costs the lead.

Half-life is now 72 hours, matching the window scoreThread already treats as the edge of repliable, rather than a second number invented alongside it.

Then the bar comes off measurement

 97  purchase, fresh
 94  evaluating vendors
 77  solicitation from a team lead
 66  solicitation, fresh
 56  solicitation, a day old
 54  "our team is struggling with X"
───  50 ── the bar
 42  a fresh complaint from nobody in particular
 35  solicitation, three days old
 28  complaint, two days old

Real requests stay in for ~3 days; complaints from strangers never get in. A team lead's complaint clears it at 54 — that is a lead — where the same words from nobody in particular don't.

Also flipped in prod (at the user's instruction)

All three campaigns set active, auto_send, min_intent = 50. CAN-SPAM postal address verified present first, since direct SQL bypasses the guard the form enforces — without it sends would fail at the pipeline instead.

Checks

  • tsc --noEmit clean · 1,087 tests pass · build compiles
  • Migration applied to prod

🤖 Generated with Claude Code

Writing to people who never asked for anything is the failure mode the
whole feature exists to avoid, so it should be what somebody turns off
deliberately rather than what they remember to turn on. New campaigns
start with it on, and existing ones are moved to the same bar rather than
being left selecting on resemblance forever.

Choosing the number exposed a worse one behind it. The 36-hour half-life
was invented rather than derived, and at that decay a day-old "can anyone
recommend a X" scored 44 against 40 for a fresh unattributed grumble —
four points between the best kind of lead and no lead at all. Those
threads stay answerable for days; replying to a three-day-old request
costs little and missing it costs the lead. The half-life is now 72 hours,
matching the window the Reddit scorer already treats as the edge of
repliable rather than a second number chosen alongside it.

With that fixed the spread separates properly and the bar can come off
measurement instead of intuition:

  97  purchase, fresh
  94  evaluating vendors
  77  solicitation from a team lead
  66  solicitation, fresh
  56  solicitation, a day old
  54  "our team is struggling with X"
  --- 50, the bar
  42  a fresh complaint from nobody in particular
  35  solicitation, three days old
  28  complaint, two days old

Real requests stay in for about three days and complaints from strangers
never get in, which is the distinction the feature was asked for.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

vu1nz Security Review

0 finding(s) in PR #?

No security issues found.

@ralyodio
ralyodio merged commit 78731d1 into master Jul 28, 2026
8 checks passed
@ralyodio
ralyodio deleted the feat/intent-on-by-default branch July 28, 2026 16:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant