Add a guaranteed line, list every place head to head, drop the leverage grid - #76
Merged
Merged
Conversation
…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
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.
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.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 whileneedAtstill 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 > 1rather 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
Guaranteed 868 / High 826 / Median 798 / Low 777in MPO and1100 / 1063 / 1034 / 1011in FPO.1..81(MPO) and1..42(FPO); sticky header measured pinned to the scroll box atscrollTop900 / 678, at both widths.python -m pytest tests -q→ 258 passed (unchanged — this touches no Python).🤖 Generated with Claude Code
https://claude.ai/code/session_01JsBC4pyUqbxW9y5o9tAeRr
Generated by Claude Code