[Bug — medium] Les valeurs de --config et --ignore sont interprétées comme des paquets #87

Closed
opened 2026-09-17 12:09:31 +00:00 by hermes · 0 comments
Member

Ticket de revue indépendante, pour évaluation ultérieure uniquement. Mathieu n’a demandé ni implémentation, ni déclenchement de boucle, ni PR. Aucun correctif apporté.

Référence : branche main, commit 30b53a270c3e28024a74762fc94c5ddb6f541f38 ; branche distante relue juste avant publication. Le contrôle de fraîcheur du paquet 0.1.0.r23.gee99222 passe : ses entrées de code sont identiques à celles examinées.

Défaut et impact

Gravité : medium. Des options natives documentées cassent une installation pourtant valide ; la forme --option=valeur peut contourner certains cas, mais ne répare pas le parsing.

Entrées et résultats réellement exécutés :

-S --ignore linux hello
  targets=[linux hello], err=<nil>
-S --config /tmp/pacman.conf hello
  err=local/path recipe target "/tmp/pacman.conf" is outside AURoscope v1

Attendu : seule hello est une cible ; linux est la valeur de --ignore et /tmp/pacman.conf celle de --config. Le second cas doit pouvoir atteindre Paru, pas être rejeté comme recette locale. Le premier ajoute une fausse cible à la résolution. Aucune installation supplémentaire effective n’est revendiquée.

Cause et emplacement

initialTargets, run.go:160–180 retire simplement les mots commençant par - et traite les autres comme cibles, sans consommation des valeurs d’options. La reconstruction auditedInstallArgs, review.go:187–203 utilise ensuite cet ensemble pour supprimer des mots de la commande originale : elle peut aussi retirer la valeur d’une option.

Piste minimale et acceptation

  • Distinguer options, leurs valeurs et cibles pour la surface Paru prise en charge ; refuser clairement une forme inconnue plutôt que deviner. Ne pas recopier tout le résolveur Paru.
  • Une seule représentation de cette séparation, réutilisée pour extraire puis remplacer les cibles, supprimerait les deux interprétations divergentes.
  • Tester --ignore linux / --ignore=linux, --config /tmp/pacman.conf / --config=/tmp/pacman.conf, valeurs relatives, options répétées et séparateur --.
  • Vérifier que les valeurs survivent au handoff, qu’aucune fausse cible n’est résolue et que le refus des vraies recettes locales reste actif.

Déduplication : inventaire complet paginé et anciennes PR de routage consultés ; #52/#53 concernaient la relance de recherche après sélection officielle, pas les valeurs d’options. Bloque les formes concernées, pas toute installation. Mathieu : évaluer/prioriser avant toute exécution ultérieure.

Reproduction automatisée isolée

Le test ci-dessous réutilise les helpers existants de internal/app. Il a été exécuté avec un overlay Go, sans modifier le checkout : go test -overlay /chemin/overlay.json ./internal/app -run TestReviewProbeOptionOperandsAreNotTargets -v -count=1. L’overlay associe le chemin absolu internal/app/review_probe_test.go du checkout au fichier temporaire contenant ce test. Ce test exprime le comportement attendu et échoue actuellement. Aucun vrai Paru/Pacman, fournisseur LLM ou contenu de paquet n’est exécuté.

Test Go reproductible
package app
import ("reflect"; "testing")
func TestReviewProbeOptionOperandsAreNotTargets(t *testing.T) {
 for _, args:=range [][]string{{"-S","--ignore","linux","hello"},{"-S","--config","/tmp/pacman.conf","hello"}} {
  targets,err:=initialTargets(args,paruClient{})
  t.Logf("input=%q targets=%q err=%v",args,targets,err)
  if err!=nil||!reflect.DeepEqual(targets,[]string{"hello"}){t.Errorf("option operand confused with target")}
 }
}

