Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
d95d21c
docs: define 1.11 persistent raster design
uniblab Sep 11, 2026
a222265
docs: add 1.11 development roadmap
uniblab Sep 11, 2026
4f51537
docs: freeze 1.11 public ownership contract
uniblab Sep 11, 2026
81fecf3
docs: freeze C110 roadmap decisions
uniblab Sep 11, 2026
52c202a
docs: add 1.11 implementation plan
uniblab Sep 11, 2026
a14277b
docs: correct persistent upload acknowledgement plan
uniblab Sep 11, 2026
9f62e2d
build: begin Icod.Terminal 1.11.0-alpha.1
uniblab Sep 11, 2026
d5ebda4
docs: advance 1.11 roadmap to C111
uniblab Sep 11, 2026
384c4af
docs: record C110 persistent raster acceptance
uniblab Sep 11, 2026
4dec975
test: define C111 persistent Kitty encoder contract
uniblab Sep 11, 2026
c482755
test: define C111 persistent Kitty response correlation
uniblab Sep 11, 2026
47474ea
feat: add C111 persistent Kitty encoder
uniblab Sep 11, 2026
a37457f
feat: add C111 persistent Kitty response matcher
uniblab Sep 11, 2026
fe7e4af
docs: record C111 persistent Kitty acceptance
uniblab Sep 11, 2026
f2c14ac
test: define C112 persistent raster capability contract
uniblab Sep 11, 2026
5dc33d7
feat: add C112 persistent raster capability enum
uniblab Sep 11, 2026
a046c66
feat: add C112 persistent raster semantic operation
uniblab Sep 11, 2026
507d755
feat: route persistent raster through Kitty graphics
uniblab Sep 11, 2026
d75c250
feat: verify persistent raster through Kitty probe
uniblab Sep 11, 2026
eeeaf74
docs: add C112 public API fingerprint
uniblab Sep 11, 2026
42dd3c0
docs: document C112 public API baseline
uniblab Sep 11, 2026
dc7b298
build: verify C112 against 1.11 API baseline
uniblab Sep 11, 2026
444fcd7
fix: register persistent raster routing policy
uniblab Sep 11, 2026
67923d7
test: include persistent raster capability vocabulary
uniblab Sep 11, 2026
ed3a255
docs: accept C112 persistent raster capability integration
uniblab Sep 11, 2026
64f9e5d
test: define C113 persistent raster ownership registry
uniblab Sep 11, 2026
ad48f03
feat: add C113 persistent raster ownership registry
uniblab Sep 11, 2026
50b1bcd
docs: accept C113 persistent raster ownership registry
uniblab Sep 11, 2026
1bd3c04
test: define C114 persistent raster resource upload
uniblab Sep 11, 2026
213de5e
feat: implement C114 persistent raster resource upload
uniblab Sep 11, 2026
6c89f5e
fix: preserve strict C114 response validation
uniblab Sep 11, 2026
5a4e886
fix: route C114 malformed acknowledgements without stalling
uniblab Sep 11, 2026
c35a0be
docs: record C114 acceptance
uniblab Sep 11, 2026
f2ff800
test: define C115 persistent raster placement creation
uniblab Sep 11, 2026
471b844
feat: implement C115 placement creation
uniblab Sep 12, 2026
40fae14
docs: freeze C115 public API baseline
uniblab Sep 12, 2026
7b43bd1
docs: record C115 acceptance
uniblab Sep 12, 2026
c847914
test: define C116 persistent raster update and cleanup
uniblab Sep 12, 2026
b639df1
test: fix C116 RED harness syntax
uniblab Sep 12, 2026
7e09703
test: make C116 RED fixture self-contained
uniblab Sep 12, 2026
26c9de4
test: import terminal-size contract for C116 RED
uniblab Sep 12, 2026
178e19b
feat: implement C116 placement update and deterministic cleanup
uniblab Sep 12, 2026
db5dab9
docs: freeze C116 public API surface
uniblab Sep 12, 2026
eb8864b
docs: record C116 acceptance
uniblab Sep 12, 2026
e654590
test: define C117 persistent raster lifecycle semantics
uniblab Sep 12, 2026
7932005
test: correct C117 lifecycle RED fixture
uniblab Sep 12, 2026
aec40cf
feat: implement C117 raster lifecycle invalidation and teardown
uniblab Sep 12, 2026
ef6ae3a
docs: record C117 persistent raster lifecycle acceptance
uniblab Sep 12, 2026
4ffd604
docs: accept C117 persistent raster lifecycle
uniblab Sep 12, 2026
253942a
test: define C118 persistent placement acknowledgement hardening
uniblab Sep 12, 2026
3e017d7
test: correct C118 placement acknowledgement fixture
uniblab Sep 12, 2026
296008d
test: import terminfo for C118 RED
uniblab Sep 12, 2026
e084d54
feat: correlate persistent placement acknowledgements
uniblab Sep 12, 2026
9f00687
test: acknowledge hardened persistent placement transactions
uniblab Sep 12, 2026
0d51260
test: acknowledge hardened placement lifecycle transactions
uniblab Sep 12, 2026
db5c208
test: acknowledge hardened raster lifecycle placements
uniblab Sep 12, 2026
ff3068f
test: correct placement creation fixture structure
uniblab Sep 12, 2026
8d30a47
test: correct placement lifecycle fixture structure
uniblab Sep 12, 2026
3348b52
test: correct raster lifecycle fixture structure
uniblab Sep 12, 2026
9ed483a
test: initialize placement acknowledgement parse output
uniblab Sep 12, 2026
38ee537
test: initialize placement lifecycle parse output
uniblab Sep 12, 2026
f933a63
test: initialize raster lifecycle parse output
uniblab Sep 12, 2026
92f1863
attributions
uniblab Sep 12, 2026
4219170
test: add C118 persistent raster ownership stress coverage
uniblab Sep 12, 2026
859f616
test: add persistent raster package smoke project
uniblab Sep 12, 2026
7fcd9d0
test: exercise persistent raster package surface
uniblab Sep 12, 2026
887a6f6
test: verify persistent raster package contract
uniblab Sep 12, 2026
29fd6a8
test: run persistent raster package qualification
uniblab Sep 12, 2026
160f20e
sample: add persistent raster sample project
uniblab Sep 12, 2026
be1af01
sample: demonstrate backend-neutral persistent raster ownership
uniblab Sep 12, 2026
17a1c85
test: verify persistent raster sample
uniblab Sep 12, 2026
8f4f7d9
test: include persistent raster sample in runtime verification
uniblab Sep 12, 2026
10d3d17
fix: normalize persistent raster sample project header
uniblab Sep 12, 2026
bc838f7
fix: normalize persistent raster sample source header
uniblab Sep 12, 2026
5c91cb7
docs: record C118 persistent raster qualification
uniblab Sep 12, 2026
f14b4ee
docs: advance 1.11 roadmap through C118
uniblab Sep 12, 2026
778bd66
C119: close Icod.Terminal 1.11.0 release candidate
uniblab Sep 12, 2026
bb360a0
tests: make DECRQSS cancellation ownership deterministic
uniblab Sep 12, 2026
dd350e5
tests: freeze time for scripted persistent raster acknowledgements
uniblab Sep 12, 2026
cf83c1d
tests: restore persistent raster fixture structure
uniblab Sep 12, 2026
8f651c9
tests: freeze placement lifecycle acknowledgement timing
uniblab Sep 12, 2026
96b5a05
tests: freeze placement creation acknowledgement timing
uniblab Sep 12, 2026
6600228
tests: freeze persistent raster lifecycle acknowledgement timing
uniblab Sep 12, 2026
c16aaac
docs: accept Icod.Terminal 1.11.0 release closure
uniblab Sep 12, 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
59 changes: 59 additions & 0 deletions C114-ACCEPTANCE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Icod.Terminal 1.11.0 C114 Acceptance

**Tranche:** C114 — persistent resource creation/upload
**Accepted head:** `5a4e8860322eb18505e2d77baa18c3a81d93b7af`
**Pull-request workflow:** run `34659060708` / `#1561`
**Configuration:** `Staging`

C114 is accepted because the exact unchanged head above passed the full pull-request matrix on Windows, Linux, and macOS, including package candidate construction, every package-contract shard, and the validated package artifact.

## Accepted contract

C114 introduces the first public persistent-raster ownership operation while preserving the C110 opacity boundary.

The accepted behavior is:

- `TerminalSession.CreateRasterResourceAsync(...)` requires current verified `PersistentRasterGraphics` capability and performs no hidden support probe;
- Sixel is never used as a persistent-resource fallback;
- resource capacity is reserved in the bounded C113 registry before protocol output begins;
- persistent Kitty direct upload uses the private nonzero image number and publishes no public resource until a matching acknowledgement is received;
- successful acknowledgement binds the terminal-assigned nonzero image id privately;
- well-formed `ENOENT` creation response returns controlled `Unavailable`;
- other well-formed Kitty negative responses return controlled `Failed`;
- duplicate, overflowing, or otherwise malformed correlated acknowledgement fields surface `FormatException`;
- response correlation can route a malformed matching frame without terminating the shared input pump; strict bounded validation occurs immediately after routing;
- post-commit caller cancellation does not truncate the remaining upload frames;
- canceled/timed-out committed transactions retain local identity ownership until the existing late-response ownership interval ends, after which rollback releases the reservation;
- failed or ambiguous creation never publishes a usable `TerminalRasterResource`;
- the registry continues to retain no source `TerminalRasterImage` or pixel payload after creation completes.

