Console: marshaling friendly names + robustness batch (#337, #340, #341)#345
Merged
Conversation
#341) - (#337) Marshaling audit trail + "Reverse a ruling"/"Resolve" pickers: the server bakes raw log offsets ("(ref N)") into some summaries and names no competitor structurally for lap-/target-addressed rulings. The screen now re-composes each line from the structured fields: a lap-addressed target resolves its competitor through the lap list, a protest-resolution/reversal chases its target audit entry, and the callsign renders via the shared resolver. Picker options read "<what> - <callsign> . #offset" (offset only a trailing detail); audit lines strip the raw "(ref N)" the same way. - (#340a) Silent [] on directory loads: LiveRaceControl, Marshaling, and the global ContextHeader no longer swallow failed pilots/heats reads into empty arrays (raw refs with no error state). Each tracks a load-error flag, keeps the last good data, shows a visible "Couldn't load - retry" state (+ one toast on the transition into error), and retries via a nonce. - (#340b) Marshaling open-protest count now matches the server's Finalize gate (open_protest_count, control_handler.rs): a filing is closed only by an UNreversed resolution targeting it, so a ProtestResolved later undone by RulingReversed counts the protest as open again - no more Finalize offered client-side only to be rejected by the server. - (#340c) Rounds form: clearing "Laps" (First-to-N / Best-of-N) or the FromRanking "Take top" no longer silently saves 1 - both block submit via the same canSubmit pattern as the timed race-time field (#329). - (#341, verified) Results JSON export: the legacy standings / heatResult sections carried raw competitor refs. Both now resolve through the shared resolver with the raw ref kept alongside (competitor_ref), like every other exported view. Tests: new/updated coverage in MarshalingScreen, LiveRaceControl, ContextHeader, EventRounds, and results tests; test-session pilot/heat seams default to inert success so the new error state only shows when a test injects a failure. Both svelte-check passes, vitest (491), and lint clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Jul 3, 2026
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.
Fixes #337 and #340, plus the confirmed export item from #341 (user-approved fix batch from the release review).
(ref N)offsets into audit summaries; the screen now resolves the competitor (chasing a ruling's target through the audit chain or the lap list's pass refs) via the shared resolver and renders‹callsign› · ‹summary› · #offset— offsets trailing detail only. Reverse-ruling and resolve-protest pickers labeled‹what› — ‹callsign› · #offset.[]: failed pilot/heat directory reads in Live control, Marshaling, and the global header now show a visible retry state (keeping last-good data) instead of rendering raw refs with no explanation.standings/heatResultexport sections now resolve callsigns (raw ref kept alongside).Gates: both svelte-check passes clean, 491/491 tests, lint clean.
🤖 Generated with Claude Code