Skip to content

research: MULocBench adapter design + pre-registration (no data, no run yet) - #314

Draft
joyful-ii-V-I wants to merge 3 commits into
mainfrom
lane/research-mulocbench
Draft

joyful-ii-V-I wants to merge 3 commits into
mainfrom
lane/research-mulocbench

Conversation

@joyful-ii-V-I

Copy link
Copy Markdown
Collaborator

Offers a baseline design for scoring ripwire against MULocBench (arXiv:2509.25242) — a public dataset of 1,100 issues across 46 Python projects with non-code gold locations (config/docs/tests/assets, not just functions), which our existing bench/locbench and bench/multiswe harnesses structurally can't score.

No docs/LINEAGE.md row exists for MULocBench yet, and this PR does not add one. Nothing has been folded into the tool from it — there is no data on disk, no adapter has run, and no number is claimed. The nearest existing kin row is docs/LINEAGE.md L79 (SWE-bench, behind the same bench/ family this adapter would join); a MULocBench row belongs after a real run produces something to fold, not before. Full write-up: docs/research/mulocbench-baseline.md.

(Base note: measured against main at 755f9026, before 0.6.2; the diff still merges cleanly onto today's main, 15a20855, tag 0.6.2.)

What this is. The pre-registration: what an adapter must change versus our existing harnesses (dataset-native gold instead of diff-derived, F1 alongside strict Acc@k, class-level granularity, doc/config/asset/test handling), a verb-mapping table, metric definitions restated in our own words, eligibility/exclusion rules, and what we would report versus withhold — fixed in writing before any row is mined. An untested adapter skeleton (bench/mulocbench/) is included and clearly marked as such; it refuses to run rather than guessing at a schema we have not verified against a real row. The next step is an owner-run fetch, documented in the design doc's own §4.

This is a first pass — design only, nothing measured — with a lot further to push once real rows exist. Six open questions are listed for the paper's authors: the dataset's license (unstated on the HF card, unlike Multi-SWE-bench's explicit CC0), a 1,100-issue vs 3,052-card-row discrepancy we have not reconciled, the F1 partial-credit convention, two field-semantics questions (ass_file_loc, other_rep_loc), and how a deterministic non-LLM tool's numbers should be made legible against the paper's own BM25/LLM-agent baselines. We would welcome correction on any of this before we run it for real.

Our working premise across this line of investigations: algorithmic, deterministic checks applied while an AI writes are the practical way to keep code sound at the speed AI now writes it — no label, no vendor claim, a check that either fires or it doesn't.

🤖 Generated with Claude Code

barefootski and others added 2 commits September 20, 2026 14:36
…ch steps

No MULocBench data exists on disk anywhere; no number is claimed. Adds
docs/research/mulocbench-baseline.md: what a MULocBench adapter must change versus
bench/locbench and bench/multiswe (dataset-native gold instead of diff-derived,
per-issue F1 alongside strict Acc@k, class-level ranking, a for-no-docmention arm
to test R5's applyDocMentionBoost against the non-code gold it targets), fixed in
writing before any row is mined, plus open questions for the benchmark's authors
and exact owner-run fetch commands mirroring sim/msb's pattern. Confirmed
empirically with a freshly built worktree binary (not asserted from docs) that
--format=candidates already carries markdown-section and YAML-config rows, so
file-level scoring needs no new retrieval code, only new gold extraction.

Adds bench/mulocbench/run_mulocbench.py, an explicitly untested skeleton whose
main() refuses to run (zero-silent-skip contract) since no real row has been seen;
its gold-extraction field names are sourced from the public HF dataset card's
prose only and are flagged SCHEMA-UNVERIFIED pending the owner's fetch step.

No src/ changes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
quality-delta caught the first pass as a gating new-clone-of-reused-helper:
bench/mulocbench/run_mulocbench.py had forked bench/locbench/run_locbench.py's
parse_candidates to add a kind= field for class-level MULocBench scoring. Added
kind= (reads the existing k= XML attribute, previously unread) directly to the
shared function instead — every existing caller (run_locbench, run_multiswe,
run_cppbench) is unaffected, it's an additive dict key. Removed the fork.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 21, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

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

ripwirepubliccheck arm 6b fired — `docs/research/mulocbench-baseline.md` was
not listed in `docs/README.md`. The row added here is byte-identical to the one
on every other research lane so the eight of them merge without a conflict on
the same table line.

Also replaces a citation of an orchestration brief that exists only outside this
repository with the rule it states, which is the part a reader can act on.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.

2 participants