CLI polish: help layout, security confirmations, error copy, ID value names, login onboarding (DX-5694)#31
Merged
Merged
Conversation
The auto-generated help/version flags rendered under a lone "Options" heading on every help screen, separate from the real global flags. Disable clap's built-ins and re-declare them as global args so they list with the rest of the globals. Behavior is unchanged: -h prints the summary, --help the long form, and -V works on subcommands via propagate_version.
Only 'security token delete' asked for confirmation; the other six remove verbs (referrer, ip, jwt, domain-mask, request-filter, ip-header) deleted protection rules immediately. All now use the mild confirmation: --yes skips, a TTY prompts, and non-TTY without --yes exits 5 before any request is sent. Prompts name the resource and endpoint. Adds 12 tests (with/without --yes per command, the latter asserting zero requests reach the mock).
"Quicknode API is having issues" assigned blame for what can be a
transient failure. Replace with a neutral message that keeps the HTTP
code for debugging and points at support:
"something went wrong (HTTP {code}). Please try again; if the problem
persists, contact support at https://support.quicknode.com."
Bare 'id' positionals rendered as a generic <ID> in usage lines. Every id positional now declares value_name — <ENDPOINT_ID>, <STREAM_ID>, <WEBHOOK_ID>, <TEAM_ID> — so 'qn endpoint show --help' reads 'Usage: qn endpoint show [OPTIONS] <ENDPOINT_ID>'. Multi-word fields (referrer_id, tag_id, …) already rendered descriptively. Documents the convention in CLAUDE.md.
The command jumped straight to a hidden key prompt with no context. Interactive logins now print a short welcome on stderr explaining that an API key is needed, where it will be stored, and where to get one (dashboard.quicknode.com/api-keys, quicknode.com/signup). Suppressed by --quiet; not shown when --api-key is passed.
The flag took a raw 0/1 integer. It now parses as a bool via clap's BoolishValueParser, so the documented form is true/false while 0/1 (and yes/no) keep working. The value still maps to the integer the streams API expects.
"Omit for now." read as a temporary instruction rather than "defaults to the current time". Now: "End time. Defaults to now."
'qn kv set ls' and 'qn kv list ls' were the only listings with 'ls' as the primary name. Renamed to 'list' with 'ls' as a visible alias, matching the convention everywhere else in the CLI. Both spellings keep working; existing tests invoke 'ls' and pass via the alias.
Scope the Homebrew install section to macOS, and shorten the authentication and environment sections: state where the key comes from and how to log in, without the extended design rationale.
AlejandroFabianCampos
approved these changes
Jun 12, 2026
Zlerp
approved these changes
Jun 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Batch of small UX fixes surfaced during manual use. One commit per item.
Linear: DX-5694
Changes
-h/--helpand-V/--versionnow list under "Global options" with the other global flags, instead of a lone "Options" section.endpoint security … removeverbs (referrer, ip, jwt, domain-mask, request-filter, ip-header) are now gated behind the mild confirmation —--yesskips, a TTY prompts, non-TTY without--yesexits 5 before any request is sent. Previously onlytoken deletewas gated. 12 new tests.<ENDPOINT_ID>,<STREAM_ID>,<WEBHOOK_ID>,<TEAM_ID>instead of a generic<ID>. Convention documented in CLAUDE.md.qn auth loginprints a short welcome with links to get an API key (dashboard.quicknode.com/api-keys) or sign up (quicknode.com/signup). Suppressed by--quiet.--fix-block-reorgs: documented form is nowtrue/false(boolish parser;0/1still accepted).usage … --tohelp "Omit for now." → "Defaults to now."kv set list/kv list listare the primary verbs withlsas visible alias, matching the rest of the CLI.Verified during triage, no change needed
target/; current source already has the corrected text.Testing
cargo test— all suites pass (13 new tests: 12 confirmation gating, 1 fix-block-reorgs parsing)cargo clippy --all-targets -- -D warnings,cargo fmt --check,cargo build --release— clean