D162 - A settings pane for a subsystem that does not exist is a dead control

decided ยท 2026-08-20

The shell was asked for application preferences covering resolution, window mode, and video and input configuration. Those subsystems have zero implementations - orbistoun-audio, orbistoun-video, orbistoun-input and orbistoun-fs declare their interfaces and implement none of them.

A resolution dropdown over that is principle 3's failure mode wearing a widget. Somebody picks 1080p, nothing changes, and there is no way to tell whether the setting is broken, the emulator ignored it, or the title overrode it. It is worse than no dropdown, because no dropdown at least says truthfully that nothing is configurable.

The roadmap called this before the window existed: menu strip present with settings panes stubbed, populated as the subsystems behind them land rather than built as dead UI.

So the panes exist, and say what is missing and why. The structure is real - menu strip, pane list, save - and it is populated the moment there is something behind it.

What the preferences do carry, and why it matters more

Every control in the working panes changes something that takes effect on the next run, and all of them were previously reachable only by hand-editing a TOML in the data directory:

These are not conveniences. They are the levers the bisection loop turns on, and the loop is the only oracle most of this project has (principle 5). Turning them into a UI action is the actual value of the window; a resolution dropdown would have been decoration over a subsystem that cannot honour it.

Per-title overrides are a text editor, deliberately

The override format carries compatibility entries with a mandatory reason, and keys that name the behaviour rather than the title - raytracing_enabled, never gta_rt_fix. That is what lets a second title needing the same thing add a line instead of a code path.

A form would have to either drop the reason field or invent a control for prose. Editing the layer directly keeps the requirement visible until there is a design that respects it.

Stop is real, or it is disabled

The toolbar's stop terminates the worker process, through a Stopper taken before the handle is moved to the thread that blocks on it - the thread that owns the handle is exactly the one that cannot act on a stop request.

Away from Windows there is no signal dependency in this build, so Stopper::is_supported answers false and the control is disabled with the reason on hover rather than present and silently doing nothing. Same rule as the panes: a control that lies is worse than a control that is absent.