diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c2caf9c5..9c04c3242 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # Changelog +## 1.4.2 - 2026-08-25 + +Stable patch release of the **Pane Search** generation and **Click to position +cursor**. The application payload is unchanged from the fully validated 1.4.1 +candidate. This patch corrects the release-note signing heading required by the +guarded asset verifier after the published `v1.4.1` tag could no longer be +moved or replaced. It publishes as GitHub Latest with application version +`1.4.2`, package/file version `1.4.2.0`, PowerShell module version +`1.4.2`, and tag `v1.4.2`. + +### Fixed + +- The packaged release notes now use the canonical `## Signing` section + required by the exact-asset verifier while retaining the explicit unsigned + installer and SmartScreen disclosure. + ## 1.4.1 - 2026-08-25 Stable production release of the **Pane Search** generation and **Click to diff --git a/README.ja.md b/README.ja.md index 2148e74eb..b96b2552c 100644 --- a/README.ja.md +++ b/README.ja.md @@ -14,7 +14,7 @@ 最新の安定版リリースページには、インストーラー(Setup EXE)、ポータブルZIP、 リリースノート、チェックサムがまとめて掲載されています。現在の安定版は -**winTerm 1.4.1** です。 +**winTerm 1.4.2** です。 インストーラーは署名されていないため、Windowsに「不明な発行元」または SmartScreenの警告が表示される場合があります。必ず上記の公式リリースから @@ -34,8 +34,8 @@ Microsoft、Windows、Windows Terminalのロゴも使用していません。 - `winTerm--setup-x64.exe` — 現在のユーザー、または全ユーザーへのインストール用; - `winTerm--portable-x64.zip` — 展開してそのまま実行する用。 -現在のソースバージョンは `1.4.1` で、 -最新の安定版リリースも `1.4.1` です。公開されている資産の一覧とチェックサムの全体は、 +現在のソースバージョンは `1.4.2` で、 +最新の安定版リリースも `1.4.2` です。公開されている資産の一覧とチェックサムの全体は、 [最新の公式リリース](https://github.com/HelloThisWorld/winTerm/releases/latest) を参照してください。 @@ -46,7 +46,7 @@ Windowsに「不明な発行元」またはSmartScreenの警告が表示され Windows SDK、`Add-AppxPackage` は一切必要ありません。 [インストール手順(英語)](docs/user/installation.md)、 -[1.4.1のリリースノート(英語)](docs/releases/1.4.1.md)、 +[1.4.2のリリースノート(英語)](docs/releases/1.4.2.md)、 [1.3.0のリリースノート(英語)](docs/releases/1.3.0.md)もあわせて参照してください。 ## 主な機能 @@ -116,8 +116,8 @@ PowerShell 7と、[ビルド手順(英語)](docs/build.md)に記載された .\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.4.1 -Platform x64 -.\scripts\winterm\build-portable.ps1 -Version 1.4.1 -Platform x64 +.\scripts\winterm\build-installer.ps1 -Version 1.4.2 -Platform x64 +.\scripts\winterm\build-portable.ps1 -Version 1.4.2 -Platform x64 ``` アンパッケージ形式の生成処理では、統合されたリソースインデックスを作るための diff --git a/README.md b/README.md index 44a92924f..6eb8496dc 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ English | [日本語](README.ja.md) [**Open the latest stable release and download winTerm for x64**](https://github.com/HelloThisWorld/winTerm/releases/latest) The latest stable Release page provides the Setup EXE, Portable ZIP, release -notes, and checksums together. The current stable release is **winTerm 1.4.1**. +notes, and checksums together. The current stable release is **winTerm 1.4.2**. The installer is unsigned, so Windows may display Unknown Publisher or a SmartScreen warning. Download only from the official release above and verify @@ -31,8 +31,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.4.1`; -the latest stable release is `1.4.1`. See the +The current source version is `1.4.2`; +the latest stable release is `1.4.2`. See the [latest official Release](https://github.com/HelloThisWorld/winTerm/releases/latest) for the complete published asset list and checksums. @@ -42,7 +42,7 @@ Release. No MSIX certificate, Developer Mode, Visual Studio, Windows SDK, or `Add-AppxPackage` is required to install a release EXE. See [installation guidance](docs/user/installation.md), the -[1.4.1 release notes](docs/releases/1.4.1.md), and the earlier +[1.4.2 release notes](docs/releases/1.4.2.md), and the earlier [1.3.0 notes](docs/releases/1.3.0.md). ## Core features @@ -109,8 +109,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.4.1 -Platform x64 -.\scripts\winterm\build-portable.ps1 -Version 1.4.1 -Platform x64 +.\scripts\winterm\build-installer.ps1 -Version 1.4.2 -Platform x64 +.\scripts\winterm\build-portable.ps1 -Version 1.4.2 -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 ca495d451..3fcc7a960 100644 --- a/docs/current-progress.md +++ b/docs/current-progress.md @@ -4,14 +4,14 @@ Last updated: 2026-08-25 ## Repository state -- Working branch: `codex/release-v1.4.1` -- Branch base: `63c52f538abc29d434077c60acfc5e4aafe95d1b` (`origin/main` at +- Working branch: `codex/release-v1.4.2` +- Branch base: `09dc76796725d9b7bd7b0d86a28196bce14698c7` (`origin/main` at release preparation start) -- Application version: `1.4.1` -- Package/file version: `1.4.1.0` -- PowerShell module version: `1.4.1` with an empty prerelease suffix +- Application version: `1.4.2` +- Package/file version: `1.4.2.0` +- PowerShell module version: `1.4.2` with an empty prerelease suffix - Release channel: `stable` -- Intended tag: `v1.4.1` +- Intended tag: `v1.4.2` - Supported target: Windows 11 x64 The source remains based on the repository's pinned Microsoft Terminal @@ -20,12 +20,15 @@ Microsoft Terminal `upstream/main` was separately fetched through `86d15aef08e500be34497ff4e3a6f0d099ffb067` (2026-08-24) for a targeted cursor-positioning audit; no broad upstream merge was performed. -## 1.4.1 release scope +## 1.4.2 release scope -winTerm 1.4.1 promotes the complete Pane Search development line and adds +winTerm 1.4.2 promotes the complete Pane Search development line and adds Click to position cursor as a stable, default-enabled winTerm feature. It is -the combined application delta since stable v1.3.0; the earlier 1.4.0 alpha -and beta entries remain historical records only. +the combined application delta since stable v1.3.0. The immutable v1.4.1 tag +reached packaging but did not publish a GitHub Release because its release-note +signing heading did not match the exact verifier contract; 1.4.2 corrects that +release-only defect. The earlier 1.4.0 alpha and beta entries remain historical +records only. ### Pane Search @@ -63,12 +66,12 @@ and beta entries remain historical records only. ### Visual Progress and Command Timeline -- Visual Progress remains stable in 1.4.1, including its determinate and +- Visual Progress remains stable in 1.4.2, including its determinate and indeterminate renderer, per-pane state, accessibility path, and local-only recognition controls. - Command Timeline remains stable and pane-local, with OSC 133-backed command boundaries, filtering, load-without-executing, copy, jump, and status. -- The 1.4.1 cursor work does not change either feature's settings, protocol, +- The 1.4.2 cursor work does not change either feature's settings, protocol, persistence, or privacy boundaries. ## Upstream cursor audit @@ -96,14 +99,14 @@ public asset re-download before publication is considered complete. The expected public Release assets are: -- `winTerm-1.4.1-setup-x64.exe` -- `winTerm-1.4.1-portable-x64.zip` +- `winTerm-1.4.2-setup-x64.exe` +- `winTerm-1.4.2-portable-x64.zip` - `SHA256SUMS.txt` - `THIRD_PARTY_NOTICES.md` - `SBOM.spdx.json` - `SBOM.cyclonedx.json` - `release-metadata.json` -- `winTerm-1.4.1-release-notes.md` +- `winTerm-1.4.2-release-notes.md` The installer is currently not Authenticode-signed, so Unknown Publisher or SmartScreen warnings remain possible. The Release notes disclose this and @@ -129,7 +132,7 @@ for the published installer and Portable ZIP. tag the exact merged `main` commit, and monitor the formal Release workflow through public asset validation. 2. Update and deploy winterm.dev from the real `published_at` timestamp and - public v1.4.1 asset URLs, then verify English/Japanese production pages. + public v1.4.2 asset URLs, then verify English/Japanese production pages. 3. Only after both the stable Release and website are verified, remove the published v1.4.0-beta GitHub prerelease entry while retaining its historical git tag. diff --git a/docs/releases/1.4.2.md b/docs/releases/1.4.2.md new file mode 100644 index 000000000..91da3f532 --- /dev/null +++ b/docs/releases/1.4.2.md @@ -0,0 +1,107 @@ +# winTerm 1.4.2 + +**winTerm 1.4.2 is a stable production release.** GitHub Latest points to +`v1.4.2`; there is no alpha, beta, preview, or prerelease suffix in the +application, package, PowerShell module, or Release metadata. + +This release contains everything changed since stable v1.3.0: the complete +Pane Search feature line, Click to position cursor, cursor-coordinate and +interaction hardening, and the associated tests and documentation. + +## New: Pane Search + +Press `Ctrl+F` to search the **focused pane only**. `Ctrl+Shift+F` remains a +remappable compatibility alias. The implementation reuses the terminal's +existing search pipeline rather than maintaining a second index or buffer. + +- Search follows typing across the pane's entire active scrollback and + highlights all matches at once. +- `Enter` and `Shift+Enter` move forward and backward with wrap-around. +- Case-sensitive and regular-expression modes are available from the compact + search overlay, alongside the `current / total` match counter. +- The scrollbar shows one marker per matching buffer row and emphasizes the + current match's row. This overview is pane-local and does not require generic + shell marks to be enabled. +- Typing is coalesced, live results converge during sustained streaming output, + and unchanged scrollbar state is not needlessly repainted. +- Resize/reflow, scrollback eviction, active-buffer changes, invalid regular + expressions, CJK, and emoji search spans have deterministic regression + coverage. + +## New: Click to position cursor + +A plain single left click inside the current editable command moves the shell +cursor to that location. winTerm calculates the cell distance and sends LEFT +or RIGHT input events, keeping PowerShell, Readline, and cooked-input state +authoritative. It never moves only the renderer cursor, edits the command +buffer directly, inserts or deletes text, or executes the command. + +The feature is enabled by default for winTerm profiles. It can be disabled in +**Profile > Advanced > Click to position cursor**, and an explicit existing +`"experimental.repositionCursorWithMouse": false` setting remains respected. +The internal JSON property name is retained for configuration compatibility; +the user-facing feature is not described as experimental. + +Shell integration supplies the safety boundary. Positioning is allowed only +when the last shell mark identifies a current, unfinished editable command. +Clicks on previous commands, previous output, unrelated scrollback, completed +or executing commands, and any position that cannot be validated are safe +no-ops. + +## Mouse behavior and compatibility + +Cursor positioning occurs on left-button release only when the existing drag +threshold was not crossed. Starting a drag never moves the command cursor +first. Existing interaction precedence remains: + +1. Ctrl+Click hyperlink activation. +2. VT mouse reporting to the child terminal application. +3. Double-click word and triple-click line selection. +4. Shift+Click and drag selection. +5. Plain single click positioning. + +Mouse-aware applications such as Vim, Less, top, htop, k9s, and tmux retain +mouse ownership when VT mouse reporting is active. Each split pane owns its +own terminal connection, marks, selection state, and cursor-position input. + +## Stability fixes + +- Integrated the safety intent of Microsoft Terminal PR #20442, merged as + `de3fc87d186e5da1d5ccd8731412905f5e2aba30`. Mouse coordinates are translated + at widened precision, vertical padding and out-of-viewport rows are rejected, + horizontal padding is clamped to rendered buffer cells, and every point is + checked against the TextBuffer's inclusive coordinate contract before use. +- Negative, overflow, beyond-width, beyond-height, padding, empty-command, + historical-output, wrapped-command, resize-era, and pane-isolation cases + fail safely and have automated regression coverage. +- Full-width glyph trailing cells do not produce duplicate LEFT/RIGHT events. +- Pane Search reflow no longer creates a stray selection, active-buffer changes + discard stale highlights, and closing search releases retained search-span + storage. + +## Downloads + +- `winTerm-1.4.2-setup-x64.exe` — current-user or all-users installation. +- `winTerm-1.4.2-portable-x64.zip` — extract and run without installation; + `portable.marker` keeps data beside the executable. +- `SHA256SUMS.txt` — checksums for the application downloads and published + release artifacts. +- `THIRD_PARTY_NOTICES.md` — dependency and attribution notices. +- `SBOM.spdx.json` and `SBOM.cyclonedx.json` — software bills of materials. +- `release-metadata.json` — immutable build and source provenance. +- `winTerm-1.4.2-release-notes.md` — the packaged copy of these notes. + +Upgrading keeps settings, themes, workspaces, and snapshots under +`%LOCALAPPDATA%\winTerm`, or under the adjacent `data` directory in portable +mode. + +## Signing + +The installer is **not Authenticode-signed**. Windows may display Unknown +Publisher or a Microsoft Defender SmartScreen warning. Download only from the +official GitHub Release and verify `SHA256SUMS.txt` from that same Release +before running the installer. + +Requires Windows 11 x64. winTerm is an independent open-source project based +on Microsoft Terminal source code; it is not a Microsoft product and is not +affiliated with or endorsed by Microsoft. diff --git a/scripts/winterm/package-shell-assets.ps1 b/scripts/winterm/package-shell-assets.ps1 index 81c1ed1d4..a6afb5f2d 100644 --- a/scripts/winterm/package-shell-assets.ps1 +++ b/scripts/winterm/package-shell-assets.ps1 @@ -32,9 +32,9 @@ foreach ($relativePath in $sourceAssets) } $version = Get-Content -LiteralPath (Join-Path $repositoryRoot 'shell\shared\version.json') -Raw | ConvertFrom-Json -if ($version.moduleVersion -ne '1.4.1' -or +if ($version.moduleVersion -ne '1.4.2' -or $version.modulePrerelease -ne '' -or - $version.applicationVersion -ne '1.4.1' -or + $version.applicationVersion -ne '1.4.2' -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 5e2b98ad8..559414c43 100644 --- a/scripts/winterm/test-visual-progress.ps1 +++ b/scripts/winterm/test-visual-progress.ps1 @@ -1411,10 +1411,10 @@ try Assert-Matches $releaseNotes $requiredPattern 'winTerm 1.2.0 Visual Progress release notes' } Assert-Matches $source.Changelog '(?m)^##\s+.*1\.2\.0' 'Changelog 1.2.0 entry' - Assert-Matches $source.CurrentProgress '(?i)1\.4\.1' 'Current progress v1.4.1 milestone' + Assert-Matches $source.CurrentProgress '(?i)1\.4\.2' 'Current progress v1.4.2 milestone' Assert-Matches $source.CurrentProgress '(?i)Visual Progress' 'Current progress Visual Progress coverage' Assert-Contains $source.Readme '/releases/latest' 'Stable latest-release README download route' - Assert-Matches $source.Readme '(?i)1\.4\.1' 'README v1.4.1 surface' + Assert-Matches $source.Readme '(?i)1\.4\.2' 'README v1.4.2 surface' foreach ($requiredPattern in @( '(?is)recognition.*runs locally|locally.*recognition', '(?is)bounded.*newly\s+arriving\s+output|newly\s+arriving.*bounded', @@ -1432,12 +1432,12 @@ try $version = $source.VersionMetadata | ConvertFrom-Json $expectedVersionValues = [ordered]@{ - applicationVersion = '1.4.1' - packageVersion = '1.4.1.0' - moduleVersion = '1.4.1' + applicationVersion = '1.4.2' + packageVersion = '1.4.2.0' + moduleVersion = '1.4.2' modulePrerelease = '' channel = 'stable' - tag = 'v1.4.1' + tag = 'v1.4.2' workspaceSchemaVersion = 2 dockingModelVersion = 1 shellProtocolVersion = 1 @@ -1452,39 +1452,39 @@ try } } $shellVersion = $source.ShellVersion | ConvertFrom-Json - if ($shellVersion.applicationVersion -ne '1.4.1' -or $shellVersion.moduleVersion -ne '1.4.1' -or $shellVersion.protocolVersion -ne 1) + if ($shellVersion.applicationVersion -ne '1.4.2' -or $shellVersion.moduleVersion -ne '1.4.2' -or $shellVersion.protocolVersion -ne 1) { - throw 'Shell version metadata does not match winTerm version 1.4.1 with protocol version 1.' + throw 'Shell version metadata does not match winTerm version 1.4.2 with protocol version 1.' } foreach ($surface in @( - @{ Content = $source.ReleaseMetadata; Value = 'ApplicationVersion{ L"1.4.1" }'; Description = 'About release metadata' }, - @{ Content = $source.PackageManifest; Value = 'Version="1.4.1.0"'; Description = 'MSIX package manifest' }, - @{ Content = $source.HostResource; Value = 'FILEVERSION 1,4,1,0'; Description = 'Terminal host file version' }, - @{ Content = $source.HostResource; Value = '"ProductVersion", "1.4.1\0"'; Description = 'Terminal host display version' }, - @{ Content = $source.ShimResource; Value = 'FILEVERSION 1,4,1,0'; Description = 'Shim file version' }, - @{ Content = $source.ShimResource; Value = '"ProductVersion", "1.4.1\0"'; Description = 'Shim display version' }, + @{ Content = $source.ReleaseMetadata; Value = 'ApplicationVersion{ L"1.4.2" }'; Description = 'About release metadata' }, + @{ Content = $source.PackageManifest; Value = 'Version="1.4.2.0"'; Description = 'MSIX package manifest' }, + @{ Content = $source.HostResource; Value = 'FILEVERSION 1,4,2,0'; Description = 'Terminal host file version' }, + @{ Content = $source.HostResource; Value = '"ProductVersion", "1.4.2\0"'; Description = 'Terminal host display version' }, + @{ Content = $source.ShimResource; Value = 'FILEVERSION 1,4,2,0'; Description = 'Shim file version' }, + @{ Content = $source.ShimResource; Value = '"ProductVersion", "1.4.2\0"'; Description = 'Shim display version' }, @{ Content = $source.CustomProps; Value = '1'; Description = 'Executable major version' }, @{ Content = $source.CustomProps; Value = '4'; Description = 'Executable minor version' }, - @{ Content = $source.ShellModuleManifest; Value = "ModuleVersion = '1.4.1'"; Description = 'PowerShell module manifest' }, - @{ Content = $source.ShellModule; Value = "`$script:WinTermModuleVersion = '1.4.1'"; Description = 'PowerShell module runtime' }, + @{ Content = $source.ShellModuleManifest; Value = "ModuleVersion = '1.4.2'"; Description = 'PowerShell module manifest' }, + @{ Content = $source.ShellModule; Value = "`$script:WinTermModuleVersion = '1.4.2'"; Description = 'PowerShell module runtime' }, @{ Content = $source.PackageShellAssets; Value = "'shell\shared\version.json'"; Description = 'Canonical shell version metadata packaging' }, - @{ Content = $source.WorkspaceSerializer; Value = '"1.4.1"'; Description = 'Workspace application-version fallback' } + @{ Content = $source.WorkspaceSerializer; Value = '"1.4.2"'; Description = 'Workspace application-version fallback' } )) { Assert-Contains $surface.Content $surface.Value $surface.Description } foreach ($required in @( - "applicationVersion -eq '1.4.1'", - "packageVersion -eq '1.4.1.0'", - "moduleVersion -eq '1.4.1'", - "tag -eq 'v1.4.1'", + "applicationVersion -eq '1.4.2'", + "packageVersion -eq '1.4.2.0'", + "moduleVersion -eq '1.4.2'", + "tag -eq 'v1.4.2'", "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.4.1 version validation surface' + Assert-Contains $source.VerifyVersion $required 'Authoritative v1.4.2 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 73b9bd7d4..6f9677891 100644 --- a/scripts/winterm/test.ps1 +++ b/scripts/winterm/test.ps1 @@ -292,7 +292,7 @@ function Test-ShellExperienceFoundations } $manifest = Import-PowerShellDataFile -LiteralPath $moduleManifest - if ($manifest.ModuleVersion -ne '1.4.1' -or + if ($manifest.ModuleVersion -ne '1.4.2' -or $manifest.PrivateData.PSData.Prerelease -ne '' -or $manifest.PowerShellVersion -ne '5.1') { diff --git a/scripts/winterm/verify-branding.ps1 b/scripts/winterm/verify-branding.ps1 index 346d1671d..6a2ed2179 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.4.1.0') -Message "$Path uses package version 1.4.1.0" + Test-Requirement -Condition ($null -ne $identity -and $identity.Version -eq '1.4.2.0') -Message "$Path uses package version 1.4.2.0" 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 33e97f45b..a4b7d7060 100644 --- a/scripts/winterm/verify-version.ps1 +++ b/scripts/winterm/verify-version.ps1 @@ -49,9 +49,9 @@ try $versionPath = Join-Path $repositoryRoot 'src\winterm\Branding\version.json' $version = Get-Content -LiteralPath $versionPath -Raw | ConvertFrom-Json - Assert-Condition ($version.applicationVersion -eq '1.4.1') 'Application version is 1.4.1' - Assert-Condition ($version.packageVersion -eq '1.4.1.0') 'Package version is 1.4.1.0' - Assert-Condition ($version.moduleVersion -eq '1.4.1') 'PowerShell module version is 1.4.1' + Assert-Condition ($version.applicationVersion -eq '1.4.2') 'Application version is 1.4.2' + Assert-Condition ($version.packageVersion -eq '1.4.2.0') 'Package version is 1.4.2.0' + Assert-Condition ($version.moduleVersion -eq '1.4.2') 'PowerShell module version is 1.4.2' Assert-Condition ($version.modulePrerelease -eq '') 'PowerShell module prerelease suffix is empty for stable' # The release workflow treats any channel other than 'stable' as a @@ -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.4.1') 'Stable tag is v1.4.1' + Assert-Condition ($version.tag -eq 'v1.4.2') 'Stable tag is v1.4.2' 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' @@ -90,7 +90,7 @@ try $moduleManifest = Import-PowerShellDataFile -LiteralPath (Join-Path $repositoryRoot 'shell\powershell\winTerm.Shell\winTerm.Shell.psd1') Assert-Condition ($moduleManifest.ModuleVersion.ToString() -eq $version.moduleVersion) 'PowerShell manifest version matches release metadata' Assert-Condition ($moduleManifest.PrivateData.PSData.Prerelease -eq $version.modulePrerelease) 'PowerShell manifest prerelease matches release metadata' - Assert-Condition ((Get-Text 'shell\powershell\winTerm.Shell\winTerm.Shell.psm1').Contains("`$script:WinTermModuleVersion = '1.4.1'")) 'PowerShell module runtime version matches release metadata' + Assert-Condition ((Get-Text 'shell\powershell\winTerm.Shell\winTerm.Shell.psm1').Contains("`$script:WinTermModuleVersion = '1.4.2'")) 'PowerShell module runtime version matches release metadata' $shellVersion = Get-Text 'shell\shared\version.json' | ConvertFrom-Json Assert-Condition ($shellVersion.applicationVersion -eq $version.applicationVersion) 'Shell asset application version matches release metadata' @@ -98,7 +98,7 @@ 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.4.1" }')) 'About metadata application version is 1.4.1' + Assert-Condition ($releaseHeader.Contains('ApplicationVersion{ L"1.4.2" }')) 'About metadata application version is 1.4.2' Assert-Condition ($releaseHeader.Contains('ReleaseChannel{ L"Stable" }')) 'About metadata channel is Stable' 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' @@ -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.4.1" }')) 'Workspace model application-version fallback is 1.4.1' + Assert-Condition ((Get-Text 'src\winterm\Workspaces\Model\WorkspaceDescriptor.h').Contains('applicationVersion{ "1.4.2" }')) 'Workspace model application-version fallback is 1.4.2' 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.4.1"')) 'Workspace serializer application-version fallback is 1.4.1' + Assert-Condition ((Get-Text 'src\winterm\Workspaces\Persistence\WorkspaceSerializer.cpp').Contains('"1.4.2"')) 'Workspace serializer application-version fallback is 1.4.2' $releaseWorkflow = Get-Text '.github\workflows\release.yml' Assert-Condition ($releaseWorkflow.Contains("- 'v*'")) 'Release workflow accepts version tags through a generic guarded trigger' @@ -141,9 +141,9 @@ try Assert-Condition ($releaseWorkflow.Contains("`$expectedTag = `"v`$(`$metadata.applicationVersion)`"")) 'Release workflow derives the expected tag from version.json' Assert-Condition ($releaseWorkflow.Contains("`$metadata.tag -cne `$expectedTag")) 'Release workflow rejects a version metadata tag mismatch' - Assert-Condition ((Get-Text 'CHANGELOG.md').Contains('## 1.4.1 - 2026-08-25')) 'Changelog contains the 1.4.1 stable entry' + Assert-Condition ((Get-Text 'CHANGELOG.md').Contains('## 1.4.2 - 2026-08-25')) 'Changelog contains the 1.4.2 stable entry' 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.4.1`')) 'README stable pointer is 1.4.1' + Assert-Condition ((Get-Text 'README.md').Contains('latest stable release is `1.4.2`')) 'README stable pointer is 1.4.2' # The Japanese README is a maintained counterpart, not a marketing summary: # both files must link to each other, the translation must point at the @@ -162,7 +162,7 @@ try Assert-Condition ($readmeJa.Contains('[English](README.md)')) 'Japanese README links back to the English README' Assert-Condition ($readmeJa.Contains('https://winterm.dev/ja/')) 'Japanese README links to the Japanese website' Assert-Condition ($readmeJa.Contains("``$($version.applicationVersion)``")) 'Japanese README source version matches release metadata' - Assert-Condition ($readmeJa.Contains('`1.4.1`')) 'Japanese README stable pointer is 1.4.1' + Assert-Condition ($readmeJa.Contains('`1.4.2`')) 'Japanese README stable pointer is 1.4.2' Assert-Condition ($readmeJa.Contains('winTerm--setup-x64.exe')) 'Japanese README retains the installer asset pattern' Assert-Condition ($readmeJa.Contains('winTerm--portable-x64.zip')) 'Japanese README retains the portable asset pattern' Assert-Condition ($readmeJa.Contains('SHA256SUMS.txt')) 'Japanese README retains the checksum filename' @@ -187,7 +187,7 @@ try 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.4.1' + Assert-Condition ($LASTEXITCODE -eq 0 -and $tag -eq $version.tag) 'Checked-out commit is exactly tagged v1.4.2' } 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 202f4e623..5b1e4a033 100644 --- a/shell/powershell/winTerm.Shell/winTerm.Shell.psd1 +++ b/shell/powershell/winTerm.Shell/winTerm.Shell.psd1 @@ -1,6 +1,6 @@ @{ RootModule = 'winTerm.Shell.psm1' - ModuleVersion = '1.4.1' + ModuleVersion = '1.4.2' GUID = 'f65cd8f4-5d25-4a2a-a0d4-58df1ab3dc5a' Author = 'winTerm contributors' CompanyName = 'winTerm' diff --git a/shell/powershell/winTerm.Shell/winTerm.Shell.psm1 b/shell/powershell/winTerm.Shell/winTerm.Shell.psm1 index 1029b9d09..43bc977f0 100644 --- a/shell/powershell/winTerm.Shell/winTerm.Shell.psm1 +++ b/shell/powershell/winTerm.Shell/winTerm.Shell.psm1 @@ -3,7 +3,7 @@ Set-StrictMode -Version Latest -$script:WinTermModuleVersion = '1.4.1' +$script:WinTermModuleVersion = '1.4.2' $script:WinTermProtocolVersion = 1 $script:WinTermIntegrationEnabled = $false $script:WinTermPromptWrapped = $false diff --git a/shell/shared/version.json b/shell/shared/version.json index 3a429ec44..7acd4496a 100644 --- a/shell/shared/version.json +++ b/shell/shared/version.json @@ -1,6 +1,6 @@ { - "applicationVersion": "1.4.1", - "moduleVersion": "1.4.1", + "applicationVersion": "1.4.2", + "moduleVersion": "1.4.2", "modulePrerelease": "", "protocolVersion": 1 } diff --git a/src/cascadia/CascadiaPackage/Package-winTerm.appxmanifest b/src/cascadia/CascadiaPackage/Package-winTerm.appxmanifest index 1de1e4d91..0e8a2be4d 100644 --- a/src/cascadia/CascadiaPackage/Package-winTerm.appxmanifest +++ b/src/cascadia/CascadiaPackage/Package-winTerm.appxmanifest @@ -18,7 +18,7 @@ + Version="1.4.2.0" /> winTerm diff --git a/src/cascadia/WindowsTerminal/WindowsTerminal.rc b/src/cascadia/WindowsTerminal/WindowsTerminal.rc index 7cad9ea00..af8f7886f 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,4,1,0 - PRODUCTVERSION 1,4,1,0 + FILEVERSION 1,4,2,0 + PRODUCTVERSION 1,4,2,0 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.4.1.0\0" + VALUE "FileVersion", "1.4.2.0\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.4.1\0" + VALUE "ProductVersion", "1.4.2\0" END END BLOCK "VarFileInfo" diff --git a/src/cascadia/wt/wt.rc b/src/cascadia/wt/wt.rc index 3b6812955..f8f1f5c26 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,4,1,0 - PRODUCTVERSION 1,4,1,0 + FILEVERSION 1,4,2,0 + PRODUCTVERSION 1,4,2,0 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.4.1.0\0" + VALUE "FileVersion", "1.4.2.0\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.4.1\0" + VALUE "ProductVersion", "1.4.2\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 3ee9d994f..6f0e57f9f 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,4,1,0 - PRODUCTVERSION 1,4,1,0 + FILEVERSION 1,4,2,0 + PRODUCTVERSION 1,4,2,0 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.4.1.0\0" + VALUE "FileVersion", "1.4.2.0\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.4.1\0" + VALUE "ProductVersion", "1.4.2\0" END END BLOCK "VarFileInfo" diff --git a/src/winterm/Branding/ReleaseMetadata.h b/src/winterm/Branding/ReleaseMetadata.h index 2356e932b..459e561f8 100644 --- a/src/winterm/Branding/ReleaseMetadata.h +++ b/src/winterm/Branding/ReleaseMetadata.h @@ -25,7 +25,7 @@ namespace winTerm::Branding { inline constexpr std::wstring_view Publisher{ L"helloThisWorld" }; - inline constexpr std::wstring_view ApplicationVersion{ L"1.4.1" }; + inline constexpr std::wstring_view ApplicationVersion{ L"1.4.2" }; inline constexpr std::wstring_view ReleaseChannel{ L"Stable" }; inline constexpr std::wstring_view CommitSha{ WINTERM_BUILD_COMMIT_SHA }; inline constexpr std::wstring_view BuildTimestamp{ WINTERM_BUILD_TIMESTAMP }; diff --git a/src/winterm/Branding/version.json b/src/winterm/Branding/version.json index c10eb084a..018dfbb5b 100644 --- a/src/winterm/Branding/version.json +++ b/src/winterm/Branding/version.json @@ -1,10 +1,10 @@ { - "applicationVersion": "1.4.1", - "packageVersion": "1.4.1.0", - "moduleVersion": "1.4.1", + "applicationVersion": "1.4.2", + "packageVersion": "1.4.2.0", + "moduleVersion": "1.4.2", "modulePrerelease": "", "channel": "stable", - "tag": "v1.4.1", + "tag": "v1.4.2", "workspaceSchemaVersion": 2, "dockingModelVersion": 1, "shellProtocolVersion": 1, diff --git a/src/winterm/Workspaces/Model/WorkspaceDescriptor.h b/src/winterm/Workspaces/Model/WorkspaceDescriptor.h index 12a99a934..e6ab8a1ce 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.4.1" }; + std::string applicationVersion{ "1.4.2" }; 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 053577454..67ef76cff 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.4.1"); + workspace.applicationVersion = StringOrDefault(json, "applicationVersion", "1.4.2"); workspace.protocolVersion = UIntOrDefault(json, "protocolVersion", 1); workspace.dockingModelVersion = UIntOrDefault(json, "dockingModelVersion", DockingModelVersion); if (const auto& startup = json["startupBehavior"]; !startup.isNull())