Skip to content

Dire dans la configuration OÙ servir, et rendre à la ligne de commande sa priorité - #49

Merged
Beennnn merged 1 commit into
mainfrom
claude/reprise-sans-binaires-fu4e2h
Sep 3, 2026
Merged

Dire dans la configuration OÙ servir, et rendre à la ligne de commande sa priorité#49
Beennnn merged 1 commit into
mainfrom
claude/reprise-sans-binaires-fu4e2h

Conversation

@Beennnn

@Beennnn Beennnn commented Sep 3, 2026

Copy link
Copy Markdown
Owner

SERVE_HOST : l'interface est un réglage, la mise en écoute reste un geste

L'interface qu'une machine expose est une propriété de cette machine — elle se lit donc dans le fichier de configuration. La décision de servir, non : --serve reste la seule chose qui met l'outil en écoute. Un fichier de configuration voyage (dans un dépôt, un ticket, sur une autre machine) ; un fichier capable d'ouvrir un port en voyageant serait illisible en confiance. Un test tient la ligne : exactement un serve = true dans le switch des options.

Le défaut reste 127.0.0.1. La clé est livrée commentée, avec son prix à côté : au-delà de la boucle locale, le rapport — et les valeurs de paramètres capturées d'une vraie application qu'il contient — devient lisible et annotable par qui atteint le port. L'outil avertit déjà au démarrage quand il écoute plus large sans secret.

Une recette de déploiement, dans la documentation des annotations

Unité systemd, secret par XRAY_SERVE_TOKEN dans un EnvironmentFile plutôt que sur la ligne (où ps le montre), et reverse-proxy TLS devant : l'unité proposée écoute sur 127.0.0.1, le proxy est ce qui écoute dehors, et le HTTP en clair ne quitte jamais la machine. Avec les deux points que l'on saute d'ordinaire : le répertoire --out est le périmètre servi, et --serve-host 0.0.0.0 sans proxy est une décision, pas un raccourci.

Le défaut trouvé en l'ajoutant

merge() était une liste écrite à la main : neuf réglages sur vingt-deux. Tout le reste donné sur la ligne était abandonné sans un mot dès qu'un --config l'accompagnait.

Commande Avant Après
--config x.conf --level coverage --jacoco-reports data mesure complète, 189 fichiers couverture seule, 9 fichiers

Rien n'échouait : l'exécution faisait autre chose que ce qu'on lui avait demandé, et le seul moyen de s'en apercevoir était de compter les fichiers après coup. Le fichier trouvé par son nom, sans --config, était pire : il remplaçait la configuration entière, les neuf réglages compris.

La règle est maintenant appliquée plutôt qu'énumérée — un réglage qui diffère d'une Config neuve est un réglage posé par la ligne. Une liste doit être maintenue à chaque nouvelle option ; une comparaison non. SettingsPrecedenceTest parcourt les champs par réflexion et casse la construction sur celui qui ne passerait pas — c'est la garde qu'une liste plus longue n'aurait jamais été.

Vérifications

  • 291 tests unitaires (5 nouveaux), Linux et Windows.
  • 72 contrôles de recette locale (9 nouveaux) : la ligne l'emporte sur le fichier, y compris quand le fichier est trouvé par son nom ; et SERVE_HOST posé sans --serve termine au lieu d'écouter.
  • Aucun lien mort dans la documentation touchée.

🤖 Generated with Claude Code

https://claude.ai/code/session_01J956wjynbd7fkZx4HpjHzP


Generated by Claude Code

…e sa priorité

Répéter --serve-host à chaque lancement, c'est finir par ne plus le répéter : l'interface
qu'une machine expose est une propriété de cette machine, donc SERVE_HOST se lit dans le
fichier de configuration. Ce qui n'y est pas, et ne doit pas y être, c'est la décision de
servir. La clé dit où écouter quand --serve est donné, et ne met jamais rien en écoute
d'elle-même : un fichier de configuration voyage — dans un dépôt, dans un ticket, sur une
autre machine — et un fichier capable d'ouvrir un port en voyageant serait illisible en
confiance. Un test tient la ligne : un seul « serve = true » dans le switch des options.

Au-delà de la boucle locale, le rapport devient lisible et annotable par qui atteint le
port, avec les valeurs capturées d'une vraie application dedans. Le défaut reste donc
127.0.0.1, la clé est livrée commentée avec son prix à côté, et la documentation porte le
déploiement qui le fait proprement : le proxy termine le TLS et l'outil ne répond qu'à lui.

En l'ajoutant, un défaut est apparu. merge() était une liste écrite à la main, et elle
couvrait neuf réglages sur vingt-deux. Tout le reste donné sur la ligne était abandonné
sans un mot dès qu'un --config l'accompagnait : --level coverage mesurait tout, et
--jacoco-reports data écrivait ses cent quatre-vingts fichiers. Rien n'échouait — l'exécution
faisait simplement autre chose que ce qu'on lui avait demandé, et le seul moyen de s'en
apercevoir était de compter les fichiers après coup. Le fichier trouvé par son nom, sans
--config, était pire encore : il remplaçait tout.

La règle est maintenant appliquée plutôt qu'énumérée — un réglage qui diffère d'une Config
neuve est un réglage posé par la ligne. Une liste doit être maintenue à chaque nouvelle
option ; une comparaison non. Le test parcourt les champs par réflexion et casse la
construction sur celui qui ne passerait pas.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J956wjynbd7fkZx4HpjHzP
@Beennnn
Beennnn marked this pull request as ready for review September 3, 2026 22:03
@Beennnn
Beennnn merged commit 8bae1c9 into main Sep 3, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants