ANALYTICS V5 — COURSE · SIDE BIAS · GROUNDED

KB-10…13 page, now with real G3 geometry (engine-validation course-side module) · side % is POSITION-based → immune to bad heading · honest pending states for derived-wind (E-C1) + gate-escape (refining)
RCYC · R1 JUN 15 ’25 3/3
COURSEside bias · wind · gates
WindBeat 1Beat 2Gates
WHAT THE WIND REALLY WASfrom fleet headings
RC set068° courseSetup.orientation — real
Fleet-sailed wind: computed, not yet served. The engine already derives fleet consensus wind (beat-angle bisection + confidence) — it just isn't on the API response. This row lights up the day E-C1 (a read-through) ships. Per-beat shift trend follows with E-C2. binding: FleetConsensus.windDirection + confidence · E-C1 = S (read-through) · per-beat = E-C2 (M)
181Innocent B.POSITION-BASED 298ChimichuriPOSITION-BASED 441AlchemistPOSITION-BASED
BEAT 1real cross-track geometry
Side of course % timeL 59%L 61%L 57%
Mean offset m65 L59 L84 L
Vs fleetMIDRIGHTMOSTLEFTMOST
WM entry last 200 mRRR
Leg result+16.5+26.310:17.8
The whole fleet worked left, everyone converged on the starboard layline — and the leftmost boat (441, 84 m mean) won the leg anyway. Side alone didn't decide Beat 1; the start exit did. Real numbers, real nuance — this is why the leg result rides in the block.
BEAT 2real cross-track geometry
Side of course % timeL 93%R 56%L 62%
Mean offset m262 L25 R70 L
Vs fleetLEFTMOSTRIGHTMOSTMID
WM entry last 200 mRRR
Leg result+10.310:05.5 +9.2
181 committed HARD left — 93% of the beat, 262 m mean offset — and paid (+10.3, worst leg). 298 was the only boat right of centerline and won the leg. This is KB's coaching-notebook story told by pure GPS position: no heading, no wind data needed.
GATESchoice + escape
Gate 1 roundedLRL
Gate 2 roundedLRR
Escape timing: refining. Gate choice (nearest mark at rounding) is solid; the "seconds to cross centerline after the gate" walk mis-fires right at the rounding (baseline-sign handling) and isn't shown until the refinement pass lands. Honest gap, not a fake number. binding: GateChoice { gate, escapeCenterlineCrossSeconds } · refinement in course-side module
L/R looking downwind · round the gate on the side you want to sail (KB) · marks derived from track turns — "representative, usually enough" caveat surfaces here
Ships after N1/N1b: side bias needs leg boundaries — on shared-WM-coord races (G2/B5/B6) this page shows the same "leg boundary uncertain" state as Race Analytics until the monotonic-rounding fix + recompute land. G3-class races (7/11 of corpus) render fully today, client-side.
iPhone · 390pt · full scroll · REAL G3 side-bias geometry

WHAT THE EVIDENCE CHANGED (COURSE PAGE)

  • Every side-bias number on this page is real — computed by the validated course-side module on G3 GPS tracks. §6 findings: 181 Beat-2 = 93% L / 262 m; all three entered the WM from the right. The v4a page was †illustrative; v5 is the module's actual output.
  • Side % is position-based → immune to N2. Unlike the Maneuver page, this page needs no heading — every boat gets the POSITION-BASED treatment. The trust story differs per page, and the design says so explicitly.
  • Real data killed a fake story. The v4a mock invented "L vs R decided Beat 1." The real geometry shows the whole fleet went left on Beat 1 and the leftmost boat won anyway — so the block keeps the leg result adjacent, and the note explains rather than overclaims. Evidence-grounding changes the copy, not just the numbers.
  • Two honest pending states: fleet-sailed wind (computed but not API-exposed → E-C1 read-through) and gate-escape seconds (geometry mis-fires at the rounding → refinement pass). Both render as labelled pending blocks, not blanks or invented values.
  • D4 confirmed: client-first. ~150 lines of client geometry on tracks the viewer already holds, bound to the SideBias/GateChoice contract so the later E-E engine move is a data-source swap.

FLEET SCALE (N>6)

  • Per-boat columns = focused boats (detail tier). At 20+ boats, add fleet-distribution rows: "14 left / 6 right · leftmost-3 avg finish 8.2" — summary-tier, needs E-D/E-E.