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
13 changes: 11 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
# Changelog

## Unreleased
## 1.3.0-alpha4 - 2026-08-04

Fixes for the three alpha3 field reports.
Fourth alpha prerelease: fixes for the three alpha3 field reports. Like the
previous alphas, this is published only as a tagged GitHub prerelease for
local testing — GitHub Latest and the winTerm website continue to point at
v1.2.0, and this version is not submitted to WinGet.

### Fixed

Expand All @@ -29,6 +32,12 @@ Fixes for the three alpha3 field reports.
did not report a result for this command, and that success and failure are
shown only when shell integration reports them.

### Changed

- Advanced the package/file version to `1.3.0.3`. The application version is
`1.3.0-alpha4`, the PowerShell module stays `1.3.0` with prerelease suffix
`alpha4`, and the channel stays `alpha`.

## 1.3.0-alpha3 - 2026-08-04

Third alpha prerelease: fixes for the five alpha2 field reports. Like the
Expand Down
38 changes: 27 additions & 11 deletions docs/current-progress.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@ Last updated: 2026-08-04

## Repository state

- Branch: `release/v1.3.0-alpha3`
- Base branch: `main` at `e0fd786c` (alpha2 field-report fixes, pull
request #34)
- Branch: `release/v1.3.0-alpha4`
- Base branch: `main` at `49ee5eb3` (alpha3 field-report fixes, pull
request #36)
- Microsoft Terminal upstream revision:
`1cea42d433253d95c4487a3037db48197b5e72f4`
- Application version: `1.3.0-alpha3`
- Package/file version: `1.3.0.2`
- PowerShell module version: `1.3.0` with prerelease suffix `alpha3`
- 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-alpha3`
- Release tag: `v1.3.0-alpha4`
- Current public Latest: `v1.2.0`, the stable Visual Progress release
- Supported target: Windows 11 x64

`v1.3.0-alpha3` follows `v1.3.0-alpha2` as a GitHub **prerelease** for local
testing, carrying the five alpha2 field-report fixes. The release workflow marks any
`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.
Expand Down Expand Up @@ -48,6 +48,22 @@ prerelease suffix. The package version stays four-part numeric for MSIX and the
Win32 resource fields, and the PowerShell module version stays numeric with the
suffix carried in `PrivateData.PSData.Prerelease`.

## Alpha3 field reports

Local testing of `v1.3.0-alpha3` surfaced three issues, all fixed on `main`
through pull request #36:

1. An antivirus alert on every new PowerShell tab: the `touch` command's raw
`File::Open` write plus same-file command dispatch read as a
write-then-execute pattern; creation now uses `New-Item` and the module
loads clean.
2. Every completed command displayed `? Unknown`: the Enter keypress
heuristic never notified the lifecycle, so the capability chain never read
Full. Enter now reports the executed transition for shell-established
marks with non-empty input, restoring Running and the ✓/✕ results.
3. Long commands were unreadable: rows now carry a full-command tooltip, and
the Unknown status explains itself on hover.

## Alpha2 field reports

Local testing of `v1.3.0-alpha2` surfaced five issues, all fixed on `main`
Expand Down Expand Up @@ -90,8 +106,8 @@ through pull request #32:

## Next steps

1. Install `v1.3.0-alpha3` locally and re-test the five fixes.
2. Cut `v1.3.0-beta1` on channel `beta` once alpha3 passes local testing. The
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.
3. Promote to a stable `v1.3.0` only after beta testing, which is the point at
Expand Down
115 changes: 115 additions & 0 deletions docs/releases/1.3.0-alpha4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# winTerm 1.3.0-alpha4

**This is an alpha prerelease for local testing. It is not a stable release.**
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. This alpha is published only as a
tagged GitHub prerelease; it is not listed on the winTerm website and is not
submitted to WinGet.

winTerm 1.3.0-alpha4 fixes the three issues reported from local testing of
[1.3.0-alpha3](https://github.com/HelloThisWorld/winTerm/releases/tag/v1.3.0-alpha3).
The Command Timeline feature set is otherwise unchanged.

## Changes since alpha3

- **No more antivirus alert when opening a PowerShell tab.** The `touch`
compatibility command created files through a raw `File::Open` write call;
combined with the command-dispatch code in the same script, antivirus
heuristics read the file as a write-then-execute pattern and flagged the
module on every load. File creation now uses `New-Item` — behavior is
identical (create if missing, refresh the timestamp without truncating
otherwise) — and the module loads clean on the engine that previously
flagged it. If your antivirus cached a verdict for the old file, the alert
should disappear after this update; re-scan or clear its cache if it
persists.
- **Completed commands now show ✓/✕ instead of `? Unknown`.** The Enter
keypress supplies the command-executed transition in the supported
PowerShell flow, but it never informed the Timeline's lifecycle, so no
command ever counted as fully reported and every result displayed as
Unknown. Commands you run now show **Running** while they execute and
resolve to ✓ Succeeded or ✕ Failed when the shell reports the exit code.
`Unknown` still appears when the shell genuinely did not report a result —
hover it for the explanation.
- **Long commands are readable.** Hover any Timeline row to see the full
command text in a wrapped tooltip.

## Command Timeline overview

The Command Timeline is a per-pane, in-memory list of the commands that pane
has run, built from OSC 133 shell integration only. Open it with `Ctrl+Tab`,
or with the thin handle on the left edge of the terminal. Bare PowerShell
profiles get shell integration automatically. See the
[1.3.0-alpha2 notes](https://github.com/HelloThisWorld/winTerm/releases/tag/v1.3.0-alpha2)
for the auto-integration rules and the
[1.3.0-alpha1 notes](https://github.com/HelloThisWorld/winTerm/releases/tag/v1.3.0-alpha1)
for the full keyboard map.

## Settings

```json
{
"commandTimeline.enabled": true,
"commandTimeline.historyLimit": 500
}
```

Per profile:

```json
{
"shellIntegration.autoInject": true
}
```

An existing settings file needs no migration.

## 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.

## 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 alpha4 over an earlier alpha is supported; the file version
advances to `1.3.0.3`.

Publisher: `helloThisWorld`. Tag: `v1.3.0-alpha4`.

## Signing

The winTerm 1.3.0-alpha4 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)
4 changes: 2 additions & 2 deletions scripts/winterm/package-shell-assets.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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 'alpha3' -or
$version.applicationVersion -ne '1.3.0-alpha3' -or
$version.modulePrerelease -ne 'alpha4' -or
$version.applicationVersion -ne '1.3.0-alpha4' -or
$version.protocolVersion -ne 1)
{
throw 'The winTerm Shell asset version metadata is invalid.'
Expand Down
34 changes: 17 additions & 17 deletions scripts/winterm/test-visual-progress.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -1378,12 +1378,12 @@ try

$version = $source.VersionMetadata | ConvertFrom-Json
$expectedVersionValues = [ordered]@{
applicationVersion = '1.3.0-alpha3'
packageVersion = '1.3.0.2'
applicationVersion = '1.3.0-alpha4'
packageVersion = '1.3.0.3'
moduleVersion = '1.3.0'
modulePrerelease = 'alpha3'
modulePrerelease = 'alpha4'
channel = 'alpha'
tag = 'v1.3.0-alpha3'
tag = 'v1.3.0-alpha4'
workspaceSchemaVersion = 2
dockingModelVersion = 1
shellProtocolVersion = 1
Expand All @@ -1398,39 +1398,39 @@ try
}
}
$shellVersion = $source.ShellVersion | ConvertFrom-Json
if ($shellVersion.applicationVersion -ne '1.3.0-alpha3' -or $shellVersion.moduleVersion -ne '1.3.0' -or $shellVersion.protocolVersion -ne 1)
if ($shellVersion.applicationVersion -ne '1.3.0-alpha4' -or $shellVersion.moduleVersion -ne '1.3.0' -or $shellVersion.protocolVersion -ne 1)
{
throw 'Shell version metadata does not match winTerm release 1.3.0-alpha3 with protocol version 1.'
throw 'Shell version metadata does not match winTerm release 1.3.0-alpha4 with protocol version 1.'
}
foreach ($surface in @(
@{ Content = $source.ReleaseMetadata; Value = 'ApplicationVersion{ L"1.3.0-alpha3" }'; Description = 'About release metadata' },
@{ Content = $source.PackageManifest; Value = 'Version="1.3.0.2"'; Description = 'MSIX package manifest' },
@{ Content = $source.HostResource; Value = 'FILEVERSION 1,3,0,2'; Description = 'Terminal host file version' },
@{ Content = $source.HostResource; Value = '"ProductVersion", "1.3.0-alpha3\0"'; Description = 'Terminal host display version' },
@{ Content = $source.ShimResource; Value = 'FILEVERSION 1,3,0,2'; Description = 'Shim file version' },
@{ Content = $source.ShimResource; Value = '"ProductVersion", "1.3.0-alpha3\0"'; Description = 'Shim display version' },
@{ 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.CustomProps; Value = '<VersionMajor>1</VersionMajor>'; Description = 'Executable major version' },
@{ Content = $source.CustomProps; Value = '<VersionMinor>3</VersionMinor>'; 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-alpha3"'; Description = 'Workspace application-version fallback' }
@{ Content = $source.WorkspaceSerializer; Value = '"1.3.0-alpha4"'; Description = 'Workspace application-version fallback' }
))
{
Assert-Contains $surface.Content $surface.Value $surface.Description
}
foreach ($required in @(
"applicationVersion -eq '1.3.0-alpha3'",
"packageVersion -eq '1.3.0.2'",
"applicationVersion -eq '1.3.0-alpha4'",
"packageVersion -eq '1.3.0.3'",
"moduleVersion -eq '1.3.0'",
"tag -eq 'v1.3.0-alpha3'",
"tag -eq 'v1.3.0-alpha4'",
"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-alpha3 version validation surface'
Assert-Contains $source.VerifyVersion $required 'Authoritative v1.3.0-alpha4 version validation surface'
}

$testBinary = Join-Path $root "bin\$Platform\$Configuration\UnitTests_SettingsModel\SettingsModel.Unit.Tests.dll"
Expand Down
2 changes: 1 addition & 1 deletion scripts/winterm/test.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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 'alpha3' -or
$manifest.PrivateData.PSData.Prerelease -ne 'alpha4' -or
$manifest.PowerShellVersion -ne '5.1')
{
throw 'The winTerm PowerShell module manifest does not declare the supported version boundary.'
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.3.0.2') -Message "$Path uses package version 1.3.0.2"
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 $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
Loading