Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ application downloads are:
- `winTerm-<version>-setup-x64.exe` — current-user or all-users installation;
- `winTerm-<version>-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.

Expand All @@ -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

Expand Down Expand Up @@ -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
Expand Down
12 changes: 6 additions & 6 deletions docs/current-progress.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
49 changes: 49 additions & 0 deletions docs/releases/1.1.1.md
Original file line number Diff line number Diff line change
@@ -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.
4 changes: 2 additions & 2 deletions scripts/winterm/package-shell-assets.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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.'
Expand Down
2 changes: 1 addition & 1 deletion scripts/winterm/test.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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')
{
Expand Down
2 changes: 1 addition & 1 deletion scripts/winterm/verify-branding.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
19 changes: 10 additions & 9 deletions scripts/winterm/verify-version.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -78,15 +78,15 @@ 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'
Assert-Condition ($shellVersion.moduleVersion -eq $version.moduleVersion) 'Shell asset module version matches release metadata'
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'
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion shell/powershell/winTerm.Shell/winTerm.Shell.psd1
Original file line number Diff line number Diff line change
@@ -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'
Expand Down
2 changes: 1 addition & 1 deletion shell/powershell/winTerm.Shell/winTerm.Shell.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions shell/shared/version.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"applicationVersion": "1.1.0",
"moduleVersion": "1.1.0",
"applicationVersion": "1.1.1",
"moduleVersion": "1.1.1",
"modulePrerelease": "",
"protocolVersion": 1
}
2 changes: 1 addition & 1 deletion src/cascadia/CascadiaPackage/Package-winTerm.appxmanifest
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<Identity
Name="HelloThisWorld.winTerm"
Publisher="CN=helloThisWorld"
Version="1.1.0.0" />
Version="1.1.1.0" />

<Properties>
<DisplayName>winTerm</DisplayName>
Expand Down
8 changes: 4 additions & 4 deletions src/cascadia/WindowsTerminal/WindowsTerminal.rc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion src/winterm/Branding/ReleaseMetadata.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 };
Expand Down
8 changes: 4 additions & 4 deletions src/winterm/Branding/version.json
Original file line number Diff line number Diff line change
@@ -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,
Expand Down
2 changes: 1 addition & 1 deletion src/winterm/Workspaces/Model/WorkspaceDescriptor.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion src/winterm/Workspaces/Persistence/WorkspaceSerializer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down