Flair_Helper2 — Devvit port (preview build)
Port of quentinwolf/flair_helper2 · Python+PRAW · GPL-3.0 · written permission on file
eligibility verified host sub ≥500 WAU shadow-mode ON

Why you probably shouldn't install this yet

A reluctant-adopter intro. We'd rather you bounce now than auto-remove 400 posts on Tuesday and rage-quit Devvit. Read these four failure modes first — they describe what this port can still get wrong on your sub.

FAILURE MODE 01
Flair-rule drift
If your flairs were renamed in the last 90 days, rules silently match the wrong flair. Shadow mode catches this before any post is removed. Promote per-rule only after the dry-run report is clean.
FAILURE MODE 02
Cascading removal loops
Combining remove + comment on the same flair can re-trigger a sticky reply chain. The legacy bot had this bug in 2022. Devvit triggers fire once per event, but cross-rule cascades are still possible — review the action graph.
FAILURE MODE 03
Mod-override blindness
If your mod team frequently undoes the legacy bot's actions, this port will repeat those mistakes until you tune thresholds. The FP counter below shows how often that happened in the last 90 days. Don't promote any rule above its tolerance.
FAILURE MODE 04
Devvit trigger SLA tail latency
Sub-second p50, but tail latency on PostSubmit can exceed 4s during Reddit incidents. Time-sensitive rules (lock-on-flair within N seconds) may fire late. Don't migrate rules that depend on hard real-time.
You promote rules to live one at a time. There is no "enable all" button.

Honest comparison: legacy Flair_Helper2 (PRAW) vs. this Devvit port vs. AutoModerator

We're not pretending the port is strictly better. Two columns where AutoMod or the legacy bot still win.

Capability Legacy Flair_Helper2 (PRAW) This Devvit port AutoModerator
6 deterministic verbs (remove/lock/comment/sticky/ban/usernote) Yes Yes (parity ≥95%) Partial (no usernote)
Shadow-mode default ON No (live by default) Yes No
Per-action 30-day rollback token No Yes (one-click un-remove / un-lock / un-ban) No (manual modlog undo only)
YAML rule syntax familiar to legacy users Yes Yes, but 3 directives renamed (see disclosure) Yes (different schema)
Hosting / token-rotation toil You host it None (Devvit-managed) None
Custom regex on full post body Yes (PRAW raw access) Limited (Devvit string ops, no PCRE lookbehind) Yes
Cross-subreddit Toolbox usernotes (read+write) Yes Read-only at submission · two-way bridge pending No

Action ledger — last 24h (shadow mode)

6 would-have-actions logged · 0 executed Shadow mode
Verb
Trigger / rule
Target
FP risk
Action
remove
flair=off-topic · rule R-03
post t3_1k9z…
8.2% (n=61)
lock
flair=resolved · rule R-07
post t3_1k9y…
1.4% (n=212)
comment
flair=question · rule R-11
post t3_1k9x…
0.3% (n=894)
sticky
flair=megathread · rule R-02
post t3_1k9w…
0.0% (n=33)
ban
flair=spam-confirmed · rule R-15
user u/throw…
14.7% (n=27)
usernote
flair=warned · rule R-09
user u/example…
2.1% (n=148)
Mod-override rate (legacy bot, 90d)
3.7%
↓ baseline · n=1,415 actions
Rules above 10% FP tolerance
1 of 17
R-15 (ban) — held in shadow
Rollback tokens issued (24h)
0 / 0
no live actions taken yet

Per-action rollback (preview — appears once a rule is promoted to live)

30-day token · auto-expires
Verb
Live action taken
Token
Expires
Action
lock
flair=resolved · post t3_1k8a… · by R-07
rb_8f31…
in 29d 23h
sticky
flair=megathread · post t3_1k8b… · by R-02
rb_2d04…
in 29d 21h

Where this port is honestly weaker than the original

GPL-3.0 licenseOriginal repo license preserved in the port. Source-available, audit-friendly, MIT-incompatible by intent.
Written permissionFrom u/quentinwolf, on file with hackathon submission. Eligibility receipt #FH2-2026-05.
≥500 WAU host sub14.3K WAU · 7-day mod-team review window before any rule promotes from shadow to live.
Action ledger is publicEvery promoted action posts to a mod-only sticky thread with the rollback token. Nothing is silent.