{"_id":"@factorialco/specbandit","_rev":"25-38108bb55814bbf9c684b50757e8a4c9","name":"@factorialco/specbandit","dist-tags":{"latest":"1.4.1"},"versions":{"0.1.0":{"name":"@factorialco/specbandit","version":"0.1.0","keywords":["test","runner","distributed","redis","ci","parallel","jest","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.1.0","maintainers":[{"name":"gtrias","email":"gtrias@gmail.com"},{"name":"mrcasals","email":"mrc2407@gmail.com"},{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"nikolai.lopin","email":"code@lopin.me"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sergiocarracedo","email":"hi@sergiocarracedo.es"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"b02f434aba9b7aa42def1c6f97886de554d8d88f","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.1.0.tgz","fileCount":7,"integrity":"sha512-ZqsnrNliX6sthqloCtcoHd5sTp1qyS4m300H/8lLjLryKKzkJAT2OxIJKLJ63pSW7x9QBTOaIOL7GaeuHLIIMg==","signatures":[{"sig":"MEQCID0uOoKF17dKgUkYOgRbpg9cY8CKE+uLQ2bayOcQgMEdAiBPLDw+Y2w5gvMspIO9vnLMZzeJ6WeLxOkOcHmjJJmQXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139366},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"664cca4b0e027adda2273f45f0dbc2d56a48a020","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"fcsonline","email":"fcsonline@gmail.com"},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"10.9.2","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.1.0_1775729890788_0.5593604897324851","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@factorialco/specbandit","version":"0.8.0","keywords":["test","runner","distributed","redis","ci","parallel","jest","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.8.0","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"3d884af3e740eeab298764cdf70c68dbdc8308a9","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.8.0.tgz","fileCount":7,"integrity":"sha512-4HKMsJeFvolPcrnUf7+qKrmU+7b9TKMqT7Z/Xhjz6pK1rQMDKfQRfGe1MWtM0NkpaUyZ+esRF3aGlN10Ke6iMQ==","signatures":[{"sig":"MEUCIF6Dtvn9LE8qK30CK6yrRK3kaA+m4OxV7GFSrRK/y5jAAiEA5hUZF1bT4xRyQdTV6OqhYi6Gb+lKSWtpLXNto9Za+38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":139392},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"8589057b4d44121acba36a6540dbf215be8298bc","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.8.0_1775746058250_0.22233423643735706","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@factorialco/specbandit","version":"0.10.0","keywords":["test","runner","distributed","redis","ci","parallel","jest","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.10.0","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"e66ac6615476ab25a82aa5570049f92a61cde023","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.10.0.tgz","fileCount":7,"integrity":"sha512-MUKST1zjAjWYggMDyufyKFeo5IMAFoy/jKCQ9TgXGviHn6IzqyjGdHZWMQswwyqLn30wfx33jOUHSMiIl0d9Ng==","signatures":[{"sig":"MEQCIF4FEoslJ2lnPMCzTDX4SzYbfphqNh3OBbuj1SGUhS7HAiB3JkGK3Gm/TAQ0pqtICMN1UEHUn7thB0co9DsbNOVfSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":206207},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"279b7ca5dc233d63d6ac3617e084f1680ed287b7","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0"},"peerDependenciesMeta":{"jest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.10.0_1775807709316_0.8300260504453887","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@factorialco/specbandit","version":"0.10.1","keywords":["test","runner","distributed","redis","ci","parallel","jest","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.10.1","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"8ca8f5eb1068a7dc772fd4044070485d288d0b25","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.10.1.tgz","fileCount":7,"integrity":"sha512-Cr+8aNl2nwUS7glZq22kwrQEdG7AV1Nq5p9LJUzpb1yCWNIyNBh3hGjotyjsArC+LboUuhYGvofdWyrlH5RzVQ==","signatures":[{"sig":"MEYCIQDaaIRnDQKxmJwDnE9PtGxEqSUVzHdJzLM2f9XLPQlaRAIhAIHS8VdwOnnIQxlNGKIXJF61qPM//F/7jBtVv4fEhSBG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":213075},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"dffc2338fdc38c6cb3076d290cf57798b9cb3228","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0"},"peerDependenciesMeta":{"jest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.10.1_1775815547818_0.6146504288293679","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"@factorialco/specbandit","version":"0.10.2","keywords":["test","runner","distributed","redis","ci","parallel","jest","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.10.2","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"d4981bb7e516669b47a5dce5a9c08c9329392934","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.10.2.tgz","fileCount":7,"integrity":"sha512-fsXuXv3yEvUNu6U1rwX6NhmaqiOg04aK1Xt7Wfg8KWUMYwVdmi/Scv0Tk6FGpI20f67PLqJJF2yFmWObOwRzTg==","signatures":[{"sig":"MEQCIA9zeAoysxhxxEgOQQp+cFlNS2Jn44fw3P7dZRwvR1KqAiBqmtzFHCePHzlYDCko0kvROlS3Fz16SlLIwUNSEJFgVw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.10.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":219608},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"de93b0151b96de38787a48465dcb53e44a76b073","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0"},"peerDependenciesMeta":{"jest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.10.2_1775816792861_0.5541718360648502","host":"s3://npm-registry-packages-npm-production"}},"0.10.3":{"name":"@factorialco/specbandit","version":"0.10.3","keywords":["test","runner","distributed","redis","ci","parallel","jest","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.10.3","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"7a4258b6cac13e80f91ce8a126970b8e79c35c95","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.10.3.tgz","fileCount":7,"integrity":"sha512-lxowoeWWI8WhJbv1SOFl5c32f/cdEMVbRl3O5oDioTdy0MOpGEq4DftcOAUmNjgpnzwz1Gr4SVBwLWOwXrRAcw==","signatures":[{"sig":"MEUCIBue0EFARAJguAwULd/uv15sqSk8NavQLFbf7aUJ0p1RAiEAhBw4GKV6HDQCPWtQNOj8+JUlEAxarlhy98ItQvks0kI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.10.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":220734},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"3c63ed339c264aa935b489777b0bb671baac9b53","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0"},"peerDependenciesMeta":{"jest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.10.3_1775817790379_0.793998604458571","host":"s3://npm-registry-packages-npm-production"}},"0.10.4":{"name":"@factorialco/specbandit","version":"0.10.4","keywords":["test","runner","distributed","redis","ci","parallel","jest","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.10.4","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"9d414b6aabde95027991f76d3d900f5ed746f9ba","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.10.4.tgz","fileCount":7,"integrity":"sha512-70TykvzlHE2d9xf9F7pwByDoIOhoh3x5B3zHiLYmkp+9uVL3717kAyNDDOvu41Smglk/JLJqfgdrR3e+b+Rt4A==","signatures":[{"sig":"MEQCICdwtnvR9G49Cilb5VLWzaU7tn8wqrffDdBimclZ+RZ3AiAi4GCqZ4AQ4WA9ac2HWvDdwEEiywjoEsgl+xH5Du+Apg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.10.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":221682},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"f47b370ac70e0da4c610ff12b50da20a78c8cfb5","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0"},"peerDependenciesMeta":{"jest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.10.4_1775818495938_0.4552369839011319","host":"s3://npm-registry-packages-npm-production"}},"0.10.5":{"name":"@factorialco/specbandit","version":"0.10.5","keywords":["test","runner","distributed","redis","ci","parallel","jest","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.10.5","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"a9a7d55922671e68b8058492ad6250d9156717bd","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.10.5.tgz","fileCount":7,"integrity":"sha512-Rd8kj+R2vdM6EVLNZr7pRWzsCtpzxOvll9G+fFeID6Coy2/cABqaduJm4HicwkN9Zxa58qmwt6ODehyJ4pX1dQ==","signatures":[{"sig":"MEQCIFf6LgeL9Qu1Jo9EkK9B9GIwUaGuLVnIBIBoRJR7BU2ZAiAoPm/jrEO8SwuC705BNYpixU3yz/pAw+VvebPLLuaHRg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.10.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":218579},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"817fa4d5435f030edd13b1ad26c37196e3d987c4","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0"},"peerDependenciesMeta":{"jest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.10.5_1775819547606_0.36881512706840636","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@factorialco/specbandit","version":"0.11.0","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.11.0","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"933c007d72b30a323309a0cb7768cd230bc2219a","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.11.0.tgz","fileCount":7,"integrity":"sha512-fIU0uVoymGk1rywBOxsqtBvnuUXvA+nEgevfp9I60xy2+OUVcWLUnw/bb2xAuapmMT3gBeqgE0MGLFcwrf/U7A==","signatures":[{"sig":"MEYCIQDnOvggts2ifOVIM14GzeLtS3VMGVRELVf2oMRnT7lcTwIhAKWm9ZCsRId4lbGNIGdpcHGNVmTLkzIwbHxSEhoVsIa+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":251838},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"54295100b6e44c4a28fd6de294a961f35095dba9","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.11.0_1776075536115_0.1199013607372641","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@factorialco/specbandit","version":"0.12.0","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.12.0","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"c4c45d8d5e49b223ecdb9d3c2385f776e89a233d","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.12.0.tgz","fileCount":7,"integrity":"sha512-qZbDngi+vCAAxlCj5fkZuY66Fd0JzXE1MOT72Qqhd6BtLACGaXKhevU9AVX6q3uxdRUHulSZ/g0Nmnxx/5GRxw==","signatures":[{"sig":"MEUCIQD4p1HrGREXdtTFHbA7m5++F6DrY6szotSazeHHWd0egwIgBftHEnANnyIEk5/tgBn3EiYsiJ2ys0ekVTp7Su9qnpk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":257362},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"03da8785ebd6b3d7b42c2f039afaa585b0e49300","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.12.0_1776342046673_0.9402189042887823","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@factorialco/specbandit","version":"0.13.0","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.13.0","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"417282e7ada18275572415bce5e3864659ef0a45","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.13.0.tgz","fileCount":7,"integrity":"sha512-PqkRBGl5IlTkNpFnI/3SCHiai7RNvdovlVNcZWfblhX9BaWwHDJcRZZomT+Dfvir2c2xnA0zVhq7EcYqBrMFDw==","signatures":[{"sig":"MEYCIQDqB/wAykMpYdcp1j85VE+wdRHkxBHFwKtDC4Xn+74beQIhAJ+jdwbuI3WUKfDPtpN4YlSAbDQSO8eQAIkDLvbiox82","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":262955},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"40f1057d5e98fea51ee3fd08c2e914470316d18d","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.13.0_1776350194954_0.7624309970436884","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"@factorialco/specbandit","version":"0.13.1","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.13.1","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"951efc2a9b6cbfc3b35908c9d44a79bc1641510d","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.13.1.tgz","fileCount":7,"integrity":"sha512-HMGhRn1l1a4iCD6nqg+R/eU6vDwR5U1HzHSS3RevEkXfKEobot98K5NW6+XZ5/jtwM4qd32j2SHj8B7uQhXFng==","signatures":[{"sig":"MEUCIAzyxB6StS1mCjLbPZRgjwBc1eAgJDpLeOS50RNXZDuTAiEAn3q8+5iVEnqaGDwhX2o7KvKZGJ/yN03LRv2WaCHXew4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.13.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":264653},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"aa0df6b6b0892269a6cff68911ce16c21ee2a960","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.13.1_1776353232165_0.8795732634693527","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@factorialco/specbandit","version":"0.14.0","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.14.0","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"f7aa45a5aa7e5e37357b8fdc6a4d6e1b3314fe20","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.14.0.tgz","fileCount":7,"integrity":"sha512-0FiqMU9s7F7/IL1rc0HahX8qfy+srew+K83QRF0JxCkWGo3KtTIiVDBZK1819QSP+ALLJZCKiOZNY4/llZ5/qQ==","signatures":[{"sig":"MEUCIDgj3DAAoUBpui5LVSJFKLqgms3GIgE7tqOoMpTXHOguAiEAz0HjFFHJ4yi/7ZGFK/30QhzyvlrpHH7NNhtN5UzOqxw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":269290},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"c11d7d39f5811bfad610e9580de1b66c9537db07","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.14.0_1776693025953_0.0981878168993151","host":"s3://npm-registry-packages-npm-production"}},"0.14.1":{"name":"@factorialco/specbandit","version":"0.14.1","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.14.1","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"becef44ac5467c05cf6d409a40aac531809d78e2","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.14.1.tgz","fileCount":7,"integrity":"sha512-aDS1ioUgGwKnC7RbLeXhR6qvtoM77/Us+Pl2b0dq1GgEkiJhVjreXcJ6cUaqhYplGjL6Obv1PZf2C7EyeIWdDw==","signatures":[{"sig":"MEUCIQDR2T8v+7ua8LyExkcZcbH5AIr3VJhsBdVk8DqFrLtsbAIgIbSIT3Q7DRagGI0eqa+tEdRfpoyaHBbIkoiyCZgUQMQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.14.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":269290},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"11dafe8ded3293c1882aadc54cae3b060a950728","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.14.1_1776764146356_0.3790293279215069","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@factorialco/specbandit","version":"0.15.0","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.15.0","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"374aab6c192d4d953301943244e80ac391d9f7ee","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.15.0.tgz","fileCount":7,"integrity":"sha512-TzF3DkPc6y2DdIxT01/c92Ua+/LpEMsnvZ1Fo2FxepU6n1iBWUqa8qWteICZztjHKaq+SU7Z1YIriL1CWD7QVw==","signatures":[{"sig":"MEUCIQCM0KsxgAhRpCG3Jx8ufftayda9UXYyl0U+kjVP7RhS6QIgN/2PBcVANw+shLgbM9HBp8BXI82ak9qm5Ds/1D0SHL0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":256534},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"9fb6895db1f4ecd2ef8254e4a33621120d835c83","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.15.0_1776867280846_0.4726269381184587","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@factorialco/specbandit","version":"0.16.0","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.16.0","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"764be5129b88dfb25ab87c0a8aa1ea940897009b","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.16.0.tgz","fileCount":7,"integrity":"sha512-vWnW1gw0U1cYzx/33xeTU5K33YqF8v+S23pSMe/PIK0Gp2ZdhTXgQ3QebtU3utzdGhiKzggb4SsUENAZOryPuw==","signatures":[{"sig":"MEUCIQCnl7o6UHw/CvWpKJ03/T21nqCPT6Hjub38i3VUgf3vlgIgasn214ytq2Tg4npCqrPNCoK8Ir4eh0C6Z8eWKh2FF9g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":268827},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"9ddc1f66fe3060e7f6703bea0633b17a013933dc","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.12.1","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.16.0_1776956362154_0.564104143175016","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"@factorialco/specbandit","version":"0.16.1","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@0.16.1","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"09d5e8653e0f535cd9f12d2c15e37348c9dcb344","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-0.16.1.tgz","fileCount":7,"integrity":"sha512-l7bCqdR7UiiLVRHbkxfQNQOzGx9WtdFCEHZGSLvUxj9tfA5ctMSl3n4lEUGBh1wixqPgkq4zgXWOhUwYzoiQvA==","signatures":[{"sig":"MEYCIQC1Bi5qpi3JXnMbLaVbxrE2rh7sRwJL8DJeGI35TG/z5AIhANZ2vU7yD3pB1MNB3Ib62wKaY6nzaZtpGNTQjIgJp24Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@0.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":269007},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"60c8abb4ff5945b4636e3e9d7f617da3df45e45a","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.11.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_0.16.1_1777022172270_0.44248665110294216","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@factorialco/specbandit","version":"1.0.0","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@1.0.0","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"a0d0a4c69e25887850e91a29cf930d57b1f4a7b2","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-1.0.0.tgz","fileCount":7,"integrity":"sha512-RfyM+/OFGCa6FObuRL7bl41UjRywxIYR/6CPql+56O88EqQ2Lf1KKrlLoWerDfnp8eWslo8E85Mf2KlvpXKqfA==","signatures":[{"sig":"MEUCIAn5/+FSaycTLOqSRepXzRZ32gAYGZOiG9A25DFQpMmUAiEAt4WenQsegXbckD3owFTrgKpZ36lIBQk5KAvxHtC8PCA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":273379},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"0365415a13228f5d1b3ab5dbb427c73ab7c4a9f8","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.16.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_1.0.0_1782915086333_0.7859680265429045","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@factorialco/specbandit","version":"1.0.1","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@1.0.1","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"6fdc9589f82ad319da8a426717cb8f1ae0b88148","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-1.0.1.tgz","fileCount":7,"integrity":"sha512-5Bx/8A1LBgbKYNQUxf7CFazWXRwwgdCULFQft00h22LcN7AOX9hyiYNDVcYJ3/26K7ksC5S1UHZXEcQo0eU+sg==","signatures":[{"sig":"MEYCIQCwlOr7aa0j0I6CuFtOO8x0dg2ZmtemogRhTJp7i9tU0gIhAMakdeL6G7pd1Kf2EGoi094gXwn5vnXHr5AXBP/Q0vLc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":275615},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"1ff1008826a8b2679bbc464ad865b8ed4e88a247","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.16.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_1.0.1_1782973367589_0.67756997764932","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@factorialco/specbandit","version":"1.1.1","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@1.1.1","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"rubenmoya","email":"rmoyarodriguez@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"c1c70143d93568074db536980340834fbde765f1","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-1.1.1.tgz","fileCount":7,"integrity":"sha512-JT1S9EvmJpkYVi+pSIxOJQ70Kx36vj7ZsJyA8NMFBeRyAAvsbz0Yhwj/2mRTWQMh8j/YHM1mWcJ/qQpZ0xuQcg==","signatures":[{"sig":"MEUCIFt0xiKzrHm+TiyZj/X+BY3blX9L32bPOhQ6TJCiGJ3ZAiEA89k4pFw/vNQLFSKrD9msrpvU9VaEqXUb4/31W/f/vuA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":295610},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"5f4659f16d901bafc971b190bbeeac074c4802f6","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.16.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_1.1.1_1784205392558_0.9105774599709247","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@factorialco/specbandit","version":"1.2.0","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@1.2.0","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"rubenmoya","email":"rmoyarodriguez@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"605f488d9155da2a5f70287f68f99690d7cb40f3","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-1.2.0.tgz","fileCount":7,"integrity":"sha512-SAie79jb6Awrn+cNpDpASzGg84xUOaiicXt67NhntSKiHeeM85Cszad9pUIluaJ97HdnTJ9ku1vOgqQAqwRfXg==","signatures":[{"sig":"MEQCIHMgDyIBxOJWmRfuu/gK8/Pgm3KNpCo0pKlypnGjNM5pAiBgr/qpHX5eLmy+LAHZFNVnrbi93vkLTgLd03vvWE+K7Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":316383},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"28afb0e806c82adb5912ea0ec94bd6ce8522795d","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.16.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_1.2.0_1784291331455_0.7653515622971416","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@factorialco/specbandit","version":"1.3.0","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@1.3.0","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"rubenmoya","email":"rmoyarodriguez@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"4a232d536761ccac4d49f285dda1920ebeeee80d","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-1.3.0.tgz","fileCount":7,"integrity":"sha512-BhLwG1u1orbMePSwJSvKiFCOGgHZoq6dnqFERXhTEDlyunasjY1yjQGGC1e+Dikb+qBmh7wYpWTEW3eC5yva7g==","signatures":[{"sig":"MEUCIQDZAx/BvRyP1Ql8GFjRkOf2ULZF5jvvDGjZObJgDP06QgIgcA7IwcvK3o4ThvbK3XeOH10aX2ihb2vht98i2YiYLbE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":319474},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"0be3a59cd24b260cd5487c6ea9cc8b64565ece7b","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.16.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_1.3.0_1785324570765_0.28678719611958337","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@factorialco/specbandit","version":"1.4.0","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"author":{"name":"Ferran Basora"},"license":"MIT","_id":"@factorialco/specbandit@1.4.0","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"rubenmoya","email":"rmoyarodriguez@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"homepage":"https://github.com/factorialco/specbanditjs","bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"bin":{"specbandit":"dist/bin.js"},"dist":{"shasum":"ae8c78fb012a159d1f0592f06e702702ae08d46b","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-1.4.0.tgz","fileCount":7,"integrity":"sha512-mfN5gEdb0N1cjnXgTRWouyfRF8UQbBgIwNQ/mVkPNWDCwqbXHk43cRTqsYunBGYi9x9q1yYnQLkn4k83uJTQBg==","signatures":[{"sig":"MEQCIBPuCpE0aTDZr/mzbw0/v74LXaMUZgiPT2VbHS7x/gYZAiAqZmSFgSMau4JjqWcZuBAG+91P2bmGld/AC635jlp9og==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":339132},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"e6247be652b1b37dc59eb2f5975c8e52968d617d","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.16.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/specbandit_1.4.0_1786523772117_0.6862433857860553","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"_id":"@factorialco/specbandit@1.4.1","bin":{"specbandit":"dist/bin.js"},"bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"dist":{"shasum":"bca577d06a2d89b6be045d3f587896455c6b1b5c","tarball":"https://registry.npmjs.org/@factorialco/specbandit/-/specbandit-1.4.1.tgz","fileCount":7,"integrity":"sha512-eKNqsbvIIjtWWnBUS/Lhw9e9BAmyc8ecUea0cjE2YNp2N16YHhs/u50spyHjfKn10C1Kly4yJ/HnqvShNWAxsA==","signatures":[{"sig":"MEQCIASiqlHcv7CyWQdrY3gk25/CgGOpi5suHl++bsbc4RKsAiBaaGdh27wKpFn3QyEgCxbD0zLcTf2pJN+b3vkb/ZfDXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCCnJD8ASzoxeqFVXLjkcxrYrJ/wlzN40YTeyzdV0NTegIhAO2W6fpaDQhzOLArZinPCWZanhxURvc5KFV21GAgpCAt"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@factorialco%2fspecbandit@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":340168},"main":"./dist/index.js","name":"@factorialco/specbandit","type":"module","types":"./dist/index.d.ts","author":{"name":"Ferran Basora"},"engines":{"node":">=22"},"gitHead":"e8782c51d02dd6efd3592555649614325a579fc7","license":"MIT","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"version":"1.4.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b0d248d-4b17-4d37-a77d-e126d6a9cfe9"}},"homepage":"https://github.com/factorialco/specbanditjs","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"_npmVersion":"11.19.0","description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","directories":{},"maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"rubenmoya","email":"rmoyarodriguez@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"_nodeVersion":"24.20.0","dependencies":{"ioredis":"^5.4.1","fast-glob":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"jest":"^29.0.0","cypress":"^13.0.0"},"peerDependenciesMeta":{"jest":{"optional":true},"cypress":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/specbandit_1.4.1_1789568640396_0.9222092216554718"}}},"time":{"created":"2026-04-09T10:18:10.701Z","modified":"2026-09-16T14:24:00.829Z","0.1.0":"2026-04-09T10:18:10.993Z","0.8.0":"2026-04-09T14:47:38.394Z","0.10.0":"2026-04-10T07:55:09.446Z","0.10.1":"2026-04-10T10:05:47.963Z","0.10.2":"2026-04-10T10:26:32.982Z","0.10.3":"2026-04-10T10:43:10.529Z","0.10.4":"2026-04-10T10:54:56.118Z","0.10.5":"2026-04-10T11:12:27.799Z","0.11.0":"2026-04-13T10:18:56.253Z","0.12.0":"2026-04-16T12:20:46.813Z","0.13.0":"2026-04-16T14:36:35.129Z","0.13.1":"2026-04-16T15:27:12.312Z","0.14.0":"2026-04-20T13:50:26.102Z","0.14.1":"2026-04-21T09:35:46.505Z","0.15.0":"2026-04-22T14:14:41.120Z","0.16.0":"2026-04-23T14:59:22.357Z","0.16.1":"2026-04-24T09:16:12.419Z","1.0.0":"2026-07-01T14:11:26.564Z","1.0.1":"2026-07-02T06:22:47.746Z","1.1.1":"2026-07-16T12:36:32.689Z","1.2.0":"2026-07-17T12:28:51.606Z","1.3.0":"2026-07-29T11:29:30.900Z","1.4.0":"2026-08-12T08:36:12.271Z","1.4.1":"2026-09-16T14:24:00.484Z"},"bugs":{"url":"https://github.com/factorialco/specbanditjs/issues"},"author":{"name":"Ferran Basora"},"license":"MIT","homepage":"https://github.com/factorialco/specbanditjs","keywords":["test","runner","distributed","redis","ci","parallel","jest","cypress","vitest","work-stealing"],"repository":{"url":"git+https://github.com/factorialco/specbanditjs.git","type":"git"},"description":"Distributed test runner using Redis as a work queue. Push file paths to a Redis list, then multiple CI runners atomically steal batches and execute them via a configurable command.","maintainers":[{"name":"fcsonline","email":"fcsonline@gmail.com"},{"name":"beagleknight","email":"david.morcillo@gmail.com"},{"name":"rubenmoya","email":"rmoyarodriguez@gmail.com"},{"name":"eliseo_jq","email":"v035173@gmail.com"},{"name":"sandrafloreshidalgo","email":"sandrafloreshidalgo@gmail.com"},{"name":"sandrafh","email":"sandra.flores@factorial.co"},{"name":"gastonrey","email":"gastonrey@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"specbanditjs.png\" alt=\"specbandit logo\" width=\"200\" />\n</p>\n\n# specbandit\n\nDistributed test runner using Redis as a work queue. One process pushes test file paths to a Redis list; multiple CI runners atomically steal batches and execute them via a configurable command.\n\n```\nCI Job 1 (push):    RPUSH key f1 f2 f3 ... fN  -->  [Redis List]\nCI Job 2 (worker):  LPOP key 5  <--  [Redis List]  -->  npx jest\nCI Job 3 (worker):  LPOP key 5  <--  [Redis List]  -->  npx jest\nCI Job N (worker):  LPOP key 5  <--  [Redis List]  -->  npx jest\n```\n\n`LPOP` with a count argument (Redis 6.2+) is atomic -- multiple workers calling it concurrently will never receive the same file.\n\nThis is a TypeScript port of [specbandit](https://github.com/factorialco/specbandit) (Ruby/RSpec). Instead of running RSpec in-process, the worker spawns any command you provide (jest, vitest, node, etc.) with the stolen file paths as arguments.\n\n## Installation\n\n```bash\nnpm install @factorialco/specbandit\n```\n\nOr run directly:\n\n```bash\nnpx specbandit --help\n```\n\n**Requirements**: Node.js >= 18, Redis >= 6.2\n\n## Usage\n\n### 1. Push test files to Redis\n\nA single CI job enqueues all test file paths before workers start.\n\n```bash\n# Via glob pattern\nspecbandit push --key pr-123-run-456 --pattern 'test/**/*.test.ts'\n\n# Via stdin pipe (for large file lists or custom filtering)\nfind test -name '*.test.ts' | specbandit push --key pr-123-run-456\n\n# Via direct arguments (for small lists)\nspecbandit push --key pr-123-run-456 test/models/user.test.ts test/models/order.test.ts\n```\n\nFile input priority: **stdin > --pattern > direct args**.\n\nAdd `--reset` when the producer can run more than once for the same key:\n\n```bash\nspecbandit push --key pr-123-run-456 --reset --pattern 'test/**/*.test.ts'\n```\n\nSee [Repeated pushes: `--reset`](#repeated-pushes---reset).\n\n### 2. Steal and run from multiple workers\n\nEach CI runner steals batches and runs them. Start as many runners as you want -- they'll divide the work automatically.\n\n```bash\nspecbandit work --key pr-123-run-456 --command \"npx jest\" --batch-size 10\n```\n\nEach worker loops:\n\n1. `LPOP` N file paths from Redis (atomic)\n2. Spawn the command with the file paths as arguments\n3. Repeat until the queue is empty\n4. Exit 0 if all batches passed, 1 if any failed\n\nA failing batch does **not** stop the worker. It continues stealing remaining work so other runners aren't blocked waiting on files that will never be consumed.\n\n### CLI reference\n\n```\nspecbandit push [options] [files...]\n  --key KEY              Redis queue key (required)\n  --pattern PATTERN      Glob pattern for file discovery\n  --redis-url URL        Redis URL (default: redis://localhost:6379)\n  --key-ttl SECONDS      TTL for all Redis keys (default: 604800 / 1 week)\n  --reset                Empty the key before pushing (see below)\n\nspecbandit reset [options]\n  --key KEY              Redis queue key (required)\n  --redis-url URL        Redis URL (default: redis://localhost:6379)\n\nspecbandit work [options]\n  --key KEY              Redis queue key (required)\n  --command CMD          Command to run with file paths (required, e.g. \"npx jest\")\n  --command-opts OPTS    Extra options forwarded to the command (space-separated)\n  --batch-size N         Files per batch (default: 5)\n  --redis-url URL        Redis URL (default: redis://localhost:6379)\n  --key-rerun KEY        Per-runner rerun key for re-run support (see below)\n  --key-ttl SECONDS      TTL for all Redis keys (default: 604800 / 1 week)\n  --verbose              Show per-batch file list and full command output\n  --json-out PATH        Write merged JSON results to file\n```\n\n### Environment variables\n\nAll CLI options can be set via environment variables:\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `SPECBANDIT_KEY` | Redis queue key | *(required)* |\n| `SPECBANDIT_REDIS_URL` | Redis connection URL | `redis://localhost:6379` |\n| `SPECBANDIT_COMMAND` | Command to run | *(required for work)* |\n| `SPECBANDIT_COMMAND_OPTS` | Space-separated command options | *(none)* |\n| `SPECBANDIT_BATCH_SIZE` | Files per steal | `5` |\n| `SPECBANDIT_KEY_RERUN` | Per-runner rerun key | *(none)* |\n| `SPECBANDIT_KEY_FAILED` | Redis key for failed test files | *(none)* |\n| `SPECBANDIT_KEY_TTL` | Expiry for all Redis keys in seconds | `604800` (1 week) |\n| `SPECBANDIT_VERBOSE` | Enable verbose output (1/true/yes) | `false` |\n| `SPECBANDIT_JEST_BATCH_TIMEOUT` | Jest adapter idle (no-progress) timeout in seconds; a batch with no Jest output for this long is treated as hung and failed. `0` disables it. | `600` |\n\nCLI flags take precedence over environment variables.\n\n### Node.js API\n\n```typescript\nimport { Configuration, Publisher, Worker, RedisQueue } from '@factorialco/specbandit'\n\n// Push\nconst queue = new RedisQueue('redis://my-redis:6379')\nconst publisher = new Publisher({\n  key: 'pr-123-run-456',\n  keyTtl: 7200,\n  queue,\n})\nawait publisher.publish({ pattern: 'test/**/*.test.ts' })\n\n// Work\nconst worker = new Worker({\n  key: 'pr-123-run-456',\n  command: 'npx jest',\n  commandOpts: ['--coverage'],\n  batchSize: 10,\n  queue,\n})\nconst exitCode = await worker.run()\n\nawait queue.close()\nprocess.exit(exitCode)\n```\n\n## Example: GitHub Actions (basic)\n\n```yaml\njobs:\n  push-tests:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - run: npm ci\n      - run: |\n          npx specbandit push \\\n            --key \"pr-${{ github.event.number }}-${{ github.run_id }}\" \\\n            --redis-url \"${{ secrets.REDIS_URL }}\" \\\n            --pattern 'test/**/*.test.ts'\n  run-tests:\n    runs-on: ubuntu-latest\n    needs: push-tests\n    strategy:\n      matrix:\n        runner: [1, 2, 3, 4]\n    steps:\n      - uses: actions/checkout@v4\n      - run: npm ci\n      - run: |\n          npx specbandit work \\\n            --key \"pr-${{ github.event.number }}-${{ github.run_id }}\" \\\n            --redis-url \"${{ secrets.REDIS_URL }}\" \\\n            --command \"npx jest\" \\\n            --batch-size 10\n```\n\n## Re-running failed CI jobs\n\n### The problem\n\nWhen you use specbandit to distribute tests across multiple CI runners (e.g. a GitHub Actions matrix with 4 runners), each runner **steals** a random subset of test files from the shared Redis queue. The distribution is non-deterministic.\n\nThis creates a problem with CI re-runs:\n\n1. **First run**: Runner #3 steals and executes files X, Y, Z. File Y fails. The shared queue is now empty.\n2. **Re-run of runner #3**: GitHub Actions re-runs only the failed runner. It starts `specbandit work` again with the same `--key`, but the queue is already empty. Runner #3 sees nothing to do and **exits 0 -- the failing test silently passes**.\n\n### The solution: `--key-rerun`\n\nThe `--key-rerun` flag gives each matrix runner its own \"memory\" in Redis. It enables specbandit to **record** which files each runner executed, and **replay** exactly those files on a re-run.\n\n```bash\nspecbandit work \\\n  --key \"pr-42-run-100\" \\\n  --key-rerun \"pr-42-run-100-runner-3\" \\\n            --command \"npx jest\" \\\n            --batch-size 10\n```\n\n### The published marker prevents silent false passes\n\nRedis deletes a list once its last element is popped, so a **drained** queue and a\nqueue that was **never published** look identical. To tell them apart, `push` sets a\ncompanion marker key (`<key>:published`) with the same TTL as the queue. The marker\noutlives the drained list, so `work` can trust that work really was published.\n\nIf the marker expires (TTL) or Redis is flushed between the first run and a re-run,\n`work` finds no marker and **fails immediately** instead of running zero tests and\nexiting 0. This replaces the old `--rerun` flag -- the protection is now automatic and\nneeds no per-attempt configuration.\n\n### How it works: the operating modes\n\n`work` reads the published marker plus the state of the shared queue and rerun key, then\nfollows this truth table:\n\n| Published | Shared queue | Rerun key | Result |\n|-----------|--------------|-----------|--------|\n| No | any | any | **Crash (exit 1)** -- nothing was published (never pushed, or TTL expired). |\n| Yes | empty | empty | **Ok** -- worker arriving late. Queue already drained, nothing to do (exit 0). |\n| Yes | populated | empty | **Ok. Classic run** -- steal from the shared queue, recording each batch to the rerun key when `--key-rerun` is set. |\n| Yes | empty | populated | **Ok. Classic rerun** -- replay exactly the recorded files, ignoring the shared queue. |\n| Yes | populated | populated | **Ok. Full rerun** -- the queue was re-pushed while this runner still holds rerun memory from a previous run. The stale rerun key is deleted and the runner steals from the shared queue like a classic run, re-recording as it goes. |\n\n### Complete GitHub Actions example with re-run support\n\n```yaml\njobs:\n  push-tests:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - run: npm ci\n      - run: |\n          npx specbandit push \\\n            --key \"pr-${{ github.event.number }}-${{ github.run_id }}\" \\\n            --redis-url \"${{ secrets.REDIS_URL }}\" \\\n            --pattern 'test/**/*.test.ts'\n  run-tests:\n    runs-on: ubuntu-latest\n    needs: push-tests\n    strategy:\n      matrix:\n        runner: [1, 2, 3, 4]\n    steps:\n      - uses: actions/checkout@v4\n      - run: npm ci\n      - run: |\n          npx specbandit work \\\n            --key \"pr-${{ github.event.number }}-${{ github.run_id }}\" \\\n            --key-rerun \"pr-${{ github.event.number }}-${{ github.run_id }}-runner-${{ matrix.runner }}\" \\\n            --redis-url \"${{ secrets.REDIS_URL }}\" \\\n            --command \"npx jest\" \\\n            --batch-size 10\n```\n\n## Repeated pushes: `--reset`\n\nThe queue key is scoped by CI run, not by CI attempt. It has to be: re-running a single failed runner does not re-run the job that pushed, so that runner must still find the queue and the published marker the first attempt created.\n\nThe cost is that the producer is not idempotent. A producer that pushes and then fails, or that is re-run as part of the whole workflow, appends a second copy of the work list to the same key. Every file is then enqueued twice, so the suite runs twice, and any two copies that reach the same worker are loaded twice in one process. For test files that define constants at module scope, the second load is fatal.\n\n`--reset` makes the push idempotent:\n\n```bash\nspecbandit push --key \"pr-42-run-100\" --reset --pattern 'test/**/*.test.ts'\n```\n\nThe queue and its `<key>:published` marker are deleted, then the work list is pushed, so the key holds exactly one copy however many times the producer runs. The leftover count is logged, and a non-zero one tells you an earlier attempt pushed a list nobody consumed:\n\n```\n[specbandit] Reset key 'pr-42-run-100': discarded 4213 queued files from a previous push.\n```\n\nThere is also a standalone command, for callers that clean up separately from the push:\n\n```bash\nspecbandit reset --key \"pr-42-run-100\"\n```\n\nBoth leave the per-runner rerun keys and the failed keys alone, so a single-runner re-run can still replay its own files. A runner that finds data in both the shared queue and its rerun key is the **full rerun** case in the table above, and it resets its own memory.\n\nA reset with nothing to reset is not an error. Neither command clears the key when there is nothing to push in its place: dropping the marker on its own would make every worker on that key crash as \"never published\".\n\n## How it works\n\n- **Push** uses `RPUSH` to append all file paths to a Redis list in a single command, then sets `EXPIRE` on the key (default: 1 week). It also sets a `<key>:published` marker with the same TTL so workers can tell a drained queue from one that was never published.\n- **Steal** uses `LPOP key count` (Redis 6.2+), which atomically pops up to N elements. No Lua scripts, no locks, no race conditions.\n- **Record** (when `--key-rerun` is set): after each steal, the batch is also `RPUSH`ed to the per-runner rerun key with the same TTL.\n- **Replay** (when `--key-rerun` has data and the shared queue is drained): reads all files from the rerun key via `LRANGE` (non-destructive), splits into batches, and runs them locally.\n- **Full rerun** (when both the shared queue and the rerun key have data): the stale rerun key is removed with `DEL`, then the runner steals from the shared queue and re-records as in a classic run.\n- **Reset** (`push --reset` or `specbandit reset`) removes the queue and its `<key>:published` marker in a single `DEL`, so a producer that runs twice cannot enqueue the work list twice. Rerun and failed keys are untouched.\n- **Run** spawns the configured command via `child_process.spawnSync()` with file paths as arguments. No shell expansion overhead.\n- **Exit code** is 0 if every batch passed (or the queue was already empty), 1 if any batch had failures.\n\n## Development\n\n```bash\nnpm install\nnpm test              # unit tests (no Redis needed)\nnpm run build         # compile TypeScript\nnpm run typecheck     # type-check without emitting\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}