+15
−1
Loading
Renoncer au relais de heurtoir empêchait l'instance entière de démarrer. Pas la
notification mobile : l'instance, en bloc.
Ce qui se passait
KASTELL_RELAIS_POUSSEE est validée comme une adresse. « optional() » attrape
l'absence, jamais le vide — et la composition ne sait pas laisser une variable
absente : « ${KASTELL_RELAIS_POUSSEE:-} » la définit toujours, à vide quand le
.env ne la renseigne pas. Le conteneur recevait donc une chaîne que « url() »
refuse, et le serveur s'arrêtait sur une configuration invalide.
Le défaut ne se voyait pas en lisant le schéma. Il se voyait en lisant ce que
la composition transmet — c'est-à-dire ailleurs, dans un autre fichier, écrit
à un autre moment.
La garantie plutôt que le rustine
Le correctif tient en trois lignes : la chaîne vide redevient « absente ».
Mais corriger cette variable-là n'aurait rien dit de la prochaine.
Le contrôle relève donc dans compose.yaml toutes les variables déclarées
« ${VAR:-} » — douze aujourd'hui — les met toutes à vide, et exerce
chargerEnv() dessus. Il exerce le schéma plutôt que de relire son texte : une
lecture par expression rationnelle manquerait la variable ajoutée demain.
Éprouvé en rétablissant l'ancienne écriture le temps du contrôle : la garantie
rougit en nommant KASTELL_RELAIS_POUSSEE, puis reverdit. Un contrôle qui ne
rougit jamais ne garantit rien.
Reste ouvert, et signalé plutôt que corrigé : z.string().url() accepte
« relais:8081 », que la norme WHATWG lit comme un schéma. Une faute de frappe
dans l'adresse passe donc la validation et n'échoue qu'à l'appel.
Signed-off-by:
Kourser <contact@kourser.bzh>
Co-Authored-By:
Claude Opus 5 <noreply@anthropic.com>