Ticket de revue indépendante, **pour évaluation ultérieure uniquement**. Mathieu n’a demandé ni implémentation, ni déclenchement de boucle, ni PR. Aucun correctif apporté. Référence : branche `main`, commit `30b53a270c3e28024a74762fc94c5ddb6f541f38` ; branche distante relue juste avant publication. Le contrôle de fraîcheur du paquet `0.1.0.r23.gee99222` passe : ses entrées de code sont identiques à celles examinées. ## Défaut et impact **Gravité : medium.** Des options natives documentées cassent une installation pourtant valide ; la forme `--option=valeur` peut contourner certains cas, mais ne répare pas le parsing. Entrées et résultats réellement exécutés : ```text -S --ignore linux hello targets=[linux hello], err=<nil> -S --config /tmp/pacman.conf hello err=local/path recipe target "/tmp/pacman.conf" is outside AURoscope v1 ``` Attendu : seule `hello` est une cible ; `linux` est la valeur de `--ignore` et `/tmp/pacman.conf` celle de `--config`. Le second cas doit pouvoir atteindre Paru, pas être rejeté comme recette locale. Le premier ajoute une fausse cible à la résolution. Aucune installation supplémentaire effective n’est revendiquée. ## Cause et emplacement [`initialTargets`, run.go:160–180](https://git.2027a.net/2027a/auroscope/src/commit/30b53a270c3e28024a74762fc94c5ddb6f541f38/internal/app/run.go#L160-L180) retire simplement les mots commençant par `-` et traite les autres comme cibles, sans consommation des valeurs d’options. La reconstruction [`auditedInstallArgs`, review.go:187–203](https://git.2027a.net/2027a/auroscope/src/commit/30b53a270c3e28024a74762fc94c5ddb6f541f38/internal/app/review.go#L187-L203) utilise ensuite cet ensemble pour supprimer des mots de la commande originale : elle peut aussi retirer la valeur d’une option. ## Piste minimale et acceptation - Distinguer options, leurs valeurs et cibles pour la surface Paru prise en charge ; refuser clairement une forme inconnue plutôt que deviner. Ne pas recopier tout le résolveur Paru. - Une seule représentation de cette séparation, réutilisée pour extraire puis remplacer les cibles, supprimerait les deux interprétations divergentes. - Tester `--ignore linux` / `--ignore=linux`, `--config /tmp/pacman.conf` / `--config=/tmp/pacman.conf`, valeurs relatives, options répétées et séparateur `--`. - Vérifier que les valeurs survivent au handoff, qu’aucune fausse cible n’est résolue et que le refus des vraies recettes locales reste actif. Déduplication : inventaire complet paginé et anciennes PR de routage consultés ; #52/#53 concernaient la relance de recherche après sélection officielle, pas les valeurs d’options. Bloque les formes concernées, pas toute installation. Mathieu : évaluer/prioriser avant toute exécution ultérieure. ## Reproduction automatisée isolée Le test ci-dessous réutilise les helpers existants de `internal/app`. Il a été exécuté avec un overlay Go, sans modifier le checkout : `go test -overlay /chemin/overlay.json ./internal/app -run TestReviewProbeOptionOperandsAreNotTargets -v -count=1`. L’overlay associe le chemin absolu `internal/app/review_probe_test.go` du checkout au fichier temporaire contenant ce test. Ce test exprime le comportement attendu et **échoue actuellement**. Aucun vrai Paru/Pacman, fournisseur LLM ou contenu de paquet n’est exécuté. <details><summary>Test Go reproductible</summary> ```go package app import ("reflect"; "testing") func TestReviewProbeOptionOperandsAreNotTargets(t *testing.T) { for _, args:=range [][]string{{"-S","--ignore","linux","hello"},{"-S","--config","/tmp/pacman.conf","hello"}} { targets,err:=initialTargets(args,paruClient{}) t.Logf("input=%q targets=%q err=%v",args,targets,err) if err!=nil||!reflect.DeepEqual(targets,[]string{"hello"}){t.Errorf("option operand confused with target")} } } ``` </details>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
2027a/auroscope#87
No description provided.