Skip to main content

Migrating to 2026.8.5

Every break in this release is a rename. The type, the shape and the meaning are what they were, so the compiler names each member that moved and the fix is the new name. One thing that still compiles changed underneath, though, and it is the one worth reading: builder.Logging.ClearProviders() used to keep a console provider off the frame, and now it is the way to end up with an empty log overlay.

What changedWhat to do
ListBox<T>.Selected, Table<T>.Selected, Tabs.Selected, Tree<T>.Selected, Form.SelectedSelectedIndex
Table<T>.SortedBySortedColumn — it is the index of a column, not the order the rows are in
ScrollWindow.Around(selected, …)Around(selectedIndex, …)
TextCompleter.ChosenChosenIndex
Theme.Selected, Theme.ActiveSelected, and both on ThemePaletteSelection, ActiveSelection
Theme.Muted, ThemePalette.MutedSecondary
EntryLook.SelectedEntryLook.Selection
KeyStroke.Typed, KeyBinding.TypedCharacter, matching the KeyPress.Character they are compared against
Matches(pressed), Opens(pressed), Closes(pressed), CommandRegistry.Send/TryFindThe parameter is press
Notification.SinceRaisedAt
Notification.Filled()Fraction()
MultiChoiceModal.SelectedSelectedKeys — it holds keys, not options
MultiChoiceModal.IsSelected(option), Toggle(option), OptionListModal.Take(frame, picked)The parameter is choice
ArlecchinoState.RequestMultiChoice(…, selected, …)selectedKeys
ArlecchinoState.RequestConfirmation(title, onConfirmed)onYes
CompletionAsk.Before, CompletionAsk.AfterPrefix, Suffix
Margin(int all), SurfaceRegion.Inset(int all)The parameter is size
Joinery.Draw(into, style)The parameter is region
TerminalProbe.Ask(terminal, within)The parameter is timeout
ArlecchinoStrings.TerminalNeededTerminalMinimum
FakeTerminal.Written, FakeTerminal.CopiedWrittenText, CopiedText (Arlecchino.Testing)
PictureLimits.Most, PictureLimits.EnoughMostPixels, EnoughPixels, positionally as well (Arlecchino.Pictures)
builder.Logging.ClearProviders()Delete the line — see below

Everything else the sweep touched is inside the packages — locals, fields and the parameters of members no caller can see — and needs nothing from an application.

The renames in practice

Named arguments are the only place a parameter rename bites, and it bites at compile time:

// 2026.8.4
var list = new ListBox<string>(keymap) { Items = items, Selected = 4 };
var window = ScrollWindow.Around(selected: 4, itemCount: items.Count, rows: 10);
row.Fill(chosen ? Theme.ActiveSelected : Theme.Muted);

// 2026.8.5
var list = new ListBox<string>(keymap) { Items = items, SelectedIndex = 4 };
var window = ScrollWindow.Around(selectedIndex: 4, itemCount: items.Count, rows: 10);
row.Fill(chosen ? Theme.ActiveSelection : Theme.Secondary);

A palette written against the old names moves the same way — Selected to Selection, ActiveSelected to ActiveSelection, Muted to Secondary — and nothing about what they draw has changed. See Theming.

The console is caught now

A line written to standard output used to land on the frame and scroll it away, which is why ClearProviders was the advice. AddArlecchino now stands in front of standard output and standard error: while a frame is on the screen, what is written there is caught and logged under stdout or stderr, visible in the log overlay with escape sequences taken out of it. Before the terminal is taken and after it is given back, the console works as it always did, so --help, a startup failure and the host's own shutdown lines still print.

Arlecchino no longer registers a logging provider of its own. The overlay draws what a provider writes to the console, and the default host already has one, so ILogger reaches the overlay through it:

// 2026.8.4 — the console provider had to go, or it wrote over the frame
builder.Logging.ClearProviders();

// 2026.8.5 — leave it alone; it is how a line reaches the overlay

An application that clears every provider is told so in the overlay rather than shown a panel that stays empty whatever happens; ArlecchinoStrings.LogWithoutProviders is the sentence, and it translates like the rest.

Nothing to do, but worth knowing

Ctrl+Shift+C copies on Windows instead of stopping the application, and a copy now also goes down a clipboard program's standard input where the terminal drops OSC 52 — both are on Escape sequences.

A palette can be worked out against the background the terminal turned out to be, through ArlecchinoOptions.PaletteForBackground and the Oklch, Contrast and Shade arithmetic behind it. An application that says nothing keeps the palette it was given. See A palette for the terminal you landed on.