Skip to content

Field 2026-08-30 wave 1: min-lap floor, tone cooldown, TT clock/tones, channel-mode default - #511

Merged
ryan-johnson2 merged 2 commits into
develfrom
field-0830-console
Aug 31, 2026
Merged

Field 2026-08-30 wave 1: min-lap floor, tone cooldown, TT clock/tones, channel-mode default#511
ryan-johnson2 merged 2 commits into
develfrom
field-0830-console

Conversation

@ryan-johnson2

Copy link
Copy Markdown
Contributor

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

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

ryan-johnson2 and others added 2 commits August 30, 2026 18:54
…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
@ryan-johnson2
ryan-johnson2 merged commit 4b40c00 into devel Aug 31, 2026
4 checks passed
@ryan-johnson2
ryan-johnson2 deleted the field-0830-console branch August 31, 2026 00:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment