Repository navigation
Releases
v2.0.0-beta.2
What's Changed
- ci: promote the green master package artifact on release by @StevenTCramer in #50
- chore: clear repo audit checks, add CI coverage, and pin .NET 11.0.100 GA by @StevenTCramer in #51
- build(deps): update TimeWarp.Build.Tasks to 2.0.0 and TimeWarp.SourceGenerators to 1.0.0-beta.14 by @StevenTCramer in #52
- docs(kanban): mint task 042 for wave 20261114T054552Z-9a0f39 by @StevenTCramer in #53
Full Changelog: v2.0.0-beta.1...v2.0.0-beta.2
v2.0.0-beta.1
What's Changed
- chore: commit porcelain gitignore lines so claim does not dirty gc by @StevenTCramer in #41
- build: take NuGet pins to latest, including Amuru 2.0.0-beta.2 by @StevenTCramer in #43
- kanban: add task 033 (README repositioning) by @StevenTCramer in #44
- docs: position Terminal as a framework-agnostic console layer by @StevenTCramer in #45
- build(dev-cli): disable XML doc file so AOT self-install succeeds by @StevenTCramer in #46
- chore: clear repo audit and take the current NuGet pins by @StevenTCramer in #47
- build: target net11.0 so Terminal ships on the current SDK by @StevenTCramer in #48
- feat: emit a command span from every dev CLI route by @StevenTCramer in #49
Full Changelog: v1.0.2...v2.0.0-beta.1
v1.0.2
What's Changed
- chore(kanban): add 027 enable ganda kanban publish on master by @StevenTCramer in #28
- docs(kanban): record 027 enforce_admins off and publish proof by @StevenTCramer in #29
- docs(kanban): record 029 round-1 review disposition by @StevenTCramer in #30
- fix: isolate TestConsole I/O and FormatProvider across parallel tests by @StevenTCramer in #31
- fix: isolate TestConsole I/O and FormatProvider across parallel tests by @StevenTCramer in #32
- feat: stacked-task-set 029-002 by @StevenTCramer in #33
- feat(layout): add TimeWarp.Terminal.Layout flexbox companion package by @StevenTCramer in #34
- docs(kanban): brief 030 version bump for Layout release by @StevenTCramer in #35
- fix: keep panel boxes aligned at padded min-width by @StevenTCramer in #36
- docs(kanban): close 028 journals already ignored by @StevenTCramer in #37
- docs(kanban): archive 027-001 publish-smoke proof by @StevenTCramer in #38
- fix: CI path filters, snupkg push, and kebab package readme by @StevenTCramer in #39
- fix: align Title, Beep, CancelKeyPress, and stderr color contracts by @StevenTCramer in #40
Full Changelog: v1.0.1...v1.0.2
v1.0.1
What's Changed
- Release 1.0.1: Nuru/DevCli pins, trusted-publishing probe, and audit-clean by @StevenTCramer in #27
Full Changelog: 1.0.0...v1.0.1
1.0.0
First stable release of TimeWarp.Terminal — terminal abstractions and widgets for testable C# console applications. Everything below came out of a full release-readiness review (all 56 findings fixed or explicitly triaged).
Breaking changes vs 1.0.0-beta.13
- Format culture:
Terminal.Write/WriteLine(format, ...)now use the current culture (Console parity) instead of InvariantCulture. SetTerminal.FormatProvider = CultureInfo.InvariantCulturefor deterministic output. ReadKey()moved fromIConsoletoITerminal: key-by-key input is interactive-terminal functionality;TestConsole.ReadKey()(which threw) andTimeWarpConsole.ReadKey()are removed.- Legacy conhost members removed (
MoveBufferArea,CursorSize,SetWindowSize,SetWindowPosition,SetBufferSize,WindowLeft,WindowTop,LargestWindowWidth/Height) — these do not work in Windows Terminal, let alone elsewhere.WindowWidth/WindowHeight/BufferWidth/BufferHeightare now get-only onITerminaland the static facade (TestTerminalkeeps setters). AnsiHyperlinks.CreateLink(url, displayText): parameter order aligned withWriteLink.TableBuilder.Build()returns a snapshot — post-Build builder calls no longer mutate built tables.- ConsoleColor SGR mapping corrected:
Dark*→ 30-37, normal → bright 90-97 (previously collided); visible output changes forConsoleColoroverload users. WritePanel(string, string?)overload removed: it madeTerminal.WritePanel("content")a CS0121 ambiguous call.
Highlights
- Capability-aware output:
ConsoleColoroverloads, widget colors, andWriteLink/WriteLinkLinedegrade to plain text whenSupportsColor/SupportsHyperlinksis false (non-emptyNO_COLOR,TERM=dumb, redirection). - Parallel-safe testing:
Terminal.Instanceresolves through the async-localTestTerminalContext; the context never mutates the global. - Rendering correctness: Unicode 16 EAW-accurate width measurement, ANSI handling for all CSI/OSC/ESC forms, mid-word styling no longer breaks word wrap, ANSI-preserving cell truncation.
- Security: OSC 8 hyperlink URLs sanitized (C0/DEL percent-encoded), closing a terminal escape-injection vector.
- Cross-platform:
CursorVisible/Titlesetters andBeep()work on Linux/macOS;KeyAvailableno longer throws under redirected stdin; platform contracts documented on every member. - Verified AOT-compatible: builds clean under full trim/AOT analysis; proven by native AOT publish.
Full details: #26
🤖 Generated with Claude Code
1.0.0-beta.13
What's Changed
Maintenance
- Integrated
TimeWarp.Nuru.DevClishared endpoints (clean,check-version,self-install) — replaces local duplicates - Bumped
TimeWarp.Amuruto 1.0.0-beta.33 andTimeWarp.Nuruto 3.0.0-beta.70 - Added
.timewarp/dev.jsoncfor repo-local dev-cli config
Full Changelog
1.0.0-beta.12
What's Changed
Bug Fix
- Package icon: Added
logo.pngto NuGet package so the TimeWarp icon appears on NuGet.org
Full Changelog
1.0.0-beta.11
What's Changed
Complete Console API Surface Coverage
This release adds full System.Console API coverage to IConsole, ITerminal, and the Terminal static class. Application code no longer needs to touch System.Console directly.
IConsole (new members)
- Stream access:
OpenStandardInput(),OpenStandardOutput(),OpenStandardError(),In,Out,Error,SetIn(),SetOut(),SetError() - Encoding:
InputEncoding,OutputEncoding - Redirection state:
IsInputRedirected,IsOutputRedirected,IsErrorRedirected - Rich input:
Read(),ReadKey()(parameterless overload)
ITerminal (new members)
- Cursor properties:
CursorLeft,CursorTop,CursorVisible,CursorSize - Window/buffer geometry:
WindowHeight,WindowLeft,WindowTop,BufferWidth,BufferHeight,SetWindowSize(),SetWindowPosition(),SetBufferSize(),MoveBufferArea(),LargestWindowWidth,LargestWindowHeight - Color state:
ForegroundColor,BackgroundColor,ResetColor() - Control/utility:
Beep(),Beep(int, int),TreatControlCAsInput,Title,KeyAvailable
Terminal static class
- All new members mirrored as static pass-through to
Instance
Test implementations
TestConsoleandTestTerminalupdated with mock streams, encoding defaults, character queues, geometry defaults, beep tracking, null checks onSetIn/SetOut/SetError
Stats
- +5,691 lines across 28 files
- ~160 new unit tests across 8 test files
- 0 build warnings
Full Changelog
1.0.0-beta.10
What's Changed
Improvements
- TestTerminalContext Refactor: Replaced side-effect-heavy
Currentsetter with explicitSetCurrent,ClearCurrent, andUse(TestTerminal)APIs for clearer lifecycle management - CancelKeyPress Event: Added
CancelKeyPressevent toITerminalfor graceful Ctrl+C handling in interactive applications - Baseline Compliance: Fixed
.envrcsyntax, added#region Purposeannotations, updated NuGet packages
Maintenance
- Updated NuGet packages: TimeWarp.Amuru, TimeWarp.Jaribu, TimeWarp.Nuru, Microsoft.CodeAnalysis analyzers
- Added description to dev CLI for capabilities check
- Configured
.editorconfigto disable banned checks (this IS the terminal library)
Full Changelog
1.0.0-beta.8
What's Changed
New Features
-
CancelKeyPress Event - Added
CancelKeyPressevent toITerminalfor graceful Ctrl+C handling in interactive applications like REPLs (#18)TimeWarpTerminaldelegates toConsole.CancelKeyPressTestTerminalincludesSimulateCancelKeyPress()for testing
-
Hyperlinks in Table Rows - Added sample demonstrating hyperlinks within table cells
Improvements
- MSBuild Variables in Runfiles - Updated all 28 runfiles to use
$(SourceDirectory)instead of hardcoded relative paths, leveraging .NET 10's support for MSBuild property expansion in#:projectdirectives
Refactoring
- Renamed CLI command files to remove
-commandsuffix for cleaner naming - Renamed
cicommand toworkflowfor clarity - Renamed
ScriptsDirectorytoToolsDirectoryinrepository.props