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
2 changes: 1 addition & 1 deletion .github/workflows/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ permissions:
env:
DOTNET_VERSION: 10.0.x
CONFIGURATION: Release
EXPECTED_VERSION: 1.29.1
EXPECTED_VERSION: 1.29.2
PACKAGE_CANDIDATE_ARTIFACT: icod-terminal-main-package-candidate

jobs:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pull-request.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
if: runner.os == 'Windows'
shell: powershell
run: ./packaging/VerifyLicenseHeaders.ps1
- name: Verify native Windows console input and cancellation
- name: Verify native Windows console I/O and restoration
if: runner.os == 'Windows'
timeout-minutes: 3
shell: pwsh
Expand Down
40 changes: 28 additions & 12 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,22 @@

Notable changes to `Icod.Terminal` are recorded here for consumers who need a concise release history. Detailed design evidence remains in the versioned roadmaps, tranche records, and public-API baseline documents.

## 1.29.2

- Configure system-backed Windows console output for UTF-8 while a session owns
it, preventing UTF-8 box-drawing bytes from being decoded as multiple OEM
characters and breaking terminal-cell geometry.
- Restore the exact prior Windows console output code page during disposal,
failed setup, lifecycle release and lifecycle re-entry.
- Make Windows Raw and CBreak modes enable virtual-terminal and mouse input,
enable extended mode flags, and suppress Quick Edit while active.
- Preserve canonical-mode policy, unrelated console-mode flags, raw Ctrl+C and
Ctrl+Z handling, and exact captured-mode restoration.
- Add cross-target unit coverage and an isolated native Windows console smoke
for UTF-8 box drawing, mouse-mode ownership, control keys and restoration.
- Preserve the public API, .NET 8/9/10 targets and production dependencies.
See [1.29.2 release notes](docs/releases/1.29.2.md).

## 1.29.1

- Decode legacy Escape-prefixed Alt letters as a single modified key, including
Expand Down Expand Up @@ -150,7 +166,7 @@ Notable changes to `Icod.Terminal` are recorded here for consumers who need a co
- Retains production dependencies `Icod.TermInfo 1.15.0` and `Icod.Timing 1.0.0`.
- Qualifies fresh package consumers, published `Icod.DCurses 1.6.0` compatibility, and a separate TermInfo-free future-renderer package consumer on all target frameworks.

See `docs/releases/1.18.0.md`, `docs/Public-API-Baseline-1.18.md`, and `Icod.Terminal-1.18.0-Development-Roadmap.md` for the complete contract.
See `docs/releases/1.18.0.md`, `docs/Public-API-Baseline-1.18.md`, and `docs/Icod.Terminal-1.18.0-Development-Roadmap.md` for the complete contract.

## 1.17.1

Expand Down Expand Up @@ -182,7 +198,7 @@ See `docs/releases/1.17.1.md` for the complete patch-release notes.
- Advances the production dependency to `Icod.TermInfo 1.15.0` while retaining `Icod.Timing 1.0.0`; the new screen contracts expose no TermInfo types.
- Aligns optional integration tests and samples with `Icod.TermInfo.Inspection 1.15.0` without adding Inspection or Source to the production graph.

See `docs/releases/1.17.0.md`, `docs/Public-API-Baseline-1.17.md`, and `Icod.Terminal-1.17.0-Development-Roadmap.md` for the complete 1.17 contract.
See `docs/releases/1.17.0.md`, `docs/Public-API-Baseline-1.17.md`, and `docs/Icod.Terminal-1.17.0-Development-Roadmap.md` for the complete 1.17 contract.

## 1.16.0

Expand All @@ -208,7 +224,7 @@ See `docs/releases/1.17.0.md`, `docs/Public-API-Baseline-1.17.md`, and `Icod.Ter
- Finalizes the 1.16 public API fingerprint as `d2acfa85aad87c739b3f682096d4d7139627f12bc9d8981b65529eeb79a2da8d` while retaining all historical baselines unchanged.
- Continues to exclude frame composition/delta editing, partial-frame updates, gapless composition frames, absolute or pixel-within-cell placement, automatic image decoding, Terminal-owned scene/window/cell/damage/layout/timeline policy, public protocol identities, hidden replay caches, and PTY/ConPTY hosting.

See `docs/releases/1.16.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Public-API-Baseline-1.16.md`, and `Icod.Terminal-1.16.0-Development-Roadmap.md` for the complete 1.16 contract.
See `docs/releases/1.16.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Public-API-Baseline-1.16.md`, and `docs/Icod.Terminal-1.16.0-Development-Roadmap.md` for the complete 1.16 contract.

## 1.15.0

Expand Down Expand Up @@ -237,7 +253,7 @@ See `docs/releases/1.16.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Publ
- Finalizes the 1.15 public API fingerprint as `eb361cef615fda97ac2c0ef9da8ea3d63fdc1f537ec438164bcb93694eecd13d` while retaining all historical baselines unchanged.
- Continues to exclude animation/frame ownership, absolute screen-coordinate layout, pixel-within-cell positioning, Terminal-owned scene/window/cell/damage policy, public protocol identities, generic raw Kitty dispatch, hidden replay caches, image decoding/transcoding, and PTY/ConPTY hosting.

