Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ Notable changes to JevGate. Versions follow [Semantic Versioning](https://semver

## [Unreleased]

- `jevgate baseline mark REASON --note TEXT TARGET…` keeps a short note with the reason, such as the issue that will fix a `later` finding. Notes survive rewrites, `--merge` and marking again without one; the hook names them in the person's list of dismissals. Baseline entries also record the unit a finding names. Baselines without notes or units load unchanged.
- `jevgate baseline list [--reason …] [--rule …] [--format text|md|json]` lists accepted findings by path and line with their reason, rule, unit, fingerprint prefix and note; `--format md` prints a checklist to paste into a cleanup issue.
- The instructions `jevgate init --agent` writes and the plugin's skill tell agents to give a `later` mark the issue that will fix it with `--note`, and to export `later` marks with `baseline list --reason later --format md`. Run `jevgate init --agent` again to update them.

## [0.33.0] - 2026-10-02

Findings have one level, `review`, and the maintainability rules ask broad look-here questions whose flags the person or coding agent reading them verifies: fix the code, or dismiss the finding with a reason, and a dismissed finding is not raised again while its code is unchanged. On a 32-file sample of a game backend and its web client, the look-here questions flagged the three functions and six of the nine repeats a reviewer wanted changed, where 0.32's questions flagged none of them.
Expand Down
66 changes: 65 additions & 1 deletion jevgate-baseline.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"version": 1,
"created_at": 1790976832,
Expand Down Expand Up @@ -407,6 +407,17 @@
"message": "This test file may test several separate subjects.",
"reason": "intended"
},
{
"fingerprint": "477e510655e0f1bf20507decaef90abdb35418fdfa15c436e22ff891924c7360",
"rule": "maintainability/shared-logic",
"path": "src/baseline.rs",
"line": 275,
"unit": "`uncovered` (src/baseline.rs:275) and `list` (src/baseline.rs:437)",
"strength": "review",
"message": "`uncovered` (src/baseline.rs:275) and `list` (src/baseline.rs:437) may repeat one piece of logic, so a change to it would have to be made in each place.",
"reason": "wrong",
"note": "a filter over different collections with different tests"
},
{
"fingerprint": "5cacb82760c55a2b30cdfaad510b3796cd571ba46bada152961e96613539f9a9",
"rule": "maintainability/file-organization",
Expand All @@ -416,6 +427,16 @@
"message": "This file may do several separate kinds of work, such as separate features, layers or integrations.",
"reason": "wrong"
},
{
"fingerprint": "89c1deedd5fe8507aad0a494fda37caae01d5a80be6d0590ca591092f0592dbe",
"rule": "maintainability/file-organization",
"path": "src/baseline.rs",
"line": 18,
"strength": "review",
"message": "This file may do several separate kinds of work, such as separate features, layers or integrations.",
"reason": "wrong",
"note": "every function reads or writes jevgate-baseline.json; marked wrong on main before"
},
{
"fingerprint": "b5974a3e8b0774e52416c53f1003281dc460cd55853041125750b311c3d71376",
"rule": "maintainability/function-simplification",
Expand Down Expand Up @@ -452,14 +473,25 @@
"message": "`configured` could likely be made simpler to read or change: it may be long, deeply nested, repetitive or mix separate jobs.",
"reason": "intended"
},
{
"fingerprint": "39cf607b259539e80396bc6504520bac88b2559c0f226ab511ca4d217d2c2319",
"rule": "maintainability/file-organization",
"path": "src/command.rs",
"line": 14,
"strength": "review",
"message": "This file may do several separate kinds of work, such as separate features, layers or integrations.",
"reason": "wrong",
"note": "one function per command; marked wrong on main before"
},
{
"fingerprint": "98a9bf691db26467975da17123bbcf702cd98b0dfd8b88ff7287734126ad036c",
"rule": "maintainability/file-organization",
"path": "src/command.rs",
"line": 14,
"strength": "review",
"message": "This file may do several separate kinds of work, such as separate features, layers or integrations.",
"reason": "wrong"
"reason": "wrong",
"note": "one function per command; marked wrong on main before"
},
{
"fingerprint": "382884074321b13f806f4b5070f135fe49e274a909ba255b56896ea99cbb3d52",
Expand Down Expand Up @@ -812,6 +844,28 @@
"message": "`findings_after_edit` could likely be made simpler to read or change: it may be long, deeply nested, repetitive or mix separate jobs.",
"reason": "intended"
},
{
"fingerprint": "bcfdb6990731fd8229fca0d548d243382da1f7836974bddb6a03a3c3da289220",
"rule": "maintainability/shared-logic",
"path": "src/hook/text.rs",
"line": 181,
"unit": "`findings_after_edit` (src/hook/text.rs:181), `passed` (src/hook/text.rs:409) and 2 more copies",
"strength": "review",
"message": "`findings_after_edit` (src/hook/text.rs:181), `passed` (src/hook/text.rs:409) and 2 more copies may repeat one piece of logic, so a change to it would have to be made in each place.",
"reason": "wrong",
"note": "a singular or plural word chosen by a count; the words differ at each site"
},
{
"fingerprint": "df9713caafce9a632f15768a3840f9e336235077320120f16a378c72efaf7812",
"rule": "maintainability/shared-logic",
"path": "src/hook/text.rs",
"line": 98,
"unit": "`undecided_line` (src/hook/text.rs:98), `passed` (src/hook/text.rs:395) and 1 more copy",
"strength": "review",
"message": "`undecided_line` (src/hook/text.rs:98), `passed` (src/hook/text.rs:395) and 1 more copy may repeat one piece of logic, so a change to it would have to be made in each place.",
"reason": "wrong",
"note": "each formats a different line: an undecided unit, a dismissal, a finding"
},
{
"fingerprint": "dc771fd3a45bb112b84587cc4c5fe126e563791c1643b1d8e995055a3d97da7b",
"rule": "maintainability/file-organization",
Expand Down Expand Up @@ -1091,6 +1145,16 @@
"message": "`is_test_attribute` could likely be made simpler to read or change: it may be long, deeply nested, repetitive or mix separate jobs.",
"reason": "wrong"
},
{
"fingerprint": "fe11fb904733a7cf785aa7d81d3d07e239e8ded7b90e768e184f7304744896d4",
"rule": "maintainability/file-organization",
"path": "src/tests/gating.rs",
"line": 5,
"strength": "review",
"message": "This test file may test several separate subjects.",
"reason": "intended",
"note": "the gate and the baseline it reads are tested together, as the module doc says"
},
{
"fingerprint": "e9f3f69f4ad38653eeaaa416736359c7e4a35351ca79d10c5086a2dc9597b48a",
"rule": "maintainability/file-organization",
Expand Down
2 changes: 1 addition & 1 deletion plugin/skills/findings/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Every finding is a `review`: a place worth a look, flagged broadly so that you v

1. Read the code at `path:line` before changing anything. The why says what the finding rests on, and the sentence after it how often findings of its rule were right on projects JevGate was never tuned on ("Not yet measured." for broad look-here findings and when fewer than 20 were labeled); `Next` is a suggested step, not the only fix.
2. **Right**: fix it. A finding marked "(fails the gate)" also fails the person's CI.
3. **Mistaken, intended or for later**: dismiss it with a reason, `jevgate baseline mark wrong PATH:LINE` (or `intended`, or `later`). The dismissal counts at once, holds while the code it names is unchanged, and the person audits dismissals with `jevgate baseline stats`. JevGate does not block again when nothing changed.
3. **Mistaken, intended or for later**: dismiss it with a reason, `jevgate baseline mark wrong PATH:LINE` (or `intended`, or `later` with the issue that will fix it: `--note "#123"`). The dismissal counts at once, holds while the code it names is unchanged, and the person audits dismissals with `jevgate baseline stats`; `jevgate baseline list --reason later --format md` exports the `later` ones as a checklist. JevGate does not block again when nothing changed.

## Never, unless the person asks

Expand Down
2 changes: 1 addition & 1 deletion site/src/output.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ PORT = 4222

The report keeps the finding with its reason, it never fails the gate, and `jevgate baseline` leaves it out, so deleting the comment brings it back.

`jevgate baseline` can record why each finding was accepted: `intended` (right, and meant to be so), `later` (right, to fix later) or `wrong` (mistaken), with `--reason` or `jevgate baseline mark`. Reasons survive later rewrites of the baseline, and `jevgate baseline stats` reports each rule's share of findings marked wrong: labels from daily use, not the model's own probabilities.
`jevgate baseline` can record why each finding was accepted: `intended` (right, and meant to be so), `later` (right, to fix later) or `wrong` (mistaken), with `--reason` or `jevgate baseline mark`. `baseline mark --note "#192"` keeps a one-line note with the reason, such as the issue a `later` finding will be fixed in. Reasons and notes survive later rewrites of the baseline. `jevgate baseline list --reason later --format md` prints the marks as a checklist for a cleanup issue (`text` and `json` too), and `jevgate baseline stats` reports each rule's share of findings marked wrong: labels from daily use, not the model's own probabilities.

## Guards

Expand Down
Loading
Loading