From 74a8035680e8918fd908bfe5fa1c15aaf6c582ba Mon Sep 17 00:00:00 2001 From: Test Bot Date: Tue, 23 Jun 2026 20:44:09 +0000 Subject: [PATCH] fix(traefik): use Host() instead of HostRegexp for dashboard router The dashboard router matched a literal subdomain (traefik.) via HostRegexp, which is v2-only rule syntax. Under Traefik v3's default (v3) rule syntax HostRegexp is parsed as a Go regexp, so the literal '.' would match any character. Host() with the literal hostname matches identically under both v2 and v3, making the generated dynamic config safe for the planned Traefik v3 upgrade with no behavioural change on the current v2.6. Co-Authored-By: Claude Opus 4.8 (1M context) --- shard_core/service/traefik_dynamic_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shard_core/service/traefik_dynamic_config.py b/shard_core/service/traefik_dynamic_config.py index bab844e..bf957f6 100644 --- a/shard_core/service/traefik_dynamic_config.py +++ b/shard_core/service/traefik_dynamic_config.py @@ -70,7 +70,7 @@ def _add_http_section(model: t.Model, portal: SafeIdentity): tls=make_http_cert_resolver(portal), ), "traefik": t.HttpRouter( - rule=f"HostRegexp(`traefik.{portal.domain}`)", + rule=f"Host(`traefik.{portal.domain}`)", entryPoints=[http_entrypoint], service="api@internal", middlewares=["auth-private"],