What a lead type is
Every answer has three axes. scores holds the harms, topics holds the subjects, and leads holds who is writing and what they want. A sales pitch is not abuse and an offer of equity instead of pay is not a subject, so neither fits the other two lists. Each of the eleven types is scored from 0 to 1 on its own, because the same person is often free work for equity, no budget and scope creep in one thread.
How each type is scored
A type is a few families of phrases. One family is how honest people write ("I have an idea" is how good projects start), so it scores 0.45. Two families score 0.70 and three or more 0.90, which is why a line around 0.60 acts on the shape and not on a word. Repeating the same point three different ways counts as one more family. Free work for equity needs its defining family, the equity or the missing pay, and free consulting needs the missing budget: without them, they stay at 0.45.
What silences a type, and what raises it
Wording that settles the question silences a type outright: "salary plus equity" is a job, a buyer asking what something would cost is not a pitch. Those phrases match exactly. Pressure works the other way: years without pay, "you only care about money" or blaming earlier providers add 0.10 to free work for equity and no budget when they are already there. Never turns up is counted per message of that person, so one apology means nothing, two score 0.70 and three 0.90.
Phrases that match loosely
Nobody writes the way a list does. A phrase of three words or more also counts when its meaningful words appear close together, in any order and with any ending. Negations and the people involved are kept, so "no budget" is never found in "we have a budget". Shorter phrases match exactly, or a single word anywhere would count.
Reading a whole conversation, and the model
Send the thread to /v1/conversation and the author of the last message is read across everything they wrote. When the call uses the model, it reads the earlier messages too, with an author on each line, and scores every type in the same call; the higher score wins. In a conversation the model reads when it adds something: when the free checks found something, when a type is half there, or every fifth message, rather than on every reply.
Turning a score into a rule
Measure first: leads is in every answer, so a month of your own traffic shows which types arrive and at what scores. Then add a rule in the policy editor ("The lead is", the type, review or block), or send one with the call: "rules": {"leads": {"sales_pitch": {"review": 0.6}}}. The contact form template already holds sales pitches from 0.60 and refuses them from 0.85, and holds job seekers, free work for equity and no budget from 0.60 without ever refusing them.