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-alpha3 - 2026-08-04

Fixes for the five alpha2 field reports.
Third alpha prerelease: fixes for the five alpha2 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 Down Expand Up @@ -35,6 +38,12 @@ Fixes for the five alpha2 field reports.
into the session. The component is skipped and recorded in diagnostics;
shell integration and the remaining commands still load.

### Changed

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

## 1.3.0-alpha2 - 2026-08-04

Second alpha prerelease: fixes for the four alpha1 field reports. Like alpha1,
Expand Down
46 changes: 33 additions & 13 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-alpha2`
- Base branch: `main` at `18310e9f` (alpha1 field-report fixes, pull
request #32)
- Branch: `release/v1.3.0-alpha3`
- Base branch: `main` at `e0fd786c` (alpha2 field-report fixes, pull
request #34)
- Microsoft Terminal upstream revision:
`1cea42d433253d95c4487a3037db48197b5e72f4`
- Application version: `1.3.0-alpha2`
- Package/file version: `1.3.0.1`
- PowerShell module version: `1.3.0` with prerelease suffix `alpha2`
- Application version: `1.3.0-alpha3`
- Package/file version: `1.3.0.2`
- PowerShell module version: `1.3.0` with prerelease suffix `alpha3`
- Release channel: `alpha`
- Release tag: `v1.3.0-alpha2`
- Release tag: `v1.3.0-alpha3`
- Current public Latest: `v1.2.0`, the stable Visual Progress release
- Supported target: Windows 11 x64

`v1.3.0-alpha2` follows `v1.3.0-alpha1` as a GitHub **prerelease** for local
testing, carrying the four field-report fixes. The release workflow marks any
`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
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,10 +48,30 @@ 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`.

## Alpha2 field reports

Local testing of `v1.3.0-alpha2` surfaced five issues, all fixed on `main`
through pull request #34:

1. Stray `\` characters before every prompt: the module's OSC terminator was
a two-character PowerShell string; it is now a single backslash.
2. The Timeline captured the whole prompt line and Load inserted the prompt
path: the marks were console side effects; they are now embedded in the
returned prompt string in FinalTerm order.
3. The Visual Progress bar animated at an idle integrated prompt: `133;B`
(composing input) no longer shows a bar; only `133;C` does.
4. A phantom `Command text unavailable / Running` row for the active prompt:
a `133;B`-only mark no longer creates a Timeline entry.
5. Rows jumped on arrow keys and hover: selection-only updates now reuse the
existing rows.

An antivirus-blocked module component (seen with `Compatibility.ps1`) is now
skipped silently and reported through diagnostics.

## Alpha1 field reports

Local testing of `v1.3.0-alpha1` surfaced four issues, all addressed on this
branch:
Local testing of `v1.3.0-alpha1` surfaced four issues, all fixed on `main`
through pull request #32:

1. The Timeline handle covered terminal content. It is now a thin auto-hiding
strip on the terminal's left edge that widens on hover, focus, or while the
Expand All @@ -70,8 +90,8 @@ branch:

## Next steps

1. Install `v1.3.0-alpha2` locally and re-test the four fixes.
2. Cut `v1.3.0-beta1` on channel `beta` once alpha2 passes local testing. The
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
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
121 changes: 121 additions & 0 deletions docs/releases/1.3.0-alpha3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# winTerm 1.3.0-alpha3

**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-alpha3 fixes the five issues reported from local testing of
[1.3.0-alpha2](https://github.com/HelloThisWorld/winTerm/releases/tag/v1.3.0-alpha2).
The Command Timeline feature set is otherwise unchanged.

## Changes since alpha2

- **No more stray `\` characters before the prompt.** The shell integration
module terminated every escape sequence with two characters instead of one,
so the terminal printed a leftover backslash per emitted mark — three before
the first prompt and four after each command.
- **The Timeline records exactly the typed command.** The prompt marks were
written as console side effects, which the console host prints before a
prompt function's returned text, so the command-start mark landed before the
visible prompt: entries read like `\PS C:\Users\you> cd`, and Load inserted
that whole text. The marks are now embedded in the returned prompt string in
FinalTerm order, so entries contain only what you typed, Load inserts only
the command, and completed commands resolve to ✓/✕ status instead of
staying Unknown.
- **No progress bar at an idle prompt.** A shell-integrated pane no longer
animates the Visual Progress bar while waiting for input; the bar appears
when a command actually executes and clears at the next prompt.
- **No phantom Timeline row.** The active prompt no longer produces a
`Command text unavailable` / `Running` entry. An entry appears when a
command executes.
- **No row jitter.** Moving the selection with the arrow keys or hovering
with the mouse no longer makes Timeline rows jump; selection changes reuse
the existing rows.
- **Quieter startup under strict antivirus.** If an antivirus engine blocks a
module component at parse time (observed for `Compatibility.ps1`), the
session no longer shows a red parse error. The component is skipped, the
optional compatibility commands are simply absent, shell integration still
works, and `Get-WinTermShellDiagnostics` reports the redacted failure.

## 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 release notes](https://github.com/HelloThisWorld/winTerm/releases/tag/v1.3.0-alpha2)
for the auto-integration rules and the
[1.3.0-alpha1 release 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 alpha3 over an earlier alpha is supported; the file version
advances to `1.3.0.2`.

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

## Signing

The winTerm 1.3.0-alpha3 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 'alpha2' -or
$version.applicationVersion -ne '1.3.0-alpha2' -or
$version.modulePrerelease -ne 'alpha3' -or
$version.applicationVersion -ne '1.3.0-alpha3' -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-alpha2'
packageVersion = '1.3.0.1'
applicationVersion = '1.3.0-alpha3'
packageVersion = '1.3.0.2'
moduleVersion = '1.3.0'
modulePrerelease = 'alpha2'
modulePrerelease = 'alpha3'
channel = 'alpha'
tag = 'v1.3.0-alpha2'
tag = 'v1.3.0-alpha3'
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-alpha2' -or $shellVersion.moduleVersion -ne '1.3.0' -or $shellVersion.protocolVersion -ne 1)
if ($shellVersion.applicationVersion -ne '1.3.0-alpha3' -or $shellVersion.moduleVersion -ne '1.3.0' -or $shellVersion.protocolVersion -ne 1)
{
throw 'Shell version metadata does not match winTerm release 1.3.0-alpha2 with protocol version 1.'
throw 'Shell version metadata does not match winTerm release 1.3.0-alpha3 with protocol version 1.'
}
foreach ($surface in @(
@{ Content = $source.ReleaseMetadata; Value = 'ApplicationVersion{ L"1.3.0-alpha2" }'; Description = 'About release metadata' },
@{ Content = $source.PackageManifest; Value = 'Version="1.3.0.1"'; Description = 'MSIX package manifest' },
@{ Content = $source.HostResource; Value = 'FILEVERSION 1,3,0,1'; Description = 'Terminal host file version' },
@{ Content = $source.HostResource; Value = '"ProductVersion", "1.3.0-alpha2\0"'; Description = 'Terminal host display version' },
@{ Content = $source.ShimResource; Value = 'FILEVERSION 1,3,0,1'; Description = 'Shim file version' },
@{ Content = $source.ShimResource; Value = '"ProductVersion", "1.3.0-alpha2\0"'; Description = 'Shim display version' },
@{ 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.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-alpha2"'; Description = 'Workspace application-version fallback' }
@{ Content = $source.WorkspaceSerializer; Value = '"1.3.0-alpha3"'; Description = 'Workspace application-version fallback' }
))
{
Assert-Contains $surface.Content $surface.Value $surface.Description
}
foreach ($required in @(
"applicationVersion -eq '1.3.0-alpha2'",
"packageVersion -eq '1.3.0.1'",
"applicationVersion -eq '1.3.0-alpha3'",
"packageVersion -eq '1.3.0.2'",
"moduleVersion -eq '1.3.0'",
"tag -eq 'v1.3.0-alpha2'",
"tag -eq 'v1.3.0-alpha3'",
"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-alpha2 version validation surface'
Assert-Contains $source.VerifyVersion $required 'Authoritative v1.3.0-alpha3 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 'alpha2' -or
$manifest.PrivateData.PSData.Prerelease -ne 'alpha3' -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.1') -Message "$Path uses package version 1.3.0.1"
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 $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