{"_id":"@democratize-quality/qualitylens","_rev":"9-7a1d705bf3ef6d5ff3ef38d54f166f35","name":"@democratize-quality/qualitylens","dist-tags":{"latest":"0.2.8"},"versions":{"0.1.0":{"name":"@democratize-quality/qualitylens","version":"0.1.0","keywords":["testing","playwright","qa","coverage","test-coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens@0.1.0","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"bin":{"qualitylens":"dist/index.js"},"dist":{"shasum":"8bb60b5a3786c0ce933407990ca9cf4510d96f5c","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens/-/qualitylens-0.1.0.tgz","fileCount":7,"integrity":"sha512-QRXqyhMaMFsMaFplTLtb++mLgJKI5UG04NINoqS4qLlAFFDqESoTT3W8rNQ9rxdK0C/4ELhi9H8jpasm4qdmTA==","signatures":[{"sig":"MEYCIQCI6SPWk7hQ2vlqq436ELyRiYZc3UZoUObmhSNAfLiRNAIhAP8GD/KW1MqoKkyjgCYLNoSU3DrydOGOVjkuk3Fu6dCz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87378},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"9d064bb2d498b5daac55e43f56e4364a7485f54a","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Test coverage map for Playwright automated tests, by functional area","directories":{},"_nodeVersion":"20.20.1","dependencies":{"ora":"^8.0.1","chalk":"^5.3.0","prompts":"^2.4.2","commander":"^12.0.0","@democratize-quality/qualitylens-core":"*"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens_0.1.0_1774779342359_0.7051510440030146","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@democratize-quality/qualitylens","version":"0.2.0","keywords":["testing","playwright","qa","coverage","test-coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens@0.2.0","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"bin":{"qualitylens":"dist/index.js"},"dist":{"shasum":"78ded677fced82675badbe51a781f297bcc02874","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens/-/qualitylens-0.2.0.tgz","fileCount":8,"integrity":"sha512-Wdwe5oN8sLhK/tO0MNGk6QlKsdmecroMusWXD8nhV1ovTTrSTKuWDuTg06pTYDtyDuAHCl/DmDKsAnbOo2mAzA==","signatures":[{"sig":"MEYCIQCDgAJ9Uiv2WRY4uSacW/1D4rZ1z2p9UYT5VFXnv7wqowIhAOFvFogYrnWhFyu5nq4On3DkiLQNeCogdD/bwuoD9EO/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92927},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"6720929d96f6d6089cad3a1b62e3f54f3cd8876d","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Test coverage map for Playwright automated tests, by functional area","directories":{},"_nodeVersion":"20.20.1","dependencies":{"ora":"^8.0.1","chalk":"^5.3.0","prompts":"^2.4.2","commander":"^12.0.0","@democratize-quality/qualitylens-core":"*"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens_0.2.0_1774781062080_0.8663396905011485","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@democratize-quality/qualitylens","version":"0.2.1","keywords":["testing","playwright","qa","coverage","test-coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens@0.2.1","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"bin":{"qualitylens":"dist/index.js"},"dist":{"shasum":"becb061ea39d3b2186da99c89f0caea002675b24","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens/-/qualitylens-0.2.1.tgz","fileCount":8,"integrity":"sha512-k/BNKibOjz5s1sdrQqfHPOlW+p9HAXljyhz1nQGtVDBG1DSMR9ZihggbUZabxNc7TANd/eDbH0x96czCSiAbfQ==","signatures":[{"sig":"MEUCIQDloCQTHWHPMQF+z7WbiBMmG+cy42JGbf1lh/vUggJ4TAIgPsvMQ/q79mxtmuq30lbPwL8OOmV+e/pv8sAKsMjXoBE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92927},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"dbfa6971513872aa301c27da6d7eb60dc79bc2eb","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Test coverage map for Playwright automated tests, by functional area","directories":{},"_nodeVersion":"20.20.1","dependencies":{"ora":"^8.0.1","chalk":"^5.3.0","prompts":"^2.4.2","commander":"^12.0.0","@democratize-quality/qualitylens-core":"*"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens_0.2.1_1774781992708_0.6286201552183996","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@democratize-quality/qualitylens","version":"0.2.2","keywords":["testing","playwright","qa","coverage","test-coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens@0.2.2","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"bin":{"qualitylens":"dist/index.js"},"dist":{"shasum":"fb4776500709e6e839a59d1dbd805eada7033b6d","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens/-/qualitylens-0.2.2.tgz","fileCount":8,"integrity":"sha512-Q5GqE2UTX+8UWl2J90wtPZntg+4z4gmAHeRHn4G9o90Bbp8iVSOaV66u5VPOMUJ4+p+5TSxXdaiJMsB3c11q+Q==","signatures":[{"sig":"MEUCIQDWsYw+35oVzBL6le0W9mLeWTPB3m07i+J+r54rtmWGAgIgGMtWB8Wota+ODrYjBnGyM0KXA8nXL5qQDBws8493t10=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92927},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"ae950d31d641129648985fb29e0dd28fa328acea","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Test coverage map for Playwright automated tests, by functional area","directories":{},"_nodeVersion":"20.20.1","dependencies":{"ora":"^8.0.1","chalk":"^5.3.0","prompts":"^2.4.2","commander":"^12.0.0","@democratize-quality/qualitylens-core":"*"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens_0.2.2_1774782340891_0.7960841206244349","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@democratize-quality/qualitylens","version":"0.2.4","keywords":["testing","playwright","qa","coverage","test-coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens@0.2.4","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"bin":{"qualitylens":"dist/index.js"},"dist":{"shasum":"9a91773ead8ec6c08323055a5c8ee0d47428a99f","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens/-/qualitylens-0.2.4.tgz","fileCount":8,"integrity":"sha512-HcHbJXDNYCYgprkOkonImKjI/FG9m6U6aMT5isbcvATFeu/lFxn+1jqaNvCqKtC/ctxriWhVmTXQw3zelC/5Bw==","signatures":[{"sig":"MEUCIBhLiibkz0M1GqAOsz3Dr+UVjeIoRyCSr4LRLZtjcdHkAiEA6Anm6RFFoBXN89IIJYWvZoPGuFQ1oa0ALeyo5skoA20=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92927},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"b71ba905439972eb514a552ad3eb74f6e6de576c","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Test coverage map for Playwright automated tests, by functional area","directories":{},"_nodeVersion":"20.20.1","dependencies":{"ora":"^8.0.1","chalk":"^5.3.0","prompts":"^2.4.2","commander":"^12.0.0","@democratize-quality/qualitylens-core":"*"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens_0.2.4_1774783048173_0.25088296370792373","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@democratize-quality/qualitylens","version":"0.2.5","keywords":["testing","playwright","qa","coverage","test-coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens@0.2.5","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"bin":{"qualitylens":"dist/index.js"},"dist":{"shasum":"6b8cae5b3b5c9a1a24277562fea74361c69d14a5","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens/-/qualitylens-0.2.5.tgz","fileCount":8,"integrity":"sha512-ghDFSC7bb2D8h30aZ5yu1ttOBUEmcyVJ2X6Yn2233jsQm1NY8ORIbu2f3cz89G98+QY0pdbwioXQMlogHp4Nrw==","signatures":[{"sig":"MEQCIBZqt3L1eK4S6srZNz7hwa7wdqh86sIGCkXmqzjmuENeAiAj+bLtHRp4Ci8SC2sVFG5lb800gRLQZP4zQo0n0lq0HQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93699},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"e21b8e52836eb71c53f126e87d2238547e0e8368","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Test coverage map for Playwright automated tests, by functional area","directories":{},"_nodeVersion":"20.20.1","dependencies":{"ora":"^8.0.1","chalk":"^5.3.0","prompts":"^2.4.2","commander":"^12.0.0","@democratize-quality/qualitylens-core":"*"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens_0.2.5_1774783546426_0.7014989143644665","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@democratize-quality/qualitylens","version":"0.2.6","keywords":["testing","playwright","qa","coverage","test-coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens@0.2.6","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"bin":{"qualitylens":"dist/index.js"},"dist":{"shasum":"222f8afee253262a5e0a5ceef89b3d931bdc0248","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens/-/qualitylens-0.2.6.tgz","fileCount":8,"integrity":"sha512-mw3WsSuiOi5N0WSZJYIsI9sMgUDYKAo2ajn9Q4IiXNDXF25VkVuMQ7MBL74v8sqbXLEMeinOux28vIMzLVjYZw==","signatures":[{"sig":"MEQCIDDNrPt+fd1jyo/OJPW+ulnmeTketYpnPV7CCBY/nnN1AiAa/Fy5Wf2yGXwamcnTMb72E7cdw+PXwJGYXONr9D6xPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117829},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"0a2b92d8ffb2e38e04f621b589ec1f9dabbbe7a8","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Test coverage map for Playwright automated tests, by functional area","directories":{},"_nodeVersion":"20.20.1","dependencies":{"ora":"^8.0.1","chalk":"^5.3.0","prompts":"^2.4.2","commander":"^12.0.0","@democratize-quality/qualitylens-core":"*"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens_0.2.6_1775131414340_0.03514152361240663","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@democratize-quality/qualitylens","version":"0.2.7","keywords":["testing","playwright","qa","coverage","test-coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens@0.2.7","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"bin":{"qualitylens":"dist/index.js"},"dist":{"shasum":"02b2a9d299d9df76e6c28b24eb4213ee33203fa4","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens/-/qualitylens-0.2.7.tgz","fileCount":8,"integrity":"sha512-qCHnPoli8AlLISkQQFh8Ctei1jwAEY8V22ubkOu9E0MmRtfIxdu10MyWTcTnUz02tbLoS3qm+TZhKZNfXg4M2w==","signatures":[{"sig":"MEUCIQC+UT1TCpOL/yTWaFaXiO5KFMzi1s1jVy701uaUGc6cbwIgN70DoDwAscwz66OXNUfra5e+LsepiVIzMsfcl7bn8RU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139945},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f26f5823f2a17568a0c9fd05242e58de78d7c9ab","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Test coverage map for Playwright automated tests, by functional area","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ora":"^8.0.1","chalk":"^5.3.0","prompts":"^2.4.2","commander":"^12.0.0","@democratize-quality/qualitylens-core":"*"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens_0.2.7_1775305697535_0.2342203945433523","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@democratize-quality/qualitylens","version":"0.2.8","description":"Test coverage map for Playwright automated tests, by functional area","author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","bin":{"qualitylens":"dist/index.js"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","lint":"tsc --noEmit"},"keywords":["testing","playwright","qa","coverage","test-coverage"],"dependencies":{"@democratize-quality/qualitylens-core":"*","chalk":"^5.3.0","commander":"^12.0.0","ora":"^8.0.1","prompts":"^2.4.2"},"devDependencies":{"@types/node":"^20.0.0","@types/prompts":"^2.4.9","tsup":"^8.0.0","typescript":"^5.4.0"},"engines":{"node":">=20.0.0"},"publishConfig":{"registry":"https://registry.npmjs.org","access":"public"},"_id":"@democratize-quality/qualitylens@0.2.8","gitHead":"2cad980efd5feb5db95df3d4b46449c32e4e1cf0","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-kTtiAGDuugSQxHifmblRqAm20kZS5harAA8NgEoG/OaRP43ssp/gayv7Fw/6/nmYXkr0IdmKoarJLnFt5iwnUw==","shasum":"2087586c0abded7690c0f85b50c9bb880c17ff0d","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens/-/qualitylens-0.2.8.tgz","fileCount":6,"unpackedSize":54967,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCeS+q8/wPzUsvoUSP3QOjxxmkVylsuy0L5cFdlFcIuSAIhAMaHOpFOJ9SQLQfzNWsF6nUB4MfpRX6CPfwzVFFfg+lc"}]},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"directories":{},"maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/qualitylens_0.2.8_1775306981175_0.24271065042821327"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-29T10:15:42.207Z","modified":"2026-04-04T12:49:41.486Z","0.1.0":"2026-03-29T10:15:42.530Z","0.2.0":"2026-03-29T10:44:22.232Z","0.2.1":"2026-03-29T10:59:52.857Z","0.2.2":"2026-03-29T11:05:41.047Z","0.2.4":"2026-03-29T11:17:28.331Z","0.2.5":"2026-03-29T11:25:46.618Z","0.2.6":"2026-04-02T12:03:34.470Z","0.2.7":"2026-04-04T12:28:17.702Z","0.2.8":"2026-04-04T12:49:41.349Z"},"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","keywords":["testing","playwright","qa","coverage","test-coverage"],"description":"Test coverage map for Playwright automated tests, by functional area","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"readme":"# qualitylens\n\n> **Test coverage map — automated + manual, by functional area.**\n> Know exactly what's tested, what isn't, and where the risk is — before every release.\n\n---\n\n## The problem\n\nYour CI is green. Your Playwright suite has 600 tests. But does `/billing/refund` have a test?\nDoes `/onboarding/import-data`? When was `/auth/sso` last tested manually?\n\nNobody knows. Until production breaks.\n\n`qualitylens` answers the question your coverage tool can't:\n**\"Which user-facing flows have no test coverage — automated or manual?\"**\n\n---\n\n## Free vs Pro\n\n| Feature | Free (`qualitylens`) | Pro (`qualitylens` + `qualitylens-pro`) |\n|---------|-----------------|--------------------------------|\n| Playwright test source | ✅ | ✅ |\n| YAML manual coverage | ✅ | ✅ |\n| Console reporter | ✅ | ✅ |\n| `qualitylens init` / `validate` | ✅ | ✅ |\n| CI `--fail-under` gate | ✅ | ✅ |\n| HTML reporter | — | ✅ |\n| JSON reporter | — | ✅ |\n| Markdown reporter | — | ✅ |\n| Azure DevOps Test Plans | — | ✅ |\n\nBoth tiers use the single `qualitylens` binary. Pro features activate automatically when `qualitylens-pro` is installed alongside.\n\n---\n\n## Installation\n\n**Free:**\n```bash\nnpm install -g @democratize-quality/qualitylens\n```\n\n**Pro:**\n```bash\nnpm install -g @democratize-quality/qualitylens @democratize-quality/qualitylens-pro\n```\n\nNo config change needed — the CLI detects `qualitylens-pro` at runtime.\n\n---\n\n## Quick start\n\n```bash\nnpx @democratize-quality/qualitylens init   # creates qualitylens.yaml in your project root\nnpx @democratize-quality/qualitylens scan   # generates console report (+ HTML/JSON/MD with Pro)\n```\n\nSample output:\n\n```\nqualitylens: 68% total coverage (41% auto, 27% manual, 32% none)\n\nAuthentication         ████████████████████ 92% ✅\nCheckout & Payments    ████████████░░░░░░░░ 54% ⚠️\nOnboarding             ████████████░░░░░░░░ 60% ⚠️\nAdmin & Settings       █████░░░░░░░░░░░░░░░ 28% ❌\n\nNo coverage found (8 routes):\n  ❌ /checkout/promo-code\n  ❌ /billing/refund\n  ❌ /billing/invoice-download\n  ❌ /admin/billing-settings\n  ❌ /admin/permissions\n  ❌ /admin/audit-log\n  ❌ /onboarding/import-data\n  ❌ /auth/mfa-setup\n\nStale manual coverage (>30 days, 2 routes):\n  ⚠️  /onboarding/welcome     — last tested 34d ago (priya)\n  ⚠️  /onboarding/profile-setup — last tested 34d ago (priya)\n```\n\n---\n\n## How it works\n\n`qualitylens` combines test sources against your app routes:\n\n| Source | What it reads | How | Tier |\n|--------|--------------|-----|------|\n| Playwright | `*.spec.ts` test titles | AST parsing | Free |\n| YAML | `manualCoverage` entries | YAML file | Free |\n| Azure DevOps | Test Plan test case names | REST API | Pro |\n\nIt fuzzy-matches test descriptions against your app's routes, groups them by functional area, and reports what's covered, what's manual-only, what's stale, and what has no coverage at all.\n\nSee [docs/HOW_IT_WORKS.md](docs/HOW_IT_WORKS.md) for full details.\n\n---\n\n## Configuration\n\nPlace a `qualitylens.yaml` in your project root:\n\n```yaml\nprojectName: my-saas-app\nstaleThresholdDays: 30\n\nroutes:\n  type: nextjs\n  path: ./pages\n\nareas:\n  - name: Checkout & Payments\n    patterns: [/checkout, /billing]\n  - name: Authentication\n    patterns: [/auth, /login]\n\n# Optional: Azure DevOps Test Plans\n# ado:\n#   orgUrl: https://dev.azure.com/myorg\n#   project: MyProject\n#   planId: 42\n#   patEnvVar: ADO_PAT\n\n# Manual coverage (from Excel, exploratory testing, etc.)\nmanualCoverage:\n  - route: /auth/sso\n    lastTested: 2025-03-01\n    tester: james\n\n# CI gates\nthresholds:\n  - area: Checkout & Payments\n    minCoverage: 70\n```\n\nFull reference: [docs/CONFIGURATION.md](docs/CONFIGURATION.md)\n\n---\n\n## CLI reference\n\n```bash\nqualitylens scan [options]\n  --config <path>       path to qualitylens.yaml (default: ./qualitylens.yaml)\n  --output <path>       output directory (default: ./)\n  --format <formats>    console (free) | html,json,markdown (Pro) — comma-separated\n  --since <branch>      only show routes changed since this git branch\n  --fail-under <n>      exit 1 if total coverage < n (CI gate)\n\nqualitylens init            interactive setup — creates qualitylens.yaml\nqualitylens validate        checks config and ADO connection\n```\n\n> **Pro formats** — if you run `--format html` without `qualitylens-pro` installed, qualitylens prints an install hint and continues. Nothing crashes.\n\n---\n\n## CI integration\n\n**Free:**\n```yaml\n- name: Run qualitylens\n  run: npx @democratize-quality/qualitylens scan --format console --fail-under 60\n```\n\n**Pro** (HTML + JSON report, ADO source):\n```yaml\n- name: Run qualitylens Pro\n  run: npx @democratize-quality/qualitylens scan --format html,json,console --fail-under 60\n  env:\n    ADO_PAT: ${{ secrets.ADO_PAT }}\n```\n\nFull examples: [docs/CI_INTEGRATION.md](docs/CI_INTEGRATION.md)\n\n---\n\n## VS Code extension (Pro)\n\nThe qualitylens Pro VS Code extension shows a live coverage dashboard in your sidebar.\nThe panel updates automatically when `qualitylens.yaml` changes. Requires `qualitylens-pro`.\n\n---\n\n## Built by\n\n**Raj Uppadhyay** — author of *Scalable Test Automation with Playwright*\n\nRelated tools:\n- [playwright-mcp-yaml](https://npmjs.com/package/playwright-mcp-yaml)\n- [ADO Testing Extension](https://marketplace.visualstudio.com/items?itemName=RajUppadhyay.ado-testingextension)\n","readmeFilename":"README.md"}