Skip to content

feat(cli): show the voltage wordmark after a terminal login - #106

Merged
thebrandonlucas merged 1 commit into
feat/cli-look-06-brandfrom
feat/cli-look-07-wordmark
Oct 23, 2026
Merged

thebrandonlucas merged 1 commit into
feat/cli-look-06-brandfrom
feat/cli-look-07-wordmark

Conversation

@thebrandonlucas

@thebrandonlucas thebrandonlucas commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Stack position: 7 of 13 in the look-and-feel stack. Base: feat/cli-look-06-brand (#105), whose brand color this uses.

Problem

Signing in is the first moment a person spends with the CLI, and it ended on a plain line. Nothing on the terminal said "Voltage".

Behavior

After a successful voltage login on an interactive stderr:

    __              ____
   / /   _  _____  / / /____ ____ ____
  / /_  | |/ / _ \/ / __/ _ `/ _ `/ -_)
 /_  /  |___/\___/_/\__/\_,_/\_, /\__/
   //                       /___/

✓ Logged in as you@example.com (account: me)
  • A lightning bolt in bold yellow beside the name in figlet's smslant font. ASCII only, so every font draws it; five lines, 39 columns wide.
  • The name is in Voltage orange at the terminal's depth (24-bit, 256-color, or bold), from feat(cli): color help headers Voltage orange and honor FORCE_COLOR #105. The bolt uses a Bolt role that is decoration only, never a status.
  • Left out on a terminal narrower than 40 columns (it would wrap), with --quiet, and when stderr is redirected. Never on stdout.
  • PR 13 reuses it for the greeting on bare voltage.

Try it on staging

Setup: Try a pull request on staging (added by #97).

voltage login --account me --credential-store file

Expect: after you approve in the browser, the yellow bolt and orange wordmark, then ✓ Logged in as ….

COLUMNS=39 voltage login --account me --credential-store file
voltage login --account me --credential-store file -q
voltage login --account me --credential-store file 2>&1 | cat

Expect: no wordmark in any of them. The first still shows ✓ Logged in as. The second hides that line too. The third prints the old plain lines.

Validation

  • cargo fmt --check, cargo clippy --locked --all-targets -- -D warnings, cargo machete --with-metadata, cargo test --locked (158 unit and 126 integration tests), and python3 scripts/check-coverage.py all pass.
  • Unit tests check that the bolt and name are ASCII, that the bolt lines share one width, that the name has no trailing spaces, and that both fit the width. They also check the narrow-terminal rule (unknown width shows it, 40 shows it, 39 leaves it out), and that each line is a yellow bolt then the name in the 256-color brand color, followed by a blank line.
  • The device-login PTY test now checks that the bolt and wordmark sit directly above ✓ Logged in as, and that the first line has the exact bolt and brand escape sequences.
  • CRAP: 0 of 717 measured functions at or above 20. The highest is 18.00 (src/cli.rs endpoint, untouched).

Docs

docs/guides/login-and-profiles.md and CHANGELOG.md.

tee8z
tee8z previously approved these changes Oct 22, 2026

@tee8z tee8z left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved 01ff3ef against feat/cli-look-06-brand (#105 80f0dec). The wordmark goes only to stderr, and only when stderr is a terminal. It is hidden with --quiet through notice_line. It is 39 ASCII columns, and the 40-column fits gate handles COLUMNS. Only static text is drawn, and anstream strips the color with NO_COLOR or TERM=dumb.

Nonblocking: the CHANGELOG line, "a lightning bolt beside the name in Voltage orange", reads as if the bolt is orange, but the code paints it yellow (Role::Bolt), as the guide correctly says. No terminal test covers --quiet hiding the wordmark.

Validation on this head, in nix develop: cargo fmt --check, cargo clippy --locked --all-targets -- -D warnings, cargo machete --with-metadata, cargo test --locked (158 unit, 126 integration) and python3 scripts/check-coverage.py passed. The CRAP report did not finish: its instrumented run hit the known flaky #75 terminal test (a_profile_saved_after_login_keeps_changes_made_while_its_prompt_was_open), which #104 addresses. CI has not run on this head. The stack also needs a rebase onto master.

A successful voltage login on an interactive stderr shows a five-line ASCII
wordmark above "Logged in as": a yellow lightning bolt beside the name in
figlet's smslant font, in Voltage orange. It is left out on a terminal
narrower than 40 columns, with --quiet, and when stderr is redirected.
@thebrandonlucas
thebrandonlucas force-pushed the feat/cli-look-07-wordmark branch from ddfe16f to 4e764c3 Compare October 23, 2026 12:38

@tee8z tee8z left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-approved 4e764c3, a rebase onto #105 73ba6b3. The code matches 01ff3ef, which I approved; only the login guide's sentence changed, picking up #96's countdown wording. Validation on this head, in nix develop: cargo fmt --check, cargo clippy --locked --all-targets -- -D warnings, cargo machete --with-metadata, cargo test --locked (172 unit, 133 integration) and python3 scripts/check-coverage.py passed. CRAP: 750 measured functions, none at or above 20, highest wait_for_payment at 17.05. CRAP passed on its second run, after a pseudo-terminal timeout on the first (#104). CI is green. This also closes the gap from my earlier approval, which had no finished CRAP report.

@thebrandonlucas
thebrandonlucas merged commit dd58e7a into master Oct 23, 2026
7 checks passed
@thebrandonlucas
thebrandonlucas deleted the feat/cli-look-07-wordmark branch October 23, 2026 15:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants