Icod.Terminal 1.18.0
Icod.Terminal 1.18.0
Unknown-rendition baseline recovery
Icod.Terminal 1.18.0 adds the missing recovery primitive required by a Terminal-only retained renderer: TerminalScreenPlanner.PlanRenditionBaseline() safely plans a return from unknown physical rendition state to Terminal's normalized default.
The release is additive over the stable 1.0.0 compatibility floor and the complete 1.17 API.
Baseline planning
- Derives restoration obligations from the selected profile's attribute-entry and color-selection evidence before reversible normalization can suppress unsafe requests.
- Prefers one global attribute reset when available; otherwise emits every required unconditional specific exit in stable underline, standout, italic, then strikeout order.
- Restores selectable foreground/background color state through original-color-pair restoration after attribute restoration.
- Returns
nullinstead of a partial plan when any exposed rendition axis cannot be restored unconditionally. - Returns a valid zero-byte
Renditionplan when no attribute entry or color selection is exposed, including reset-only profiles. - Reports exact emitted-byte cost after TermInfo padding interpretation and one affected line.
Planning remains side-effect free. The returned opaque plan belongs to the originating TerminalSession and can be emitted only through the existing same-session screen-output transaction.
Compatibility and ownership
Existing rendition normalization, PlanRenditionTransition(...), PlanRenditionReset(current), operation-plan ownership, output-epoch validation, cancellation, serialization, and cleanup semantics are unchanged.
The new signature exposes no Icod.TermInfo type, capability identifier, terminal string, or expansion API. TermInfo remains Terminal's private capability-data, expansion, padding, and color authority. Cells, windows, layout, Unicode width, clipping, damage, desired-versus-physical comparison, and repaint policy remain higher-layer responsibilities.
Production dependencies remain Icod.TermInfo 1.15.0 and Icod.Timing 1.0.0.
Qualification
The public API snapshots are identical across net8.0, net9.0, and net10.0. The 1.18 fingerprint is:
48975f2c42f6c544e9c574a9b3d79f7e2b7b3ecb10ab1a5a0b7067749e38e65d
Qualification covers attribute-only, color-only, combined, specific-exit, unsafe, empty, reset-only, padding, determinism, side-effect, same-session, foreign-session, stale-epoch, and cancellation cases. Fresh package consumers validate API/XML/package behavior on all target frameworks. Published Icod.DCurses 1.6.0 compatibility and a separate TermInfo-free future-renderer package consumer are also exercised on all three frameworks.
The stable candidate at source commit 56bbc011325e5c88e67f243a9b882b97bae9aac7 passed all nine jobs in workflow run 35382158657. Each target framework passed 2,383 unit tests and 15 TermInfo integration tests with zero failures. The validated Icod.Terminal.1.18.0.nupkg SHA-256 is e8f2b374fd0865aa151910686197096b344f7daf8d0ef72331520d944b322932; the .snupkg SHA-256 is 8a14d163f2ea0bf030bea0416e0a84a919a2e8c83c692956b3a2a98470d78422.
The candidate artifact is ID 10563191796 with uploaded ZIP SHA-256 b0fc9e57dcd0ccf42befc7d8d6fe91e9b0e19b62691fbfb775164252147fa028. The validated artifact is ID 10562732859 with uploaded ZIP SHA-256 1ddf8f76fbb6131271dd9123d5cab8043ddc68fd0084dfc1d1e84e8916121537.
The future-renderer witness proves that the candidate Terminal package supplies the required boundary. It does not claim that DCurses 2.0 has shipped; the retained DCurses T2001 package witness resumes after this package is published.
Tagging, GitHub Release creation, and NuGet publication remain explicit maintainer actions after candidate acceptance.
See Architecture.md, Compatibility-and-Versioning.md, Security-and-Privacy.md, Public-API-Baseline-1.18.md, and Icod.Terminal-1.18.0-Development-Roadmap.md for the permanent contract and development evidence.