The accepted C114 public API fingerprint is:

```text
fbef4700d29613be7f6224a5349426c731412a851127bd529fc190ac3a562aeb
```

It is identical across `net8.0`, `net9.0`, and `net10.0` and covers the C112 capability plus the C114 opaque resource/session creation surface.

## TDD evidence

The C114 RED checkpoint was commit `1bd3c04adfed8d5a8faa26ac1b4472b8a2eb37d5`. Runtime compilation failed on all three target frameworks because `TerminalRasterResource` and `TerminalSession.CreateRasterResourceAsync(...)` did not yet exist, with no unrelated warnings.

The initial GREEN implementation was commit `213de5e6ca1eb4a7d05a0b9a5df0f6a707bb97d5`. Qualification then exposed two real contract issues:

1. the interim C112 public API fingerprint correctly rejected the intentional C114 surface addition; and
2. strict persistent-response matching needed to preserve C111 duplicate/overflow validation without throwing inside the shared response-routing pump.

Those issues were corrected while preserving the frozen behavior. Exact head `5a4e8860322eb18505e2d77baa18c3a81d93b7af` then passed workflow `#1561 / 34659060708` across:

- Runtime Windows;
- Runtime Linux;
- Runtime macOS;
- Package candidate / public API freeze;
- Package Foundation;
- Package Presentation;
- Package Semantic and hardening;
- Package Stable 1.x release line;
- Validated package artifact.

C114 is therefore closed. Placement creation and multi-placement ownership remain C115; placement update and deterministic terminal cleanup remain C116; lifecycle invalidation and teardown remain C117.
31 changes: 31 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,37 @@

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

### Persistent raster resources and placements

- Adds `TerminalCapability.PersistentRasterGraphics = 9` while preserving all existing `TerminalCapability` numeric values.
- Adds opaque `TerminalRasterResource` and `TerminalRasterPlacement` ownership plus `TerminalRasterPlacementOptions` and `TerminalSession.CreateRasterResourceAsync(...)`.
- Supports multiple placements per terminal-resident resource, current-cursor placement, independently optional `Columns` / `Rows` in `1..16384`, and semantic placement replacement through `TerminalRasterPlacement.UpdateAsync(...)`.
- Keeps Kitty image ids, image numbers, placement ids, APC control dictionaries, and backend selection private to the implementation; the common public API remains semantic and backend-neutral.
- Keeps ordinary `RasterGraphics` separate from `PersistentRasterGraphics`, so verified Sixel can satisfy ephemeral raster display without pretending to provide persistent terminal-resident ownership.

### Acknowledgement, lifecycle, and bounded ownership

- Requires correlated acknowledgement before publishing a persistent resource and correlates placement create/update replies by the private terminal image id and placement id through the existing authoritative query/input path.
- Treats correlated terminal replies as untrusted input: wrong identities do not complete another transaction, malformed/duplicate identity fields are rejected, and response processing remains bounded.
- Treats a well-formed correlated `ENOENT` as loss of terminal-resident certainty, invalidating the affected resource/placement so later operations return controlled `Unavailable` without emitting stale identifiers.
- Bounds live ownership to 256 persistent resources and 4096 placements per session with nonzero collision-safe private identities and explicit wraparound handling.
- Makes persistent identities session-generation scoped: explicit invalidation and lifecycle generation changes stale existing handles without automatic replay, re-upload, or hidden raster retention.
- Makes placement/resource disposal locally idempotent, deletes children before resource data while current, performs local-only cleanup when stale, and surfaces/aggregates cleanup transport failures without uncertain retry ownership.
- Retains Kitty direct transfer only and introduces no file/temp-file/shared-memory transport or source-image cache.

### Qualification and compatibility

- Adds repeated create/place/update/delete stress, repeated generation invalidation, and 8,192-placement registry churn coverage alongside the existing capacity, wraparound, cancellation, transport-failure, redirected-output, and malformed-response tests.
- Adds a fresh NuGet-only persistent-raster consumer and generated XML-documentation validation for `net8.0`, `net9.0`, and `net10.0`.
- Adds `Icod.Terminal.PersistentRaster.Sample`, demonstrating capability verification plus create/place/update/dispose without Kitty/Sixel/backend/id branching.
- Retains Windows/Linux/macOS Staging validation, current `Icod.DCurses` downstream acceptance/soak, and the stable `1.0.0` compatibility floor.
- 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.

## 1.10.0

### Dependency decoupling and capability planning
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.10.0</VersionPrefix>
<VersionPrefix>1.11.0</VersionPrefix>
<VersionSuffix></VersionSuffix>
<Version Condition="'$(VersionSuffix)' == ''">$(VersionPrefix)</Version>
<Version Condition="'$(VersionSuffix)' != ''">$(VersionPrefix)-$(VersionSuffix)</Version>
Expand Down
227 changes: 227 additions & 0 deletions Icod.Terminal-1.11.0-Development-Roadmap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
# Icod.Terminal 1.11.0 Development Roadmap

**Release:** `1.11.0`
**Theme:** persistent raster resources and placements
**Status:** complete; C119 accepted and ready for maintainer review
**Development version:** `1.11.0`
**Stable compatibility floor:** `1.0.0`
**Prior release:** `1.10.0`

## Why this release exists

Versions 1.7 and 1.8 established a backend-neutral ephemeral raster contract through `TerminalRasterImage` and `TerminalSession.DisplayRasterAsync(...)`. Version 1.10 added protocol-neutral capability inspection and explicit bounded verification without widening graphics ownership.

Version 1.11 introduces a separate persistent graphics ownership domain so callers can upload terminal-resident raster data, create one or more placements, update placement size/location through ordinary terminal positioning plus placement replacement, and deterministically dispose those objects.

The release deliberately does **not** turn `Icod.Terminal` into a virtual-screen or scene-graph library.

The approved architectural specification is:

[`docs/superpowers/specs/2026-09-11-1.11.0-persistent-raster-design.md`](docs/superpowers/specs/2026-09-11-1.11.0-persistent-raster-design.md)

The implementation plan is:

[`docs/superpowers/plans/2026-09-11-1.11.0-persistent-raster.md`](docs/superpowers/plans/2026-09-11-1.11.0-persistent-raster.md)

## Architectural objectives

The 1.11 contract must:

1. expose opaque session-owned resource and placement objects rather than Kitty numeric identifiers;
2. distinguish ordinary `RasterGraphics` from new `PersistentRasterGraphics` capability truth;
3. keep Sixel valid for ordinary ephemeral raster display without pretending it supports terminal-resident persistent resources;
4. reuse the existing authoritative query/input path for Kitty acknowledgements;
5. retain committed-output semantics and avoid blind replay/backend switching after partial failure;
6. invalidate terminal-resident identity across lifecycle-generation changes rather than retaining hidden image copies for automatic replay;
7. bound all resource and placement bookkeeping;
8. preserve the stable 1.x compatibility floor and existing enum numerics;
9. keep higher-level layout/cell/window/scene policy in `Icod.DCurses`.

