Skip to content

fix(email): crash reporting, context limit, schema validation, cachin…#1026

Merged
hman38705 merged 1 commit into
solutions-plug:mainfrom
judikay95:fix/email-worker-reliability
Jun 30, 2026
Merged

fix(email): crash reporting, context limit, schema validation, cachin…#1026
hman38705 merged 1 commit into
solutions-plug:mainfrom
judikay95:fix/email-worker-reliability

Conversation

@judikay95

@judikay95 judikay95 commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

…g bench

Issue 1 - Crash reporting:

  • Add worker_crash_total IntCounterVec to Metrics
  • Wrap email worker spawn in monitored restart loop (max 5 restarts, exponential backoff 1s/2s/4s/8s/16s), log FATAL on exhaustion
  • Add EmailWorkerDown and EmailWorkerCrashLooping Prometheus alerts

Issue 2 - Template caching:

  • Templates already compiled once at EmailTemplateEngine::new() startup
  • Add benches/email_templates.rs: cached vs per-request at 1000 renders
  • Register bench in Cargo.toml; document restart-to-update policy

Issue 3 - Context size limit:

  • Reject contexts > 64 KB (serialised JSON) in render() before Handlebars
  • Return structured anyhow error with byte count and template name

Issue 4 - Template schema validation:

  • Add templates/schema.json documenting required vars per template
  • validate_all_templates() uses realistic per-template fixture data
  • Add 16 boundary-value tests: empty strings, special chars, long strings, XSS escaping, and startup validation sanity check

Misc: tighten .gitignore (test snapshots, bench output, temp files)

Description

Type of Change

  • Bug fix
  • New feature
  • Refactor / code cleanup
  • Documentation update
  • CI / tooling change
  • Breaking change

Testing Done

Checklist

  • Tests pass locally
  • Documentation updated (if applicable)
  • No breaking changes, or breaking changes are documented above

Related Issues

Closes #
closes #928
closes #929
closes #930
closes #931

…g bench

Issue 1 - Crash reporting:
- Add worker_crash_total IntCounterVec to Metrics
- Wrap email worker spawn in monitored restart loop (max 5 restarts,
  exponential backoff 1s/2s/4s/8s/16s), log FATAL on exhaustion
- Add EmailWorkerDown and EmailWorkerCrashLooping Prometheus alerts

Issue 2 - Template caching:
- Templates already compiled once at EmailTemplateEngine::new() startup
- Add benches/email_templates.rs: cached vs per-request at 1000 renders
- Register bench in Cargo.toml; document restart-to-update policy

Issue 3 - Context size limit:
- Reject contexts > 64 KB (serialised JSON) in render() before Handlebars
- Return structured anyhow error with byte count and template name

Issue 4 - Template schema validation:
- Add templates/schema.json documenting required vars per template
- validate_all_templates() uses realistic per-template fixture data
- Add 16 boundary-value tests: empty strings, special chars, long strings,
  XSS escaping, and startup validation sanity check

Misc: tighten .gitignore (test snapshots, bench output, temp files)
@drips-wave

drips-wave Bot commented Jun 29, 2026

Copy link
Copy Markdown

@judikay95 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

hman38705 added a commit that referenced this pull request Jun 30, 2026
…lidation, caching

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
hman38705 added a commit that referenced this pull request Jun 30, 2026
@hman38705 hman38705 merged commit 5b056e5 into solutions-plug:main Jun 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants