{"_id":"@adlc/hollow-test","_rev":"17-10991d8b7fd4f987a52fe049cfede769","name":"@adlc/hollow-test","dist-tags":{"latest":"1.11.1"},"versions":{"1.0.0":{"name":"@adlc/hollow-test","version":"1.0.0","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.0.0","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"d3a7fe9fe288757d59108cc855a3371fb35b45fe","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.0.0.tgz","fileCount":7,"integrity":"sha512-PGTotOPcyAk3Q/2lJ45L6ir2G1NZLOEdikgYU4XROqbWx0M2FQ9lUdwj96Gkne1v05HCQdUrSevrIwBd7FHRpQ==","signatures":[{"sig":"MEQCIB/xgn/6VRlN9MRy+5Zwzk+t/OAsPpTrvihHtYL64n4zAiA26M9D8hFTx2za4QeZBEN8LwDUlJxfWODSEol21DB0hA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21325},"type":"module","engines":{"node":">=18"},"gitHead":"18f4c2890048cd9d5913b6b3aeeff6c37ae372b9","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"voodootikigod","email":"voodootikigod@gmail.com"},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"10.8.2","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.0.0_1781385144903_0.7931409744495614","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@adlc/hollow-test","version":"1.0.2","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.0.2","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"4e503481e36e2b45c144824e7bcc282634ac926e","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.0.2.tgz","fileCount":7,"integrity":"sha512-tpu96jGbOLQtw6qTRWfa2a+6GNQqmlv6fm/NOdEa/SMfyogAHk8NCgxH1bE+GOYacjYdXj6NaUEBpJlpZCFxfg==","signatures":[{"sig":"MEUCIQDTRimqYfi/q1fGRsg9v4+KTxXhgNEV37kwe/q29r8ZtAIgNMg2FtEq1tQTznQvpE6oNmyRdfl9UJ3E5jrpAb2cDqA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21325},"type":"module","engines":{"node":">=18"},"gitHead":"9412678eb342b02cd86c1279d908f1fd56ca7bc4","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.17.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.0.2"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.0.2_1781461016550_0.3246292779468054","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@adlc/hollow-test","version":"1.1.0","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.1.0","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"58687603ddf30b310edca7f6dac3b60066c27f86","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.1.0.tgz","fileCount":7,"integrity":"sha512-O7Ojx2Sc8uPmOdOv4BpftNg42umhmmLUHapE6i05eole6k9xLBGt0OeM9clFOUkValsPpEk1bUoevsfoj7knhA==","signatures":[{"sig":"MEUCIBHct4fa1sreJt9SwL5Rnlq/uN1bw2biaJ6B85UofIqSAiEA2i6FWE4o7K5hi9BGDLChYbxHy8RRGTEGZNxF3rE5WqM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21325},"type":"module","engines":{"node":">=18"},"gitHead":"30e96544356c997ca986a1f9d5f4422724ad94a5","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.17.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.1.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.1.0_1782216864968_0.2003375324582206","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@adlc/hollow-test","version":"1.2.0","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.2.0","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"e5503e8454b8725a19bf4b6906c91600f05ae383","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.2.0.tgz","fileCount":7,"integrity":"sha512-8RHFeaGoJGQjQTE0ILDsWx0j1u+yiBcUVOD21cgD3YqSm66NxulvnMRO5k9MUqDjiZmDQn48wllU2ShxNHTv0g==","signatures":[{"sig":"MEUCIB0gRH28Vh1a6YU8NsxoEqbF7LCzjcaLhhrzsNwJ1ccHAiEAqCGEZmgKaeoj5T9SzOt8DbOhTUbVyhZY+agJemZt1uM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38168},"type":"module","engines":{"node":">=18"},"gitHead":"e1a9315750d794959884e3ed0b1cc29398d25f0e","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.18.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.2.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.2.0_1783726084925_0.9571953521353238","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@adlc/hollow-test","version":"1.2.1","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.2.1","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"d303d935f2986230cf50eaae4236c34f8a2551af","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.2.1.tgz","fileCount":7,"integrity":"sha512-bVYe5G0Te40qnxAkmLsgudhZ0GbkVtaFaqlEh7H3IZz4oCX5VdgMEJ1OTnauh/uAA/WHKJG6zoP+YKILMMoVmQ==","signatures":[{"sig":"MEYCIQCGSIG0ubJeGKQ55Ni2d6cAx/WtSJhd9rQjeTqfTHStkQIhALZeQH89S0RvgvmDmeXGFL+6jivJcLX/epT1XW9B/v0e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38168},"type":"module","engines":{"node":">=18"},"gitHead":"7ce933041948a1f8076966b4c05ebcb3f08d9781","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.18.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.2.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.2.1_1783727126430_0.6776284153238146","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@adlc/hollow-test","version":"1.3.0","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.3.0","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"23f17a2ae1c40c8b2e044c229c2646c0c2c7fccf","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.3.0.tgz","fileCount":7,"integrity":"sha512-1z+JdxSy0b6DImMbwO1Iso8wb8jvhZf5K2GQCTIkJtBxW0Kxg7lA8hk5EukpCdOZ/tsUmyGCVcnQZGEXVZNyIA==","signatures":[{"sig":"MEUCIQDStBwUU78xDNQpW60nbdU9VnohiK4I9bF8r54QMaxKagIgFbRiFAk9QAf5rZ6Z+wKfIatCFCnAJnwRaolmJ+pb5og=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38168},"type":"module","engines":{"node":">=18"},"gitHead":"de4b878aa375bcce92f1828afafd87ee6872d2b4","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.18.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.3.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.3.0_1783780344186_0.4649391402666232","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@adlc/hollow-test","version":"1.4.0","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.4.0","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"a55e7e557e011d85e84e28528c6b40048416aef1","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.4.0.tgz","fileCount":7,"integrity":"sha512-DtQHYjUQRMi5L3TKNTfCTVq4U0261XUxJlMB2ZO7cspf9gjNPR7eriG/zzS4VfYf1JBxQdp9wrcZGYcvuzQJnA==","signatures":[{"sig":"MEQCIHoz94D9dXm//KZUawWm9c4zE9SA17psD2aEo83uLXBcAiAs6JWJXvHmoPufnI704hwCOw0q0qa9rDS/qWEAl919sQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38168},"type":"module","engines":{"node":">=18"},"gitHead":"2be4ff6ef2397811d288ae1de14c21e5b901e76d","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.18.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.4.0_1784074825900_0.421548913972031","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@adlc/hollow-test","version":"1.4.1","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.4.1","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"c9ca94445ae8dc455e560426aedf03b05077295d","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.4.1.tgz","fileCount":7,"integrity":"sha512-OMuk2TcfbNb7hxMKuNh46KK2YCdmjJR3POXtVZEcH4SaWSRrnynw2EqSTwl8oa2YPBXHgm5v+1DDkEKUbVN/BQ==","signatures":[{"sig":"MEUCIQCx2dxSOz/lkRWBFNa166SEsc27iTZUaxuyKwW1rI8lDAIgFjcQoV+Iz63ydM5joC47P0FkPT6HNtd9gCp2d12/yuI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38168},"type":"module","engines":{"node":">=18"},"gitHead":"d1765e679c224131056836f13f5a9c296b5316f8","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.18.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.4.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.4.1_1784076662253_0.29541811187825284","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@adlc/hollow-test","version":"1.5.0","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.5.0","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"e5a78e72dde386adf6d7be517ca27bec774a1c74","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.5.0.tgz","fileCount":7,"integrity":"sha512-XuMTw2V9Q8BOn50iootfTh2KEXRbz3eMfqLfd/S8z/6avHgyf6+JSfGwvErz07xLoRaxV4aCnoy9UqXsEv7KiA==","signatures":[{"sig":"MEUCIQDAfRWfmYt00Hp3dGU2eOiPaZ6c6Fqe7pSdv6uISjj0iQIgdsuOuM+A+W35Mxg+ygTH4prYyf+lsLTtEHGMQV4Vwzw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38168},"type":"module","engines":{"node":">=18"},"gitHead":"c2763540068dd7deb26b089209de3bd03e2437c5","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.18.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.5.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.5.0_1784556931486_0.2578127964461536","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@adlc/hollow-test","version":"1.5.1","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.5.1","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"1b5efedd6d518434adfedc71d4bfa39bdd97c5e2","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.5.1.tgz","fileCount":7,"integrity":"sha512-uHno8eokgD/ZshAeaiey5/XppsxutjvuVBsd9gvCm/tsztDPAHBHSPmyMJaPy463J3W6c91rP7wA9zPkxzT6AQ==","signatures":[{"sig":"MEUCIHARBPYGP9OCD9CuyGAg4PhOXhCW6TjhQbNDaJuwBD4WAiEAmfLA/2hDVF4phDgHqbXx5IahAZbfEu6JWeov5GyCuQY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38168},"type":"module","engines":{"node":">=18"},"gitHead":"ba648f21aeafb9a253a243c0e268044da3513217","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.18.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.5.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.5.1_1784631826831_0.40930084654238885","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@adlc/hollow-test","version":"1.6.0","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.6.0","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"1df3c849a9553a930f2cbe81d89acbe531fabae7","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.6.0.tgz","fileCount":7,"integrity":"sha512-S7EmpCoBQZYB7rf2tU2jkWkOAXqgF5Ibssptf6mWpmWObFAwLlyBhcXfXKbjap+BeFIfM4mmPtP4q+rdm9u1DQ==","signatures":[{"sig":"MEUCIDDlBMaiG+G4dY1gTW+kpM/8ZNbYCp48b2VF8qe2O97XAiEArDxGOGqUbahlgXEdiP0/mFtzRON1+mt3nr6MpxB0PNI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38168},"type":"module","engines":{"node":">=18"},"gitHead":"390a608f51165db92da1ccf68a965770db0b0376","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.18.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.6.0_1784720519466_0.5362856641617713","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@adlc/hollow-test","version":"1.7.0","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.7.0","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"c6a7b76e3f4c57bf63ce0ada9f81ca34bc306045","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.7.0.tgz","fileCount":7,"integrity":"sha512-zchIPT9d8c0Eit3wZ6OdqsofT9Og/P7G2lx/AoqZ+SX26y5wgWIhpJekVbM3mZFFqlRxFMGtEwrMcYds0BbsIg==","signatures":[{"sig":"MEQCIAz7xxFI4DX7EVPy0/3h/3gsVMyyKa7r6X4j/feMIpPkAiAYbc4/SB7aVVE4j+XEJSO415wi8jCXX5IO26BAhn8fJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63642},"type":"module","engines":{"node":">=18"},"gitHead":"d7eca2696e43aa6caf3de655840fae14aa0efd57","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.18.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.7.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.7.0_1785329241097_0.2531732309488399","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@adlc/hollow-test","version":"1.8.0","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.8.0","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"94e0fb93082fac4a94006c9dc36b2629c58b4ae0","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.8.0.tgz","fileCount":8,"integrity":"sha512-ghhyCrVsgQfyRdJZzHdQZOeZ7FXbEcE00BsKDFpAL6V1Lhl/SpEwmOin9C3bPRG/nBOeDHjujJvDotNoOFhSZg==","signatures":[{"sig":"MEQCIAgRkZNiVn2mXT4xY6z2nt2zHSAQoE4MInSDU14TCCPrAiAW5PHkrDwbCRYwLY79hnvLDpAMU1moHNXz6KQpmXWEdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":85364},"type":"module","engines":{"node":">=18"},"gitHead":"e6b6525502d3deb214f58cffeb6c9db4b9787e39","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.19.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.8.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.8.0_1786195779029_0.08215972068071609","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@adlc/hollow-test","version":"1.9.0","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.9.0","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"9040d05f8bed2e028783e4ab3409f17ab38ad830","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.9.0.tgz","fileCount":8,"integrity":"sha512-apASvSX7FcAwRwh7v+prEvNm0wbV522vKXP1uJKqOIUWuuvlKAVjDWGbxAktDR3YHP/5MnZ6AYW5tuUtfRUOjg==","signatures":[{"sig":"MEUCICOJ4/akO8A7wSoOXdSGs3ibWY0Z25uULpNhf0mFnggHAiEAjPNhYINtMYfeSKGEu/2ofAsw5VkWrGaulcUww+AE93g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":85364},"type":"module","engines":{"node":">=18"},"gitHead":"a928a7eeb3c2c5078b44c181702c3220ba1a7a5b","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.19.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.9.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.9.0_1786221113527_0.8386293537657257","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@adlc/hollow-test","version":"1.10.0","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.10.0","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"d62bbf3ac9956d839dfdffc56e27e15c2ac00abe","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.10.0.tgz","fileCount":8,"integrity":"sha512-9AURGv6VgTCOsjIspVkgQ3jttOStVsZbNzWjmWQm/m544sIYUzSki7SnwtgqjuP05rfeO9s0PcZmdoCHnp6DZQ==","signatures":[{"sig":"MEUCIHVeYYFU+gvuq19uk+FuVz5DnSm71g+SbRZL65ruiKHLAiEA8Yap3puPSw+oUJkXdBeiZZ+WwUtJTt1LEAlfhFuEIx8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":85366},"type":"module","engines":{"node":">=18"},"gitHead":"905d493f596a62b4bc3236f97281a43982c1e300","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.19.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.10.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.10.0_1786385916048_0.5969104965276857","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@adlc/hollow-test","version":"1.11.0","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"author":{"url":"@voodootikigod","name":"Chris Williams"},"license":"MIT","_id":"@adlc/hollow-test@1.11.0","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"bin":{"hollow-test":"bin/hollow-test.mjs"},"dist":{"shasum":"8a94d489c2be5e08534a85eae4a7419591e6201b","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.11.0.tgz","fileCount":8,"integrity":"sha512-0LnKbJl33SbI0vIc/ZDbB3oWLQxgT7qR4rPkE5F4iOmgD4y3YnQD4GLM1Iauoyx4M7z/Wu3yMEAlW1OBwMSiZQ==","signatures":[{"sig":"MEUCICmEASVAOQW5VWtiJxJJGBmN/21osW+A6g+MHp44+DwvAiEAvLfpgkH7WMNoqxsd+LzbppRDNk7hnRWBF68cPPV5rnk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":86634},"type":"module","engines":{"node":">=18"},"gitHead":"1e4e6f704912c912d9b3c87f57e077a48ca78c5d","scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"repository":{"url":"git+https://github.com/voodootikigod/adlc.git","type":"git","directory":"packages/hollow-test"},"_npmVersion":"11.19.0","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@adlc/core":"1.11.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hollow-test_1.11.0_1787594160686_0.26580176722655824","host":"s3://npm-registry-packages-npm-production"}},"1.11.1":{"name":"@adlc/hollow-test","version":"1.11.1","description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","type":"module","license":"MIT","author":{"name":"Chris Williams","url":"@voodootikigod"},"repository":{"type":"git","url":"git+https://github.com/voodootikigod/adlc.git","directory":"packages/hollow-test"},"homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"bin":{"hollow-test":"bin/hollow-test.mjs"},"dependencies":{"@adlc/core":"1.11.1"},"scripts":{"test":"node --test test/*.test.mjs"},"engines":{"node":">=18"},"publishConfig":{"access":"public","provenance":true},"gitHead":"c5772b4ff942bec77a34454c4fc888ae4e4b2c14","_id":"@adlc/hollow-test@1.11.1","_nodeVersion":"20.20.2","_npmVersion":"11.19.1","dist":{"integrity":"sha512-ahjSuih730RFMhxTFqWxl0wXS7FbACEwt2VzjTXNvO2K8y3j7L+r5fkYjufWblAGQkYcvCFIXAIIq3tGrzO8rA==","shasum":"5bc2bf2b9ab5ce49c5ba40d6a5bace984178231e","tarball":"https://registry.npmjs.org/@adlc/hollow-test/-/hollow-test-1.11.1.tgz","fileCount":8,"unpackedSize":90993,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adlc%2fhollow-test@1.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCID8fbhXMTbnd6qf93/cLWU7pSQmg85F04unwPwsk4SnuAiBwHjHEhryR22nJ+pwcOaaGgcLqPZ4DccLF1pJvErZjYA=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:21e06c85-74f9-46e5-b208-a7a50f1b2067"}},"directories":{},"maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hollow-test_1.11.1_1788949670836_0.24131577032952212"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-13T21:12:24.657Z","modified":"2026-09-09T10:27:51.253Z","1.0.0":"2026-06-13T21:12:25.045Z","1.0.2":"2026-06-14T18:16:56.702Z","1.1.0":"2026-06-23T12:14:25.103Z","1.2.0":"2026-07-10T23:28:05.071Z","1.2.1":"2026-07-10T23:45:26.557Z","1.3.0":"2026-07-11T14:32:24.389Z","1.4.0":"2026-07-15T00:20:26.056Z","1.4.1":"2026-07-15T00:51:02.390Z","1.5.0":"2026-07-20T14:15:31.645Z","1.5.1":"2026-07-21T11:03:46.978Z","1.6.0":"2026-07-22T11:41:59.595Z","1.7.0":"2026-07-29T12:47:21.256Z","1.8.0":"2026-08-08T13:29:39.169Z","1.9.0":"2026-08-08T20:31:53.659Z","1.10.0":"2026-08-10T18:18:36.205Z","1.11.0":"2026-08-24T17:56:00.831Z","1.11.1":"2026-09-09T10:27:50.964Z"},"bugs":{"url":"https://github.com/voodootikigod/adlc/issues"},"author":{"name":"Chris Williams","url":"@voodootikigod"},"license":"MIT","homepage":"https://github.com/voodootikigod/adlc/tree/main/packages/hollow-test#readme","keywords":["adlc","agentic","ai","llm","cli","hollow-test","gate"],"repository":{"type":"git","url":"git+https://github.com/voodootikigod/adlc.git","directory":"packages/hollow-test"},"description":"Diff-scoped mutation gate — the honest coverage check, mutating only changed lines (P3/C4).","maintainers":[{"name":"voodootikigod","email":"voodootikigod@gmail.com"}],"readme":"# hollow-test\n\n**ADLC phase: P3 gate (C4 — diff-scoped mutation)**\n\nDiff-scoped mutation gate — the honest coverage check. Mutates only the lines\nchanged in your diff, runs your test suite against each mutant, and fails if\nany mutation survives. A surviving mutant proves hollow coverage: lines are\nexecuted but their behavior is unconstrained by any assertion.\n\nDiff-scoping keeps the run at seconds-to-minutes rather than the hours that\nkill whole-codebase mutation testing.\n\n## Usage\n\n```\nhollow-test --test-cmd \"node --test test/\" [options]\n```\n\n### Flags\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--test-cmd <cmd>` | *(required)* | Shell command to run the test suite. Must exit non-zero on failure. |\n| `--base <ref>` | `HEAD` | Git base ref for the diff (e.g. `HEAD~1`, `main`, a SHA). |\n| `--max <n>` | `20` | Maximum total mutants across all files. Budget is spread round-robin. |\n| `--timeout-ms <n>` | `120000` | Per-mutant test-command timeout in milliseconds. |\n| `--target <file>` | *(none)* | Mutate this file directly, independent of the diff (repeatable). Bypasses the test/spec path exclusion and mutates the whole file, not just diff-changed lines. |\n| `--rails <ticket-file>` | *(none)* | Path to a ticket JSON file; its declared `rails` globs are expanded against `git ls-files` and added as mutation targets (repeatable). |\n| `--json` | *(off)* | Machine-readable JSON output (for orchestrators). |\n| `--help` | *(off)* | Show usage and exit 0. |\n\n### Exit codes\n\n| Code | Meaning |\n|------|---------|\n| `0` | Gate passes — all mutants were killed. |\n| `1` | Operational error — dirty working tree, not a git repo, bad arguments, **nothing to mutate** (the diff contains no eligible source files and neither `--target` nor `--rails` was given), or a **selected file received no mutation budget** (see below). |\n| `2` | Gate fails — one or more mutants survived (hollow coverage). |\n\n### `--max` too small for the diff: a starved file fails closed\n\n`--max` spreads the mutant budget round-robin across every selected file, and a small\n`--max` against a wide diff can leave one or more diff-derived files with **zero quota** —\nnever mutated at all. That file's changed code is then unverified, so `hollow-test` refuses\nto report a pass: it exits `1` and names every starved file on stderr rather than silently\npassing on whatever other files did get budget. Raise `--max` to cover every selected file\n(one per file changed, at minimum), or narrow the diff:\n\n```bash\n$ hollow-test --test-cmd \"node --test test/*.test.mjs\" --base HEAD~1 --max 1\nerror: 2 selected file(s) received no mutation budget and were NOT prosecuted: src/b.mjs, src/c.mjs — raise --max to cover them.\n```\n\nThis does not apply to a file that received budget but has no mutable line at all (a\ncomment-only or import-only change) — that case still only warns, since the file genuinely\nhas nothing to mutate rather than having been skipped for lack of budget.\n\n### `--target` / `--rails`: the P3 rails-authoring / characterization-test case\n\nA diff that adds **only test files** — exactly the shape of a P3 rails-authoring ticket, or\na characterization-test ticket that pins existing, unchanged (frozen-rail) behavior — has\nnothing in `filterTargetFiles()`'s diff scope to mutate. Rather than silently reporting a\nvacuous `0`/`0`/`0` pass (indistinguishable from a genuinely strong suite), `hollow-test`\nexits `1` in that case unless an explicit target is given:\n\n```bash\n# Diff is test-only (new rails for src/foo.mjs, which itself didn't change) — mutate\n# src/foo.mjs directly so the new rails are actually prosecuted:\nhollow-test --test-cmd \"node --test test/foo-rails.test.mjs\" --base main \\\n  --target src/foo.mjs\n\n# Same, but read the target from a ticket's declared \"rails\" (single-ticket object or a\n# full tickets.json — rails merged across all tickets in the file):\nhollow-test --test-cmd \"node --test test/foo-rails.test.mjs\" --base main \\\n  --rails .adlc/tickets.json\n```\n\n## Examples\n\n```bash\n# Check the last commit\nhollow-test --test-cmd \"node --test test/\" --base HEAD~1\n\n# Check staged changes vs main\nhollow-test --test-cmd \"npm test\" --base main --max 30\n\n# Machine-readable output for CI\nhollow-test --test-cmd \"node --test test/*.test.mjs\" --json\n```\n\n## Safety guarantees\n\n1. **Dirty-tree check**: refuses to run if `git status --porcelain` is non-empty.\n   This prevents accidentally leaving a corrupted file if the process is\n   interrupted. Commit or stash your changes first.\n\n2. **File restoration**: every mutated file is restored via a `try/finally`\n   block — even if the test command crashes or the process is interrupted via\n   SIGINT. The SIGINT handler performs an emergency restore before exiting.\n\n3. **Sequential execution**: mutants are applied and tested one at a time\n   (never in parallel) to avoid concurrent writes to the same file.\n\n## What is mutated (and what is skipped)\n\nMutation applies to plain JavaScript only: `.mjs`, `.cjs`, `.js`. This is an\n**allow-list**. TypeScript and JSX (`.ts`, `.mts`, `.cts`, `.tsx`, `.jsx`),\nPython, CSS and everything else are excluded, because the operators are\ntext-based and cannot tell a comparison from a type argument or a JSX\ndelimiter — `Promise<unknown>` becomes the invalid `Promise>=unknown>`, and a\nparse failure is currently scored as a *killed* mutant. See issue #293.\n\nA file is also skipped when a path **segment** is `test`, `tests`, `spec`,\n`specs`, or `__tests__`, or when its **basename** matches a `node --test`\ndiscovery convention: `test.js`, `test-*`, `test_*`, `*-test.*`, `*_test.*`,\n`*.test.*` (and the `spec` equivalents).\n\nMatching is segment- and basename-anchored on purpose: a substring test would\nexclude production paths such as `packages/hollow-test/lib/targets.mjs` or\n`lib/attest.mjs`.\n\nTwo escape hatches, because no convention resolves every case:\n\n- `--test-glob <glob>` — treat additional paths as tests.\n- `--source-glob <glob>` — treat paths as production source even when their name\n  matches a test convention. Needed for product names like `hollow-test.mjs` and\n  `spec-lint.mjs`, which are indistinguishable from tests by naming alone. For the same reason, **hyphenated** forms (`foo-test.js`,\n`spec-foo.js`) are *not* treated as tests — a hyphen is ambiguous between a test\nconvention and a product name, and `hollow-test.mjs` and `spec-lint.mjs` are\nproduction files. If you use that convention, keep tests in a `test/` directory\nor name them `*.test.*`. `--target`/`--rails` files bypass the **test-path** exclusion — the caller is\ndeliberately naming a mutation target, and rails are usually test files.\n\nThey do **not** bypass the language allow-list. Operators are JS/TS-shaped, and\na mutant that renders another language syntactically invalid makes the test\ncommand exit non-zero, which is scored as *killed* — a false pass. So:\n\n- `--target <path>` in an unsupported language is **refused** (exit 1). The\n  caller named one file; dropping it silently would be its own silent pass.\n- `--rails <ticket>` expansions legitimately match non-source (`schemas/**`,\n  JSON, fixtures). Those are filtered out and **reported**, and the run fails\n  only if nothing mutable remains.\n\nWithin diff-derived eligible files, only lines changed in the diff are\ntargeted; `--target`/`--rails` files are mutated in their entirety. Lines that\nare blank, comments, imports, `export {`, or `console.*` calls are skipped.\n\n### Invalid mutants\n\nA mutation that produces code Node cannot parse is **discarded**, not scored.\nLine-based operators produce these routinely — `null-return` rewrites a\nmultiline `return {` to `return null;` and strands the object literal's\nremaining lines.\n\nThis matters because a kill is inferred from a non-zero exit, and a file that\ndoes not parse also exits non-zero. Counting such a mutant as *killed* fakes\ncoverage; counting it as *survived* blames the tests for code that was never\nvalid. It is reported in its own `invalid` bucket in both the table and JSON.\n\nIf **every** mutant in a run is invalid, hollow-test exits **1** (operational\nfailure) rather than passing: no assertion was exercised, so the run proves\nnothing.\n\nValidation uses `node --check`, so no parser dependency is added and the real\nfile extension and package type are honoured. Both the syntax check and the test run are **tri-state** — `valid`, `invalid`, or `unknown`. \"Could not\ndetermine\" never collapses into \"valid\": if the checker is killed, times out, or\ncannot spawn, the run fails operationally rather than guessing. The same applies to the test command itself: a spawn failure (EAGAIN, ENOMEM) is not a timeout, and a timeout is the only non-completion that counts as a kill. A kill must mean the tests ran and failed. Assuming\nvalidity would run the test command against unparseable source, whose non-zero\nexit is then scored as a kill — the very path this closes.\n\nThe all-invalid guard is applied **per file**, not just globally. A global check\npasses the moment any other file yields a kill, which would let an explicitly\nnamed `--target` go entirely untested while the run reports success.\n\n### Mutation operators (from `@adlc/core`)\n\n| Operator | Example |\n|----------|---------|\n| `invert-comparison` | `===` → `!==`, `<=` → `>` |\n| `bool-flip` | `true` → `false` |\n| `null-return` | `return expr` → `return null` |\n| `off-by-one` | literal `n` → `n+1` |\n| `logic-swap` | `&&` → `\\|\\|` |\n\n**`off-by-one` does not mutate a tuning constant.** `+1` on a duration in\nmilliseconds or a size in bytes is an *equivalent mutant* — no test can observe\n`60000 -> 60001` ms on a subprocess timeout — so generating it would demand a test\nthat cannot exist (#359). The rule reads the constant's **name**, split into\nsegments, and `snake_case`/`camelCase` spell the same thing:\n\n| Name | Mutated? | Why |\n|------|----------|-----|\n| `GIT_TIMEOUT_MS`, `maxBufferBytes`, `TTL_MS` | no | trailing sub-second/byte **unit** — an unobservable magnitude |\n| `timeout`, `ttl`, `maxBuffer`, `highWaterMark` | no | a known tuning **phrase** |\n| `MAX_RETRIES`, `retryLimit`, `chunkSize`, `timeoutRetries` | **yes** | trailing **count** word — a countable boundary, whatever else the name says |\n| `RETENTION_DAYS`, `GRACE_HOURS` | **yes** | a coarse time unit *is* observable under an injected clock |\n| `{ ttl: 0 }`, `{ timeout: -1 }` | **yes** | `0`/negative are discrete sentinels, not magnitudes |\n\nA trailing count word always wins over a tuning phrase earlier in the name, so\nwidening the phrase list can never silently delete prosecution of a count. Naming\nthe unit is what earns the mask — `MAX_BUFFER_SIZE_BYTES` is masked where\n`MAX_BUFFER_SIZE` is not (#372).\n| `negate-guard-subclause` | `Array.isArray(x)` ↔ `!Array.isArray(x)`; `if (value)` → `if (!value)`; loose `v == null` ↔ `v != null` |\n| `array-literal-shrink` | `['id', 'title', 'scope']` → `['id', 'title']` |\n| `ternary-swap` | `cond ? a : b` → `cond ? b : a` |\n\n## JSON output schema\n\n```json\n{\n  \"tool\": \"hollow-test\",\n  \"summary\": {\n    \"total\": 5,\n    \"killed\": 4,\n    \"survived\": 1\n  },\n  \"mutants\": [\n    {\n      \"file\": \"src/calc.mjs\",\n      \"line\": 7,\n      \"operator\": \"null-return\",\n      \"status\": \"survived\",\n      \"timedOut\": false,\n      \"original\": \"  return a + b;\",\n      \"mutated\": \"  return null;\"\n    }\n  ]\n}\n```\n\n## Relationship to sibling tools\n\n- **rails-guard (C5)**: enforces that test files are not modified during build\n  (they are the measuring instrument). hollow-test verifies that those tests\n  actually constrain behavior.\n- **review-calibration (C8)**: uses the same `mutate` operators to plant bugs\n  and measure reviewer recall. hollow-test and review-calibration share core\n  mutation machinery.\n- **flail-detector (C6)**: hollow-test is a P3 gate; flail-detector watches\n  the P4 build session. They serve complementary phases.\n\n## Core gaps\n\nNone. All required functionality (`gitDiff`, `isDirty`, `isGitRepo`, `git`,\n`globMatch`, `mutate.generateMutants`, `mutate.applyMutant`,\n`mutate.changedLinesFromDiff`, `parseArgs`, `pass`, `gateFail`, `opError`,\n`printJson`) is available in `@adlc/core`.\n\n## Implementation notes\n\n### NODE_TEST_CONTEXT stripping\n\nNode.js v22 sets `NODE_TEST_CONTEXT` in child process environments when\nrunning under `node --test`. If a child process inherits this variable and\nitself calls `node --test`, it silently skips all test files (exits 0).\nhollow-test strips `NODE_TEST_CONTEXT` from the child environment before\nrunning each mutant's test command. This ensures mutation trials work\ncorrectly even when hollow-test is itself running inside a test harness.\n","readmeFilename":"README.md"}