A global flag before a plugin name makes the plugin unreachable

Ouverte
#2,878 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
62/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
rust
Domaine
cli

Piste de recherche

Start in cmd/soroban-cli/src/commands/plugin/default.rs around lines 64-70, where the plugin name is built from arguments up to the first one starting with --. Reproduce with a stellar-foo binary on PATH by running stellar -q foo a b and stellar --quiet foo a b, which should both reach the plugin. Done means those invocations run stellar-foo with "a b" while stellar foo -q a still passes -q a through unchanged.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

What's wrong:
Global flags work before any built-in command, but not before a plugin. With CLI 28.1.0 and a plugin stellar-foo on PATH:

$ stellar foo a b              # runs stellar-foo with "a b"
$ stellar foo -q a             # runs stellar-foo with "-q a"
$ stellar -q foo a b
error: unrecognized subcommand 'foo'
$ stellar --quiet foo          # same error, also for --verbose and --config-dir <dir>

Plugin lookup builds the plugin name from the arguments up to the first one starting with -- (v28.1.0 plugin/default.rs#L64-L70), so a leading --quiet leaves no name, and a leading -q becomes part of the name. This came in with multi-word plugin names (#2014), which didn't discuss global flags; it doesn't look deliberate.

Impact:
Scripts, wrappers and coding agents usually put global flags first (one hackathon repo wraps every call as stellar --quiet ...), and the error says the command doesn't exist, which reads as "plugin not installed". It becomes a common path once stellar contract bindings typescript is served by the JS SDK's plugin (#2758).

How we found it:
While reviewing the CLI plugin model for the HackMeridian 2026 tooling research (147 public hackathon repos), then reproduced with the 28.1.0 release binary on 1 November 2026. Example wrapper: LATCH scripts/testnet/bootstrap.mjs#L70-L72.

Outcome we're after:
A global flag placed before a plugin name doesn't stop the plugin from running, the same as for built-in commands. How to get there is up to the implementer.

Compatibility: Arguments after the plugin name keep reaching the plugin unchanged.

How to check:

  • stellar -q foo a b and stellar --quiet foo a b run stellar-foo.
  • A flag that takes a value, such as --config-dir <dir> foo, also runs the plugin.
  • stellar foo -q a behaves as today.

Related: #2014 (plugin subcommand lookup), #2758 (bindings plugin), #2343 (config and env precedence).

Langage dominant
Rust
Étoiles
129
Forks
153
Merge moyen
1 j 14 h
PR mergées (30 j)
11

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de stellar/stellar-cli

Toutes les issues de stellar/stellar-cli

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.