Skip to content

Icod.Terminal 1.20.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 08:36
· 20 commits to main since this release
8aa6d05

Icod.Terminal 1.20.0

Profile and capability decisions

Version 1.20 implements 3 + focused 6 + 10: static screen-profile refinement, hardening of the existing support-verification paths, and executable documentation/samples. The stable compatibility floor remains 1.0.0.

TerminalProfile.Screen adds nine immutable advertisement properties for existing cursor routes and scroll-region selection, plus AdvertisesErase, AdvertisesCharacterShift, and AdvertisesLineShift queries using the existing operation enums. These describe representation presence, including empty or malformed sources. They do not expand arguments, probe a terminal, or guarantee a concrete plan. Existing Supports... properties keep their meaning. Default values advertise nothing; unknown operation kinds throw ArgumentOutOfRangeException.

Applications should request a concrete plan using their actual parameters and distinguish unavailable, valid zero-byte, and rejected requests. Missing absolute cursor addressing does not exclude existing home/relative or row/column routes. Plans remain opaque and session-owned; advertisement and planning do not commit output or invalidate a pending transaction.

Existing verification and evidence ownership

Only KeyboardReporting, RasterGraphics, and PersistentRasterGraphics have live verification paths. The other nine current values remain inspection-only through VerifyCapabilityAsync. Sixel support alone cannot establish persistent raster support, and a generic graphics observation does not establish placeholder or animation support.

A regression allowed a reply to a pending support query to update evidence after InvalidateState() advanced the session generation. Included keyboard, Kitty graphics, Sixel, and shared Primary DA observations now record against their originating generation; the ledger atomically ignores expired observations. Aggregate raster verification stops its fallback sequence when it detects the generation change. A subsequent explicit request can establish fresh support. Previously returned statuses remain snapshots.

Existing query framing, admission, cancellation, response ownership, and exceptions remain intact. Silence remains inconclusive. Keyboard, Kitty graphics, and Sixel retain one-second per-query deadlines; aggregate verification and scheduling can take longer. There is no new protocol family, timeout API, scheduler, background discovery, or presentation-mode probe.

Runnable guide and sample

The capability sample reports profile facts, concrete plan availability and byte counts, and all twelve status rows. Default reporting performs no explicit support queries and commits no demonstration plan. --verify selects the three existing paths and then re-inspects. --help/-h work headlessly, invalid arguments return 2, runtime failures return 1, and cancellation returns 130 after cleanup. Session startup still owns its ordinary input-mode transition.

The tests and fresh-package consumer execute the same report routine with scripted sessions. They qualify alternative cursor planning, zero-byte plans, missing operations, available/unavailable endpoints, the complete no-probe matrix, and opt-in verification without clipboard, resource, or reporting-mode mutations. The permanent capability guide separates static advertisement, plans, live evidence, and endpoint availability.

Compatibility and qualification

Target frameworks remain net8.0, net9.0, and net10.0. Dependencies remain Icod.TermInfo 1.16.0 and Icod.Timing 1.0.0; optional test/sample Inspection remains 1.16.0 and stays outside the production graph. All 1.19 public signatures and enum values are retained; twelve additive members produce the identical all-framework fingerprint:

d308fb6ead5bd24c564d159297e6d08793c08eb4db21418eca6a5563aa5c4cbf

The 1.20 roadmap records regression evidence and qualification status. Required package witnesses retain DCurses 1.6.0, DCurses 2.2.0, the Terminal-only renderer, and the actual screen-output sample. Scripted coverage is not physical-emulator certification, performance benchmarking, or a fresh six-runner architecture matrix. Merge, tagging, release creation, and publication remain maintainer actions.

See Compatibility-and-Versioning.md, Public-API-Baseline-1.20.md, and PR #65.

A second late-response regression is also corrected: keyboard flags belonging to a cancelled request cannot verify a newly queued request. Observation starts with that request's emission; earlier flags are drained under existing wire ownership without becoming new positive evidence. A negative Kitty observation still leaves independent keyboard backends unknown.

The stable checkpoint passed all nine jobs in workflow 36302907074: 2,465 unit tests and 15 integration tests per framework on Windows, Linux, and macOS, plus all package/sample/downstream gates. The stable qualification record identifies the source, synthetic merge, artifact, package/symbol hashes, and final documentation-head validation policy.