{"_id":"@alistigo/features","_rev":"9-30835e1708c738b64f06dc23c2e614e3","name":"@alistigo/features","dist-tags":{"latest":"0.2.10"},"versions":{"0.2.2":{"name":"@alistigo/features","version":"0.2.2","_id":"@alistigo/features@0.2.2","maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"dist":{"shasum":"3769c637a4abeb97f8b8b140ef733f533b16101b","tarball":"https://registry.npmjs.org/@alistigo/features/-/features-0.2.2.tgz","fileCount":16,"integrity":"sha512-XZ4uDgLg3X25RxMt6q/aCmiUm1vXssK+5Cjp+fSxXrCeQY8cZi/Wyq132lUiVuRx1EDFJtDHYqVrrofJRz6AAw==","signatures":[{"sig":"MEYCIQCGKVnDPqwoNS+eZ3a0mkW27eIA5Q9UphgH+5pNH+wIrAIhALpI05V7Bl9I99L6XchzPBLnYeMTTDA/QFe6Bs9TSdvw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19685},"main":"./dist/index.js","type":"module","_from":"file:alistigo-features-0.2.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tags":{"types":"./dist/tags.d.ts","import":"./dist/tags.js"}},"private":false,"_npmUser":{"name":"mikael.labrut","email":"npm@alistigo.com"},"_resolved":"/tmp/dc0fdfdaa06150647b3f5c175c3093d1/alistigo-features-0.2.2.tgz","_integrity":"sha512-XZ4uDgLg3X25RxMt6q/aCmiUm1vXssK+5Cjp+fSxXrCeQY8cZi/Wyq132lUiVuRx1EDFJtDHYqVrrofJRz6AAw==","_npmVersion":"11.12.1","description":"Gherkin behavior specifications for Alistigo AI. Source of truth for what the app should do; the runner reads these files to assert conformance.","directories":{},"_nodeVersion":"24.15.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gherklin":"^1.0.0","prettier":"^3.3.0","prettier-plugin-gherkin":"^3.1.2"},"_npmOperationalInternal":{"tmp":"tmp/features_0.2.2_1781170382814_0.4978072793454258","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@alistigo/features","version":"0.2.3","keywords":["alistigo","gherkin","bdd","behavior","specifications"],"author":{"name":"Mikael Labrut","email":"contact@alistigo.com"},"license":"MIT","_id":"@alistigo/features@0.2.3","maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"homepage":"https://github.com/alistigo/holos/tree/main/packages/alistigo-features#readme","bugs":{"url":"https://github.com/alistigo/holos/issues"},"dist":{"shasum":"eae9dfca980bd5f56ba682369c025a7ac41c1b46","tarball":"https://registry.npmjs.org/@alistigo/features/-/features-0.2.3.tgz","fileCount":17,"integrity":"sha512-RsP3AQGy0FOo9lWm8csplJZ8RIhS3umgLiMtwt7CuOxVkOazhj4snK647fJ31PiPRJAV1LfjALCl98Rv0eGMig==","signatures":[{"sig":"MEUCIQD72EXgMczmXMrbZAnUPNbrIiZ1w3/Su3+R44SXoFkP1AIgbZL23afJjUGU4Pdo+lANXee0ZWwzuFdYqrxef7/AghI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22279},"main":"./dist/index.js","type":"module","_from":"file:alistigo-features-0.2.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tags":{"types":"./dist/tags.d.ts","import":"./dist/tags.js"}},"private":false,"_npmUser":{"name":"mikael.labrut","email":"npm@alistigo.com"},"_resolved":"/tmp/c5f882e419e7958930151fb6b0df85ee/alistigo-features-0.2.3.tgz","_integrity":"sha512-RsP3AQGy0FOo9lWm8csplJZ8RIhS3umgLiMtwt7CuOxVkOazhj4snK647fJ31PiPRJAV1LfjALCl98Rv0eGMig==","repository":{"url":"git+https://github.com/alistigo/holos.git","type":"git","directory":"packages/alistigo-features"},"_npmVersion":"11.16.0","description":"Gherkin behavior specifications for Alistigo AI. Source of truth for what the app should do; the runner reads these files to assert conformance.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gherklin":"^1.0.0","prettier":"^3.3.0","prettier-plugin-gherkin":"^3.1.2"},"_npmOperationalInternal":{"tmp":"tmp/features_0.2.3_1782659798625_0.7721351884860155","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@alistigo/features","version":"0.2.4","keywords":["alistigo","gherkin","bdd","behavior","specifications"],"author":{"name":"Mikael Labrut","email":"contact@alistigo.com"},"license":"MIT","_id":"@alistigo/features@0.2.4","maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"homepage":"https://github.com/alistigo/holos/tree/main/packages/alistigo-features#readme","bugs":{"url":"https://github.com/alistigo/holos/issues"},"dist":{"shasum":"d8f552e94a38b452c16dcb19c488af390d3af3ad","tarball":"https://registry.npmjs.org/@alistigo/features/-/features-0.2.4.tgz","fileCount":17,"integrity":"sha512-IWMejOR6kUY8FID8zGcIK+BKRm1mPIAQQriFy99wcxnjPaTesgtnDeT5xn7Z3HjPxeXaGm1+MC0avL/CuQ9wvw==","signatures":[{"sig":"MEQCIGEHPPEQT6opTbpN4hBmctVfPnXF06ICszY+psBh3mtuAiBfh6iPfiFkSB01mUjRiOEZo5zQLoJO7BlW4FThtkLerg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22284},"main":"./dist/index.js","type":"module","_from":"file:alistigo-features-0.2.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tags":{"types":"./dist/tags.d.ts","import":"./dist/tags.js"}},"private":false,"_npmUser":{"name":"mikael.labrut","email":"npm@alistigo.com"},"_resolved":"/tmp/8f70d680cd92b747b0f60860faa4f1ad/alistigo-features-0.2.4.tgz","_integrity":"sha512-IWMejOR6kUY8FID8zGcIK+BKRm1mPIAQQriFy99wcxnjPaTesgtnDeT5xn7Z3HjPxeXaGm1+MC0avL/CuQ9wvw==","repository":{"url":"git+https://github.com/alistigo/holos.git","type":"git","directory":"packages/alistigo-features"},"_npmVersion":"11.16.0","description":"Gherkin behavior specifications for Alistigo AI. Source of truth for what the app should do; the runner reads these files to assert conformance.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gherklin":"^1.0.0","prettier":"^3.3.0","prettier-plugin-gherkin":"^3.1.2"},"_npmOperationalInternal":{"tmp":"tmp/features_0.2.4_1783001706520_0.3037103702420205","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@alistigo/features","version":"0.2.5","keywords":["alistigo","gherkin","bdd","behavior","specifications"],"author":{"name":"Mikael Labrut","email":"contact@alistigo.com"},"license":"MIT","_id":"@alistigo/features@0.2.5","maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"homepage":"https://github.com/alistigo/holos/tree/main/packages/alistigo-features#readme","bugs":{"url":"https://github.com/alistigo/holos/issues"},"dist":{"shasum":"5a0506c25b062705b32a73344211f6d4b21a7520","tarball":"https://registry.npmjs.org/@alistigo/features/-/features-0.2.5.tgz","fileCount":17,"integrity":"sha512-6ZYQYRvbohgXUoHJxajNIXVHF8HHqUnIRonA2ol+PVPGjW4QUs1U4WddnBGkV1WgTsBe4r3ki3UFh+ilaSEJhw==","signatures":[{"sig":"MEUCIQCKJybfzDLlZKXNeMEMhXfHg6AaofQR71RD1xxhVy+7twIgNMtg8wK2WIAaA5N9jMaJyzJ8MWxkG+2SRX8I+gZdGPM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22284},"main":"./dist/index.js","type":"module","_from":"file:alistigo-features-0.2.5.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tags":{"types":"./dist/tags.d.ts","import":"./dist/tags.js"}},"private":false,"_npmUser":{"name":"mikael.labrut","email":"npm@alistigo.com"},"_resolved":"/tmp/5a82ac09f808b08f6caaf47f855cc644/alistigo-features-0.2.5.tgz","_integrity":"sha512-6ZYQYRvbohgXUoHJxajNIXVHF8HHqUnIRonA2ol+PVPGjW4QUs1U4WddnBGkV1WgTsBe4r3ki3UFh+ilaSEJhw==","repository":{"url":"git+https://github.com/alistigo/holos.git","type":"git","directory":"packages/alistigo-features"},"_npmVersion":"11.16.0","description":"Gherkin behavior specifications for Alistigo AI. Source of truth for what the app should do; the runner reads these files to assert conformance.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gherklin":"^1.0.0","prettier":"^3.3.0","prettier-plugin-gherkin":"^3.1.2"},"_npmOperationalInternal":{"tmp":"tmp/features_0.2.5_1783006589550_0.3354019086494431","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@alistigo/features","version":"0.2.6","keywords":["alistigo","gherkin","bdd","behavior","specifications"],"author":{"name":"Mikael Labrut","email":"contact@alistigo.com"},"license":"MIT","_id":"@alistigo/features@0.2.6","maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"homepage":"https://github.com/alistigo/holos/tree/main/packages/alistigo-features#readme","bugs":{"url":"https://github.com/alistigo/holos/issues"},"dist":{"shasum":"35be7f6f408043c4ecf8d909c7d9f1e584044cec","tarball":"https://registry.npmjs.org/@alistigo/features/-/features-0.2.6.tgz","fileCount":20,"integrity":"sha512-oH6bDYiECXh9Tl75anH5v4ovV0RxOvlatB79ptIQQkrIyC/brbGy81WX1y+YfGQAsUg9UVQyZ44v6Z8iqzFZaQ==","signatures":[{"sig":"MEYCIQDa8+2dIZDzAOWEBD8Nv4Ma69IHDebiODdJlp4Y12+SkAIhAIlhrPsUanebt0VAg/wh1PB/uzNOL47fsZA6+LawLpkh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28501},"main":"./dist/index.js","type":"module","_from":"file:alistigo-features-0.2.6.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tags":{"types":"./dist/tags.d.ts","import":"./dist/tags.js"}},"private":false,"_npmUser":{"name":"mikael.labrut","email":"npm@alistigo.com"},"_resolved":"/tmp/1097d25171b3c175fd71860a2780ea3d/alistigo-features-0.2.6.tgz","_integrity":"sha512-oH6bDYiECXh9Tl75anH5v4ovV0RxOvlatB79ptIQQkrIyC/brbGy81WX1y+YfGQAsUg9UVQyZ44v6Z8iqzFZaQ==","repository":{"url":"git+https://github.com/alistigo/holos.git","type":"git","directory":"packages/alistigo-features"},"_npmVersion":"11.16.0","description":"Gherkin behavior specifications for Alistigo AI. Source of truth for what the app should do; the runner reads these files to assert conformance.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gherklin":"^1.0.0","prettier":"^3.3.0","prettier-plugin-gherkin":"^3.1.2"},"_npmOperationalInternal":{"tmp":"tmp/features_0.2.6_1784472604555_0.07405224732211702","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@alistigo/features","version":"0.2.7","keywords":["alistigo","gherkin","bdd","behavior","specifications"],"author":{"name":"Mikael Labrut","email":"contact@alistigo.com"},"license":"MIT","_id":"@alistigo/features@0.2.7","maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"homepage":"https://github.com/alistigo/holos/tree/main/packages/alistigo-features#readme","bugs":{"url":"https://github.com/alistigo/holos/issues"},"dist":{"shasum":"ea83aa2b967d5b2597e7713e52b0bf8b31d6ecff","tarball":"https://registry.npmjs.org/@alistigo/features/-/features-0.2.7.tgz","fileCount":20,"integrity":"sha512-6nZqybYogU8oQUWplJrPX6cWz81DvBIPjR3p/pn2ZkPXK0FkBCRWe12nw/gYaTiKmTXtC+Bd07d334/Kw3BAXQ==","signatures":[{"sig":"MEQCIQDmw8KPo3Sny/KunaQ5y921Cm6wEe4avcrLeKOFrd/h7QIfeDvBjBr3FbWPV+ONtSIN6dXUAx29AuQhIQG94ojDSQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28501},"main":"./dist/index.js","type":"module","_from":"file:alistigo-features-0.2.7.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tags":{"types":"./dist/tags.d.ts","import":"./dist/tags.js"}},"private":false,"_npmUser":{"name":"mikael.labrut","email":"npm@alistigo.com"},"_resolved":"/tmp/4777b07cfad66e30c87ea34a3a5dd650/alistigo-features-0.2.7.tgz","_integrity":"sha512-6nZqybYogU8oQUWplJrPX6cWz81DvBIPjR3p/pn2ZkPXK0FkBCRWe12nw/gYaTiKmTXtC+Bd07d334/Kw3BAXQ==","repository":{"url":"git+https://github.com/alistigo/holos.git","type":"git","directory":"packages/alistigo-features"},"_npmVersion":"11.16.0","description":"Gherkin behavior specifications for Alistigo AI. Source of truth for what the app should do; the runner reads these files to assert conformance.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gherklin":"^1.0.0","prettier":"^3.3.0","prettier-plugin-gherkin":"^3.1.2"},"_npmOperationalInternal":{"tmp":"tmp/features_0.2.7_1784806912765_0.16446183980301599","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@alistigo/features","version":"0.2.8","keywords":["alistigo","gherkin","bdd","behavior","specifications"],"author":{"name":"Mikael Labrut","email":"contact@alistigo.com"},"license":"MIT","_id":"@alistigo/features@0.2.8","maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"homepage":"https://github.com/alistigo/holos/tree/main/packages/alistigo-features#readme","bugs":{"url":"https://github.com/alistigo/holos/issues"},"dist":{"shasum":"fd1ebac7763cdd8c562454190daedb5b4ec2f687","tarball":"https://registry.npmjs.org/@alistigo/features/-/features-0.2.8.tgz","fileCount":20,"integrity":"sha512-A1JqW7nWzXIiMMbMjpXqnia3I1B1T2E0vsUZ06gBt0PkjjkdZiBUp4tbqKnHj/XTumobF5G4aBm7n59IRTzzVA==","signatures":[{"sig":"MEQCIArIHfMpT1TFOKNNZxQUhckNAnpe8Z82QDbwcG75Tc+NAiAUDL3031oL+cksbKC5hqpf/F9kGb2XbcB7W0CUTL1A6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28501},"main":"./dist/index.js","type":"module","_from":"file:alistigo-features-0.2.8.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tags":{"types":"./dist/tags.d.ts","import":"./dist/tags.js"}},"private":false,"_npmUser":{"name":"mikael.labrut","email":"npm@alistigo.com"},"_resolved":"/tmp/10d1b902ef0191db7d60bdd306940977/alistigo-features-0.2.8.tgz","_integrity":"sha512-A1JqW7nWzXIiMMbMjpXqnia3I1B1T2E0vsUZ06gBt0PkjjkdZiBUp4tbqKnHj/XTumobF5G4aBm7n59IRTzzVA==","repository":{"url":"git+https://github.com/alistigo/holos.git","type":"git","directory":"packages/alistigo-features"},"_npmVersion":"11.16.0","description":"Gherkin behavior specifications for Alistigo AI. Source of truth for what the app should do; the runner reads these files to assert conformance.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gherklin":"^1.0.0","prettier":"^3.3.0","prettier-plugin-gherkin":"^3.1.2"},"_npmOperationalInternal":{"tmp":"tmp/features_0.2.8_1784878817692_0.8402070757622997","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@alistigo/features","version":"0.2.9","keywords":["alistigo","gherkin","bdd","behavior","specifications"],"author":{"name":"Mikael Labrut","email":"contact@alistigo.com"},"license":"MIT","_id":"@alistigo/features@0.2.9","maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"homepage":"https://github.com/alistigo/holos/tree/main/packages/alistigo-features#readme","bugs":{"url":"https://github.com/alistigo/holos/issues"},"dist":{"shasum":"a9f82ac9b22863dab7b0b137b0b4cc8023b4a9d9","tarball":"https://registry.npmjs.org/@alistigo/features/-/features-0.2.9.tgz","fileCount":20,"integrity":"sha512-5R4gWHj1mpJg+mOSwrSNUM4n29xdzMjvkpDRQaqCCNAJingmrFI8tJp839KB8CzYM0Ug9EY7qBg5dS1l+S2IBg==","signatures":[{"sig":"MEUCIBo5FE2zMkphURYSVtczC1H82nlFQ23uiY8f8mYVUL/XAiEA5hKVev4NTNWvhKnTLDCftgMjNeFXCEeMmhsN9wl8f9I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28501},"main":"./dist/index.js","type":"module","_from":"file:alistigo-features-0.2.9.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tags":{"types":"./dist/tags.d.ts","import":"./dist/tags.js"}},"private":false,"_npmUser":{"name":"mikael.labrut","email":"npm@alistigo.com"},"_resolved":"/tmp/d2a5b441bf198e482eab7e790d8c7d6c/alistigo-features-0.2.9.tgz","_integrity":"sha512-5R4gWHj1mpJg+mOSwrSNUM4n29xdzMjvkpDRQaqCCNAJingmrFI8tJp839KB8CzYM0Ug9EY7qBg5dS1l+S2IBg==","repository":{"url":"git+https://github.com/alistigo/holos.git","type":"git","directory":"packages/alistigo-features"},"_npmVersion":"11.16.0","description":"Gherkin behavior specifications for Alistigo AI. Source of truth for what the app should do; the runner reads these files to assert conformance.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gherklin":"^1.0.0","prettier":"^3.3.0","prettier-plugin-gherkin":"^3.1.2"},"_npmOperationalInternal":{"tmp":"tmp/features_0.2.9_1784892960186_0.5516952395185779","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"@alistigo/features","version":"0.2.10","license":"MIT","author":{"name":"Mikael Labrut","email":"contact@alistigo.com"},"repository":{"type":"git","url":"git+https://github.com/alistigo/holos.git","directory":"packages/alistigo-features"},"bugs":{"url":"https://github.com/alistigo/holos/issues"},"homepage":"https://github.com/alistigo/holos/tree/main/packages/alistigo-features#readme","keywords":["alistigo","gherkin","bdd","behavior","specifications"],"private":false,"type":"module","description":"Gherkin behavior specifications for Alistigo AI. Source of truth for what the app should do; the runner reads these files to assert conformance.","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"},"./tags":{"import":"./dist/tags.js","types":"./dist/tags.d.ts"}},"main":"./dist/index.js","types":"./dist/index.d.ts","publishConfig":{"access":"public"},"dependencies":{},"devDependencies":{"gherklin":"^1.0.0","prettier":"^3.3.0","prettier-plugin-gherkin":"^3.1.2"},"_id":"@alistigo/features@0.2.10","_integrity":"sha512-TwF6iiCNOQs+2TA2QdEREIdpc2fv3+OXA883QKTw8rURl0e5E/jZIfEPMb3thc5s1BVFEHc1sFy5upGDNl2pOA==","_resolved":"/tmp/791b35312dc2cc82f75e3eb9618a6025/alistigo-features-0.2.10.tgz","_from":"file:alistigo-features-0.2.10.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-TwF6iiCNOQs+2TA2QdEREIdpc2fv3+OXA883QKTw8rURl0e5E/jZIfEPMb3thc5s1BVFEHc1sFy5upGDNl2pOA==","shasum":"48a22be8ad83c333b145692f9a550cadf7f28589","tarball":"https://registry.npmjs.org/@alistigo/features/-/features-0.2.10.tgz","fileCount":20,"unpackedSize":28503,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAhMnku2m5PE4woDvyQ/PUtkjuPm0YO1TbDxV46SmoCcAiEArHad/yyNCf24pRP5uA5GHr/jGUNCTh6YPvx6FXVhXV8="}]},"_npmUser":{"name":"mikael.labrut","email":"npm@alistigo.com"},"directories":{},"maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/features_0.2.10_1785077692570_0.32664472231502706"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-11T09:33:02.606Z","modified":"2026-07-26T14:54:52.850Z","0.2.2":"2026-06-11T09:33:02.982Z","0.2.3":"2026-06-28T15:16:38.750Z","0.2.4":"2026-07-02T14:15:06.729Z","0.2.5":"2026-07-02T15:36:29.727Z","0.2.6":"2026-07-19T14:50:04.683Z","0.2.7":"2026-07-23T11:41:52.914Z","0.2.8":"2026-07-24T07:40:17.847Z","0.2.9":"2026-07-24T11:36:00.351Z","0.2.10":"2026-07-26T14:54:52.715Z"},"bugs":{"url":"https://github.com/alistigo/holos/issues"},"author":{"name":"Mikael Labrut","email":"contact@alistigo.com"},"license":"MIT","homepage":"https://github.com/alistigo/holos/tree/main/packages/alistigo-features#readme","keywords":["alistigo","gherkin","bdd","behavior","specifications"],"repository":{"type":"git","url":"git+https://github.com/alistigo/holos.git","directory":"packages/alistigo-features"},"description":"Gherkin behavior specifications for Alistigo AI. Source of truth for what the app should do; the runner reads these files to assert conformance.","maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"readme":"# @alistigo/features\n\n[![npm version](https://img.shields.io/npm/v/@alistigo/features.svg?style=flat)](https://www.npmjs.com/package/@alistigo/features)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/TypeScript-strict-blue?logo=typescript)](https://www.typescriptlang.org/)\n[![CI](https://github.com/alistigo/holos/actions/workflows/ci.yml/badge.svg)](https://github.com/alistigo/holos/actions/workflows/ci.yml)\n\nBehavior specifications for Alistigo AI, written in [Gherkin](https://cucumber.io/docs/gherkin/reference/).\n\nThese `.feature` files are the **source of truth for what the app should do**. The runner ([`@alistigo/features-runner-playwright`](../../cli/alistigo-features-runner-playwright/)) reads them and asserts the app conforms. We follow TDD — features are written and reviewed *before* the code that satisfies them.\n\nThe package follows the universal conventions of the [`gherkin-features` skill](../../.agents/skills/gherkin-features/SKILL.md). The skill is the source of truth for the structure (organization, tooling, tag categories, glossary sections); this package fills in the Alistigo-specific contents.\n\n## What lives here\n\n```\npackages/alistigo-features/\n├── features/                 # the .feature files (the actual specs)\n│   └── core/                 # one folder per FEATURE GROUP (mirrors @core tag)\n├── src/\n│   ├── index.ts              # exports FEATURES_DIR + tag types\n│   └── tags.ts               # the typed tag taxonomy (Milestone / Group / Capability / …)\n├── tools/\n│   └── validate.ts           # structural validator (taxonomy + parse + folder/group parity)\n├── docs/\n│   ├── organization.md       # how features are organized\n│   ├── style-guide.md        # how to write a feature\n│   ├── tags.md               # the tag taxonomy with descriptions\n│   └── glossary.md           # ubiquitous language: Entities / Actors / Actions\n├── .prettierrc.json          # Prettier (with prettier-plugin-gherkin)\n├── gherklin.config.ts        # Gherkin lint rules\n├── biome.json                # Biome config (extends root, ignores .feature)\n├── package.json\n└── project.json              # Nx targets\n```\n\n## Tooling\n\n| Tool | What it does | When it runs |\n|------|--------------|--------------|\n| [Prettier](https://prettier.io/) + [`prettier-plugin-gherkin`](https://www.npmjs.com/package/prettier-plugin-gherkin) | Formats `.feature` files (indentation, alignment, tag placement) | `pnpm format` / on save |\n| [Gherklin](https://github.com/cjmarkham/Gherklin) | Lints `.feature` files (structural rules, naming, duplicates, tag presence) | `pnpm nx qa:lint` |\n| `tools/validate.ts` (custom) | Parses every feature with `@cucumber/gherkin` and checks the **tag taxonomy** is respected | `pnpm validate` |\n| [Biome](https://biomejs.dev/) | Lints/formats TS/JS in this package only (ignores `features/`) | repo standard |\n\nWhy this combination:\n- **Biome doesn't speak Gherkin** — Prettier + the gherkin plugin is the most-maintained option in 2026.\n- **Gherklin > older `gherkin-lint`** — modern TS/ESM, extensible, actively maintained.\n- The custom validator is a tiny TypeScript script that catches what the linter can't: tags that exist in files but aren't in the typed taxonomy. This keeps `src/tags.ts` and the actual `.feature` files in sync.\n\n## Conventions, in three places\n\n| If you want to know… | Read this |\n|----------------------|-----------|\n| **How features and folders are organized** | [docs/organization.md](docs/organization.md) |\n| **How to write a good Gherkin scenario** | [docs/style-guide.md](docs/style-guide.md) |\n| **What tags exist and what they mean** | [docs/tags.md](docs/tags.md) |\n| **What domain words mean (ubiquitous language)** | [docs/glossary.md](docs/glossary.md) |\n\nThe tag taxonomy is also typed in [`src/tags.ts`](src/tags.ts). When you add or rename a tag, update *both* files — the validator enforces it.\n\n## Common Commands\n\n```sh\npnpm format         # format all .feature files with Prettier\npnpm format:check   # check formatting without writing\npnpm nx qa:lint           # Biome (TS) + Gherklin (.feature)\npnpm nx qa:lint:gherkin   # Gherklin only\npnpm validate       # parse every .feature and check the tag taxonomy\npnpm typecheck      # TypeScript check on src/ and tools/\n```\n\nOr via Nx from the repo root:\n\n```sh\nnx run alistigo-features:lint\nnx run alistigo-features:format\nnx run alistigo-features:validate\n```\n\n## Programmatic access\n\n```ts\nimport { FEATURES_DIR, MILESTONE_TAGS, isKnownTag } from \"@alistigo/features\";\n\n// FEATURES_DIR is an absolute path — pass it to a runner.\nconsole.log(FEATURES_DIR);\n\n// MILESTONE_TAGS, CAPABILITY_TAGS, TEST_TYPE_TAGS, SUITE_TAGS, ACTOR_TAGS exported.\nconsole.log(MILESTONE_TAGS);  // ['@m1', '@m2', '@m3', '@m4', '@v1']\n\n// Validate a tag at runtime.\nisKnownTag(\"@m1\");  // true\nisKnownTag(\"@made-up\");  // false\n```\n\n## Contributing a feature\n\nSee [docs/organization.md](docs/organization.md) and [docs/style-guide.md](docs/style-guide.md). In short:\n\n1. Pick the group folder (`features/core/`, or a plugin folder once those land).\n2. Name the file after the **capability** it covers, kebab-case (`add-element.feature`, `display-list.feature`).\n3. Tag the `Feature:` with exactly one milestone tag (`@m1` …), exactly one group tag matching the folder (`@core`), and one or more capability tags (`@capability:element` …).\n4. Use only words from [docs/glossary.md](docs/glossary.md) in step text.\n5. Write declarative scenarios (business language, not UI selectors).\n6. Run `pnpm format && pnpm nx qa:lint && pnpm validate` before committing.\n","readmeFilename":"README.md"}