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