{"_id":"jev-lint","_rev":"19-a9c6310bf38487d8d22ccaa430538201","name":"jev-lint","dist-tags":{"latest":"0.7.0"},"versions":{"0.1.0":{"name":"jev-lint","version":"0.1.0","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.1.0","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/ast-grep-jev#readme","bugs":{"url":"https://github.com/mizchi/ast-grep-jev/issues"},"bin":{"jevlint":"dist/cli.js"},"dist":{"shasum":"59452426330def57aa4711b874ab60107a132a84","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.1.0.tgz","fileCount":65,"integrity":"sha512-lxyqX8VIEFcRktX//2bDbZUx16sR4s9WHSKthc5VMTCJoAzdpn/6ceatlTHvGd4dOl2ZfO7oNj4ixCdeEVcgGg==","signatures":[{"sig":"MEUCIAOLJGYjxDfNJgHXZlA6GiTwxOFbA86NNjUS3TZMbX9lAiEA6vvgYCbxV4NKc4YTnQyxYcDx2e6qd2xAqdlKjtet8Hs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":474520},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"c201b8d1b95745c41cf45541f421c2f5509b8164","scripts":{"ci":"npm run labels:check && npm run typecheck && npm test && npm run build && npm run replay","dry":"node --experimental-strip-types src/cli.ts check corpus --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","gaps":"node --experimental-strip-types src/cli.ts gaps corpus","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check corpus","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","labels":"node --experimental-strip-types corpus/build-labels.ts","replay":"node --experimental-strip-types src/cli.ts replay docs/data/calibration.json --labels corpus/labels.json","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","calibrate":"node --experimental-strip-types src/cli.ts calibrate corpus --labels corpus/labels.json --repeat 3","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check corpus --dry-run --cache none > /dev/null && echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","labels:check":"node --experimental-strip-types corpus/build-labels.ts --check"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/ast-grep-jev.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.1.0_1789821926677_0.7877985550542179","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"jev-lint","version":"0.2.0","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.2.0","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"8f865d709be6b6523116de33d7bb5e7aa55289b6","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.2.0.tgz","fileCount":77,"integrity":"sha512-wu9xGRQptwSvSRTXrfcBaEGkbrlOB2uJBu1AEV2Vmay2Xb7z9NuIw6AY2oTjzamRZPJaMjtz8UY9Hc9qE/qAXQ==","signatures":[{"sig":"MEYCIQCXz5Rhlfr1R83WCPlJ6VLiyaNnKcxynajje4NgJESu7QIhAJFx9S2wt73nHZtO2wcxTT/QYiH9TkY8LeEjGbOIfJgn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC8LptiidTDQiT/xR7952novCr4YCKjb9M55wPbis/vPAIhALQ3Ex5VHaaIm2bJ4HbCk+QJQ5tX2q2kxttE5J+lStBZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":577992},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"143793d21b4a1fdee54df76d24c1cf5acf54d60f","scripts":{"ci":"npm run labels:check && npm run typecheck && npm test && npm run build && npm run replay:ci","dry":"node --experimental-strip-types src/cli.ts check corpus --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","gaps":"node --experimental-strip-types src/cli.ts gaps corpus","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check corpus","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","labels":"node --experimental-strip-types corpus/build-labels.ts","replay":"node --experimental-strip-types src/cli.ts replay docs/data/calibration.json --labels corpus/labels.json","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","calibrate":"node --experimental-strip-types src/cli.ts calibrate corpus --labels corpus/labels.json --repeat 3","replay:ci":"npm run --silent replay > /dev/null || [ $? -eq 1 ]","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check corpus --dry-run --cache none > /dev/null && echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","labels:check":"node --experimental-strip-types corpus/build-labels.ts --check"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.2.0_1789832024256_0.0432267219232072","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"jev-lint","version":"0.2.1","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.2.1","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"20304578cb3c191c0576e34979a28f2122d68be9","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.2.1.tgz","fileCount":199,"integrity":"sha512-yzN0BQW/jETQbVrVuUXr72l/P63jvJ4WxKNRetXZo9JLCtX9ziM0pomyf9MxlybN4/4s3NoC4nxVdFxrU5YoQA==","signatures":[{"sig":"MEUCIQCr7k22qiTFiE9fKqDd3/sI18FJi+B7KDrxWrsV6FxrWQIgFGEeqjPXIyh6E/AZ1jurfaNPb692xDhtY+OotcJfKOw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCB/HMuwQYbIbnRu9/Dx4rEVuigEECGyzCGwzTRNeZJPwIgT01LzbvyjRExrvM1D3GvduYWdBwwlPOnkwPWL8bJIjk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1397861},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"88e293d42eed23d94b6720c005ff8da917a9aa40","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null; echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.2.1_1789886281118_0.632007269693226","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"jev-lint","version":"0.3.0","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.3.0","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"9c680021931108dff035fb760636ac563ac70431","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.3.0.tgz","fileCount":442,"integrity":"sha512-omnyjM8b1ptGpdnUdF+AD3erv5+7jBx4j2kgRMLq8gJVBHM5VPjQqjYqv88PJSCMyVOVaJM6wrHY/ah5ILg6Rg==","signatures":[{"sig":"MEUCIQCxfQ19ke5PotpmsZ8m6XAR4w4dgTRThxqwNO1/mmZzmgIgfJQYNPelb2eBG1tmKtFbgfY1m/0XidaOH+MJW1BZiFo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEmwSgALR3FcxO6moEbYjAwQWGeJS2AKBd25VfGat4deAiEA0lPuQR5DJlI3cAq5EBKysgv/3ScDMdNKOiMFbaJ7dSI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2111973},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"ba8051f61406c107b88844346b2b59e2e00b96e3","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null; echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.3.0_1789899997485_0.6545764745390521","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"jev-lint","version":"0.3.1","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.3.1","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"782e4fadb275a38a99eb8f3dc46b61d516e4b140","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.3.1.tgz","fileCount":498,"integrity":"sha512-alLE7V4IrNXJbtBm/sluVQ3q7VDEXHd796LmKVU4IH5tNakT3ZCKEUzsTwIcViajN/4QcG2fm2FCvTaf6XanBQ==","signatures":[{"sig":"MEUCIQDT0/m4GM4UAxIQPWd9/zxHwKUM7c7VgIyun4+SG8hVPwIgE0hSK8Em6FdERL10iGo+rZ4IelHgl68H8mLBsuXu7RA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDvChgg9aabNqQ18zaqoSH0W7oEkvU70FxS8DQ132pvJwIhAO270jaql/ygrovaIREU0+w7VTHgBxbeIJ+GYIaFR2+E","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2444425},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"edfa68f4326d0afbdb07eaafe2f8637ba098ac25","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null; echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.3.1_1789903773221_0.7073900013968959","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"jev-lint","version":"0.3.2","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.3.2","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"0f364894472cd7f587c6d63ea427cfe9cf3c767e","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.3.2.tgz","fileCount":499,"integrity":"sha512-eA63/XZG/YjyJFav20u18PkvqPQWFXQVTUCuxyvl/x9wm916/ZAtl3bobvp6VO77P1eNwQFvtoDOCYVFh/0dRA==","signatures":[{"sig":"MEYCIQDusILTrshLUQUIY6mM0siTsD38KrLJe0xqFncjZSJLkwIhANASK36YtBkRWlRShfCYzH5yY2uFUNdJ87MedTbdzDxU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBBQH5urdVHdvorU3l0u4Z5jdj1Zd6diNv6NpV/hH9YNAiEA2lNDJHVG0ZV+ijYR0JyD6nnPV4v/eYfIcNJnobh2yDg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2477618},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"26ab6637345a89a65718cac9485e8a98e6025994","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null; echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.3.2_1789904425397_0.24222956684008867","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"jev-lint","version":"0.4.0","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.4.0","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"f7c23c76345c724818c529963df69f9ba50b0796","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.4.0.tgz","fileCount":147,"integrity":"sha512-Q48Z1Kbu/X9dDhDmY20IixfAJEXfVUIK8b2cRMDJaddYF7PLhsxkGhFA5dT/XLjdEn4a7QeO4HFW+UpY2KrS2A==","signatures":[{"sig":"MEQCIB1taD+Mr4RAw30RvZzo1E4ZPEMVgEPxbRXsIAKkahyJAiA+j7iSLqEwF62IK44M4VU3bu8FDyKHyNbLu7HjG737lA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFHE+wbt1oJxG0cJ46QdgUH4rBsJqVfT5AHVtx02UbXOAiBBSoym2ogLINXbv0qqRG4p7v058N1dgqfuofLR8PBzhg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1054506},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"5f473f14286fa35ba578919e76f4852dadb75b05","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null; echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.4.0_1789908354500_0.6301712480123349","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"jev-lint","version":"0.4.1","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.4.1","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"c17c97a9e800f4d7954d30dfcec47c6fbdf38b0c","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.4.1.tgz","fileCount":158,"integrity":"sha512-v357bmwb/VjAnihiYtqtlUn73Ubgn/8DzFoLlEYyx7As99BIvxfU1+EdeyS9BJaXBe6DhsNju01py3o97fQNfg==","signatures":[{"sig":"MEUCIBgRmmdIxc5M1owOpkUHe/AnEOqyVA8pRQuqv8FvxW4RAiEAuaZe1TWFa9gTQRm/OwzulDN4kbwQUttnyEj9rvWTg6U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCREi3bSxeFkczy0LYC7GYewl2g5Ox2z5dd1hNJ94a3KQIhANqywwCFIs/vbAfpAxviY+sUocWJir2BI00EUs1E55a6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1106173},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"0fab147918afad746a02a68e573ba85863d92efc","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null; echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.4.1_1789912119087_0.1770661363798518","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"jev-lint","version":"0.4.3","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.4.3","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"15abb40226889fd4f139401e943140dff31bcf07","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.4.3.tgz","fileCount":215,"integrity":"sha512-yafqhpvIeeW0RH8g89Vc/850Uw+fxb5rW3z2whb9lPKNPEeq9ttxdHyjZEBauy34iVM1bW6Co1YLQZKznp1fRw==","signatures":[{"sig":"MEUCIQCzn6SBpZZAxJovx9bXZYvOvsFSoqtjtzi1wOpRnrDTGwIgKAEdyuspSC17tVgB3TtbM0ndtqDWai2Q0umNtthXTxg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDtBHraPoKF7rzpWvcqmSrhIMO+rHCr6QQR3qg1YqbajQIgLc4jD92KaMNpA4rVXlfIDFYkrSjpOIi27Pt1vYrEt4Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1226809},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"3c8d174ca8b15149190d2cc7ad45b7f02a8972f1","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null; echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.4.3_1789920922963_0.04343395464686828","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"jev-lint","version":"0.5.0","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.5.0","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"c2e83b26381df173de63109af2f2ccdd9ba8f8b4","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.5.0.tgz","fileCount":215,"integrity":"sha512-SWIiTvqavrFiiOMJEpdRlsgPhJxQWudbvHh9kaXglma/zR9IPqPaWnVFBVeFFv/R92vk2QM7HV2waaUxcTRjNQ==","signatures":[{"sig":"MEUCIQCyM+ZQNOB1WfQmYcCPPvLXpAHKst5pGdD3Aor0ImqwWAIgasQCr9dj+dixkfS9zQsYnIlHObe1DZZLPFRk6Bd2gRo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCLo6zIkptlLXLdhkGW2gvTQcVPQwE5H4nZI7X2ChyxfAIhANySAdbQVhtF3OkqdiS6U4k7iSU1mVdKmca2OO2tSq8s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1243533},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"17b9230a4eb3c3d94b79788a8e7ef6fc92e18b48","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null; echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.5.0_1789922785151_0.18895018880828918","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"jev-lint","version":"0.6.0","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.6.0","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"e5170dc8379e497da537414b4bc204e088440754","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.6.0.tgz","fileCount":249,"integrity":"sha512-m0j5GXzeTvveu531cyA12LYJFzZXh9CHaVe8bKe1p9Vnt+EWsNKQTm/W3QFTA4FSoGoLmPeI31EQ1uz4E+23zQ==","signatures":[{"sig":"MEUCIAzJP604AhceFspKz1fR5G7Ykf3Fv0Rb9DxSLAdOsbP3AiEA603lZlJZoZSNpFdgSNDu2LxuJWX3KMPfwL/nP6RZvUE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIB4O9UsrsnLXW7LiiyzOobGJiBP0TSJ+wFmEfkjVwSpSAiAqUkpZlhKK1rHGgGuLWnbZ4BjfNJf1LK/aCEtnIxVkvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1524123},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"19b2ab0427dd73cd0a1ef9984f38bcfa63745a35","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null; echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check","parsers:moonbit":"node --experimental-strip-types tools/build-parser.ts moonbit"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.6.0_1789978981152_0.9594254518072329","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"jev-lint","version":"0.6.1","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.6.1","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"6da2430ac981b8c9330769365abcab1020e33a7d","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.6.1.tgz","fileCount":249,"integrity":"sha512-S3WyJ79kR7AFI6qsNIZ2WsO+OZqfaxhhysm6bUATpMkI4Z3s5RZSVYphyoQhpgrYZVbS9LXMaz+Ptcjn6EyQlA==","signatures":[{"sig":"MEUCIQCn4AR4xcXeXbBf8126M6XbDCCxT/2JRoqE9YDFc3kk7QIgfoJ+Ydcy4F9huRGmCaNjSstWXeINtiCc6laaQxn8J94=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC7tV7lju1JlHbYiWLPoBSh7T2tB3E+VB7WsYa1uFTbfQIgYdreM6VFJe6ME1hH9cgnXzSaZqsxJsBQa0hwN2ZI308=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1527075},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"ea96ad14c75c88638da6c3232fef2a1b4d2696e9","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null; echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check","parsers:moonbit":"node --experimental-strip-types tools/build-parser.ts moonbit"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.6.1_1789987312792_0.05539053683202266","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"jev-lint","version":"0.6.2","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.6.2","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"a4dc94bca3eb2dc05b376091bdd8c595c85fc307","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.6.2.tgz","fileCount":249,"integrity":"sha512-dMZlUs+VwCh3IFxRoFBqBhh/gg3G0bUIB8tjdDsZd95zhOON+Cfji/95yjMFBT7jnHOrrHit4VUT57TNh9KYCw==","signatures":[{"sig":"MEQCIDnylTwgCCYXO084q5bLKgtWJae69WhckmO4zJ2yVMN8AiBfTNH+GkSMGuPdMjNUeMT8cuV7yB8ttRw2xY/0+ACPWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFgjAjkFzBNvlfbzoAPi8qaAbQrb9H9rapQ6Kg9ZOtKqAiAQnDhLZHZeLq4b5T97un7sTaDWYqOdYMMHbJ1C56jLYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1527023},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"8e282625ec8dab205f80599c77ed778daec25275","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null; echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check","parsers:moonbit":"node --experimental-strip-types tools/build-parser.ts moonbit"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.6.2_1789990616475_0.8200650943253109","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"jev-lint","version":"0.6.3","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.6.3","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"89bed961294d455a3c38b468145eb434256a7e85","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.6.3.tgz","fileCount":258,"integrity":"sha512-0SK0wTilqCMUjn4Edc4wys1xgUnkaNHr653PaWL+5AzRbNXxmqZYws8HX3+woVbS1zlEXkQKdqiyfRxUfQWPlw==","signatures":[{"sig":"MEQCIDDEvaCL5XL+6VB3TWwxPFsdDg6wTeJW0nmVWPK4pq1nAiBUO9Gox8H9HKHDf+OxWdiB/F/wfc9D/1ds50eRzOSjpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIH2FQmt3uOZhmYhri3PHIEi39AHrephtCmOXya0HjCL3AiBbMx39VA7XgEAvta9WP/k67RcQJEcR/ig/WJdIPAV1lg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1701330},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"33f1fad9e5c73190a47d85d1d88e956690e0e57d","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null && echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check","parsers:moonbit":"node --experimental-strip-types tools/build-parser.ts moonbit"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.6.3_1790014933531_0.7793722724821157","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"jev-lint","version":"0.6.4","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.6.4","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"eb6ac8a774fc962f1dc86f83ddfa26ce613cbdae","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.6.4.tgz","fileCount":258,"integrity":"sha512-ZixwEm6xyS5JZuX7xpKh0aOuLBuMOFo5CYik7/AGT5vH/WDFVbJV1cOY/Fs2lYTzsvIKA/+yKANStWjK0wn/8Q==","signatures":[{"sig":"MEYCIQDjXNeZfOlf9AUPZMviWnc/KqjWAH0DDmd8pcTYJnG6aAIhAJvaE17dxooxYTQ1itr6xZRUVhGRme8hw1gn3pY+CndR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDukyOhJckcyfzOdeFc3yjleJh9X+v9GgYGHl8+avmzPgIgYRiZmz0QPft4Jzo2zUk3qzlo6nGuMepOHFcPi66Kw0Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1707221},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"fc2e1ad47ccf502d43dc091e695bcb41bcec9e31","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null && echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check","parsers:moonbit":"node --experimental-strip-types tools/build-parser.ts moonbit"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.6.4_1790085113390_0.11618374044555413","host":"s3://npm-registry-packages-npm-production"}},"0.6.5":{"name":"jev-lint","version":"0.6.5","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.6.5","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"6514916017cc1dee202fae8a7d48505cd0d175bb","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.6.5.tgz","fileCount":258,"integrity":"sha512-Dptxybo9yqQeRfRIS7Ua0W/bdGrmtvuNcW1p0nScROq0qdF4ibxvSmlhcIMW1QLNx2x65v8iB841Ig+uJ0v5gw==","signatures":[{"sig":"MEUCIQCJqIh7oWVIlRFd6guTBEE+6BwIh4/c/lF8jDVcMBSHCQIgRtZReDe75u78AWJ3tUfJNU6EQ54+NxjW4gU2H0HbNYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFzAU4cc5xH2Db6ZNgpqHC02Z93B50Gu9GFzCO0h+U40AiEA+/GuzSEwgKmmQJ5kwm0GDOiha4dW56pfu5KlVZl6F2Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1738557},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"4d1d8e5b0bdbeef0a28ce65ea8f1ffb522dd61ba","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null && echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check","parsers:moonbit":"node --experimental-strip-types tools/build-parser.ts moonbit"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.6.5_1790174195863_0.3599283109353122","host":"s3://npm-registry-packages-npm-production"}},"0.6.6":{"name":"jev-lint","version":"0.6.6","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.6.6","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"e0dd6c2bb34f35794d36444ca59b46ca2fef154a","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.6.6.tgz","fileCount":258,"integrity":"sha512-mM63ZN11tPbotQw2Hdy3C9uWqKt3ebxTs8TaDxhy27m/JIiU88JadLCFZHheUIeBEzMEJmu5AuW5aSDm7YD7KQ==","signatures":[{"sig":"MEUCIEzsE9QmCIwe3jDLqmUerNs/Htu3jXATzWP/YiYeUSysAiEAyfoOr5VK4XyQ5yZ8/XFeQRDy0ch80TroyW5zLAcEsz4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDZAmkMx3OeRSpYhzb7gQMH0wxNe7n3UCTELzurl/YMPwIhAJGyDDBD6en0sfPMe85gvqVMc2tit+eN5jHk03TA4jdv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1743380},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"c0ac7e665256dd727910337c74c2e0b0696ba3ed","scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null && echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check","parsers:moonbit":"node --experimental-strip-types tools/build-parser.ts moonbit"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.6.6_1790179330602_0.48373764139007847","host":"s3://npm-registry-packages-npm-production"}},"0.6.7":{"name":"jev-lint","version":"0.6.7","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"license":"MIT","_id":"jev-lint@0.6.7","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"homepage":"https://github.com/mizchi/jev-lint#readme","bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"bin":{"jev-lint":"dist/cli.js"},"dist":{"shasum":"8ec193030cd85ba1b5203d41b4b82396980939c7","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.6.7.tgz","fileCount":258,"integrity":"sha512-co2aWKc1qhDqfl8yOOjNgSkcE+/QOYSMhcIWcR6U585e34CQUz3qN9IWTmKmYEJ74U63IxBQEIdF56zRFOUH0g==","signatures":[{"sig":"MEYCIQCOmEeXsoHSqQu75gs4jO/oiJSE/8HJKqcrnPRjaUrKggIhANWu4xRZhHiSTZzRU2YGsNuXrLOizd8zFyeIDXGRE8OE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDi7DJBa9Wuxya4Y9F7jvHyfN3hi5KZzJETDV3jxHcEmAiEA2vuQsCe+9G1mXkIVwHmvA2+o8bnckFxwq3BJ/lpgv4k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1752047},"main":"./dist/run.js","type":"module","types":"./dist/run.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"scripts":{"ci":"npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null && echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check","parsers:moonbit":"node --experimental-strip-types tools/build-parser.ts moonbit"},"_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"tmp":"tmp/jev-lint_0.6.7_1790180453126_0.36132350218490794","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"_id":"jev-lint@0.7.0","bin":{"jev-lint":"dist/cli.js"},"bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"dist":{"shasum":"94e84551603bbae74c4d91fe8ae14a44d61d0bc7","tarball":"https://registry.npmjs.org/jev-lint/-/jev-lint-0.7.0.tgz","fileCount":270,"integrity":"sha512-YoMm23felUmMEW50WCaEotj6EPzd/grjX4pR1tMTFetXPiEkmLzwzmLR684RUg48GW0pzu/HSXTQ9E3yk5TfZA==","signatures":[{"sig":"MEUCIFmGFHJ44IsJ278Hh/fuIxmkslX1yPX8w00c9xZjMlx+AiEAq/rLCWbHdRQ0mlB/7pfSeCVJ3leqhA0wsx1BCa7Mizg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDCxxxYzfqsRVMR41bRghI3EvSvweqBFCz6YUjnBNXH7gIgKeYwEWLakhzS423pjmOdK1YKH364I/DNsdRbh8WRUmg="}],"unpackedSize":1831914},"main":"./dist/run.js","name":"jev-lint","type":"module","types":"./dist/run.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/run.d.ts","default":"./dist/run.js"},"./gate":{"types":"./dist/gate.d.ts","default":"./dist/gate.js"},"./rules":{"types":"./dist/rules.d.ts","default":"./dist/rules.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./report":{"types":"./dist/report.d.ts","default":"./dist/report.js"},"./calibrate":{"types":"./dist/calibrate.d.ts","default":"./dist/calibrate.js"},"./package.json":"./package.json"},"gitHead":"1123887e5929a7be0256b23d29f6cf1961675d24","license":"MIT","scripts":{"ci":"npm run skills:check && npm run typecheck && npm test && npm run build && npm run eval:replay","dry":"node --experimental-strip-types src/cli.ts check --dry-run --cache none","arms":"node --experimental-strip-types tools/arms.ts --repeat 2","eval":"node --experimental-strip-types src/cli.ts eval --repeat 3","test":"node --experimental-strip-types test/test.ts","build":"tsc && node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","check":"node --experimental-strip-types src/cli.ts check","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","rules":"node --experimental-strip-types src/cli.ts rules","review":"node --experimental-strip-types src/cli.ts review","prepack":"npm run clean && npm run build","grouping":"node --experimental-strip-types tools/grouping.ts --repeat 2","rules:md":"node --experimental-strip-types tools/rules-md.ts","test:dist":"npm run build && node dist/cli.js rules > /dev/null && node dist/cli.js check --dry-run --cache none > /dev/null && node dist/cli.js eval --replay > /dev/null && echo \"built cli ok\"","typecheck":"tsc -p tsconfig.check.json","eval:replay":"node --experimental-strip-types src/cli.ts eval --replay","skills:sync":"node --experimental-strip-types tools/sync-skills.ts","skills:check":"node --experimental-strip-types tools/sync-skills.ts --check","rules:md:check":"node --experimental-strip-types tools/rules-md.ts --check","parsers:moonbit":"node --experimental-strip-types tools/build-parser.ts moonbit"},"version":"0.7.0","_npmUser":{"name":"mizchi","email":"miz404@gmail.com"},"homepage":"https://github.com/mizchi/jev-lint#readme","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"_npmVersion":"11.19.0","description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","directories":{},"maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"yaml":"^2.9.1","@ast-grep/cli":"^0.45.3"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.6.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/jev-lint_0.7.0_1790240548293_0.596134098859114"}}},"time":{"created":"2026-09-19T12:45:26.488Z","modified":"2026-09-24T09:02:28.601Z","0.1.0":"2026-09-19T12:45:26.836Z","0.2.0":"2026-09-19T15:33:44.338Z","0.2.1":"2026-09-20T06:38:01.224Z","0.3.0":"2026-09-20T10:26:37.587Z","0.3.1":"2026-09-20T11:29:33.329Z","0.3.2":"2026-09-20T11:40:25.504Z","0.4.0":"2026-09-20T12:45:54.605Z","0.4.1":"2026-09-20T13:48:39.169Z","0.4.3":"2026-09-20T16:15:23.074Z","0.5.0":"2026-09-20T16:46:25.256Z","0.6.0":"2026-09-21T08:23:01.242Z","0.6.1":"2026-09-21T10:41:52.897Z","0.6.2":"2026-09-21T11:36:56.568Z","0.6.3":"2026-09-21T18:22:13.654Z","0.6.4":"2026-09-22T13:51:53.497Z","0.6.5":"2026-09-23T14:36:35.956Z","0.6.6":"2026-09-23T16:02:10.754Z","0.6.7":"2026-09-23T16:20:53.243Z","0.7.0":"2026-09-24T09:02:28.382Z"},"bugs":{"url":"https://github.com/mizchi/jev-lint/issues"},"license":"MIT","homepage":"https://github.com/mizchi/jev-lint#readme","keywords":["lint","linter","ast-grep","static-analysis","code-review","typescript","rust","naming"],"repository":{"url":"git+https://github.com/mizchi/jev-lint.git","type":"git"},"description":"A natural-language linter: ast-grep picks the code, a sentence you write is the rule, and Jev returns the verdict","maintainers":[{"name":"mizchi","email":"miz404@gmail.com"}],"readme":"# jev-lint\n\n[日本語](README-ja.md)\n\nA lint tool that uses [Jev](https://typesafe.ai/) -- a fast classifier that\nanswers a natural-language question with a calibrated probability instead of\nwriting text -- to decide what a parser cannot.\n\nThis function is wrong, and nothing in your toolchain will say so:\n\n```ts\n/** Returns the cart, or null when no cart has this id. */\nexport function getCart(id: string): Cart {\n  const cart = carts.get(id);\n  if (!cart) throw new Error(`no cart ${id}`);\n  return cart;\n}\n```\n\nThe comment promises `null`. The body throws. The return type is `Cart`, not\n`Cart | null`. It type-checks and it lints clean.\n\nA jev-lint rule is one sentence. An [ast-grep](https://ast-grep.github.io)\nmatcher picks which code to look at, and a model is asked that sentence about\neach match -- here, *the comment above this code claims something that is not\ntrue of the code* -- answering with a probability. **The code being judged is\nsent to an API**, which is what the key pays for; nothing runs locally except\nthe matcher.\n\n```bash\nexport TYPESAFE_API_KEY=...            # https://typesafe.ai\nnpx -y jev-lint check examples\n```\n\n```\nexamples/cart.ts\n     16  flag  The comment above this code claims something that is not true of the code.\n         comment-describes-declaration  0.89  cutoff 0.56\n...\n```\n\n0.89 is the model's agreement and 0.56 the cutoff this rule ships with; under\nit, nothing is reported. Six findings over two files, for a tenth of a cent;\n[what a bigger run costs](docs/cost.md) is measured, not extrapolated.\n\n## What it catches\n\nForty-eight questions ship, most of them asked in several languages -- 99\nrules in all. Roughly:\n\n- **A name against the thing it names.** A function, method, binding, type,\n  class, trait or module; an npm script against the command it runs; an sqlc\n  query name against its SQL. `applyDiscount` that also saves the cart,\n  `isAdmin` bound to a string.\n- **A guarantee the name implies.** Whether `safe*` is safe, `pure*` is pure,\n  an idempotent-sounding function is idempotent, whether Go's `MustX` panics\n  on the failure its name promises.\n- **A comment against the code under it.** The doc comment above a\n  declaration, a comment inside a block, and a stated failure contract --\n  `@throws`, `# Errors`, `Raises:` -- against the body.\n- **A test against what it claims.** A test that would pass with the\n  behaviour its name claims broken; a failure path no test reaches; a\n  snapshot standing in for a behaviour claim; a mock that has replaced the\n  subject.\n- **A failure that goes quiet.** A `catch` that hides one, an error message\n  that does not match its condition, a log level that does not match the\n  event.\n- **What a shell script does to the machine** that its reader cannot see:\n  run code it downloaded, read secrets it was not given, install\n  persistence, delete past its own scope, weaken a defence, open a way in,\n  take orders from elsewhere, hide what it runs.\n- **Whether a document is worth reading.** Slop, filler, padding, vagueness;\n  a section that opens with an agenda or ends by previewing the next.\n- **Whether `AGENTS.md` is usable.** Each section's instructions must be\n  clear enough to follow and consistent with the rest of the file.\n- **A commit message against its diff**, and **a change against the\n  instructions the repository wrote for itself** -- `AGENTS.md` in its own\n  tree, or `CLAUDE.md` when `AGENTS.md` is absent, read as of that change.\n  Only the instructions a diff can be held against: \"never edit the generated file\" is judged,\n  \"develop test-first\" is not.\n\n[RULES.md](RULES.md) is all of them, each with its cutoff and its score on\nits own fixtures. What makes them one family is that each holds a claim the\ncode makes about itself against what the code does -- which is visible only\nto a reader who has read both.\n\nIt is **not** for anything a compiler, type checker or ESLint already\ndecides. This kind of model is good at code that contradicts itself and poor\nat defects needing knowledge of a specific API, such as `.sort()` defaulting\nto lexicographic order -- [measured, with the evidence](docs/deepdive.md).\nKeep your existing tools for those.\n\n## Install\n\nNothing to install to try it; Node 24+ and `npx` are enough. For a project:\n\n```bash\nnpm install --save-dev jev-lint\nnpx jev-lint init                      # writes .jev-lint.yaml\nnpx jev-lint check src --dry-run       # what it would ask, and the price. No request.\n```\n\nThe key is read from the environment only — `TYPESAFE_API_KEY`, or\n`TYPESAFEAI_API_KEY` — and never from the config file, which belongs in\nversion control and a key does not. Everything that does not ask the model\nworks without one: `--dry-run` prices a run, `jev-lint rules` lists what\nwould run, `jev-lint replay` re-scores a recorded run, and CI can lint from\na committed cache with no key at all.\n\n## Using it\n\n| | |\n| --- | --- |\n| `jev-lint check src` | judge whole files |\n| `jev-lint review --base main` | only the lines a diff touched — where findings concentrate, at a fraction of the cost |\n| `jev-lint commits --base main` | each commit's message against its diff, and each change against the `AGENTS.md` the repository wrote for itself |\n| `jev-lint commits --staged` | the staged change against repository instructions; there is no commit message yet |\n| `jev-lint run typescript/fn-name-promises src` | one rule; `--file mine.yml` for one of your own |\n| `jev-lint rules` | every loaded rule: its question, cutoff and file |\n\nThe config picks the rules, as ESLint's does. `init` writes every shipped\nrule turned on, as a catalogue to prune:\n\n```yaml\nfiles: [src, test]\nexclude: [test/fixtures]\nrules:\n  typescript/fn-name-promises: on\n  rust/fn-name-promises: off\n  typescript/comment-describes-block: { threshold: 0.7, severity: error }\n```\n\nAn answer at or above `threshold` becomes a finding. The old `at` spelling\nstill loads with a warning. `hooks.precommit` can inherit this `rules:` map or\nselect its own rules for staged review; see [the hook guide](docs/use-hooks.md).\n\nUse `language/id` for namespaced rules. A bare shipped id still selects every\nlanguage with that id, but jev-lint warns because it can enable a language\nunintentionally. A flat project rule has no namespace and does not warn.\n\nTo silence one finding, or one file, in any comment syntax:\n\n```ts\n// jev-lint-ignore-next-line fn-name-promises\n// jev-lint-ignore-file\n```\n\nA suppressed subject is never sent, so a suppression also saves its tokens.\n\n**In CI and git hooks** — `review --base \"$GITHUB_BASE_REF\" --format github`\nannotates a pull request; `jev-lint init --pre-commit` and `--pre-push` write\nhooks. Neither blocks until you raise a rule to `severity: error`, and no\nshipped rule has it. See [docs/use-hooks.md](docs/use-hooks.md), which also\ncovers the exit code that will stop you committing while offline.\n\n## What ships\n\n101 rules under `rules/<language>/<id>/`, and the files you point it at decide\nwhich run. Nothing to select.\n\n| point it at | what runs |\n| --- | --- |\n| `.ts` `.tsx` `.js` `.jsx` | `typescript/` — 23 rules, first tier |\n| `.rs` | `rust/` — 9, first tier |\n| `.py` `.go` | `python/` — 14, `go/` — 9 |\n| `.mbt` | `moonbit/` — 20, once [the parser is declared](docs/reference.md#a-language-ast-grep-does-not-have-built-in) |\n| `.vibe` | `vibe/` — 2, with the [vibe-lang parser](docs/reference.md#vibe-lang) |\n| `.sh` `.bash` `.zsh` | `shell/` — 8: what a script does to the machine that its reader cannot see |\n| `.md` `.mdx` | `markdown/` — 11 writing rules |\n| `package.json`, sqlc `.sql` | `json/` — 1, `text/` — 1 |\n| commits | `git/` — 2 |\n\n`typescript` and `rust` are first tier: every rule under them carries\nfixtures, expectations and an accepted baseline. The rest are calibrated to\nthe same bar and not yet promised. [RULES.md](RULES.md) lists all 99 with\ntheir question, cutoff and score on their own fixtures.\n\nYour own rule can target any language ast-grep parses — Java, Kotlin, Swift,\nC, C++, C#, Ruby, PHP, Lua, Dart, Scala, Elixir, Haskell, Solidity, HTML,\nCSS, YAML — and any other grammar you compile.\n\n## It is not deterministic, and not always right\n\nMeasured on this repository, about one finding in five was wrong, and a score\nnear a cutoff can move by a few hundredths between runs. jev-lint is built\naround that rather than pretending otherwise: verdicts are **cached** by the\ncontent of the rule and the code, `--retry 3` decides on the **mean** of\nthree passes and marks what did not reproduce, `--loose` lists the band under\na cutoff for a reader without making it a finding, and **cutoffs are yours to\nfit** — the shipped ones are fitted to this package's corpus, not yours.\n\nRead a finding as a candidate for a human to judge, not a verdict to act on.\n\n## Writing a rule\n\nAn ast-grep matcher decides **which code is looked at**; one sentence decides\n**whether it is a problem**:\n\n```yaml\nid: catch-hides-failure\nlanguages: [TypeScript, Tsx]\nrule: { kind: catch_clause }\nsubject: enclosing          # judge the function around the match, not the clause\nask: This catch block swallows a failure the caller needed to know about.\n```\n\n[docs/writing-rules.md](docs/writing-rules.md) is the walkthrough, including\nthe fixtures and the fitted cutoff a rule ships with.\n\n## For a coding agent\n\nThe repository ships a skill — how to run jev-lint and use its packs, plus a\nseparate guide to writing rules in your own repository for code, custom\ngrammars, text files, and Git changes:\n\n[Project rule authoring guide](skills/jev-lint/references/writing-project-rules.md)\n\n```bash\nnpx skills add mizchi/jev-lint --skill jev-lint\n```\n\n`--skill jev-lint` matters: the repository also carries `jev-lint-repo`, the\nmaintainer's skill for changing jev-lint itself. As a Claude Code plugin,\nwhich also installs `/jev-lint:review`, `/jev-lint:commits`,\n`/jev-lint:prose` and `/jev-lint:new-rule`:\n\n```\n/plugin marketplace add mizchi/jev-lint\n/plugin install jev-lint@jev-lint\n```\n\n`skills/jev-lint/` is the single source for the user-facing skill.\n`.claude/skills/jev-lint` is a tracked symlink to it; edits appear in both\nplaces immediately. `.claude/skills/jev-lint-repo` is a separate maintainer\nskill. Run `just skills-check` to verify the link or `just skills-sync` to\nrestore it. CI checks the link so a copied skill cannot drift silently.\n\n## Documentation\n\n| | |\n| --- | --- |\n| [RULES.md](RULES.md) | every shipped rule, its cutoff and its fit |\n| [docs/reference.md](docs/reference.md) | every flag and field, calibration, batching, limits |\n| [docs/use-hooks.md](docs/use-hooks.md) | git hooks and CI |\n| [docs/writing-rules.md](docs/writing-rules.md) | writing a rule, and the evals it ships with |\n| [docs/cost.md](docs/cost.md) | what a full run costs, measured |\n| [docs/deepdive.md](docs/deepdive.md) | everything measured that is still true, and the evidence |\n| [docs/internal/architecture.md](docs/internal/architecture.md) | how the code works, for changing it |\n| [docs/internal/findings.md](docs/internal/findings.md) | the notebook, in the order it happened, wrong turns included |\n| [CHANGELOG.md](CHANGELOG.md) | every release |\n\n## Prior art\n\nThe idea of asking a model a lint question comes from\n[mizchi/jev-playground](https://github.com/mizchi/jev-playground)'s\n`eslint-plugin-jev`. What is different here: relational multi-language\nmatchers instead of single-node ESLint selectors, a custom runner instead of\nESLint's synchronous per-file callback, diff-scoped review mode, the state\narm as a measured axis rather than a fixed choice, and record/replay so a\nthreshold is auditable.\n\nTwo sibling projects on the same model shaped parts of this one, and are\nworth reading beside it:\n\n- [devagrawal09/jev-review](https://github.com/devagrawal09/jev-review) — a\n  review workflow that screens whole patches and follows the strongest\n  signals through `choice` and `score` questions. Its structured criteria,\n  its screen-then-classify shape (`--explain`, `--loose`), its test-gap\n  screen (the `paired` arm and `tests-cover-failure-paths`) and its diff\n  subjects (`jev-lint commits`) were taken from it and measured here;\n  `docs/internal/findings.md` §14 says what each measured as.\n- [TKY-27/JevSlop](https://github.com/TKY-27/JevSlop) (MIT) — an AI Slop\n  Score for note.com articles: eight writing-quality signals and one\n  whole-article judgment, each a five-level rubric. The nine rules under\n  `rules/markdown/` are those rubrics, verbatim or reversed so that a high\n  score always means the defect the rule names, applied to a Markdown file\n  as a whole; two rubrics that named amounts rather than defects had to be\n  reworded before they separated, and the rule files say how. As JevSlop\n  says of itself: a writing characteristic, not an authorship probability.\n- [k16shikano's cognitive-rhythm writing norm](https://gist.github.com/k16shikano/eb2929f13ed19c97188393d297be8432)\n  — a Japanese norm for explanatory prose whose post-writing checks ask the\n  question this tool asks of code: does a sentence update the subject, or\n  only the document? Three rules under `rules/markdown/` are those checks\n  (`section-ends-with-a-preview`, `section-opens-with-an-agenda`,\n  `document-abandons-a-question`), two more are candidates with the reason\n  they are not shipped, and `/jev-lint:prose` runs them beside the norm's\n  mechanical leakage test. They read the norm's genre — articles and\n  chapters — and will flag a reference or a findings log for doing what a\n  reference does.\n\nMIT.\n","readmeFilename":"README.md"}