A global flag before a plugin name makes the plugin unreachable

Aperta
#2,878 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
62/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
rust
Ambito
cli

Direzione di ricerca

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.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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).

Lingua principale
Rust
Stelle
129
Fork
153
Merge medio
1g 14h
PR unite (30g)
11

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di stellar/stellar-cli

Tutte le issue di stellar/stellar-cli

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.