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
3 changes: 3 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ List exact commands, environments, results, and any tests that were not availabl
- [ ] Tests were added or updated where appropriate.
- [ ] All tests claimed above actually ran and passed.
- [ ] User-facing behavior and limitations are documented in this repository.
- [ ] This source/docs commit updates the root `CHANGELOG.md`.
- [ ] The Wiki `Development-Changes.md` ledger has been pushed with the final source SHA, link, summary, and checkpoint/release.
- [ ] Documentation screenshots reuse a suitable existing sanitized `winterm-site` asset, or no screenshot was added.
- [ ] Version or schema changes include compatibility and migration notes.
- [ ] Package identity, `winterm.exe`, and Microsoft Terminal coexistence remain isolated.
- [ ] No command text, terminal output, clipboard content, credentials, or private paths are logged.
Expand Down
10 changes: 10 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,16 @@ When the user says `create pr`, follow this workflow:
- Remember that `workflow_dispatch` cannot dispatch a workflow that exists only outside the default branch. Use the pull-request trigger for new workflows or merge them before dispatching.
- Before release operations, check for an existing tag or Release and never overwrite an existing release asset.

## Changelog and Wiki Protocol

- Every winTerm source or documentation commit created by a developer or agent must update the root `CHANGELOG.md` in that same source commit.
- Immediately after creating a source commit, add and push a matching entry in the separate `HelloThisWorld/winTerm.wiki` `Development-Changes.md` ledger. A source commit is not complete until that Wiki commit is published.
- Record the date, final source SHA and link, concise summary, and related checkpoint or release. Update the Wiki if amend, rebase, squash, or merge changes the SHA, including GitHub-generated merge or squash commits.
- Wiki-only synchronization commits do not recursively require another Wiki ledger entry. If the Wiki push fails, report it and do not claim the source commit workflow is complete.
- Do not add a secret-bearing public CI job for Wiki writes or make changelog validation trigger an expensive native build on every pull request.
- For documentation screenshots, first reuse a suitable sanitized original from `HelloThisWorld/winterm-site`. Do not recapture, regenerate, duplicate, crop, round, mask, or frame an equivalent screenshot; use text when no suitable existing image is available.
- Follow `docs/development/changelog-policy.md` for the complete permanent policy.

## Code Rules

- Use English for code, function names, variable names, comments, logs, and error messages.
Expand Down
74 changes: 74 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,79 @@
# Changelog

## 1.2.2 - 2026-08-02

### Added

- Added the pane-owned Command Timeline Phase 2 overlay with a compact
left-side handle. The overlay is layered above the terminal surface and does
not change pane dimensions, terminal rows or columns, swap-chain size, PTY
size, or padding.
- Added a deterministic pure C++ navigation/presentation model that consumes
the Phase 1 index, materializes only visible entries, restores stable command
selection and visual slots, reconciles clear/eviction/reflow, and preserves
older-history browsing when new commands arrive.
- Added keyboard-only Up, Down, Left, Right, and Escape navigation, hover and
click selection, page-edge one-in/one-out behavior, and pane-local
high-precision wheel/trackpad accumulation with complete-row settling.
- Added list/list-item selection semantics, localized accessible names and
trustworthy status text, status glyphs that do not rely on color, themed
High Contrast presentation, and a no-animation Reduced Motion-safe path.
- Added focused model, control source-boundary, settings, shortcut collision,
user-override, pane isolation, cleanup, warm-access, and privacy coverage.

### Changed

- Remapped the canonical defaults to `Ctrl+Tab` for the focused pane's Command
Timeline, `Ctrl+T` for the next tab, `Ctrl+Shift+T` for the previous tab, and
`Ctrl+Alt+T` for a new tab. Explicit user key bindings retain precedence.
- Advanced engineering application and PowerShell module versions to `1.2.2`,
package/file versions to `1.2.2.0`, and the intended checkpoint tag to
`v1.2.2`; workspace, docking, shell, theme, update-manifest, package identity,
and signing-policy versions remain unchanged.
- Established the canonical root changelog plus GitHub Wiki changelog and
per-source-commit development ledger, together with permanent contributor,
agent, and pull-request policy for keeping them synchronized.

### Fixed

- Replaced the README's stale `winterm-full-build.yml` Windows build badge with
a Windows CI badge and link for the existing `winterm-validation.yml`
workflow.

### Checkpoint status

- `v1.2.2` is an engineering checkpoint for Command Timeline Phase 2, not a
public GitHub Release. GitHub Latest and README public downloads remain on
v1.2.0. Command insertion, copy, paste, execution, output jumping, and search
remain reserved for later phases.

## 1.2.1 - 2026-08-02

### Added

- Added the pane-owned Command Timeline Phase 1 data layer with stable
pane-scoped command IDs, native mark identity, an incremental OSC 133
lifecycle, trustworthy completion mapping, bounded command-text caching, and
no command-output cache or persistence.
- Added cold bootstrap through native mark extents and warm access keyed by
`markRevision`, so unchanged reads do not rescan the TextBuffer.
- Added clear, scrollback-eviction, reflow, and pane-close cleanup that retains
surviving native identities without duplicate entries or cross-pane state.
- Added focused deterministic and native OSC component tests for lifecycle,
identity, capability, privacy, reflow, pruning, warm access, and cleanup.

