---
config.example.ini | 13 +++++++++++++
go.mod | 12 ++++++------
go.sum | 24 ++++++++++++------------
3 files changed, 31 insertions(+), 18 deletions(-)
diff --git a/config.example.ini b/config.example.ini
index bc0e4fb..5430916 100644
--- a/config.example.ini
+++ b/config.example.ini
@@ -39,6 +39,19 @@ default-from-email=noreply@domain.com
# Default: true
email-admin-errors=true
+# Suppress repeat admin error emails for the same error (route + error text)
+# for this many seconds. The report that follows a quiet period says how many
+# occurrences it stands in for and lists the request paths seen.
+# 0 disables suppression.
+# Default: 900
+error-email-window=900
+
+# Hard ceiling on admin error emails per hour across all errors. Backstops the
+# window when an error message embeds per-request data (ids, values) and so
+# never repeats its signature. 0 disables the ceiling.
+# Default: 20
+error-email-max-per-hour=20
+
# Language
default-language=es
diff --git a/go.mod b/go.mod
index 0df1750..4c3c217 100644
--- a/go.mod
+++ b/go.mod
@@ -33,12 +33,12 @@ require (
golang.org/x/text v0.27.0
golang.org/x/time v0.8.0
hg.code.netlandish.com/~netlandish/sendygo v0.0.0-20230124192435-bbf347776232
- netlandish.com/x/gobwebs v0.1.14
- netlandish.com/x/gobwebs-auditlog v0.3.1
- netlandish.com/x/gobwebs-formguard v0.2.12
- netlandish.com/x/gobwebs-graphql v0.2.13
- netlandish.com/x/gobwebs-oauth2 v0.2.12
- netlandish.com/x/gobwebs-ses-feedback v0.2.12
+ netlandish.com/x/gobwebs v0.1.15
+ netlandish.com/x/gobwebs-auditlog v0.3.2
+ netlandish.com/x/gobwebs-formguard v0.2.13
+ netlandish.com/x/gobwebs-graphql v0.2.14
+ netlandish.com/x/gobwebs-oauth2 v0.2.13
+ netlandish.com/x/gobwebs-ses-feedback v0.2.13
petersanchez.com/x/carrier v0.2.4
petersanchez.com/x/carrier/ses v0.0.0-20251028135020-aeeb26831d7f
petersanchez.com/x/carrier/smtp v0.0.0-20251028135020-aeeb26831d7f
diff --git a/go.sum b/go.sum
index 38506fc..d2cccaf 100644
--- a/go.sum
+++ b/go.sum
@@ -2582,18 +2582,18 @@ modernc.org/z v1.0.1-0.20210308123920-1f282aa71362/go.mod h1:8/SRk5C/HgiQWCgXdfp
modernc.org/z v1.0.1/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA=
modernc.org/z v1.2.20/go.mod h1:zU9FiF4PbHdOTUxw+IF8j7ArBMRPsHgq10uVPt6xTzo=
modernc.org/zappy v1.0.0/go.mod h1:hHe+oGahLVII/aTTyWK/b53VDHMAGCBYYeZ9sn83HC4=
-netlandish.com/x/gobwebs v0.1.14 h1:IhmfC2N98O5ARcSDMalE6WJ9bNdGh9VFmBa6MID8Ccg=
-netlandish.com/x/gobwebs v0.1.14/go.mod h1:RAf0VNiujzXen/pu0k6yyhvPWMgCY9tKD7ftXrkT53E=
-netlandish.com/x/gobwebs-auditlog v0.3.1 h1:GJTH1AdMunjnoJgBvFxz9Xh5uTvTTRCXMt99ClkbziA=
-netlandish.com/x/gobwebs-auditlog v0.3.1/go.mod h1:80YZGFdUPiKbc3TU9Da2HpSJeukzie+L/x6O8fzTY9U=
-netlandish.com/x/gobwebs-formguard v0.2.12 h1:WmAquakbERFrA57QokBjZb+XT3PPX6PyU3Zj5LH07gU=
-netlandish.com/x/gobwebs-formguard v0.2.12/go.mod h1:ON/Y0nolqesgcLF2t+VTNaBQ8CvptK4wmAYpcqNbfJQ=
-netlandish.com/x/gobwebs-graphql v0.2.13 h1:IEv2Mcx37JzX8WAR8xvCrSNw8HKLKnv/PmpcmiPoTQU=
-netlandish.com/x/gobwebs-graphql v0.2.13/go.mod h1:TNw6ca3Pozbmf0jOkpp0YdWYcLs3gIb61Aq5ByMpRNU=
-netlandish.com/x/gobwebs-oauth2 v0.2.12 h1:lzuTTsqYb8awrhcqNE+jgOeOgfm4dRkCx8IbBKGsW1I=
-netlandish.com/x/gobwebs-oauth2 v0.2.12/go.mod h1:wAU8uUiML1eX/6/DLcz2rBwnYJB3lTnU7mmFlQjxlA8=
-netlandish.com/x/gobwebs-ses-feedback v0.2.12 h1:KrR8B2xXDWPpID+CrU5MRp7PvxVcGCavYNoQpyhryQI=
-netlandish.com/x/gobwebs-ses-feedback v0.2.12/go.mod h1:ZKDhfcyE03cU3T9WCY1P0a1Wfl5HvDmApA3fmy37VfY=
+netlandish.com/x/gobwebs v0.1.15 h1:fvyJbWz1b9MQJWoV2Jb/DWAQrOQDwhmIr5XC4gy6P44=
+netlandish.com/x/gobwebs v0.1.15/go.mod h1:2jf9Zn0yiggw+lXtk+aP5PlXa19fExCOvAsxaJPhmv0=
+netlandish.com/x/gobwebs-auditlog v0.3.2 h1:mG3y/gA9wLFbm172JAg3qhQXsviL7AEUw1TAKMvuEVw=
+netlandish.com/x/gobwebs-auditlog v0.3.2/go.mod h1:Hp/tmzsy6Cum7w/s3xeA7iXHOkTVCxLYmU7mEXJZuL4=
+netlandish.com/x/gobwebs-formguard v0.2.13 h1:bqolzDBFLYk9V3qglIXccMEefIoFlCHrte7UjRyN9EY=
+netlandish.com/x/gobwebs-formguard v0.2.13/go.mod h1:3bH1yWdbFauqMr+CP5hmsOSt4VHIY4qfo4wPQfRnasg=
+netlandish.com/x/gobwebs-graphql v0.2.14 h1:rQ98bzgEat9/FSbKTqYwJi6juIQ2Rh1RTc50dG2XAl8=
+netlandish.com/x/gobwebs-graphql v0.2.14/go.mod h1:T45dDN3aIbpOX+rjAMyxa/yZuB3HZqgPAyEEypVWIiE=
+netlandish.com/x/gobwebs-oauth2 v0.2.13 h1:Wco3mWNzXIq5PxdgrvWLXKO6kCH6G0GiHJgkyc9U7KI=
+netlandish.com/x/gobwebs-oauth2 v0.2.13/go.mod h1:4+LM3EHqQ0gtONbVdExgZBNckI/Pmx23XELZiXv7fpw=
+netlandish.com/x/gobwebs-ses-feedback v0.2.13 h1:PFKHqv4cOfOG+rx5zQnl/tmYYQRrW+SP1SaKJ29b1e8=
+netlandish.com/x/gobwebs-ses-feedback v0.2.13/go.mod h1:HTABFx5jepJP3fiUpqmlXKJ+Ej/ZTGCdDFO724aFlpc=
petersanchez.com/x/carrier v0.2.4 h1:3XgM4bbAg9FfisWwYoq8c5m0nRCEFj8sdJUDZEIDJaQ=
petersanchez.com/x/carrier v0.2.4/go.mod h1:GLiDI9OThDmruufk/VHlR6Ihvq/hIJQyA5beU6AFNYk=
petersanchez.com/x/carrier/ses v0.0.0-20251028135020-aeeb26831d7f h1:NrttT1y8J1tNfVczIYmuK9Txa8vj8G/4Rv40C+6BzK8=
--
2.54.0
Applied.
To git@git.code.netlandish.com:~netlandish/links
d914636..a3ecca4 master -> master