{"_id":"@craverlab/cliquet","_rev":"15-4a8b177161ed7c1a3f79075be3adee31","name":"@craverlab/cliquet","dist-tags":{"latest":"0.6.3"},"versions":{"0.1.0":{"name":"@craverlab/cliquet","version":"0.1.0","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.1.0","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"90cef45d39169acc5eba94c3ad3525f7723ce0de","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.1.0.tgz","fileCount":34,"integrity":"sha512-NZ7pQYtfNn8N1zv19F2lvLOhCXCLRgZnVYAQrWPMpf+7OW9cg3DwD1KiH7hJ6mFL1ireqLFQPjP2PKSTFfzmpw==","signatures":[{"sig":"MEQCIEDp1KEIP9hyopATSDWSHX7/lYYVgyfoUaD1KIeOHL13AiAJClWrx1xFuS5G6b8mnGNuuZwj/pI1degBjMbezCCzfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92963},"type":"module","engines":{"node":">=20.11"},"gitHead":"67ec55ab600c6cdeca11cba468c269d23ef18e19","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"_npmVersion":"10.9.3","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"22.20.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.1.0_1783936285033_0.870362561230251","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@craverlab/cliquet","version":"0.1.1","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.1.1","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"700f7609f0bdd7211c2dffa57ae063d7a158cfc9","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.1.1.tgz","fileCount":34,"integrity":"sha512-cICD3Ie6FxdHvf1o778r9HEm4FRs3TZZJzbu8o4p2HO8Q8hRI/VUc0Sz9a8De+5qagM7TsB9m7q9PmJioz6+Xg==","signatures":[{"sig":"MEUCIFTGPfV4uDSo7wZhUSK58fLfMWT2MYArYQOWPPdwcm0xAiEA7PVO4KRpJxxz8/PBUujtG71iwNDFRC9ml5es4B595jA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93338},"type":"module","engines":{"node":">=20.11"},"gitHead":"0d6942460081e479f0b27ea85d76016145ee3ac0","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"_npmVersion":"10.9.3","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"22.20.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.1.1_1783936942991_0.2665004597581293","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@craverlab/cliquet","version":"0.1.2","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.1.2","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"homepage":"https://github.com/maclevison/cliquet#readme","bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"6b3e782d0974503dd0b57b178458409dd695aebc","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.1.2.tgz","fileCount":34,"integrity":"sha512-MT7gFA9O80TDKYH5+K0q+Q1QMdmPigaFSkk9ii9OyIhmJJfbuLDQJX1WskpKItKsRWTHjUdy5RC4LSd3p5TCWQ==","signatures":[{"sig":"MEYCIQCQ7XntvGFpwYbol4Bd6mDEaNqZJLS41nrfwBq84dUYUAIhAMY8tnfnlgVJXu93t0fRrVCOy3fSR5a9KBzWeYVyxYCG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96963},"type":"module","engines":{"node":">=20.11"},"gitHead":"b4a18e0bb38addf6cf6774a7237405679f385931","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"repository":{"url":"git+https://github.com/maclevison/cliquet.git","type":"git"},"_npmVersion":"10.9.3","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"22.20.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.1.2_1783940102597_0.17015169036038102","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@craverlab/cliquet","version":"0.1.3","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.1.3","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"homepage":"https://github.com/maclevison/cliquet#readme","bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"d50b3114579a9a4f5d56922fed75dbac78d9779d","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.1.3.tgz","fileCount":34,"integrity":"sha512-TSko3UbdTKhZFKuNKfiRE7f7tWt+J4fKUW4hIme0iW+aYMx19f4lRwcvQ/BujTMYnykeXJ8OL4BNqgmh82JOqg==","signatures":[{"sig":"MEUCIGb8Wj00RmsuE0Y8MxUKqjVw5V5OCNODWZY/Vf+B8JqcAiEApkSQnIikYV1Od+t6pO7bXoPZtVCRIV5oOrp85B9IL1E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99219},"type":"module","engines":{"node":">=20.11"},"gitHead":"0e18bef31a71472297ea283f37132fc757cca38e","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"repository":{"url":"git+https://github.com/maclevison/cliquet.git","type":"git"},"_npmVersion":"10.9.3","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"22.20.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.1.3_1783948887927_0.03904915516340801","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@craverlab/cliquet","version":"0.2.0","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.2.0","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"homepage":"https://github.com/maclevison/cliquet#readme","bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"286ce627d2c9ac5da98da10fda49cc680371199a","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.2.0.tgz","fileCount":35,"integrity":"sha512-iVUIFPnitjZEq+haQ9Zm8fxzQ3J8DQNIrxplTB02F6FhiN+HFlkETLcAh7MHuztniVuNEe9TL8nxyPlN9IwFwQ==","signatures":[{"sig":"MEUCIQDWXQpUNyBvA+jLqS6SoVuDXALlIMCu8dEr8FfEfTAbYAIgM0Gz0jTJvLJNTeieapym7VhWCckWtjKtPSqxe8H7JSw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102822},"type":"module","engines":{"node":">=20.11"},"gitHead":"09c3cb4594c6b2e20b0308d6f718ba0260df8407","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"repository":{"url":"git+https://github.com/maclevison/cliquet.git","type":"git"},"_npmVersion":"10.9.3","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"22.20.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.2.0_1783953897796_0.7319159199653145","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@craverlab/cliquet","version":"0.2.1","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.2.1","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"homepage":"https://github.com/maclevison/cliquet#readme","bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"b7de3f2cd035583b4a9b01ecb6a2cd5acfc0fa2f","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.2.1.tgz","fileCount":35,"integrity":"sha512-YenJks1lbWQt/LTezLqqU6MSB5S5yX9pMxQWPaW3AJXC/iJRV2jnGT2VtyqOuweMBlXjrUlmVnmjA4GrzHlzZQ==","signatures":[{"sig":"MEYCIQCLZramwh2zgjrsNPQ5ljnoMq9SN/IY4r4EFEsF11mj1AIhAIF+7+SZxy2k1yvSrrBM2vinqE6X6NimVa1zRBoxvpYy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108384},"type":"module","engines":{"node":">=20.11"},"gitHead":"a4748168baa9d8ddbf27fdb1a47a7ae1fe55c88e","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"repository":{"url":"git+https://github.com/maclevison/cliquet.git","type":"git"},"_npmVersion":"10.9.3","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"22.20.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.2.1_1783958874203_0.7578654808723513","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@craverlab/cliquet","version":"0.2.2","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.2.2","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"homepage":"https://github.com/maclevison/cliquet#readme","bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"ad6cd254185a94fb9b766f18f8f3a41f3c4413e4","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.2.2.tgz","fileCount":35,"integrity":"sha512-cqNGJFXD8kk2BFzVVlh32JfkbtIaKUk8ppGXR105JG9Qizk9wKwTWlM9rK9xpuVmAdcFOQiHTpLAOiVkLVVqcw==","signatures":[{"sig":"MEQCIAL+zij6A4oKM8DL20Ep7jzADWBAheIaKscoWPPstRmhAiAHZXQW1OhHvcZtSWKvvkJSi7/cHtMaWlRwNe5nOvIn4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109318},"type":"module","engines":{"node":">=20.11"},"gitHead":"1c8b496bfa056963899f6b29d779d8a270becc0e","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"repository":{"url":"git+https://github.com/maclevison/cliquet.git","type":"git"},"_npmVersion":"10.9.3","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"22.20.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.2.2_1783964027775_0.9249579020473491","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@craverlab/cliquet","version":"0.3.0","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.3.0","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"homepage":"https://github.com/maclevison/cliquet#readme","bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"2dfd6949e2252484f51dd585ac6502408d6d03e3","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.3.0.tgz","fileCount":35,"integrity":"sha512-Ib/SCvHpibyLcapku50Oxqi7bLoR0Gu4TOoFWLQ6V7odFPnkj6C67G8ekAYtKrrKir5/QLMNB+RE5/VthQ7h3Q==","signatures":[{"sig":"MEUCIQD/dd/u+3cBZ9PXO1AdpABsOXhjaH1xORW0FVBINtfpRwIgUq6cAQZJBqk49nb9xqvNfrrNeB8DmqSt0jhKoGDCZAo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117896},"type":"module","engines":{"node":">=20.11"},"gitHead":"ef8f86beec3275f9c31bbfcc3903d8363d3b8cb4","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"repository":{"url":"git+https://github.com/maclevison/cliquet.git","type":"git"},"_npmVersion":"10.9.3","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"22.20.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","picomatch":"^4.0.5","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@types/picomatch":"^4.0.3","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.3.0_1783978010455_0.17645298324939152","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@craverlab/cliquet","version":"0.3.1","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.3.1","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"homepage":"https://github.com/maclevison/cliquet#readme","bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"5daa16bb75222a6133cce1ab2ca586406b8bc2ba","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.3.1.tgz","fileCount":35,"integrity":"sha512-43z0eAedVudeQEuDvV4ADCin46KtExwtWtykUBAcZmZJ3seLrTNkVwY/kb+SsPpS+SOq0cRIfHxRGJn6WPpvGQ==","signatures":[{"sig":"MEQCIATd5zzLJP21a8AhV1lgPWhGY28HUysa5JZ0OTuyYgtIAiBMqOUJMjFkCVfn0J1n0nrKY7GUP+Pbd5YwZBo2LgXYlw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123285},"type":"module","engines":{"node":">=20.11"},"gitHead":"75fb3ea6626e4b2ff913136004a25a174b8dfe71","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"repository":{"url":"git+https://github.com/maclevison/cliquet.git","type":"git"},"_npmVersion":"11.17.0","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"26.4.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","picomatch":"^4.0.5","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@types/picomatch":"^4.0.3","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.3.1_1784023058474_0.20019248890079844","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@craverlab/cliquet","version":"0.4.0","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.4.0","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"homepage":"https://github.com/maclevison/cliquet#readme","bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"9faa79a80832c5cffd844ba919fe3d63a542ff81","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.4.0.tgz","fileCount":35,"integrity":"sha512-Jjef1r8ooTCsjLIec8DjNK8vhdUYhisZe+iAoEtYVEY6aZWhDAWKdO/G4zMEAHx9o4SLsnytuBVpMbX0aGrseQ==","signatures":[{"sig":"MEUCIQCRgCmSDCulZEHMYqaOUmsPmAyvYiwFdQYwBvmooQNL4QIgNhLa43U1uT7tmKBb2PmFhjHmgz2LD3zQs5w9xhDCsTI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130175},"type":"module","engines":{"node":">=20.11"},"gitHead":"c6cdb4bdd900fefd9b9a58dfe5f3743926fd0521","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"repository":{"url":"git+https://github.com/maclevison/cliquet.git","type":"git"},"_npmVersion":"11.17.0","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"26.4.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","picomatch":"^4.0.5","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@types/picomatch":"^4.0.3","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.4.0_1784025631292_0.714017408666813","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@craverlab/cliquet","version":"0.5.0","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.5.0","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"homepage":"https://github.com/maclevison/cliquet#readme","bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"d15cce10bdf0eb68b5193db4772432c641030acc","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.5.0.tgz","fileCount":36,"integrity":"sha512-vPc64kMzMEjUfAF2TBTKOrsloUpdDgrHdy04wG7TwZvFEAsemTs3HATSlh3fD0HnLK2mSkVg0cdX+KIwLMZqWQ==","signatures":[{"sig":"MEYCIQDupMPqtzXq/6yS6lYUJxvtW4MymVgWE+XI0b+jM6IGdgIhAL0ZAMb5LtKej/9YlpQWKHP6FAUmFwCpZ2jEc8TOhv7x","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":138905},"type":"module","engines":{"node":">=20.11"},"gitHead":"b6ece2b09d7b695c956c562635566bfbbc096eb9","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"repository":{"url":"git+https://github.com/maclevison/cliquet.git","type":"git"},"_npmVersion":"11.17.0","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"26.4.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","picomatch":"^4.0.5","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@types/picomatch":"^4.0.3","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.5.0_1784028223062_0.9234401600631403","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@craverlab/cliquet","version":"0.6.0","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.6.0","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"homepage":"https://github.com/maclevison/cliquet#readme","bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"a0732d378d4e1a73e29db1cabb4b3a7cf7f63162","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.6.0.tgz","fileCount":36,"integrity":"sha512-BHJ6Ph63Y4KpfJ5cOjZKw0TJDeRZH2nF79pAlwAFCKbhn/M1SjOdR5dNT3WvJOyL2fyvgjOgp/NaJ/t62GEB8g==","signatures":[{"sig":"MEUCIGGajMnoDaz+GHEC+6uphj8v7TdSWR+1Ek87ku2FUCJTAiEA1bf62U+k+tOv4kNOb3ujgo4F5PTdALon61BmPIXEcIA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144768},"type":"module","engines":{"node":">=20.11"},"gitHead":"d2d5de355213646c7015e33ed1588dc9d017ba9a","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"repository":{"url":"git+https://github.com/maclevison/cliquet.git","type":"git"},"_npmVersion":"11.17.0","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"26.4.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","picomatch":"^4.0.5","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@types/picomatch":"^4.0.3","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.6.0_1784031136784_0.35773436343013065","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@craverlab/cliquet","version":"0.6.1","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.6.1","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"homepage":"https://github.com/maclevison/cliquet#readme","bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"b870146d1163f8f8bb521359ab4e5ab76a46e825","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.6.1.tgz","fileCount":36,"integrity":"sha512-8ZWcwc31HoM/j9ueWc2V5Rz64E5iro7ikS80y4YK2calxPH5MuxcatYof8cUXEce3mWy+xYa8xKc55zkSXnS/A==","signatures":[{"sig":"MEUCIHxQOIgwcqK4PspVFTGDi7cYDsOkqidqt53ztgzHzTnGAiEA3m8En0RpE8rWW5JSr4gYGoMgMF7/lAWqC+qj+82WPV0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148807},"type":"module","engines":{"node":">=20.11"},"gitHead":"5ac9d40c6503cb5c82ae38f4e56853b54d81388b","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"repository":{"url":"git+https://github.com/maclevison/cliquet.git","type":"git"},"_npmVersion":"11.17.0","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"26.4.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","picomatch":"^4.0.5","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@types/picomatch":"^4.0.3","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.6.1_1784048597394_0.8150336007375525","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@craverlab/cliquet","version":"0.6.2","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"license":"MIT","_id":"@craverlab/cliquet@0.6.2","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"homepage":"https://github.com/maclevison/cliquet#readme","bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"bin":{"cliquet":"dist/cli.js"},"dist":{"shasum":"231af9c33569c8224c0319db2cac9f1ef0562970","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.6.2.tgz","fileCount":36,"integrity":"sha512-Ym+vEfLjvBfuxytubochmDuTlpYIuK2Nw/ue7FfB0Ypa8ckD7Vb/8w5ZB/XfWGShyztl7MW+oM3rIOp46aWEKg==","signatures":[{"sig":"MEYCIQDtWV6VOtO1zm11p3RDbQTfMcXTLg7zryY62lXOf5jiHQIhALyoCEtVg0qP/De4tpD42Ehxyk241mnWTV9fwcv7HTvy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":150355},"type":"module","engines":{"node":">=20.11"},"gitHead":"4ccceeb5b12fd1830f0a383e7a0de44e45cd91fd","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","quality":"npm run build && node dist/cli.js check --timeout 600","typecheck":"tsc --noEmit","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"repository":{"url":"git+https://github.com/maclevison/cliquet.git","type":"git"},"_npmVersion":"11.17.0","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","directories":{},"_nodeVersion":"26.4.0","dependencies":{"execa":"^9.5.0","jscpd":"^4.0.5","commander":"^13.1.0","picomatch":"^4.0.5","typescript":"^5.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.0","vitest":"^3.0.0","@types/node":"^22.10.0","@types/picomatch":"^4.0.3","@vitest/coverage-v8":"^3.2.7"},"_npmOperationalInternal":{"tmp":"tmp/cliquet_0.6.2_1784049720580_0.5944503791864064","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@craverlab/cliquet","version":"0.6.3","repository":{"type":"git","url":"git+https://github.com/maclevison/cliquet.git"},"bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"homepage":"https://github.com/maclevison/cliquet#readme","description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","type":"module","license":"MIT","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"engines":{"node":">=20.11"},"bin":{"cliquet":"dist/cli.js"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.build.json","test":"vitest run","typecheck":"tsc --noEmit","quality":"npm run build && node dist/cli.js check --timeout 600","prepublishOnly":"npm run test && npm run typecheck && npm run build"},"dependencies":{"commander":"^13.1.0","execa":"^9.5.0","jscpd":"^4.0.5","picomatch":"^4.0.5","typescript":"^5.8.0"},"devDependencies":{"@types/node":"^22.10.0","@types/picomatch":"^4.0.3","@vitest/coverage-v8":"^3.2.7","eslint":"^9.20.0","vitest":"^3.0.0"},"gitHead":"edca0f61a91c30a35f2fd47c5ce47f920428c3ba","_id":"@craverlab/cliquet@0.6.3","_nodeVersion":"26.4.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-q1YZVAGU5ABvErRWDxchEoh+iUvZujzz95uLDenvVwObX18YnJnXlgUcNIOdrdvHSDLb7VejP0Tz5mbxS++iSg==","shasum":"46895dab89984a5903ed678a3951e87316d39d0a","tarball":"https://registry.npmjs.org/@craverlab/cliquet/-/cliquet-0.6.3.tgz","fileCount":36,"unpackedSize":151792,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCJMYybMGACvv5A57ONg1NCnH/0Q5IkLs3E2BeijSRj/wIhAJ39gVDaEviUYwKLDYjNKfMotd9GLl0TZ10FBSqRcUek"}]},"_npmUser":{"name":"maclevison","email":"maclevison@gmail.com"},"directories":{},"maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cliquet_0.6.3_1784106787355_0.8762203992505624"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-13T09:51:24.758Z","modified":"2026-07-15T09:13:07.611Z","0.1.0":"2026-07-13T09:51:25.211Z","0.1.1":"2026-07-13T10:02:23.138Z","0.1.2":"2026-07-13T10:55:02.732Z","0.1.3":"2026-07-13T13:21:28.075Z","0.2.0":"2026-07-13T14:44:57.956Z","0.2.1":"2026-07-13T16:07:54.349Z","0.2.2":"2026-07-13T17:33:47.899Z","0.3.0":"2026-07-13T21:26:50.591Z","0.3.1":"2026-07-14T09:57:38.860Z","0.4.0":"2026-07-14T10:40:31.460Z","0.5.0":"2026-07-14T11:23:43.222Z","0.6.0":"2026-07-14T12:12:16.957Z","0.6.1":"2026-07-14T17:03:17.533Z","0.6.2":"2026-07-14T17:22:00.782Z","0.6.3":"2026-07-15T09:13:07.485Z"},"bugs":{"url":"https://github.com/maclevison/cliquet/issues"},"license":"MIT","homepage":"https://github.com/maclevison/cliquet#readme","keywords":["quality-gate","ratchet","code-quality","ci","lint","coverage","duplication","complexity","bundle-size","typescript"],"repository":{"type":"git","url":"git+https://github.com/maclevison/cliquet.git"},"description":"Quality gate CLI for TS/JS — metrics can only improve, never regress","maintainers":[{"name":"maclevison","email":"maclevison@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"docs/assets/cliquet-banner.webp\" alt=\"Cliquet — quality only moves forward\" width=\"100%\" />\n</p>\n\n> **Cliquet** (French for \"ratchet\", pronounced /kli.kɛ/ — \"clee-KEH\", silent *t*) — like a ratchet, quality only moves forward.\n\n**The quality ratchet for TypeScript/JavaScript.** Cliquet turns your project's quality metrics into a one-way street: they can improve or stay the same — **never regress**. One command, nine quality gates, a single versioned baseline, and a CI that blocks any step backward.\n\n```bash\nnpx cliquet init && npx cliquet check\n```\n\nCliquet orchestrates the tools your project already uses (ESLint, Prettier, Biome, tsc, Vitest, Jest), adds its own built-in checks (security, duplication, complexity, file size, bundle size), compares everything against a baseline committed to your repo, and fails your CI when any metric gets worse.\n\n## Why Cliquet?\n\n- **Ratchet by baseline, not by diff.** Diff-based tools only check the code you touched. A versioned baseline catches regressions no diff ever shows: a bundle growing kilobyte by kilobyte, coverage dropping because someone deleted tests, duplication quietly piling up. The global number never gets worse — period.\n- **Zero-config gates.** Nine gates work out of the box. Cliquet detects the tools you already have by their config files — no plugins to wire, no metric tests to write, no YAML to learn.\n- **Heterogeneous metrics, one mechanism.** Security advisories, test coverage, duplication, cyclomatic complexity, and gzip bundle size all go through the same ratchet. No other tool holds the line across all of them at once.\n- **Security built in.** Beyond `npm audit`, 12 source-level security rules ship out of the box: hardcoded secrets, injection patterns, unsafe HTML, supply-chain red flags, and more.\n- **Made for the AI-coding era.** Cliquet detects when it runs inside an AI coding agent (Claude Code, Cursor, …) and switches to structured JSON automatically — a quality contract your agents can actually read and act on.\n- **Fixes, not just reports.** `cliquet fix` auto-repairs what can be repaired (style, lint, performance) and re-checks in the same run.\n- **Legacy-friendly adoption.** Set the baseline to where your codebase is today; the ratchet holds that line and only tightens from there. No need to pay off years of debt on day one.\n- **A simple devDependency.** No server, no dashboard, no account, no lock-in. The quality floor is a JSON file in your repo — reviewable in PRs, auditable in git history.\n\n## How it compares\n\n| | **Cliquet** | Betterer | qlty | Trunk Check | SonarQube |\n|---|---|---|---|---|---|\n| Regression model | Versioned baseline (global) | Snapshot (per test) | Diff (new issues) | Diff (hold-the-line) | Diff (\"new code\") |\n| Ready-made gates | 9, zero config | Write your own | Linters only | Linters only | Server rules |\n| Coverage ratchet | ✅ | DIY | ❌ | ❌ | New code only |\n| Bundle size gate | ✅ | DIY | ❌ | ❌ | ❌ |\n| Built-in security rules | ✅ 12 rules | ❌ | Via plugins | Via plugins | ✅ |\n| Auto-fix command | ✅ | ❌ | ✅ | ✅ | ❌ |\n| AI-agent output | ✅ auto-detected | ❌ | ❌ | ❌ | ❌ |\n| Runs as | npm devDependency | npm devDependency | Rust binary + platform | Binary + platform | Server/SaaS |\n\nBetterer shares the ratchet philosophy but asks you to write every metric as code — and its last release was an alpha over a year ago. qlty and Trunk are excellent multi-language meta-linters, but they prevent regression per diff, not per baseline, and skip coverage and bundle size entirely. Cliquet is the focused option: TypeScript/JavaScript, batteries included, actively maintained.\n\n## Install\n\n```bash\nnpm install --save-dev @craverlab/cliquet\n```\n\nRequires Node.js ≥ 20.11.\n\n## Quick start\n\n```bash\n# Measure your project and write the baseline at its current state (--defaults skips measuring)\nnpx cliquet init\n\n# Run all gates and compare against the baseline\nnpx cliquet check\n\n# Auto-fix what can be fixed (style, lint, performance), then re-check\nnpx cliquet fix\n```\n\n## Quality gates\n\nGates run in parallel. A regression in any gate blocks with exit code 1.\n\n| # | Gate | Tool | Default threshold |\n|---|------|------|-------------------|\n| 1 | Security Audit | `npm`/`pnpm`/`yarn audit` + 12 built-in checks | 0 critical/high advisories, 0 findings |\n| 2 | Code Style | Prettier and/or Biome | 0 violations |\n| 3 | Static Analysis | ESLint, Biome, `tsc --noEmit` | 0 errors |\n| 4 | Test Coverage | Vitest or Jest | 85% minimum |\n| 5 | Duplication | jscpd (bundled) | 2% maximum |\n| 6 | File Size | built-in | 1000 lines per file |\n| 7 | Cyclomatic Complexity | built-in (TS compiler API) | Block at CCN 50, warn at 20 |\n| 8 | Performance | ESLint (internal ruleset) + built-in condition-order analyzer | 0 violations |\n| 9 | Bundle Size | built-in (gzip of your build dir) | Ratchet on measured size |\n\nTools are detected by their config files (`.prettierrc`, `biome.json`, `eslint.config.*`, `.eslintrc*`, `tsconfig.json`) and resolved from `node_modules/.bin`, then `$PATH`. **A tool that isn't installed or configured makes its gate skip — it never fails.** A tool that crashes turns its gate into `error`, which fails the run: broken tooling can't pass silently.\n\n## The baseline — `cliquet.baseline.json`\n\n`cliquet init` creates a baseline at your project root. Commit it — it is the quality floor:\n\n- **Regressed vs baseline → fail** with prioritized actions pointing at files.\n- **Equal → pass.**\n- **Improved → pass**, and the report suggests updating the baseline so the ratchet tightens.\n\n**Adopting on a legacy codebase:** `cliquet init` **measures your project and records the baseline at its current state** — each count/ratio gate's measured value becomes its floor, and every oversized file / high-CCN function is grandfathered into `file_size.allow` / `complexity.allow` at its measured size. So the first `check` passes, and from there the ratchet only tightens: existing offenders may hold or shrink (never grow past their entry), and a *new* oversized file is still caught against the strict threshold. `--defaults` skips measuring (writes the aspirational defaults instead).\n\nA few things are deliberately not auto-baselined:\n\n- **Coverage** that can't be measured (no runner, or the suite fails before writing a summary) floors to **0** with a note — raise it once tests run.\n- A gate that **errors** during `init` keeps its default, is flagged in the output, and `init` exits non-zero — a partial baseline is never trusted silently. Fix the tool and re-run `init`.\n- **Advisories** are recorded as a floor, but they come from the live registry: a newly-disclosed CVE against an unchanged lockfile can raise the count with no code change. Re-baseline (`init --force`) when that happens — or, if you don't want advisories gating CI at all, set `security.advisory_ratchet: false` (that drops only the advisory ratchet; content rules, gitignore and freshness checks still run).\n- **Security findings** are zero-tolerance and never snapshotted: fix the code, disable the rule under `security.rules`, or suppress a false positive narrowly with [`security.suppress`](#suppressing-security-false-positives).\n\nEditing `source_dirs` after `init` invalidates the measured floors — set your `paths`/`exclude` first, then `init --force`. `--force` **re-measures the floors under your edited scope and keeps the rest of your config** (disabled rules, `security.suppress`, thresholds); only the ratchet numbers (counts, `allow` maps, bundle, coverage) are recomputed. (An unreadable existing baseline is regenerated from defaults instead.)\n\n### Scoping with `source_dirs`\n\n```jsonc\n{\n  \"source_dirs\": {\n    \"paths\": [\"src\", \"app\", \"lib\"],      // where cliquet looks for source files\n    \"exclude\": [\"app/api/gen\", \"**/*.gen.ts\"]  // what it must NOT score\n  }\n}\n```\n\n`exclude` takes [picomatch](https://github.com/micromatch/picomatch) globs relative to the project root. A bare path (`\"app/api/gen\"`) excludes the whole subtree; trailing slashes are tolerated. Use it for **committed codegen** — generated API clients, `.d.ts` outputs — that would otherwise drown the duplication/file-size ratchets in numbers you don't control.\n\nThe exclusion reaches the built-in gates (file size, complexity, security content rules, condition-order), jscpd (duplication) and every eslint invocation — including the `cliquet fix` fixers, so auto-fixes never rewrite generated files. It does **not** reach prettier/biome/tsc/coverage: those tools have their own ignore mechanisms (`.prettierignore`, `biome.json`, tsconfig `exclude`, your test runner's coverage config).\n\nPatterns containing `,` or `{}` and negation patterns (`!`) are rejected at load with exit 2 — list patterns separately instead.\n\n### Suppressing security false positives\n\nThe source-level security rules are zero-tolerance, so a false positive (a `new Function(...)` inside a comment, a fake secret in a redaction test's fixtures) would otherwise force you to disable the whole rule. Two narrow, **visible** escapes let you keep the rule everywhere else:\n\n```jsonc\n{\n  \"security\": {\n    \"suppress\": {\n      \"**/*.test.ts\": [\"hardcoded_secrets\"],   // test fixtures carry fake secrets\n      \"src/zod-config.ts\": [\"eval_usage\"]       // one file, one rule\n    }\n  }\n}\n```\n\n`suppress` maps a picomatch glob (same rules as `source_dirs.exclude`) to the content rules whose findings are dropped under that path. Only content-rule names are valid (not `gitignore_sensitive` / `package_freshness`); an unknown name is a load error.\n\nFor one-off cases, an **inline** comment is line-narrow:\n\n```ts\nconst jwt = 'eyJ...'  // cliquet-ignore hardcoded_secrets — redaction-test fixture\n// cliquet-ignore-next-line eval_usage\nsomeLineThatTripsEvalUsage()\n```\n\nFor a rule that should be off for a whole file, put `// cliquet-ignore-file <rule>[, <rule>...]` anywhere in it (typically at the top).\n\nA rule name is required in every form (there is no \"ignore everything\"), and names are read up to an `—` reason delimiter, so a rule mentioned in your explanation is never silenced by accident.\n\nBoth mechanisms **remove a false positive — they never become a ratchet number** (unlike a threshold you grandfather). Every suppression is reported as a `warn` in the output (`SUPPRESSED: N finding(s)`, with file and rule) and never affects the exit code — the trail stays visible to reviewers.\n\nA directive that suppresses nothing — a misplaced `cliquet-ignore-next-line`, or a typo'd rule name — is reported as an **unused directive** `warn` (like ESLint's `report-unused-disable-directives`), so a wrong directive doesn't silently leave the finding in place.\n\n## Built for AI coding agents\n\n> \"I don't review code written by agents. I measure things like test coverage,\n> dependency structure, cyclomatic complexity, module sizes, mutation testing, etc.\n> Much can be inferred about the quality of the code from those metrics.\n> The code itself I leave to the AI.\"\n>\n> — [Robert C. Martin (Uncle Bob)](https://x.com/unclebobmartin/status/2044114698451476492), the tweet that inspired Cliquet\n\nAI agents write more of your code every day — Cliquet makes sure they can't lower the bar. When it detects it is running inside an AI coding agent (Claude Code, Cursor, and others), it automatically switches to structured JSON output, so the agent gets machine-readable gate results, regressions, and prioritized actions instead of ANSI art. An explicit `--format` always wins.\n\n```bash\ncliquet check                    # human-readable (default)\ncliquet check --plain            # no ANSI colors\ncliquet check --format json      # structured output for CI and AI agents\ncliquet check --format github    # inline PR annotations (::error file=…,line=…::)\n```\n\n### Exit codes\n\n| Code | Meaning |\n|------|---------|\n| 0 | All gates passed (skipped gates don't fail) |\n| 1 | At least one gate failed or errored |\n| 2 | Usage/config error (invalid baseline, bad flag, missing path) |\n\n## Security checks\n\nBeyond the package-manager audit, 12 built-in rules scan your sources: hardcoded secrets, secrets in client-exposed env vars (`VITE_`, `NEXT_PUBLIC_`, …), `eval`/`new Function`, command injection, SQL injection, unsanitized HTML (`dangerouslySetInnerHTML`, `v-html`, `innerHTML`), path traversal from request input, insecure RNG in security contexts, disabled TLS verification, `target=\"_blank\"` without `rel=\"noopener\"`, missing sensitive entries in `.gitignore`, and freshly-published dependencies (< 3 days). Every rule can be toggled in the baseline.\n\n## Bundle size\n\nThe bundle gate measures the gzip size of `.js`/`.mjs`/`.cjs`/`.css` files in your build directory (`dist`, `build`, or `.output`). It doesn't run your build — run it first, then `cliquet init` records the current size and the ratchet holds it. When the gate fails it lists the 5 largest files.\n\n## CI example (GitHub Actions)\n\n```yaml\nname: Quality Gate\non:\n  pull_request:\n    branches: [main]\njobs:\n  quality:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 22\n      - run: npm ci\n      - run: npm run build --if-present   # so the bundle gate can measure\n      - run: npx cliquet check --format github --plain\n```\n\n`--format github` emits GitHub Actions workflow commands, so each finding shows up as an **inline annotation on the PR diff** at its file and line (capped per run; the rest stay in the log). Run cliquet at the repo root so annotation paths resolve; from a monorepo subdir, cliquet prefixes them with the path from the repo root automatically.\n\n## CLI reference\n\n```\ncliquet init [--force]                  create the baseline (--force overwrites)\ncliquet check [--fix]                   run gates; --fix runs fixers on failure and re-checks\ncliquet fix [--no-check]                run auto-fixers, then check\n\nGlobal flags:\n  --path <dir>          project root (default: cwd)\n  --format <fmt>        human | json | json-pretty | github\n  --plain               disable ANSI colors\n  --timeout <seconds>   per-gate timeout (default: 300)\n```\n\n## License\n\nMIT\n\n## Credits\n\nCliquet is inspired by [Catraca](https://github.com/b7s/catraca) by [b7s](https://github.com/b7s) — the original PHP quality guardian that coined the turnstile/ratchet approach this project brings to the TypeScript/JavaScript ecosystem (\"catraca\" is Portuguese for turnstile/ratchet, just as \"cliquet\" is French for ratchet). If you work with PHP, go use it.\n","readmeFilename":"README.md"}