Field 2026-08-30 wave 1: min-lap floor, tone cooldown, TT clock/tones, channel-mode default - #511
Merged
Merged
Conversation
…el mode (#502 #503 #504 #506) Four console fixes from the whoop-track field test: - #502: new rounds seed a 10s min-lap floor (matching the RH default GridFPV deliberately neutralizes — the round floor is the ONLY filter), and a floor of 0 shows a loud "Floor OFF" warning in the rounds form instead of passing as configured. Editing still reflects a stored no-floor round honestly as 0. - #503: crossing tones absorb same-competitor repeats within 1s of the last SOUNDED tone — one physical pass is one tone, a reflection burst is no longer a pip storm. Per-competitor (simultaneous pilots both tone), anchored on the tone (a storm cannot silence the gate indefinitely), and a marshal insert with an older source time is never absorbed. - #504: fixedEndWindowMicros honours time_limit_secs for EVERY format, not just open practice — a Time Trial stores its race duration there, so its countdown clock, 5..1s pips and end buzzer now fire; before, the backend ended the heat on schedule while the console counted up in silence. - #506: the channel-mode picker seeds from the format's default (Static for timed_qual/round_robin) instead of a flat PerHeat, and re-seeds on a real format switch without clobbering a stored choice on edit. The form always sends the field explicitly, so its seed IS the default — the flat PerHeat seed was why "Generate heats" produced one heat of ten. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VdCtnsbcVyBLmc5xo5dHEX
…nd now has (#504) The spec's 60s-limit round gets a "Time remaining" countdown plus the companion elapsed subclock since #504, so the bare .hud-clock locator went ambiguous. Scope to the primary clock, pin the subclock's presence, and assert the countdown is genuinely inside the window mid-race. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VdCtnsbcVyBLmc5xo5dHEX
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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 #502, closes #503, closes #504, closes #506 — the console half of the 2026-08-30 field-test triage (#505's grace-window engine work follows separately).
What
fixedEndWindowMicroshonourstime_limit_secsfor every format (mirroring the completion driver's unconditional time-limit branch), so a Time Trial now has its countdown clock, last-seconds pips and end buzzer.defaultChannelModeFor, mirroringChannelMode::default_for_format): Static fortimed_qual/round_robin, re-seeded on a real format switch, never clobbering a stored choice on edit. With Static, "Generate heats" on a 10-heat time trial materializes all 10 up front.Tests
raceWindow.test.ts(new): time-limit-for-every-format, precedence over a Timed window, no-fixed-end cases.lapCallouts.svelte.test.ts: burst→one tone; cooldown anchored on the sounded tone; per-competitor keying. All pre-existing Play a tone on every gate crossing — including holeshot and rejected (too-short) passes #397 pins unchanged and passing.EventRounds.test.ts: format-driven channel-mode default + re-seed on switch + no clobber on edit; 10s floor seed; floor-off warning at 0 on add and on editing an unfloored round.Frontend gates locally green: check, lint, build, full test run (61 files / 1203 tests in rd-console).
🤖 Generated with Claude Code
https://claude.ai/code/session_01VdCtnsbcVyBLmc5xo5dHEX