See `docs/releases/1.15.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Public-API-Baseline-1.15.md`, and `Icod.Terminal-1.15.0-Development-Roadmap.md` for the complete 1.15 contract.
See `docs/releases/1.15.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Public-API-Baseline-1.15.md`, and `docs/Icod.Terminal-1.15.0-Development-Roadmap.md` for the complete 1.15 contract.

## 1.14.0

Expand Down Expand Up @@ -265,7 +281,7 @@ See `docs/releases/1.15.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Publ
- Uses production dependencies `Icod.TermInfo 1.13.0` and `Icod.Timing 1.0.0`.
- Continues to exclude passive terminal-side existence probes, public protocol/generation identities, reparenting, Unicode placeholder placement, animation/frame lifecycle, absolute or pixel-within-cell placement, scene ownership, automatic replay, image decoding/transcoding, and PTY/ConPTY hosting.

See `docs/releases/1.14.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Public-API-Baseline-1.14.md`, and `Icod.Terminal-1.14.0-Development-Roadmap.md` for the complete 1.14 contract.
See `docs/releases/1.14.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Public-API-Baseline-1.14.md`, and `docs/Icod.Terminal-1.14.0-Development-Roadmap.md` for the complete 1.14 contract.

## 1.13.0

Expand All @@ -290,7 +306,7 @@ See `docs/releases/1.14.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Publ
- Updates the production dependency to `Icod.TermInfo 1.12.0` while retaining `Icod.Timing 1.0.0`.
- Continues to exclude reparenting, public protocol/parent identities, Unicode placeholder placement, animation/frame lifecycle, absolute screen-coordinate layout, pixel-within-cell positioning, scene ownership, automatic replay, image decoding/transcoding, and PTY/ConPTY hosting.

See `docs/releases/1.13.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Public-API-Baseline-1.13.md`, and `Icod.Terminal-1.13.0-Development-Roadmap.md` for the complete 1.13 contract.
See `docs/releases/1.13.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Public-API-Baseline-1.13.md`, and `docs/Icod.Terminal-1.13.0-Development-Roadmap.md` for the complete 1.13 contract.

## 1.12.0

Expand All @@ -315,7 +331,7 @@ See `docs/releases/1.13.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Publ
- Preserves production dependencies at `Icod.TermInfo 1.11.0` and `Icod.Timing 1.0.0`.
- Continues to exclude automatic replay, Sixel persistent-resource emulation, public protocol ids, relative placement graphs, absolute screen-coordinate layout, Unicode placeholders, animation/frame lifecycle, image decoding/transcoding, and PTY/ConPTY hosting.

See `docs/releases/1.12.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Public-API-Baseline-1.12.md`, and `Icod.Terminal-1.12.0-Development-Roadmap.md` for the complete 1.12 contract.
See `docs/releases/1.12.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Public-API-Baseline-1.12.md`, and `docs/Icod.Terminal-1.12.0-Development-Roadmap.md` for the complete 1.12 contract.

## 1.11.1

Expand All @@ -337,7 +353,7 @@ See `docs/releases/1.12.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Publ
- T1111-A through T1111-D completed full pull-request qualification on exact head `651af888875a0d2acababe46a4e1313532ec7ba6` in workflow `#1628 / 34704455179`.
- Deliberately defers a table-driven `TerminalTermInfoSemanticEvidence` cleanup, static lifecycle-evidence ingestion, and any adapter package to later independent design work.

See `docs/releases/1.11.1.md` and `Icod.Terminal-1.11.1-Development-Roadmap.md` for the complete patch-release integration contract.
See `docs/releases/1.11.1.md` and `docs/Icod.Terminal-1.11.1-Development-Roadmap.md` for the complete patch-release integration contract.

