Skip to content

Per-submission board: one source file + one PR per submission#35

Merged
isPANN merged 1 commit into
mainfrom
refactor/per-submission-board
Jul 6, 2026
Merged

Per-submission board: one source file + one PR per submission#35
isPANN merged 1 commit into
mainfrom
refactor/per-submission-board

Conversation

@isPANN

@isPANN isPANN commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator

Reworks the leaderboard so each submission is independently controllable (per your request), instead of one aggregate site/results.json that couples all models.

What changes

  • Source of truth = one file per submission: site/results/<slug>.json, slug = <model>--<UTC-time>--<short-id>, derived deterministically from the scored file.
  • One PR per submission (score-from-r2.yml): branch bot/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.json is generated at publish: publish-on-merge.yml aggregates site/results/*.json (best run per model) via backend_score --build-board, guards each entry + the board, deploys. It is gitignored; make board/make serve build it locally.
  • check_aggregate now accepts a single-entry object and the timestamp/submission_id tags.
  • Adds a reset_results workflow input (supersedes Fix duplicate leaderboard PRs; add reset_results knob #34) and fixes the root-anchored /results/ gitignore so it no longer shadows site/results/.

Verified locally

143 unit tests pass (5 new: slug determinism, per-submission file emission, test-exclusion, build_board dedup, --build-board CLI). 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

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
@isPANN isPANN force-pushed the refactor/per-submission-board branch from e50faaa to ae552cd Compare July 6, 2026 06:56
@isPANN isPANN merged commit fd763e3 into main Jul 6, 2026
1 check passed
@isPANN isPANN deleted the refactor/per-submission-board branch July 6, 2026 07:01
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.

1 participant