Skip to content

Koth ladder - #570

Merged
plind-junior merged 17 commits into
testfrom
koth-ladder
Jul 28, 2026
Merged

Koth ladder#570
plind-junior merged 17 commits into
testfrom
koth-ladder

Conversation

@plind-junior

Copy link
Copy Markdown
Member

What changed

Why

What might break

VEP

Tests

  • make check passes locally (lint + mypy + pytest)
  • New / changed behaviour has a test
  • CHANGELOG.md updated under ## [Unreleased]

plind-junior and others added 15 commits July 28, 2026 00:58
run() gained a strategy parameter forwarded to build_context_pack, but
the strategy module and the context-side parameter never landed in this
history — every bench.run call raised TypeError, which would error the
koth gate on any ladder PR. remove the dangling coupling; the engine-lane
work can reintroduce it together with its context.py half.
no legal kit change can beat the baseline today - measured on the day's
12 paired seeds, every ranking knob (recency, rerank, pages-first,
prompt gate) produces exactly zero composite diff because ranking never
changes pack membership at bench density; only backend moves the score,
and substring moves it down 0.34. so the auto-merge loop gets its
integration test the honest way: the reigning kit is pinned to the weak
substring backend, and the first challenger restoring backend auto
dethrones it with a genuine, reproducible margin. ladder branch only -
the shipped defaults are untouched.
pull_request_target checks out the default branch by default, so ladder
PRs ran against a tree with no scripts, no engine, and no reigning kit
(pr 565's first run). pin actions/checkout to the pull request's base
ref - still trusted code, a branch of this repo, never the PR head -
and derive the seed sha from the checked-out tree instead of
github.sha, which is also the default branch under this trigger.
round-1 ladder entry: the round-0 canary champion pins the substring
scan; this kit restores backend auto (fts5 with rrf fusion when
embeddings exist). measured locally with the gate's own scorer on the
day's derived seeds, the restore clears the dethrone band by a wide
margin. kit-only change, as the ladder requires.
merge feat/koth-engine-lane into the ladder branch so the gates score
with the shared paired_verdict math and the koth-ledger workflow is live
on the branch it triggers from. restores the strategy kwarg on
bench.run that the ladder had stripped while the module was uncommitted.
substring backend scores ~0.2-0.4 composite below auto on any seed, so
the next kit-only pr restoring auto dethrones decisively. round 1
exercises the full chain live: gate scorecard, auto-merge on the
protected ladder branch (gate required, strict), and the new koth-ledger
row append.
…566)

the reigning round-1 canary runs the substring backend, which scores
~0.2-0.4 composite below auto on any seed. restoring auto clears the
dethrone band on the day's paired seeds.
… events

round 1 (pr #566) proved the gap live: the gate arms auto-merge with the
workflow GITHUB_TOKEN, and github suppresses workflow triggers for
pushes caused by that token, so the merge push never reached the ledger.
the workflow now sweeps recently merged ladder prs (schedule + manual
dispatch + the still-working push path for human merges); the appender
stays idempotent per pr, so overlapping sweeps converge.
the ladder's required gate check applies to direct pushes too, so the
bot's row append was rejected (round 1 proved it). protection moved from
classic branch protection to the koth-ladder-gate ruleset (same gate
requirement, strict), and the ledger checkout uses an owner token with
admin bypass. the workflow never runs on pr events and never executes
untrusted code, so the token stays out of untrusted reach.
with a ranking strategy active, retrieval fetched exactly `limit` hits
before the strategy ran, so ordering could never change pack membership
- and the bench grades presence, not order, which made every strategy
score byte-identical to baseline (measured: 12 seeds, diff 0.0000).

retrieval now over-fetches a bounded pool (5x limit, floor 50) when a
strategy is active and the top `limit` of the strategy's order survive
the cut. de-prioritising below the window excludes the candidate; a
strategy still cannot fabricate a result or shrink the pack. contract
language in the lane doc and baseline docstring updated to match, plus
a regression test that a demoted candidate leaves the pack.
ranks first-hand statements over hearsay (reported speech about a named
third party is demoted, hardest when the query is first-person), pushes
stored instructions to the tail (a memory that tells the reader what to
answer is an injection, not a fact), and boosts change-of-state phrasing
so the newest value survives a tight budget. blended with the backend
score and plain lexical overlap for everything else.

verified locally with the ci-exact loop over generic seeds 1-12:
challenger 0.5750 vs baseline 0.5250, diff +0.0500, band 0.0381 -
dethroned.
open contributors kept needing the lane rules from three scattered docs.
contributing.md now states the two pr shapes the gates enforce: engine
lane = one new file under contrib/strategies/ against koth-ladder,
sandboxed, scored, never auto-merged, human review for benchmark-keyed
logic; kit lane = kit.yaml only, auto-merge on dethrone, low ceiling by
construction. includes the local ci-exact practice command and the
reproducibility and payout pointers.
workflow lint only runs on prs that touch workflows, so the koth gates'
pull_request_target findings never surfaced until the engine-gate
registration pr woke the linter. both gates now carry the ignore
annotation with the justification inline (base-branch code only, pr
content handled as data, read-only tokens), and the scorecard comment
script declares its literal backticks for shellcheck.
feat(competition): provenance-rank engine-lane submission
@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@plind-junior, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 39 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 63841f55-b22b-4498-9fbe-be5e82b6207d

📥 Commits

Reviewing files that changed from the base of the PR and between 819fdba and 5baf77c.

📒 Files selected for processing (5)
  • .github/workflows/koth-engine-gate.yml
  • .github/workflows/koth-gate.yml
  • competition/LEADERBOARD.md
  • competition/kits/current/kit.yaml
  • contrib/strategies/provenance_rank.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch koth-ladder

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added docs documentation, specs, examples, and repo guidance ci github actions and automation cli command line interface retrieval context, search, synthesis, and evaluation tests tests and fixtures size: XL 1000 or more changed non-doc lines labels Jul 28, 2026
@github-actions github-actions Bot added size: S 50-199 changed non-doc lines and removed docs documentation, specs, examples, and repo guidance cli command line interface retrieval context, search, synthesis, and evaluation tests tests and fixtures size: XL 1000 or more changed non-doc lines labels Jul 28, 2026
pin checkout and setup-python to immutable commit shas (mutable tags in
a pull_request_target workflow are a supply-chain surface), and classify
a delete-only strategy pr as normal instead of engine - the filename
shape matched but there is nothing to fetch at the head sha, so the
gate failed messy instead of passing through.
@github-actions github-actions Bot added the ci: passing ci is green label Jul 28, 2026
@plind-junior
plind-junior merged commit f28022e into test Jul 28, 2026
17 of 20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci: passing ci is green ci github actions and automation size: S 50-199 changed non-doc lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant