feat: complete v1.2.0 Visual Progress phase 3 - #25
Merged
Conversation
Owner
Author
|
CI validation completed successfully: GitHub Actions run 30691803765. Passed: exact change classification; source and smoke validation; x64 Debug build/tests; x64 Release build/tests; unpackaged, Setup, and Portable distribution verification; current-user, all-users, and portable lifecycle tests; and the final ci-gate. The local-only gaps documented in the PR remain the manual human theme/DPI/high-contrast/Narrator matrix and local Inno Setup availability; CI covered the automated Setup and lifecycle work. The PR remains Draft and unmerged, with no tag, GitHub Release, or website change performed. |
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.
Summary
Completes Phase 3 of the winTerm 1.2.0 Visual Progress milestone:
Related issues
N/A — v1.2.0 release-preparation milestone work.
Detailed changes
Stable settings and defaults
{ "visualProgress.enabled": true, "visualProgress.recognizeCliProgress": true, "visualProgress.performanceMode": "automatic", "visualProgress.replaceRecognizedOutput": false }The settings are exposed under Settings → Appearance → Visual progress, participate in search and localization, apply to open panes, and preserve dependent saved values when the master or recognition setting is disabled.
WINTERM_DISABLE_VISUAL_PROGRESS=1remains the authoritative emergency override.Progress ownership and replacement safety
Progress ownership remains within the normalized per-pane architecture:
Lower-priority sources cannot overwrite a valid higher-priority owner. Split, detach, collapse, reload, focus, visibility, and provider-transfer paths preserve or safely rehydrate current state.
Recognized-output replacement remains off by default. When explicitly enabled, only high-confidence, self-contained transient frames from pip, Git, curl, or wget are eligible. Newline logs, prompts, warnings, errors, summaries, alternate-screen output, malformed or fragmented input, contention, stale generations, overflow, renderer unavailability, and uncertain records all fail open and preserve the original bytes. Docker, BuildKit, package managers, build tools, and generic recognition remain overlay-only.
Adaptive performance and lifecycle
Renderer faults revoke replacement immediately, release resources through a reentrancy-safe deferred lifecycle, and leave PTY, input, output, selection, copy/paste, and pane management unaffected.
Accessibility and privacy
The overlay exposes localized UI Automation
ProgressBarsemantics using Command progress. Determinate providers expose only real 0–100 values; indeterminate progress remains nonnumeric. Announcements are limited to the active visible pane, cover start, 25/50/75/100-percent milestones, waiting, and one terminal result, and use a four-second nonterminal throttle with duplicate/background suppression.Recognition remains local, incremental, bounded, and in memory over newly arriving output. It does not scan scrollback, upload or persist terminal content, add Visual Progress telemetry, or retain command text, provider/package names, paths, URLs, usernames, hostnames, environment variables, credentials, or clipboard data.
Versioning and compatibility
Application/module metadata is now 1.2.0, Windows/package file metadata is 1.2.0.0, the channel remains stable, and the expected future tag is
v1.2.0.Workspace schema 2, docking model 1, shell protocol 1, theme schema 1, update-manifest schema 1, package identity, executable alias, application-data isolation, and Microsoft Terminal coexistence remain unchanged. Existing settings and workspaces require no migration.
Validation performed
Environment: Windows 11 x64, local repository checkout.
.\scripts\winterm\build.ps1 -Configuration Release -Platform x64 -IncludeTests.\scripts\winterm\test.ps1 -Suite Relevant -Configuration Release -Platform x64.\scripts\winterm\build.ps1 -Configuration Debug -Platform x64 -IncludeTests.\scripts\winterm\test.ps1 -Suite Relevant -Configuration Debug -Platform x64.\scripts\winterm\test-visual-progress.ps1 -SourceOnlygit diff --checkConvertFrom-Json, and XML parsing over changed files.\scripts\winterm\build-unpackaged.ps1 -Configuration Release -Platform x64 -OutputDirectory .\artifacts\phase3-validation\stage-x64 -Force.\scripts\winterm\build-portable.ps1 -Version 1.2.0 -Platform x64 -StageDirectory .\artifacts\phase3-validation\stage-x64 -OutputDirectory .\artifacts\phase3-validation\release -SkipBuild -Force.\scripts\winterm\test-portable.ps1 -PortablePath .\artifacts\phase3-validation\release\winTerm-1.2.0-portable-x64.zip -Platform x64 -Version 1.2.0 -RunLaunchGet-FileHashwith SHA2565929CC8302FE65054979B69D4776E278274D4160E0A1750DCC05B0D718012B15An initial 30-minute outer command timeout interrupted the first Release orchestration while SettingsModel was still compiling, without a compiler or test diagnostic. Its verified orphan processes were stopped, and the same unchanged build then completed successfully in the terminal as recorded above.
Bounded Portable soak
The workload ran inside a fresh extraction of the final Portable ZIP through a completion-sentinel and process-metrics harness.
Single stream:
.\scripts\winterm\invoke-visual-progress-smoke.ps1 -DelayMilliseconds 1 -SoakIterations 10000A phased steady-state run used the same script four times with
-SoakIterations 2500in one Portable host, for 10,000 total iterations:PASS in 167.21 s. Inclusive observed peaks were 145.81 MB working set, 102.55 MB private bytes, and 2,089 handles. Phase 1 → 4 deltas were +0.09 MB working set, +2.48 MB private bytes, and -11 handles; no monotonic handle or working-set leak was observed.
Local gaps and CI expectations
ci-gate.This PR does not merge itself, create or push
v1.2.0, create a GitHub Release, or changewinterm.dev/winterm-site.Checklist
winterm.exe, and Microsoft Terminal coexistence remain isolated.