## 1.11.0

Expand Down Expand Up @@ -368,7 +384,7 @@ See `docs/releases/1.11.1.md` and `Icod.Terminal-1.11.1-Development-Roadmap.md`
- Finalizes the 1.11 public API fingerprint as `9336a1f6def1c4b02e86db813bae27f45b95af33f47a2cf10dccd4d1d44324f2` while retaining all historical baselines unchanged.
- Deliberately excludes automatic replay, Sixel persistence emulation, public protocol ids, source rectangles, z-order, Unicode placeholders, relative/pixel placement, animation, scene-graph ownership, image decoding/transcoding, and PTY/ConPTY hosting.

See `docs/releases/1.11.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Public-API-Baseline-1.11.md`, `docs/C118-1.11.0-Persistent-Raster-Adversarial-Downstream-and-Package-Qualification.md`, `docs/C119-1.11.0-Release-Closure.md`, and `Icod.Terminal-1.11.0-Development-Roadmap.md` for the complete 1.11 contract.
See `docs/releases/1.11.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Public-API-Baseline-1.11.md`, `docs/C118-1.11.0-Persistent-Raster-Adversarial-Downstream-and-Package-Qualification.md`, `docs/C119-1.11.0-Release-Closure.md`, and `docs/Icod.Terminal-1.11.0-Development-Roadmap.md` for the complete 1.11 contract.

## 1.10.0

Expand Down Expand Up @@ -397,7 +413,7 @@ See `docs/releases/1.11.0.md`, `docs/Persistent-Raster-Ownership.md`, `docs/Publ
- Retains `net8.0`, `net9.0`, and `net10.0`, Windows/Linux/macOS runtime validation, existing `Icod.DCurses` acceptance/soak witnesses, and the stable `1.0.0` compatibility floor.
- Adds no public protocol-backend selector, raw evidence ledger, arbitrary terminfo-capability-name API, terminal-brand heuristic, or requirement that every semantic capability have a live probe.

See `docs/releases/1.10.0.md`, `docs/Capability-Inspection-and-Planning.md`, `docs/Public-API-Baseline-1.10.md`, `docs/C101-Semantic-Capability-Vocabulary-and-API-Regret-Gate.md`, `docs/C105-C108-Capability-Lifecycle-Samples-Hardening-and-API-Freeze.md`, and `Icod.Terminal-1.10.0-Development-Roadmap.md` for the complete 1.10 contract.
See `docs/releases/1.10.0.md`, `docs/Capability-Inspection-and-Planning.md`, `docs/Public-API-Baseline-1.10.md`, `docs/C101-Semantic-Capability-Vocabulary-and-API-Regret-Gate.md`, `docs/C105-C108-Capability-Lifecycle-Samples-Hardening-and-API-Freeze.md`, and `docs/Icod.Terminal-1.10.0-Development-Roadmap.md` for the complete 1.10 contract.

## 1.9.0

Expand Down Expand Up @@ -428,7 +444,7 @@ See `docs/releases/1.10.0.md`, `docs/Capability-Inspection-and-Planning.md`, `do
- Intentionally advances the final public API fingerprint to `e652e6fd65cd43422ca84b7c4c2a1815ee7ead9b2a64285e0e17cf39614b0315` while retaining every historical baseline unchanged.
- Retains the stable `1.0.0` compatibility floor, Windows/Linux/macOS runtime validation, current `Icod.DCurses` acceptance/soak witnesses, and the `Icod.TermInfo 1.10.0` / `Icod.Timing 1.0.0` dependency floor.

See `docs/releases/1.9.0.md`, `docs/Public-API-Baseline-1.9.md`, `docs/E190-Unsolicited-Semantic-Event-Contract-and-Reference-Freeze.md` through `docs/E199-1.9.0-Public-API-Documentation-Compatibility-and-Release-Closure.md`, and `Icod.Terminal-1.9.0-Development-Roadmap.md` for the complete 1.9 contract.
See `docs/releases/1.9.0.md`, `docs/Public-API-Baseline-1.9.md`, `docs/E190-Unsolicited-Semantic-Event-Contract-and-Reference-Freeze.md` through `docs/E199-1.9.0-Public-API-Documentation-Compatibility-and-Release-Closure.md`, and `docs/Icod.Terminal-1.9.0-Development-Roadmap.md` for the complete 1.9 contract.

