Point a repeat at the change's own copy and name the copies it left untouched - #58
Merged
Merged
Conversation
…ntouched In a check of changed lines, and in an agent's turn, a shared-logic finding whose change touched only some copies now sits at the first copy the change touched, in that copy's file, and names each untouched copy and whether its file is one the change edits. Its next step is to fix the change's copy, or mark the finding `later --note "#issue"` when sharing the logic would rewrite the untouched copies. The JSON report lists them under `untouched`. The fingerprint stays the one the repeat has in a check of whole files, so baselines still accept it, and what fails the gate is unchanged; the hook holds a turn only for the change's own copy. A file's findings are reordered and its status recomputed by one helper after grouping and after moving.
tauanbinato
marked this pull request as ready for review
October 4, 2026 02:32
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.
What and why
Closes #55
Decided by the user (2026-10-03, on #55): "outside the change" means lines. A copy is untouched when the change did not touch its lines. The finding sits at the change's own copy, and untouched copies never hold a turn. Searching unchanged files stays out of scope, and the default gate is unchanged.
--base, or an agent's turn), a shared-logic finding whose change touched only some copies now sits at the first copy the change touched, in that copy's file. Before, it sat at the first copy by path, which could be one the change never touched.later --note "#issue"when sharing the logic would rewrite the untouched copies.untouched(a location plusfile_changed).COMPOSITIONfrom v13 to v14. Neither is part of the answer cache key, so nothing is asked again.jevgate.tomlkey was added (the issue left one optional), sojevgate.schema.jsonis unchanged.How it was checked
src/units/tests/changed.rs:file_changed: true). A check of whole files gives the same fingerprint at the first copy.--contextfile is named as being in a file outside this change.src/hook/tests/mod.rs: in a turn that edits one copy, the end-of-turn block points at that copy and names the untouched one. Once the finding is markedlater --note "#192", the turn ends.tests/cli/changes.rs: the binary, with a mock provider:untouched;untouched.cargo fmt --check,cargo clippy --locked --all-targets -- -D warningsandcargo test --lockedpass (889 unit, 83 CLI, 3 lint-policy tests)cargo +1.90.0 check --lockedwas not run: 1.90 is not installed here, and CI runs itCHANGELOG.md has a line under
UnreleasedJevGate gate (
jevgate check --base origin/main --rule all --include-tests): passed.Fixed: the files' "strongest first, then status" code had copies in
compose, grouping and the new move. They now sharestrongest_firstandreorder. The anchoring step runs insidecompose_files.Dismissed one at a time with
baseline mark --note:src/units/tests/changed.rs:7file-organization,wrong: every test in the file checks what a--basecheck judges.tests/cli/changes.rs:5file-organization,later: as on main, the file mixes--base,--configand GitHub format tests. The old entry got the same note.src/units/compose/mod.rs:672finding,intended: as on main; this PR only adds the new empty field.src/evaluate.rs:297Session::evaluate,intended: as on main; only thecompose_filescall changed.src/units/compose/comments.rs:44comment_findings,intended: as on main; this PR only adds the new empty field.src/units/grouping.rs:30shared-logic,wrong: a two-line loop that calls the sharedreorder.src/hook/tests/mod.rs:371shared-logic,intended: the binary's unit tests and the CLI test crate cannot share a fixture.src/units/plan/mod.rs:196shared-logic,wrong: onelines.touchcall on different spans.