Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/distribution-validation.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,8 @@ jobs:
name: Presentation
- shard: semantic
name: Semantic and hardening
- shard: rc
name: 1.0 RC
- shard: release
name: 1.0 release line
name: Package ${{ matrix.name }}
runs-on: ubuntu-24.04
steps:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,8 @@ jobs:
name: Presentation
- shard: semantic
name: Semantic and hardening
- shard: rc
name: 1.0 RC
- shard: release
name: 1.0 release line
name: Package ${{ matrix.name }}
runs-on: ubuntu-24.04
steps:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/pull-request.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@ jobs:
name: Presentation
- shard: semantic
name: Semantic and hardening
- shard: rc
name: 1.0 RC
- shard: release
name: 1.0 release line
name: Package ${{ matrix.name }}
runs-on: ubuntu-latest
steps:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,8 @@ jobs:
name: Presentation
- shard: semantic
name: Semantic and hardening
- shard: rc
name: 1.0 RC
- shard: release
name: 1.0 release line
name: Package ${{ matrix.name }}
runs-on: ubuntu-latest
steps:
Expand Down
34 changes: 34 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,40 @@ Notable changes to `Icod.Terminal` are recorded here for consumers who need a co

No unreleased 1.x changes are currently recorded.

## 1.0.0

### Stable contract

- Promotes the `1.0.0-rc1` contract to stable `1.0.0` without changing the frozen public API or adding a new terminal-protocol family.
- Establishes the permanent 1.x architecture, ownership, lifecycle, input/query, presentation/output, security, compatibility, licensing, migration, and public-API documents as the stable support authorities.
- Retains `net8.0`, `net9.0`, and `net10.0` as first-class package targets.
- Retains Windows, Linux, and macOS support in the built-in system terminal-control provider.

### Compatibility

- Keeps the rc1 public API fingerprint unchanged: `8b213bb287e14729b07f0e640c8c1b1a5aa36b26f867f1e97604fb86fded36e5`.
- Carries the one pre-1.0 breaking correction forward: public `TerminalSession.Input` remains removed so a live session has one authoritative input/query-routing path.
- Retains public `ITerminalInput`, `ITerminalOutput`, and `ITerminalControlProvider` injection seams.
- Retains `TerminalSession.Output` as the documented advanced borrowed output transport outside session serialization.

### Licensing

- Makes the reusable `Icod.Terminal` library, root project, and library C# sources explicitly `LGPL-3.0-or-later`; the published NuGet package remains LGPL.
- Makes repository test, sample, package-smoke, verification, and downstream acceptance/soak executable programs explicitly `GPL-3.0-or-later`.
- Adds project-appropriate license headers to every tracked `.cs` and `.csproj` file, including owning assembly name, one-line description, and the 2026 Timothy J. Bruce copyright notice.
- Requires every project file to place its license header immediately after `<?xml version="1.0" encoding="utf-8"?>` and before `<Project ...>`.
- Adds an exact license-header verification gate to package-candidate CI and local `all` / `validate` builds.
- Adds `docs/Licensing.md` as the permanent explanation of the library/executable license boundary; the root `LICENSE` contains the LGPLv3 terms and incorporated GPLv3 terms.

### Validation and release engineering

- Uses the optimized runtime/package validation graph proven after rc1: six OS/architecture runtime jobs, one portable package candidate, and four parallel package-contract shards.
- Retains exact package/XML/symbol/Source Link verification and package-only contracts from 0.8 through 0.18.
- Retains the fresh 1.0 release-line package contract and current packaged `Icod.DCurses 0.1.0` compatibility witness.
- Requires curated release notes for tag publication.

See `docs/releases/1.0.0.md` for the full stable release notes.

## 1.0.0-rc1

### Contract freeze
Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<!-- Repository-wide release version authority. -->
<VersionPrefix>1.0.0</VersionPrefix>
<VersionSuffix>rc1</VersionSuffix>
<VersionSuffix></VersionSuffix>
<Version Condition="'$(VersionSuffix)' == ''">$(VersionPrefix)</Version>
<Version Condition="'$(VersionSuffix)' != ''">$(VersionPrefix)-$(VersionSuffix)</Version>
<PackageVersion>$(Version)</PackageVersion>
Expand Down
70 changes: 51 additions & 19 deletions Icod.Terminal-Development-Roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,22 @@
**Package:** `Icod.Terminal`
**Language:** C# 13
**Target frameworks:** `net8.0`; `net9.0`; `net10.0`
**Current release line:** `1.0.0-rc1`
**Current roadmap:** [`Icod.Terminal-1.0.0-rc1-Development-Roadmap.md`](Icod.Terminal-1.0.0-rc1-Development-Roadmap.md)
**Stable contract target:** `1.0.0`
**Current release line:** `1.0.0`
**Stable contract:** `1.0.0`

## Purpose

This file is the permanent entry point for current `Icod.Terminal` development planning.
This file is the permanent entry point for current `Icod.Terminal` development and release planning.

The repository began with a detailed pre-1.0 architecture and milestone plan. That original document remains valuable historical design evidence and is preserved verbatim at:

[`docs/history/Icod.Terminal-Initial-Development-Roadmap.md`](docs/history/Icod.Terminal-Initial-Development-Roadmap.md)

The current release-specific roadmap, rather than the historical initial plan, is authoritative for active development state.
The completed rc1 development program remains preserved at:

[`Icod.Terminal-1.0.0-rc1-Development-Roadmap.md`](Icod.Terminal-1.0.0-rc1-Development-Roadmap.md)

Stable `1.0.0` promotes that qualified contract without adding a new feature or public-API delta.

## Current architecture

Expand All @@ -38,11 +41,9 @@ terminal applications
- `Icod.DCurses` owns cells, windows, virtual-screen state, refresh/diff policy, and curses presentation abstractions.
- PTY/process hosting remains orthogonal to the `Icod.Terminal` runtime contract.

## Current 1.0 release-candidate program
## Stable 1.0 program

`1.0.0-rc1` is a contract-freeze release rather than a protocol-expansion release.

Its tranches are:
The pre-1.0 contract-freeze program completed T190–T197 covering:

```text
T190 contract and public-API regret audit
Expand All @@ -55,7 +56,9 @@ T196 package metadata / documentation artifact closure
T197 downstream RC acceptance / release-candidate closure
```

See the current rc1 roadmap for exact tranche status and validation workflow numbers.
`1.0.0-rc1` was published and qualified. Publication/CI hardening then merged to `main` at `dfa149c604aaf860a18923d23999b045ab98532d`; workflow run `34191123678` passed the redesigned six-runtime/single-package/four-shard Release validation graph.

Stable `1.0.0` is a release promotion only. No new terminal protocol, production feature, or public API change is permitted in the stable-promotion branch unless a release-blocking defect is discovered and explicitly re-audited.

## Permanent 1.x authorities

Expand All @@ -70,25 +73,54 @@ Consumers and maintainers should treat these documents as the current contract a
- `docs/Presentation-and-Reversible-State.md`
- `docs/Semantic-Output-Protocols.md`
- `docs/Security-and-Privacy.md`
- `docs/Public-API-Baseline-1.0-rc1.md`
- `docs/Public-API-Baseline-1.0.md`
- `docs/Compatibility-and-Versioning.md`
- `docs/Migration-to-1.0.md`
- `docs/releases/1.0.0.md`
- `CHANGELOG.md`

Historical `Txxx`, `Public-API-Baseline-0.x`, and version-specific roadmap files remain design/release evidence.
Historical T-series, 0.x public API baselines, and `Public-API-Baseline-1.0-rc1.*` remain design/release evidence.

## Stable API baseline

Stable 1.0 must reproduce the rc1 public API fingerprint exactly:

```text
633 lines
77 exported public types
32 public enums / 242 enum values
124 public methods
144 public properties
13 public constructors
SHA-256 8b213bb287e14729b07f0e640c8c1b1a5aa36b26f867f1e97604fb86fded36e5
```

Any deviation during stable promotion is a release blocker requiring explicit compatibility review rather than a baseline update by default.

## Release discipline

Pull requests validate the Staging configuration on Windows, Linux, and macOS. Distribution validation on `main` uses Release across the configured Windows/Linux/macOS x64/ARM64 matrix.
Pull requests validate Staging on Windows, Linux, and macOS runtime/source paths while one portable package candidate feeds four parallel package-contract shards.

`main` Release validation runs runtime/source checks on:

- Windows x64;
- Windows ARM64;
- Linux x64;
- Linux ARM64;
- macOS x64;
- macOS ARM64;

and separately validates one RID-independent package candidate through the four package shards.

The release candidate retains:
The release line retains:

- full build/test coverage on `net8.0`, `net9.0`, and `net10.0`;
- the frozen 1.0 public-API fingerprint;
- exact NuGet artifact/XML verification;
- the frozen stable 1.0 public-API fingerprint;
- exact NuGet artifact/XML/symbol/Source Link verification;
- historical package-only contracts from 0.8 through 0.18;
- a fresh 1.0 release-candidate package-only contract;
- current `Icod.DCurses 0.1.0` project-reference and package-boundary integration/ownership acceptance.
- the stable 1.0 release-line package contract;
- current `Icod.DCurses 0.1.0` project-reference and package-boundary compatibility/ownership acceptance.

The DCurses checks are compatibility witnesses for the integration surface its current early release exercises. They are not treated as exhaustive proof of every `Icod.Terminal` contract; Terminal's own API, invariant, unit/hardening, and package gates remain the primary release evidence for the full 1.x surface.

Tags trigger publication. A tag is created only after the exact release candidate has passed the required PR and post-merge Release gates and publication is explicitly authorized.
Tags trigger publication. Tag `v1.0.0` is created only after the exact stable-promotion PR head and resulting exact `main` commit pass their required gates and publication is explicitly authorized.
22 changes: 21 additions & 1 deletion Icod.Terminal.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Icod.Terminal
Managed, cross-platform live-terminal session and terminal-control library for .NET.
Copyright (C) 2026 Timothy J. Bruce <uniblab@hotmail.com>
-->

<!--
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Copyright>Copyright (c) 2026 Timothy J. Bruce</Copyright>
Expand All @@ -19,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>Icod.Terminal 1.0.0-rc1 freezes the intended 1.x contract across net8.0/net9.0/net10.0. Breaking change: public TerminalSession.Input is removed so a live session retains one authoritative input/query-routing path; ITerminalInput remains public for custom transport injection. The release candidate adds permanent 1.x documentation, a machine-frozen public API/enum baseline, compatibility/migration policy, and strengthened package/release validation without adding a new terminal protocol family. Full notes: https://github.com/uniblab/Icod.Terminal/blob/v1.0.0-rc1/docs/releases/1.0.0-rc1.md ; migration: https://github.com/uniblab/Icod.Terminal/blob/v1.0.0-rc1/docs/Migration-to-1.0.md</PackageReleaseNotes>
<PackageReleaseNotes>Icod.Terminal 1.0.0 establishes the stable 1.x contract across net8.0/net9.0/net10.0 with the same frozen public API and enum layout qualified by 1.0.0-rc1. Breaking change from the final 0.x line: public TerminalSession.Input is removed so a live session retains one authoritative input/query-routing path; ITerminalInput remains public for custom transport injection. Stable 1.0 adds no new terminal protocol family beyond rc1; it promotes the documented architecture, ownership, lifecycle, query, restoration, security, compatibility, and package contracts to stable support. Full notes: https://github.com/uniblab/Icod.Terminal/blob/v1.0.0/docs/releases/1.0.0.md ; migration: https://github.com/uniblab/Icod.Terminal/blob/v1.0.0/docs/Migration-to-1.0.md</PackageReleaseNotes>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageIcon>icon.png</PackageIcon>
<PackageProjectUrl>https://github.com/uniblab/Icod.Terminal</PackageProjectUrl>
Expand Down
Loading
Loading