Keep stop-sending complaints and porn-bot reports out of the adult promo rule (#148) #50

Merged
backmeupplz merged 20 commits from feat/148-adult-promo-residuals into main 2026-10-20 20:48:57 +00:00
backmeupplz commented 2026-10-20 19:07:27 +00:00 (Migrated from github.com)

Closes agentboard #148 (follow-up from #145 / #49).

What

adult_content_promo residuals in src/promo-patterns.ts (ADULT_REPORT):

  • Stop/negated requests are complaints: "Stop sending me porn in DM", "Хватит слать нюдсы в лс", "Не шлите мне порно в личку", "Please don't DM me nudes". Sending verbs accept an adult or DM object; writing verbs (писать/messaging/texting/DM) need an adult object. "this/это/такое" counts before the term, and before the DMs only when no link or handle sells. A sell/earn word in the sentence keeps the agency ads ("Хватит кидать нюдсы бесплатно, зарабатывай в боте @…"). "Не шли деньги на OnlyFans, бесплатные нюдсы в боте @…" still matches.
  • Handle-naming reports: "Порно бот @xxx_bot в комментах", "В комментах порно бот @xxx_bot, пожалуйтесь", "Porn bot alert: @xxx_bot", including fused "порнобот"/"порно-бот". A porn bot word is required, and our/my/наш/free/best/лучший guards keep ads ("Best porn bot @…bot 🥵", "Наш порно бот @… в комментах 🥵"). "alert" counts only after porn/spam/scam/fake bot or account.
  • Perf test: every adversarial input now runs with and without inline buttons, so callsToContent/callsToDm/pointsAtAd run too. New inputs cover the stop and report branches and a 1,100-word pointer run.

Evidence

  • Every ticket example plus every reviewer probe is pinned in src/fixtures/adult-promo-corpus.ts. Accepted residuals are listed in the known-miss/match arrays.
  • Prod replay over the 136k-row capture (#126/#142/#145 harness): the match set is identical to main. That is 12 new adult deletions (0.30–0.80) with 0 FP, and side_gig/crypto/testimonial are unchanged.
  • bun test: 687 pass, 0 fail. bun run typecheck is clean.
  • The prompt, model, the 0.80 gate and REPEAT_MIN_SCORE are unchanged.
Closes agentboard #148 (follow-up from #145 / #49). ## What `adult_content_promo` residuals in `src/promo-patterns.ts` (`ADULT_REPORT`): - **Stop/negated requests are complaints**: "Stop sending me porn in DM", "Хватит слать нюдсы в лс", "Не шлите мне порно в личку", "Please don't DM me nudes". Sending verbs accept an adult or DM object; writing verbs (писать/messaging/texting/DM) need an adult object. "this/это/такое" counts before the term, and before the DMs only when no link or handle sells. A sell/earn word in the sentence keeps the agency ads ("Хватит кидать нюдсы бесплатно, зарабатывай в боте @…"). "Не шли деньги на OnlyFans, бесплатные нюдсы в боте @…" still matches. - **Handle-naming reports**: "Порно бот @xxx_bot в комментах", "В комментах порно бот @xxx_bot, пожалуйтесь", "Porn bot alert: @xxx_bot", including fused "порнобот"/"порно-бот". A porn bot word is required, and our/my/наш/free/best/лучший guards keep ads ("Best porn bot @…bot 🥵", "Наш порно бот @… в комментах 🥵"). "alert" counts only after porn/spam/scam/fake bot or account. - **Perf test**: every adversarial input now runs with and without inline buttons, so `callsToContent`/`callsToDm`/`pointsAtAd` run too. New inputs cover the stop and report branches and a 1,100-word pointer run. ## Evidence - Every ticket example plus every reviewer probe is pinned in `src/fixtures/adult-promo-corpus.ts`. Accepted residuals are listed in the known-miss/match arrays. - Prod replay over the 136k-row capture (#126/#142/#145 harness): the match set is **identical** to main. That is 12 new adult deletions (0.30–0.80) with 0 FP, and side_gig/crypto/testimonial are unchanged. - `bun test`: 687 pass, 0 fail. `bun run typecheck` is clean. - The prompt, model, the 0.80 gate and `REPEAT_MIN_SCORE` are unchanged.
Sign in to join this conversation.
No description provided.