GitHub
08/23/2026, 10:01 AMlogSinksEnabled / authProvidersEnabled service flags: the Service Config page rendered them as the literal text null and gave read-only booleans no visual affordance. Both are fixed, and the boolean layout rule is simplified along the way.
Nullable bool fields rendered as "null"
LogSinksEnabled and AuthProvidersEnabled are *bool in the config types so that "unset" can mean "default to enabled" for backwards compatibility. Go marshals a nil pointer as JSON null, and inferType classified that as the null case — so the page showed the placeholder text null instead of a control, with no way to change the value.
Those two keys are now recognised as nullable booleans and render as toggles, with null coerced to off. The set is an explicit two-key allowlist rather than a heuristic, because they are the only *bool fields in the config types and a blanket "null means boolean" rule would misrender genuinely-null values elsewhere.
Read-only booleans now look read-only
Non-editable sections printed booleans as the bare strings true / false, visually unlike the toggles used everywhere else for the same data. They now render as real toggle switches in a disabled state — ToggleSwitch gained a disabled prop that sets the button's disabled attribute and dims it — so the value reads the same way regardless of whether the section can be edited, while staying obviously non-interactive.
One rule for boolean layout
Booleans previously rendered in one of two places depending on a count threshold: inline as ordinary field rows, or grouped into a "Feature Toggles" grid once a section had three or more of them. Adding a flag to a section could therefore relocate every other boolean in it.
Every boolean now goes to the Feature Toggles grid, regardless of count or section editability. The hasManyBooleans threshold and the inline boolean branch are gone, which also removes the case where the same field type had two different renderings.
Changes
• frontend/src/features/service-config/ServiceConfigPage.tsx — NULLABLE_BOOLEAN_KEYS, boolean partitioning, ToggleSwitch disabled, read-only boolean row, field help for both new flags (api and tls variants, noting the tls values are inert and kept only so the service section round-trips)
• frontend/src/features/service-config/ServiceConfigPage.test.tsx — two new tests
Testing
• Read-only booleans render as switches with the right aria-checked and are disabled.
• Nullable flags render as three switches with no null text, null reads as off, and toggling one marks the section dirty so Save enables.
jmpsec/osctrlGitHub
08/23/2026, 10:27 AM