Repository navigation
fix: enforce the no-run-output policy in .gitignore, and import AGENTS.md - #43
Merged
Merged
Conversation
…S.md Two guardrails this repository states but does not enforce, plus the doc and comment claims that went with them. 1. Run output was committable, and four places said it was not. .gitignore only covered the cloned target repos (swe-benchmark-data/*/repo/) and replay.jsonl. Everything a run actually writes -- metrics.json, eval.json, patch.diff, the design artifacts and multi-megabyte *-stream.jsonl -- was committable by a plain `git add -A` after a benchmark. docs/repository- structure.md asserted "Gitignored - no run output is committed", and harness-reference.md, docs/omp-setup.md and the onboard-benchmark skill made the same promise for metrics.json, stream files and runner.yaml. The tree is now ignored with the directory's README re-included, which is the only file tracked under it. This is the one place the rule deliberately differs from upstream: upstream re-includes metrics.json, eval.json and run-summary.json so its runs stay inspectable from git, and here those are measured results this repository does not publish. benchmarks/config/runner.yaml is ignored too. It holds the endpoint and, unless api_key_env is used, a literal API key -- and two docs plus the onboard-benchmark skill walk every new user through creating it while stating it is gitignored. Also ported from upstream: a swe-clone-*/ backstop for a clone_dir pointed inside the repo, the three stray repo-root writes an agent produces when handed a bare relative filename instead of its absolute artifacts_dir, and the .hftoken spelling beside the existing .hf_token. 2. CLAUDE.md did not import AGENTS.md. Claude Code reads CLAUDE.md, not AGENTS.md, so it started with a single Markdown note and never saw this repository's two process guardrails: never commit directly to main, never merge without review. CLAUDE.md now imports AGENTS.md, which already carries the Git rules, the navigation guidance, the paths not to read and the same Markdown convention. 3. Claims that pointed the other way. harness-reference.md described "the committed run-summary.json", and three script docstrings and comments said the same. No run-summary.json is committed here and none was before this change -- only the README is tracked under swe-benchmark-data -- so the wording was inherited from upstream, where the rollup IS committed. Reworded to describe run-summary.json as the file a team keeps or publishes. No behaviour change: summarize_run.py still scrubs the judge's local temp path, it just no longer gives a reason that does not hold. Verified each case with git check-ignore: run output, stream files, runner.yaml and a stray /github-issue.md are ignored; swe-benchmark-data/README.md stays tracked. `git ls-files --ignored --exclude-standard -c` is empty, so no file that was tracked became ignored. 642 tests pass, ruff and ruff format clean.
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.
Two guardrails this repository states but does not enforce, plus the doc and comment claims that went with them.
1. Run output was committable, and four places said it wasn't
.gitignorecovered only the cloned target repos (swe-benchmark-data/*/repo/) andreplay.jsonl. Everything a run actually writes —metrics.json,eval.json,patch.diff, the design artifacts and multi-megabyte*-stream.jsonl— was committable by a plaingit add -Aafter a benchmark.Meanwhile:
docs/repository-structure.md:36benchmarks/docs/harness-reference.md:473metrics.jsonis gitignored"docs/omp-setup.md:83.claude/skills/onboard-benchmark/SKILL.mdrunner.yamlis gitignoredI hit this for real earlier in this migration: a live Strands benchmark run left its artifacts sitting as untracked files that
git statusoffered up for commit.The tree is now ignored with the directory's README re-included — the only file tracked under it. This is the one place the rule deliberately differs from upstream: upstream re-includes
metrics.json,eval.jsonandrun-summary.jsonso its runs stay inspectable from git, and here those are measured results this repository doesn't publish.benchmarks/config/runner.yamlis ignored too. It holds the endpoint and, unlessapi_key_envis used, a literal API key — and two docs plus the onboard skill walk every new user through creating it while stating it is gitignored.Also ported from upstream: a
swe-clone-*/backstop for aclone_dirpointed inside the repo, the three stray repo-root writes an agent produces when handed a bare relative filename instead of its absoluteartifacts_dir, and the.hftokenspelling beside the existing.hf_token.2.
CLAUDE.mddid not importAGENTS.mdClaude Code reads
CLAUDE.md, notAGENTS.md. So it started with a single Markdown note and never saw this repository's two process guardrails — never commit directly tomain, never merge without review — along with the navigation rules and the paths not to read.CLAUDE.mdnow importsAGENTS.md, which already carries all of it. Substantive rules stay in one file so the two can't drift.3. Claims pointing the other way
harness-reference.mddescribed "the committedrun-summary.json", and three script docstrings/comments said the same. Norun-summary.jsonis committed here and none was before this change — only the README is tracked underswe-benchmark-data— so that wording was inherited from upstream, where the rollup is committed.Reworded to describe
run-summary.jsonas the file a team keeps or publishes. No behaviour change:summarize_run.pystill scrubs the judge's local temp path, it just no longer gives a reason that doesn't hold here.Verification
Each case checked with
git check-ignore:git ls-files --ignored --exclude-standard -cis empty, so no file that was tracked became ignored.642 tests pass,
ruffandruff formatclean.Remaining from the audit
The omp fuzzy model-match guard — the last behavioural defect — then versioning.