=== BUG A: duplicate word-replacement prevention === ✅ duplicate detected (is_duplicate = true) ✅ duplicate NOT added to list ✅ non-duplicate IS added === BUG B: sanitizeChannel path-traversal === ✅ '..' is sanitized to empty (no traversal) ✅ '../evil' sanitized (only alnum+underscore) ✅ '@channel' keeps name without @ ✅ 'my_channel2' unchanged === BUG C: stats counter logic === ✅ run_posts counts only forwarded ✅ run_filtered counts filtered ✅ channel posts_forwarded incremented ✅ channel posts_filtered incremented === BUG D: null-safe json_decode in media loop === ✅ non-JSON response handled without warning ✅ ok:true response accepted =========================================== Result: 13 passed, 0 failed