## Frozen public direction

The final public model is:

```text
TerminalCapability.PersistentRasterGraphics = 9

TerminalRasterResource : IAsyncDisposable
TerminalRasterPlacement : IAsyncDisposable
TerminalRasterPlacementOptions

TerminalSession.CreateRasterResourceAsync(...)
-> TerminalControlResult<TerminalRasterResource>

TerminalRasterResource.CreatePlacementAsync(...)
-> TerminalControlResult<TerminalRasterPlacement>

TerminalRasterPlacement.UpdateAsync(...)
-> TerminalControlMutationResult
```

`TerminalRasterPlacementOptions` contains nullable `Columns` and `Rows`, each accepted from `1..16384`; null means protocol/default behavior. Position remains the terminal's current cursor location, and placement output uses no-cursor-movement semantics.

No public Kitty image id, image number, placement id, backend selector, raw APC control dictionary, or scene graph is introduced.

The internal live-registry ceilings are:

```text
256 persistent resources per session
4096 persistent placements per session
```

Persistent resource upload is acknowledged. It uses a private Kitty image number (`I`) so the terminal can return the assigned nonzero image id (`i`). Existing ephemeral raster bytes remain unchanged.

## Tranche plan

```text
C110 architecture and public API regret gate complete
C111 persistent Kitty protocol foundation complete
C112 persistent capability integration complete
C113 session-owned resource/placement registries complete
C114 persistent resource creation/upload complete
C115 placement creation and multi-placement ownership complete
C116 placement update and deterministic disposal complete
C117 lifecycle invalidation, teardown, and failure semantics complete
C118 adversarial/downstream/package qualification complete
C119 public API/documentation/compatibility/release closure complete
```

## C118 feature acceptance

C111–C117 implemented the frozen persistent-raster protocol, capability, ownership, lifecycle, and cleanup contracts. C118 requalified that complete surface under adversarial responses, repeated lifetime churn, package-only consumption, generated documentation, the backend-neutral sample, downstream DCurses acceptance, and all supported target frameworks.

The C118 acceptance record is:

[`docs/C118-1.11.0-Persistent-Raster-Adversarial-Downstream-and-Package-Qualification.md`](docs/C118-1.11.0-Persistent-Raster-Adversarial-Downstream-and-Package-Qualification.md)

Validated feature head:

```text
bc838f7011a2a584f958a0478fd800bf508a4832
```

Acceptance workflow:

```text
#1602 / 34695867877
```

That unchanged feature head passed Windows, Linux, macOS, package/API candidate, all four package-contract shards, and the validated package artifact.

## C110 — architecture and public API regret gate

**Accepted.** C110 froze the ownership model, public API, capability separation, generation-scoped certainty, cancellation/commit semantics, resource bounds, and exclusions before production implementation.

The record is:

[`docs/C110-Persistent-Raster-Architecture-and-API-Regret-Gate.md`](docs/C110-Persistent-Raster-Architecture-and-API-Regret-Gate.md)

## C111 — persistent Kitty protocol foundation

**Complete.** Typed internal Kitty Graphics encoding/parsing supports transmit-only acknowledged resource upload, placement create/update, targeted placement deletion, resource-data deletion, direct transfer, bounded Base64 chunking, private ids, duplicate/overflow rejection, and unchanged ephemeral raster bytes.

## C112 — persistent capability integration

**Complete.** `PersistentRasterGraphics = 9` is additive. `InspectCapability(...)` remains side-effect free; `VerifyCapabilityAsync(...)` uses only the reviewed bounded Kitty support path; Sixel remains valid for ordinary raster without implying persistent ownership.

## C113 — session-owned resource and placement registries

**Complete.** Bounded internal registries provide nonzero collision-safe resource/image-number and placement identities, explicit wraparound, 256/4096 capacity ceilings, generation stamping, parent/child association, concurrency-safe transitions, and no arbitrary source-image cache.

## C114 — persistent resource creation/upload

**Complete.** `CreateRasterResourceAsync(...)` validates capability/state/cancellation, uploads direct raw raster data with a private image number, correlates the terminal acknowledgement, publishes a handle only after nonzero terminal identity is established, preserves committed-output semantics, and does not replay or switch backend after partial failure.

