Mark the serving-sensitivity re-runs on the Claude rows instead of a banner - #167
Merged
Conversation
…banner
The leaderboard's serving-sensitivity paragraph carried four re-run scores
and a mechanism explanation above the table, where scanning readers skip it.
The scores now sit on the rows they describe: each of the four Claude rows
gets a chip ("auto 87.5 · #3") that opens, on click or keyboard, a short
explanation of how the row was served, what the re-run changed, the re-run's
score and would-rank, and links to the note. The banner shrinks to one line
that says the markers exist and that the next board version moves every
model to auto. The scores and treatments live in one module
(app/src/lib/servingSensitivity.ts); would-ranks are still derived from the
live board rows at render time. The four model pages carry the same line.
A native <details> keeps the marker readable without JavaScript and
operable from the keyboard; Escape and outside clicks close it.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
… use pinned measurements Peer review round 1: - The open panel renders through a portal with fixed, viewport-clamped coordinates (panelPosition, unit-tested), so it escapes the row's animation transform that trapped it beneath later rows, and stays inside narrow viewports. Escape, outside click, scroll or resize closes it; the closed/server render keeps the panel inline. - The chip compares the re-run against the row's exact-match score on the unfiltered board (the universe the re-runs were scored on), not the score under the reader's metric or filters, and says so. - The banner says three rows ran without extended thinking; Fable 5.1 reasons in both runs, so its marker compares transports. - Scores are the pinned three-decimal measurements (asserted equal to sensitivity/data/*.json); deltas subtract unrounded inputs and round only for display (Fable 5.1: +1.2, not +1.3). The model page shows the same delta. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Peer review round 2: - panelPosition takes the viewport height and the panel's rendered height: below the chip when there is room, above it otherwise, and a height cap with overflow scrolling when neither side fits. Scrolling and resizing re-place the panel instead of closing it. - Opening moves focus into the panel once the portaled copy is committed; Tab past its last link or Shift+Tab before its first returns to the chip; Escape closes and restores focus; an outside click closes. Unit tests cover the placement cases; the keyboard sequence and the above-the-chip placement were exercised on a dev server. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… stays in view Peer review round 3: place() used the panel's rendered height, which an earlier placement may have capped, and the post-commit check skipped re-placement when the rendered height equalled the cap, so scrolling a constrained panel could push it below the viewport. Placement now uses the panel's content height (scrollHeight), records it, and re-places on the next frame whenever the content height differs from the one the current placement assumed. The pending-focus flag is a ref so the focus effect sets no state. A bounds test sweeps chip positions, viewport heights and content heights and asserts the visible box always stays inside the viewport, including the reviewed 568x320 case. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…he placement inside the top margin Peer review round 4: a chip scrolled past the viewport edge still had an open panel, clipped or entirely off-screen. place() now closes the panel when the chip's box no longer intersects the viewport; a chip that is only partly visible keeps its panel, whose top is clamped to the margin. The scroll/resize coalescing and the post-commit re-placement use zero-delay timeouts rather than animation frames, which browsers pause in hidden tabs. Tests: the two reviewed off-screen cases, partly visible edges, and a sweep over every anchor the component places. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…the right chip Peer review round 5: with two chips opened by keyboard, every open chip's document-level Escape handler ran, so Escape inside one panel closed both and left focus on the other chip. A small registry (app/src/lib/disclosureRegistry.ts) makes opening a chip close any other without moving focus, and routes Escape to the active chip only, which restores focus to its own trigger. Tests cover the reviewed sequence (later chip open, earlier chip opened, Escape) and release semantics. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The one-line banner said the board forces the answer tool call without saying for which rows; the disclosure test requires the contract qualification (rows whose model card selects the tool contract; Fable 5.1 selects JSON), which the previous paragraph carried. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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.
Summary
The leaderboard's serving-sensitivity paragraph carried four re-run scores and a mechanism explanation above the table, where scanning readers skip it and where it is far from the rows it qualifies. The scores now sit on the rows they describe.
auto 87.5 · #3) beside its name, on both the desktop and mobile layouts. Clicking it (or activating it from the keyboard) opens a short note in place: how the row was served, what the re-run changed, the re-run's score with its delta and would-rank, and links to the sensitivity note, the Fable 5.1 note, and v2 board condition: move every model to tool_choice auto #139. Escape or an outside click closes it. A native<details>keeps it readable without JavaScript.app/src/lib/servingSensitivity.ts; would-ranks are still derived from the live board rows at render time.Verified on a dev server: four chips render with
auto 88.2 · #2,auto 87.5 · #3,auto 86.2 · #5,auto 80.8 · #13; the popover text and links are correct; the model page line renders for Claude Fable 5.1.Tests
app/tests/servingSensitivity.test.ts: the data covers exactly the four Claude rows; the chip renders the auto score, the board-derived would-rank, the delta and the links; Fable 5.1 links its dated note; the leaderboard no longer carries the inline constant and marks the rows.bun run lint && bun run test && bun run build: 124 tests pass, build clean.🤖 Generated with Claude Code