Fix terminal UI/UX consistency audit (#7)#8
Merged
Conversation
Address all findings from the terminal output audit:
High
- H1: unify error rendering. Commander parse errors now route through
formatCliError ([Error] + prelude) via exitOverride/configureOutput
instead of a lowercase `error:` + usage dump; worker errors gain the
[Error] label.
- H2: wide-character-safe `list` table. New src/util/textWidth.ts measures
display width (east-asian-width aware), truncates by code point so
surrogate-pair emoji aren't split, and sanitizes control chars/newlines
so a task stays on one row.
- H3: `list --verbose` now includes the Due in countdown.
Medium
- M1: consistent empty-state labeling ([Info] No pending jobs. / No jobs.).
- M2: dry-run lists commands under `Commands:` (not `Tasks:`) and
--dry-run --json now includes a `commands` array.
- M3: parallel cancel states share one phrasing ("already <state>;
nothing to cancel.").
- M4: near-miss subcommands (e.g. `lst`) suggest the real command.
- M5: reconcile help vs README copy/punctuation; restore "local" in the
program description.
Low
- L1: `[Dry-run]` single-token label.
- L2: sentence-case table headers, aligned with verbose labels.
- L3: add a task/job/agent glossary to the README.
- L4: group large second-counts with separators (toLocaleString).
- L5: imminent schedules render "to run now" instead of "0 seconds (0 seconds)".
- L6: message preview keeps a first-task floor so a huge task count can't
collapse it to a bare ellipsis.
Replace the scattered [Error]/[Info]/[Success]/[Dry-run] string literals across errors, cli, adapter, time parsers, and command modules with a single Label enum in src/labels.ts, so the output vocabulary has one source of truth.
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.
Fixes #7.
Addresses every checkbox in the terminal UI/UX consistency audit. All changes verified by running the built CLI and with new/updated tests (87 passing).
High
formatCliError([Error]+ parody prelude) viaexitOverride/configureOutput, replacing the lowercaseerror:+ usage dump. Worker errors gain the[Error]label. Help/version still exit 0 cleanly.listtable. Newsrc/util/textWidth.tsmeasures display width (East-Asian-width aware), truncates by code point (no split surrogate-pair emoji), and sanitizes control chars/newlines so a task stays on one row. Applied to both the compact table and verbose- <task>lines.list --verboseincludesDue in.Medium
[Info] No pending jobs./[Info] No jobs.Commands:(wasTasks:);--dry-run --jsonnow includes acommandsarray.Job <id> already <state>; nothing to cancel.lst→list) are detected and suggested instead of failing withInvalid delay.localrestored in the program description.Low
[Dry-run]single-token label.86,400 seconds).to run nowinstead ofrun in 0 seconds (0 seconds).….Testing
npx vitest run→ 87 passing (new coverage for wide-char alignment, newline collapsing, verboseDue in, preview floor, empty-state label, dry-runcommands,to run now, grouped seconds, subcommand suggestion, unified parse-error format).