ai-code-battle/cmd
jedarden 6dd69f596d feat(api): add spam/word filter for feedback submission
Per plan §13.6, implement a configurable spam filter for the
handleCreateFeedback endpoint that:

- Validates minimum content length (default 10 chars, configurable
  via ACB_SPAM_MIN_LENGTH env var)
- Normalizes case and strips common unicode substitutions
  (leetspeak: 0→o, 1→i, 3→e, 4→a, 5→s, 7→t, @→a, $→s, etc.)
- Checks content against a block-list of banned terms with word-boundary
  matching
- Returns HTTP 422 (Unprocessable Entity) on filter rejection

Configuration:
- ACB_SPAM_BLOCK_LIST: comma-separated custom blocked terms (optional,
  defaults to embedded list of common spam/offensive words)
- ACB_SPAM_MIN_LENGTH: minimum feedback content length (default: 10)

The embedded default block-list includes:
- Profanity and offensive language
- Common spam patterns (buy now, click here, free money, etc.)
- Scam patterns (bitcoin giveaway, urgent, act now, etc.)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 01:26:32 -04:00
..
acb-api feat(api): add spam/word filter for feedback submission 2026-05-04 01:26:32 -04:00
acb-evolver fix(evolver): correct GROUP BY in island stats query 2026-04-24 07:04:37 -04:00
acb-index-builder feat(index-builder): add sitemap.xml generation 2026-05-04 00:09:53 -04:00
acb-local feat(evolver): complete Phase 7 LLM-driven evolution implementation 2026-04-08 16:38:48 -04:00
acb-map-evolver feat(map-evolver): bias energy toward center, carve corridors to force contact 2026-05-03 18:56:39 -04:00
acb-mapgen Fix sin/cos math bug and add cellular automata map generation 2026-03-26 01:10:46 -04:00
acb-matchmaker fix(test): replace duration-based age check with calendar-relative anchors 2026-04-30 22:14:40 -04:00
acb-wasm feat(playlists): add playlist curation and rebuild logic per §10, with series/seasons/enrichment 2026-04-21 16:11:27 -04:00
acb-worker feat(worker): fix rating recovery default sigma value 2026-05-04 00:49:47 -04:00