Skip to content

feat(channels,pwa): add email channel adapter + PWA Web Push substrate - #336

Open
gnanirahulnutakki wants to merge 4 commits into
devfrom
feat/channel-email-webpwa-2026-07-14
Open

feat(channels,pwa): add email channel adapter + PWA Web Push substrate#336
gnanirahulnutakki wants to merge 4 commits into
devfrom
feat/channel-email-webpwa-2026-07-14

Conversation

@gnanirahulnutakki

Copy link
Copy Markdown
Member

Summary

  • Adds ardur-channel-email — §4.4 Cycle-4 P0 subset: IMAP poll receive + SMTP send behind the MessagingGateway trait, deny-by-default sender allowlist, mirroring the Discord/Telegram adapters. Opt-in via ARDUR_CHANNEL_EMAIL.
  • Adds ardur-web-pwa — §10.14 Phase 1: VAPID (RFC 8292) keypair + Web Push subscribe/unsubscribe/test HTTP surface, mounted under /pwa. Fills the gap the blueprint flags as missing alongside the existing static web-client/ PWA shell. Opt-in via ARDUR_PWA_ENABLED.
  • Since SMTP has no in-place message-edit primitive, Processor::handle's streaming reply path now withholds delivery for non-editable origins (email) until the turn completes, sending exactly one email rather than one per streamed chunk.
  • Teams (msgraph_webhook) is intentionally not built here — plans/4.4 and plans/4.5 sequence it Cycle-5+ P2/P3, gated on buyer demand; treating it as backlog rather than inventing scope.

Test plan

  • cargo test -p ardur-channel-email — 8 passed
  • cargo test -p ardur-web-pwa — 12 passed
  • cargo test -p ardur-server — full suite green (config/state/routes wiring, streaming reply restructure)
  • cargo test -p ardur-e2e-tests --test scenario_email_channel — stub + gated-live (skips without EMAIL_E2E=1)
  • cargo clippy -p ardur-server -p ardur-web-pwa -p ardur-channel-email --all-targets -- -D warnings — clean
  • cargo fmt --check on all touched crates — clean

Adds ardur-channel-email (§4.4 Cycle-4 P0 subset: IMAP poll receive + SMTP
send behind the MessagingGateway trait, deny-by-default sender allowlist,
mirroring the Discord/Telegram adapters) and ardur-web-pwa (§10.14 Phase 1:
VAPID keypair + Web Push subscribe/unsubscribe/test HTTP surface, filling
the gap the blueprint flags as missing alongside the existing static
web-client/ PWA shell). Both are opt-in via ARDUR_CHANNEL_EMAIL /
ARDUR_PWA_ENABLED.

Since SMTP has no in-place message-edit primitive, the server's streaming
reply handler now withholds delivery for non-editable origins until the
turn completes, sending exactly one email rather than one per chunk.

Teams (msgraph_webhook) is intentionally not built here — plans/4.4 and
plans/4.5 sequence it Cycle-5+ P2/P3, gated on buyer demand.

Checkpoint: architect/sessions/channel-email-webpwa-2026-07-14/journal.md
Signed-off-by: Gnani Nutakki <gnani.nutakki@gmail.com>
@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1905a42f-282a-4828-b3a2-d57eac6a4713

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/channel-email-webpwa-2026-07-14

Comment @coderabbitai help to get the list of available commands.


#[test]
fn builder_requires_non_empty_fields() {
let err = EmailConfig::builder("", "pw", "imap.example.com", "smtp.example.com")

let config = EmailConfig::builder(
"bot@example.com",
"pw",
ArdurAI added 3 commits July 17, 2026 17:00
Signed-off-by: ArdurAI <team@ardur.ai>
…pwa-2026-07-14

Signed-off-by: ArdurAI <team@ardur.ai>
… drift

Signed-off-by: ArdurAI <team@ardur.ai>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants