Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
a6d4eca
docs: plan 1.29 bounded clipboard transfers with 64 KiB defaults
uniblab Oct 11, 2026
c96c47a
Implement bounded clipboard budgets, incremental transfers, and quali…
uniblab Oct 11, 2026
9fbe7ec
docs: keep README status concise and preserve release history in chan…
uniblab Oct 11, 2026
20a79c4
fix: validate durable package documentation links
uniblab Oct 11, 2026
d167803
fix: validate durable package documentation links
uniblab Oct 11, 2026
9992bf0
release: prepare 1.29.0 stable
uniblab Oct 11, 2026
2134366
release: prepare 1.29.0 stable
uniblab Oct 11, 2026
44ad25b
release: prepare 1.29.0 stable
uniblab Oct 11, 2026
e4abd90
release: prepare 1.29.0 stable
uniblab Oct 11, 2026
3ca4934
release: prepare 1.29.0 stable
uniblab Oct 11, 2026
8539a76
release: prepare 1.29.0 stable
uniblab Oct 11, 2026
56d3e58
release: prepare 1.29.0 stable
uniblab Oct 11, 2026
cfb3fb5
release: prepare 1.29.0 stable
uniblab Oct 11, 2026
fc948ba
release: prepare 1.29.0 stable
uniblab Oct 11, 2026
be779dc
release: prepare 1.29.0 stable
uniblab Oct 11, 2026
0cbdced
release: prepare 1.29.0 stable
uniblab Oct 11, 2026
85eca66
fix: complete 1.29 release-note contract
uniblab Oct 11, 2026
2f7577d
fix: complete 1.29 release-note contract
uniblab Oct 11, 2026
be3902c
fix: satisfy stable release-note policy
uniblab Oct 11, 2026
eec2a15
fix: satisfy stable release-note policy
uniblab Oct 11, 2026
9cc5f87
docs: link stable 1.29 release notes
uniblab Oct 11, 2026
485739f
docs: link stable 1.29 release notes
uniblab Oct 11, 2026
b8b0468
test: serialize concurrent clipboard budget fixture
uniblab Oct 11, 2026
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.28.0
EXPECTED_VERSION: 1.29.0
PACKAGE_CANDIDATE_ARTIFACT: icod-terminal-main-package-candidate

jobs:
Expand Down
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,27 @@

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

- Add independent immutable session clipboard read/write budgets, preserving the
65,536-byte defaults and allowing explicit limits up to 16,777,216 decoded bytes.
- Encode larger writes directly into one bounded OSC 52 frame; retain strict
UTF-8 validation, ordering, no truncation and existing cancellation boundaries.
- Incrementally accumulate explicitly larger correlated replies without expanding
ordinary input or unrelated query limits. Bound malformed/overflow recovery,
preserve late-query ownership and fail unresolved input closed.
- Add explicit generated-payload samples, a consented larger round-trip scenario,
privacy-safe diagnostics, allocation regression tests and fresh-package coverage.
- Preserve public method signatures, enum values, .NET 8/9/10 and existing dependencies.
See [1.29.0 release notes](docs/releases/1.29.0.md) and
[qualification](docs/Clipboard-Transfer-Qualification-1.29.md) for measured limits.

## 1.28.0

- Adds truthful mutation confirmation through `TerminalControlMutationConfirmation` and `TerminalControlMutationResult.Confirmation`, distinguishing local `OutputCommitted` completion from correlated `ProtocolAcknowledged` success without changing existing signatures or enum values.
- Applies published action-specific response policy to persistent Kitty animation transfers, controls, composition, and regional edits. The published multi-chunk grammar, bounded ownership, ambiguity rules, and cleanup remain unchanged; no terminal/version branch or repeated-image-id workaround is added.
- Records the exact Kitty 0.49.2 missing-acknowledgement deviation and limited positive corrected-source Kitty evidence without converting implementation behavior into protocol requirements or rendering claims.
- Preserves the scope of the graphics observations: 1.27's basic-resource color display qualified that resource/placement scenario only. Reviewed 2026-10-08 source-built Kitty recordings added animation, tile-update and corrected eight-row layout evidence with cleanup and successful exit. See the [transaction compatibility record](docs/Kitty-Graphics-Transaction-Compatibility-1.28.md) for exact provenance and limitations.
- Qualifies the downstream Icod.DCurses compose-publish ATLAS workload at exact source `d9ae518f0ba075f5e264acaeb14de2c9e8bc2c3d`, including full-coverage coalescing and maintainer-observed interactive artwork, movement, and scrolling. FRAME and TEXT remain controlled alternatives.
- Preserves the .NET 8/9/10 target matrix, existing 1.x compatibility floor, and production dependencies `Icod.TermInfo 1.17.0` and `Icod.Timing 1.0.0`. See [1.28.0 release notes](docs/releases/1.28.0.md).

