Skip to content

CLI banner + NuGet auto-update; TUI migration to Terminal.Gui 2.0.1#34

Merged
perkops merged 8 commits into
mainfrom
feature/updates
May 1, 2026
Merged

CLI banner + NuGet auto-update; TUI migration to Terminal.Gui 2.0.1#34
perkops merged 8 commits into
mainfrom
feature/updates

Conversation

@perkops

@perkops perkops commented May 1, 2026

Copy link
Copy Markdown
Member

Summary

  • Migrate TUI to Terminal.Gui 2.0.1 with a custom Tabs view
  • Fix per-keystroke scroll lag on long YAML detail panes
  • Replace text header with 24-bit ANSI Braille startup banner
  • Add opportunistic NuGet update check with auto-update
  • Refresh analyzer rules and NuGet package versions

Changes

✨ Features

  • Add Braille ATC startup banner with Tool/Version/Docs rows
  • Skip banner when stdout is redirected (non-interactive)
  • Add NuGet update check on startup with 24h on-disk cache
  • Auto-run dotnet tool update -g atc-dsc on newer stable
  • Add --no-update-check CLI flag and env-var suppression
  • Auto-skip update check in CI (CI/TF_BUILD/GITHUB_ACTIONS)
  • Best-effort: HTTP/cache/process errors never crash the app
  • Advertise the new flag via WithExample on the list command

♻️ Refactoring

  • Migrate TabView to Tabs for Terminal.Gui v2.0.1 (PR #3808)
  • Replace v2.0.1 Tabs widget with custom DetailTabBarView
  • Mirror existing TopTabBarView pattern for click + arrow nav
  • Switch Extensions/Raw YAML from TextView to ColoredOutputView
  • Add internal topRow + Scroll(delta) on ColoredOutputView
  • Bypass Viewport setter + parent invalidation to fix scroll lag
  • Promote ExecuteAsync to protected override across commands
  • Switch sync WriteHeader() to await WriteHeaderAsync(ct)

🎨 Styling

  • Add Editable/ReadOnly visual roles to dark theme
  • Strip trailing newlines from project config files

📦 Dependencies

  • Update NuGet packages to latest versions
  • Update atc-coding-rules and analyzer package versions

Per Kops added 8 commits April 29, 2026 15:11
- Replace TabView/Tab with Tabs API per Terminal.Gui v2.0.1 (PR #3808)
- Set Title on each child view; select via tabs.Value instead of andSelect
- Replace SelectedTab?.View lookup with tabs.Value (already View?)
- Add DetailTabBarView: single-row click-to-switch tab strip with arrow/[]
  navigation hints. Mirrors the existing TopTabBarView pattern.
- Replace v2.0.1 Tabs widget with manual mount/unmount of detail content in
  detailContent. Tabs widget had focus-migration, z-order, and click hit-test
  issues that didn't converge.
- Replace TextView with ColoredOutputView for Extensions and Raw YAML.
  TextView.OnDrawingContent in v2.0.1 iterates all lines below Viewport.Y
  (no viewport-bottom break), and View.Viewport setter unconditionally
  invalidates layout — both visible as per-keystroke scroll lag on long YAML.
- Add internal topRow scroll state to ColoredOutputView with a Scroll(delta)
  method that calls only SetNeedsDraw on this view, bypassing the framework
  Viewport setter and parent adornment re-invalidation cascade.
- Add Editable/ReadOnly visual roles to dark theme so read-only views don't
  render as light-gray-on-dark.
Render a 24-bit ANSI Braille rasterisation of the ATC chevron logo plus
ATC block letters and a per-character gradient `atc-dsc` label, with
Tool/Version/Docs info rows. Banner prints only to interactive terminals
(skipped when stdout is redirected). Switches all 6 command entry points
from sync `WriteHeader()` to `await WriteHeaderAsync(ct)` and reads the
informational version from the assembly so the banner stays in sync with
the package version.
…eck flag

Check api.nuget.org/v3-flatcontainer for newer atc-dsc releases on
startup, with a 24h on-disk cache at %LOCALAPPDATA%\atc-dsc\update-check.json.
When a newer stable version is found, attempt `dotnet tool update -g
atc-dsc` (30s timeout) and print a cyan ℹ console notice; on failure
fall back to a manual-update hint. Best-effort throughout: any HTTP,
cache, or process error is swallowed and never crashes the app.

Suppression: `--no-update-check` CLI flag (preprocessed in Program.cs and
stripped before Spectre parses), `ATC_DSC_NO_UPDATE_CHECK=1` env var,
or auto-skip in CI (CI/TF_BUILD/GITHUB_ACTIONS). The flag is advertised
via a new WithExample on the list command.
@perkops perkops requested a review from davidkallesen May 1, 2026 07:01
@perkops perkops merged commit d623768 into main May 1, 2026
3 checks passed
@perkops perkops deleted the feature/updates branch May 1, 2026 07:02
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.

1 participant