Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
306 commits
Select commit Hold shift + click to select a range
bf64533
Say that a verify item can hold several open questions
tauanbinato Sep 28, 2026
d1479a7
Set up a coding agent's hooks with jevgate init --agent
tauanbinato Sep 28, 2026
1c6e9cd
Add an npm launcher that downloads, checks and runs the release binary
tauanbinato Sep 28, 2026
9e17b78
Keep a missing or older jevgate from blocking the agent
tauanbinato Sep 28, 2026
9fb3137
Add a Claude Code plugin with JevGate's hooks, MCP server and a skill
tauanbinato Sep 28, 2026
43c4dab
Document agent setup, the Claude Code plugin and the npm package
tauanbinato Sep 28, 2026
92a8585
Create init's temporary files exclusively, with the target's permissions
tauanbinato Sep 28, 2026
b761dbb
Report what a change does to the checks around the code
tauanbinato Sep 28, 2026
7b7d387
Keep text written to steer a reviewer from clearing its unit
tauanbinato Sep 28, 2026
011c4a0
Hold the gate's settings to the turn's start in the agent hook
tauanbinato Sep 28, 2026
dce86ad
Document the guards and the steering check
tauanbinato Sep 28, 2026
04f18eb
Name edited files with / on every platform in the hook's replies
tauanbinato Sep 28, 2026
e416f0f
Word a block on one finding in the singular
tauanbinato Sep 28, 2026
649baa7
Replay a Claude Code session through the hook: block, fix, pass
tauanbinato Sep 28, 2026
97d3c2b
Show that a rerun of an unchanged commit asks nothing and changes not…
tauanbinato Sep 28, 2026
bde5be7
Judge a turn by the lines it changed, and block only what the gate fails
tauanbinato Sep 28, 2026
92834aa
Give the hook's findings, the MCP results and the guards one shape
tauanbinato Sep 28, 2026
f3f80ce
Name the hook commands init writes in the docs and the hook's help
tauanbinato Sep 28, 2026
9121ea6
Show block, fix, pass through the binary and a scripted provider
tauanbinato Sep 28, 2026
5917031
Make the docs agree on what a 0.27 hook and rerun show under 0.26
tauanbinato Sep 28, 2026
af6525b
Write the 0.27 changelog as one section, with the hook measured on it
tauanbinato Sep 28, 2026
e37d09b
Share the test setups JevGate's own check read as repeated
tauanbinato Sep 28, 2026
18305f8
Keep a turn's snapshot within the hook's time, and out of large files
tauanbinato Sep 28, 2026
3d3128b
Hold the stop gate when a turn breaks its settings or marks its code …
tauanbinato Sep 28, 2026
477539a
Check a turn whose end could not be checked with the next turn
tauanbinato Sep 28, 2026
8ab220a
Wait out a provider outage from the cache, and check on a main thread…
tauanbinato Sep 28, 2026
eb60c53
Tell the agent when JevGate's hooks run, so their silence is never a …
tauanbinato Sep 28, 2026
63157a9
Say once a session that a directory is outside Git
tauanbinato Sep 28, 2026
64ff721
Answer an event once when an agent runs two copies of JevGate's hooks
tauanbinato Sep 28, 2026
6355be5
Keep the text of numbers and strings in the settings init edits
tauanbinato Sep 28, 2026
e4907dd
Skip tests of files the published crate leaves out
tauanbinato Sep 28, 2026
dba9a6c
Correct what the hook's docs and messages promise
tauanbinato Sep 28, 2026
5e3c299
State what the hook's latency was measured on, and measure new files
tauanbinato Sep 28, 2026
f646b04
Act on JevGate's own check of the release: three considers
tauanbinato Sep 28, 2026
c4dd31f
Name a snapshot's stand-ins to Git from the root
tauanbinato Sep 28, 2026
d2ed0f5
Hash a snapshot's stand-ins apart from staging them
tauanbinato Sep 28, 2026
2b5c76d
Test that the hook blocks on the gate each finding recorded and names…
tauanbinato Sep 28, 2026
f752312
Test that MCP results carry the gate the check recorded on each finding
tauanbinato Sep 28, 2026
0cb09ab
Start the hook's snapshot Git where tests keep it apart
tauanbinato Sep 28, 2026
9aa692f
Ask about text steering a reviewer in checks with a base and in the hook
tauanbinato Sep 28, 2026
0ab9fc3
Block a turn on undecided units when the gate fails on them
tauanbinato Sep 28, 2026
0f1360e
Begin a new turn when the turn's start configuration does not load
tauanbinato Sep 28, 2026
1c6a9b7
Count a moved allow comment as added above the code it now accepts
tauanbinato Sep 28, 2026
cb0ece2
Leave dependency and build directories out of turn snapshots
tauanbinato Sep 28, 2026
67ddd62
Keep outside-Git marks in a private directory and never prune through…
tauanbinato Sep 28, 2026
b3925d0
Name edits inside a submodule as not reviewed by the hook
tauanbinato Sep 28, 2026
4d58c69
Ask about document paragraphs and more names written to steer a reviewer
tauanbinato Sep 28, 2026
5327d33
Leave the unpublished npm package out of the install instructions
tauanbinato Sep 28, 2026
c1667a2
Quote the hook's finding line as it is in the instructions init writes
tauanbinato Sep 28, 2026
6ae6624
Report a file a change leaves unreadable as a skipped-file guard
tauanbinato Sep 28, 2026
21f9b1a
Split the hook's check and after-edit steps the self-check read as mixed
tauanbinato Sep 28, 2026
8a8ae4f
Cache each question's answer apart and send only the questions it lacks
tauanbinato Sep 28, 2026
0d159d8
Give a question two requests ask about one state one answer per run
tauanbinato Sep 28, 2026
eba6fbe
Tidy the answer cache's comments and tests after JevGate's own review
tauanbinato Sep 28, 2026
b3af01f
Changelog: cache each question separately
tauanbinato Sep 28, 2026
5a6faac
Move the answer cache's lookup into its own module
tauanbinato Sep 28, 2026
73b7314
Shorten the state key's comment to the evidence that decided it
tauanbinato Sep 28, 2026
9338c5e
Keep each cached answer's request id, and its usage unknown when unre…
tauanbinato Sep 28, 2026
4215fdd
Ask nothing about a template's code that no enabled rule judges
tauanbinato Sep 28, 2026
e33f9a2
Send each function's source once, with every rule's questions about it
tauanbinato Sep 28, 2026
9bbf125
Let each rule name the evidence its pack questions read
tauanbinato Sep 28, 2026
8033b31
Test function packs where the helper module's purpose stays decided
tauanbinato Sep 28, 2026
a00fa23
Plan a template's code in a function of its own
tauanbinato Sep 28, 2026
24d596f
Document sending each function's source once, with its measurements
tauanbinato Sep 28, 2026
3c49f9b
Name the pack ask's question builder for what it adds
tauanbinato Sep 28, 2026
b60b5db
Test that a change's merged pack holds only the functions it touched
tauanbinato Sep 28, 2026
3dcacb6
Keep a shared-logic consider only when the same-steps answer reaches …
tauanbinato Sep 28, 2026
2ec122c
Show how often each finding's rule and level was right, not its proba…
tauanbinato Sep 28, 2026
5ec027b
Say beside a law finding's precision that it was labeled on Bend 2 pr…
tauanbinato Sep 28, 2026
d21d2f3
Publish each rule's accuracy and a page of findings it got wrong
tauanbinato Sep 28, 2026
d1e8f1e
Link each rule's page from SARIF help and jevgate rules
tauanbinato Sep 28, 2026
4c6701b
Say what TypeSafe and the gateways keep and train on
tauanbinato Sep 28, 2026
8b39722
Check only Markdown files for rule pages
tauanbinato Sep 28, 2026
33a7b5d
Say what a mature level needs to fail a check
tauanbinato Sep 28, 2026
759c556
Say which findings the follow-ups ask, and what baseline stats measures
tauanbinato Sep 28, 2026
3ebbb50
Give the causes of wrong findings as shares, not counts
tauanbinato Sep 28, 2026
5d613b6
Word a shared-logic note outside tests as related steps, not test cases
tauanbinato Sep 28, 2026
2e014e5
Test that a function pack's questions are cached one by one
tauanbinato Sep 28, 2026
ea2545c
Write the 0.28 changelog as one section, and say how packs use the cache
tauanbinato Sep 28, 2026
283ef4f
Show the introduction's sample findings with how often they were right
tauanbinato Sep 28, 2026
ac2cc64
Say how 0.28 reports the vaultwarden example with every rule
tauanbinato Sep 28, 2026
f5691b2
Say plainly why the default rules plan what 0.26 plans
tauanbinato Sep 28, 2026
bc1ca3e
Replace an alias answer that expires within one invocation
tauanbinato Sep 28, 2026
5e81df5
Give a question one answer in a batch that copies an earlier version's
tauanbinato Sep 28, 2026
0f864aa
Say labels are made from the code, and that findings say how often th…
tauanbinato Sep 28, 2026
36db75a
Show counts below 20 labels in jevgate rules, and where each rule's l…
tauanbinato Sep 28, 2026
75ba62a
Say how the 0.28 savings were measured, and what merging packs moved
tauanbinato Sep 28, 2026
9247f48
Take a response's answers and its bill apart from recording its outcome
tauanbinato Sep 28, 2026
d7ec13f
Say how often findings like it were right in the hook's lines and MCP…
tauanbinato Sep 28, 2026
4cc5bfd
Test that the guards' questions and the hook's checks use the per-que…
tauanbinato Sep 28, 2026
9f3581a
Put 0.28's changelog section above 0.27's
tauanbinato Sep 28, 2026
da717bb
Say that the cache behind a rerun keeps each answer by its question
tauanbinato Sep 28, 2026
4b33771
Say the default rules plan what 0.27 plans
tauanbinato Sep 28, 2026
1b015e8
Pass the block reason no undecided units in the hook's precision test
tauanbinato Sep 28, 2026
d0784e0
Give the precision sentence in the instructions init writes and the n…
tauanbinato Sep 28, 2026
da8e6ec
Never read cache files Git tracks, and report a change that commits some
tauanbinato Sep 28, 2026
7e01f04
Publish the check on 27 public projects on the accuracy page
tauanbinato Sep 28, 2026
ee6c426
Show 0.28's output in the README and link the accuracy page
tauanbinato Sep 28, 2026
7cfb0b3
Match tracked cache files on Windows too
tauanbinato Sep 28, 2026
add013d
Define custom questions and list them beside the rules
tauanbinato Sep 28, 2026
ed6d6a9
Ask custom questions about their units, beside the built-in questions
tauanbinato Sep 28, 2026
73d6fe6
Split the schema function the self-check asked to split
tauanbinato Sep 28, 2026
fe3005e
Document custom questions
tauanbinato Sep 28, 2026
411409a
Read no file for a hunk question without --base
tauanbinato Sep 28, 2026
813f941
Name a one-line hunk by its line
tauanbinato Sep 28, 2026
11b259b
Ask custom questions about their examples with jevgate rules test
tauanbinato Sep 28, 2026
4a8d4ff
Mark examples closer than 0.10 to their threshold
tauanbinato Sep 28, 2026
61dba3d
Document examples and jevgate rules test
tauanbinato Sep 28, 2026
a3b8424
Say which dry-run examples cannot be asked, and name the estimate apart
tauanbinato Sep 28, 2026
8f71a65
Keep rules test's arguments in a module of their own
tauanbinato Sep 28, 2026
f871407
Name the scripted level that leaves units undecided
tauanbinato Sep 28, 2026
ca7feed
Test that an example file that is not UTF-8 is not asked
tauanbinato Sep 28, 2026
a7493fd
Say what rules test's JSON holds
tauanbinato Sep 28, 2026
4106b45
Propose custom questions from agent instruction files
tauanbinato Sep 28, 2026
514b7a0
Leave out proposed rules that a tool already checks
tauanbinato Sep 28, 2026
a02d8bc
Read translated instruction files only when they are named
tauanbinato Sep 28, 2026
64d52c3
Quote no control character from a path, and read past a byte-order mark
tauanbinato Sep 28, 2026
8b9ed09
Name a proposal by its rule's first sentence
tauanbinato Sep 28, 2026
501fddd
Document proposing questions from instruction files
tauanbinato Sep 28, 2026
4ba80cb
Say which instruction files could not be read
tauanbinato Sep 28, 2026
12fdd1c
Keep the name of a file a person wrote among the proposals
tauanbinato Sep 28, 2026
1c45dee
Keep the candidate-line tests in a file of their own
tauanbinato Sep 28, 2026
26e61fb
Name the scripted answer to each proposal question
tauanbinato Sep 28, 2026
de67f6d
Say in the propose module's doc that rules a tool checks are left out
tauanbinato Sep 28, 2026
944f022
Read the configuration and prepare .jevgate/ in functions of their own
tauanbinato Sep 28, 2026
df9038b
Add measured questions from the gallery with jevgate rules add
tauanbinato Sep 28, 2026
0937e0d
Document the question gallery
tauanbinato Sep 28, 2026
8ab5491
Name the rules jevgate.toml enables in a function of its own
tauanbinato Sep 28, 2026
a271d7f
Leave global-state out of the gallery after four more projects
tauanbinato Sep 28, 2026
6cc2128
Say what the gallery promises and why a high threshold leaves units u…
tauanbinato Sep 28, 2026
d9e86ac
Fail a custom question at its own level wherever mature applies
tauanbinato Sep 28, 2026
512cb88
Ask custom questions only about what a change touched
tauanbinato Sep 28, 2026
9dfc703
Name the gateways in the rules commands' help, and test them with one
tauanbinato Sep 28, 2026
d2b301a
Build rules test's session with check's session helper
tauanbinato Sep 28, 2026
3a5a7aa
Test a convention from AGENTS.md from proposal to a failing pull request
tauanbinato Sep 28, 2026
f897422
Write the 0.29 changelog as one section, and give propose's exit codes
tauanbinato Sep 28, 2026
bc2340d
Stop a watcher when a custom question file changes
tauanbinato Sep 28, 2026
7129acd
Test that SARIF describes a custom question as a rule
tauanbinato Sep 28, 2026
0eb385d
Ask a custom question about what a change removed at a unit's edge
tauanbinato Sep 28, 2026
c742c0b
Identify a file question's finding by what the file holds
tauanbinato Sep 28, 2026
6badae3
Keep a hunk's blank context lines whatever Git is set to print
tauanbinato Sep 28, 2026
e403127
Name the question files --config leaves unread, and read a reviewed copy
tauanbinato Sep 28, 2026
d0caaf8
Build the SARIF custom-question test's finding with the shared helper
tauanbinato Sep 28, 2026
12db3b1
Read only the text files Git tracks for a question's paths
tauanbinato Sep 28, 2026
93b874e
Name each question a rules list in jevgate.toml leaves out
tauanbinato Sep 28, 2026
9a1cb6d
Refuse control and bidirectional characters in a question's text
tauanbinato Sep 28, 2026
673e3c6
Say how to keep question files the pre-0.29 .gitignore hides
tauanbinato Sep 28, 2026
662ad56
List a custom question's notes without --verbose
tauanbinato Sep 28, 2026
272018d
Ship n-plus-one as a note, and have rules add say how each measured
tauanbinato Sep 28, 2026
27ccfb3
Tell a proposal to get guidance and examples before it blocks
tauanbinato Sep 28, 2026
9b5e457
Name custom questions where the help and README list rules and files
tauanbinato Sep 28, 2026
b02a75c
Write proposals for JSON output too, and bound propose like a check
tauanbinato Sep 28, 2026
d1ace14
Give only a too-long question the hint to move detail out
tauanbinato Sep 28, 2026
4ba84c4
Say in the changelog that unlisted questions and custom notes are named
tauanbinato Sep 28, 2026
ce62297
Format the MCP test of custom questions in the rules listing
tauanbinato Sep 28, 2026
cbb8855
Say custom findings are not yet measured, and link their SARIF help
tauanbinato Sep 28, 2026
f07e245
Judge a turn by the custom questions as the turn began
tauanbinato Sep 28, 2026
2e7be68
Report edits to custom question files as guards
tauanbinato Sep 28, 2026
2129373
Test that a hunk question at the end of a turn asks what the turn cha…
tauanbinato Sep 28, 2026
a67ffc7
Leave the block init --agent writes out of proposed rules
tauanbinato Sep 28, 2026
a7179d6
Build the hook's check arguments with CheckArgs::defaults
tauanbinato Sep 28, 2026
9d44104
Test that custom questions ride in merged packs and are cached one by…
tauanbinato Sep 28, 2026
e42e476
Test the accepted convention blocking an agent's turn through jevgate…
tauanbinato Sep 28, 2026
25b840b
Find earlier whole-request answers under the custom questions riding …
tauanbinato Sep 28, 2026
0204a93
Say what 0.29 does in the agent's loop, and what adding a question costs
tauanbinato Sep 28, 2026
70afc90
Set up the convention test's repository with the shared committed helper
tauanbinato Sep 28, 2026
b62c8be
Start custom questions' Git where tests keep it apart
tauanbinato Sep 28, 2026
0e273de
Test that a turn begun with a broken question file is not carried on
tauanbinato Sep 28, 2026
94bf222
Treat an allow comment naming a custom question as the allow guard it is
tauanbinato Sep 28, 2026
66a493a
Diff a hunk question's file as text whatever .gitattributes says
tauanbinato Sep 28, 2026
43071ce
Ask every unit a change touched, whatever the cap on a question
tauanbinato Sep 28, 2026
41ae174
Name custom questions apart in the HTML report's gate sentence
tauanbinato Sep 28, 2026
a6535d5
Guard each question jevgate.toml's edit changes by its id
tauanbinato Sep 28, 2026
493b843
Ask about steering text in the files only custom questions read
tauanbinato Sep 28, 2026
80eda2d
Share the steps of the hook's allow comment tests
tauanbinato Sep 28, 2026
ba6de82
Share a unit's placement between definition walkers
tauanbinato Sep 28, 2026
c7a4289
Read nine more languages through tree-sitter tag queries
tauanbinato Sep 28, 2026
c1872af
Judge Bash scripts as source
tauanbinato Sep 28, 2026
ffb4c14
Keep the other languages' copies within the run's cap
tauanbinato Sep 28, 2026
a18f002
Keep the tag extraction apart from the language table
tauanbinato Sep 28, 2026
32fd060
Flatten the generic tier's code the self-check flagged
tauanbinato Sep 28, 2026
13ef3fa
Document the generic tier and what it was measured to find
tauanbinato Sep 28, 2026
1877f2a
Find a generic function's calls by position
tauanbinato Sep 28, 2026
1d0c571
Leave out the unit a syntax error sits in, not its whole file
tauanbinato Sep 28, 2026
003ae82
Name the units syntax errors left out in the agent text and the HTML …
tauanbinato Sep 28, 2026
ebcfab6
Name a broken test's first error from the units it holds
tauanbinato Sep 28, 2026
32f1654
Describe partial parses in the docs and the changelog
tauanbinato Sep 28, 2026
fc8408d
Build a left-out definition's record in LeftOut, not in push
tauanbinato Sep 28, 2026
6426c16
Say --verbose shows all left-out units, as the considers line does
tauanbinato Sep 28, 2026
e7d8c38
Count a partial file's parsed lines in one pass
tauanbinato Sep 28, 2026
7c23c46
Leave out a generic definition holding a syntax error by name
tauanbinato Sep 28, 2026
e5238d0
Show the nine generic-tier languages as preview
tauanbinato Sep 28, 2026
f9e3d86
Make the 0.30 changelog and docs agree on the generic tier and partia…
tauanbinato Sep 28, 2026
9761660
Split parse by tier and name a generic function's owner and calls
tauanbinato Sep 28, 2026
bc634ae
Keep what a walked file holds outside its units apart from its walk
tauanbinato Sep 28, 2026
fccb6cf
Look up a callee's language family only for a name the function calls
tauanbinato Sep 28, 2026
b30e851
Read `<%` as an ERB tag only in code, not in a string or a comment
tauanbinato Sep 28, 2026
dbe106b
Refuse syntax nested deeper than code is written, before any walk
tauanbinato Sep 28, 2026
969206c
Say the parser could not read a unit, not that its code is wrong
tauanbinato Sep 28, 2026
9edd1fa
Place a file's syntax errors on their lines in one pass
tauanbinato Sep 28, 2026
028ae0b
Skip the generic tier's copied dependencies and generated files
tauanbinato Sep 28, 2026
a466462
Find C tests by their names, and Kotest and ScalaTest classes by dire…
tauanbinato Sep 28, 2026
cfe600f
Read the definitions the generic tier's queries missed
tauanbinato Sep 28, 2026
32d5eae
Read a C++ header named `.h` as C++
tauanbinato Sep 28, 2026
b2ba4a0
Keep tool lines out of comments' prose, and dashes a word outside Lua
tauanbinato Sep 28, 2026
82dc550
Pair Bash copies only between scripts that read one another in
tauanbinato Sep 28, 2026
98533bb
List a generic-tier file's functions as its symbols
tauanbinato Sep 28, 2026
91ce2ce
Say in the agent text what reads a preview language, and what does not
tauanbinato Sep 28, 2026
54f3c3c
Own the methods of a C++ class defined outside its enclosing class
tauanbinato Sep 28, 2026
eaff0f3
Follow a script's sourced path through the variable that holds it
tauanbinato Sep 28, 2026
82473b2
Publish the preview languages' measured precision and what reads them
tauanbinato Sep 28, 2026
8373f50
Keep the unit type and a script's includes in modules of their own
tauanbinato Sep 28, 2026
d7c20a9
Keep the ten languages' walk in a module of its own
tauanbinato Sep 28, 2026
9d3d0c1
Wrap the parse step's paragraph at the docs' width
tauanbinato Sep 28, 2026
b1e598f
Test the hook on code as deep as the parser reads, and past it
tauanbinato Sep 28, 2026
6bc999e
Ask custom questions about the preview languages' functions and comments
tauanbinato Sep 28, 2026
cbb4cad
Never fail the default gate on a preview language's findings
tauanbinato Sep 28, 2026
eec1133
Check a preview language's edits in the agent hook, never blocking on…
tauanbinato Sep 28, 2026
2a22a0c
Test that a preview language's function pack asks only function simpl…
tauanbinato Sep 28, 2026
aa45ad8
Name only the unreadable code a --base check's change touched
tauanbinato Sep 28, 2026
dbbafc3
Read the preview languages' strings for text written to steer a reviewer
tauanbinato Sep 28, 2026
60aeecb
Say in `jevgate rules` that a preview language's findings never block
tauanbinato Sep 28, 2026
85ad8e8
Count the preview languages' shared-logic considers as 0.28 reports them
tauanbinato Sep 28, 2026
6142dc9
Say in `jevgate init`'s file that a preview language never fails the …
tauanbinato Sep 28, 2026
a9ed788
Say in the help and the docs that a preview language never fails the …
tauanbinato Sep 28, 2026
969305b
Say on the rules reference that a preview language's findings never b…
tauanbinato Sep 28, 2026
0508014
Share the setup of the custom tests where one function rides and one …
tauanbinato Sep 28, 2026
b457975
Say on the accuracy page whose counts a preview language's findings c…
tauanbinato Sep 28, 2026
0ab795d
Count the supported languages' considers with 0.28's threshold too
tauanbinato Sep 28, 2026
0c448d8
Say in the 0.30 summary that a preview language's findings never fail…
tauanbinato Sep 28, 2026
c7e769a
Test the unreadable-file guard on a file 0.30 still skips whole
tauanbinato Sep 28, 2026
e6f7b86
Fail the run on a file nested past what JevGate reads
tauanbinato Sep 28, 2026
75086d2
Name code left out and unjudged preview tests in the hook and MCP res…
tauanbinato Sep 28, 2026
20aa958
Say JevGate's own rules never fail in a preview language, not every f…
tauanbinato Sep 28, 2026
69d1848
Name a preview finding's language in the JSON report, SARIF and MCP
tauanbinato Sep 28, 2026
81c684c
Say where a preview language changes the gate in the help texts
tauanbinato Sep 28, 2026
7bd0151
Say that removed tests are found only in the supported languages
tauanbinato Sep 28, 2026
c0d8758
Give 0.30's size, build time and examples as the stacked build measur…
tauanbinato Sep 28, 2026
dae0dfe
Show 0.30's output in the README
tauanbinato Sep 28, 2026
0e5eaf2
Create the hook's marks directory without a mutable builder on Windows
tauanbinato Sep 28, 2026
bbc8318
Hand Git the hook's scratch index in the form Git for Windows reads
tauanbinato Sep 28, 2026
480487f
Keep embedded templates LF on Windows, and let the slow-provider test…
tauanbinato Sep 28, 2026
7dc6cb7
Keep the snapshot tests in a file of their own
tauanbinato Sep 28, 2026
8f8cc2a
Keep the baseline actions in a module of their own
tauanbinato Sep 28, 2026
2a1921d
Keep the agent text in a module of its own
tauanbinato Sep 28, 2026
dbe4bcc
Name the unit walk's long arms and a C# call's registration
tauanbinato Sep 28, 2026
a868b8b
Read a file's tree from the parse cache in a function of its own
tauanbinato Sep 28, 2026
d3edee7
Name why a stop is let through and how a turn ends
tauanbinato Sep 28, 2026
59557cb
Split the document path and script lookups into named steps
tauanbinato Sep 28, 2026
1fa7150
Accept as wrong the self-check's split of a Kotlin test fixture
tauanbinato Sep 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 15 additions & 0 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"name": "jevgate",
"owner": {
"name": "Tech Byte Frontier",
"url": "https://github.com/Tech-Byte-Frontier"
},
"description": "JevGate, the code-review gate that asks TypeSafe Jev short, typed questions about your code",
"plugins": [
{
"name": "jevgate",
"source": "./plugin",
"description": "Checks each edit and the end of each turn with JevGate, and adds its MCP tools and a skill for acting on findings"
}
]
}
8 changes: 8 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Text the binary embeds (include_str!) or its tests compare byte for byte
# stays LF in every checkout. With Git's Windows default (core.autocrlf), the
# instructions `init --agent` manages were embedded with CRLF, so the block it
# wrote never compared equal to the next run's, and the docs test found no
# JSON example after its heading.
src/setup/instructions.md text eol=lf
src/setup/opencode.js text eol=lf
site/src/*.md text eol=lf
2 changes: 1 addition & 1 deletion .github/homebrew-formula.sh
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class Jevgate < Formula
generate_completions_from_executable(bin/"jevgate", "completions")
man1.mkpath
(man1/"jevgate.1").write Utils.safe_popen_read(bin/"jevgate", "man")
%w[auth check baseline rules init serve mcp completions man].each do |command|
%w[auth check baseline rules init serve mcp hook completions man].each do |command|
(man1/"jevgate-#{command}.1").write Utils.safe_popen_read(bin/"jevgate", "man", command)
end
end
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,16 @@ jobs:
run: rustup toolchain install stable --profile minimal
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
- run: cargo +stable test --locked
node:
# The npm launcher and the OpenCode plugin, on each runner's own Node.
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- run: node --test npm/test/launcher.test.js src/setup/opencode.test.mjs
msrv:
runs-on: ubuntu-latest
steps:
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
/target/
/.jevgate/
# What publishing the npm launcher leaves behind.
/npm/*.tgz
/npm/SHA256SUMS
.env
.env.*
*.pem
Expand Down
142 changes: 142 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ The tests run offline and need no API key. `jevgate check --dry-run --show-reque
## Code conventions

- Unused code is deleted, not silenced, and long parameter lists are grouped into a type. `tests/lint_policy.rs` rejects `allow` or `expect` for `dead_code`, `unused`, `too_many_arguments` and `complexity`. Any other exception uses `#[expect(lint, reason = "…")]`.
- Tests run Git through `tests/support/git.rs`, which drops the variables that point Git at a repository (`GIT_DIR`, `GIT_INDEX_FILE` and the others Git exports to hooks and `git rebase --exec`), so `cargo test` run there leaves that repository alone. `tests/lint_policy.rs` rejects starting Git anywhere but there and `src/revision.rs`.
- Commit subjects say what changed, in the imperative ("Report overlapping tests by groups").
- Messages and findings are plain sentences that name the code and say what to do next.

Expand All @@ -40,7 +41,7 @@ JevGate asks the model small questions and decides findings in code. When you ch

## Documentation site

The site at <https://tech-byte-frontier.github.io/jevgate/> is built from `site/` with [mdBook](https://rust-lang.github.io/mdBook/): `site/build.sh` generates the rules, configuration and command-line reference pages from a release build, then builds the book into `site/book`. It is published with each release, so it describes the released binary. Guide pages are in `site/src`; the reference pages are generated, so change the rule catalog, the configuration types or the `--help` text instead.
The site at <https://tech-byte-frontier.github.io/jevgate/> is built from `site/` with [mdBook](https://rust-lang.github.io/mdBook/): `site/build.sh` generates the rules, configuration and command-line reference pages from a release build, then builds the book into `site/book`. It is published with each release, so it describes the released binary. Guide pages are in `site/src`; the reference pages are generated, so change the rule catalog, the configuration types or the `--help` text instead. Each rule has a hand-written page, `site/src/rules/<rule ID>.md`, that includes its generated facts and shows findings it got wrong; a new rule needs one, and a test checks it.

## Pull requests

Expand Down
99 changes: 99 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 13 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ name = "jevgate"
version = "0.25.0"
edition = "2024"
rust-version = "1.90"
description = "Code-review gate for CI and coding agents: asks TypeSafe Jev small questions about functions, files, tests and docs, and reports maintainability, test, security and documentation findings with locations and probabilities"
description = "Code-review gate for CI and coding agents: asks TypeSafe Jev small questions about functions, files, tests and docs, and reports maintainability, test, security and documentation findings with locations and how often findings like them were right"
repository = "https://github.com/Tech-Byte-Frontier/jevgate"
homepage = "https://tech-byte-frontier.github.io/jevgate/"
documentation = "https://tech-byte-frontier.github.io/jevgate/"
readme = "README.md"
keywords = ["code-review", "ci", "static-analysis", "maintainability", "security"]
categories = ["command-line-utilities", "development-tools"]
include = ["/src/**", "/tests/**", "/Cargo.toml", "/Cargo.lock", "/README.md", "/CHANGELOG.md", "/LICENSE-*", "/NOTICE"]
include = ["/src/**", "/tests/**", "/gallery/**", "/Cargo.toml", "/Cargo.lock", "/README.md", "/CHANGELOG.md", "/LICENSE-*", "/NOTICE"]
license = "MIT OR Apache-2.0"

# `cargo binstall jevgate` downloads the archives the release workflow attaches.
Expand All @@ -33,7 +33,7 @@ keyring = { version = "=4.2.0", default-features = false, features = ["v1"] }
rpassword = "=7.5.4"
zeroize = "=1.9.0"
serde = { version = "=1.0.229", features = ["derive"] }
serde_json = { version = "=1.0.151", features = ["float_roundtrip"] }
serde_json = { version = "=1.0.151", features = ["float_roundtrip", "raw_value"] }
sha2 = "=0.11.0"
toml = "=1.1.6"
tree-sitter = "=0.27.0"
Expand All @@ -47,6 +47,16 @@ tree-sitter-ruby = "=0.23.1"
tree-sitter-php = "=0.24.2"
tree-sitter-java = "=0.23.5"
tree-sitter-bend2 = "=0.1.2"
# The generic tier (`analysis::generic`), read through tag queries only.
tree-sitter-c = "=0.24.2"
tree-sitter-cpp = "=0.23.4"
tree-sitter-kotlin-ng = "=1.1.0"
tree-sitter-swift = "=0.7.3"
tree-sitter-bash = "=0.25.1"
tree-sitter-dart = "=0.2.0"
tree-sitter-scala = "=0.26.2"
tree-sitter-elixir = "=0.3.5"
tree-sitter-lua = "=0.5.0"
ureq = { version = "=3.4.2", default-features = false, features = ["rustls", "json"] }

# The JSON Schema of jevgate.toml is generated by a test from the configuration types.
Expand Down
Loading
Loading