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

## Unreleased
## 1.3.0-alpha2 - 2026-08-04

Fixes for the four alpha1 field reports, ahead of the 1.3.0 beta.
Second alpha prerelease: fixes for the four alpha1 field reports. Like alpha1,
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.

### Added

Expand Down Expand Up @@ -34,6 +37,13 @@ Fixes for the four alpha1 field reports, ahead of the 1.3.0 beta.
as completed/total meters. Success and Error results still persist until a
later publication replaces them.

### Changed

- Advanced the package/file version to `1.3.0.1` so the alpha2 binaries are
distinguishable from alpha1 in `FILEVERSION`/`PRODUCTVERSION`. The
application version is `1.3.0-alpha2`, the PowerShell module stays `1.3.0`
with prerelease suffix `alpha2`, and the channel stays `alpha`.

## 1.3.0-alpha1 - 2026-08-04

First public prerelease of the Command Timeline. This is an alpha for local
Expand Down
31 changes: 16 additions & 15 deletions docs/current-progress.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,24 @@ Last updated: 2026-08-04

## Repository state

- Branch: `fix/alpha1-feedback`
- Base branch: `main` at `ed707550` (1.3.0-alpha1 release metadata, pull
request #31)
- Branch: `release/v1.3.0-alpha2`
- Base branch: `main` at `18310e9f` (alpha1 field-report fixes, pull
request #32)
- Microsoft Terminal upstream revision:
`1cea42d433253d95c4487a3037db48197b5e72f4`
- Application version: `1.3.0-alpha1`
- Package/file version: `1.3.0.0`
- PowerShell module version: `1.3.0` with prerelease suffix `alpha1`
- Application version: `1.3.0-alpha2`
- Package/file version: `1.3.0.1`
- PowerShell module version: `1.3.0` with prerelease suffix `alpha2`
- Release channel: `alpha`
- Release tag: `v1.3.0-alpha1`
- Release tag: `v1.3.0-alpha2`
- Current public Latest: `v1.2.0`, the stable Visual Progress release
- Supported target: Windows 11 x64

`v1.3.0-alpha1` is a published GitHub **prerelease**, not a stable release. 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.
`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
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.

## Command Timeline status

Expand Down Expand Up @@ -70,9 +70,10 @@ branch:

## Next steps

1. Re-test the four fixes locally on a fresh build.
2. Cut `v1.3.0-beta1` on channel `beta`. The beta may be listed on the winTerm
website alongside the stable v1.2.0 download.
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
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
which Latest, WinGet, and the website stable slot move.

Expand Down
157 changes: 157 additions & 0 deletions docs/releases/1.3.0-alpha2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
# winTerm 1.3.0-alpha2

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

## Changes since alpha1

- **Shell integration now works out of the box.** Alpha1 shipped the
`winTerm.Shell` module but nothing imported it, so the Command Timeline never
recorded commands on a fresh install. When a profile's commandline is a bare
`powershell.exe` or `pwsh.exe` invocation (optionally with `-NoLogo` or
`-NoExit`), winTerm now imports the packaged module at startup, and typed
commands appear in the Timeline. Any customized commandline — `-Command`,
`-File`, `-NoProfile`, `-ExecutionPolicy`, or anything else — launches
unchanged. Execution policy is never altered, and if the import fails the
shell still opens normally, only without integration. The new per-profile
setting `"shellIntegration.autoInject"` (default `true`) turns this off.
Because `-Command` is present on the rewritten invocation, PowerShell no
longer prints its startup banner in integrated sessions.
- **The Timeline handle no longer covers terminal content.** It is now a
6-pixel strip flush against the terminal's left edge, like an auto-hiding
scrollbar, and widens to show its chevron on hover, keyboard focus, or while
the Timeline is open.
- **Clicking the terminal closes an open Timeline.** A click on the terminal
area light-dismisses the overlay and still reaches the terminal. `Ctrl+Tab`,
`Escape`, and the handle continue to work as before.
- **The Visual Progress bar no longer gets stuck after ordinary output.** A
`dir` listing could previously start an indeterminate bar that never stopped:
recognition claimed ownership from a bare product-name mention (for example a
`.gradle` directory entry) and kept rematching every later line, and slashed
dates such as `2025/10/13` were read as percentages. Recognition now requires
per-line evidence, releases a still-running bar after two consecutive
ordinary lines, and ignores date shapes. Completed Success and Error states
still persist until the next command's output replaces them.

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

- **Per-pane history.** Each pane keeps its own list. winTerm never guesses
where a prompt or output begins.
- **Load without executing.** `Enter` or a single click puts the selected
command on the input line and stops there. No carriage return is ever sent,
the Windows clipboard is never read, and input broadcast never forwards the
load to another pane.
- **Filtering.** Press `/` or `Tab` and type to narrow the list. Matching is a
plain, case-insensitive substring match over command text only.
- **Copy and jump.** Right-click an entry to copy the command, copy its output,
or scroll to where its output begins. Output is read from the terminal buffer
only at that moment and is never cached.
- **Trustworthy status.** A command shows as succeeded or failed only when the
shell actually reported it.

See the [1.3.0-alpha1 release notes](https://github.com/HelloThisWorld/winTerm/releases/tag/v1.3.0-alpha1)
for the full keyboard map and settings reference.

## Settings

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

New in alpha2, per profile:

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

An existing settings file needs no migration. An out-of-range
`commandTimeline.historyLimit` is clamped rather than failing the settings
load.

## Shell requirements

The Timeline depends on OSC 133 shell integration. With alpha2, the stock
Windows PowerShell and PowerShell 7 profiles get it automatically.

| Situation | What you see |
| --- | --- |
| Capability not yet determined | `Waiting for shell integration` |
| Shell does not report complete command boundaries | `Command timeline unavailable` |
| Shell integration works, no commands yet | `No commands yet` |
| A filter is active and nothing matches | `No matching commands` |

`cmd.exe` does not report command boundaries, and winTerm adds no prompt parser
for it, so the Timeline stays unavailable there rather than showing
untrustworthy results.

## 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. Visual Progress behavior is unchanged apart from the
stuck-bar fix above.

## 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 alpha2 over alpha1 is supported; the file version advances to
`1.3.0.1`.

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

Because this is an alpha, install it alongside or after backing up your
settings. Package identity stays separate from Microsoft Terminal, so it does
not disturb an existing Windows Terminal installation.

## Signing

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