### Changed

- Added bounded TAEF process-tree cleanup for hanging compiled tests and
label-gated CI classification so ordinary pull requests run quick validation
without an expensive native build; `build`, `delivery`, and `ci:full` remain
explicit maintainer-selected gates.

### Checkpoint status

- `v1.2.1` is an engineering checkpoint, not a public GitHub Release. It added
no Timeline overlay, input behavior, installer, Latest, or website change.

## 1.2.0 - 2026-08-01

### Added
Expand Down
3 changes: 3 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ Do not claim a build, package, architecture, signature, installer, or runtime te
- Avoid large formatting-only changes, generated output, absolute paths, secrets, certificates, and unrelated changes.
- Preserve Microsoft Terminal copyright, licenses, and third-party notices.
- Keep commits focused and do not rewrite public history or force-push release work.
- Update the root `CHANGELOG.md` in every source or documentation commit. After the source commit exists, immediately add its final SHA, link, summary, and checkpoint/release to the Wiki `Development-Changes.md` ledger and push the Wiki commit. Amend, rebase, squash, and GitHub merge SHAs must be corrected or added in the Wiki; a source commit is not complete until the matching Wiki commit is published.
- Wiki-only synchronization commits do not require recursive Wiki entries. Report a Wiki push failure instead of claiming the workflow is complete, and do not add secret-bearing or expensive native-build CI to automate this policy.
- Reuse suitable sanitized application screenshots from `HelloThisWorld/winterm-site` before adding documentation imagery. Do not recapture or regenerate an equivalent image. See `docs/development/changelog-policy.md`.

## Pull requests

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# winTerm

