Skip to content

History / Jinx Handicaps

Revisions

  • Let the fleet finish minutesAfterSunset after sunset, default 8 With limitBySunset, the slowest boat may be expected home up to minutesAfterSunset after sunset: twilight outlasts it. The same allowance caps the next race's target when a race's time adjustments become TCFs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

    @gregw gregw committed Oct 16, 2026
  • Bring the slowest boat home by sunset, and keep penalties whole under the cap The sunset cap now limits the slowest boat's expected time, not the median boat's: t_target_elapsed <= floor(daylight x TCF_min / TCF_med). Capping the target itself let the fleet finish after sunset. Time adjustments are converted against the next race's target after that cap, so a five-minute penalty still starts the boat five minutes late on a night sunset shortens. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

    @gregw gregw committed Oct 16, 2026
  • Serve the duty boat, then DNS and RET, before the boats at home After the racers have had their minute, what is left goes to the duty boat (AVG), then to boats that did not start or retired (DNS, RET), each capped at a minute, and only then evenly to the DNCs. Adds a worked table for a thirty-boat fleet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

    @gregw gregw committed Oct 5, 2026
  • Use the committee's revised elevator pitch Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01USJqVVgZxkzFLmkD4kcpJ5

    @gregw gregw committed Sep 29, 2026
  • Give the penalties back a minute at a time Top five pay 5, 4, 3, 2, 1; the minutes come back one per boat, DNFs first, then the last boat home working forwards; leftovers are shared evenly by the boats that stayed home. The TCF change is measured against the next race's expected duration. The weighted giveback, its variants and knobs are retired. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01USJqVVgZxkzFLmkD4kcpJ5

    @gregw gregw committed Sep 29, 2026
  • Giveback goes to the entry list, not to the starters The pool of penalty minutes was shared among the boats that raced, which divided a fixed pool by a varying fleet: what a boat gained went as 1/turnout. Five boats of thirty out on a filthy night and the same fifteen minutes came straight back to the five that had just been charged them, with the boat finishing last of five collecting six against a one-minute penalty - a better handicap outcome than winning, while the twenty-five at home did not move. It now comes back to everybody entered, by weights counted in ordinary finishers: a penalty place 0 any other finisher 1 + gamma * gap/maxGap ran out of time (DNF) the last finisher's weight + (dnfWeight - 1) never came (DNC) dncWeight * (stayed home / entered) RET, DSQ, DNS, ABN 0, frozen A non-starter's weight rises as the fleet empties, so a thin night sends most of the pool out of the racing fleet - a de facto scaling of the penalties that never has to appear on a start sheet as a fraction. Retires dnfAllowance, which said the same thing as a distance and so depended on how spread out the fleet was that night, and givebackFleet, which has no well-defined meaning once the pool reaches boats with no finish gap. The default variant moves B -> A: gamma = 1 existed to stop the winner drawing its own penalty back, and weight zero on the penalty places does that directly. Adds the ladder sizing rule (about one rung per six boats) and the case where nobody may receive, which charges nothing rather than keeping the pool. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U2kYoSyx6LHgkkwEK1jEnt

    @gregw gregw committed Sep 9, 2026
  • simplfied handicaps

    @gregw gregw committed Aug 26, 2026
  • Fix the elevator pitch in §1 The penalty may be absolute or per hour of race duration, which the first bullet did not say. The second bullet still described the retired winner ramp — a share running from half an even share down to zero as the race approached idealRaceLength, a knob that no longer exists. It now describes givebackGamma, and notes that under the default the winner draws nothing back because its gap from itself is zero.

    @gregw gregw committed Aug 24, 2026
  • Variant B is the default: fixed penalties, given back by finish gap Marks B as the default in the knobs table and the parameter defaults, and retitles 6.6 to "variant C" — that example is still C's arithmetic and stays correct as an illustration of it. Adds 6.7: the same fleet under B. The winner's gap is zero by definition so it draws nothing back, and the penalty is the penaltyList entry rather than that entry scaled by how long the night turned out to be. 7.3 argued that C should be the default because a race run twice as slowly gives an identical correction. That argument is still true and still load-bearing wherever perHour is selected, so it is retitled rather than dropped: exact duration-independence is the one thing B knowingly gives up.

    @gregw gregw committed Aug 23, 2026
  • Use finish delta rather than elapsed time for jinx give back

    @gregw gregw committed Aug 23, 2026
  • Spec 6.5: casuals are handicapped by a second pass

    @gregw gregw committed Aug 21, 2026
  • Spec: variants as two knobs, measured raceDuration, and the giveback the code actually does

    @gregw gregw committed Aug 21, 2026
  • Retire V0: the TCF conversion is anchored to median(TCF x elapsed)

    @gregw gregw committed Aug 21, 2026
  • Document the standalone architecture sail-jinx 2.0 has no SailSys integration. Results reach SailSys by a human reading a printed report and typing them in. - Home: rewritten for the standalone app. - Jinx-Handicaps 5.1: adds corrected_finish_time, the report column, which gives back the head start from crossing early but deliberately omits the 5-min OCS penalty - that is implied by the flag beside it and applied on entry. Including it in both places would apply it twice. - Jinx-Handicaps 5.2: places are computed locally; there is no external system to defer to and no SailSys-authoritative mode. - Jinx-Handicaps 8.1: each race's entrant list carries the TCF it was sailed on, so that file IS the handicap history. The separate snapshot file existed only because SailSys kept the latest value. - Jinx-Handicaps 11: rewritten for the real implementation, including where the algorithm lives (arithmetic in Java, 5.1 primitives in static/scoring.js, shared by the race page and the finish report). - Storyboard: rewritten as the actual race-night workflow. - sailsys-api-reference: marked historical. Flags an unresolved question in 6.3/6.4: the spec describes a winner_factor and gap-anchored redistribution that PursuitHandicapEngine does not implement - it weights by elapsed^gamma with no winner anchor, for a reason argued in the code. The divergence predates this work and needs a decision rather than a silent edit.

    @gregw gregw committed Aug 18, 2026
  • Removed the calibration mechanism

    @gregw gregw committed Jun 30, 2026
  • Saving TCFs locally

    @gregw gregw committed Jun 1, 2026
  • Updated Jinx twilight handicaps (markdown)

    @gregw gregw committed May 26, 2026