diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b4e38957..1f3c8d959 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +## 1.1.1 - 2026-07-24 + +### Fixed + +- Added an explicit unsigned-installer disclosure to generated Release notes + when no trusted Authenticode certificate is configured. +- Added release-workflow regression coverage for the signing disclosure. +- Updated the README and versioned documentation to point users to the + v1.1.1 Release while retaining the stable `/releases/latest` download link. + +### Distribution + +- Publishes the native UI refresh and snapping pane-resize feature set prepared + for 1.1.0 as the verified x64 Setup EXE and Portable ZIP. +- Supersedes the unpublished v1.1.0 Release attempt without moving or + overwriting its tag. +- The Setup EXE is not code-signed; verify it with `SHA256SUMS.txt`. + ## 1.1.0 - 2026-07-23 ### Added diff --git a/README.md b/README.md index 7349d6147..de5fc5284 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ 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.1.0`. See the +The current source version is `1.1.1`. See the [latest official Release](https://github.com/HelloThisWorld/winTerm/releases/latest) for the complete published asset list and checksums. @@ -39,7 +39,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) and the -[1.1.0 release notes](docs/releases/1.1.0.md). +[1.1.1 release notes](docs/releases/1.1.1.md). ## Core features @@ -84,8 +84,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.1.0 -Platform x64 -.\scripts\winterm\build-portable.ps1 -Version 1.1.0 -Platform x64 +.\scripts\winterm\build-installer.ps1 -Version 1.1.1 -Platform x64 +.\scripts\winterm\build-portable.ps1 -Version 1.1.1 -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 a9ff7f0f5..2f7885d3b 100644 --- a/docs/current-progress.md +++ b/docs/current-progress.md @@ -1,16 +1,16 @@ # Current development progress -Last updated: 2026-07-23 +Last updated: 2026-07-24 ## Repository state -- Branch: `codex/fix-live-pane-drag-release` -- Starting commit: `ecd0350849e918c261f789e32648eafaa3988d31` +- Branch: `codex/release-v1.1.1` +- Starting commit: `a503b8dfaee05c533ba5981d83d22e92e31b3e20` - Microsoft Terminal upstream revision: `1cea42d433253d95c4487a3037db48197b5e72f4` -- Application and module version: `1.1.0` -- Package version: `1.1.0.0` -- Intended tag: `v1.1.0` +- Application and module version: `1.1.1` +- Package version: `1.1.1.0` +- Intended tag: `v1.1.1` - Supported release target: Windows 11 x64 ## Implemented in the working tree diff --git a/docs/releases/1.1.1.md b/docs/releases/1.1.1.md new file mode 100644 index 000000000..2ae27e340 --- /dev/null +++ b/docs/releases/1.1.1.md @@ -0,0 +1,49 @@ +# winTerm 1.1.1 + +winTerm 1.1.1 publishes the native Windows UI refresh and snapping pane-resize +feature set prepared for 1.1.0, with a corrected and fully validated Release +publication path. + +## Highlights + +- Drag vertical or horizontal pane borders to resize continuously. +- Snap to quarters, thirds, or 50/50 with stable hysteresis. +- Hold Alt for fine-grained resize without snapping. +- Cancel with Escape; pointer cancellation deterministically rolls back. +- Undo or redo one exact ratio per committed resize. +- Balance the focused pane's immediate sibling split. +- Use compact pane headers with an accurate pane icon, title, status, and + unified overflow menu. +- Use the website-aligned dark native shell without changing custom terminal + profile themes. +- Configure snapping under Docking and layout and pane presentation under + Appearance. + +## Release fix + +- Unsigned releases now receive an explicit signing disclosure before their + asset allowlist is verified. +- Release workflow regression coverage prevents a missing disclosure from + blocking publication after the installer and Portable ZIP have been built. +- README downloads continue to use the stable `/releases/latest` URL. + +## Compatibility + +Workspace schema remains version 2 and restores final split ratios and nested +structure. Existing 1.0 and 1.1.0 settings load with obsolete pane-movement +fields ignored. Shell sessions are resized in place; winTerm does not restart +shells to emulate layout changes. + +## Distribution + +Primary x64 assets: + +- `winTerm-1.1.1-setup-x64.exe` +- `winTerm-1.1.1-portable-x64.zip` + +Publisher: `helloThisWorld`. Tag: `v1.1.1`. + +## Signing + +The v1.1.1 Setup EXE is not code-signed. Windows may display a SmartScreen +warning; verify the downloaded file against `SHA256SUMS.txt` before running it. diff --git a/scripts/winterm/package-shell-assets.ps1 b/scripts/winterm/package-shell-assets.ps1 index 728b8ee58..a784fbcce 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.1.0' -or +if ($version.moduleVersion -ne '1.1.1' -or $version.modulePrerelease -ne '' -or - $version.applicationVersion -ne '1.1.0' -or + $version.applicationVersion -ne '1.1.1' -or $version.protocolVersion -ne 1) { throw 'The winTerm Shell asset version metadata is invalid.' diff --git a/scripts/winterm/test.ps1 b/scripts/winterm/test.ps1 index 587f335c3..954d41b7c 100644 --- a/scripts/winterm/test.ps1 +++ b/scripts/winterm/test.ps1 @@ -101,7 +101,7 @@ function Test-ShellExperienceFoundations } $manifest = Import-PowerShellDataFile -LiteralPath $moduleManifest - if ($manifest.ModuleVersion -ne '1.1.0' -or + if ($manifest.ModuleVersion -ne '1.1.1' -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 4eb5ca728..e2a468de0 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.1.0.0') -Message "$Path uses package version 1.1.0.0" + Test-Requirement -Condition ($null -ne $identity -and $identity.Version -eq '1.1.1.0') -Message "$Path uses package version 1.1.1.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 5151db177..44e85de79 100644 --- a/scripts/winterm/verify-version.ps1 +++ b/scripts/winterm/verify-version.ps1 @@ -49,12 +49,12 @@ try $versionPath = Join-Path $repositoryRoot 'src\winterm\Branding\version.json' $version = Get-Content -LiteralPath $versionPath -Raw | ConvertFrom-Json - Assert-Condition ($version.applicationVersion -eq '1.1.0') 'Application version is 1.1.0' - Assert-Condition ($version.packageVersion -eq '1.1.0.0') 'Package version is 1.1.0.0' - Assert-Condition ($version.moduleVersion -eq '1.1.0') 'PowerShell module version is 1.1.0' + Assert-Condition ($version.applicationVersion -eq '1.1.1') 'Application version is 1.1.1' + Assert-Condition ($version.packageVersion -eq '1.1.1.0') 'Package version is 1.1.1.0' + Assert-Condition ($version.moduleVersion -eq '1.1.1') 'PowerShell module version is 1.1.1' Assert-Condition ($version.modulePrerelease -eq '') 'PowerShell module has no prerelease suffix' Assert-Condition ($version.channel -eq 'stable') 'Release channel is stable' - Assert-Condition ($version.tag -eq 'v1.1.0') 'Stable tag is v1.1.0' + Assert-Condition ($version.tag -eq 'v1.1.1') 'Stable tag is v1.1.1' 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' @@ -78,7 +78,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.1.0'")) 'PowerShell module runtime version matches release metadata' + Assert-Condition ((Get-Text 'shell\powershell\winTerm.Shell\winTerm.Shell.psm1').Contains("`$script:WinTermModuleVersion = '1.1.1'")) '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' @@ -86,7 +86,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.1.0" }')) 'About metadata application version is 1.1.0' + Assert-Condition ($releaseHeader.Contains('ApplicationVersion{ L"1.1.1" }')) 'About metadata application version is 1.1.1' 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' @@ -98,25 +98,26 @@ try $packageVersionTuple = $version.packageVersion.Replace('.', ',') Assert-Condition ($hostResource.Contains("FILEVERSION $packageVersionTuple")) 'Terminal host file version matches release metadata' Assert-Condition ($hostResource.Contains("PRODUCTVERSION $packageVersionTuple")) 'Terminal host numeric product version matches release metadata' + Assert-Condition ($hostResource.Contains("`"FileVersion`", `"$($version.packageVersion)\0`"")) 'Terminal host display file version matches release metadata' Assert-Condition ($hostResource.Contains("`"ProductVersion`", `"$($version.applicationVersion)\0`"")) 'Terminal host display product version matches release metadata' 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\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.1.0"')) 'Workspace application-version fallback is 1.1.0' + Assert-Condition ((Get-Text 'src\winterm\Workspaces\Persistence\WorkspaceSerializer.cpp').Contains('"1.1.1"')) 'Workspace application-version fallback is 1.1.1' $releaseWorkflow = Get-Text '.github\workflows\release.yml' Assert-Condition ($releaseWorkflow.Contains("- 'v*'")) 'Release workflow accepts version tags through a generic guarded trigger' 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.1.0 - 2026-07-23')) 'Changelog contains 1.1.0' + Assert-Condition ((Get-Text 'CHANGELOG.md').Contains('## 1.1.1 - 2026-07-24')) 'Changelog contains 1.1.1' 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.1.0' + Assert-Condition ($LASTEXITCODE -eq 0 -and $tag -eq $version.tag) 'Checked-out commit is exactly tagged v1.1.1' } 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 da2fbf47d..f181e225d 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.1.0' + ModuleVersion = '1.1.1' 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 1b2dc705f..5b3df46b8 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.1.0' +$script:WinTermModuleVersion = '1.1.1' $script:WinTermProtocolVersion = 1 $script:WinTermIntegrationEnabled = $false $script:WinTermPromptWrapped = $false diff --git a/shell/shared/version.json b/shell/shared/version.json index cac93dc03..b6e947a6f 100644 --- a/shell/shared/version.json +++ b/shell/shared/version.json @@ -1,6 +1,6 @@ { - "applicationVersion": "1.1.0", - "moduleVersion": "1.1.0", + "applicationVersion": "1.1.1", + "moduleVersion": "1.1.1", "modulePrerelease": "", "protocolVersion": 1 } diff --git a/src/cascadia/CascadiaPackage/Package-winTerm.appxmanifest b/src/cascadia/CascadiaPackage/Package-winTerm.appxmanifest index 2fd6e73a5..3e3c73baf 100644 --- a/src/cascadia/CascadiaPackage/Package-winTerm.appxmanifest +++ b/src/cascadia/CascadiaPackage/Package-winTerm.appxmanifest @@ -18,7 +18,7 @@ + Version="1.1.1.0" /> winTerm diff --git a/src/cascadia/WindowsTerminal/WindowsTerminal.rc b/src/cascadia/WindowsTerminal/WindowsTerminal.rc index 4463dba12..f6fc8985a 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,1,0,0 - PRODUCTVERSION 1,1,0,0 + FILEVERSION 1,1,1,0 + PRODUCTVERSION 1,1,1,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.0.8.0\0" + VALUE "FileVersion", "1.1.1.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.1.0\0" + VALUE "ProductVersion", "1.1.1\0" END END BLOCK "VarFileInfo" diff --git a/src/winterm/Branding/ReleaseMetadata.h b/src/winterm/Branding/ReleaseMetadata.h index 6bfab2ff4..3e1537375 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.1.0" }; + inline constexpr std::wstring_view ApplicationVersion{ L"1.1.1" }; 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 354cb20a3..3edbbefa8 100644 --- a/src/winterm/Branding/version.json +++ b/src/winterm/Branding/version.json @@ -1,10 +1,10 @@ { - "applicationVersion": "1.1.0", - "packageVersion": "1.1.0.0", - "moduleVersion": "1.1.0", + "applicationVersion": "1.1.1", + "packageVersion": "1.1.1.0", + "moduleVersion": "1.1.1", "modulePrerelease": "", "channel": "stable", - "tag": "v1.1.0", + "tag": "v1.1.1", "workspaceSchemaVersion": 2, "dockingModelVersion": 1, "shellProtocolVersion": 1, diff --git a/src/winterm/Workspaces/Model/WorkspaceDescriptor.h b/src/winterm/Workspaces/Model/WorkspaceDescriptor.h index 69df8f03e..e28d36ebe 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.1.0" }; + std::string applicationVersion{ "1.1.1" }; 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 c2c5b59e0..3adfa3960 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.1.0"); + workspace.applicationVersion = StringOrDefault(json, "applicationVersion", "1.1.1"); workspace.protocolVersion = UIntOrDefault(json, "protocolVersion", 1); workspace.dockingModelVersion = UIntOrDefault(json, "dockingModelVersion", DockingModelVersion); if (const auto& startup = json["startupBehavior"]; !startup.isNull())