• Joined on 2026-05-18
Herald commented on pull request qpismont/herald#7 2026-09-17 16:55:43 +02:00
1.2: Sandboxing

Le chemin dest est converti en chaîne via display(), ce qui peut planter si le chemin contient des caractères non-UTF-8. Dans un contexte Linux, c’est très rare, mais il serait plus sûr d’utiliser to_string_lossy().

Herald commented on pull request qpismont/herald#7 2026-09-17 16:55:43 +02:00
1.2: Sandboxing

La fonction sanitize tronque les tirets et points en début et fin, mais elle pourrait laisser passer des séquences de deux tirets consécutifs qui sont autorisées par Docker. Ce n’est pas critique, mais une validation plus stricte (limiter la longueur, interdire les séquences interdites) améliorerait la robustesse.

Herald commented on pull request qpismont/herald#7 2026-09-17 16:55:43 +02:00
1.2: Sandboxing

La vérification est redondante : normalize() garantit déjà que le chemin ne peut pas sortir de la racine. Cependant, la double protection ne pose pas de problème de sécurité. On pourrait simplifier en supprimant cette condition si on est certain que normalize() ne retourne qu’un chemin bien formé.

Herald commented on pull request qpismont/herald#7 2026-07-31 22:08:27 +02:00
1.2: Sandboxing

Review Feedback

Herald commented on pull request qpismont/herald#7 2026-07-31 22:08:27 +02:00
1.2: Sandboxing

L'option --security-opt label=disable désactive la sécurité SELinux, ce qui réduit l'isolation du conteneur. Pour un environnement de développement, cela peut être acceptable, mais il faut être conscient des implications de sécurité. Envisagez d'utiliser --security-opt label=type:container_runtime_t ou d'autres options moins permissives si possible.

Herald commented on pull request qpismont/herald#7 2026-07-31 22:08:27 +02:00
1.2: Sandboxing

Le champ build est obligatoire, mais le schéma standard devcontainer.json permet également d'utiliser image à la place de build. Si quelqu'un utilise image, la désérialisation échouera. Envisagez de rendre build optionnel avec #[serde(default)] et de gérer le cas où ni build ni image ne sont présents.

Herald commented on pull request qpismont/herald#7 2026-07-31 22:08:27 +02:00
1.2: Sandboxing

Les tests sont synchrones et utilisent std::fs plutôt que tokio::fs. C'est acceptable pour l'instant, mais si l'implémentation venait à dépendre de fonctionnalités asynchrones (comme tokio::fs), les tests pourraient ne plus être représentatifs.

Herald commented on pull request qpismont/herald#7 2026-07-31 22:08:27 +02:00
1.2: Sandboxing

La fonction parse est asynchrone, mais les tests unitaires ne la testent pas directement (ils testent TryFrom). Il serait bon d'ajouter un test asynchrone pour parse afin de couvrir le flux complet (lecture du fichier, désérialisation, conversion).

Herald commented on pull request qpismont/herald#7 2026-07-31 22:08:27 +02:00
1.2: Sandboxing

Si aucun fichier Dockerfile ou Containerfile n'existe, la fonction retourne base_dir.join("Dockerfile"), ce qui échouera plus tard avec ContainerFileNotFound. Cela pourrait être plus explicite en retournant une Option<PathBuf> et en laissant l'appelant gérer l'absence de fichier. Sinon, le message d'erreur actuel est suffisant.

Herald commented on pull request qpismont/herald#6 2026-07-26 13:21:38 +02:00
Observability

Review Feedback

Herald commented on pull request qpismont/herald#6 2026-07-26 13:21:38 +02:00
Observability

La métrique herald_openrouter_cost_usd_total utilise un compteur de type Count, mais elle représente un coût en dollars. Bien que cela soit fonctionnel, il serait plus clair d'utiliser un type Gauge ou d'ajouter une unité personnalisée si possible. Actuellement l'unité Count peut prêter à confusion pour les opérateurs.

Herald commented on pull request qpismont/herald#6 2026-07-26 13:21:38 +02:00
Observability

La variable d'environnement METRICS_BIND_ADDR est définie sans valeur par défaut ni commentaire. Il serait judicieux d'ajouter un exemple de format (ex: 0.0.0.0:9090) ou un commentaire indiquant le format attendu, afin d'éviter des erreurs de configuration.

Herald commented on pull request qpismont/herald#6 2026-07-26 13:21:38 +02:00
Observability

Le démarrage conditionnel de l'exportateur Prometheus est une bonne pratique. Toutefois, si l'installation échoue, l'erreur est propagée via ?, ce qui met fin à l'application. Cela peut être acceptable, mais un message d'erreur plus explicite (ex: avec tracing::error) aiderait au débogage.

Herald commented on pull request qpismont/herald#6 2026-07-26 13:21:38 +02:00
Observability

La méthode name() retourne une String en clonant self.bot_name. Cela peut être inefficace si appelée fréquemment. Envisagez de retourner un &str pour éviter une allocation, ou changez le champ en Arc<str> si un partage est nécessaire.

Herald commented on pull request qpismont/herald#5 2026-06-16 20:54:23 +02:00
Fix missing env var error

Review Feedback

Herald commented on pull request qpismont/herald#5 2026-06-16 20:54:23 +02:00
Fix missing env var error

L'ajout d'informations de débogage (debug = 1) dans le profil release augmente la taille du binaire. Si cela est nécessaire pour le diagnostic en production (par exemple pour les backtraces), c'est acceptable. Sinon, il serait préférable de ne l'activer que pour un profil release-with-debug dédié ou d'ajouter un commentaire expliquant la décision.

Herald commented on pull request qpismont/herald#5 2026-06-16 20:54:23 +02:00
Fix missing env var error

Après avoir vérifié que la variable d'environnement est vide ou ne contient que des espaces, il n'y a pas de traitement visible (pas de return Err(...) ni de panic!). Si l'intention est de rejeter les valeurs vides, il faut ajouter une gestion d'erreur explicite, par exemple return Err(anyhow::anyhow!("{}: variable vide", key)). Sinon, la fonction continue avec une valeur vide et échouera peut-être plus tard de manière obscure.

Herald commented on pull request qpismont/herald#5 2026-06-16 20:54:23 +02:00
Fix missing env var error

Cette transformation en anyhow::Error est claire et appropriée. Bonne pratique pour la propagation d'erreur.

Herald commented on pull request qpismont/herald#5 2026-06-16 20:54:23 +02:00
Fix missing env var error

Le motif match ne gère que la variante WebhookType::Review. Si une autre variante (par exemple WebhookType::PullRequest) est reçue, cela provoquera une panique. Il faut soit étendre le match à toutes les variantes, soit s'assurer que cette fonction n'est appelée que pour des événements Review (par exemple en déplaçant la logique dans le bloc if let).

Herald commented on pull request qpismont/herald#5 2026-06-16 20:54:23 +02:00
Fix missing env var error

La variable bot_name n'est pas définie dans le contexte visible. Assurez-vous qu'elle est passée en paramètre ou accessible dans la portée, sinon cela causera une erreur de compilation.