Skip to content

Add production mail storage and recovery operations - #2201

Merged
chrisbbreuer merged 3 commits into
mainfrom
codex/mail-storage-operations
Jul 29, 2026
Merged

Add production mail storage and recovery operations#2201
chrisbbreuer merged 3 commits into
mainfrom
codex/mail-storage-operations

Conversation

@chrisbbreuer

Copy link
Copy Markdown
Member

Summary

  • add reusable Buddy commands for KMS-backed mail storage, external/recovery LUKS keys, dedicated Hetzner volume migration, Restic backups, restore checks, Maildir++ migration, and Sieve compilation
  • make deploy reconciliation compile config/email.ts forwarding into the canonical Sieve runtime format
  • preserve customer-managed KMS metadata in the cloud S3 and Secrets Manager clients
  • keep socials@stacksjs.com and hi@stacksjs.com forwarding declarations sourced from config/email.ts

Companion server implementation: mail-os/mail#8

Validation

  • Pickier passes on all changed files
  • Bun bundled all four changed entry points successfully
  • production migrations, reboot/unlock, recovery key verification, backup/restore, Maildir++, and live forwarding probes passed
  • package typecheck still has the repository baseline isolated-declaration failures; it reports no errors in commands/mail.ts or the changed cloud IMAP files

Closes #2200

Manage customer-KMS storage, external and recovery LUKS keys, dedicated-volume migration, encrypted Restic backups, Maildir++ migration, Sieve forwarding compilation, and restore verification from reusable Buddy commands.

Refs #2200
Regenerate the command catalog for the production mail storage and recovery operations.

Refs #2200
@github-actions github-actions Bot added the docs @stacksjs/docs label Jul 29, 2026
Regenerate OpenAPI and API types required by protocol-conformance.

Refs #2200
@github-actions github-actions Bot added the api @stacksjs/api label Jul 29, 2026
@chrisbbreuer
chrisbbreuer marked this pull request as ready for review July 29, 2026 06:28
@pkg-pr-new

pkg-pr-new Bot commented Jul 29, 2026

Copy link
Copy Markdown

Open in StackBlitz

@stacksjs/actions

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/actions@2201

@stacksjs/ai

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/ai@2201

@stacksjs/alias

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/alias@2201

@stacksjs/analytics

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/analytics@2201

@stacksjs/api

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/api@2201

@stacksjs/arrays

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/arrays@2201

@stacksjs/audio

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/audio@2201

@stacksjs/auth

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/auth@2201

@stacksjs/browser

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/browser@2201

@stacksjs/browser-extension

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/browser-extension@2201

@stacksjs/buddy

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/buddy@2201

@stacksjs/build

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/build@2201

@stacksjs/cache

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/cache@2201

@stacksjs/calendar-api

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/calendar-api@2201

@stacksjs/charts

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/charts@2201

@stacksjs/chat

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/chat@2201

@stacksjs/cli

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/cli@2201

@stacksjs/cloud

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/cloud@2201

@stacksjs/cms

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/cms@2201

@stacksjs/collections

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/collections@2201

@stacksjs/commerce

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/commerce@2201

@stacksjs/composables

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/composables@2201

@stacksjs/config

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/config@2201

@stacksjs/cron

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/cron@2201

@stacksjs/database

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/database@2201

@stacksjs/datetime

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/datetime@2201

@stacksjs/defaults

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/defaults@2201

@stacksjs/desktop

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/desktop@2201

@stacksjs/dns

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/dns@2201

@stacksjs/docs

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/docs@2201

@stacksjs/email

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/email@2201

@stacksjs/enums

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/enums@2201

@stacksjs/env

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/env@2201

@stacksjs/error-handling

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/error-handling@2201

@stacksjs/events

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/events@2201

@stacksjs/faker

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/faker@2201

@stacksjs/feature-flags

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/feature-flags@2201

@stacksjs/git

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/git@2201

@stacksjs/github

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/github@2201

@stacksjs/health

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/health@2201

@stacksjs/http

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/http@2201

@stacksjs/i18n

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/i18n@2201

@stacksjs/image

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/image@2201

@stacksjs/lint

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/lint@2201

@stacksjs/logging

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/logging@2201

@stacksjs/newsletter

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/newsletter@2201

@stacksjs/notifications

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/notifications@2201

@stacksjs/objects

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/objects@2201

@stacksjs/orm

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/orm@2201

@stacksjs/path

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/path@2201

@stacksjs/payments

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/payments@2201

@stacksjs/push

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/push@2201

@stacksjs/query-builder

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/query-builder@2201

@stacksjs/queue

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/queue@2201

@stacksjs/realtime

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/realtime@2201

@stacksjs/registry

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/registry@2201

@stacksjs/repl

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/repl@2201

@stacksjs/router

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/router@2201

@stacksjs/scheduler

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/scheduler@2201

@stacksjs/search-engine

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/search-engine@2201

@stacksjs/security

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/security@2201

@stacksjs/server

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/server@2201

@stacksjs/shell

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/shell@2201

@stacksjs/skills

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/skills@2201

@stacksjs/slug

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/slug@2201

@stacksjs/sms

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/sms@2201

@stacksjs/socials

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/socials@2201

@stacksjs/storage

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/storage@2201

@stacksjs/strings

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/strings@2201

@stacksjs/testing

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/testing@2201

@stacksjs/tinker

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/tinker@2201

@stacksjs/tunnel

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/tunnel@2201

@stacksjs/types

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/types@2201

@stacksjs/ui

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/ui@2201

@stacksjs/utils

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/utils@2201

@stacksjs/validation

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/validation@2201

@stacksjs/video

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/video@2201

@stacksjs/whois

npm i https://pkg.pr.new/stacksjs/stacks/@stacksjs/whois@2201

commit: be12f93

@chrisbbreuer
chrisbbreuer merged commit 235672b into main Jul 29, 2026
11 checks passed
@chrisbbreuer
chrisbbreuer deleted the codex/mail-storage-operations branch July 29, 2026 06:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api @stacksjs/api buddy Buddy cloud @stacksjs/cloud core docs @stacksjs/docs storage @stacksjs/storage

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add production mail storage and recovery operations to Buddy

1 participant