Delete explicit adult-content promotion with a button/site/bot funnel (#145) #49

Merged
backmeupplz merged 20 commits from feat/145-adult-promo-rule into main 2026-10-20 18:26:32 +00:00
backmeupplz commented 2026-10-20 15:22:29 +00:00 (Migrated from github.com)

Closes agentboard #145 (https://agentboard.icefish-betta.ts.net/#145).

What

Adds a fourth post-model promo-pattern rule, adult_content_promo. It deletes explicit adult-content promotion when it comes with a funnel and Laya keeps it at a score of 0.30 or more. It runs through the same path as crypto_trade_ask, and the prompt, the model, the 0.80 gate and REPEAT_MIN_SCORE are unchanged.

  • Explicit content: porn words, plain or obfuscated (p0rn, pr0n, порно); nudes/nud3s/нюдсы; NSFW; OnlyFans; hentai; sex video/chat/cam; cam girls; leaked nudes. "18+", "XXX", "erotic", "интим", "adult" and "explicit" count only when they sit next to what is sold ("XXX videos", "xXx c0ntent"). Adult-service phrases (private rooms, face cam, full-length scenes, no blur) count only when two or more appear together.
  • Funnel: URL buttons on the message, arrows, "tap a button" or "pick a door below", "open the site/bot", "link in bio", join or subscribe, the Russian equivalents, a @…bot handle, a t.me link or a DM call (a plain web link is a shared article, not a funnel).
  • Never matches: reports and admin calls, complaints about porn bots, rules and moderation (an ad's "forbidden content" still matches), denials ("No porn, no spam"), and health, recovery, law, crime or news talk. It also skips @-addressed messages, jokes without a funnel, and quoted or attributed reposts.
  • Telemetry: message_analysis_started now carries inlineButtonCount and forwardOriginKind. These are counts and type only, with no labels, URLs or origin names.

Replay (prod capture, 136,295 texts, 13.9 days)

window matches model ≥0.80 new deletions under floor FP
full 17 5 12 0 0
last 9.6 days 15 4 11 0 0

The other rules' match sets are identical to main.

The incident itself is not in the capture. Message 139884 and its six 0.4999 copies are a different forwarded post, so the ticket's trace is mis-attributed (details are in docs/promo-patterns.md).

Tests

bun run check: typecheck clean, 687 pass, 0 fail. This covers held-out ads, must-keep controls, a handler test for the forwarded five-button incident at 0.4999 (including telemetry privacy), a 4,096-character performance check and a pinned review corpus (181 ads and 256 conversations from 5 review rounds, with exact known residuals of 18 misses and 24 matches).

Closes agentboard #145 (https://agentboard.icefish-betta.ts.net/#145). ## What Adds a fourth post-model promo-pattern rule, `adult_content_promo`. It deletes explicit adult-content promotion when it comes with a funnel and Laya keeps it at a score of 0.30 or more. It runs through the same path as `crypto_trade_ask`, and the prompt, the model, the 0.80 gate and `REPEAT_MIN_SCORE` are unchanged. - **Explicit content:** porn words, plain or obfuscated (p0rn, pr0n, порно); nudes/nud3s/нюдсы; NSFW; OnlyFans; hentai; sex video/chat/cam; cam girls; leaked nudes. "18+", "XXX", "erotic", "интим", "adult" and "explicit" count only when they sit next to what is sold ("XXX videos", "xXx c0ntent"). Adult-service phrases (private rooms, face cam, full-length scenes, no blur) count only when two or more appear together. - **Funnel:** URL buttons on the message, arrows, "tap a button" or "pick a door below", "open the site/bot", "link in bio", join or subscribe, the Russian equivalents, a `@…bot` handle, a t.me link or a DM call (a plain web link is a shared article, not a funnel). - **Never matches:** reports and admin calls, complaints about porn bots, rules and moderation (an ad's "forbidden content" still matches), denials ("No porn, no spam"), and health, recovery, law, crime or news talk. It also skips @-addressed messages, jokes without a funnel, and quoted or attributed reposts. - **Telemetry:** `message_analysis_started` now carries `inlineButtonCount` and `forwardOriginKind`. These are counts and type only, with no labels, URLs or origin names. ## Replay (prod capture, 136,295 texts, 13.9 days) | window | matches | model ≥0.80 | new deletions | under floor | FP | |---|---:|---:|---:|---:|---:| | full | 17 | 5 | 12 | 0 | 0 | | last 9.6 days | 15 | 4 | 11 | 0 | 0 | The other rules' match sets are identical to `main`. The incident itself is not in the capture. Message 139884 and its six 0.4999 copies are a different forwarded post, so the ticket's trace is mis-attributed (details are in `docs/promo-patterns.md`). ## Tests `bun run check`: typecheck clean, 687 pass, 0 fail. This covers held-out ads, must-keep controls, a handler test for the forwarded five-button incident at 0.4999 (including telemetry privacy), a 4,096-character performance check and a pinned review corpus (181 ads and 256 conversations from 5 review rounds, with exact known residuals of 18 misses and 24 matches).
Sign in to join this conversation.
No description provided.