Per-submission board: one source file + one PR per submission#35
Merged
Conversation
The public leaderboard was a single site/results.json updated by one aggregate PR, so all models were coupled — you couldn't accept, hold, or revert one model's result without the whole board, and triggering the scorer twice opened duplicate PRs (no dedup). Make each submission its own reviewable unit: - Source of truth is now one file per submission, site/results/<slug>.json, where slug = <model>--<UTC-time>--<short-id>, derived deterministically from the scored file (backend_score.board_slug/board_entry/write_board_entries). Test submissions produce no public file. - score-from-r2.yml opens ONE PR per new/changed entry on branch bot/leaderboard/<slug>. The slug is stable, so re-scoring the same submission force-updates the SAME branch/PR (idempotent — no duplicates); a different submission is its own independently mergeable/revertible PR. - site/results.json becomes a generated artifact: publish-on-merge aggregates site/results/*.json (best run per model) via `backend_score --build-board`, guards each entry + the built board, and deploys. It is gitignored; `make board` / `make serve` build it locally. - check_aggregate accepts a single-entry object (per-submission file) as well as the list, and allows the timestamp/submission_id provenance tags. - Also adds a reset_results workflow input (supersedes PR #34) and fixes the root-anchored /results/ gitignore so it no longer shadows site/results/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018xw6L5yUrz33UrQpanbwnH
e50faaa to
ae552cd
Compare
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.
Reworks the leaderboard so each submission is independently controllable (per your request), instead of one aggregate
site/results.jsonthat couples all models.What changes
site/results/<slug>.json, slug =<model>--<UTC-time>--<short-id>, derived deterministically from the scored file.score-from-r2.yml): branchbot/leaderboard/<slug>. Re-scoring the same submission force-updates the same PR (idempotent, no dupes); a different submission gets its own PR you can merge / hold / revert alone. Test submissions produce no public file.site/results.jsonis generated at publish:publish-on-merge.ymlaggregatessite/results/*.json(best run per model) viabackend_score --build-board, guards each entry + the board, deploys. It is gitignored;make board/make servebuild it locally.timestamp/submission_idtags.reset_resultsworkflow input (supersedes Fix duplicate leaderboard PRs; add reset_results knob #34) and fixes the root-anchored/results/gitignore so it no longer shadowssite/results/.Verified locally
143 unit tests pass (5 new: slug determinism, per-submission file emission, test-exclusion, build_board dedup,
--build-boardCLI). The R2/PR loop runs in CI on trigger.Note: supersedes #34 (dedup); #31 (simplify nits) is independent.
🤖 Generated with Claude Code
https://claude.ai/code/session_018xw6L5yUrz33UrQpanbwnH