{"_id":"@aerofortress/eslint-plugin-assay","_rev":"4-df06285b01a8e50276a148a6d5c877b4","name":"@aerofortress/eslint-plugin-assay","dist-tags":{"latest":"0.4.0"},"versions":{"0.2.0":{"name":"@aerofortress/eslint-plugin-assay","version":"0.2.0","keywords":["eslint","eslint-plugin","avp","assay","acceptance","verification"],"author":{"name":"Lucas Tinoco"},"license":"MIT","_id":"@aerofortress/eslint-plugin-assay@0.2.0","maintainers":[{"name":"lucasrgt","email":"lucas.tinoco@hotmail.com"}],"homepage":"https://github.com/lucasrgt/acceptance-verification-protocol#readme","bugs":{"url":"https://github.com/lucasrgt/acceptance-verification-protocol/issues"},"dist":{"shasum":"14d0d6c9beb648b9361668e8936e9d4ec470a2d7","tarball":"https://registry.npmjs.org/@aerofortress/eslint-plugin-assay/-/eslint-plugin-assay-0.2.0.tgz","fileCount":4,"integrity":"sha512-bkA+13Ln9XqQS1tfrzeuBRpqRqkT4Frbki5LwYbmf4jvfgSIPIuOLbjsG2gLNxTPvIC8GwRTUdGukgHlHIA1Sw==","signatures":[{"sig":"MEUCIAL1rkbk89RjPWPR/SEfZyUFgxvpNktNYjUvtOlxdw6PAiEAhAFScuAHXRVGrAWUYwysfz14rPYbzqxq+C3hElVH6zc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aerofortress%2feslint-plugin-assay@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11016},"main":"index.cjs","gitHead":"9ff87ee1c50c9e8988b0983b10d0d1501752bbcd","scripts":{"test":"node index.test.cjs"},"_npmUser":{"name":"lucasrgt","email":"lucas.tinoco@hotmail.com"},"repository":{"url":"git+https://github.com/lucasrgt/acceptance-verification-protocol.git","type":"git","directory":"assay/eslint-plugin-assay"},"_npmVersion":"10.9.8","description":"Static coverage rule for Assay (AVP) — require a co-located verification for the archetypes a feature must cover.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-assay_0.2.0_1782944558728_0.07884162139346551","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aerofortress/eslint-plugin-assay","version":"0.3.0","keywords":["eslint","eslint-plugin","avp","assay","acceptance","verification"],"author":{"name":"Lucas Tinoco"},"license":"MIT","_id":"@aerofortress/eslint-plugin-assay@0.3.0","maintainers":[{"name":"lucasrgt","email":"lucas.tinoco@hotmail.com"}],"homepage":"https://github.com/lucasrgt/acceptance-verification-protocol#readme","bugs":{"url":"https://github.com/lucasrgt/acceptance-verification-protocol/issues"},"dist":{"shasum":"9dfc4eff312574573dbf93e4ded99a60ef398135","tarball":"https://registry.npmjs.org/@aerofortress/eslint-plugin-assay/-/eslint-plugin-assay-0.3.0.tgz","fileCount":4,"integrity":"sha512-oHzJkQJH/Ru1DgBnmdhdWmO5RtMVhkUdOR/4mSGGOE5xBY/B++HH/xlQnzl6hTlR0adG8NC4AURLcsaLbRsCbw==","signatures":[{"sig":"MEQCIAJJSbzHAf6rM4pvD6sosmcK3E5tCKGkdwlEiEjzZIVxAiBWtQBd7edGVVWn5EoE7VyhRmOgfnXMS7ymLuNWfNGznw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aerofortress%2feslint-plugin-assay@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11057},"main":"index.cjs","gitHead":"62eb4b29211fbdac097bfb03fde4d0ae447816fe","scripts":{"test":"node index.test.cjs"},"_npmUser":{"name":"lucasrgt","email":"lucas.tinoco@hotmail.com"},"repository":{"url":"git+https://github.com/lucasrgt/acceptance-verification-protocol.git","type":"git","directory":"assay/eslint-plugin-assay"},"_npmVersion":"10.9.8","description":"Static coverage rule for Assay (AVP) — require a co-located verification for the archetypes a feature must cover.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-assay_0.3.0_1784582203332_0.40679884070114447","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@aerofortress/eslint-plugin-assay","version":"0.3.1","keywords":["eslint","eslint-plugin","avp","assay","acceptance","verification"],"author":{"name":"Lucas Tinoco"},"license":"MIT","_id":"@aerofortress/eslint-plugin-assay@0.3.1","maintainers":[{"name":"lucasrgt","email":"lucas.tinoco@hotmail.com"}],"homepage":"https://github.com/lucasrgt/acceptance-verification-protocol#readme","bugs":{"url":"https://github.com/lucasrgt/acceptance-verification-protocol/issues"},"dist":{"shasum":"2169558d88e195c3ba070d92dc40f8bac0292d5d","tarball":"https://registry.npmjs.org/@aerofortress/eslint-plugin-assay/-/eslint-plugin-assay-0.3.1.tgz","fileCount":4,"integrity":"sha512-myJMEUGvsSRA/NcdYRsSfLQQRp3fozioxBS36pIXVjJaG5MsJFLL4phIQG0jZqswnII5IAR/vYol8kmAkzBdlg==","signatures":[{"sig":"MEUCIBcPryJq7kNvehGngU2cdh1ahL0NE/WMQ2yX4sAKQQLeAiEA/4V1T7oBBsFtd6RrhmcOZ98QYXgZRBFGj9Tbngcax74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aerofortress%2feslint-plugin-assay@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11057},"main":"index.cjs","gitHead":"1d4cde8b26a80bb3a46ea8118961b07dda6e82e9","scripts":{"test":"node index.test.cjs"},"_npmUser":{"name":"lucasrgt","email":"lucas.tinoco@hotmail.com"},"repository":{"url":"git+https://github.com/lucasrgt/acceptance-verification-protocol.git","type":"git","directory":"assay/eslint-plugin-assay"},"_npmVersion":"10.9.8","description":"Static coverage rule for Assay (AVP) — require a co-located verification for the archetypes a feature must cover.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-assay_0.3.1_1784582663881_0.34295846970605837","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aerofortress/eslint-plugin-assay","version":"0.4.0","description":"Static coverage rule for Assay (AVP) — require a co-located verification for the archetypes a feature must cover.","license":"MIT","author":{"name":"Lucas Tinoco"},"main":"index.cjs","repository":{"type":"git","url":"git+https://github.com/lucasrgt/acceptance-verification-protocol.git","directory":"assay/eslint-plugin-assay"},"keywords":["eslint","eslint-plugin","avp","assay","acceptance","verification"],"publishConfig":{"access":"public"},"scripts":{"test":"node index.test.cjs"},"peerDependencies":{"eslint":">=9"},"_id":"@aerofortress/eslint-plugin-assay@0.4.0","gitHead":"4a5e03dceeb0a375e5822e301dc4fdab447256af","bugs":{"url":"https://github.com/lucasrgt/acceptance-verification-protocol/issues"},"homepage":"https://github.com/lucasrgt/acceptance-verification-protocol#readme","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-8SwcKP7lbrPeSjWusVkWjlM0UqWxwc43vI5UsP6ZgCBcKq5d6pa8Gdv7nsGaaSIq8oX04+YlxR/3Dd8pXMH2QQ==","shasum":"0f269d70d940578dbca971cc256a40448e8b1410","tarball":"https://registry.npmjs.org/@aerofortress/eslint-plugin-assay/-/eslint-plugin-assay-0.4.0.tgz","fileCount":4,"unpackedSize":11057,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aerofortress%2feslint-plugin-assay@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDkt6iKsVJQ+UuoAVVn4v69CaNfVmRMn4GCeTYGhgSNCgIhAMz/8K+q68a2zKGY0ZDgdQsib5nkI8+lLqrKRsEn96Um"}]},"_npmUser":{"name":"lucasrgt","email":"lucas.tinoco@hotmail.com"},"directories":{},"maintainers":[{"name":"lucasrgt","email":"lucas.tinoco@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-plugin-assay_0.4.0_1784760943873_0.12421215805655428"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-01T22:22:38.593Z","modified":"2026-07-22T22:55:44.308Z","0.2.0":"2026-07-01T22:22:38.867Z","0.3.0":"2026-07-20T21:16:43.466Z","0.3.1":"2026-07-20T21:24:24.406Z","0.4.0":"2026-07-22T22:55:44.004Z"},"bugs":{"url":"https://github.com/lucasrgt/acceptance-verification-protocol/issues"},"author":{"name":"Lucas Tinoco"},"license":"MIT","homepage":"https://github.com/lucasrgt/acceptance-verification-protocol#readme","keywords":["eslint","eslint-plugin","avp","assay","acceptance","verification"],"repository":{"type":"git","url":"git+https://github.com/lucasrgt/acceptance-verification-protocol.git","directory":"assay/eslint-plugin-assay"},"description":"Static coverage rule for Assay (AVP) — require a co-located verification for the archetypes a feature must cover.","maintainers":[{"name":"lucasrgt","email":"lucas.tinoco@hotmail.com"}],"readme":"# eslint-plugin-assay\n\nThe **static** half of Assay's determinism story: catch *\"this feature has no\nverification\"* before runtime. Assay (`verify`) proves behaviour is correct at\nruntime; this rule proves a verification *exists* to be run. Together with a\nproject's existing shape rules (loading/error/empty), they give the full\ncompleteness story: **present → covered → correct**.\n\nAssay stays runtime-only by design (ADR 0001); coverage is a static concern, so it\nlives here, in your lint step.\n\n## Rule: `assay/require-verification`\n\nFor each file matching a `files` glob, require a co-located `*.assay.test.*` that calls\n`defineVerification(<archetype>, …)` for each listed archetype. The `archetypes`\nyou configure are the **archetype binding identifiers** as imported (e.g.\n`actionEffect`, `dataHonesty`), matched against the first argument of each\n`defineVerification` call.\n\n```js\n// eslint.config.js (flat config)\nconst assay = require(\"eslint-plugin-assay\");\n\nmodule.exports = [\n  {\n    files: [\"src/**/*.view.tsx\"],\n    plugins: { assay },\n    rules: {\n      \"assay/require-verification\": [\"error\", {\n        coverage: [\n          { files: \"src/**/*.view.tsx\", archetypes: [\"actionEffect\"] },\n          { files: \"src/**/checkout/**\", archetypes: [\"actionEffect\", \"payment\"] },\n        ],\n      }],\n    },\n  },\n];\n```\n\nAn AeroFortress Framework app enables it from its doctor and maps its slice/view types to\narchetypes — the rule itself is framework-neutral (matches \"AVP is for everyone\").\n\n## Read-only coverage scan\n\nMeasure the gap a project would have *today*, without changing anything:\n\n```\nnode node_modules/eslint-plugin-assay/scan.cjs <project-dir> [suffix=.view.tsx]\n```\n\nIt walks for `*.view.tsx` features and reports how many have a co-located Assay\nverification — the dogfood number.\n\n## What it claims\n\nOnly *\"did you check?\"*. Not *\"does the check pass?\"* (runtime → Assay `verify`) and\nnot *\"is the check complete?\"* (convergent → escape accrual). Honest boundary by\ndesign.\n","readmeFilename":"README.md"}