feat(audio): passing tone only during races and remove legacy audio

Adds 'Calls during a race' (default: passing tone only, like timing
systems) that drops name/personal best/leader/position calls in race
sessions; practice keeps them. Removes the legacy audio panel and
fallbacks, including its 'Sound on' switch that silently muted every
race-audio voice.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
larssand
2026-09-30 21:47:40 +02:00
parent 5bfb67ea02
commit aaca5e8c63
13 changed files with 108 additions and 205 deletions

View File

@@ -43,4 +43,17 @@ export async function runSettingsTabsSmoke({ evaluate, navigate }) {
assert.equal(visible.system, true);
assert.equal(visible.connection, false);
console.log("PASS the active settings tab is preserved across a save-triggered re-render");
// The old "Audio · Legacy" panel is gone; "Calls during a race" defaults to passing tone
// only and survives a save.
await evaluate(`document.querySelector('[data-settings-tab="audio"]').click()`);
assert.equal(await evaluate(`/Legacy/.test(document.querySelector('[data-settings-panel="audio"]').innerText)`), false, "no legacy audio panel");
assert.equal(await evaluate(`Boolean(document.querySelector('[name="audioEnabled"], [name="passingSoundMode"]'))`), false, "no legacy sound switches");
const callouts = () => evaluate(`document.querySelector('[name="raceAudioRaceCallouts"]').value`);
assert.equal(await callouts(), "passing");
await evaluate(`(() => { document.querySelector('[name="raceAudioRaceCallouts"]').value = "full"; document.getElementById("settingsForm").requestSubmit(); })()`);
assert.equal(await callouts(), "full", "speaker mode is saved");
await evaluate(`(() => { document.querySelector('[name="raceAudioRaceCallouts"]').value = "passing"; document.getElementById("settingsForm").requestSubmit(); })()`);
assert.equal(await callouts(), "passing");
console.log("PASS the legacy audio panel is gone and race calls default to passing tone only");
}