Skip to content

feat(email): add operator safety knobs - #35865

Closed
guivernl wants to merge 1 commit into
NousResearch:mainfrom
guivernl:upstream/email-operator-safety-knobs-20260531T125853Z
Closed

feat(email): add operator safety knobs#35865
guivernl wants to merge 1 commit into
NousResearch:mainfrom
guivernl:upstream/email-operator-safety-knobs-20260531T125853Z

Conversation

@guivernl

Copy link
Copy Markdown

Summary

  • add EMAIL_DRAFT_MODE=1 to save generated email replies to Drafts instead of sending immediately
  • add EMAIL_DISPLAY_NAME for a friendly outbound From header
  • add optional per-sender hourly rate limiting via EMAIL_RATE_LIMIT_PER_HOUR
  • add regression tests for each knob

Why

These are opt-in operator controls for deployments that expose the email gateway. They make unattended email operation easier to stage safely without changing defaults for existing installs.

Test plan

  • uv run --with pytest --with pytest-asyncio python -m pytest tests/gateway/test_email.py -q -o 'addopts='

Add opt-in email draft mode, display-name support, and per-sender hourly rate limiting for deployments that expose the email gateway.
@alt-glitch alt-glitch added type/feature New feature or request P3 Low — cosmetic, nice to have comp/gateway Gateway runner, session dispatch, delivery platform/email Email (IMAP/SMTP) adapter labels May 31, 2026
@teknium1

Copy link
Copy Markdown
Contributor

Thanks for the concrete operator-safety work and regression coverage. The draft-review workflow is a legitimate need, but this implementation uses a configuration mechanism the project does not accept.

This automated hermes-sweeper review is closing the PR under the standing configuration policy:

  • The PR makes three new non-secret behavioral environment variables (EMAIL_DRAFT_MODE, EMAIL_DISPLAY_NAME, and EMAIL_RATE_LIMIT_PER_HOUR) its public interface. Repository policy requires feature flags, display preferences, and thresholds to be configured through config.yaml rather than .env (AGENTS.md:102-107).
  • The related draft-only PR feat(gateway): add EMAIL_SUPPRESS_OUTBOUND kill switch for draft-only mailboxes #5717 was closed for the same env-var-for-config policy direction.
  • The patch also targets the former gateway/platforms/email.py; email now lives at plugins/platforms/email/adapter.py after 5600105478ffde29d7566b45421b100eaa29c4ef.

A focused follow-up using platforms.email config settings and covering all current email egress paths would be the supported direction.


Closed as not-planned per standing maintainer policy (env-var-for-config). This is a design-direction decision, not a code-quality judgment — see the Contribution Rubric in AGENTS.md for what the project is looking for. If you believe this policy was misapplied to your change, comment here and a maintainer will take a look.

@teknium1 teknium1 closed this Jul 13, 2026
@teknium1 teknium1 added the sweeper:not-planned Sweeper: closed per standing maintainer policy (design direction) label Jul 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/gateway Gateway runner, session dispatch, delivery P3 Low — cosmetic, nice to have platform/email Email (IMAP/SMTP) adapter sweeper:not-planned Sweeper: closed per standing maintainer policy (design direction) type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants