Repository navigation
feat(capture): set the replayed rounds in evalshift.yaml as captures.rounds - #63
Merged
Merged
Conversation
…rounds --rounds was a flag only, so teacher-forced replay had to be repeated on every sync. With the default (first), an agent that answers after a tool call is scored on the call alone and the text evaluators see no answer: on a real converter suite semantic and llm_judge had 2 of 17 rows. captures.rounds (first | all, default first) now sets capture sync's default; --rounds overrides it for one run, and capture promote keeps the flag only. Sync never rewrites a promoted case unasked, so when the setting is all and promoted cases still replay one round although their captures carry the tool results to replay more, it says how many and suggests capture sync --force. init scaffolds the key commented out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review follow-ups to captures.rounds: - The hint counted any promoted case by its capture, including cases --force never rewrites (promote --as names, repair candidates, cases retired in the same run), so it could repeat forever. It now counts only where sync declines to rewrite a case named after its capture, and leaves out reviewed and stale cases. - It suggested a bare `capture sync --force`, which re-promotes as the config's `first` when all came from --rounds, and touches every suite. The command now carries --rounds all and --suite as the run used them, and the hint says --force drops hand edits and provenance: reviewed. - An unreadable config's warning names captures.rounds too. - Docs: the sync --rounds default is captures.rounds; llms-full's config schema lists rounds; --force only reaches cases whose capture is local. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…config # Conflicts: # docs/configuration.md
Merged
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.
Why
--roundswas a flag only, so teacher-forced replay had to be passed on everycapture sync. Under the default (first), an agent that answers after a tool call is scored on the call alone, andsemanticandllm_judgenever see its answer. On a real converter suite they scored 2 of 17 rows: the 15 turns that calledconvert_currencybefore answering had no text to score. A durable setting belongs inevalshift.yaml.What changes
captures.rounds: first | all(defaultfirst) inevalshift.yamlsets the roundscapture syncpromotes with.capture sync --roundsstill overrides it for one run.capture promotereads no config and takes only the flag, as before.first, the same way sync's othercaptures:settings fall back.all, sync counts cases it just declined to rewrite.--forcewould rewrite) and still replays one round although its capture now builds a teacher-forced case.--forcewould drop the mark. Stale cases are left out, because the planner may retire them in the same run. Cases promoted under another name (capture promote --as) and repair candidates are never reached, so they aren't counted either.--rounds alland--suite <S>added when the run used them, and says what--forcecosts:⚠ 15 promoted case(s) replay only their first round, although their captures carry the recorded tool results to replay every round. Sync never rewrites a promoted case unasked: evalshift capture sync --force once re-promotes each case whose capture is still local, which drops hand edits and provenance: reviewed marks (reviewed cases are not counted here).captures.rounds(replaying the first round only).initscaffolds# rounds: allcommented out, with a one-line explanation.docs/configuration.md(the captures table plus a note on existing cases and CI pins),docs/agents.md, DOCS.md, llms-full.txt and the CHANGELOG.Compatibility: an older CLI rejects the new key (
extra="forbid"), so a CIevalshift-version:pin has to be updated before the key is added. The docs and CHANGELOG say so. The hosted bundle doesn't carry thecapturesconfig.Test plan
all, defaults tofirstand rejects anything else;syncwith no flag takesrounds: allfrom the config, giving a case withtool_result_fixtures;--rounds firstoverridesrounds: all;allmakes sync print the hint and leave the case alone,sync --forcere-promotes it with fixtures, and the next sync is quiet;--rounds allwhen the flag asked for it, and--suitewhen one was given;promote --ascase;sync --rounds someexits 2;captures.rounds.--force.ruff check,ruff format --checkandmypy --strictare clean.pytest: 3303 passed, 1 skipped (the existing evalshift-server skip), above the 90% coverage gate.pre-commit run --all-filespasses.🤖 Generated with Claude Code