## 1.8.1

Expand Down Expand Up @@ -480,7 +496,7 @@ See `docs/releases/1.8.1.md` for the curated maintenance release notes.
- Extends the fresh NuGet-only raster package smoke so both DCS/Sixel-specific and APC/Kitty-specific public escape-hatch method names remain excluded from the shipped API while the same public raster contract compiles/runs on all three TFMs.
- A180–A189 completed exact-head Staging qualification before PR #46 was merged; `v1.8.0` was subsequently tagged and published as the stable multi-backend raster release.

See `docs/releases/1.8.0.md`, `docs/A180-APC-Construction-Contract-and-Reference-Freeze.md` through `docs/A189-1.8.0-Package-Documentation-Compatibility-and-Release-Closure.md`, and `Icod.Terminal-1.8.0-Development-Roadmap.md` for the complete 1.8 contract.
See `docs/releases/1.8.0.md`, `docs/A180-APC-Construction-Contract-and-Reference-Freeze.md` through `docs/A189-1.8.0-Package-Documentation-Compatibility-and-Release-Closure.md`, and `docs/Icod.Terminal-1.8.0-Development-Roadmap.md` for the complete 1.8 contract.

### Prior release history

Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<!-- Repository-wide release version authority. -->
<VersionPrefix>1.29.1</VersionPrefix>
<VersionPrefix>1.29.2</VersionPrefix>
<Version Condition="'$(VersionSuffix)' == ''">$(VersionPrefix)</Version>
<Version Condition="'$(VersionSuffix)' != ''">$(VersionPrefix)-$(VersionSuffix)</Version>
<PackageVersion>$(Version)</PackageVersion>
Expand Down
2 changes: 1 addition & 1 deletion Icod.Terminal.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
<Title>Icod.Terminal</Title>
<Authors>Timothy J. Bruce</Authors>
<Description>Managed, cross-platform live-terminal session, endpoint, mode, input, lifecycle, and terminal-control foundation for .NET.</Description>
<PackageReleaseNotes>1.29.1 decodes legacy Escape-prefixed Alt characters, including fragmented Unicode, and preserves Ctrl+Z and Unicode on Windows using direct ReadConsoleW input. Raw sessions expose Ctrl+C and Ctrl+Z as application keys; CBreak retains host control handling. Adds cancellation-safe owned console reads, Rich Input sample checks, Unix PTY coverage, and a native Windows console regression smoke. No public API or dependency changes. Release notes: https://github.com/uniblab/Icod.Terminal/blob/main/docs/releases/1.29.1.md. Compatibility policy: https://github.com/uniblab/Icod.Terminal/blob/main/docs/Compatibility-and-Versioning.md.</PackageReleaseNotes>
<PackageReleaseNotes>1.29.2 makes system-backed Windows sessions reversibly enable UTF-8 console output so byte-oriented Unicode, including box drawing, retains one-cell geometry. Raw and CBreak modes explicitly own mouse input and suppress Quick Edit while active, restoring the exact prior console mode afterward. Adds native Windows console I/O and restoration coverage. No public API or dependency changes. Release notes: https://github.com/uniblab/Icod.Terminal/blob/main/docs/releases/1.29.2.md. Compatibility policy: https://github.com/uniblab/Icod.Terminal/blob/main/docs/Compatibility-and-Versioning.md.</PackageReleaseNotes>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageIcon>icon.png</PackageIcon>
<PackageProjectUrl>https://github.com/uniblab/Icod.Terminal</PackageProjectUrl>
Expand Down
23 changes: 15 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@

## Status

Stable release: **1.29.1**. The stable **1.0.0 compatibility floor** remains unchanged.
Stable release: **1.29.2**. The stable **1.0.0 compatibility floor** remains unchanged.

