Repository navigation
Show live per-app progress in the CLI and colour the preview report - #31
Merged
Merged
Conversation
`preview` / `upgrade` were silent for the whole run — on a ~50-column
terminal even a one-line spinner lost the app name and step. They now
draw a progress board on stderr (only when it's a TTY): one row per app
with its current analysis step, download progress in MB for
--fetch/upgrade, and each app's result as it finishes; the board erases
itself before the report prints. Rows never wrap: the version column is
dropped first on a narrow terminal, and finished rows hide behind an
"… +N more" line when there are more apps than screen rows.
- `ProgressBoard` (CLIKit) is the pure layout, unit-tested; markers and
colours match the interactive browser's list.
- `StatusBoard` (CLI) is the stderr driver and replaces `Spinner`; the
one-shot audit uses it too ("Analyzing X — checking code signature").
- The TUI's detail pane shows the analyzer's step under "Analyzing …",
so a slow app no longer looks stuck.
- `HomebrewCaskInventory.outdatedScan` and
`CaskArtifactFetcher.withDownloadedApp` report progress; brew's
`<cache>.incomplete` file gives the bytes downloaded so far.
- The preview/upgrade report is coloured like `audit` (tier on the
headline, severity tags, ✓/⚠ markers, red `held:`), shows cask
versions without brew's build hash (JSON keeps the full string), and
takes `--no-color` (NO_COLOR honoured); completion tables updated.
Piped output and --json are byte-for-byte unchanged.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
adamXbot
added a commit
that referenced
this pull request
Oct 12, 2026
Bump MARKETING_VERSION to 0.2.2 and add the release notes for the CLI progress board, coloured preview/upgrade report and --no-color (#31). Co-Authored-By: Claude Opus 5.5 <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
privacycommand preview/upgradegave no feedback while they worked — the only sign of life was network activity. A one-line spinner didn't fix it: on a 50-column terminal panel it was cut down toAnalyzing 6 installed apps — 0 of 6 done…, losing the app name and step.What changes
Live progress board (terminal only).
previewandupgradedraw a board on stderr: one row per app with marker, name, version and current step, plus a footer with the spinner, a done count and elapsed time. With--fetch/upgradethe rows continue through↓ downloading — 4.6 MB so far,opening the download,analyzing the new build — <step>and the outcome (✓ no privacy-relevant changes/⚠ 3 changes · risk 14 → 22). The board erases itself before the report prints.·queued,~working,↓downloading,✓clean,⚠noteworthy,✗failed,–skipped).… +N more (k done, j queued).ProgressBoard(CLIKit) is the pure layout with 8 unit tests;StatusBoard(CLI) is the stderr driver and replacesSpinner.swift. The one-shotaudituses it too.logprints notes above the board so they never land mid-frame.Report. Coloured like
audit(tier colour on the headline,[error]/[warn]tags, ✓/⚠ markers, redheld:), cask versions shown without brew's build hash (3.23.12 → 3.24.9, not3.23.12,2d29876d…; JSON keeps the full string).--no-coloradded topreviewandupgrade(honoursNO_COLOR); completion tables updated.TUI. The analyzer's step is shown under "Analyzing …" in the detail pane (a second inbox from the worker to the main loop), so a slow app no longer looks stuck.
Core.
HomebrewCaskInventory.outdatedScan(progress:)andCaskArtifactFetcher.withDownloadedApp(progress:)report their phases;partialFile(for:)names brew's<cache>.incompletedownload file, which gives the bytes so far.Piped output and
--jsonare byte-for-byte unchanged.Testing
just checkpasses;--tui-selftestpasses.preview(6 casks) andupgrade iterm2(download → analyze → diff), board cleared and report printed cleanly beneath.preview iterm2 nosuchcask > out 2> err: stderr holds only the note, stdout has no escape codes;--jsonparses.🤖 Generated with Claude Code