refactor(help): reorder by value, add per-command help, fit 80 columns - #28
Merged
Conversation
The help screen listed ACCOUNT -> DOCS -> TABS -> SETUP, which buried the product's purpose in third place and onboarding last, and it matched neither "what do I do first" nor "what do I do most". Within TABS the commands ran check -> push -> serve -> list, but the workflow is serve -> list -> check -> push. Reorder the groups by value (tabs lead) and move onboarding into a GETTING STARTED block at the foot, the split gh/docker use: the top of the screen stays useful for the returning user who just wants a command name, and the first-run path is still spelled out. Add a third help view. `values.help` short-circuited before dispatch, so `tabbrew tabs push --help` printed the entire global listing; resolve through findCommand first and render just that command. A new optional `details` field carries the caveat a one-line summary has no room for -- that `tabs push` cannot run anything, that `tabs serve` blocks, that `update` refuses in dev. Three command rows, ten flag summaries and six env rows ran past 80 columns and wrapped, which reads as broken output rather than a long sentence. Tighten them, encode the budget as SUMMARY_MAX, and pin it: registry.test.ts renders all three views and fails on any line over 80, alongside group integrity and findCommand's two-word precedence, which the dispatch change now depends on. In `help --all`, flags now indent under a bold command name instead of sitting at the same level as it, and CREDENTIALS becomes a FILES table that also names tabs.json. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Merged
colevels
added a commit
that referenced
this pull request
Jul 19, 2026
VERSION is read from package.json at compile time (ui.ts), so this bump is what makes `tabbrew update` see a newer build. Ships the reworked help (#28). Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Why
tabbrew --helplistedACCOUNT → DOCS → TABS → SETUP— the product's purpose buried in third place, onboarding last, matching neither what do I do first nor what do I do most. InsideTABSthe commands rancheck → push → serve → list, but the workflow isserve → list → check → push.Three other things were wrong once I looked:
src/index.ts:54short-circuited onvalues.helpbefore dispatch, sotabbrew tabs push --helpdumped the entire global listing. The registry already held every command's summary and flags — the data was there, unused.init's row was 89 chars,tabs check86, one flag summary 82, six env rows over. They wrap on a standard terminal, which reads as broken output rather than a long sentence.help --allhad no hierarchy —docs push:printed at the same indent as its own flags, so it didn't read as a heading.What changed
Groups ordered by value, onboarding moved to a footer — the split
gh/dockeruse. The top of the screen stays useful for the returning user who just wants a command name; the first-run path is still spelled out.A third help view.
--helpnow resolves throughfindCommandbefore dispatching, sotabbrew tabs push --helpandtabbrew help tabs pushprint one command. A new optionaldetailsfield onCommandSpeccarries the caveat a one-line summary has no room for:Bare
--help,help,help --all, and an unknown command all still fall through to the full listing.80 columns, enforced. Summaries tightened, the budget encoded as
SUMMARY_MAX, and the long form moved intodetailsso nothing is lost. Newsrc/registry.test.tsrenders all three views and fails on any line over 80 — plus group integrity andfindCommand's two-word precedence, which the dispatch change now depends on.help --all— flags indent under a bold command name;CREDENTIALSbecomes aFILEStable that also namestabs.json.Verification
bun run typecheckclean;bun test20 pass / 0 failNO_COLOR=1 … | awk '{print length}'tabbrew docs push --port 9still errors (theassertFlagsAllowedgate is intact),tabs list --jsonstill routes,--versionunchangedbun run build && ./dist/tabbrew tabs serve --help— verified through the compiled path, since help is bundled at compile timeNo behavior change outside help rendering: no new flags, no route changes,
registry.tsstill the single source of truth for all three views.🤖 Generated with Claude Code