## C115 — placement creation and multi-placement ownership

**Complete.** Resource placement creation uses current-cursor positioning, `Columns`/`Rows` in `1..16384`, no-cursor-movement semantics, multiple placements per resource, opaque handles, bounded reservation, and stale/disposed behavior without public protocol ids.

## C116 — placement update and deterministic disposal

**Complete.** `TerminalRasterPlacement.UpdateAsync(...)` replaces the same private `(image, placement)` identity at the current cursor. Placement/resource disposal is locally idempotent, releases ownership exactly once, cleans children before resource data, and surfaces cleanup transport failures without restoring uncertain local ownership.

The public API fingerprint frozen here and retained through release closure is:

```text
9336a1f6def1c4b02e86db813bae27f45b95af33f47a2cf10dccd4d1d44324f2
```

## C117 — lifecycle invalidation, teardown, and failure semantics

**Complete.** Persistent identities are generation-scoped. `InvalidateState()` and managed lifecycle changes stale existing handles; no automatic replay/source-image retention occurs; stale disposal is local-only; current session teardown deletes placements before resources and integrates failures with existing cleanup/restoration.

## C118 — adversarial, downstream, and package qualification

**Accepted.** Qualification covers malformed/oversized acknowledgements, wrong ids, duplicate fields, capacity/wraparound boundaries, `ENOENT`, repeated ownership cycles, generation invalidation, registry churn, transport/cancellation/redirection boundaries, fresh NuGet-only package consumption, all TFMs, generated XML docs, DCurses acceptance/soak, and the backend-neutral persistent-raster sample.

See the C118 acceptance record linked above.

## C119 — public API/documentation/compatibility/release closure

**Accepted.**

The release-facing state includes:

- final multi-TFM public API fingerprint `9336a1f6def1c4b02e86db813bae27f45b95af33f47a2cf10dccd4d1d44324f2`;
- stable `1.11.0` package identity with no prerelease suffix;
- final package release notes;
- final README and changelog entry;
- curated `docs/releases/1.11.0.md`;
- permanent `docs/Persistent-Raster-Ownership.md`;
- 1.11 Architecture/Security/Compatibility authority updates;
- final sample catalog and backend-neutral sample verification;
- long-range roadmap handoff to conditional 1.12 advanced placement/lifecycle work;
- release-closure record at [`docs/C119-1.11.0-Release-Closure.md`](docs/C119-1.11.0-Release-Closure.md).

C119 code/release acceptance is frozen on exact head:

```text
66002280a3e5c800b9b8d230de483f63945d571d
```

with pull-request workflow:

```text
#1611 / 34698727655
```

Workflow #1611 completed successfully on that unchanged SHA. Windows, Linux, macOS, package candidate/API freeze, Package Foundation, Package Presentation, Package Semantic and hardening, Package Stable 1.x release line, and the validated package artifact all passed. The successful macOS rerun used the same SHA and introduced no source change.

Merge, `main` Release validation, tagging, GitHub Release creation, and NuGet publication remain maintainer actions.

## Explicit exclusions

Version 1.11 does not include:

- public Kitty image ids/image numbers/placement ids;
- caller-selected graphics backend;
- Sixel persistent-resource emulation;
- automatic replay after lifecycle invalidation;
- retained source-image caches for hidden restoration;
- source rectangles;
- z-order;
- Unicode placeholders;
- relative placements;
- pixel-coordinate placement;
- animation;
- scene-graph ownership;
- image-file decoding/transcoding;
- Kitty file/temp-file/shared-memory transport;
- PTY/ConPTY hosting;
- DCurses cell/window/layout/damage policy.

These remain excluded unless separately reviewed in a later release.

## Release gate

The established repository policy remains:

```text
reviewed contract
-> focused tests
-> implementation
-> multi-TFM/runtime/package validation
-> exact-head acceptance evidence
```

The final 1.11 code/release head satisfied the complete Windows/Linux/macOS Staging matrix before maintainer handoff. This documentation-only acceptance commit is the final repository-state qualification step before PR #52 leaves draft.
Loading
Loading