carlos / platform Public

Merge remote-tracking branch 'origin/main' into edge-replica-placements

# Conflicts:
#	docs/site/cli.md
#	internal/provision/provision_test.go
Paul Campbell pushed by claude agent, operated by paul@keymail.dev c1ef57b57a7adad9db4191e9e1aeb284c16e532a parent fc61e5eparent 8138d94
98 files changed, +26421 −738
  • README.md +89 −0
  • apimode.go +54 −15
  • canary.go +1 −1
  • cmd/console/main.go +40 −1
  • deploy.go +1 −1
  • docs/site/cli.md +99 −2
  • docs/superpowers/plans/2026-09-15-tenant-email-2-senders.md +3379 −0
  • docs/superpowers/plans/2026-09-15-tenant-email-3-external-identities.md +4262 −0
  • docs/superpowers/plans/2026-09-15-tenant-email-4-instance-config.md +2742 −0
  • docs/superpowers/plans/2026-09-15-tenant-email-5-instance-senders.md +3363 −0
  • docs/superpowers/plans/2026-09-15-tenant-email-ses-spike.md +117 −0
  • docs/superpowers/specs/2026-09-15-tenant-email-senders-design.md +797 −0
  • docs/superpowers/specs/2026-09-19-per-environment-store-design.md +253 −0
  • docs/superpowers/specs/2026-09-22-instance-private-storage-design.md +276 −0
  • instances_cli.go +37 −8
  • instances_privatestorage_test.go +83 −0
  • internal/appconfig/appconfig.go +6 −1
  • internal/appconfig/awaitingrestart_test.go +100 −0
  • internal/appconfig/configack.go +137 −1
  • internal/appconfig/configack_test.go +149 −0
  • internal/appconfig/environments.go +1 −1
  • internal/appconfig/instances.go +348 −0
  • internal/appconfig/instances_test.go +1412 −0
  • internal/appconfig/routefingerprint.go +8 −0
  • internal/appconfig/store.go +34 −19
  • internal/appconfig/sync.go +110 −10
  • internal/appconfig/sync_test.go +3 −3
  • internal/appconfig/syncexec.go +166 −23
  • internal/appconfig/syncexec_test.go +70 −1
  • internal/console/apiinstances.go +126 −5
  • internal/console/apiinstancesprivatestore_test.go +495 −0
  • internal/console/apimail.go +237 −25
  • internal/console/apimail_test.go +417 −3
  • internal/console/apiscan_test.go +4 −5
  • internal/console/apistore.go +147 −25
  • internal/console/apistore_env_test.go +146 −0
  • internal/console/apistore_envonly_test.go +52 −0
  • internal/console/apistore_provision.go +9 −5
  • internal/console/apistore_provision_test.go +1 −1
  • internal/console/appsettings.go +180 −17
  • internal/console/appsettings_env_test.go +88 −0
  • internal/console/economicspass.go +32 −13
  • internal/console/instanceprivatestore.go +312 −0
  • internal/console/mailcounts.go +94 −59
  • internal/console/mailcounts_test.go +393 −22
  • internal/console/mailevents.go +27 −3
  • internal/console/mailevents_test.go +151 −10
  • internal/console/ownership.go +91 −46
  • internal/console/server.go +13 −1
  • internal/console/sesevents.go +93 −21
  • internal/console/sesevents_test.go +51 −2
  • internal/console/store.go +68 −0
  • internal/console/store_env_estate_test.go +187 −0
  • internal/console/storelock.go +18 −8
  • internal/console/storelock_test.go +32 −10
  • internal/console/templates/app_settings.html +85 −0
  • internal/edge/edge.go +30 −3
  • internal/edge/homemap.go +7 −5
  • internal/edge/pending.go +222 −0
  • internal/edge/pending_script_test.go +136 −0
  • internal/edge/pending_test.go +167 −0
  • internal/edge/purge.go +29 −0
  • internal/edge/purge_header.go +228 −113
  • internal/edge/purge_header_test.go +12 −7
  • internal/edge/purge_hosts_test.go +484 −0
  • internal/edge/purge_path_test.go +1 −1
  • internal/edge/purge_test.go +72 −0
  • internal/edge/steeringprobe.go +3 −1
  • internal/edge/wildcard.go +3 −1
  • internal/host/edgesfile.go +152 −19
  • internal/host/edgesfile_schedule_test.go +152 −0
  • internal/mail/aws.go +50 −12
  • internal/mail/aws_test.go +8 −0
  • internal/mail/domain.go +17 −4
  • internal/mail/domainclaim.go +23 −11
  • internal/mail/mail.go +174 −16
  • internal/mail/mail_test.go +195 −1
  • internal/mail/memprovisioner.go +43 −6
  • internal/mail/memprovisioner_test.go +28 −0
  • internal/mail/provisioner.go +12 −0
  • internal/mail/sweep.go +84 −0
  • internal/mail/sweep_test.go +63 −0
  • internal/mail/walk.go +448 −85
  • internal/mail/walk_domain_test.go +53 −0
  • internal/mail/walk_domainremove_test.go +442 −0
  • internal/mail/walk_lifecycle_test.go +147 −0
  • internal/objstore/objstore.go +107 −5
  • internal/objstore/walk.go +187 −40
  • internal/objstore/walk_env_test.go +304 −0
  • internal/provision/provision.go +20 −0
  • internal/provision/provision_test.go +47 −0
  • internal/release/trash.go +30 −6
  • mail_cli.go +202 −4
  • mail_cli_test.go +135 −1
  • store.go +108 −16
  • store_env_guard_test.go +51 −0
  • store_env_print_test.go +46 −0
  • store_test.go +13 −13