[![Validation](https://github.com/HelloThisWorld/winTerm/actions/workflows/winterm-validation.yml/badge.svg)](https://github.com/HelloThisWorld/winTerm/actions/workflows/winterm-validation.yml)
[![Windows build](https://github.com/HelloThisWorld/winTerm/actions/workflows/winterm-full-build.yml/badge.svg)](https://github.com/HelloThisWorld/winTerm/actions/workflows/winterm-full-build.yml)
[![Windows CI](https://img.shields.io/github/actions/workflow/status/HelloThisWorld/winTerm/winterm-validation.yml?branch=main&label=Windows%20CI)](https://github.com/HelloThisWorld/winTerm/actions/workflows/winterm-validation.yml)
[![Latest release](https://img.shields.io/github/v/release/HelloThisWorld/winTerm?display_name=tag&label=release)](https://github.com/HelloThisWorld/winTerm/releases/latest)

## Download the latest winTerm release
Expand Down
77 changes: 43 additions & 34 deletions docs/current-progress.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,54 +5,63 @@ Last updated: 2026-08-02
## Repository state

- Branch: `feature/command-timeline-v1.3.0`
- Starting commit: `59020ff093ce8061d228d3aa3248f57a3b3301ef`
- Starting commit: `abb581a2a` (`main` after Command Timeline Phase 1 and the
label-gated CI/test-hang follow-up)
- Microsoft Terminal upstream revision:
`1cea42d433253d95c4487a3037db48197b5e72f4`
- Engineering application and PowerShell module version: `1.2.1`
- Engineering package version: `1.2.1.0`
- Intended checkpoint tag: `v1.2.1`
- Engineering application and PowerShell module version: `1.2.2`
- Engineering package version: `1.2.2.0`
- Intended checkpoint tag: `v1.2.2`
- Final Command Timeline release target: `v1.3.0`
- Current public Latest: `v1.2.0`
- Supported target: Windows 11 x64

`v1.2.1` is a development checkpoint, not a distributable release. The README
`v1.2.2` is a development checkpoint, not a distributable release. The README
and GitHub Latest continue to identify v1.2.0 as the public Visual Progress
release. Checkpoint tags v1.2.1 through v1.2.4 run quick validation only and are
explicitly excluded from full build, installer packaging, asset publication,
and GitHub Release jobs.

## Implemented in the working tree

- Added the Command Timeline Phase 1 data layer with a pane-owned index, view
state, bounded command-text cache, and stable IDs composed from the pane
session ID plus a monotonically increasing sequence.
- Extended native scrollbar mark metadata with an internal-only identity. The
identity follows existing TextBuffer row copying and reflow and is never
emitted into terminal text, OSC payloads, settings, workspaces, telemetry, or
persistent storage.
- Reused the existing OSC 133 `StartPrompt`, `StartCommand`, `StartOutput`, and
`EndCurrentCommand` lifecycle. Updates are incremental and idempotent;
trustworthy completion codes alone map to success or failure.
- Added cold bootstrap through the existing native mark extents API and a
pane-scoped mark revision seam. Warm reads with an unchanged revision return
the cached index without rescanning the TextBuffer.
- Added explicit pruning for clear, circular-buffer eviction, and reflow loss.
Reflow reports surviving native identities during its existing traversal, so
resize preserves command IDs without a second full mark scan.
- Added deterministic model tests and a real native OSC component test covering
stable identity, pane isolation, lifecycle ordering, capability, pruning,
reflow, cache privacy, view-state ownership, and repeatable cleanup.
- Kept Phase 1 data-only: no pane handle, Timeline overlay, settings surface,
input behavior, installer, website, or public release change was added.
- Retained the Command Timeline Phase 1 pane-owned index, bounded command-text
cache, stable IDs, native mark identity, incremental OSC 133 lifecycle, warm
bootstrap, and clear/eviction/reflow cleanup as the only history data source.
- Added a pane-owned pure C++ navigation and presentation model. It restores a
valid selected ID, native anchor, and visual slot; defaults to the latest
command; chooses the nearest surviving ID after removal; and materializes
only the visible rows required by the pane.
- Added a TermControl left-side handle and overlay layered over the terminal
surface. It does not change terminal layout, padding, swap-chain or PTY size,
and its closed state leaves all other terminal pointer input untouched.
- Added Up/Down one-entry movement, page-edge one-in/one-out viewport movement,
Left/Right current-page edge selection, hover/click-only selection, Escape
close, and focused-pane toggle routing through the existing action system.
- Added pane-local wheel/trackpad delta accumulation and a lifetime-safe settle
timer. Partial deltas are accumulated, direction reversal cancels unfinished
motion, full thresholds move complete rows, and hide/close stop the timer and
clear UI-only entries.
- Added localized list/list-item accessibility, open/close handle names,
command-plus-status names, non-color status glyphs, High Contrast-aware theme
resources, and a Reduced Motion-safe path without a continuous animation.
- Remapped canonical defaults to `Ctrl+Tab` (Timeline), `Ctrl+T` (next tab),
`Ctrl+Shift+T` (previous tab), and `Ctrl+Alt+T` (new tab), while retaining
user-defined keybinding precedence and existing IME/AltGr ordering.
- Advanced authoritative engineering version surfaces to `1.2.2`/`1.2.2.0`,
fixed the README Windows CI badge, added v1.2.1 and v1.2.2 root changelog
entries, and established the permanent root changelog/Wiki ledger policy.
- Kept Phase 3 out of scope: entry click and hover only select. They do not
insert, paste, copy, execute, close, or jump to command output.

## Validation state

The focused x64 Debug Command Timeline target builds successfully, and all 12
deterministic unit/component tests pass. Repository Smoke/static validation,
version consistency, checkpoint guard checks, and YAML parsing also pass. The
annotated checkpoint tag must point to this verified commit; the tag-triggered
quick workflow remains the remote confirmation gate.
Phase 2 validation requires the focused Command Timeline model/control tests,
Settings Model shortcut tests, TerminalApp action routing checks, XML/XAML/JSON
and PowerShell parsing, version/checkpoint guards, repository Smoke validation,
the smallest affected native projects, README badge verification, and GitHub
quick PR validation. Record exact results in the Draft PR and final task report;
do not treat this document as evidence for a command that did not run.

The existing public v1.2.0 Visual Progress feature and its release notes remain
the stable user-facing milestone. The Command Timeline work is not public
release documentation and does not change the `/releases/latest` route.
The annotated `v1.2.2` checkpoint tag must point to the final commit that passes
those gates. Its tag workflow must run checkpoint quick validation only and
must not create a GitHub Release or update Latest.
26 changes: 26 additions & 0 deletions docs/development/changelog-policy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Changelog and documentation asset policy

The root `CHANGELOG.md` is the canonical version history for winTerm. Every
source or documentation commit created by a developer or automation agent must
update `CHANGELOG.md` in that same source commit. A source commit is not
complete until a matching commit has also been pushed to the separate
`HelloThisWorld/winTerm.wiki` repository.

Each `Development-Changes.md` Wiki entry must record the date, final source
commit SHA and link, a concise summary, and its related checkpoint or release.
If amend, rebase, squash, or another operation changes the source SHA, update
the Wiki entry to the final SHA. GitHub-generated merge or squash commits must
also be added once their final SHA exists. Commits that only synchronize the
Wiki do not recursively require another Wiki ledger entry.

If the Wiki cannot be pushed, report that explicitly. Do not describe the
source commit workflow as complete until the corresponding Wiki commit is
published. Public CI must not use a secret-bearing job to write to the Wiki,
and changelog validation must not cause every pull request to run an expensive
native build.

When application documentation benefits from a screenshot, inspect the
existing sanitized assets in `HelloThisWorld/winterm-site` first and reuse an
appropriate original image. Do not recapture, regenerate, duplicate, crop,
round, mask, or place an equivalent screenshot in a simulated browser frame.
If no suitable existing asset is available, keep the documentation text-only.
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.2.1' -or
if ($version.moduleVersion -ne '1.2.2' -or
$version.modulePrerelease -ne '' -or
$version.applicationVersion -ne '1.2.1' -or
$version.applicationVersion -ne '1.2.2' -or
$version.protocolVersion -ne 1)
{
throw 'The winTerm Shell asset version metadata is invalid.'
Expand Down
Loading
Loading