diff --git a/CHANGELOG.md b/CHANGELOG.md index eda08f5d8..d073bf485 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## 1.3.0-beta1 - 2026-08-04 + +First beta of the Command Timeline release. The feature content is identical +to 1.3.0-alpha4, which passed local field testing; this release advances the +channel from `alpha` to `beta`. The beta is published as a GitHub prerelease +and is listed on the winTerm website next to the stable download. GitHub +Latest and WinGet continue to point at v1.2.0 until a stable 1.3.0. + +### Changed + +- Advanced the channel to `beta`: application version `1.3.0-beta1`, + package/file version `1.3.0.4`, PowerShell module `1.3.0` with prerelease + suffix `beta1`. +- Updated the README to cover the Command Timeline and automatic PowerShell + shell integration, and to present the stable and beta download channels. + + ## 1.3.0-alpha4 - 2026-08-04 Fourth alpha prerelease: fixes for the three alpha3 field reports. Like the diff --git a/README.md b/README.md index ba1c24589..21773f53c 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,18 @@ [![Windows CI](https://img.shields.io/github/actions/workflow/status/HelloThisWorld/winTerm/winterm-validation.yml?branch=main&label=Windows%20CI)](https://github.com/HelloThisWorld/winTerm/actions/workflows/winterm-validation.yml) [![Latest release](https://img.shields.io/github/v/release/HelloThisWorld/winTerm?display_name=tag&label=release)](https://github.com/HelloThisWorld/winTerm/releases/latest) -## Download the latest winTerm release +## Download winTerm -[**Open the latest release and download winTerm for x64**](https://github.com/HelloThisWorld/winTerm/releases/latest) +[**Open the latest stable release and download winTerm for x64**](https://github.com/HelloThisWorld/winTerm/releases/latest) -The latest Release page provides the Setup EXE, Portable ZIP, release notes, -and checksums together. +The latest stable Release page provides the Setup EXE, Portable ZIP, release +notes, and checksums together. + +A **beta** channel is also available for early access to the Command +Timeline: +[v1.3.0-beta1](https://github.com/HelloThisWorld/winTerm/releases/tag/v1.3.0-beta1) +is published as a GitHub prerelease with the same asset layout. Betas are for +testing; the stable release above stays the recommended download. The installer is unsigned, so Windows may display Unknown Publisher or a SmartScreen warning. Download only from the official release above and verify @@ -29,7 +35,8 @@ application downloads are: - `winTerm--setup-x64.exe` — current-user or all-users installation; - `winTerm--portable-x64.zip` — extract and run without installation. -The current source version is `1.2.0`. See the +The current source version is `1.3.0-beta1`; +the latest stable release is `1.2.0`. See the [latest official Release](https://github.com/HelloThisWorld/winTerm/releases/latest) for the complete published asset list and checksums. @@ -43,6 +50,16 @@ See [installation guidance](docs/user/installation.md) and the ## Core features +- a per-pane **Command Timeline** (`Ctrl+Tab`, or the thin handle on the + terminal's left edge): an in-memory list of the commands that pane has run, + built from OSC 133 shell integration only, with load-without-executing onto + the input line, literal case-insensitive filtering, copy command/output, + jump to output, and trustworthy ✓/✕/Running status that never guesses; +- automatic PowerShell shell integration: a bare `powershell.exe` or + `pwsh.exe` profile imports the packaged `winTerm.Shell` module at startup + (per-profile setting `"shellIntegration.autoInject"`, default on), so + command marks work out of the box; customized commandlines are never + rewritten, and `cmd.exe` is never guessed at; - Top, Bottom, Left, and Right splits relative to the focused pane, retaining profile selection and transactional rollback; - border-drag pane resizing with continuous updates, minimum-size constraints, @@ -87,8 +104,8 @@ Use PowerShell 7 and the Microsoft Terminal toolchain described in .\scripts\winterm\build.ps1 -Configuration Release -Platform x64 -IncludeTests .\scripts\winterm\test.ps1 -Suite Relevant -Configuration Release -Platform x64 .\scripts\winterm\build-unpackaged.ps1 -Configuration Release -Platform x64 -.\scripts\winterm\build-installer.ps1 -Version 1.2.0 -Platform x64 -.\scripts\winterm\build-portable.ps1 -Version 1.2.0 -Platform x64 +.\scripts\winterm\build-installer.ps1 -Version 1.3.0-beta1 -Platform x64 +.\scripts\winterm\build-portable.ps1 -Version 1.3.0-beta1 -Platform x64 ``` The unpackaged generator uses an unsigned MSIX only as an upstream build diff --git a/docs/current-progress.md b/docs/current-progress.md index c19215ea3..8f7449465 100644 --- a/docs/current-progress.md +++ b/docs/current-progress.md @@ -4,24 +4,25 @@ Last updated: 2026-08-04 ## Repository state -- Branch: `release/v1.3.0-alpha4` -- Base branch: `main` at `49ee5eb3` (alpha3 field-report fixes, pull - request #36) +- Branch: `release/v1.3.0-beta1` +- Base branch: `main` at `c089caeb` (1.3.0-alpha4 release metadata, pull + request #37) - Microsoft Terminal upstream revision: `1cea42d433253d95c4487a3037db48197b5e72f4` -- Application version: `1.3.0-alpha4` -- Package/file version: `1.3.0.3` -- PowerShell module version: `1.3.0` with prerelease suffix `alpha4` -- Release channel: `alpha` -- Release tag: `v1.3.0-alpha4` +- Application version: `1.3.0-beta1` +- Package/file version: `1.3.0.4` +- PowerShell module version: `1.3.0` with prerelease suffix `beta1` +- Release channel: `beta` +- Release tag: `v1.3.0-beta1` - Current public Latest: `v1.2.0`, the stable Visual Progress release - Supported target: Windows 11 x64 -`v1.3.0-alpha4` follows `v1.3.0-alpha3` as a GitHub **prerelease** for local -testing, carrying the three alpha3 field-report fixes. The release workflow marks any -non-stable channel with `--prerelease` and `--latest=false`, so -`/releases/latest` keeps resolving to v1.2.0. The alpha is deliberately not -listed on the winTerm website and is skipped by the WinGet workflow. +`v1.3.0-beta1` is the first beta of the Command Timeline release, with +feature content identical to `v1.3.0-alpha4`, which passed local field +testing. The release workflow marks any non-stable channel with +`--prerelease` and `--latest=false`, so `/releases/latest` keeps resolving to +v1.2.0. Unlike the alphas, the beta is listed on the winTerm website next to +the stable v1.2.0 download; it is still skipped by the WinGet workflow. ## Command Timeline status @@ -106,10 +107,9 @@ through pull request #32: ## Next steps -1. Install `v1.3.0-alpha4` locally and re-test the three fixes. -2. Cut `v1.3.0-beta1` on channel `beta` once alpha4 passes local testing. The - beta may be listed on the winTerm website alongside the stable v1.2.0 - download. +1. Update the winTerm website: dual stable/beta download columns, refreshed + sanitized screenshots, the Tools navigation dropdown, and the logo link. +2. Collect beta feedback. 3. Promote to a stable `v1.3.0` only after beta testing, which is the point at which Latest, WinGet, and the website stable slot move. diff --git a/docs/releases/1.3.0-beta1.md b/docs/releases/1.3.0-beta1.md new file mode 100644 index 000000000..71f30b352 --- /dev/null +++ b/docs/releases/1.3.0-beta1.md @@ -0,0 +1,163 @@ +# winTerm 1.3.0-beta1 + +**This is a beta prerelease.** The current stable release remains +[v1.2.0](https://github.com/HelloThisWorld/winTerm/releases/tag/v1.2.0), and +`/releases/latest` continues to point there. The beta is listed on the winTerm +website next to the stable download and is published as a GitHub prerelease; +it is not submitted to WinGet. + +winTerm 1.3.0-beta1 delivers the **Command Timeline**. Its feature content is +identical to 1.3.0-alpha4, which passed local field testing across four alpha +rounds; this release advances the channel to beta. + +## What is new since v1.2.0: Command Timeline + +The Command Timeline is a per-pane, in-memory list of the commands that pane +has run. Open it with `Ctrl+Tab`, or with the thin auto-hiding handle on the +left edge of the terminal; click the terminal, press `Escape`, or press +`Ctrl+Tab` again to close it. + +- **Per-pane history.** Each pane keeps its own list, built from OSC 133 + shell integration only. winTerm never guesses where a prompt or output + begins, and `cmd.exe` — which does not report command boundaries — shows + `Command timeline unavailable` rather than untrustworthy results. +- **Works out of the box.** A profile whose commandline is a bare + `powershell.exe` or `pwsh.exe` (optionally with `-NoLogo`/`-NoExit`) + automatically imports the packaged `winTerm.Shell` integration module at + startup. Any customized commandline launches unchanged; the per-profile + setting `"shellIntegration.autoInject": false` turns the rewrite off. +- **Load without executing.** `Enter` or a single click puts the selected + command on the input line and stops there. No carriage return is ever sent, + the Windows clipboard is never read, and input broadcast never forwards the + load to another pane. +- **Filtering.** Press `/` or `Tab` and type to narrow the list. Matching is + a plain, case-insensitive substring match over command text only — no + wildcards, no regular expressions, no fuzzy matching, and command output is + never searched. +- **Copy and jump.** Right-click an entry to copy the command, copy its + output, or scroll to where its output begins. Output is read from the + terminal buffer only at that moment and is never cached. +- **Trustworthy status.** A command shows ● Running while it executes and + resolves to ✓ Succeeded or ✕ Failed when the shell reports its exit code. + `Unknown` appears only when the shell genuinely did not report a result, + and explains itself on hover. Status is never conveyed by color alone. +- **Readable rows.** Hover any row for the full command text; the selection + moves without rebuilding rows, so the list stays steady under the arrow + keys. + +## Keyboard + +| Shortcut | Behavior | +| --- | --- | +| `Ctrl+Tab` | Toggle the Command Timeline for the focused pane | +| `Ctrl+T` | Next tab | +| `Ctrl+Shift+T` | Previous tab | +| `Ctrl+Alt+T` | Open new tab | + +While the Timeline is open: + +| Key | Behavior | +| --- | --- | +| `/` or `Tab` | Move focus to the filter box | +| `Up` / `Down` | Move the selection by one command | +| `Left` / `Right` | Select the first / last command on the current page | +| `Enter` | Load the selected command; never runs it | +| `Space` | Scroll the terminal to that command's output | +| `Ctrl+C` | Copy the selected command text | +| `Escape` | Clear the filter, or close the Timeline if the filter is empty | + +Your own key bindings take precedence over every default above. Keys the +Timeline consumes are not sent to the shell, and filter text never reaches +the shell. + +## Settings + +```json +{ + "commandTimeline.enabled": true, + "commandTimeline.historyLimit": 500 +} +``` + +Per profile: + +```json +{ + "shellIntegration.autoInject": true +} +``` + +- **Show command timeline** defaults on. Turning it off hides the handle, + closes an open overlay, and stops `Ctrl+Tab` from opening it. +- **Commands remembered per pane** defaults to 500 and accepts 50 through + 5000. An out-of-range value is clamped rather than failing the settings + load. + +An existing settings file needs no migration. + +## Changes accumulated through the alpha series + +- alpha2: auto-injected shell integration, the auto-hiding handle, + terminal-click light dismiss, and the recognition-engine fixes for stuck + progress bars. +- alpha3: correct FinalTerm mark emission (no stray characters, exact command + capture), no progress bar at an idle prompt, no phantom Timeline row, no + selection jitter, and silent degradation when antivirus blocks an optional + module component. +- alpha4: the antivirus write-then-execute false positive removed at its + source, ✓/✕ results restored through the Enter-keypress lifecycle + notification, and full-command tooltips. + +## Privacy + +- Command text lives only in memory, only in the pane that ran it, and only + while that pane is open. Nothing is written to disk; there is no command + history file or database. +- Command output is never cached, indexed, or searched. +- Filter text is never saved and never leaves the pane. +- No telemetry is written, and no command, output, path, or filter text is + logged. +- The clipboard is written only by an explicit copy action, and is never + read. + +See the [privacy policy](https://github.com/HelloThisWorld/winTerm/blob/main/PRIVACY.md). + +## Unchanged in this release + +Workspace schema (2), docking model (1), shell protocol (1), theme schema +(1), update manifest schema (1), package identity, and signing policy are all +unchanged from v1.2.0. Visual Progress behavior is unchanged apart from the +recognition fixes above. + +## Known limitations + +- The Timeline requires OSC 133 shell integration; it stays unavailable under + `cmd.exe`. +- A multi-line command is refused when the shell has not enabled bracketed + paste, because unbracketed line breaks would be read as pressing Enter. +- Loading a command longer than 1024 characters asks for a confirming + `Enter`. +- Command history does not survive closing a pane, and is intentionally never + persisted. + +## Installation + +The Setup EXE supports current-user and all-users installation; the Portable +ZIP can be extracted to a writable directory and run without installation. +Installing the beta over v1.2.0 or an alpha is supported; the file version is +`1.3.0.4`. Package identity stays separate from Microsoft Terminal, so it +does not disturb an existing Windows Terminal installation. + +Publisher: `helloThisWorld`. Tag: `v1.3.0-beta1`. + +## Signing + +The winTerm 1.3.0-beta1 Setup EXE is not Authenticode-signed. Windows may +display Unknown Publisher or a SmartScreen warning. Download only from the +official GitHub Release and verify the file against `SHA256SUMS.txt` before +running it. + +## Policies + +- [Code signing policy](https://github.com/HelloThisWorld/winTerm/blob/main/CODE_SIGNING_POLICY.md) +- [Privacy policy](https://github.com/HelloThisWorld/winTerm/blob/main/PRIVACY.md) diff --git a/scripts/winterm/package-shell-assets.ps1 b/scripts/winterm/package-shell-assets.ps1 index 31d9d0cbd..e653affd1 100644 --- a/scripts/winterm/package-shell-assets.ps1 +++ b/scripts/winterm/package-shell-assets.ps1 @@ -33,8 +33,8 @@ foreach ($relativePath in $sourceAssets) $version = Get-Content -LiteralPath (Join-Path $repositoryRoot 'shell\shared\version.json') -Raw | ConvertFrom-Json if ($version.moduleVersion -ne '1.3.0' -or - $version.modulePrerelease -ne 'alpha4' -or - $version.applicationVersion -ne '1.3.0-alpha4' -or + $version.modulePrerelease -ne 'beta1' -or + $version.applicationVersion -ne '1.3.0-beta1' -or $version.protocolVersion -ne 1) { throw 'The winTerm Shell asset version metadata is invalid.' diff --git a/scripts/winterm/test-visual-progress.ps1 b/scripts/winterm/test-visual-progress.ps1 index 4a87c8a9c..b707b9d9b 100644 --- a/scripts/winterm/test-visual-progress.ps1 +++ b/scripts/winterm/test-visual-progress.ps1 @@ -1378,12 +1378,12 @@ try $version = $source.VersionMetadata | ConvertFrom-Json $expectedVersionValues = [ordered]@{ - applicationVersion = '1.3.0-alpha4' - packageVersion = '1.3.0.3' + applicationVersion = '1.3.0-beta1' + packageVersion = '1.3.0.4' moduleVersion = '1.3.0' - modulePrerelease = 'alpha4' - channel = 'alpha' - tag = 'v1.3.0-alpha4' + modulePrerelease = 'beta1' + channel = 'beta' + tag = 'v1.3.0-beta1' workspaceSchemaVersion = 2 dockingModelVersion = 1 shellProtocolVersion = 1 @@ -1398,39 +1398,39 @@ try } } $shellVersion = $source.ShellVersion | ConvertFrom-Json - if ($shellVersion.applicationVersion -ne '1.3.0-alpha4' -or $shellVersion.moduleVersion -ne '1.3.0' -or $shellVersion.protocolVersion -ne 1) + if ($shellVersion.applicationVersion -ne '1.3.0-beta1' -or $shellVersion.moduleVersion -ne '1.3.0' -or $shellVersion.protocolVersion -ne 1) { - throw 'Shell version metadata does not match winTerm release 1.3.0-alpha4 with protocol version 1.' + throw 'Shell version metadata does not match winTerm release 1.3.0-beta1 with protocol version 1.' } foreach ($surface in @( - @{ Content = $source.ReleaseMetadata; Value = 'ApplicationVersion{ L"1.3.0-alpha4" }'; Description = 'About release metadata' }, - @{ Content = $source.PackageManifest; Value = 'Version="1.3.0.3"'; Description = 'MSIX package manifest' }, - @{ Content = $source.HostResource; Value = 'FILEVERSION 1,3,0,3'; Description = 'Terminal host file version' }, - @{ Content = $source.HostResource; Value = '"ProductVersion", "1.3.0-alpha4\0"'; Description = 'Terminal host display version' }, - @{ Content = $source.ShimResource; Value = 'FILEVERSION 1,3,0,3'; Description = 'Shim file version' }, - @{ Content = $source.ShimResource; Value = '"ProductVersion", "1.3.0-alpha4\0"'; Description = 'Shim display version' }, + @{ Content = $source.ReleaseMetadata; Value = 'ApplicationVersion{ L"1.3.0-beta1" }'; Description = 'About release metadata' }, + @{ Content = $source.PackageManifest; Value = 'Version="1.3.0.4"'; Description = 'MSIX package manifest' }, + @{ Content = $source.HostResource; Value = 'FILEVERSION 1,3,0,4'; Description = 'Terminal host file version' }, + @{ Content = $source.HostResource; Value = '"ProductVersion", "1.3.0-beta1\0"'; Description = 'Terminal host display version' }, + @{ Content = $source.ShimResource; Value = 'FILEVERSION 1,3,0,4'; Description = 'Shim file version' }, + @{ Content = $source.ShimResource; Value = '"ProductVersion", "1.3.0-beta1\0"'; Description = 'Shim display version' }, @{ Content = $source.CustomProps; Value = '1'; Description = 'Executable major version' }, @{ Content = $source.CustomProps; Value = '3'; Description = 'Executable minor version' }, @{ Content = $source.ShellModuleManifest; Value = "ModuleVersion = '1.3.0'"; Description = 'PowerShell module manifest' }, @{ Content = $source.ShellModule; Value = "`$script:WinTermModuleVersion = '1.3.0'"; Description = 'PowerShell module runtime' }, @{ Content = $source.PackageShellAssets; Value = "'shell\shared\version.json'"; Description = 'Canonical shell version metadata packaging' }, - @{ Content = $source.WorkspaceSerializer; Value = '"1.3.0-alpha4"'; Description = 'Workspace application-version fallback' } + @{ Content = $source.WorkspaceSerializer; Value = '"1.3.0-beta1"'; Description = 'Workspace application-version fallback' } )) { Assert-Contains $surface.Content $surface.Value $surface.Description } foreach ($required in @( - "applicationVersion -eq '1.3.0-alpha4'", - "packageVersion -eq '1.3.0.3'", + "applicationVersion -eq '1.3.0-beta1'", + "packageVersion -eq '1.3.0.4'", "moduleVersion -eq '1.3.0'", - "tag -eq 'v1.3.0-alpha4'", + "tag -eq 'v1.3.0-beta1'", "Workspace Schema version remains 2", "Docking Model version remains 1", "Shell Protocol version remains 1", "Theme Schema remains at version 1" )) { - Assert-Contains $source.VerifyVersion $required 'Authoritative v1.3.0-alpha4 version validation surface' + Assert-Contains $source.VerifyVersion $required 'Authoritative v1.3.0-beta1 version validation surface' } $testBinary = Join-Path $root "bin\$Platform\$Configuration\UnitTests_SettingsModel\SettingsModel.Unit.Tests.dll" diff --git a/scripts/winterm/test.ps1 b/scripts/winterm/test.ps1 index 8f4801343..3408af0f9 100644 --- a/scripts/winterm/test.ps1 +++ b/scripts/winterm/test.ps1 @@ -293,7 +293,7 @@ function Test-ShellExperienceFoundations $manifest = Import-PowerShellDataFile -LiteralPath $moduleManifest if ($manifest.ModuleVersion -ne '1.3.0' -or - $manifest.PrivateData.PSData.Prerelease -ne 'alpha4' -or + $manifest.PrivateData.PSData.Prerelease -ne 'beta1' -or $manifest.PowerShellVersion -ne '5.1') { throw 'The winTerm PowerShell module manifest does not declare the supported version boundary.' diff --git a/scripts/winterm/verify-branding.ps1 b/scripts/winterm/verify-branding.ps1 index 40b950de7..792a8a452 100644 --- a/scripts/winterm/verify-branding.ps1 +++ b/scripts/winterm/verify-branding.ps1 @@ -126,7 +126,7 @@ function Test-Manifest Test-Requirement -Condition ($null -ne $identity -and $identity.Name -eq 'HelloThisWorld.winTerm') -Message "$Path uses package identity HelloThisWorld.winTerm" Test-Requirement -Condition ($null -ne $identity -and $identity.Name -notmatch '^Microsoft\.') -Message "$Path does not use a Microsoft package name" Test-Requirement -Condition ($null -ne $identity -and $identity.Publisher -ceq $ExpectedPublisher) -Message "$Path uses the expected non-Microsoft publisher" - Test-Requirement -Condition ($null -ne $identity -and $identity.Version -eq '1.3.0.3') -Message "$Path uses package version 1.3.0.3" + Test-Requirement -Condition ($null -ne $identity -and $identity.Version -eq '1.3.0.4') -Message "$Path uses package version 1.3.0.4" Test-Requirement -Condition ($null -ne $properties -and $properties.DisplayName -eq 'winTerm') -Message "$Path package display name is winTerm" Test-Requirement -Condition ($null -ne $application -and $application.Id -eq 'winTerm') -Message "$Path application ID is winTerm" Test-Requirement -Condition ($null -ne $visualElements -and $visualElements.DisplayName -eq 'winTerm') -Message "$Path application display name is winTerm" diff --git a/scripts/winterm/verify-version.ps1 b/scripts/winterm/verify-version.ps1 index 1e622a8b8..a9da4a5d3 100644 --- a/scripts/winterm/verify-version.ps1 +++ b/scripts/winterm/verify-version.ps1 @@ -49,10 +49,10 @@ try $versionPath = Join-Path $repositoryRoot 'src\winterm\Branding\version.json' $version = Get-Content -LiteralPath $versionPath -Raw | ConvertFrom-Json - Assert-Condition ($version.applicationVersion -eq '1.3.0-alpha4') 'Application version is 1.3.0-alpha4' - Assert-Condition ($version.packageVersion -eq '1.3.0.3') 'Package version is 1.3.0.3' + Assert-Condition ($version.applicationVersion -eq '1.3.0-beta1') 'Application version is 1.3.0-beta1' + Assert-Condition ($version.packageVersion -eq '1.3.0.4') 'Package version is 1.3.0.4' Assert-Condition ($version.moduleVersion -eq '1.3.0') 'PowerShell module version is 1.3.0' - Assert-Condition ($version.modulePrerelease -eq 'alpha4') 'PowerShell module prerelease suffix is alpha4' + Assert-Condition ($version.modulePrerelease -eq 'beta1') 'PowerShell module prerelease suffix is beta1' # The release workflow treats any channel other than 'stable' as a # prerelease: it marks the GitHub Release --prerelease and --latest=false. @@ -66,7 +66,7 @@ try Assert-Condition ($version.packageVersion -match '^\d+\.\d+\.\d+\.\d+$') 'Package version stays a four-part numeric version' Assert-Condition ($version.moduleVersion -match '^\d+\.\d+\.\d+$') 'PowerShell module version stays numeric' - Assert-Condition ($version.tag -eq 'v1.3.0-alpha4') 'Release tag is v1.3.0-alpha4' + Assert-Condition ($version.tag -eq 'v1.3.0-beta1') 'Release tag is v1.3.0-beta1' Assert-Condition ($version.workspaceSchemaVersion -eq 2) 'Workspace Schema version remains 2' Assert-Condition ($version.dockingModelVersion -eq 1) 'Docking Model version remains 1' Assert-Condition ($version.shellProtocolVersion -eq 1) 'Shell Protocol version remains 1' @@ -98,8 +98,8 @@ try Assert-Condition ($shellVersion.protocolVersion -eq $version.shellProtocolVersion) 'Shell asset protocol version matches release metadata' $releaseHeader = Get-Text 'src\winterm\Branding\ReleaseMetadata.h' - Assert-Condition ($releaseHeader.Contains('ApplicationVersion{ L"1.3.0-alpha4" }')) 'About metadata application version is 1.3.0-alpha4' - Assert-Condition ($releaseHeader.Contains('ReleaseChannel{ L"Alpha" }')) 'About metadata channel is Alpha' + Assert-Condition ($releaseHeader.Contains('ApplicationVersion{ L"1.3.0-beta1" }')) 'About metadata application version is 1.3.0-beta1' + Assert-Condition ($releaseHeader.Contains('ReleaseChannel{ L"Beta" }')) 'About metadata channel is Beta' Assert-Condition ($releaseHeader.Contains($version.microsoftTerminalUpstreamRevision)) 'About metadata contains the Microsoft Terminal upstream revision' Assert-Condition ($releaseHeader.Contains('WorkspaceSchemaVersion{ 2 }')) 'About metadata contains Workspace Schema version 2' Assert-Condition ($releaseHeader.Contains('DockingModelVersion{ 1 }')) 'About metadata contains Docking Model version 1' @@ -129,10 +129,10 @@ try Assert-Condition ((Get-Text 'src\winterm\Workspaces\Model\WorkspaceDescriptor.h').Contains('WorkspaceSchemaVersion{ 2 }')) 'Workspace model remains at Schema version 2' Assert-Condition ((Get-Text 'src\winterm\Workspaces\Model\WorkspaceDescriptor.h').Contains('DockingModelVersion{ 1 }')) 'Workspace model remains at Docking version 1' - Assert-Condition ((Get-Text 'src\winterm\Workspaces\Model\WorkspaceDescriptor.h').Contains('applicationVersion{ "1.3.0-alpha4" }')) 'Workspace model application-version fallback is 1.3.0-alpha4' + Assert-Condition ((Get-Text 'src\winterm\Workspaces\Model\WorkspaceDescriptor.h').Contains('applicationVersion{ "1.3.0-beta1" }')) 'Workspace model application-version fallback is 1.3.0-beta1' Assert-Condition ((Get-Text 'src\winterm\Shell\Protocol\ShellIntegrationProtocol.h').Contains('ShellProtocolVersion{ 1 }')) 'Shell protocol remains at version 1' Assert-Condition ((Get-Text 'src\winterm\Appearance\Themes\ThemeDescriptor.h').Contains('CurrentThemeSchemaVersion{ 1 }')) 'Theme Schema remains at version 1' - Assert-Condition ((Get-Text 'src\winterm\Workspaces\Persistence\WorkspaceSerializer.cpp').Contains('"1.3.0-alpha4"')) 'Workspace serializer application-version fallback is 1.3.0-alpha4' + Assert-Condition ((Get-Text 'src\winterm\Workspaces\Persistence\WorkspaceSerializer.cpp').Contains('"1.3.0-beta1"')) 'Workspace serializer application-version fallback is 1.3.0-beta1' $releaseWorkflow = Get-Text '.github\workflows\release.yml' Assert-Condition ($releaseWorkflow.Contains("- 'v*'")) 'Release workflow accepts version tags through a generic guarded trigger' @@ -142,12 +142,13 @@ try Assert-Condition ($releaseWorkflow.Contains("`$metadata.tag -cne `$expectedTag")) 'Release workflow rejects a version metadata tag mismatch' Assert-Condition ((Get-Text 'CHANGELOG.md').Contains('## 1.2.0 - 2026-08-01')) 'Changelog retains public Latest 1.2.0' - Assert-Condition ((Get-Text 'README.md').Contains('current source version is `1.2.0`')) 'README retains public Latest 1.2.0' + Assert-Condition ((Get-Text 'README.md').Contains("current source version is ``$($version.applicationVersion)``")) 'README source version matches release metadata' + Assert-Condition ((Get-Text 'README.md').Contains('latest stable release is `1.2.0`')) 'README retains public Latest 1.2.0' if ($RequireTag) { $tag = (& git describe --tags --exact-match 2>$null).Trim() - Assert-Condition ($LASTEXITCODE -eq 0 -and $tag -eq $version.tag) 'Checked-out commit is exactly tagged v1.3.0-alpha4' + Assert-Condition ($LASTEXITCODE -eq 0 -and $tag -eq $version.tag) 'Checked-out commit is exactly tagged v1.3.0-beta1' } Write-Host 'winTerm version consistency verification passed.' -ForegroundColor Green diff --git a/shell/powershell/winTerm.Shell/winTerm.Shell.psd1 b/shell/powershell/winTerm.Shell/winTerm.Shell.psd1 index 3d4b5e369..9a3bc1bf2 100644 --- a/shell/powershell/winTerm.Shell/winTerm.Shell.psd1 +++ b/shell/powershell/winTerm.Shell/winTerm.Shell.psd1 @@ -12,7 +12,7 @@ AliasesToExport = @() PrivateData = @{ PSData = @{ - Prerelease = 'alpha4' + Prerelease = 'beta1' Tags = @('winTerm', 'terminal', 'shell-integration') ProjectUri = 'https://github.com/HelloThisWorld/winTerm' LicenseUri = 'https://github.com/HelloThisWorld/winTerm/blob/main/LICENSE' diff --git a/shell/shared/version.json b/shell/shared/version.json index fc0bc84a7..77c3383b5 100644 --- a/shell/shared/version.json +++ b/shell/shared/version.json @@ -1,6 +1,6 @@ { - "applicationVersion": "1.3.0-alpha4", + "applicationVersion": "1.3.0-beta1", "moduleVersion": "1.3.0", - "modulePrerelease": "alpha4", + "modulePrerelease": "beta1", "protocolVersion": 1 } diff --git a/src/cascadia/CascadiaPackage/Package-winTerm.appxmanifest b/src/cascadia/CascadiaPackage/Package-winTerm.appxmanifest index f658e91a7..02af9f2fa 100644 --- a/src/cascadia/CascadiaPackage/Package-winTerm.appxmanifest +++ b/src/cascadia/CascadiaPackage/Package-winTerm.appxmanifest @@ -18,7 +18,7 @@ + Version="1.3.0.4" /> winTerm diff --git a/src/cascadia/WindowsTerminal/WindowsTerminal.rc b/src/cascadia/WindowsTerminal/WindowsTerminal.rc index 715b9931b..0e0f1ec1c 100644 --- a/src/cascadia/WindowsTerminal/WindowsTerminal.rc +++ b/src/cascadia/WindowsTerminal/WindowsTerminal.rc @@ -83,8 +83,8 @@ IDI_APPICON_HC_WHITE ICON "..\\..\\..\\res\\terminal\\imag #if defined(WT_BRANDING_WINTERM) 1 VERSIONINFO - FILEVERSION 1,3,0,3 - PRODUCTVERSION 1,3,0,3 + FILEVERSION 1,3,0,4 + PRODUCTVERSION 1,3,0,4 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS VS_FF_DEBUG @@ -101,12 +101,12 @@ BEGIN BEGIN VALUE "CompanyName", "helloThisWorld\0" VALUE "FileDescription", "winTerm Terminal Host\0" - VALUE "FileVersion", "1.3.0.3\0" + VALUE "FileVersion", "1.3.0.4\0" VALUE "InternalName", "WindowsTerminal\0" VALUE "LegalCopyright", "Copyright (c) winTerm contributors. Portions copyright Microsoft Corporation.\0" VALUE "OriginalFilename", "WindowsTerminal.exe\0" VALUE "ProductName", "winTerm\0" - VALUE "ProductVersion", "1.3.0-alpha4\0" + VALUE "ProductVersion", "1.3.0-beta1\0" END END BLOCK "VarFileInfo" diff --git a/src/cascadia/wt/wt.rc b/src/cascadia/wt/wt.rc index 14d6842a2..b0bd67d11 100644 --- a/src/cascadia/wt/wt.rc +++ b/src/cascadia/wt/wt.rc @@ -58,8 +58,8 @@ IDI_APPICON ICON "..\\..\\..\\res\\terminal.ico" #if defined(WT_BRANDING_WINTERM) 1 VERSIONINFO - FILEVERSION 1,3,0,3 - PRODUCTVERSION 1,3,0,3 + FILEVERSION 1,3,0,4 + PRODUCTVERSION 1,3,0,4 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS VS_FF_DEBUG @@ -76,12 +76,12 @@ BEGIN BEGIN VALUE "CompanyName", "helloThisWorld\0" VALUE "FileDescription", "winTerm Launcher\0" - VALUE "FileVersion", "1.3.0.3\0" + VALUE "FileVersion", "1.3.0.4\0" VALUE "InternalName", "winTerm\0" VALUE "LegalCopyright", "Copyright (c) winTerm contributors. Portions copyright Microsoft Corporation.\0" VALUE "OriginalFilename", "winTerm.exe\0" VALUE "ProductName", "winTerm\0" - VALUE "ProductVersion", "1.3.0-alpha4\0" + VALUE "ProductVersion", "1.3.0-beta1\0" END END BLOCK "VarFileInfo" diff --git a/src/winterm-tools/winterm-shim/winterm-shim.rc b/src/winterm-tools/winterm-shim/winterm-shim.rc index 45b12bb70..2f49ab36e 100644 --- a/src/winterm-tools/winterm-shim/winterm-shim.rc +++ b/src/winterm-tools/winterm-shim/winterm-shim.rc @@ -4,8 +4,8 @@ #include 1 VERSIONINFO - FILEVERSION 1,3,0,3 - PRODUCTVERSION 1,3,0,3 + FILEVERSION 1,3,0,4 + PRODUCTVERSION 1,3,0,4 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS VS_FF_DEBUG @@ -22,12 +22,12 @@ BEGIN BEGIN VALUE "CompanyName", "helloThisWorld\0" VALUE "FileDescription", "winTerm Shell Integration Helper\0" - VALUE "FileVersion", "1.3.0.3\0" + VALUE "FileVersion", "1.3.0.4\0" VALUE "InternalName", "winterm-shim\0" VALUE "LegalCopyright", "Copyright (c) winTerm contributors.\0" VALUE "OriginalFilename", "winterm-shim.exe\0" VALUE "ProductName", "winTerm\0" - VALUE "ProductVersion", "1.3.0-alpha4\0" + VALUE "ProductVersion", "1.3.0-beta1\0" END END BLOCK "VarFileInfo" diff --git a/src/winterm/Branding/ReleaseMetadata.h b/src/winterm/Branding/ReleaseMetadata.h index 02b05ac30..b94e469f7 100644 --- a/src/winterm/Branding/ReleaseMetadata.h +++ b/src/winterm/Branding/ReleaseMetadata.h @@ -25,8 +25,8 @@ namespace winTerm::Branding { inline constexpr std::wstring_view Publisher{ L"helloThisWorld" }; - inline constexpr std::wstring_view ApplicationVersion{ L"1.3.0-alpha4" }; - inline constexpr std::wstring_view ReleaseChannel{ L"Alpha" }; + inline constexpr std::wstring_view ApplicationVersion{ L"1.3.0-beta1" }; + inline constexpr std::wstring_view ReleaseChannel{ L"Beta" }; inline constexpr std::wstring_view CommitSha{ WINTERM_BUILD_COMMIT_SHA }; inline constexpr std::wstring_view BuildTimestamp{ WINTERM_BUILD_TIMESTAMP }; inline constexpr std::wstring_view WorkflowRunId{ WINTERM_BUILD_WORKFLOW_RUN_ID }; diff --git a/src/winterm/Branding/version.json b/src/winterm/Branding/version.json index 27b087669..fdeabb1c7 100644 --- a/src/winterm/Branding/version.json +++ b/src/winterm/Branding/version.json @@ -1,10 +1,10 @@ { - "applicationVersion": "1.3.0-alpha4", - "packageVersion": "1.3.0.3", + "applicationVersion": "1.3.0-beta1", + "packageVersion": "1.3.0.4", "moduleVersion": "1.3.0", - "modulePrerelease": "alpha4", - "channel": "alpha", - "tag": "v1.3.0-alpha4", + "modulePrerelease": "beta1", + "channel": "beta", + "tag": "v1.3.0-beta1", "workspaceSchemaVersion": 2, "dockingModelVersion": 1, "shellProtocolVersion": 1, diff --git a/src/winterm/Workspaces/Model/WorkspaceDescriptor.h b/src/winterm/Workspaces/Model/WorkspaceDescriptor.h index 5f2ca8aca..58933b3e1 100644 --- a/src/winterm/Workspaces/Model/WorkspaceDescriptor.h +++ b/src/winterm/Workspaces/Model/WorkspaceDescriptor.h @@ -219,7 +219,7 @@ namespace winTerm::Workspaces std::string createdAt; std::string updatedAt; WorkspaceSource source{ WorkspaceSource::User }; - std::string applicationVersion{ "1.3.0-alpha4" }; + std::string applicationVersion{ "1.3.0-beta1" }; uint32_t protocolVersion{ 1 }; uint32_t dockingModelVersion{ DockingModelVersion }; WorkspaceStartupBehavior startupBehavior; diff --git a/src/winterm/Workspaces/Persistence/WorkspaceSerializer.cpp b/src/winterm/Workspaces/Persistence/WorkspaceSerializer.cpp index 0060694d0..8518c102d 100644 --- a/src/winterm/Workspaces/Persistence/WorkspaceSerializer.cpp +++ b/src/winterm/Workspaces/Persistence/WorkspaceSerializer.cpp @@ -618,7 +618,7 @@ WorkspaceDescriptor WorkspaceSerializer::FromJson(const Json::Value& json, const throw std::runtime_error("The workspace source is not supported."); } workspace.source = *source; - workspace.applicationVersion = StringOrDefault(json, "applicationVersion", "1.3.0-alpha4"); + workspace.applicationVersion = StringOrDefault(json, "applicationVersion", "1.3.0-beta1"); workspace.protocolVersion = UIntOrDefault(json, "protocolVersion", 1); workspace.dockingModelVersion = UIntOrDefault(json, "dockingModelVersion", DockingModelVersion); if (const auto& startup = json["startupBehavior"]; !startup.isNull())