README.md

Loading diff…

apimode.go

Loading diff…

canary.go

Loading diff…

cmd/console/main.go

Loading diff…

deploy.go

Loading diff…

docs/site/cli.md

Loading diff…

docs/superpowers/plans/2026-09-15-tenant-email-2-senders.md

Loading diff…

docs/superpowers/plans/2026-09-15-tenant-email-3-external-identities.md

Loading diff…

docs/superpowers/plans/2026-09-15-tenant-email-4-instance-config.md

Loading diff…

docs/superpowers/plans/2026-09-15-tenant-email-5-instance-senders.md

Loading diff…

docs/superpowers/plans/2026-09-15-tenant-email-ses-spike.md

Loading diff…

docs/superpowers/specs/2026-09-15-tenant-email-senders-design.md

Loading diff…

docs/superpowers/specs/2026-09-19-per-environment-store-design.md

Loading diff…

docs/superpowers/specs/2026-09-22-instance-private-storage-design.md

Loading diff…

instances_cli.go

Loading diff…

instances_privatestorage_test.go

Loading diff…

internal/appconfig/appconfig.go

Loading diff…

internal/appconfig/awaitingrestart_test.go

Loading diff…

internal/appconfig/configack.go

Loading diff…

internal/appconfig/configack_test.go

Loading diff…

internal/appconfig/environments.go

Loading diff…

internal/appconfig/instances.go

Loading diff…

internal/appconfig/instances_test.go

Loading diff…

internal/appconfig/routefingerprint.go

Loading diff…

internal/appconfig/store.go

Loading diff…

internal/appconfig/sync.go

Loading diff…

internal/appconfig/sync_test.go

Loading diff…

internal/appconfig/syncexec.go

Loading diff…

internal/appconfig/syncexec_test.go

Loading diff…

internal/console/apiinstances.go

Loading diff…

internal/console/apiinstancesprivatestore_test.go

Loading diff…

internal/console/apimail.go

Loading diff…

internal/console/apimail_test.go

Loading diff…

internal/console/apiscan_test.go

Loading diff…

internal/console/apistore.go

Loading diff…

internal/console/apistore_env_test.go

Loading diff…

internal/console/apistore_envonly_test.go

Loading diff…

internal/console/apistore_provision.go

Loading diff…

internal/console/apistore_provision_test.go

Loading diff…

internal/console/appsettings.go

Loading diff…

internal/console/appsettings_env_test.go

Loading diff…

internal/console/economicspass.go

Loading diff…

internal/console/instanceprivatestore.go

Loading diff…

internal/console/mailcounts.go

Loading diff…

internal/console/mailcounts_test.go

Loading diff…

internal/console/mailevents.go

Loading diff…

internal/console/mailevents_test.go

Loading diff…

internal/console/ownership.go

Loading diff…

internal/console/server.go

Loading diff…

internal/console/sesevents.go

Loading diff…

internal/console/sesevents_test.go

Loading diff…

internal/console/store.go

Loading diff…

internal/console/store_env_estate_test.go

Loading diff…

internal/console/storelock.go

Loading diff…

internal/console/storelock_test.go

Loading diff…

internal/console/templates/app_settings.html

Loading diff…

internal/edge/edge.go

Loading diff…

internal/edge/homemap.go

Loading diff…

internal/edge/pending.go

Loading diff…

internal/edge/pending_script_test.go

Loading diff…

internal/edge/pending_test.go

Loading diff…

internal/edge/purge.go

Loading diff…

internal/edge/purge_header.go

Loading diff…

internal/edge/purge_header_test.go

Loading diff…

internal/edge/purge_hosts_test.go

Loading diff…

internal/edge/purge_path_test.go

Loading diff…

internal/edge/purge_test.go

Loading diff…

internal/edge/steeringprobe.go

Loading diff…

internal/edge/wildcard.go

Loading diff…

internal/host/edgesfile.go

Loading diff…

internal/host/edgesfile_schedule_test.go

Loading diff…

internal/mail/aws.go

Loading diff…

internal/mail/aws_test.go

Loading diff…

internal/mail/domain.go

Loading diff…

internal/mail/domainclaim.go

Loading diff…

internal/mail/mail.go

Loading diff…

internal/mail/mail_test.go

Loading diff…

internal/mail/memprovisioner.go

Loading diff…

internal/mail/memprovisioner_test.go

Loading diff…

internal/mail/provisioner.go

Loading diff…

internal/mail/sweep.go

Loading diff…

internal/mail/sweep_test.go

Loading diff…

internal/mail/walk.go

Loading diff…

internal/mail/walk_domain_test.go

Loading diff…

internal/mail/walk_domainremove_test.go

Loading diff…

internal/mail/walk_lifecycle_test.go

Loading diff…

internal/objstore/objstore.go

Loading diff…

internal/objstore/walk.go

Loading diff…

internal/objstore/walk_env_test.go

Loading diff…

internal/provision/provision.go

Loading diff…

internal/provision/provision_test.go

Loading diff…

internal/release/trash.go

Loading diff…

mail_cli.go

Loading diff…

mail_cli_test.go

Loading diff…

store.go

Loading diff…

store_env_guard_test.go

Loading diff…

store_env_print_test.go

Loading diff…

store_test.go

Loading diff…