feat(trg): let an eval fixture opt into read-only enforcement - #149
feat(trg): let an eval fixture opt into read-only enforcement#149yordis wants to merge 2 commits into
Conversation
a case about reading a file has no way to tell trg the file must survive the run unchanged, so a fixture an agent edited in place still passed as long as its own assertions never looked. permissions alone are not the guarantee, since an agent can delete a read-only file and write a fresh one in its place without touching a mode bit, so the staged copy is hashed against its source after every run and a mismatch fails the case regardless of what its own checks found. the wire form stays additive: a bare string still parses and still means writable, and only a fixture that opts into read_only pays for the object form, so no existing suite changes meaning. Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
the object form and its enforcement are not discoverable from the table alone, and an operator seeing a run fail over a fixture needs to know that permissions are a courtesy and content hashing is what actually holds, not something to debug as a filesystem quirk. Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
PR SummaryMedium Risk Overview Manifest wire format: Runner behavior: After staging, read-only fixtures get write bits cleared on Unix (directories stay writable so workspace reset still works). When any runner finishes, staged copies are content-hashed against the skill source (same machinery as Grading: Violations become mechanical failing assertions (fixture path in evidence), so a case cannot pass on other graders alone. Existing CI/verify paths pick this up without new gates. Reviewed by Cursor Bugbot for commit d07a50b. Bugbot is set up for automated code reviews on this repo. Configure here. |
|
Warning Review limit reachedNext included review available in 31 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (11)
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. Comment |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit d07a50b. Configure here.
| }, | ||
| cache: None, | ||
| skill_integrity: None, | ||
| read_only_fixture_violations: Vec::new(), |
There was a problem hiding this comment.
Cache hits drop fixture violations
High Severity
apply_cache_hit copies skill_integrity but not read_only_fixture_violations. A completed run that mutated a read-only fixture is still cached, and a later cache or --reuse-completed hit leaves the field empty. Grading then turns that field into the failing assertion, so the reused case can pass even though the original run failed the fixture check.
Reviewed by Cursor Bugbot for commit d07a50b. Configure here.


grading.json, the exit code, and the existingcigates without any of them being taught about this feature, and it means the fixture path an operator needs is in the evidence string rather than in a count.read_onlypays for the longer form.