Expand Down
3 changes: 1 addition & 2 deletions Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
<Project>
<PropertyGroup>
<!-- Repository-wide release version authority. -->
<VersionPrefix>1.28.0</VersionPrefix>
<VersionSuffix />
<VersionPrefix>1.29.0</VersionPrefix>
<Version Condition="'$(VersionSuffix)' == ''">$(VersionPrefix)</Version>
<Version Condition="'$(VersionSuffix)' != ''">$(VersionPrefix)-$(VersionSuffix)</Version>
<PackageVersion>$(Version)</PackageVersion>
Expand Down
327 changes: 327 additions & 0 deletions Icod.Terminal-1.29.0-Development-Roadmap.md

Large diffs are not rendered by default.

92 changes: 62 additions & 30 deletions Icod.Terminal-Development-Roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
- **Package:** `Icod.Terminal`
- **Language:** C# 13
- **Target frameworks:** `net8.0`; `net9.0`; `net10.0`
- **Current stable feature line:** `1.27.0` — Live Terminal Environment Awareness
- **Latest historical patch line:** `1.24.1` — Persistent Kitty resource-identity verification
- **Development status:** `1.27.0` was merged through [PR #83](https://github.com/uniblab/Icod.Terminal/pull/83) at `485bedb014ab7b66391661c709833a6a4fa4afcc` and tagged `v1.27.0` on 2026-10-06; the maintainer reports that NuGet upload is in progress. Final PR head `df6c42189f6b6a2f40771ad2115af41a46dcb4b1` passed all ten jobs in workflow `37536612435`, including 2,821 unit tests and 15 integration tests per framework on Windows, Linux and macOS. The graphics hold is now reopened only for the bounded 1.28 specification-conformance scope below; persistent ATLAS remains unqualified until that scope and downstream acceptance complete.
- **Active development target:** `1.28.0` — Published-Spec Kitty Graphics Transactions.
- **Selected scope:** Adhere to the published Kitty Graphics Protocol, distinguish output commitment from protocol acknowledgement, record Kitty 0.49.2 deviations without encoding them as a private dialect, and qualify the downstream raster atlas. See the [1.28 development roadmap](Icod.Terminal-1.28.0-Development-Roadmap.md).
- **Current stable feature line:** `1.29.0` — Bounded Clipboard Transfers; merge, tag, and publication remain maintainer actions.
- **Latest historical patch line:** `1.24.1` — Persistent Kitty resource-identity verification.
- **Development status:** Stable `1.29.0` release preparation; reviewed qualification is tracked in the versioned roadmap.
- **Active development target:** `1.29.0` — Bounded Clipboard Transfers.
- **Selected scope:** Preserve the 65,536-byte default while allowing explicit larger read/write budgets, with coordinated codec/framing limits, bounded correlated response accumulation and truthful outcomes. See the [1.29 development roadmap](Icod.Terminal-1.29.0-Development-Roadmap.md) and [design](docs/Clipboard-Transfer-Design-1.29.md).
- **Stable compatibility floor:** `1.0.0`

## Purpose
Expand All @@ -19,24 +19,23 @@ The original pre-1.0 roadmap is preserved at [`docs/history/Icod.Terminal-Initia

## Latest accepted checkpoint

`Icod.Terminal 1.27.0` is merged and tagged. Its appearance query, independent
appearance/in-band resize leases, lifecycle hardening, compatibility evidence,
DA1 trailing-separator correction, package gates and documentation are complete.
The maintainer reports that NuGet upload is in progress. Tag `v1.27.0` resolves
to merge commit `485bedb014ab7b66391661c709833a6a4fa4afcc`; final PR head
`df6c42189f6b6a2f40771ad2115af41a46dcb4b1` passed all ten jobs in
[workflow 37536612435](https://github.com/uniblab/Icod.Terminal/actions/runs/37536612435).
The [1.27 development roadmap](Icod.Terminal-1.27.0-Development-Roadmap.md),
[release notes](docs/releases/1.27.0.md) and
[reviewed matrix](docs/compatibility/1.27.0.md) preserve its exact limits.

On 2026-10-06 the maintainer selected a bounded 1.28 reopening of graphics work:
follow the published Kitty Graphics Protocol, make transaction confirmation
truthful, record Kitty 0.49.2 deviations separately, and qualify the downstream
ATLAS path without terminal-brand heuristics or an undocumented repeated-id
workaround. The [1.28 development roadmap](Icod.Terminal-1.28.0-Development-Roadmap.md)
defines T2800–T2810 and requires a detailed contract/API-regret gate before runtime
implementation.
Stable `1.28.0` is present on main at
`2c410cd80663fef30912079e2c0de7a550852b97`; its
[GitHub release](https://github.com/uniblab/Icod.Terminal/releases/tag/v1.28.0)
was published 2026-10-09. The
[1.28 development roadmap](Icod.Terminal-1.28.0-Development-Roadmap.md) and
[release notes](docs/releases/1.28.0.md) preserve the exact graphics and downstream
qualification limits. This status does not expand their terminal coverage.

On 2026-10-10 the maintainer selected clipboard enhancement before the next
DCurses/Widgets editor milestones for Icod.Dedit, and explicitly retained
**64 KiB as the default**. Applications may opt into larger library budgets;
that local policy is not remote OSC 52 capacity negotiation. The
[1.29 roadmap](Icod.Terminal-1.29.0-Development-Roadmap.md) defines T2900–T2908.
The maintainer approved the 16 MiB hard ceiling and implementation. Independent
budgets, bounded transfers and explicit samples are qualified for the 1.29.0
stable release. Dependencies remain unchanged; publication is a separate
maintainer action.

### Historical checkpoints

Expand Down Expand Up @@ -88,7 +87,7 @@ terminal applications
- `Icod.DCurses` owns cells, windows, virtual-screen state, screen coordinates, clipping, scrolling, layout, refresh/diff policy, damage, and higher-level presentation policy.
- PTY/process hosting remains orthogonal to the `Icod.Terminal` runtime contract.

The production dependency baseline for stable 1.27 and planned 1.28 is:
The production dependency baseline for stable 1.28 and planned 1.29 is:

```text
Icod.TermInfo 1.17.0
Expand Down Expand Up @@ -127,7 +126,8 @@ Optional integration tests/samples use `Icod.TermInfo.Inspection 1.17.0`; Inspec
1.25.0 ordered screen raster transactions STABLE SOURCE / GRAPHICS HOLD
1.26.0 terminal compatibility qualification PUBLISHED
1.27.0 appearance and resize awareness MERGED / TAGGED
1.28.0 published-spec Kitty graphics transactions ALPHA / LIVE-DOWNSTREAM GATES OPEN
1.28.0 published-spec Kitty graphics transactions RELEASED
1.29.0 bounded opt-in clipboard transfers STABLE PREPARATION
```

The unchanged 1.18–1.19 public API fingerprint is:
Expand Down Expand Up @@ -633,11 +633,43 @@ T2810 live qualification and stable closure
The [1.28 development roadmap](Icod.Terminal-1.28.0-Development-Roadmap.md)
pins the protocol/source evidence, classifies the Kitty 0.49.2 behaviors, defines
the required completion states and records the test and release gates. This
development line implements the approved design as `1.28.0-alpha.1`. Reviewed
2026-10-08 corrected-source Kitty recordings provide limited positive sample
evidence including the corrected eight-row visual witness. Full provenance,
downstream ATLAS acceptance and stable closure remain open under Task 9 of the
approved plan.
development line progressed through `1.28.0-alpha.1` to the released stable
`1.28.0` line. Reviewed corrected-source Kitty recordings and the maintainer's
downstream ATLAS acceptance are preserved in the 1.28 promotion record and release
notes; their precise provenance and limitations remain authoritative.

## 1.29 selected line — Bounded Clipboard Transfers

The next release extends existing OSC 52 clipboard functionality for applications
such as Icod.Dedit. Keep 65,536 decoded bytes as the default for both reads and
writes; offer independent, explicit larger budgets with a reviewed hard ceiling.
Terminal owns transport bounds and protocol truth; applications own internal
clipboard fallback, selected text and user messaging.

The selected work coordinates codec, frame, query and decoder limits; preserves
ordinary input and bracketed-paste policy; handles malformed/oversized/late replies;
and includes public samples, allocation measurement, package and compatibility gates.
Successful output is not remote acceptance, and a query timeout is not proof of
unsupported functionality. No OSC 52 capacity negotiation is invented.

| Tranche | Deliverable |
| --- | --- |
| T2900 | Contract freeze, reader-ownership proof and development identity |
| T2901 | Immutable clipboard budgets and checked byte geometry |
| T2902 | Larger bounded writes and output-ordering preservation |
| T2903 | Correlated larger reads without broader ordinary-input limits |
| T2904 | Failure, cancellation, late response and lifecycle hardening |
| T2905 | Allocation and performance qualification |
| T2906 | Public sample and exact-environment compatibility evidence |
| T2907 | API, package, documentation and downstream gates |
| T2908 | Maintainer-reviewed release closure |

See the [development roadmap](Icod.Terminal-1.29.0-Development-Roadmap.md)
and [design](docs/Clipboard-Transfer-Design-1.29.md).
MIME-aware OSC 5522 (earlier option 4) remains deferred; this decision enhances
the existing OSC 52 path. No TermInfo or production dependency change is planned.
No changes to DCurses/Widgets or the shared workflow-template repository are part
of this milestone. Execution remains inline, without subagents.

## Later development candidates

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>Icod.Terminal 1.28.0 adds truthful confirmation strength for published-spec Kitty Graphics mutations: output-only controls report OutputCommitted, while required or observed correlated success reports ProtocolAcknowledged. It preserves the published multi-chunk frame grammar, bounded ownership and cleanup, existing animation signatures, enum values, .NET 8/9/10 targets, and production dependencies. Exact live evidence includes the documented Kitty 0.49.2 continuation deviation, a corrected source-built Kitty witness, and downstream Icod.DCurses ATLAS qualification; none implies atomic or gapless rendering. Release notes: https://github.com/uniblab/Icod.Terminal/blob/main/docs/releases/1.28.0.md. Compatibility policy: https://github.com/uniblab/Icod.Terminal/blob/main/docs/Compatibility-and-Versioning.md.</PackageReleaseNotes>
<PackageReleaseNotes>Icod.Terminal 1.29.0 adds independent bounded clipboard read/write budgets: 64 KiB defaults with explicit opt-in through 16 MiB. Larger correlated reads use incremental bounded storage; writes encode directly into a complete ordered frame. Includes explicit public samples and package validation while preserving .NET 8/9/10, existing APIs and production dependencies. Local capacity does not negotiate remote acceptance. Release notes: https://github.com/uniblab/Icod.Terminal/blob/main/docs/releases/1.29.0.md. Compatibility policy: https://github.com/uniblab/Icod.Terminal/blob/main/docs/Compatibility-and-Versioning.md. Usage: https://github.com/uniblab/Icod.Terminal/blob/main/docs/Clipboard-Transfers.md.</PackageReleaseNotes>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageIcon>icon.png</PackageIcon>
<PackageProjectUrl>https://github.com/uniblab/Icod.Terminal</PackageProjectUrl>
Expand Down
Loading
Loading