Skip to content

Add a guaranteed line, list every place head to head, drop the leverage grid - #76

Merged
dgoodenough merged 1 commit into
mainfrom
claude/tender-dijkstra-fvvlf9
Sep 22, 2026
Merged

dgoodenough merged 1 commit into
mainfrom
claude/tender-dijkstra-fvvlf9

Conversation

@dgoodenough

Copy link
Copy Markdown
Owner

Three follow-ups to #75, all on the What's left tab. Front-end only — no pipeline change, no bundle-schema change.

1 · A guaranteed line on the cutline table

A fourth column, and the columns reordered hardest-first: Guaranteed · High · Median · Low, still after Short. That is the order a chaser reads them in, because the question is what it takes to stop worrying.

# Player Points Short Guaranteed 868 High 826 Median 798 Low 777
25 Marwede 794.42 4 24th 46th any clear
28 Tamm 730.1 68 7th 17th 25th 38th
36 Smith 661 137 2nd 4th 7th 12th
41 Welck 596.2 202 1st 2nd 3rd

Guaranteed is the cutline at its 99.9th percentile — clear it and you are in under all but one simulated season in a thousand, which is as close to a guarantee as 25,000 seasons can express.

It is a column and not a mark on the chart, deliberately: 868 lands past the last histogram bar (the bars stop at the 99.5th percentile), so a guide line for it would hang off the right edge with nothing under it. The panel note now says exactly that, so the number does not look like it arrived from nowhere.

The bands also gain keys and are looked up by key rather than by index. The chart reads its median from band(bands, "mid") now, so the solid line cannot silently follow the next time the display order changes — which is what would have happened here, since the reorder moved the median from index 1 to index 2.

The row filter moves with it: the table now lists everyone not already past the guaranteed line rather than the high one, since a player clear of high still has something to read in the new column.

2 · Head to head lists every place

The sampled ladder (1, 2, 3, 5, 8, 12, 20, …) is gone. It was defensible about points and wrong about people: a top-heavy curve does make the deep rows nearly identical in value, but the row someone actually wants is the one their rival finishes in, and nothing here can guess which that is.

81 rows in MPO, 42 in FPO — contiguous 1..N, verified. That is the roster (76 / 37) plus five places of slack, because entries move right up to the first tee and a ladder that stops at today's headcount would be missing real finishing positions by Sunday.

That one depth (fieldDepth) now feeds every search and every ladder in the file. It matters: if the ladder ran to 81 while needAt still searched to 76, rows 77–81 would price their answer against a shallower field and the margins would drift. Same place asked for, same place priced.

The table moves into pv-scroll pv-tall — the same 460px box with a sticky header that the other long tables on this tab already use.

3 · The leverage grid is hidden while one event is left

"Where the season actually gets decided" answers which of the events left matters most to you, which stops being a question when the answer is the only column there is. With one event on the calendar it had become a restatement of the auto-bid odds printed beside it.

Conditional on d.events.length > 1 rather than deleted — it is the most interesting panel on this tab in March, and gating it also skips a 24-row conditional re-simulation (~1.2s of chunked work) computing something nobody can act on. The panel count in the intro follows automatically: "These five panels".

Happy to make it unconditional if you would rather it were simply gone.

Verification

  • Both divisions at 390px and 1180px, every tab walked and returned to: five panels, no leverage grid in the DOM, no page errors, no horizontal overflow.
  • Needs table renders Guaranteed 868 / High 826 / Median 798 / Low 777 in MPO and 1100 / 1063 / 1034 / 1011 in FPO.
  • Head-to-head ladder asserted contiguous 1..81 (MPO) and 1..42 (FPO); sticky header measured pinned to the scroll box at scrollTop 900 / 678, at both widths.
  • python -m pytest tests -q258 passed (unchanged — this touches no Python).

🤖 Generated with Claude Code

https://claude.ai/code/session_01JsBC4pyUqbxW9y5o9tAeRr


Generated by Claude Code

…ge grid

Three things the season's last week asked for.

A fourth column on the cutline table: the line at its 99.9th percentile,
which is what "guaranteed" means when the answer comes from 25,000 seasons.
It is a column and not a mark on the chart because it lands past the last
bar — the histogram stops at the 99.5th — so a guide line for it would hang
off the right edge with nothing under it. The columns now read hardest
first: guaranteed, high, median, low, which is the order a chaser reads
them in, since the question is what it takes to stop worrying. The bands
carry keys and are looked up by key rather than by index, so the chart's
median line cannot move the next time the display order changes.

Head to head lists every finishing place rather than a sampled ladder. The
sample was defensible about points and wrong about people: the row someone
wants is the one their rival actually finishes in, and nothing here can
guess which that is. It runs to the roster plus five places of slack,
because entries move right up to the first tee and a table that stops at
today's headcount would be missing real finishing positions by Sunday. That
one depth now feeds every search and every ladder, so the place a table asks
for and the place it prices are the same place. 81 rows in MPO, 42 in FPO,
in the same scrolling box the other long tables here use.

The leverage grid is hidden while one event is left. It answers "which of
the events left matters most to you", which stops being a question when the
answer is the only column there is — it had become a restatement of the
auto-bid odds printed beside it. Conditional rather than deleted: it is the
most interesting panel on this tab in March, and hiding it also skips a
24-row conditional re-simulation computing something nobody can act on.

Verified against the published MPO and FPO bundles at 390 and 1180px: five
panels, no leverage grid in the DOM, the needs table reading guaranteed 868
/ high 826 / median 798 / low 777 in MPO, head-to-head contiguous 1..81 and
1..42 with its header pinned while the box scrolls, no page errors and no
horizontal overflow. 258 tests still pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JsBC4pyUqbxW9y5o9tAeRr
@dgoodenough
dgoodenough merged commit 5bc0074 into main Sep 22, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants