feat(settings): T229 polish batch — per-key errors, persona dropdowns, lat/long help, bed flyover - #450
Merged
Merged
Conversation
…, lat/long help, bed flyover gh-#425: ValidationProblemDetails keyed by setting key (keyless '' for empty-key + cross-field); UI paints per-key errors on their own field only, batch-wide on the rest; tab jump targets offending keys. gh-#426: PersonaSettingControl + use-persona-list hook for both Context:*:PersonaId keys; VoiceSettingControl deduped onto useVoiceList. gh-#427: lat/long help states the full DD contract, range-pinned in the help-coverage spec. gh-#431: BedPicker gains the shared HelpFlyover. Closes #425, closes #426, closes #427, closes #431
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #425 #426 #427 #431 — the four settings-surface findings from Dean's T229 pass, one batch because they share files. 🎛️
gh-#425 — errors land on the right field (the phantom-bug maker)
Backend:
ValidationProblemDetails.Errorskeyed by the actual setting key (AddErrorhelper); empty-key entries + the cross-fieldValidateBatchmessage go under ASP.NET's keyless""bucket. Atomic reject unchanged. UI: per-key messages paint only their field; batch-wide messages paint the changed fields that DON'T have their own error (no double-painting); tab auto-jump targets the offending keys; danger dots light only implicated tabs. This is the bug that manufactured the 'PatterCadence help is wrong' phantom during testing.gh-#426 — persona dropdowns
PersonaSettingControl('On-air DJ (default)' → "0", personas by name → id; an unknown saved id renders as 'Unknown persona (#id)' so a save can never silently rewrite it — an empty roster falls through the same branch, so fetch failure can't eat a value either) +use-persona-list.tsmirroring the F79.5 single-listing-path idiom. Rider taken:VoiceSettingControldeduped onto the shareduseVoiceList()— one voice-listing path again.Tts:Fallback:Voiceuntouched (Piper, stays text).gh-#427 — lat/long help states the contract
Signed decimal degrees, period separator, ±90/±180, first-4-decimals, DMS/DMM rejected, invalid ≡ blank = weather silently off (F108.1). The ±90/±180 bounds are now range-pinned in
settings-help-coverage.spec.tsxso the prose can't drift from the validator.gh-#431 — Bed (optional) explains itself
Shared
HelpFlyover(the booth-log Mode idiom) on the BedPicker label +aria-describedby: ducked −12dB, 1.5s pads, loops, cue-honoring, baked in at generate time, duck/pad are env-only.Verification
Full C# suite 0 failed across all 7 projects (Host +3 new facts for the keyed contract); jest 92 suites / 881 passed / 0 failed incl. new persona-control, bed-flyover, and paints-only-the-offending-field specs;
tsc --noEmitclean;next buildgreen. Olderrors:{settings:[…]}fixtures in unrelated specs still pass via the batch-wide fallback path (documented in the diff). Built by a worktree builder; reviewed + full-suite re-verified before PR.