See the [1.29.1 release notes](https://github.com/uniblab/Icod.Terminal/blob/main/docs/releases/1.29.1.md),
See the [1.29.2 release notes](https://github.com/uniblab/Icod.Terminal/blob/main/docs/releases/1.29.2.md),
[changelog](https://github.com/uniblab/Icod.Terminal/blob/main/CHANGELOG.md) for release history,
the [development roadmap](https://github.com/uniblab/Icod.Terminal/blob/main/Icod.Terminal-Development-Roadmap.md)
the [development roadmap](https://github.com/uniblab/Icod.Terminal/blob/main/docs/Icod.Terminal-Development-Roadmap.md)
for current work, and the [compatibility policy](https://github.com/uniblab/Icod.Terminal/blob/main/docs/Compatibility-and-Versioning.md)
for support guarantees.

Expand Down Expand Up @@ -65,7 +65,7 @@ See [`docs/Architecture.md`](docs/Architecture.md) for the permanent architectur
Install the stable release:

```text
dotnet add package Icod.Terminal --version 1.29.1
dotnet add package Icod.Terminal --version 1.29.2
```

The partial animation-frame API requires `Icod.Terminal 1.23.0` or later. The geometry and planning APIs described below require `Icod.Terminal 1.24.0` or later.
Expand Down Expand Up @@ -400,11 +400,18 @@ Unicode to UTF-8 for the common decoder. Cancellation finishes the outstanding
native read before its owned handle is closed. Sessions opened with explicit
byte services retain their existing borrowed-transport behavior.

For system-backed Windows console output, the session enables virtual-terminal
processing and UTF-8 byte decoding while it is active, then restores the exact
prior output code page. `ConfigureOutput = false` and explicitly supplied output
services remain caller-owned configuration boundaries.

Applications that bind Ctrl+C or Ctrl+Z as commands should request
`TerminalInputMode.Raw`. Raw mode disables POSIX signal handling and Windows
processed input so both arrive through `ReadEventAsync()` as Character keys with
the Control modifier. `CBreak` deliberately retains host signal/processed-input
handling for applications that want conventional interrupt and suspend behavior.
the Control modifier. On Windows, Raw and CBreak also enable mouse input and
suppress Quick Edit while the session is active. `CBreak` deliberately retains
host signal/processed-input handling for applications that want conventional
interrupt and suspend behavior. Disposal restores the exact captured mode.

`Icod.Terminal` is a managed library but intentionally uses native platform facilities where terminal modes or console behavior require them. Protocol and feature availability still depends on the terminal endpoint attached to the process; operating-system identity or terminal brand is not treated as sufficient support proof.

Expand Down Expand Up @@ -443,7 +450,7 @@ Recommended documentation entry points:
- [`docs/releases/1.24.0.md`](docs/releases/1.24.0.md) — raster geometry, planning, focused evidence, and tile-atlas qualification notes;
- [`docs/Raster-Tile-Atlas-Measurement-1.24.md`](docs/Raster-Tile-Atlas-Measurement-1.24.md) — package-only 1/4/16/64-region witness and measurement limits;
- [`docs/Screen-Output.md`](docs/Screen-Output.md) — planning, commitment, cancellation, and caller-owned recovery;
- [`Icod.Terminal-1.21.0-Development-Roadmap.md`](Icod.Terminal-1.21.0-Development-Roadmap.md) — 1.21 input and visibility implementation plan;
- [`docs/Icod.Terminal-1.21.0-Development-Roadmap.md`](docs/Icod.Terminal-1.21.0-Development-Roadmap.md) — 1.21 input and visibility implementation plan;
- [`samples/Icod.Terminal.ScreenOutput.Sample/README.md`](samples/Icod.Terminal.ScreenOutput.Sample/README.md) — interactive screen and recovery walkthrough;
- [`samples/Icod.Terminal.RichInput.Sample/README.md`](samples/Icod.Terminal.RichInput.Sample/README.md) — modern keyboard phases, fallback, and editor-state walkthrough;
- [`CHANGELOG.md`](CHANGELOG.md) — release-by-release feature history;
Expand All @@ -462,7 +469,7 @@ Recommended documentation entry points:
- [`docs/Public-API-Baseline-1.23.md`](docs/Public-API-Baseline-1.23.md) — additive partial-frame and rich-input completion API fingerprint;
- [`docs/Public-API-Baseline-1.24.md`](docs/Public-API-Baseline-1.24.md) — historical geometry, planning, and focused-evidence fingerprint;
- [`docs/Public-API-Baseline-1.27.md`](docs/Public-API-Baseline-1.27.md) — current frozen API and additive environment-awareness fingerprint;
- [`Icod.Terminal-Development-Roadmap.md`](Icod.Terminal-Development-Roadmap.md) — current and longer-range development direction.
- [`docs/Icod.Terminal-Development-Roadmap.md`](docs/Icod.Terminal-Development-Roadmap.md) — current and longer-range development direction.

Release notes, public-API baselines, tranche records, implementation plans, and historical roadmaps remain in the repository as engineering evidence. They are intentionally not repeated in this README.

Expand Down
Loading
Loading