Pass req.value directly to asyncpg instead of json.dumps(req.value). When a Python string was passed with ::jsonb, asyncpg encoded it as a JSONB string (not an array), causing the frontend spread operator to split it into individual characters — one textarea per character. Also fix typo in DISCUSSION_RULES default: "אסה" → "מאסה". Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>