The LLM node settings screen rendered “Backend” and “Response Format” as inline FilterChip rows — a minor pattern, applied twice in the same file with duplicated code — while the majority of single-choice settings screens across the catalog use the shared HorizontalOptionSelector<T> RadioButton composable. Separately, TimeRangeSelector.kt also used FilterChip for its “Range” selector, making Graph and Diagram outliers from the established RadioButton majority.
EditLLM.kt was written before HorizontalOptionSelector was established as the project’s shared single-choice selector. Both inline FilterChip blocks in that file served the same selection pattern but were not sharing any code with each other or with the rest of the catalog. TimeRangeSelector.kt similarly predated the RadioButton convention.
EditLLM.kt: Replaced the two hand-rolled Row { entries.forEach { FilterChip(...) } } blocks (lines 82–90 and 187–195) with HorizontalOptionSelector calls, passing it.displayLabel as the label lambda. import krill.zone.app.ui.* was already present; no new imports needed.TimeRangeSelector.kt: Replaced the horizontalScroll + FilterChip Row with a Column containing HorizontalOptionSelector. The outer modifier now applies to the Column; both call sites (GraphScreen.kt, DiagramScreen.kt) are unchanged.When a settings editor needs a “pick one of N” control, reach for HorizontalOptionSelector<T> (ui/DialogComponents.kt) rather than an inline FilterChip loop. The shared composable handles accessibility semantics (Role.RadioButton, selectableGroup) and FlowRow wrapping automatically. New node-type editors should be reviewed against the catalog before merge to catch widget-family drift early.