Progress indication for long operations
Why it matters
A CLI that sits silent for ten seconds during a deploy looks frozen. Users hit Ctrl+C, corrupt state, and open a support ticket. Progress indicators on stderr — spinners, counters, bars — tell the user the tool is alive without polluting stdout for scripts. Writing spinners to stdout is the opposite failure: mytool deploy | tee log captures terminal control sequences into the log file, and every subsequent cat log flickers the terminal.
Severity rationale
Low because missing progress indication is a UX annoyance but does not cause data loss or failed operations.
Remediation
Wrap operations over two seconds (network calls, installs, file scans) with a spinner or progress bar routed to stderr, and suppress when !process.stderr.isTTY. In src/cli/commands/deploy.ts:
import ora from 'ora'
const spinner = ora({ text: 'Deploying...', stream: process.stderr }).start()
try { await deploy(); spinner.succeed('Deployed') }
catch (e) { spinner.fail('Failed'); throw e }
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the CLI Quality Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
Taxons
History
- 2026-04-18·v1.0.0·Initial import from cli-quality·automated