{"slug": "five-regression-tests-for-channel-aware-ai-reply-drafts", "title": "Five regression tests for channel-aware AI reply drafts", "summary": "The developer behind Riffwise, a Chrome extension for drafting replies to social conversations and Gmail, published a five-case regression checklist for channel-aware reply drafts that keeps speaker, recipient, channel, and tone as separate pieces of context. The tests verify that each draft uses only the active channel's identity and tone profile, falls back to a neutral baseline when no profile exists, addresses the author of the selected message rather than the account holder, and never publishes or sends without explicit user action. The developer argues these boundary tests catch identity and context errors that ordinary prompt-quality checks miss.", "body_md": "A reply draft can be fluent, concise, and confidently addressed to the wrong person. That is why cross-channel reply tools need tests for identity and context, not only tests for whether the model returned a sentence.\n\nI recently changed Riffwise so each channel has its own identity and tone profile, with a neutral fallback when a profile is missing. The design decision is covered in a separate post; this one is the regression checklist I use to keep those boundaries visible.\n\n**Given:** One user has a casual profile with a distinctive example on one channel, and a professional profile on another.\n\n**When:** They draft from a conversation on each channel.\n\n**Expect:** Each draft uses only the active channel's profile. Adding an example to one profile changes nothing on the other.\n\n**Given:** The active channel has no saved profile, while a different channel has a detailed one.\n\n**When:** The user requests a draft.\n\n**Expect:** The draft uses a neutral baseline. It does not silently borrow the other profile. The interface makes the fallback understandable.\n\n**Given:** A thread contains several named participants, including a message that thanks one person and a reply box owned by another.\n\n**When:** The current user drafts a response to a selected message.\n\n**Expect:** The draft responds to the selected message's author and never assumes that the account owner was the person being addressed. Repeat the case with nested replies and quoted text.\n\n**Given:** The same account uses different roles and writing styles in different spaces.\n\n**When:** The active page changes.\n\n**Expect:** The app selects the relevant channel profile. It does not change who the account holder is, infer a recipient from a saved bio, or carry over another channel's personality.\n\n**Given:** A draft has been generated and is ready.\n\n**When:** The user reviews it.\n\n**Expect:** Generating a draft does not publish or send anything. Insertion, copying, editing, and ignoring remain deliberate user choices.\n\n| Fixture | Expected identity | Expected voice | Side effect | \n|---|---|---|---|\n| Channel A with saved profile | Current account holder | Channel A profile | Draft only | \n| Channel B with different profile | Current account holder | Channel B profile | Draft only | \n| Channel C with no profile | Current account holder | Neutral baseline | Draft only | \n| Multi-person reply thread | Author of selected message as recipient | Active channel profile | No publish/send | \n\nThese cases are cheap to run and catch a class of errors that ordinary prompt-quality checks can miss. A useful log record should say which profile was selected and why, without storing more conversation text than the product needs.\n\nThe lesson from our implementation is simple to state: keep the speaker, recipient, channel, and tone as separate pieces of context. Test their boundaries explicitly before tuning the wording.\n\nI build Riffwise, a desktop Chrome extension for drafting replies from social conversations and Gmail. Selected context goes to Riffwise and OpenAI; the person reviews and edits before inserting, and the extension does not post or send automatically. Free includes 40 successful generations per month with no card; desktop Chrome and an account are required: [https://chromewebstore.google.com/detail/riffwise-%E2%80%94-ai-reply-gener/nmnmflphiibhdnnbghffjhclhlehelle?utm_source=devto&utm_medium=community&utm_campaign=riffwise_202611&utm_content=showdev_identity_regression_tests](https://chromewebstore.google.com/detail/riffwise-%E2%80%94-ai-reply-gener/nmnmflphiibhdnnbghffjhclhlehelle?utm_source=devto&utm_medium=community&utm_campaign=riffwise_202611&utm_content=showdev_identity_regression_tests)\n\nDisclosure: I build Riffwise. AI helped edit this article; the product decisions are mine.", "url": "https://wpnews.pro/news/five-regression-tests-for-channel-aware-ai-reply-drafts", "canonical_source": "https://dev.to/igor_polyakov_gstq/why-a-reply-assistant-needs-channel-specific-identity-not-one-global-voice-setting-2ngp", "published_at": "2026-11-02 18:46:09+00:00", "updated_at": "2026-11-02 18:53:58.678135+00:00", "lang": "en", "topics": ["ai-products", "ai-tools", "large-language-models", "ai-agents"], "entities": ["Riffwise", "OpenAI", "Chrome"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/five-regression-tests-for-channel-aware-ai-reply-drafts", "markdown": "https://wpnews.pro/news/five-regression-tests-for-channel-aware-ai-reply-drafts.md", "text": "https://wpnews.pro/news/five-regression-tests-for-channel-aware-ai-reply-drafts.txt", "jsonld": "https://wpnews.pro/news/five-regression-tests-for-channel-aware-ai-reply-drafts.jsonld"}}